Skip to main content

Overview

Each video format has its own endpoint under POST /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.
Before a batch, Get Account tells you the credit balance, whether your team is on Hooked keys or its own (and, with its own, which provider keys are set and working), and how much storage is left.

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 https URL. It answers 202 with a mediaId; poll Get Media until status is COMPLETED.
  • 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.
Images and videos up to 100 MB (JPEG, PNG, WEBP, GIF, MP4, MOV, WEBM); they count against your plan’s storage.

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 answers 402 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_credentials with the list in missingProviders, 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:
If a create call times out or returns a 5xx, the project may still have been created and charged. Send an Idempotency-Key header with every create: a retry with the same key and body returns the first answer instead of creating a second project. Without one, check List Projects (source=api, newest first; a project is listed as soon as it is created) or wait for your webhook before retrying. Retrying GET requests is always safe.

Example

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