Get your API key
1
Log in
Go to hooked.so and log in or create an account.
2
Create a key
Open Settings → Developer API and create a key.
3
Store it
Copy the key and keep it in an environment variable, for example
HOOKED_API_KEY.Generating costs credits on a managed team, or needs your own provider keys on a byok team. See Credits and your own keys.
Step 1: Pick an avatar
Response
id of the avatar you want. A talking avatar speaks with its own voice, so you do not need a voice id for this format.
Step 2: Create the video
Response
projectId: it is how you find the video later. webhook and metadata are optional.
Step 3: Wait for the video
You have two options. Use either, or both.Option A: poll the project
Response (finished)
- Project
statusisdraft,processing,completedorfailed. videoisnulluntil rendering starts. ItsstatusisSTARTED,COMPLETEDorFAILED, and itsurlis""until the file is ready.- The video is ready when
video.statusisCOMPLETED. Stop polling when that happens, or when the project or the video isfailed/FAILED. Themessagefield says what went wrong.
Option B: receive a webhook
If you passedwebhook, Hooked POSTs to it when the video is done:
status: "FAILED" with an empty url. See Webhooks for every payload and the retry rules. A few failures while generating do not send a webhook yet, so poll as a backup if nothing arrives.
Step 4: Download the video
GET /v1/project/{projectId} again for a fresh one.
The whole flow in code
A narrated video instead
To make a voiceover over AI-generated images, pick a voice and callscript-to-video:
Next steps
Webhooks
Get called when a video is ready or fails
Error Handling
What each error means and when to retry
Personalization
One video per customer, with their name and details
Examples
A working request for every format
Common issues
401 Not authenticated
401 Not authenticated
The
x-api-key header is missing or the key is wrong or deleted. Check the key in Settings → Developer API.402 Payment required
402 Payment required
Read the body’s
code / errorCode: subscription_required (managed team without an active plan), INSUFFICIENT_CREDITS (not enough credits), or missing_credentials (byok team missing a provider key, listed in missingProviders).400 with a field name in the message
400 with a field name in the message
The
message names the field and the reason, for example avatarId: Avatar "abc" not found. Use ids from the list endpoints.The webhook never arrives
The webhook never arrives
It must be an HTTPS URL on a public host that answers 2xx within 10 seconds, without redirects. Poll
GET /v1/project/{projectId} to see where the project stands.