Skip to main content
POST

Overview

A TikTok Slideshow plays your library images and videos one after another, each with its own text boxes and duration. Add an avatarId and a script and an avatar narrates the slideshow, keyed out of its background in a corner of the frame.
A slideshow without an avatar is ready almost immediately and its render starts right away; a narrated slideshow renders when its avatar clips are done. Either way the webhook is called with the MP4.

Canvas size

Text box positions, sizes and fontSize are in pixels of the output canvas: A box that does not fit answers 400 slides.<i>.texts.<j>: The text box must fit the 1080x1920 canvas (x + width <= 1080, y + height <= 1920). Always send x, y, width and height: a box without them gets the editor’s default placement, which is not meant to be relied on.
projectId is returned both at the top level and inside data; read it from data.

Errors

Send an Idempotency-Key header to retry safely: if a request times out or answers 5xx, sending it again with the same key and body returns the first answer instead of creating (and charging) the project twice.

Credits and your own keys

  • Teams on Hooked’s keys (managed): 7 credits for a slideshow without an avatar. With an avatar: 7 credits plus 100 credits per started 15 seconds of script (estimated at about 2.5 words per second). Charged when the project is created; refunded if it fails.
  • Teams on their own keys (BYOK): no credits are charged. The team needs an OpenRouter key in Settings → AI keys, plus Google AI (Gemini) and Bria when the slideshow has an avatar. No ElevenLabs key is needed: no voice is synthesized. Without the keys the request answers 402 missing_credentials and nothing is created.

What happens next

The slideshow is assembled and rendered automatically: without an avatar right away, with one when its clips are done. You do not need to call Render.
  • Poll Get Project until data.video is present and data.video.status is COMPLETED, then download data.video.url; or
  • pass webhook and wait for the COMPLETED (or FAILED) call described in Webhooks.

Get Video

The rendered MP4

List Avatars

Avatars that can narrate

List Music

Background music

Get Project

Status of the project

Authorizations

x-api-key
string
header
required

Headers

Idempotency-Key
string

Makes the request safe to retry. 1-255 printable ASCII characters, one per operation (your job id, or a UUID you store), reused on every retry. Within 24 hours the same key with the same body answers with the first response and the header Idempotent-Replayed: true, without running or charging again. Keys are scoped to your team and the endpoint. 5xx answers and refusals before anything ran (401, 402, 403, 409, 429) are not kept. See Idempotency.

Required string length: 1 - 255
Pattern: ^[\x20-\x7E]+$

Query Parameters

dryRun
boolean
default:false

true: only answer the price of this exact request, as { success: true, data: { dryRun: true, estimatedCredits } } with status 200. The request is validated like a real one (a 400 or 402 says the same), but nothing is created, queued or charged. estimatedCredits is exactly what the call without dryRun charges a managed team; a byok team is charged nothing. Do not send an Idempotency-Key with it.

Body

application/json
slides
object[]
required

The slides, in playback order

Required array length: 1 - 50 elements
name
string

Project name (max 100 characters). Generated from the slide texts when omitted.

Maximum string length: 100
aspectRatio
enum<string>
default:ratio_9_16

Output format. Also sets the canvas the text boxes are measured against.

Available options:
ratio_9_16,
ratio_16_9,
ratio_1_1
script
string

What the avatar says (max 10,000 characters). Requires avatarId.

Maximum string length: 10000
avatarId
string

An avatar from /v1/avatar/list that narrates the script with its own voice, keyed out of its background in the bottom-right corner over the slides. Requires script. An unknown ID answers 400.

Maximum string length: 30
language
string

With an avatar only: the language it speaks, as a 2-letter ISO 639-1 code (en, es, ...). Detected from the slide texts when omitted.

content
object

Branding.

musicId
string

Background music ID from /v1/music/list, or one of your team's own uploaded tracks. An unknown ID answers 400.

Maximum string length: 30
webhook
string<uri>

HTTPS URL on a public host, called when the video is ready or the project fails (max 500 characters). Requests are signed: verify the Hooked-Signature header (HMAC-SHA256 of ".") with the signing secret from Settings → Webhooks; Hooked-Event and Hooked-Delivery headers name the event and the delivery. No redirects are followed; 10 s timeout; 3 immediate attempts. See the Webhooks guide for the payload.

Maximum string length: 500
metadata
object

Any JSON object of your own (max 5 KB). Sent back in the webhook payload. The key automationId is reserved for dashboard automations and is removed.

Response

Project created. Follow it with GET /v1/project/{projectId} or wait for the webhook.

success
enum<boolean>
required
Available options:
true
data
object
required
message
string
required
projectId
string

Same as data.projectId