Developer API
Send a script, get an MP4 or a PNG back. The engine behind every tool, over plain HTTP.
Quick start
One call. The video URL comes back when it's rendered:
curl -X POST 'https://txtreel.com/api/render?wait=1' \
-H 'content-type: application/json' \
-d '{"platform":"whatsapp","theme":"dark","contact":{"name":"Mom"},
"script":"Mom: who is Jessica\nme: what?? why\n[pause 1.5]\nMom: she just called the house"}'Reddit threads use the same endpoints with "platform": "reddit":
curl -X POST 'https://txtreel.com/api/render?wait=1' \
-H 'content-type: application/json' \
-d '{"platform":"reddit","subreddit":{"name":"AmItheAsshole"},
"script":"title: AITA for skipping my sister\u0027s wedding?\nbody: She uninvited my boyfriend.\nsleepy_joe: NTA\n> OP: thank you"}'iOS lock screens with notifications use "platform": "lockscreen". This is a video, each card landing at its at second:
curl -X POST 'https://txtreel.com/api/render?wait=1' \
-H 'content-type: application/json' \
-d '{"platform":"lockscreen","theme":"dark","time":"9:41","date":"Tue Oct 6",
"notifications":[{"app":"imessage","title":"Mom","body":"who is Jessica","at":0},
{"app":"whatsapp","title":"Sam","body":"call me back","at":1.5}]}'The same body as a PNG, wrapped in conversation; add "frame": 30 for an earlier moment:
curl -X POST 'https://txtreel.com/api/still' \
-H 'content-type: application/json' \
-d '{"conversation":{"platform":"lockscreen","notifications":[{"app":"imessage","title":"Mom","body":"who is Jessica"}]}}'Endpoints
/api/renderQueues an MP4. Returns 202 with { id, status, queuePosition, statusUrl }. Add ?wait=1 to block until it's done.
/api/renders/:id{ status: queued | bundling | rendering | done | error, progress, queuePosition, url, durationSeconds, error }
/api/still{ conversation, frame? } → { url } of a 1080×1920 PNG. Default frame: the last one.
/api/validateChecks the input without rendering: errors, or duration and message count. Not rate-limited.
/api/schemaJSON Schema of both formats, plus the script syntax.
Every endpoint takes the conversation JSON (see /api/schema), or the same object with a plain-text script instead of messages (or of post + comments for Reddit; lock screens have no script). Photos are https URLs or data: URIs.
Limits
- Free, no key needed. Fair use: about 30 videos and 120 screenshots per hour per network, videos up to 3 minutes.
- Over the limit you get
429with aRetry-Afterheader; when the queue is full,503. Need more? Ask for a key, sent asAuthorization: Bearer …. - Rendered files are deleted after 24 hours: download them, don't hotlink them.
Chat script
them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:41 PM date/time separator me: [photo URL] caption a photo (URL, local file path, or an uploaded photo's number) [them reacts ❤️] reaction on my last message [read] they read my messages === everything above is already on screen at the start === scroll 3 same, but open on the oldest message and skim down in 3 s # comment
platform: imessage, whatsapp or instagram. Other fields: theme, contact (name, avatar, subtitle, unread, verified), statusBar, startTime, speed, keyboard, sounds, composerTyping, autoRead, endHold.
Reddit script
title: AITA for not going to my sister's wedding? body: First paragraph of the post (optional, one line per paragraph) body: Second paragraph [photo URL] a photo in the post (URL, file path or uploaded photo's number) sleepy_joe: A top-level comment > OP: A reply by the post's author (blue OP label) >> sleepy_joe [2.1K 3h]: A reply to that reply, with its votes and age [91 more replies] collapsed replies under the comment above [pause 2] wait 2 s # comment
Notifications (lock screen)
platform: lockscreen. There is no script: send JSON with at least one entry in notifications. Each has app (imessage, whatsapp, instagram, chatgpt, claude, reddit, mail, phone, facetime, notes or reminders), title (the sender), body (up to 4 lines shown), when ("now", "2m ago"), avatar (https URL or data: URI) and at, the second it lands (0 = already on screen). Up to 20 notifications.
Other fields: theme (light or dark mode), wallpaper (one of Apple's iOS 26 wallpapers by name: sky, shadow, halo, dusk, yellow, pink, azure, purple; or an https URL or data: URI, which wallpaperX, wallpaperY, wallpaperZoom and dim adjust; default sky), time, date, padlock, carrier, statusBar (battery, signal, wifi, recording), clockWeight, clockSize, clockStretch, clockColor, clockOpacity, display (list or stack), flashlight, camera, sounds, endHold. The full list is the lockscreen entry of /api/schema.
From an AI assistant
The same engine is an MCP server at https://txtreel.com/mcp: see Claude and ChatGPT.