TpTextPuppet

YOUR SCRIPT. OUR SCREENSHOT.

Make a scene.
With an API.

Send the cast, the messages, the plot twist.
Get a PNG, PDF carousel, or editable project back.

Included in every active plan. Monthly, annual, lifetime, and trials.

Get your API key ↓ OpenAPI specification ↗

THE BACKSTAGE PASS

Your API keys

Checking your account…

One request. One screenshot.

Create a key above, then set TEXTPUPPET_API_KEY as a secret in your server’s environment. This example makes a fictional iMessage conversation.

curl --fail https://textpuppet.com/api/v1/render \
  -H "Authorization: Bearer $TEXTPUPPET_API_KEY" \
  -H "Content-Type: application/json" \
  --output mockup.png \
  --data '{
    "template": "imessage",
    "participants": [{"name":"You"}, {"name":"Boss"}],
    "messages": [
      {"sender":1,"text":"How is the deck looking?","time":"9:41 AM"},
      {"sender":0,"text":"Slide 4 is a raccoon holding a calculator.","status":"delivered"}
    ],
    "settings": {"theme":"dark","sceneWidth":390},
    "format": "png",
    "scale": 2
  }'

Use format: "pdf" for a carousel, or "project" for portable, editable JSON. Scale is 1× or 2×. Renders return file bytes directly; they don’t save a draft.

Pick a layout. Bring your own story.

11 native layouts: LinkedIn, Gmail, Reddit, WhatsApp, Slack, X messages, iMessage / SMS, Instacart shopper chat, YouTube, Taplio, and Trellus. Each has its own settings. Fetch an example before building a new format.

Website imports happen through the Chrome extension and Studio. The API renders native layouts; it doesn’t visit arbitrary website URLs.

API endpoints
Method & pathWhat it does
GET /api/v1/accountCurrent plan and usage limits
GET /api/v1/templatesLayouts and supported settings
GET /api/v1/templates/{template}Starter example; omit masked photo/image fields or upload your own
POST /api/v1/renderOne-request PNG, PDF, or project export
POST /api/v1/imagesUpload a raster image as {"data_url":"data:image/png;base64,…"}
DELETE /api/v1/images/{id}Delete your uploaded image
POST /api/v1/mockupsSave a mockup; same input as render, without format/scale
GET /api/v1/mockupsList your API and MCP mockups
GET /api/v1/mockups/{id}Read its current revision
PATCH /api/v1/mockups/{id}Apply changes with expected_revision
POST /api/v1/mockups/{id}/exportExport with {"format":"png","scale":2}
DELETE /api/v1/mockups/{id}Delete your mockup

Images and edits

Upload PNG, JPEG, WebP, or GIF files up to 4 MB. Put the returned image_reference in a participant’s photo, a message’s image, or a supported image src field. Images belong to your account. Remote image URLs and SVG uploads aren’t accepted.

{
  "expected_revision": 1,
  "changes": {
    "messages": [
      {"id":"message-1","sender":1,"text":"Did the raccoon approve it?"},
      {"id":"message-2","sender":0,"text":"He wants more charts.","status":"read"}
    ]
  }
}

Read before editing. Send the complete messages or participants array, and merge nested settings with the existing object. Omit attached image fields to preserve them. A stale revision returns 409. Saved responses include a Studio link to open an editable copy; use Save to account there if you want to keep working online.

Limits, without surprises

The API and MCP share 120 requests per minute, 60 exports per hour, and one concurrent export per account. Saved mockups and images expire after 30 days: up to 150 objects, 100 MB total, and 20 saves/uploads per minute. JSON request bodies can be up to 7 MB. Mockups allow up to 200 messages. PNGs are limited to 12,000 pixels tall and 40 megapixels at the chosen scale; PDFs to 30 slides. Shared rendering capacity can limit exports below your account quota; temporary launch throttles retry automatically, and a busy renderer returns 429 with Retry-After.

All plans have the same API access and limits. Access stops when a trial or paid period ends; lifetime licenses, including redeemed free licenses, stay active. Keys don’t provide access to billing or browser-only drafts.

Failures return {"error":{"code":"…","message":"…"}}. 401 means a missing, invalid, or revoked key; 402 means your plan has ended; 409 means a conflicting edit or running export; 429 means a rate or storage limit. Honor Retry-After, retry transient errors with a delay, and avoid repeating creates if you’re unsure whether a save succeeded. Browser requests from other origins are blocked; call from your server.

Want to describe a mockup in natural language instead? Connect TextPuppet to your assistant with MCP.