---
title: "One generation. ?wait=<seconds, max 45> holds the request until it finishes or the time is up."
method: GET
path: "/v1/generations/{id}"
---

# One generation. ?wait=<seconds, max 45> holds the request until it finishes or the time is up.

`GET /v1/generations/{id}`

## Request

- Base URL: `https://api.lumeta.ai`
- URL: `https://api.lumeta.ai/v1/generations/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Query parameters

- `wait` integer

## Response `200`

OK

- Generation
  - `id` string
  - `status` 'queued' | 'processing' | 'succeeded' | 'failed'
  - `status_message` string, nullable: While `status` is queued or processing, one plain sentence on what the generation is waiting on, when there is a long wait worth telling the person about (today: Seedance clearing new face photos, which can take several minutes, the photos waiting in line while Seedance's face library is busy, a slow hand-over to Seedance, or the safety check after Seedance did not answer). It changes as the wait moves on, and is null otherwise and once the generation has finished. Show it as it is.
  - `model` object
    - `id` integer
    - `name` string
  - `project` string, nullable
  - `input` object
  - `outputs` object[]
    - `index` integer: This output's number, counting from 0: what `gen_<id>#<n>` uses. It never shifts, so the list has a gap where the owner deleted an image.
    - `type` 'image' | 'video' | 'audio' | 'other'
    - `url` string: Durable https URL of the stored file.
    - `mime` string, nullable
    - `width` integer
    - `height` integer
    - `duration` number: Seconds, for audio and video.
    - `size` integer: Bytes.
  - `text` string, nullable: The words of a model that answers in text rather than a file, such as Speech-to-Text's transcript (its `outputs` is empty); null otherwise.
  - `credits_charged` integer: What was charged; a refunded failure reads 0.
  - `error` object, nullable
    - `code` string: canceled when you canceled it; otherwise the error codes above.
    - `message` string: Plain text, written for the person who made the generation.
  - `origin` 'web' | 'api' | 'mcp' | 'cli'
  - `request_id` string, nullable
  - `created_at` string
  - `completed_in_seconds` number, nullable
  - `finalize_1080p` object: Present only while this generation can still be re-made at 1080p with POST /v1/generations/{id}/finalize (Seedance 2.5 480p, for 7 days). The 1080p run is the same video rather than an upscale, and costs what generating it at 1080p would have cost in the first place, so making a 480p one first and then this is about 19% more than going straight to 1080p, and nothing at all when the draft is not worth finishing.
    - `credits` integer: What the 1080p version will cost.
    - `expires_at` string: ISO 8601, UTC. After this the 480p generation can no longer be re-made.
  - `credits_remaining` integer: On POST /v1/generations only.
  - `cap_remaining` integer, nullable

## Other responses

- `default`: Error

## Changes

- **2026-10-20** `9b84c0fe886e`: 1 info
  - added the optional property `finalize_1080p` to the response with the `200` status

[Operation history](https://skmtc.dev/lumeta/apis/lumeta-api/changes/v1/generations/:id/get.md)

---

[API](https://skmtc.dev/lumeta/apis/lumeta-api.md) · [All operations](https://skmtc.dev/lumeta/apis/lumeta-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lumeta/apis/lumeta-api/revisions/9b84c0fe886e?raw)
