> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chexnik.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Get job

> Poll a job for its status and result.

Retrieve the status and, once complete, the result of a generation job. Poll this endpoint until `status` is `done` or `failed`.

```text theme={null}
GET /jobs/{job_id}
```

## Headers

<ParamField header="Authorization" type="string" required>
  `Bearer <YOUR_API_KEY>`. See [Authentication](/authentication).
</ParamField>

## Path parameters

<ParamField path="job_id" type="string" required>
  UUID of the job, as returned by a generation request.
</ParamField>

## Response

<ResponseField name="job_id" type="string">
  UUID of the job.
</ResponseField>

<ResponseField name="status" type="string">
  One of `queued`, `processing`, `done`, `failed`. See [Jobs & polling](/concepts/jobs).
</ResponseField>

<ResponseField name="created_at" type="datetime">
  When the job was accepted.
</ResponseField>

<ResponseField name="started_at" type="datetime | null">
  When processing began. `null` while still queued.
</ResponseField>

<ResponseField name="finished_at" type="datetime | null">
  When the job reached a terminal state. `null` until then.
</ResponseField>

<ResponseField name="result" type="object | null">
  Present only when `status` is `done`.

  <Expandable title="result">
    <ResponseField name="image_url" type="string">
      Presigned download URL for the generated image. Valid for **24 hours**, and regenerated on every poll — always use the freshest value.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="error" type="string | null">
  Failure reason. Present only when `status` is `failed`.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -s https://bananahub.io/api/v1/jobs/$JOB_ID \
    -H "Authorization: Bearer $API_KEY"
  ```

  ```python Python theme={null}
  import requests

  job = requests.get(
      f"https://bananahub.io/api/v1/jobs/{job_id}",
      headers={"Authorization": f"Bearer {API_KEY}"},
  ).json()
  print(job["status"])
  ```
</RequestExample>

<ResponseExample>
  ```json done theme={null}
  {
    "job_id": "0193a7f2-1c4a-7e0b-9b3a-2f1d8c6e4a55",
    "status": "done",
    "created_at": "2026-06-11T12:00:00Z",
    "started_at": "2026-06-11T12:00:01Z",
    "finished_at": "2026-06-11T12:00:09Z",
    "result": {
      "image_url": "https://cdn.bananahub.io/results/...?X-Amz-Signature=..."
    },
    "error": null
  }
  ```

  ```json failed theme={null}
  {
    "job_id": "0193a7f2-1c4a-7e0b-9b3a-2f1d8c6e4a55",
    "status": "failed",
    "created_at": "2026-06-11T12:00:00Z",
    "started_at": "2026-06-11T12:00:01Z",
    "finished_at": "2026-06-11T12:00:05Z",
    "result": null,
    "error": "Provider returned no image"
  }
  ```
</ResponseExample>

<Warning>
  A `404` is returned for an unknown id or a job owned by another account.
</Warning>
