EVERYTHING Studios
API Documentation

Job status

Retrieve a single job by id, or page through your account's jobs. Both endpoints return the same task object — the one shape you'll see while polling and in webhook payloads.

GET/v1/jobs/{id}

Retrieve a single job. Replace {id} with the job_id returned at creation.

GET /v1/jobs/{id}
curl https://api.everythingstudios.ai/v1/jobs/01JAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \
  -H "Authorization: Bearer esk_YOUR_API_KEY"

A successful response is the full task object:

200 OK
{
  "task_id": "01JAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  "type": "image-to-3d",
  "status": "SUCCEEDED",
  "progress": 100,
  "model_urls": {
    "glb": "https://assets.everythingstudios.ai/models/01JAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/model.glb"
  },
  "thumbnail_url": "https://assets.everythingstudios.ai/models/01JAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/thumb.jpg",
  "error": null,
  "created_at": "2026-01-15T10:04:11Z",
  "finished_at": "2026-01-15T10:07:52Z"
}

Task object

FieldTypeRequiredDescription
task_idstring—ULID. The same value as the job_id returned when you created the job.
typestring—Always image-to-3d — the only supported job type.
statusstring—PENDING | QUEUED | IN_PROGRESS | SUCCEEDED | FAILED | CANCELED.
progressnumber—0–100, advisory. A rough signal for progress bars — treat status as the source of truth.
model_urlsobject | null—Contains the key glb — a permanent CDN URL on assets.everythingstudios.ai, no expiry. GLB is the only format produced today.
thumbnail_urlstring | null—JPEG thumbnail on the same CDN. Permanent.
errorobject | null—{ code, message } describing the failure, present on FAILED jobs; null otherwise.
created_atstring—ISO 8601 timestamp of job creation.
finished_atstring—ISO 8601 timestamp. null until the job reaches a terminal status.

Progress guidance

progress is advisory, but it maps to real pipeline stages:

  • 0 — job accepted.
  • 5 — preparing inputs.
  • 25 — queued and allocated for inference.
  • up to 90 — inference complete, model in post-processing.
  • 100 — done.

Stop polling once status reaches a terminal value — SUCCEEDED, FAILED or CANCELED. A poll every 2–5 seconds is a comfortable cadence; if you'd rather not poll at all, switch to webhook delivery. There is no SSE or long-poll endpoint.

Jobs cannot be canceled through the public API — once submitted, a job runs to completion.

GET/v1/jobs

List your account's jobs, newest first, with cursor pagination.

Query parameters

FieldTypeRequiredDescription
statusstringnoFilter by status — one of PENDING, QUEUED, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED. Any other value returns 400.
limitnumbernoPage size, 1–100. Defaults to 20.
cursorstringnoOpaque base64url pagination token from a previous response's next_cursor. An invalid token returns 400 invalid_cursor.

The response is a page of task objects plus the cursor for the next page. next_cursor is omitted on the last page. Jobs are returned newest first:

GET /v1/jobs?status=SUCCEEDED&limit=5
curl "https://api.everythingstudios.ai/v1/jobs?status=SUCCEEDED&limit=5" \
  -H "Authorization: Bearer esk_YOUR_API_KEY"
200 OK
{
  "jobs": [
    {
      "task_id": "01JAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
      "type": "image-to-3d",
      "status": "SUCCEEDED",
      "progress": 100,
      "model_urls": {
        "glb": "https://assets.everythingstudios.ai/models/01JAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/model.glb"
      },
      "thumbnail_url": "https://assets.everythingstudios.ai/models/01JAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/thumb.jpg",
      "error": null,
      "created_at": "2026-01-15T10:04:11Z",
      "finished_at": "2026-01-15T10:07:52Z"
    },
    {
      "task_id": "01JBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
      "type": "image-to-3d",
      "status": "SUCCEEDED",
      "progress": 100,
      "model_urls": {
        "glb": "https://assets.everythingstudios.ai/models/01JBBBBBBBBBBBBBBBBBBBBBBBBBBBBB/model.glb"
      },
      "thumbnail_url": "https://assets.everythingstudios.ai/models/01JBBBBBBBBBBBBBBBBBBBBBBBBBBBBB/thumb.jpg",
      "error": null,
      "created_at": "2026-01-14T18:22:03Z",
      "finished_at": "2026-01-14T18:26:41Z"
    }
  ],
  "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wMS0xNFQxODoyMjozM1oifQ"
}

To page through results, pass the previous response's next_cursor as the cursor query parameter. Stop when next_cursor no longer appears.