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 keyQuickstart
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.
| Pack | Credits | Price | Per video |
|---|---|---|---|
| Starter | 100 | $5 | $0.050 |
| Growth | 500 | $20 | $0.040 |
| Scale | 2,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/templates | listApiTemplates |
| GET | /v1/me | getApiAccount |
| GET | /v1/credits | getApiCredits |
| GET | /v1/videos | listApiVideos |
| POST | /v1/videos | createApiVideo |
| 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 serverRendering 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.