---
title: "Read an AutoGenerator job"
method: GET
path: "/api/v1/autogenerator/status"
tags: ["AutoGenerator"]
---

# Read an AutoGenerator job

`GET /api/v1/autogenerator/status`

Returns the current state of a previously started AutoGenerator job.
The `status` field in the response data is one of
`in_progress`, `success`, or `failed`. Once `success`, the payload
also contains the generated slides, extracted images, theme/audience
metadata, and other context required to display or further edit
the deck.

For the same `callback_id`, polling after `status=success` returns
the same cached payload.

## Query parameters

- `callback_id` string, required
- `deck_callback_id` string

## Response `200`

Current job status returned.

- AutoGeneratorStatusResponse — AutoGenerator job state. The handler emits further legacy fields alongside the documented ones; only the documented fields are part of the contract. Note the response does **not** echo back the `callback_id` you polled with.
  - `message` string — Human-readable status, for example "Workflow status polling completed."
  - `status` 'in_progress' | 'success' | 'failed' — Job status.
  - `prompt` string — Original prompt that initiated the job.
  - `fileName` string — Filename of the generated deck.
  - `allSlides` object[] — Generated slides (present once `status=success`).
  - `extracted_images` object[] — Images extracted from supporting files.
  - `company` string — Owning company id.
  - `companyDisplayName` string — Owning company display name.
  - `final_output` object — Final-output blob (present once `status=success`).
  - `template_code` string — Target template code used for generation.
  - `audience` string — Target audience used for generation.
  - `execution_start` string, date-time — Pipeline start time.
  - `execution_end` string, date-time — Pipeline end time (present once terminal).
  - `presentation_theme` object — Resolved theme metadata.
  - `voice_settings` object — Voice/tone settings applied.
  - `speaker_notes` object — Speaker-notes configuration applied.
  - `cached` boolean — Whether this response was served from cache.
  - `cached_at` string, date-time — Timestamp of the cached entry.

## Other responses

- `400` — Generic client error. `error.code` is one of `BAD_REQUEST`, `INVALID_JSON`, `MISSING_REQUIRED_FIELD`, `MISSING_QUERY_PARAM`, `MISSING_CALLBACK_ID`, `MISSING_SLIDES_ARRAY`, `MISSING_PROMPT`, `MISSING_TEMPLATE_ID`, `MISSING_FILE_CONTENT`, `MISSING_SHARE_DETAILS`, `INVALID_TYPE`, `INVALID_DATA`, `INVALID_DATA_TYPE`, `INVALID_PAYLOAD`, `INVALID_REQUEST`, `API_REQUEST_FAILED`, or `FILE_UPLOAD_FAILED`.
- `401` — Caller did not present a valid Bearer token, or the token has expired. `error.code` is one of `UNAUTHORIZED`, `INVALID_API_KEY`, `EXPIRED_API_KEY`.
- `403` — Caller is authenticated but not allowed to perform this operation. `error.code` is `FORBIDDEN`.
- `404` — Requested endpoint or resource does not exist. `error.code` is one of `ENDPOINT_NOT_FOUND`, `RESOURCE_NOT_FOUND`, `NOT_FOUND`.
- `422` — Request was well-formed but failed semantic validation. `error.code` is one of `INVALID_INPUT`, `UNPROCESSABLE_ENTITY`.
- `429` — Rate limit, usage limit, or gateway-level throttle exceeded. `error.code` is `TOO_MANY_REQUESTS` (gateway throttle), `RATE_LIMIT_EXCEEDED` (per-category), or `USAGE_LIMIT_EXCEEDED` (annual quota). Default limits (all configurable per company/key): - Gateway throttle (per API key) → `TOO_MANY_REQUESTS`: 10 requests/second sustained, 5 burst, 1,000 requests/day. - Per-company, per-category sliding 60-second window → `RATE_LIMIT_EXCEEDED`. The applicable category is given by each operation's `x-rate-limit-category`. - Annual usage quota → `USAGE_LIMIT_EXCEEDED`: 50,000 slide generations/year and 1,000,000 presentation downloads/year. `X-RateLimit-Limit`/`X-RateLimit-Remaining`/`X-RateLimit-Reset` are returned on successful (2xx) responses from rate-limited endpoints and, with `Retry-After`, on the per-category `RATE_LIMIT_EXCEEDED` 429 (the headers declared below). The gateway `TOO_MANY_REQUESTS` and annual `USAGE_LIMIT_EXCEEDED` responses do not carry them. Read `X-RateLimit-Remaining` to self-throttle and honour `Retry-After` on a 429.
- `500` — Unexpected server error. `error.code` is `INTERNAL_SERVER_ERROR`.
- `503` — Service is temporarily unavailable (downstream dependency unhealthy). `error.code` is `SERVICE_UNAVAILABLE` or `EXTERNAL_SERVICE_ERROR`.
- `504` — A downstream call timed out. `error.code` is `GATEWAY_TIMEOUT`.

---

[API](https://skmtc.net/prezent/apis/prezent-platform-api.md) · [All operations](https://skmtc.net/prezent/apis/prezent-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/prezent/prezent-platform-api/revisions/a01cb764a085/schema)
