Public Media API
Provider-neutral /v1 media catalog, estimates, generation, history, and recommendations.Public media lives under /v1/media. Every operation uses an organization API key and a named
account rate policy. Responses never include provider names, endpoints, or provider filenames.
Endpoints
Section titled “Endpoints”| Method | Path | Request | Response |
|---|---|---|---|
GET | /v1/media/models | — | MediaModelList |
GET | /v1/media/recommendations | intent query | MediaModelList |
POST | /v1/media/estimates | MediaEstimateRequest | MediaEstimate |
POST | /v1/media/generations | MediaGenerationRequest, Idempotency-Key | MediaGeneration |
GET | /v1/media/generations | limit query | MediaGenerationList |
GET | /v1/media/generations/{generation_id} | path parameter | MediaGeneration |
List models
Section titled “List models”/v1/media/models curl https://api.dexto.ai/v1/media/models \ -H "Authorization: Bearer $DEXTO_API_KEY"| Response field | JSON type | Required | Description |
|---|---|---|---|
object | "list" | Yes | List discriminator |
data | array<media.model> | Yes | Reviewed models this deployment can run |
Recommend models
Section titled “Recommend models”/v1/media/recommendations intent is a trimmed string of 1–2000 characters. The response uses the same media.model objects
as the catalog list.
curl "https://api.dexto.ai/v1/media/recommendations?intent=cinematic%20product%20video" \ -H "Authorization: Bearer $DEXTO_API_KEY"Create estimate
Section titled “Create estimate”/v1/media/estimates curl https://api.dexto.ai/v1/media/estimates \ -H "Authorization: Bearer $DEXTO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "image.quality", "input": { "prompt": "A precise exploded diagram of a mechanical keyboard" } }'{ "object": "media.estimate", "id": "724df530-01e7-45f6-a73b-756401b51d31", "model": "image.quality", "amount_usd": 0.042, "confidence": "exact", "expires_at": "2026-09-13T10:15:00.000Z", "explanation": "Estimated $0.04 for one auto 1024x1024 image.", "input": { "prompt": "A precise exploded diagram of a mechanical keyboard" }, "pricing": { "type": "unit", "quantity": 1, "unit": "image", "unit_price_usd": 0.042 }}Start generation
Section titled “Start generation”/v1/media/generations curl https://api.dexto.ai/v1/media/generations \ -H "Authorization: Bearer $DEXTO_API_KEY" \ -H "Idempotency-Key: $REQUEST_ID" \ -H "Content-Type: application/json" \ -d '{"estimate_id":"724df530-01e7-45f6-a73b-756401b51d31"}'The estimate is single-use. Reuse the same Idempotency-Key when retrying. Incomplete work returns
202; completed work returns 200 with the same media.generation object.
List generations
Section titled “List generations”/v1/media/generations limit defaults to 20 and must be an integer from 1 to 100. Each item is the same object as
GET /v1/media/generations/{generation_id}. Only the caller’s completed generations with Dexto
artifacts are included. Stored artifact details that cannot be loaded do not fail the list:
filename and mime_type are null while uri, id, and kind remain.
curl "https://api.dexto.ai/v1/media/generations?limit=20" \ -H "Authorization: Bearer $DEXTO_API_KEY"{ "object": "list", "data": [ { "object": "media.generation", "id": "b8698bf3-df63-4c31-bdec-929fd0c9104e", "model": "video.text.seedance-2", "media_kind": "video", "status": "settled", "completed": true, "resources": [ { "id": "owned-clip-1", "filename": "generated-video-1.mp4", "kind": "video", "mime_type": "video/mp4", "uri": "artifact://session/account%3Auser/owned-clip-1" } ], "error": null, "created_at": "2026-09-13T10:00:00.000Z", "updated_at": "2026-09-13T10:03:21.000Z", "completed_at": "2026-09-13T10:03:19.000Z" } ]}Get generation
Section titled “Get generation”/v1/media/generations/{generation_id} Reads one owned generation, including run-scoped artifacts stored under the operation’s own session (and desktop, when the object key includes one). Another caller’s generation returns the standard not-found envelope.
| Field | JSON type | Required | Description |
|---|---|---|---|
id | string | Yes | Stable Dexto generation ID |
model | string | Yes | Public media model ID |
media_kind | string | Yes | audio, file, image, or video |
status | string | Yes | Durable operation state |
resources | array | Yes | Finalized Dexto artifacts |
resources[].uri | string | Yes | Dexto artifact URI |
resources[].id | string | Yes | Artifact ID from the owned URI |
resources[].filename | string | null | Yes | Provider-neutral filename; null if stored details cannot be loaded |
resources[].kind | string | Yes | audio, binary, image, or video |
resources[].mime_type | string | null | Yes | Stored media type; null if stored details cannot be loaded |
error | object | null | Yes | Bounded failure; message is generic |
completed_at | string | null | Yes | ISO-8601 completion timestamp |