Your account
Assets
Every output you generate — character sheets, first frames, TTS audio, finished videos — lands in one durable ledger with a stable URL. Lose a response? The asset is still here.
What lands here
| kind | Produced by |
|---|---|
character_sheet | POST /characters |
first_frame | POST /images/first-frame, and video jobs that generate their own frame |
tts_audio | POST /tts |
video | Completed video jobs (talking-head and multi-scene) |
Asset URLs are public CDN links with unguessable paths — safe to hand straight to your own app or player, no extra auth step. They're long-lived; still, most partners copy finished videos into their own storage as part of their pipeline.
List assets
GET/api/partner/v1/assets
| Field | Type | Description |
|---|---|---|
| kind | query, enum | Filter: character_sheet | first_frame | tts_audio | video. |
| limit | query, int ≤100 | Default 30. |
| offset | query, int | For pagination, newest first. |
Every video you've ever generated
curl "https://platform.promoat.ai/api/partner/v1/assets?kind=video&limit=10" \
-H "Authorization: Bearer $PROMOAT_KEY"Asset object
{
"asset_id": "7f3f9a2c-…",
"kind": "video",
"url": "https://…/video.mp4",
"workflow_id": "partner_scn_1783…", // which job made it (null for sync outputs)
"character_id": "0b2f1c3e-…", // who's in it, when applicable
"voice_id": null,
"metadata": { … },
"created_at": "2026-07-08T04:31:02.114Z"
}The cross-references are the useful part: workflow_id ties an asset back to its job (and therefore its cost), character_id/voice_id tie it to the identity that made it.
Get one asset
GET/api/partner/v1/assets/{id}
Same object by asset_id — handy when a job's result gave you an id and you want the full record later.
Try it
Try itGET/api/partner/v1/assetsfree
Add your API key in the sidebar to enable this.