Yapper API
Api reference
POST
/sessions

Creates a session to group related generations in the Yapper web app. Pass its id as sessionId on POST /processes, POST /assets/import, and POST /assets/uploads. Free. Uses the processes:write scope.

Authorization

bearerAuth processes:write
AuthorizationBearer <token>

In: header

Scope: processes:write

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/sessions" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "string",  "title": "string",  "imageUrl": "http://example.com",  "imageAssetId": "string",  "generations": {    "inProgress": 0,    "completed": 0  },  "createdAt": "2019-08-24T14:15:22Z",  "updatedAt": "2019-08-24T14:15:22Z",  "webUrl": "http://example.com",  "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"  }}

Create a media process POST

Starts a generation process and charges team credits. V1 types: image-generation, video-generation, audio-generation, image-upscale, video-upscale, video-lipsync. The model must match the type (see GET /models). For seedance-2.5-edit, the first referenceVideos item is the required base video; editOperation defaults to edit, while extend, sequel, and prequel allow an omitted prompt. On seedance-2.5 and seedance-2.5-edit, every 480p run is a draft by default (send draft: false for a plain 480p render; draft: true also sets resolution 480), and draftVideoId (a draft's output assetId) on seedance-2.5 finishes that same shot at native 1080p within 7 days, edit drafts included; send it alone, since every other input comes from the draft. video-lipsync takes sourceVideoAssetId and audioAssetId from the team asset library; the server-measured audio duration determines its quote and charge. Sync-Max is train-once: omit trainingId on the first run, then reuse the trainingId returned on the process for faster later runs against the same trained source. Sync-Pro and Sync-v3 are single-shot and require no training. Always send an Idempotency-Key: retries with the same key and body return the original process instead of double-charging; the same key with a different body returns idempotency_conflict. input is validated per process type AND against the model's published capabilities (aspectRatios, resolutions, videoLengths from GET /models) — unsupported values are rejected with invalid_request, never silently coerced. Internal fields (batchId, filteringId, agent context) are ignored; pass sessionId instead to group the process and its outputs in a session (see /sessions), plus workspaceFolderId to file the outputs into a folder of that session's workspace as they finish. metadata (flat string/number/boolean/null values, max 16 keys) is echoed back on reads. webhookSecret is optional for legacy unsigned webhook delivery; when supplied with webhookUrl, notifications are HMAC-signed and may be attempted twice with a stable delivery id.

Create a workspace folder POST

Creates the folder at path along with any missing folders above it (like mkdir -p) and returns the last one. A folder already at path is returned unchanged. color and semantic apply to a newly created last folder. A file in the way of the path returns conflict. Unfoldered is reserved at the top level. The change shows up in the Yapper web app and is recorded with the API key or MCP client that made it; the in-app Yapper agent in that session is told about it on its next turn. Free. Uses the processes:write scope.