Yapper API
Api reference
DELETE
/sessions/{sessionId}/canvas/edges

Removes the wires from the source card into the target card, on every port or only targetPort. not_found when there is no such wire. Shows up live on the canvas in the Yapper web app. Free. Uses the processes:write scope.

Authorization

bearerAuth processes:write
AuthorizationBearer <token>

In: header

Scope: processes:write

Path Parameters

sessionId*string

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

application/json

curl -X DELETE "https://example.com/sessions/string/canvas/edges" \  -H "Content-Type: application/json" \  -d '{    "sourceNodeId": "string",    "targetNodeId": "string"  }'
{  "removedEdgeIds": [    "string"  ],  "target": {    "id": "string",    "kind": "text",    "label": "string",    "position": {      "x": 0,      "y": 0    },    "width": 0,    "height": 0,    "locked": true,    "ports": {      "inputs": [        {          "id": "prompt",          "type": "text",          "maxConnections": 0,          "connected": 0        }      ],      "output": "text"    },    "inputs": [      {        "port": "string",        "sourceNodeId": "string",        "order": 0      }    ],    "text": "string",    "asset": {      "assetId": "string",      "type": "image",      "url": "string",      "thumbnailUrl": "string",      "width": 0,      "height": 0,      "duration": 0,      "name": "string"    },    "pending": true,    "prompt": "string",    "modelId": "string",    "aspectRatio": "string",    "resolution": "string",    "numOutputs": 0,    "duration": 0,    "durationMode": "string",    "generateAudio": true,    "customSettings": {},    "promptGuide": "string",    "runCount": 0,    "runs": [      {        "id": "string",        "index": 0,        "status": "waiting",        "processId": "string",        "canvasRunId": "string",        "modelId": "string",        "startedAt": "2019-08-24T14:15:22Z",        "creditsEstimated": 0,        "outputs": [          {            "assetId": "string",            "type": "image",            "url": "string",            "thumbnailUrl": "string",            "width": 0,            "height": 0,            "duration": 0,            "name": "string"          }        ],        "text": "string",        "error": "string"      }    ],    "selectedOutput": {      "runId": "string",      "outputIndex": 0    },    "output": null,    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}
{  "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"  }}
{  "error": {    "code": "string",    "message": "string",    "requestId": "string"  }}

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.

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.