Skip to content

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.

MethodPathRequestResponse
GET/v1/media/models—MediaModelList
GET/v1/media/recommendationsintent queryMediaModelList
POST/v1/media/estimatesMediaEstimateRequestMediaEstimate
POST/v1/media/generationsMediaGenerationRequest, Idempotency-KeyMediaGeneration
GET/v1/media/generationslimit queryMediaGenerationList
GET/v1/media/generations/{generation_id}path parameterMediaGeneration
GET /v1/media/models
Terminal window
curl https://api.dexto.ai/v1/media/models \
-H "Authorization: Bearer $DEXTO_API_KEY"
Response fieldJSON typeRequiredDescription
object"list"YesList discriminator
dataarray<media.model>YesReviewed models this deployment can run
GET /v1/media/recommendations

intent is a trimmed string of 1–2000 characters. The response uses the same media.model objects as the catalog list.

Terminal window
curl "https://api.dexto.ai/v1/media/recommendations?intent=cinematic%20product%20video" \
-H "Authorization: Bearer $DEXTO_API_KEY"
POST /v1/media/estimates
Terminal window
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" }
}'
POST /v1/media/generations
Terminal window
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.

GET /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.

Terminal window
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 /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.

FieldJSON typeRequiredDescription
idstringYesStable Dexto generation ID
modelstringYesPublic media model ID
media_kindstringYesaudio, file, image, or video
statusstringYesDurable operation state
resourcesarrayYesFinalized Dexto artifacts
resources[].uristringYesDexto artifact URI
resources[].idstringYesArtifact ID from the owned URI
resources[].filenamestring | nullYesProvider-neutral filename; null if stored details cannot be loaded
resources[].kindstringYesaudio, binary, image, or video
resources[].mime_typestring | nullYesStored media type; null if stored details cannot be loaded
errorobject | nullYesBounded failure; message is generic
completed_atstring | nullYesISO-8601 completion timestamp