GET
/api/v1/jobs/{job_id}Job Status
Check on a job until it succeeds or fails.
Every job endpoint answers straight away with an id and a status_url. Poll that URL until status is succeeded or failed, or pass a callback_url when you start the job and skip polling.
- Poll status_urlIt stays right if a route moves
- Outputs expireDownload and keep your own copy
- Same shape as webhooksOne parser for both
curl https://api.kreatorsfactory.com/api/v1/jobs/{job_id} \ -H "Authorization: Bearer $KREATORSFACTORY_API_KEY"How it works
Every job endpoint answers straight away with an id and a status_url. Poll that URL until status is succeeded or failed, or pass a callback_url when you start the job and skip polling.
Response fields
| Field | Type | Required | Description |
|---|---|---|---|
status | string | No | queued, processing, succeeded or failed. |
output_url | string | null | No | A signed link that expires. Empty until the job succeeds. |
charged_usd | number | null | No | Empty until billing settles, usually on the poll that first sees the finished job. |
error | object | null | No | A stable code and a message, on a failed job only. |
Two things to know
charged_usd is empty until billing settles
Treat it as nullable. It fills in once the job has finished and been reconciled, usually on the poll that first sees the finished state.
Output links expire
Results are signed links with a limited life. Download the output and keep it on your own storage rather than linking to ours.
Response
Response200
{ "id": "7f3c2a9e-…", "status": "succeeded", "output_url": "https://…", "charged_usd": 0.12, "error": null}Money is in US dollars. Times are ISO 8601, in UTC.
Errors
Every error arrives as {"error": {"code", "message"}}. Branch on code; the message may change. All errors.
| HTTP | Code | What it means |
|---|---|---|
| 401 | unauthorized | Missing, unknown or revoked key. |
| 404 | not_found | No such job, or it isn't yours. |
These arrive inside error on a job that finished as failed, not as an HTTP status. A failed job is refunded in full.
| Code on the job | What it means |
|---|---|
face_not_detected | No face was found in the input. |
unsupported_format | The file couldn't be decoded once work started. |
input_too_large | Over a size or duration limit found during processing. |
content_rejected | The input or the result failed a content check. |
processing_failed | The render didn't complete. |