The workspace this token belongs to, its time zone, and the token's own scopes and expiry. A cheap way to check a token works.
Scope: Any one scope.
Field
Type
Description
workspace
object
workspace.id
string
Production Engine id.
workspace.name
string
workspace.time_zone
string
IANA zone shoot-day dates and call times are read in.
token
object
token.id
string
Production Engine id.
token.name
string
token.scopes
array of one of projects:read, projects:write, schedule:read, deliverables:read, deliverables:write, contacts:read, crew:read, locations:read, media:read, links:write, webhooks:manage
Creates a project the way the app's New project form does: it gets its board, counts against the plan's active projects, and lands on the Unassigned client unless client_id names one. Logged in the project's activity as api:<token name>.
Scope: projects:write
Parameter
In
Type
Description
Idempotency-Key
header
string
Up to 255 visible ASCII characters. A retry with the same key and body within 24 hours returns the first response instead of writing again.
Body field
Type
Description
name
string, required
status
one of pre_production, production, post_production, wrap, closed
Lifecycle status.
phase
one of brief, scope_bid, awarded, pre_pro, shoot, post, wrap, closed
Where the job is, from brief to closed. Setting a phase never closes the job; closing happens in Wrap.
description
string or null
agency
string or null
project_type
string or null
start_date
date (YYYY-MM-DD) or null
YYYY-MM-DD.
end_date
date (YYYY-MM-DD) or null
YYYY-MM-DD.
client_id
string
A client in this workspace. On create, omit it to use the workspace's Unassigned client.
contact_id
string or null
A client contact in this workspace, or null to clear it.
Field
Type
Description
id
string
Production Engine id.
name
string
status
one of ACTIVE, COMPLETE, ARCHIVED, pre_production, production, post_production, wrap, closed, archived
phase
one of brief, scope_bid, awarded, pre_pro, shoot, post, wrap, closed or null
Changes the fields sent and leaves the rest. A phase move is logged with the same guidance the app records. A project closed through Wrap answers 409 project_closed.
Scope: projects:write
Parameter
In
Type
Description
id
path, required
string
The record's id.
Body field
Type
Description
name
string
status
one of pre_production, production, post_production, wrap, closed
Lifecycle status.
phase
one of brief, scope_bid, awarded, pre_pro, shoot, post, wrap, closed
Where the job is, from brief to closed. Setting a phase never closes the job; closing happens in Wrap.
description
string or null
agency
string or null
project_type
string or null
start_date
date (YYYY-MM-DD) or null
YYYY-MM-DD.
end_date
date (YYYY-MM-DD) or null
YYYY-MM-DD.
client_id
string
A client in this workspace. On create, omit it to use the workspace's Unassigned client.
contact_id
string or null
A client contact in this workspace, or null to clear it.
Field
Type
Description
id
string
Production Engine id.
name
string
status
one of ACTIVE, COMPLETE, ARCHIVED, pre_production, production, post_production, wrap, closed, archived
phase
one of brief, scope_bid, awarded, pre_pro, shoot, post, wrap, closed or null
{
"id": "cmexampleproject01",
"name": "Spring Hero Spot",
"status": "production",
"phase": "shoot",
"client_id": "cmexampleclient001",
"contact_id": "cmexamplecontact01",
"description": "Two-day studio shoot for the spring launch.",
"agency": null,
"project_type": "Commercial",
"start_date": "2026-11-02",
"end_date": "2026-11-03",
"created_at": "2026-09-14T15:02:11.000Z",
"updated_at": "2026-09-30T15:05:00.000Z"
}
POST /projects/{id}/links
Points the project, or one of its deliverables, at an asset in your system. One link per provider and external_id on a project: a second answers 409 link_exists with the first one's id. The link shows on the project's Production Book.
Scope: links:write
Parameter
In
Type
Description
id
path, required
string
The record's id.
Idempotency-Key
header
string
Up to 255 visible ASCII characters. A retry with the same key and body within 24 hours returns the first response instead of writing again.
Body field
Type
Description
provider
string, required
Lowercase slug naming your system, e.g. shade.
external_id
string, required
The asset's id in your system.
url
string, required
https URL of the asset.
label
string or null
metadata
object or null
A JSON object of at most 4 KB. No credentials and no money.
deliverable_id
string or null
A deliverable on the same project, when the link is for one cut.
Field
Type
Description
id
string
Production Engine id.
project_id
string
Production Engine id.
deliverable_id
string or null
Production Engine id.
provider
string
Lowercase slug naming the other system, e.g. shade.
Changes a link's url, label, metadata or deliverable. provider and external_id are fixed once made. Only the token that created the link can change it.
Scope: links:write
Parameter
In
Type
Description
id
path, required
string
The record's id.
Body field
Type
Description
url
string
label
string or null
metadata
object or null
A JSON object of at most 4 KB. No credentials and no money.
deliverable_id
string or null
A Production Engine id in this workspace.
Field
Type
Description
id
string
Production Engine id.
project_id
string
Production Engine id.
deliverable_id
string or null
Production Engine id.
provider
string
Lowercase slug naming the other system, e.g. shade.
Posts a cut that lives on another site (Vimeo, YouTube or another https page) as the deliverable's next version, through the same code as the review room's Add a link. Open notes carry forward and the deliverable moves to IN_REVIEW.
Scope: deliverables:write
Parameter
In
Type
Description
id
path, required
string
The record's id.
Idempotency-Key
header
string
Up to 255 visible ASCII characters. A retry with the same key and body within 24 hours returns the first response instead of writing again.
Body field
Type
Description
url
string, required
The cut's https URL: Vimeo, YouTube or another page that can be framed.
file_name
string
What to call the cut. Defaults to the URL's host name.
Field
Type
Description
id
string
Production Engine id.
deliverable_id
string
Production Engine id.
version_number
integer
kind
one of upload, link
upload: a file stored in Production Engine. link: a cut on another site.
file_name
string
external_url
string or null
The cut's https URL for a link version; null for an upload.
The webhook endpoints this token created, newest first. Endpoints made in Production Engine's settings, or by another token, are never listed.
Scope: webhooks:manage
Parameter
In
Type
Description
limit
query
string
Rows per page, 1 to 100. Default 25.
cursor
query
string
The next_cursor from the previous page. Omit it for the first page.
Field of each item in data
Type
Description
id
string
Production Engine id.
name
string
url
string
The https URL deliveries are posted to.
events
array of one of project_updated, deliverable_created, deliverable_status_changed, deliverable_version_created, review_note_created, schedule_day_created, schedule_day_updated
enabled
boolean
False while paused. A paused endpoint's queued deliveries are not sent.
failing_since
timestamp (UTC) or null
When a delivery last used up all its retries; null once one succeeds.
Registers an https URL to receive signed deliveries for the events chosen. Only the seven REST events can be subscribed; money events and the other app-only events answer 422. Each event also needs the read scope for its record (projects:read for project_updated, deliverables:read for the deliverable and review note events, schedule:read for the shoot day events), or it answers 403 insufficient_scope. The response carries the whsec_ signing secret this once: store it now. A replay of the same Idempotency-Key returns the endpoint without it.
Scope: webhooks:manage
Parameter
In
Type
Description
Idempotency-Key
header
string
Up to 255 visible ASCII characters. A retry with the same key and body within 24 hours returns the first response instead of writing again.
Body field
Type
Description
name
string, required
What to call the endpoint, shown in Production Engine's settings.
url
string, required
An https URL on a public address. Redirects are not followed.
events
array of one of project_updated, deliverable_created, deliverable_status_changed, deliverable_version_created, review_note_created, schedule_day_created, schedule_day_updated, required
The events to send. Duplicates are dropped.
enabled
boolean
False pauses deliveries; true resumes them.
Field
Type
Description
id
string
Production Engine id.
name
string
url
string
The https URL deliveries are posted to.
events
array of one of project_updated, deliverable_created, deliverable_status_changed, deliverable_version_created, review_note_created, schedule_day_created, schedule_day_updated
enabled
boolean
False while paused. A paused endpoint's queued deliveries are not sent.
failing_since
timestamp (UTC) or null
When a delivery last used up all its retries; null once one succeeds.
last_delivered_at
timestamp (UTC) or null
ISO 8601 instant in UTC.
created_at
timestamp (UTC)
ISO 8601 instant in UTC.
updated_at
timestamp (UTC)
ISO 8601 instant in UTC.
secret
string
The whsec_ signing secret, returned in this first response only. A replay of the same Idempotency-Key returns the endpoint without it.
One endpoint this token created. Any other endpoint answers 404.
Scope: webhooks:manage
Parameter
In
Type
Description
id
path, required
string
The record's id.
Field
Type
Description
id
string
Production Engine id.
name
string
url
string
The https URL deliveries are posted to.
events
array of one of project_updated, deliverable_created, deliverable_status_changed, deliverable_version_created, review_note_created, schedule_day_created, schedule_day_updated
enabled
boolean
False while paused. A paused endpoint's queued deliveries are not sent.
failing_since
timestamp (UTC) or null
When a delivery last used up all its retries; null once one succeeds.
Pauses or resumes the endpoint (enabled), or changes its name, url or events. Resuming clears failing_since. The signing secret stays the same. Only the token that created the endpoint can change it.
Scope: webhooks:manage
Parameter
In
Type
Description
id
path, required
string
The record's id.
Body field
Type
Description
name
string
What to call the endpoint, shown in Production Engine's settings.
url
string
An https URL on a public address. Redirects are not followed.
events
array of one of project_updated, deliverable_created, deliverable_status_changed, deliverable_version_created, review_note_created, schedule_day_created, schedule_day_updated
The events to send. Duplicates are dropped.
enabled
boolean
False pauses deliveries; true resumes them.
Field
Type
Description
id
string
Production Engine id.
name
string
url
string
The https URL deliveries are posted to.
events
array of one of project_updated, deliverable_created, deliverable_status_changed, deliverable_version_created, review_note_created, schedule_day_created, schedule_day_updated
enabled
boolean
False while paused. A paused endpoint's queued deliveries are not sent.
failing_since
timestamp (UTC) or null
When a delivery last used up all its retries; null once one succeeds.
Posts a signed event named test, with an empty data object, to the endpoint now, outside the retry queue, and reports what your server answered. A receiver that fails is still a 200 here, with delivered false.
Scope: webhooks:manage
Parameter
In
Type
Description
id
path, required
string
The record's id.
Idempotency-Key
header
string
Up to 255 visible ASCII characters. A retry with the same key and body within 24 hours returns the first response instead of writing again.
Field
Type
Description
delivered
boolean
True when your server answered 2xx within 10 seconds.
status_code
integer or null
What your server answered, or null when it could not be reached.