API referenceProjects

Change the project's tempo

The project's musical grid (settings.tempo): bpm, meter, key, where bar 1 falls, and tempo sections.

It is what grid-bound motion, sound cues, grooves and music loops are timed against.

Does what the editor's tempo chip does: every grid-bound sound cue moves to the same bar:beat on the new grid, and a music LOOP is re-conformed (time-stretched) to it. A full-length track keeps its own tempo; returning to a loop's own tempo restores its original file. Idempotent. A FLAT edit: a project with tempo ramps (a conductor map) has them flattened into steps (flattened_ramps: true); edit ramps with PATCH /projects/{id}/conductor. Free.

PATCH
/projects/{id}/tempo

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 PATCH "https://example.com/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/tempo" \  -H "Content-Type: application/json" \  -d '{    "bpm": 120  }'
{
  "data": {
    "tempo": {
      "version": 1,
      "bpm": 0,
      "meter": {
        "beats": 1,
        "unit": 1
      },
      "keyScale": "string",
      "originSec": 0,
      "sections": [
        {
          "id": "string",
          "atSec": 0,
          "label": "string",
          "bpm": 0,
          "meter": {
            "beats": 1,
            "unit": 1
          },
          "keyScale": "string"
        }
      ],
      "source": "user"
    },
    "changed": true,
    "edit_version": 0,
    "sfx": {
      "scenes": 0,
      "changed": 0,
      "stemsPending": 0
    },
    "music": [
      {
        "cueId": "string",
        "trackId": "string",
        "status": "unchanged",
        "reason": "string",
        "assetUrl": "string",
        "unitDuration": 0
      }
    ],
    "flattened_ramps": true
  }
}
{
  "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"
    }
  }
}