Overview
Each video format has its own endpoint underPOST /v1/project/create/{format}. There is no generic POST /v1/project/create: pick the endpoint for the format you want.
Every create endpoint works the same way:
1
Create the project
POST /v1/project/create/{format} validates the request, checks your team can pay for it, and answers right away with a projectId. Generation runs in the background.data.status is the project status (draft, processing, completed or failed).2
Wait for the video
Every format renders automatically when generation finishes: the project’s
video appears and the webhook is called. Render Project is only needed to render again after editing.Either poll Get Project with the projectId, or pass a webhook URL on create and Hooked calls it when the video is ready or the project fails (see Webhooks).3
Download it
When the project’s
video.status is COMPLETED, download video.url. The same video is available from Get Video Details and List Videos.The create response has no
videoId. The video exists only once the project’s render starts; it then appears under video in Get Project.Create endpoints
Avatars
Narrated videos
From a source
Article, PDF and Cinematic requests answer in a few seconds with the project in
processing: reading the source (or writing the storyboard) happens after the answer. If that step fails, the project becomes failed with the reason in message, the credits come back and your webhook gets the failure. Send an Idempotency-Key so a retry after a network error cannot create the project twice.
Editing your own video
To render an existing project again (for example after editing it in the dashboard), use Render Project.
Find the ids you need
Create requests take ids, never names. Every one of them can be read from the API, so nothing has to be copied from the dashboard:
The catalogs are read from the same lists the create endpoints validate against: an id a catalog returns is accepted, and anything else answers
400 with the allowed values. Your team’s own custom styles and reactions are included.
Fields every create endpoint accepts
Each endpoint documents only the fields that change its video, and says when a field only applies under a condition (a format, a media type, a toggle). A field an endpoint does not list has no effect there.
Media you pass (
media, mediaId, image keys) must be files in your team’s library. An ID that does not exist or belongs to another team answers 400, and so does one that is not COMPLETED yet.
Get media into your library
- The file is online: Import Media from URL with its public
httpsURL. It answers202with amediaId; poll Get Media untilstatusisCOMPLETED. - The file is on your machine: Upload Media gives you a presigned URL; PUT the file there, then call Complete Upload.
- It is already in your library (uploaded or generated in the dashboard): find its id with List Media.
Credits and your own keys
Teams run in one of two modes:- Hooked keys (managed). Generation runs on Hooked’s provider accounts and is charged in credits, either up front when the project is created or step by step while it generates. If a project fails, the credits charged for it are refunded automatically. A managed team needs an active subscription; without one, create answers
402 subscription_required. Without enough credits it answers402 INSUFFICIENT_CREDITS. - Your own keys (BYOK). Your team adds its own provider keys in Settings → AI keys in the dashboard. Generation is billed by those providers to you, and Hooked charges no credits for it. Each format needs specific keys; if one is missing or invalid, create answers
402 missing_credentialswith the list inmissingProviders, before anything is created or charged.
Each endpoint page lists the exact keys for that format. Rendering a project (Render Project) never costs credits.
Errors
All create endpoints share these responses:Example
Related
Get Project
Follow a project to its video
Webhooks
Get notified when a video is ready
Complete Workflow
Resources, create, wait, download
Quickstart
End-to-end tutorial