API referenceProjects

Set a project's brand mark and its motion

The pinned brand mark — the corner "bug" — on one project: image, corner, size, opacity, and a MOTION FORMULA.

Before this endpoint the mark was reachable only from the settings panel and the creation wizard, so a film built through the API came out unbranded even for a channel that has a logo configured.

Every field is optional and only what you send changes: branding shares projects.settings with captions, audio and theme, so the write is a merge.

formula is what makes the mark live. none is a static stamp; tick squashes it on every downbeat of the project's own measured grid; ghost rests it low and lifts it on an authored scene cue. The motion compiles against the same bars the composition uses, so it lands with the music rather than near it. Amplitudes are capped and ticks carry a cooldown — a mark cannot be made to strobe. An unknown slug is refused rather than silently rendering static.

PUT
/projects/{id}/branding

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

id*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/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/branding" \  -H "Content-Type: application/json" \  -d '{}'
{
  "data": {
    "enabled": true,
    "url": "string",
    "position": "string",
    "scale": 0,
    "opacity": 0,
    "formula": "string",
    "edit_version": 0
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "string",
    "code": "string",
    "message": "string"
  }
}
{
  "error": {
    "type": "conflict",
    "code": "conflict",
    "message": "string",
    "current_version": 0,
    "expected_version": 0,
    "last_writer": {
      "label": "string",
      "kind": "editor",
      "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",
      "at": "string"
    }
  }
}