RaylightAPI

Productions

Greenlight the pitch

Charges the production credits once, creates the project and queues the video for a render machine. Pass pitchVersion to refuse the greenlight if the pitch changed since you read it.

POST/v1/productions/{id}/greenlight

API key with the productions scope.

Parameters

FieldInTypeDescription
idrequiredpathuuidThe production id.

Request body

application/json

FieldTypeDescription
pitchVersioninteger

Responses

200The greenlit production.
400Invalid request.
401Missing, invalid or revoked key.
402Not enough credits (code credits).
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.

200 response body

FieldTypeDescription
productionrequiredobject
production.idrequireduuid
production.workspaceIdrequireduuid
production.stagerequiredenumOne of: queued, writing_pitch, pitch_ready, greenlit, making, exporting, delivered, skipped, declined, cancelled, failed
production.sourcerequiredobject
production.source.kindrequiredenumOne of: app, api, mcp
production.source.externalIdrequiredstring | null
production.source.originobject | nullDefault null
production.source.origin.providerrequiredstring
production.source.origin.labelrequiredstring
production.source.origin.urlurl | nullDefault null
production.source.origin.refstring | nullDefault null
production.source.origin.requestedBystring | nullDefault null
production.briefrequiredobject
production.brief.intentrequiredstring
production.brief.contextstring | nullDefault null
production.brief.mediaobject[]
production.brief.media[].idrequiredstring
production.brief.media[].kindrequiredenumOne of: image, video
production.brief.media[].urlrequiredurl
production.brief.media[].namerequiredstring
production.brief.media[].descriptionstring | nullDefault null
production.brief.codeobject[]
production.brief.code[].pathrequiredstring
production.brief.code[].sourcerequiredstring
production.brief.code[].statusenum | nullOne of: added, modified, removed, renamedDefault null
production.brief.code[].additionsintegerDefault 0
production.brief.code[].deletionsintegerDefault 0
production.brief.code[].patchstring | nullDefault null
production.brief.code[].digeststring | nullDefault null
production.brief.code[].scorenumberDefault 0
production.brief.code[].sourceOmittedboolean
production.brief.formatobject
production.brief.format.templateenumOne of: changelog, launch, feature, digest, customDefault changelog
production.brief.format.durationMsintegerDefault 10000
production.brief.format.aspectenumOne of: 16:9, 4:3, 3:2, 21:9, 1:1, 9:16, 3:4, 2:3, 4:5Default 16:9
production.brief.format.soundobject
production.brief.format.sound.voiceoverbooleanDefault true
production.brief.format.sound.musicbooleanDefault true
production.brief.format.sound.sfxbooleanDefault true
production.brief.brandobject
production.brief.brand.namestring | nullDefault null
production.brief.brand.logoUrlurl | nullDefault null
production.brief.brand.primaryColorstring | nullDefault null
production.brief.brand.backgroundColorstring | nullDefault null
production.brief.brand.fontFamilystring | nullDefault null
production.brief.brand.tonestring | nullDefault null
production.pitchrequiredobject | null
production.pitch.versionrequiredinteger
production.pitch.verdictenumOne of: video, skipDefault video
production.pitch.verdictReasonstring | nullDefault null
production.pitch.titlerequiredstring
production.pitch.summaryrequiredstring
production.pitch.shotsrequiredobject[]
production.pitch.shots[].indexrequiredinteger
production.pitch.shots[].titlerequiredstring
production.pitch.shots[].durationMsrequiredinteger
production.pitch.shots[].beatstring | nullDefault null
production.pitch.shots[].visualrequiredstring
production.pitch.shots[].textstring | nullDefault null
production.pitch.shots[].voiceoverstring | nullDefault null
production.pitch.shots[].mediaIdsstring[]
production.pitch.shots[].codePathsstring[]
production.pitch.musicstring | nullDefault null
production.pitch.estimatedCreditsrequiredinteger
production.pitch.createdAtrequireddatetime
production.greenlightrequiredobject | null
production.greenlight.moderequiredenumOne of: manual, auto
production.greenlight.actorrequiredstring
production.greenlight.actorNamestring | null
production.greenlight.atrequireddatetime
production.greenlight.pitchVersionrequiredinteger
production.greenlightModerequiredenumOne of: manual, auto
production.deliveryrequiredobject | null
production.delivery.shareUrlrequiredurl
production.delivery.projectIdrequireduuid
production.delivery.editUrlrequiredurl
production.delivery.exportIdrequireduuid
production.delivery.deliveredAtrequireddatetime
production.projectIdrequireduuid | null
production.creditsChargedrequiredinteger
production.errorrequiredstring | nullWhy the production failed, in words you can show a person. Never the render machine's own diagnostics.
production.createdAtrequireddatetime
production.updatedAtrequireddatetime
production.terminalbooleanTrue 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.pageUrlurlThe production's page in the Raylight app. Absent from payloads stored before the field existed.

Example

curl
curl -X POST https://api.raylight.app/v1/productions/$ID/greenlight \  -H "Authorization: Bearer $RAYLIGHT_API_KEY" \  -H "Content-Type: application/json" \  -d '{ "pitchVersion": 1 }'