Singing Pet API

Singing Pet has a REST API. Song templates and pricing are open to anyone. Anything that touches a person's videos, credits or billing needs a Firebase ID token.

OpenAPI specification

The machine-readable description of the whole API, with a unique operation id, typed parameters and a response schema for every endpoint. Point a client generator or an agent's function-calling loader straight at it.

View the OpenAPI spec

https://singing.pet/openapi.json

Authentication

Send a Firebase Authentication ID token as a bearer token. Signing in with Google or an email link on this site mints one. Endpoints marked public need no header at all.

Endpoints

https://api.singing.pet

GET/getServiceIndexPublic
GET/openapi.jsongetOpenApiSpecPublic
GET/healthgetHealthPublic
GET/templateslistTemplatesPublic
GET/subscription/pricinggetPricingPublic
GET/user/megetCurrentUserToken
GET/user/videoslistUserVideosToken
POST/create-with-templatecreateVideoFromTemplateToken
POST/create-with-audiocreateVideoFromAudioToken
DELETE/delete-videodeleteVideoToken
GET/tts/voiceslistVoicesToken
POST/ttsgenerateSpeechToken
POST/tiktok/extract-audioextractTikTokAudioToken
GET/subscription/statusgetSubscriptionStatusToken
POST/subscription/create-checkout-sessioncreateCheckoutSessionToken
POST/subscription/create-one-time-checkoutcreateOneTimeCheckoutToken
POST/subscription/create-portal-sessioncreatePortalSessionToken
GET/versionslistApiVersionsPublic
GET/v1/templateslistApiTemplatesToken
GET/v1/megetApiAccountToken
GET/v1/creditsgetApiCreditsToken
GET/v1/videoslistApiVideosToken
POST/v1/videoscreateApiVideoToken
GET/v1/videos/{id}getApiVideoToken
DELETE/v1/videos/{id}deleteApiVideoToken
POST/mcpcallMcpServerToken

Example request

curl https://api.singing.pet/templates

curl https://api.singing.pet/user/videos?page=1 \
  -H "Authorization: Bearer $FIREBASE_ID_TOKEN"

Errors

Every failure comes back as JSON. Anything not handled by a specific endpoint uses one envelope with a stable code, a human message and a hint about what to do next.

{
  "error": {
    "code": "not_found",
    "message": "No route matches GET /nope",
    "status": 404,
    "hint": "Check the path against https://singing.pet/openapi.json.",
    "documentation_url": "https://singing.pet/developers"
  },
  "message": "No route matches GET /nope"
}

Rendering is asynchronous

A create call returns as soon as the render is queued. Poll listUserVideos until the status moves from pending to completed or failed, or listen on the websocket at wss://api.singing.pet.

Limits

Audio must be between 2 and 30 seconds and the video is exactly as long as the audio. Text-to-speech takes up to 500 characters. Free accounts get two videos a month; paid plans are unlimited.

Markdown for agents

Every content page on this site serves clean Markdown when you ask for it with an Accept header, following acceptmarkdown.com. The hand-written site index lives at llms.txt.