Productions
Send comments
Send comments on the pitch and get the next pitch version, free. A production gets up to 6 pitch versions, so 5 rounds of comments; past that the answer is 429 with code cap. Pass pitchVersion to refuse the comments if the pitch changed meanwhile. If the next version cannot be written (the monthly pitch cap, or pitches being unavailable), the current pitch stands and a note event carries revisionRefused and message.
POST
/v1/productions/{id}/commentsAPI key with the productions scope.
Parameters
| Field | In | Type | Description |
|---|---|---|---|
idrequired | path | uuid | The production id. |
Request body
application/json
| Field | Type | Description |
|---|---|---|
commentrequired | string | |
pitchVersion | integer |
Responses
200The production, writing its next pitch.
400Invalid request.
401Missing, invalid or revoked key.
402The workspace owner's credits do not cover the video (code
credits). The current pitch stands.403The key lacks the scope, or the key's owner has view-only access to the workspace (code
forbidden).404Not found.
409The pitch is not ready, or its version is out of date (code
stage).429Rate limited, or a monthly cap reached.
503Raylight can't write pitches right now (code
disabled). The current pitch stands.200 response body
| Field | Type | Description |
|---|---|---|
productionrequired | object | |
production.idrequired | uuid | |
production.workspaceIdrequired | uuid | |
production.stagerequired | enum | One of: queued, writing_pitch, pitch_ready, greenlit, making, exporting, delivered, skipped, declined, cancelled, failed |
production.sourcerequired | object | |
production.source.kindrequired | enum | One of: app, api, mcp |
production.source.externalIdrequired | string | null | |
production.source.origin | object | null | Default null |
production.source.origin.providerrequired | string | |
production.source.origin.labelrequired | string | |
production.source.origin.url | url | null | Default null |
production.source.origin.ref | string | null | Default null |
production.source.origin.requestedBy | string | null | Default null |
production.briefrequired | object | |
production.brief.intentrequired | string | |
production.brief.context | string | null | Default null |
production.brief.media | object[] | |
production.brief.media[].idrequired | string | |
production.brief.media[].kindrequired | enum | One of: image, video |
production.brief.media[].urlrequired | url | |
production.brief.media[].namerequired | string | |
production.brief.media[].description | string | null | Default null |
production.brief.code | object[] | |
production.brief.code[].pathrequired | string | |
production.brief.code[].sourcerequired | string | |
production.brief.code[].status | enum | null | One of: added, modified, removed, renamedDefault null |
production.brief.code[].additions | integer | Default 0 |
production.brief.code[].deletions | integer | Default 0 |
production.brief.code[].patch | string | null | Default null |
production.brief.code[].digest | string | null | Default null |
production.brief.code[].score | number | Default 0 |
production.brief.code[].sourceOmitted | boolean | |
production.brief.format | object | |
production.brief.format.template | enum | One of: changelog, launch, feature, digest, customDefault changelog |
production.brief.format.durationMs | integer | Default 10000 |
production.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 |
production.brief.format.sound | object | |
production.brief.format.sound.voiceover | boolean | Default true |
production.brief.format.sound.music | boolean | Default true |
production.brief.format.sound.sfx | boolean | Default true |
production.brief.brand | object | |
production.brief.brand.name | string | null | Default null |
production.brief.brand.logoUrl | url | null | Default null |
production.brief.brand.primaryColor | string | null | Default null |
production.brief.brand.backgroundColor | string | null | Default null |
production.brief.brand.fontFamily | string | null | Default null |
production.brief.brand.tone | string | null | Default null |
production.pitchrequired | object | null | |
production.pitch.versionrequired | integer | |
production.pitch.verdict | enum | One of: video, skipDefault video |
production.pitch.verdictReason | string | null | Default null |
production.pitch.titlerequired | string | |
production.pitch.summaryrequired | string | |
production.pitch.shotsrequired | object[] | |
production.pitch.shots[].indexrequired | integer | |
production.pitch.shots[].titlerequired | string | |
production.pitch.shots[].durationMsrequired | integer | |
production.pitch.shots[].beat | string | null | Default null |
production.pitch.shots[].visualrequired | string | |
production.pitch.shots[].text | string | null | Default null |
production.pitch.shots[].voiceover | string | null | Default null |
production.pitch.shots[].mediaIds | string[] | |
production.pitch.shots[].codePaths | string[] | |
production.pitch.music | string | null | Default null |
production.pitch.estimatedCreditsrequired | integer | |
production.pitch.createdAtrequired | datetime | |
production.greenlightrequired | object | null | |
production.greenlight.moderequired | enum | One of: manual, auto |
production.greenlight.actorrequired | string | |
production.greenlight.actorName | string | null | |
production.greenlight.atrequired | datetime | |
production.greenlight.pitchVersionrequired | integer | |
production.greenlightModerequired | enum | One of: manual, auto |
production.deliveryrequired | object | null | |
production.delivery.shareUrlrequired | url | |
production.delivery.projectIdrequired | uuid | |
production.delivery.editUrlrequired | url | |
production.delivery.exportIdrequired | uuid | |
production.delivery.deliveredAtrequired | datetime | |
production.projectIdrequired | uuid | null | |
production.creditsChargedrequired | integer | |
production.errorrequired | string | null | Why the production failed, in words you can show a person. Never the render machine's own diagnostics. |
production.createdAtrequired | datetime | |
production.updatedAtrequired | datetime | |
production.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. |
production.pageUrl | url | The production's page in the Raylight app. Absent from payloads stored before the field existed. |
Example
curl -X POST https://api.raylight.app/v1/productions/$ID/comments \ -H "Authorization: Bearer $RAYLIGHT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "comment": "Open on the toggle, not the logo. Drop the pricing shot.", "pitchVersion": 1 }'