broadcast.createdDelivered when this RSC+ platform action completes.
Opening RSC Flow Docs
RSC Flow 1RSC Flow turns RSC+ events into secure, predictable webhook requests. This complete reference covers syntax, typed values, event payloads, delivery, testing, troubleshooting, and production safeguards.
Create a coded integration in Studio, paste this program, choose an event, add an HTTPS endpoint, then validate and save.
RSCFLOW 1
METHOD POST
HEADER X-Team = "RSC+"
REQUIRE data.title
SET event = event
SET title = data.title
SET payload = dataRSCFLOW 1. Statements run from top to bottom. The final body is serialized as JSON and signed when a signing secret is configured.RSC Flow is line oriented. Blank lines and lines beginning with # are ignored. Values can be variable paths, JSON strings, objects, arrays, numbers, booleans, or null.
| Statement | Behavior |
|---|---|
| RSCFLOW 1 | Declares language version 1. It must be the first real statement. |
| METHOD POST | Sets POST, PUT, or PATCH. POST is the default. |
| HEADER Name = value | Adds a safe custom request header. |
| REQUIRE data.title | Stops delivery when a required value is missing. |
| SET output.path = value | Writes a typed value into the JSON body. |
| PUSH output.list = value | Appends a value to an output array. |
| BODY value | Replaces the complete request body. |
Use variable paths directly to preserve their type. Use {{path}} inside a quoted string or JSON value to interpolate text.
| Variable | Meaning |
|---|---|
| event | The event name, such as video.published. |
| createdAt | The event timestamp in ISO 8601 format. |
| source | The source identifier, currently rsc-plus. |
| data | The complete event payload as an object. |
| data.title | A nested field from the event payload. |
| integration.id | The connected integration identifier. |
| integration.name | The integration name from Studio. |
Choose one event in Studio or select all events. Test deliveries use sample data so you can verify the request before it reaches production.
broadcast.createdDelivered when this RSC+ platform action completes.
broadcast.endedDelivered when this RSC+ platform action completes.
video.publishedDelivered when this RSC+ platform action completes.
short.publishedDelivered when this RSC+ platform action completes.
short.ad.impressionDelivered when this RSC+ platform action completes.
announcement.publishedDelivered when this RSC+ platform action completes.
ad.forcedDelivered when this RSC+ platform action completes.
effect.triggeredDelivered when this RSC+ platform action completes.
platform.maintenanceDelivered when this RSC+ platform action completes.
These programs are ready to paste into Integration Studio. Change the endpoint and wording to match your workflow.
RSCFLOW 1
METHOD POST
REQUIRE data.title
BODY {"content":"New on RSC+: {{data.title}}"}RSCFLOW 1
METHOD PATCH
SET event_name = event
SET story.title = data.title
PUSH tags = "sports"
PUSH tags = data.slug{"method":"POST","headers":{"X-Team":"RSC+"},"body":{"event":"{{event}}","payload":"{{data}}"}}RSC Flow values are typed. Direct variable paths preserve their original type. Interpolation inserts text into a string or JSON structure.
| Syntax | Result |
|---|---|
| "Championship" | String literal |
| 1284 | Number literal |
| true or false | Boolean literal |
| null | Null literal |
| {"status":"ready"} | JSON object literal |
| ["live","sports"] | JSON array literal |
| data.title | Variable path that preserves its type |
| "Published: {{data.title}}" | Interpolated text |
| {"title":"{{data.title}}"} | Interpolated JSON |
program = version, statement*
version = "RSCFLOW 1"
statement = method | header | require | set | push | body
method = "METHOD " ("POST" | "PUT" | "PATCH")
header = "HEADER " name " = " value
require = "REQUIRE " variable_path
set = "SET " output_path " = " value
push = "PUSH " output_path " = " value
body = "BODY " value
value = variable_path | JSON value | interpolated JSONSET payload = data to forward the complete typed data object. Using "{{data}}" turns the value into text.Statements run from top to bottom and build one outgoing request. The order is deterministic, so the same event and program produce the same request.
The event envelope supplies event, createdAt, source, data, and integration values.
REQUIRE stops the delivery when an essential path is missing, null, or empty.
HEADER evaluates safe custom metadata without replacing protected transport headers.
SET writes fields, PUSH appends arrays, and BODY replaces the complete result.
RSCFLOW 1
METHOD PATCH
SET notification.kind = event
SET story.title = data.title
SET story.is_live = false
PUSH story.tags = "rsc-plus"
PUSH story.tags = data.slug
SET metrics.views = 1284Every trigger uses the same outer envelope. Event-specific fields live inside data. Integrations should ignore unknown fields so new platform data remains backward compatible.
{
"id": "evt_01JABC123",
"event": "video.published",
"createdAt": "2026-08-12T18:42:00.000Z",
"source": "rsc-plus",
"data": {
"id": "video_782",
"title": "Championship Replay",
"slug": "championship-replay",
"status": "published",
"views": 1284
}
}| Event | Common data |
|---|---|
| broadcast.created | Broadcast ID, title, status, and Cloudflare Live input details. |
| broadcast.ended | Broadcast ID, title, status, and recording details. |
| video.published | Video ID, title, slug, status, and views. |
| short.published | Short ID, title, slug, creator, and category. |
| short.ad.impression | Campaign ID, title, placement, and impression data. |
| announcement.published | Announcement ID, title, message, and severity. |
| ad.forced | Campaign ID, title, duration, and placement. |
| effect.triggered | Effect ID, message, subtitle, and duration. |
| platform.maintenance | Access state, title, message, and automatic reopen time. |
RSC+ sends compact JSON to the configured public HTTPS endpoint. A healthy receiver returns any 2xx status quickly, then performs slower work in its own queue.
POST /rsc/events HTTP/1.1
Content-Type: application/json
X-RSC-Event: video.published
X-RSC-Delivery: evt_01JABC123
X-RSC-Signature-256: sha256=6d4c...
X-RSC-Automation: studioBodies use application/json with UTF-8 encoding.
X-RSC-Event identifies the trigger before the body is parsed.
Use the delivery ID for logs and duplicate protection.
Return a 2xx status when the event has been accepted.
RSCFLOW 1
METHOD PUT
REQUIRE data.id
BODY {"type":"{{event}}","resource":{"id":"{{data.id}}","title":"{{data.title}}"},"sent_at":"{{createdAt}}"}Validation compiles the program with sample data and previews the request. Testing sends a real request to the saved endpoint.
Resolve every line-specific error before saving.
Check the method, headers, body nesting, and JSON types.
Confirm the destination logs contain the expected request.
Review the last delivery state after the first real event.
Validation errors identify program problems before delivery. HTTP errors mean the program compiled but the destination rejected or failed the request.
| Message | What to check |
|---|---|
| Begin the script with RSCFLOW 1 | The required version line is missing. |
| Unsupported RSC Flow version | Only version 1 is currently accepted. |
| Unknown RSC Flow statement | Check the keyword, spacing, output path, and equals sign. |
| Expected a value | A HEADER, SET, PUSH, or BODY statement has no value. |
| Invalid JSON value | A string, object, or array contains invalid JSON syntax. |
| Required variable is missing | REQUIRE could not find its value in the current event. |
| PUSH target is not an array | A previous SET created a non-array value at the same path. |
| Unsafe output path | The path contains a protected JavaScript object property. |
| Endpoint must use HTTPS | Only public HTTPS destinations can be saved. |
| Delivery returned HTTP error | The endpoint responded without a successful 2xx status. |
RSC Flow is intentionally small. It cannot execute arbitrary code, access storage, read secrets, or make additional network requests.
| Limit | Current value |
|---|---|
| Language version | RSC Flow 1 |
| Program length | 12,000 characters |
| Executable statements | 120 per program |
| Custom headers | Up to 20 safe headers |
| Header value | 500 characters after interpolation |
| HTTP methods | POST, PUT, and PATCH |
| Destinations | Public HTTPS endpoints only |
Quick answers for common integration design decisions.
Use a standard webhook for the complete envelope. Use RSC Flow for a custom body or headers.
Yes. Use an incoming webhook URL and one of the recipes in this guide.
No. Create a separate integration for each destination.
No. Use the HMAC signature or a safe destination-specific custom header.
It resolves to an empty value. Use REQUIRE to stop delivery instead.
No. Blank lines and full comment lines are ignored.
Version 1 has no loops. PUSH creates arrays and direct paths can forward existing arrays.
Its behavior is fixed. Future syntax will require a new version declaration.
RSC Flow does not use eval, dynamic functions, filesystem access, or arbitrary network calls. It only builds the request sent to the HTTPS endpoint configured in Studio.
Set a secret to receive X-RSC-Signature-256 with an HMAC SHA-256 signature.
Host, authorization, cookies, connection, content length, event, and signature headers cannot be overwritten.
Source is limited to 12,000 characters and 120 executable statements.
Integration endpoints must use HTTPS and cannot target local or private network addresses.
sha256= in the signature header.