Productions
List productions
Newest first. Pass externalId to find the production an earlier create with that id made (the same match a repeated create replays), for example to check whether a pull request already has one before sending its brief again. Every code file in each brief has source and patch emptied and carries sourceOmitted: true; read one production for its full files.
GET
/v1/productionsAPI key with the productions scope.
Parameters
| Field | In | Type | Description |
|---|---|---|---|
workspaceId | query | uuid | |
stage | query | string | |
limit | query | integer | |
externalId | query | string |
Responses
200Productions, newest first.
400Invalid request.
401Missing, invalid or revoked key.
403The key lacks the scope, or the key's owner has view-only access to the workspace (code
forbidden).404Not found.
429Rate limited, or a monthly cap reached.
200 response body
| Field | Type | Description |
|---|---|---|
productionsrequired | object[] | |
productions[].idrequired | uuid | |
productions[].workspaceIdrequired | uuid | |
productions[].stagerequired | enum | One of: queued, writing_pitch, pitch_ready, greenlit, making, exporting, delivered, skipped, declined, cancelled, failed |
productions[].sourcerequired | object | |
productions[].source.kindrequired | enum | One of: app, api, mcp |
productions[].source.externalIdrequired | string | null | |
productions[].source.origin | object | null | Default null |
productions[].source.origin.providerrequired | string | |
productions[].source.origin.labelrequired | string | |
productions[].source.origin.url | url | null | Default null |
productions[].source.origin.ref | string | null | Default null |
productions[].source.origin.requestedBy | string | null | Default null |
productions[].briefrequired | object | |
productions[].brief.intentrequired | string | |
productions[].brief.context | string | null | Default null |
productions[].brief.media | object[] | |
productions[].brief.media[].idrequired | string | |
productions[].brief.media[].kindrequired | enum | One of: image, video |
productions[].brief.media[].urlrequired | url | |
productions[].brief.media[].namerequired | string | |
productions[].brief.media[].description | string | null | Default null |
productions[].brief.code | object[] | |
productions[].brief.code[].pathrequired | string | |
productions[].brief.code[].sourcerequired | string | |
productions[].brief.code[].status | enum | null | One of: added, modified, removed, renamedDefault null |
productions[].brief.code[].additions | integer | Default 0 |
productions[].brief.code[].deletions | integer | Default 0 |
productions[].brief.code[].patch | string | null | Default null |
productions[].brief.code[].digest | string | null | Default null |
productions[].brief.code[].score | number | Default 0 |
productions[].brief.code[].sourceOmitted | boolean | |
productions[].brief.format | object | |
productions[].brief.format.template | enum | One of: changelog, launch, feature, digest, customDefault changelog |
productions[].brief.format.durationMs | integer | Default 10000 |
productions[].brief.format.aspect | enum | One of: 16:9, 4:3, 3:2, 21:9, 1:1, 9:16, 3:4, 2:3, 4:5Default 16:9 |
productions[].brief.format.sound | object | |
productions[].brief.format.sound.voiceover | boolean | Default true |
productions[].brief.format.sound.music | boolean | Default true |
productions[].brief.format.sound.sfx | boolean | Default true |
productions[].brief.brand | object | |
productions[].brief.brand.name | string | null | Default null |
productions[].brief.brand.logoUrl | url | null | Default null |
productions[].brief.brand.primaryColor | string | null | Default null |
productions[].brief.brand.backgroundColor | string | null | Default null |
productions[].brief.brand.fontFamily | string | null | Default null |
productions[].brief.brand.tone | string | null | Default null |
productions[].pitchrequired | object | null | |
productions[].pitch.versionrequired | integer | |
productions[].pitch.verdict | enum | One of: video, skipDefault video |
productions[].pitch.verdictReason | string | null | Default null |
productions[].pitch.titlerequired | string | |
productions[].pitch.summaryrequired | string | |
productions[].pitch.shotsrequired | object[] | |
productions[].pitch.shots[].indexrequired | integer | |
productions[].pitch.shots[].titlerequired | string | |
productions[].pitch.shots[].durationMsrequired | integer | |
productions[].pitch.shots[].beat | string | null | Default null |
productions[].pitch.shots[].visualrequired | string | |
productions[].pitch.shots[].text | string | null | Default null |
productions[].pitch.shots[].voiceover | string | null | Default null |
productions[].pitch.shots[].mediaIds | string[] | |
productions[].pitch.shots[].codePaths | string[] | |
productions[].pitch.music | string | null | Default null |
productions[].pitch.estimatedCreditsrequired | integer | |
productions[].pitch.createdAtrequired | datetime | |
productions[].greenlightrequired | object | null | |
productions[].greenlight.moderequired | enum | One of: manual, auto |
productions[].greenlight.actorrequired | string | |
productions[].greenlight.actorName | string | null | |
productions[].greenlight.atrequired | datetime | |
productions[].greenlight.pitchVersionrequired | integer | |
productions[].greenlightModerequired | enum | One of: manual, auto |
productions[].deliveryrequired | object | null | |
productions[].delivery.shareUrlrequired | url | |
productions[].delivery.projectIdrequired | uuid | |
productions[].delivery.editUrlrequired | url | |
productions[].delivery.exportIdrequired | uuid | |
productions[].delivery.deliveredAtrequired | datetime | |
productions[].projectIdrequired | uuid | null | |
productions[].creditsChargedrequired | integer | |
productions[].errorrequired | string | null | Why the production failed, in words you can show a person. Never the render machine's own diagnostics. |
productions[].createdAtrequired | datetime | |
productions[].updatedAtrequired | datetime | |
productions[].terminal | boolean | True once the stage is one the production never leaves (delivered, skipped, declined, cancelled, failed, or a terminal stage added later). Stop polling when it is true; it is computed by the server, so it stays right for stages your client does not know yet. Absent from payloads stored before the field existed. |
productions[].pageUrl | url | The production's page in the Raylight app. Absent from payloads stored before the field existed. |
Example
curl https://api.raylight.app/v1/productions \ -H "Authorization: Bearer $RAYLIGHT_API_KEY"