curl "https://api.u1.archetypeai.app/v0.5/batch/jobs/job_2abc3def4ghi5jkl6mno7pqr/progress?limit=20" \
-H "Authorization: Bearer $ATAI_API_KEY"
import requests
import os
api_key = os.environ.get("ATAI_API_KEY")
job_id = "job_2abc3def4ghi5jkl6mno7pqr"
response = requests.get(
f"https://api.u1.archetypeai.app/v0.5/batch/jobs/{job_id}/progress",
headers={"Authorization": f"Bearer {api_key}"},
params={"limit": 20}
)
data = response.json()
for entry in data["data"]:
print(f" Step {entry['step']}: {entry.get('message', '')} — {entry['metrics']}")
# Pass the cursor back verbatim as `after` to fetch the next page.
if data["has_more"]:
print(f"Next page cursor: {data['next_cursor']}")
const jobId = 'job_2abc3def4ghi5jkl6mno7pqr';
const params = new URLSearchParams({ limit: '20' });
const response = await fetch(`https://api.u1.archetypeai.app/v0.5/batch/jobs/${jobId}/progress?${params}`, {
headers: {
'Authorization': `Bearer ${process.env.ATAI_API_KEY}`
}
});
const data = await response.json();
data.data.forEach(entry => {
console.log(` Step ${entry.step}: ${entry.message || ''}`);
});
if (data.has_more) {
console.log(`Next page cursor: ${data.next_cursor}`);
}
{
"job_id": "job_2abc3def4ghi5jkl6mno7pqr",
"data": [
{
"id": 501,
"kind": "inference",
"step": 1,
"message": "Processing input 1 of 10",
"metrics": {
"percent_complete": 10,
"items_processed": 1,
"items_total": 10
},
"payload": {},
"input_id": "inp_abc123def456",
"index": 0,
"created_at": "2026-04-14T10:03:00Z"
},
{
"id": 502,
"kind": "inference",
"step": 2,
"message": "Processing input 5 of 10",
"metrics": {
"percent_complete": 50,
"items_processed": 5,
"items_total": 10
},
"payload": {},
"input_id": null,
"index": null,
"created_at": "2026-04-14T10:06:00Z"
}
],
"has_more": true,
"next_cursor": "<cursor>",
"prev_cursor": null
}
{
"code": "NOT_FOUND",
"message": "Job not found",
"error_uid": "err_abc123"
}
{
"detail": "Invalid access with key: api_key_not_found"
}
Progress
List Job Progress
Retrieve cursor-paginated progress entries for a specific job
GET
/
batch
/
jobs
/
{id}
/
progress
curl "https://api.u1.archetypeai.app/v0.5/batch/jobs/job_2abc3def4ghi5jkl6mno7pqr/progress?limit=20" \
-H "Authorization: Bearer $ATAI_API_KEY"
import requests
import os
api_key = os.environ.get("ATAI_API_KEY")
job_id = "job_2abc3def4ghi5jkl6mno7pqr"
response = requests.get(
f"https://api.u1.archetypeai.app/v0.5/batch/jobs/{job_id}/progress",
headers={"Authorization": f"Bearer {api_key}"},
params={"limit": 20}
)
data = response.json()
for entry in data["data"]:
print(f" Step {entry['step']}: {entry.get('message', '')} — {entry['metrics']}")
# Pass the cursor back verbatim as `after` to fetch the next page.
if data["has_more"]:
print(f"Next page cursor: {data['next_cursor']}")
const jobId = 'job_2abc3def4ghi5jkl6mno7pqr';
const params = new URLSearchParams({ limit: '20' });
const response = await fetch(`https://api.u1.archetypeai.app/v0.5/batch/jobs/${jobId}/progress?${params}`, {
headers: {
'Authorization': `Bearer ${process.env.ATAI_API_KEY}`
}
});
const data = await response.json();
data.data.forEach(entry => {
console.log(` Step ${entry.step}: ${entry.message || ''}`);
});
if (data.has_more) {
console.log(`Next page cursor: ${data.next_cursor}`);
}
{
"job_id": "job_2abc3def4ghi5jkl6mno7pqr",
"data": [
{
"id": 501,
"kind": "inference",
"step": 1,
"message": "Processing input 1 of 10",
"metrics": {
"percent_complete": 10,
"items_processed": 1,
"items_total": 10
},
"payload": {},
"input_id": "inp_abc123def456",
"index": 0,
"created_at": "2026-04-14T10:03:00Z"
},
{
"id": 502,
"kind": "inference",
"step": 2,
"message": "Processing input 5 of 10",
"metrics": {
"percent_complete": 50,
"items_processed": 5,
"items_total": 10
},
"payload": {},
"input_id": null,
"index": null,
"created_at": "2026-04-14T10:06:00Z"
}
],
"has_more": true,
"next_cursor": "<cursor>",
"prev_cursor": null
}
{
"code": "NOT_FOUND",
"message": "Job not found",
"error_uid": "err_abc123"
}
{
"detail": "Invalid access with key: api_key_not_found"
}
Requires version 1.1.0 or later of the Archetype platform.
Overview
This endpoint returns a cursor-paginated list of progress entries reported during job execution, newest first. Progress entries provide real-time metrics and status updates as the job processes inputs.Request
string
required
The unique job identifier
string
Filter progress entries by kind
string
Filter progress entries associated with a specific input
integer
default:"100"
Page size, between
1 and 1000. Clamped server-side.string
Forward cursor: return entries recorded before the entry with this ID. Pass the previous page’s
next_cursor. Mutually exclusive with before — sending both returns 400. v1.1.11+string
Backward cursor: return entries recorded after the entry with this ID. Pass the current page’s
prev_cursor. Mutually exclusive with after. v1.1.11+Response
string
The job identifier
array
Array of progress entry objects, newest first (
created_at descending) in both cursor
directions, each containing:id— Unique progress entry identifierkind— Type of progress entrystep— Step number within the processing sequence. Numbered over the whole filtered set, so it stays consistent across pagesmessage— Optional human-readable progress messagemetrics— Metrics data (e.g., percentage complete, items processed)payload— Additional progress-specific datainput_id— Associated input ID (if applicable)index— Index within the input (if applicable)created_at— Progress entry timestamp
string
Cursor for the next page in the same direction — pass it as
after when paging forward, or as
before when the request used before. null when has_more is false. v1.1.11+string
Cursor to step back the way this page was reached — pass it as
before after a forward page, or
as after after a backward one. null when the request carried no cursor. v1.1.11+curl "https://api.u1.archetypeai.app/v0.5/batch/jobs/job_2abc3def4ghi5jkl6mno7pqr/progress?limit=20" \
-H "Authorization: Bearer $ATAI_API_KEY"
import requests
import os
api_key = os.environ.get("ATAI_API_KEY")
job_id = "job_2abc3def4ghi5jkl6mno7pqr"
response = requests.get(
f"https://api.u1.archetypeai.app/v0.5/batch/jobs/{job_id}/progress",
headers={"Authorization": f"Bearer {api_key}"},
params={"limit": 20}
)
data = response.json()
for entry in data["data"]:
print(f" Step {entry['step']}: {entry.get('message', '')} — {entry['metrics']}")
# Pass the cursor back verbatim as `after` to fetch the next page.
if data["has_more"]:
print(f"Next page cursor: {data['next_cursor']}")
const jobId = 'job_2abc3def4ghi5jkl6mno7pqr';
const params = new URLSearchParams({ limit: '20' });
const response = await fetch(`https://api.u1.archetypeai.app/v0.5/batch/jobs/${jobId}/progress?${params}`, {
headers: {
'Authorization': `Bearer ${process.env.ATAI_API_KEY}`
}
});
const data = await response.json();
data.data.forEach(entry => {
console.log(` Step ${entry.step}: ${entry.message || ''}`);
});
if (data.has_more) {
console.log(`Next page cursor: ${data.next_cursor}`);
}
{
"job_id": "job_2abc3def4ghi5jkl6mno7pqr",
"data": [
{
"id": 501,
"kind": "inference",
"step": 1,
"message": "Processing input 1 of 10",
"metrics": {
"percent_complete": 10,
"items_processed": 1,
"items_total": 10
},
"payload": {},
"input_id": "inp_abc123def456",
"index": 0,
"created_at": "2026-04-14T10:03:00Z"
},
{
"id": 502,
"kind": "inference",
"step": 2,
"message": "Processing input 5 of 10",
"metrics": {
"percent_complete": 50,
"items_processed": 5,
"items_total": 10
},
"payload": {},
"input_id": null,
"index": null,
"created_at": "2026-04-14T10:06:00Z"
}
],
"has_more": true,
"next_cursor": "<cursor>",
"prev_cursor": null
}
{
"code": "NOT_FOUND",
"message": "Job not found",
"error_uid": "err_abc123"
}
{
"detail": "Invalid access with key: api_key_not_found"
}
Was this page helpful?