SwishXKnowledge Base
API ReferenceVideos

Retrieve a video generation

GET /v1/videos/:id

GET https://api.swishx.com/v1/videos/{id}
curl https://api.swishx.com/v1/videos/vid_8f2c1a9b3d4e \
  -H "Authorization: Bearer $SWISHX_API_KEY"

The video object

{
  "id": "vid_8f2c1a9b3d4e",
  "object": "video",
  "status": "succeeded",
  "model": "finsen-3.2",
  "prompt": "A pharma rep opens with a warm, confident smile.",
  "negative_prompt": null,
  "duration_seconds": 8,
  "resolution": "1080p",
  "routed_model": "veo-3",
  "keyframe": {
    "id": "img_3a9c1f2b8e7d",
    "status": "ready"
  },
  "compliance": {
    "verified": true,
    "flags": []
  },
  "output": {
    "url": "https://cdn.swishx.com/videos/vid_8f2c1a9b3d4e.mp4",
    "thumbnail_url": "https://cdn.swishx.com/videos/vid_8f2c1a9b3d4e.jpg"
  },
  "error": null,
  "cost_cents": 1200,
  "created_at": "2026-08-07T18:22:04Z",
  "completed_at": "2026-08-07T18:24:41Z"
}
FieldTypeDescription
idstringUnique identifier, prefixed vid_.
objectstringAlways "video".
statusstringqueued, processing, verifying, succeeded, failed, or canceled.
modelstringThe finsen-3.x version requested.
promptstringThe prompt as submitted.
negative_promptstring | nullThe negative prompt, if any.
duration_secondsintegerRequested duration.
resolutionstring"720p" or "1080p".
routed_modelstring | nullWhich downstream model rendered this — see Model routing. null until routed.
keyframeobject | nullThe keyframe still used, if keyframe-first generation ran. null for direct text-to-video.
complianceobject | null{ verified, flags }. null until the output-verified stage runs.
outputobject | null{ url, thumbnail_url }. null until status is succeeded.
errorobject | nullPopulated when status is failed. Same shape as API errors.
cost_centsinteger | nullWhat this generation cost, in cents. null until it resolves.
created_atstringISO 8601 timestamp.
completed_atstring | nullISO 8601 timestamp. null while still in progress.

Polling frequency

Poll every 2–5 seconds. Most generations resolve within a few minutes; there's no server-sent event or webhook yet, so polling is the only way to know when a generation finishes.

On this page