Edit the project's conductor by id-addressed ops
The project's musical grid as a conductor: tempo points with curved ramps, signature changes, key changes, markers and an arrangement lane, anchored in musical position (q = quarter-notes from bar 1,
or bar + beat) so seconds are derived and an edit at bar 5 does not slide bar 9. PATCH /tempo (set_tempo) stays for flat edits and flattens ramps.
Ops apply in order, all or nothing; items are addressed by id, so concurrent edits to different items merge. dry_run: true writes nothing and returns the diff in seconds (bars that move, music-span scenes, sound cues). A real write stores settings.conductor and the derived settings.tempo together; a grid change retimes bound sound cues and re-conforms music loops like PATCH /tempo. Scene windows are NOT re-fitted. Send expected_version for a strict compare-and-set (stale = 409 conflict). Free.
Authorization
bearerAuth Typecut API key. Generate one in app.typecut.ai → Settings → API keys. Send as Authorization: Bearer tc_live_….
In: header
Path Parameters
uuidRequest 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/conductor" \ -H "Content-Type: application/json" \ -d '{ "ops": [ { "op": "add_point", "bar": 5, "beat": 1, "bpm": 134, "curve": 0.3 } ] }'{
"data": {
"conductor": {
"version": 2,
"originSec": 0,
"keyScale": "string",
"source": "default",
"meter": {
"beats": 1,
"unit": 1
},
"signatures": [
{
"id": "string",
"bar": 2,
"beats": 0,
"unit": 0,
"label": "string"
}
],
"keys": [
{
"id": "string",
"q": 0,
"keyScale": "string"
}
],
"points": [
{
"id": "string",
"q": 0,
"bpm": 20,
"curve": -1,
"hold": true,
"label": "string"
}
],
"markers": [
{
"id": "string",
"q": 0,
"label": "string",
"color": "string"
}
],
"arrangement": [
{
"id": "string",
"startBar": 0,
"endBar": 0,
"label": "string",
"color": "string"
}
],
"warp": {
"mode": "off",
"nativeMapRef": "string"
}
},
"origin": "conductor",
"stale_v2": true,
"has_ramps": true,
"warnings": [
"string"
],
"edit_version": 0,
"dry_run": true,
"changed": true,
"fixes": [
"string"
],
"diff": {
"changed": true,
"grid_changed": true,
"summary": "string",
"tempo": {
"before": {
"property1": null,
"property2": null
},
"after": {
"property1": null,
"property2": null
}
},
"bars": {
"changed": 0,
"first_changed_bar": 0,
"max_shift_ms": 0,
"samples": [
[
0,
0,
0
]
]
},
"film_end": {
"sec": 0,
"bar_before": 0,
"bar_after": 0
},
"scenes": {
"shifted_in_bars": 0,
"music_span": [
{
"scene_id": "string",
"music_bars": 0,
"start_bar": 0,
"start_sec_before": 0,
"start_sec_after": 0,
"duration_before": 0,
"duration_after": 0,
"delta_sec": 0
}
]
},
"sfx": {
"scenes": 0,
"bound_cues": 0,
"cues_moved": 0
},
"ripple": {
"requested": "ripple",
"reflowed": true,
"note": "string"
},
"reflow": null
},
"follow_ups": {
"sfx": {
"scenes": 0,
"changed": 0,
"stemsPending": 0
},
"music": [
{
"property1": null,
"property2": null
}
]
}
}
}{
"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"
}
}
}Read the project's conductor (tempo map) GET
The project's musical grid as a conductor: tempo points with curved ramps, signature changes, key changes, markers and an arrangement lane, anchored in musical position (q = quarter-notes from bar 1,
Replace the project's whole conductor PUT
The project's musical grid as a conductor: tempo points with curved ramps, signature changes, key changes, markers and an arrangement lane, anchored in musical position (q = quarter-notes from bar 1,