# Send comments through a link

> Send comments through a link. POST /production-links/{token}/comments in the Raylight API.

### POST /production-links/{token}/comments

**Send comments through a link**

Auth: none (public).

Parameters:

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `token` | path | string | yes | The signed token from the link. |

Request body (application/json):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `comment` | string | yes |  |

Responses:

| Status | Meaning |
| --- | --- |
| 200 | Writing the next pitch. |
| 400 | The comment is missing or too long. |
| 402 | The workspace owner's credits do not cover the video (code `credits`). The current pitch stands. |
| 403 | The link was sent to someone who can no longer greenlight in this workspace, or to a webhook endpoint that was deleted (code `revoked`). |
| 404 | Not a valid link (code `not_found`). |
| 409 | The pitch moved on since the link was minted, or was already answered (code `stale`). |
| 410 | The link expired (code `expired`). Reading it still works and says `state: expired`. |
| 429 | Rate limited (30 a minute per address), or the workspace reached a monthly cap (code `cap`). |
| 503 | Greenlight links are not switched on for this server (code `disabled`). |

Response body (200):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `link` | object | yes |  |
| `link.productionId` | uuid | yes |  |
| `link.workspaceName` | string | yes |  |
| `link.stage` | enum | yes | One of: `queued`, `writing_pitch`, `pitch_ready`, `greenlit`, `making`, `exporting`, `delivered`, `skipped`, `declined`, `cancelled`, `failed`. |
| `link.state` | enum | yes | One of: `open`, `stale`, `expired`. |
| `link.pitchVersion` | integer | yes |  |
| `link.currentPitchVersion` | integer | yes |  |
| `link.intent` | string | yes |  |
| `link.origin` | object \| null | yes |  |
| `link.origin.provider` | string | yes |  |
| `link.origin.label` | string | yes |  |
| `link.origin.url` | url \| null | no | Default `null`. |
| `link.origin.ref` | string \| null | no | Default `null`. |
| `link.origin.requestedBy` | string \| null | no | Default `null`. |
| `link.format` | object | yes |  |
| `link.format.template` | enum | no | One of: `changelog`, `launch`, `feature`, `digest`, `custom`. Default `changelog`. |
| `link.format.durationMs` | integer | no | Default `10000`. |
| `link.format.aspect` | enum | no | One of: `16:9`, `4:3`, `3:2`, `21:9`, `1:1`, `9:16`, `3:4`, `2:3`, `4:5`. Default `16:9`. |
| `link.format.sound` | object | no |  |
| `link.format.sound.voiceover` | boolean | no | Default `true`. |
| `link.format.sound.music` | boolean | no | Default `true`. |
| `link.format.sound.sfx` | boolean | no | Default `true`. |
| `link.pitch` | object \| null | yes |  |
| `link.pitch.version` | integer | yes |  |
| `link.pitch.verdict` | enum | no | One of: `video`, `skip`. Default `video`. |
| `link.pitch.verdictReason` | string \| null | no | Default `null`. |
| `link.pitch.title` | string | yes |  |
| `link.pitch.summary` | string | yes |  |
| `link.pitch.shots` | object[] | yes |  |
| `link.pitch.shots[].index` | integer | yes |  |
| `link.pitch.shots[].title` | string | yes |  |
| `link.pitch.shots[].durationMs` | integer | yes |  |
| `link.pitch.shots[].beat` | string \| null | no | Default `null`. |
| `link.pitch.shots[].visual` | string | yes |  |
| `link.pitch.shots[].text` | string \| null | no | Default `null`. |
| `link.pitch.shots[].voiceover` | string \| null | no | Default `null`. |
| `link.pitch.shots[].mediaIds` | string[] | no |  |
| `link.pitch.shots[].codePaths` | string[] | no |  |
| `link.pitch.music` | string \| null | no | Default `null`. |
| `link.pitch.estimatedCredits` | integer | yes |  |
| `link.pitch.createdAt` | datetime | yes |  |
| `link.pitchMarkdown` | string \| null | yes |  |
| `link.delivery` | object \| null | yes |  |
| `link.delivery.shareUrl` | url | yes |  |
| `link.delivery.projectId` | uuid | yes |  |
| `link.delivery.editUrl` | url | yes |  |
| `link.delivery.exportId` | uuid | yes |  |
| `link.delivery.deliveredAt` | datetime | yes |  |
| `link.pageUrl` | url | yes |  |
| `link.revisionsLeft` | integer | yes |  |
| `link.expiresAt` | datetime | yes |  |
| `link.channel` | enum | no | One of: `email`, `webhook`. |

Example (curl):

```bash
curl -X POST https://api.raylight.app/production-links/$TOKEN/comments \
  -H "Content-Type: application/json" \
  -d '{ "comment": "Shorter opening, keep the dashboard shot." }'
```

## More

- Previous: [Greenlight through a link](https://www.raylight.app/docs/reference/post-production-links-token-greenlight.md)
- Next: [Decline through a link](https://www.raylight.app/docs/reference/post-production-links-token-decline.md)
- All docs: https://www.raylight.app/llms.txt
- Everything in one file: https://www.raylight.app/llms-full.txt
- OpenAPI: https://api.raylight.app/v1/openapi.json
