curl --request GET \
--url "${UNSTRUCTURED_API_URL}/api/v1/jobs/b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e/file-status" \
--header "unstructured-api-key: ${UNSTRUCTURED_API_KEY}"
{
"id": "b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
"files": [
{
"record_id": "a6a27cf4-684f-45ed-992e-d2b1be77f2c6",
"document": "s3://my-bucket/input/document.pdf",
"status": "IN_PROGRESS",
"error": null,
"time_elapsed": null,
"current_node": {
"id": "11a2b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b6c",
"status": "IN_PROGRESS",
"tries": 1,
"time_elapsed": 2.4
},
"discovered_by_node_id": "51a2b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b6c"
}
],
"truncated": false,
"index_finished": true,
"generated_at": "2026-01-01T00:02:30Z"
}
Job
Get per-file job status
Retrieve each file’s processing status and current workflow step, with indicators for source discovery and list truncation.
GET
/
api
/
v1
/
jobs
/
{job_id}
/
file-status
curl --request GET \
--url "${UNSTRUCTURED_API_URL}/api/v1/jobs/b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e/file-status" \
--header "unstructured-api-key: ${UNSTRUCTURED_API_KEY}"
{
"id": "b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
"files": [
{
"record_id": "a6a27cf4-684f-45ed-992e-d2b1be77f2c6",
"document": "s3://my-bucket/input/document.pdf",
"status": "IN_PROGRESS",
"error": null,
"time_elapsed": null,
"current_node": {
"id": "11a2b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b6c",
"status": "IN_PROGRESS",
"tries": 1,
"time_elapsed": 2.4
},
"discovered_by_node_id": "51a2b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b6c"
}
],
"truncated": false,
"index_finished": true,
"generated_at": "2026-01-01T00:02:30Z"
}
Use this endpoint to check per-file progress while a job runs. Call it at most 12 times per minute for each job and authenticated identity. Read the job status alongside this response to determine whether processing has finished.
In the returned
Path parameters
string
required
Unique identifier of the job.
Response
string
required
Unique identifier of the job.
array
required
One entry per file. Each entry includes its
record_id, document, and overall processing status (READY, IN_PROGRESS, SUCCESS, or FAILURE). It can also include an error, time_elapsed in seconds, the current_node and its status, and discovered_by_node_id.boolean
true when the per-job cap truncates this file list. If true, a file missing from the list can still be part of the job.boolean | null
true when source connectors have finished listing files. A failed source also counts as finished. null means the API cannot determine this state.string
ISO 8601 time when the job report was generated. This time can lag behind live processing.
files array, use discovered_by_node_id to identify files listed by a source connector. That subset is complete when index_finished is true and truncated is false. Later workflow steps can introduce more files.
curl --request GET \
--url "${UNSTRUCTURED_API_URL}/api/v1/jobs/b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e/file-status" \
--header "unstructured-api-key: ${UNSTRUCTURED_API_KEY}"
{
"id": "b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
"files": [
{
"record_id": "a6a27cf4-684f-45ed-992e-d2b1be77f2c6",
"document": "s3://my-bucket/input/document.pdf",
"status": "IN_PROGRESS",
"error": null,
"time_elapsed": null,
"current_node": {
"id": "11a2b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b6c",
"status": "IN_PROGRESS",
"tries": 1,
"time_elapsed": 2.4
},
"discovered_by_node_id": "51a2b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b6c"
}
],
"truncated": false,
"index_finished": true,
"generated_at": "2026-01-01T00:02:30Z"
}
Was this page helpful?

