# auray-ai/minimax-h3/text-to-video `POST https://queue.auray.run/auray-ai/minimax-h3/text-to-video` submits; the response carries a `request_id` and the three URLs to use next. This model cannot be waited on: its jobs outlive any connection worth holding. `POST https://auray.run/auray-ai/minimax-h3/text-to-video` answers `400 model_not_synchronous` and `?wait=` is refused `wait_unsupported`, both before anything is charged. Submit it to the queue and poll `status_url`, stream the status, or pass `?webhook=` to be called when it is done. One of the models behind Auray's apps. Price: One price per clip for each length rung — up to 5, 10 and 15 seconds — each rung's credits in force served by GET /v1/plans as `price_keys` (`video.fast.`) and quoted when you submit. A clip held by reference pictures is charged the per cent in `video.reference_multiplier_pct` of that, rounded up once; a first frame, and shots cut inside one clip, cost nothing extra. Refunded if the render fails. Fields read from https://api.auray.ai/v1/openapi.json on 2026-08-31. Every error code is explained at https://auray.ai/docs/api/errors. Address: auray-ai/minimax-h3/text-to-video Servers: https://queue.auray.run Scope: video:write Auth: Authorization: Bearer auray_sk_… API enabled: yes ## Input - prompt (string, required) — What to film. Documented range: up to 7,000 characters. - duration_seconds (integer, optional, default: 5) — Whole seconds; outside 5–15 it is refused with 422 duration_out_of_range, before any charge. Documented range: 5 to 15. - tier (string, optional, default: "fast", one of: "fast") — One configuration. Two earlier tiers, `standard` and `pro`, were retired on 2026-08-27 and 2026-09-10, and both are refused now. - aspect_ratio (string, optional, default: "16:9", one of: "16:9", "9:16") — 16:9 or 9:16. The first clip after a few quiet minutes waits about 12 minutes longer to start, and after such a wait the first clip longer than 5 seconds on each canvas may take longer to render than the ones after it; the quoted expected_seconds includes both. - first_frame_path (string, optional) — The picture the clip opens on: the `path` that `POST /v1/uploads` with this address answered, sent once its bytes have been PUT. Costs nothing extra. Not with `reference_image_paths`: the model's reference mode takes no first frame, and the pair is refused with 422 start_frame_with_references before any charge. A path from POST /v1/uploads; this platform never fetches a URL you give it. - reference_image_paths (array of string, optional) — Up to 9 pictures that hold a subject — a face, a costume, a place — each the `path` an upload answered. The prompt names them in this order as ``, `` and so on. A clip with references is charged the reference multiplier, `video.reference_multiplier_pct` in GET /v1/plans' `price_keys`, once over the clip. A path from POST /v1/uploads; this platform never fetches a URL you give it. Documented range: up to 9. - seed (integer, optional) — Leave it out and one is chosen; a finished clip reports the seed it rendered with (`seed` on each video), and sending that number back with the same prompt and settings renders the same clip. Outside the range it is refused with 422 seed_out_of_range, before any charge. Documented range: 0 to 4,294,967,295. - idempotency_key (string, optional) — Your own name for this request. Send the same one twice and the second call is answered with the first request rather than charged again. `Idempotency-Key:` as a header is accepted as an alias — that is the spelling a retrying proxy replays, and the one to use when running a model on `auray.run`, where a request that outlives its connection is answered 504 and recovered by replay. Omit it and the platform mints one. ## Response A submit answers the status document (`status`: IN_QUEUE, IN_PROGRESS or COMPLETED; `request_id`; `queue_position` while queued; `logs`; `metrics`) and then, beside it: - product (string) — Which of this platform's products ran it. - provider_job_id (string) — The id the job runs under, once it has been handed to its model — possibly while still `queued`; null before. Quote it to support. - model (string) — The address that ran it, echoed back. - engine (string) — The service's own name for the model that ran, where it reports one — a catalogue model's is its `id` on GET /v1/models; null otherwise. What `model` carried before it carried the address. - attribution (string) — The credit line the model's licence requires you to show; null where none is required. - credits_charged (integer) — What this job cost. 0 on a replay, or when a pass or a promotion paid for it (`coverage` says which). - credits_quoted (integer) — What this job costs, in credits: the price it was quoted at submit. Equal to `credits_charged` once it has been charged; while it waits in the queue to start, `credits_charged` is 0 and this is what it will be charged when it starts (a cancel before then costs nothing) — and a replay of a job still waiting quotes the body that job was queued with, which is the one it runs, not the replay's. For a catalogue model it is the hold, and the settle may give part of it back — a settled read's `credits_charged` says what it finally cost. - coverage (object) — Present when a pass or a promotion paid for this job — `{"by": "pass", "pass": "seedance-2-5"}` or `{"by": "promotion"}`, and `credits_charged` is 0 — or when you hold a pass for this model that did not cover this job: `{"by": null, "miss": {"pass": "video", "why": "door"}}`, `why` being `door` (the pass does not work here) or `shape` (it does not cover this kind of job). Absent otherwise. Send `X-Auray-Covered-Only: 1` to run a job only if a pass or a promotion pays for it. - credits_remaining (integer) — The balance after it. - expected_seconds (integer) — A rough render time, for a progress bar; 0 where nothing is published. - give_up_after_seconds (integer) — The longest this job may take from its submit: the longest it may wait to start (your X-Auray-Request-Timeout, or the product's queue deadline) plus the longest it may run before it is stopped and refunded. Waiting longer is waiting for nothing; the official clients wait this long by default. For a catalogue model the part it may run is its own reap as its registry row states it (`lifecycle.stall_ceiling_seconds` on GET /v1/models); otherwise these are the published limits: we may lengthen them during an incident, never shorten them. - replayed (boolean) — `true` when your `idempotency_key` matched a job this platform already had. Nothing was charged and nothing was rendered twice. - waited (boolean) — Present when `wait` was asked for. The rest of this group comes with it. - timed_out (boolean) — The wait ran out before the job settled. Still a 2xx, never a 408 or 504 — a library that retries on those would resubmit and you would pay twice. Poll `status_url`. - wait_declined (string) — No seat was free to hold the connection with, so the request was answered at once. `platform_busy`: no product would have helped. `product_busy`: another product's queue might. `account_busy`: you are already waiting on every seat your plan's lanes allow. The job is running either way; poll it. - status_url (string) — Poll this. - response_url (string) — Fetch the result from this once the status is COMPLETED. - cancel_url (string) — `PUT` to this to ask for a cancellation. Poll `status_url`, fetch `response_url` once COMPLETED, `PUT` `cancel_url` to stop it. ## Price Price: One price per clip for each length rung — up to 5, 10 and 15 seconds — each rung's credits in force served by GET /v1/plans as `price_keys` (`video.fast.`) and quoted when you submit. A clip held by reference pictures is charged the per cent in `video.reference_multiplier_pct` of that, rounded up once; a first frame, and shots cut inside one clip, cost nothing extra. Refunded if the render fails. ## Paths POST https://queue.auray.run/auray-ai/minimax-h3/text-to-video Run auray-ai/minimax-h3/text-to-video GET https://queue.auray.run/auray-ai/minimax-h3/text-to-video/requests/{request_id} The result GET https://queue.auray.run/auray-ai/minimax-h3/text-to-video/requests/{request_id}/status The status PUT https://queue.auray.run/auray-ai/minimax-h3/text-to-video/requests/{request_id}/cancel Ask for a cancellation ## Example ```bash curl -X POST https://queue.auray.run/auray-ai/minimax-h3/text-to-video \ -H 'Authorization: Bearer auray_sk_…' \ -H 'Content-Type: application/json' \ -d '{"prompt":"a brass orrery on a walnut desk, morning light from a window to the left"}' ``` ## Full contract https://api.auray.ai/v1/models/auray-ai/minimax-h3/text-to-video/openapi.json