Enqueue a student progression job
curl --request POST \
--url https://api.alpha-1edtech.ai/edubridge/progression/enqueue \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"assignmentId": 123,
"studentTimebackId": "<string>",
"studentEmail": "<string>",
"subject": "<string>",
"grade": "<string>",
"currentCourseSourcedId": "<string>",
"score": 50,
"readOnly": true,
"extendedCatalog": true,
"aiModel": "<string>",
"existingPlan": true,
"gapAnalysisId": null
}
'import requests
url = "https://api.alpha-1edtech.ai/edubridge/progression/enqueue"
payload = {
"assignmentId": 123,
"studentTimebackId": "<string>",
"studentEmail": "<string>",
"subject": "<string>",
"grade": "<string>",
"currentCourseSourcedId": "<string>",
"score": 50,
"readOnly": True,
"extendedCatalog": True,
"aiModel": "<string>",
"existingPlan": True,
"gapAnalysisId": None
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
assignmentId: 123,
studentTimebackId: '<string>',
studentEmail: '<string>',
subject: '<string>',
grade: '<string>',
currentCourseSourcedId: '<string>',
score: 50,
readOnly: true,
extendedCatalog: true,
aiModel: '<string>',
existingPlan: true,
gapAnalysisId: null
})
};
fetch('https://api.alpha-1edtech.ai/edubridge/progression/enqueue', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.alpha-1edtech.ai/edubridge/progression/enqueue",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'assignmentId' => 123,
'studentTimebackId' => '<string>',
'studentEmail' => '<string>',
'subject' => '<string>',
'grade' => '<string>',
'currentCourseSourcedId' => '<string>',
'score' => 50,
'readOnly' => true,
'extendedCatalog' => true,
'aiModel' => '<string>',
'existingPlan' => true,
'gapAnalysisId' => null
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.alpha-1edtech.ai/edubridge/progression/enqueue"
payload := strings.NewReader("{\n \"assignmentId\": 123,\n \"studentTimebackId\": \"<string>\",\n \"studentEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"grade\": \"<string>\",\n \"currentCourseSourcedId\": \"<string>\",\n \"score\": 50,\n \"readOnly\": true,\n \"extendedCatalog\": true,\n \"aiModel\": \"<string>\",\n \"existingPlan\": true,\n \"gapAnalysisId\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.alpha-1edtech.ai/edubridge/progression/enqueue")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"assignmentId\": 123,\n \"studentTimebackId\": \"<string>\",\n \"studentEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"grade\": \"<string>\",\n \"currentCourseSourcedId\": \"<string>\",\n \"score\": 50,\n \"readOnly\": true,\n \"extendedCatalog\": true,\n \"aiModel\": \"<string>\",\n \"existingPlan\": true,\n \"gapAnalysisId\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.alpha-1edtech.ai/edubridge/progression/enqueue")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assignmentId\": 123,\n \"studentTimebackId\": \"<string>\",\n \"studentEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"grade\": \"<string>\",\n \"currentCourseSourcedId\": \"<string>\",\n \"score\": 50,\n \"readOnly\": true,\n \"extendedCatalog\": true,\n \"aiModel\": \"<string>\",\n \"existingPlan\": true,\n \"gapAnalysisId\": null\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"messageId": "<string>"
}{
"error": "<string>",
"details": "<unknown>"
}{
"error": "<string>",
"details": "<unknown>"
}{
"error": "<string>",
"details": "<unknown>"
}Progression
Enqueue a student progression job
Called by AlphaTest DCAN after completing gap analysis. The progression-enqueue Lambda places a message on the student-progression SQS queue.
POST
/
edubridge
/
progression
/
enqueue
Enqueue a student progression job
curl --request POST \
--url https://api.alpha-1edtech.ai/edubridge/progression/enqueue \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"assignmentId": 123,
"studentTimebackId": "<string>",
"studentEmail": "<string>",
"subject": "<string>",
"grade": "<string>",
"currentCourseSourcedId": "<string>",
"score": 50,
"readOnly": true,
"extendedCatalog": true,
"aiModel": "<string>",
"existingPlan": true,
"gapAnalysisId": null
}
'import requests
url = "https://api.alpha-1edtech.ai/edubridge/progression/enqueue"
payload = {
"assignmentId": 123,
"studentTimebackId": "<string>",
"studentEmail": "<string>",
"subject": "<string>",
"grade": "<string>",
"currentCourseSourcedId": "<string>",
"score": 50,
"readOnly": True,
"extendedCatalog": True,
"aiModel": "<string>",
"existingPlan": True,
"gapAnalysisId": None
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
assignmentId: 123,
studentTimebackId: '<string>',
studentEmail: '<string>',
subject: '<string>',
grade: '<string>',
currentCourseSourcedId: '<string>',
score: 50,
readOnly: true,
extendedCatalog: true,
aiModel: '<string>',
existingPlan: true,
gapAnalysisId: null
})
};
fetch('https://api.alpha-1edtech.ai/edubridge/progression/enqueue', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.alpha-1edtech.ai/edubridge/progression/enqueue",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'assignmentId' => 123,
'studentTimebackId' => '<string>',
'studentEmail' => '<string>',
'subject' => '<string>',
'grade' => '<string>',
'currentCourseSourcedId' => '<string>',
'score' => 50,
'readOnly' => true,
'extendedCatalog' => true,
'aiModel' => '<string>',
'existingPlan' => true,
'gapAnalysisId' => null
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.alpha-1edtech.ai/edubridge/progression/enqueue"
payload := strings.NewReader("{\n \"assignmentId\": 123,\n \"studentTimebackId\": \"<string>\",\n \"studentEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"grade\": \"<string>\",\n \"currentCourseSourcedId\": \"<string>\",\n \"score\": 50,\n \"readOnly\": true,\n \"extendedCatalog\": true,\n \"aiModel\": \"<string>\",\n \"existingPlan\": true,\n \"gapAnalysisId\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.alpha-1edtech.ai/edubridge/progression/enqueue")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"assignmentId\": 123,\n \"studentTimebackId\": \"<string>\",\n \"studentEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"grade\": \"<string>\",\n \"currentCourseSourcedId\": \"<string>\",\n \"score\": 50,\n \"readOnly\": true,\n \"extendedCatalog\": true,\n \"aiModel\": \"<string>\",\n \"existingPlan\": true,\n \"gapAnalysisId\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.alpha-1edtech.ai/edubridge/progression/enqueue")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assignmentId\": 123,\n \"studentTimebackId\": \"<string>\",\n \"studentEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"grade\": \"<string>\",\n \"currentCourseSourcedId\": \"<string>\",\n \"score\": 50,\n \"readOnly\": true,\n \"extendedCatalog\": true,\n \"aiModel\": \"<string>\",\n \"existingPlan\": true,\n \"gapAnalysisId\": null\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"messageId": "<string>"
}{
"error": "<string>",
"details": "<unknown>"
}{
"error": "<string>",
"details": "<unknown>"
}{
"error": "<string>",
"details": "<unknown>"
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
application/json
- Option 1
- Option 2
- Option 3
The assignment ID from AlphaTest
The student's Timeback sourced ID
The student's email address
Academic subject (e.g. Math, Language)
Grade level (e.g. 5, K)
The sourced ID of the student's current course
The progression flow type
Available options:
dcan, existingPlan, legacy Finite test score percentage from 0 through 100
Required range:
0 <= x <= 100Type of completed test
Available options:
end of course, test out, placement If true, skip side effects (dry run)
If true, fetch catalogs for adjacent grades (grade±2)
LLM model to use for gap analysis (optional)
If true, reuse saved lesson recommendations instead of re-fetching
Must be omitted for legacy messages.
⌘I