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.
Authorization
bearerAuth processes:writeIn: header
Scope: processes:write
Header Parameters
Stable caller-provided key for retry-safe process creation.
1 <= length <= 255Request 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
application/json
curl -X POST "https://example.com/processes" \ -H "Content-Type: application/json" \ -d '{ "type": "image-generation", "model": "gpt-image-2", "input": { "prompt": "A polished product photo of a stainless steel water bottle", "aspectRatio": "1:1", "imageResolution": "1080" }, "metadata": { "externalId": "job_123", "customerUserId": "user_456" } }'{ "dryRun": true, "type": "string", "model": "string", "creditsEstimated": 0, "canStart": true, "blockedBy": "team_limit", "fundingSource": "gimi_wallet", "externalWallet": { "provider": "gimi", "requiredCents": 0, "spendableCents": 0 }, "gimiWallet": { "requiredCents": 0, "spendableCents": 0 }, "credits": { "available": 0, "purchaseUrl": "string" }, "estimatedCompletionSeconds": 0}{ "id": "string", "type": "string", "status": "queued", "model": "string", "trainingId": "string", "draft": { "finishableUntil": "2019-08-24T14:15:22Z" }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "completedAt": "2019-08-24T14:15:22Z", "estimatedCompletionSeconds": 0, "suggestedPollAfterSeconds": 0, "creditsEstimated": 0, "creditsUsed": 0, "refunded": true, "error": { "code": "string", "message": "string" }, "input": {}, "outputs": [ { "type": "image", "assetId": "string", "url": "http://example.com", "thumbnailUrl": "http://example.com", "preview": { "url": "http://example.com", "width": 0, "height": 0, "mimeType": "string" }, "width": 0, "height": 0, "duration": 0, "mimeType": "string" } ], "metadata": { "property1": "string", "property2": "string" }, "sessionId": "string", "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" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}Create a direct upload POST
For local image, video, or audio files with no URL (use POST /assets/import for remote media). Returns a short-lived signed PUT URL: upload the bytes to uploadUrl sending every header from the response headers map (Content-Type plus the x-goog-content-length-range size cap — the storage provider rejects the PUT if either is missing or altered), then call the complete endpoint to finalize the asset. Spends no credits.
Create a session POST
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.