Yapper API
Api reference
GET
/assets/{assetId}

Returns one normalized asset. Deleted or cross-team assets return not_found.

Authorization

bearerAuth assets:read
AuthorizationBearer <token>

In: header

Scope: assets:read

Path Parameters

assetId*string

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/assets/string"
{  "id": "string",  "type": "image",  "name": "string",  "url": "http://example.com",  "thumbnailUrl": "http://example.com",  "width": 0,  "height": 0,  "duration": 0,  "mimeType": "string",  "source": "string",  "sourceProcessId": "string",  "trainingId": "string",  "favorite": true,  "createdAt": "2019-08-24T14:15:22Z",  "links": {    "self": "string"  }}
{  "error": {    "code": "string",    "message": "string",    "requestId": "string"  }}
{  "error": {    "code": "string",    "message": "string",    "requestId": "string"  }}
{  "error": {    "code": "string",    "message": "string",    "requestId": "string"  }}
{  "error": {    "code": "string",    "message": "string",    "requestId": "string"  }}

Generate speech audio POST

Legacy synchronous text-to-speech compatibility endpoint for ElevenLabs and Cartesia. New integrations should use audio-generation via POST /processes plus GET /audio/voices so model capabilities, references, process polling, and output lineage match image/video generation. This endpoint still generates spoken audio from a script and stores it as a team audio asset (readable via GET /assets/{assetId} and listed by GET /assets). No polling — the response returns the finished asset. Pass a voiceId from a previous response to reuse a voice, or a voiceQuery (e.g. "warm female narrator") to pick one by description; omitting both uses a neutral narrator. The first 5,000 script characters per team per UTC day are free; characters beyond that bill team credits at 30 credits per 1,000 characters for ElevenLabs voices or 15 credits per 1,000 characters for Cartesia voices (403 insufficient_credits when the team balance cannot cover the request). The response reports creditsCharged and freeCharactersRemainingToday. Always send an Idempotency-Key: retries with the same key and body replay the original response (Idempotency-Replayed: true) instead of double-billing and double-generating; the same key with a different body returns idempotency_conflict.

Get connection identity GET

Returns the team, acting user, credential kind/name, and granted scopes for the current API key or MCP OAuth connection. Use this before moving assets between multiple configured Yapper connections.