API referenceScenes

Set the transition on the cut before a scene

Set — or clear — the transition on ONE scene boundary.

A seam is named by its INCOMING scene, which is how the timeline stores it and how the editor addresses it. On a chapter's first scene the seam is the CHAPTER JOIN, which only a geometric transition (render_mode geometric) can cross (400 otherwise); the project's first scene has no seam (409).

This is the per-seam control. POST /projects's transitions list only cycles slugs across every boundary at plan time, so before this endpoint there was no way to say "this cut, ink, 700ms" — or to change a transition after generation.

Slugs are validated against the same curated set GET /catalogs/transitions offers, so an unknown slug is refused rather than written and rendered as a silent cross-dissolve. Omitting duration_ms takes the transition's own default, which is usually right: a textural transition needs materially longer than a crossfade before it reads at all.

PUT
/scenes/{sceneId}/transition

Authorization

bearerAuth
AuthorizationBearer <token>

Typecut API key. Generate one in app.typecut.ai → Settings → API keys. Send as Authorization: Bearer tc_live_….

In: header

Path Parameters

sceneId*string
Formatuuid

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 PUT "https://example.com/scenes/497f6eca-6276-4993-bfeb-53cbbbba6f08/transition" \  -H "Content-Type: application/json" \  -d '{}'
{
  "data": {
    "scene_id": "861eef56-1159-4a95-802f-abab2d0cc192",
    "chapter_id": "88d12d31-77f2-44df-910e-b37f83274f80",
    "transition": "string",
    "duration_ms": 0,
    "length": "string",
    "sound": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}