Singing Pet API

Turn a pet photo and a song into a lip-synced video from your own code. One credit per video, no watermark, about a minute to render.

Get an API key

Sign in and create a key from your dashboard. The key is shown once and cannot be recovered, so store it somewhere safe. Keys carry the scopes you choose: read-only, or read and write.

Create an API key

Quickstart

Create a key, pick a song, send a photo URL. Three calls.

# 1. pick a song
curl https://api.singing.pet/v1/templates \
  -H "Authorization: Bearer $SINGING_PET_KEY"

# 2. queue the render (costs 1 credit)
curl -X POST https://api.singing.pet/v1/videos \
  -H "Authorization: Bearer $SINGING_PET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"template_id":"393","image_url":"https://example.com/dog.jpg"}'

# 3. poll until status is completed, about a minute
curl https://api.singing.pet/v1/videos/<id> \
  -H "Authorization: Bearer $SINGING_PET_KEY"

Authentication

Send your key as a bearer token on every request. If you would rather not hold a key, the API also accepts OAuth 2.1 access tokens, with open dynamic client registration and PKCE.

Credits

Credits are prepaid and never expire. One credit renders one video. A render that fails is refunded automatically, so there is no need to re-create a video to get the credit back.

PackCreditsPricePer video
Starter100$5$0.050
Growth500$20$0.040
Scale2,500$75$0.030

Endpoints

Every endpoint under /v1 takes an API key or an OAuth token. The full reference, including request and response schemas, is in the OpenAPI document.

GET/v1/templateslistApiTemplates
GET/v1/megetApiAccount
GET/v1/creditsgetApiCredits
GET/v1/videoslistApiVideos
POST/v1/videoscreateApiVideo
GET/v1/videos/{id}getApiVideo
DELETE/v1/videos/{id}deleteApiVideo

Errors

Every error is JSON with a stable code, a message, and a hint saying what to do about it. Nothing returns an HTML error page.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough API credits to render a video",
    "status": 402,
    "hint": "Each video costs 1 credit. Buy more at https://singing.pet/dashboard/api-keys.",
    "documentation_url": "https://singing.pet/api"
  },
  "message": "Not enough API credits to render a video"
}

Prefer tools over HTTP?

There is an MCP server exposing the same account and the same credits as tools an AI client can call directly.

Singing Pet MCP server

Rendering is asynchronous

Creating a video returns immediately with an id and a poll URL. A render takes about a minute, so poll every ten seconds or so. You can also listen on the websocket instead of polling.

Rate limits

60 reads and 10 writes a minute. Every response carries RateLimit and RateLimit-Policy headers so you can pace yourself, and a 429 tells you exactly how long to wait with Retry-After.

Versioning

The version is the first path segment. Adding a field or an endpoint happens inside v1 without notice. Anything that could break your integration gets a new major version and 180 days notice, signaled with the Deprecation and Sunset headers from RFC 8594.

Limits

Photos up to 15MB, as JPEG, PNG, WebP or HEIC, at a public HTTPS URL. Output length matches the song, capped at 30 seconds; most land between 15 and 20. Dogs, cats, birds, rabbits, hamsters and guinea pigs, any breed.

Current version status