Falcon Rundown REST API Falcon Rundown

Base URL: https://rundown.wearefalcon.tv/api/v1
Format: JSON requests and JSON responses
Authentication: User-created Bearer tokens from Falcon Rundown

Overview

The Falcon Rundown REST API is a structured control and data API for external systems that need to manage workspaces, members, folders, rundowns and stories in Falcon Rundown. It is built on the same access model as the Falcon Rundown web app, so workspace ownership, member roles, rundown filters and archived-rundown protections are enforced server-side.

Use this API when an integration needs to create, read, update, publish, archive, duplicate or delete concrete Falcon Rundown objects. Typical use cases include newsroom automation, planning dashboards, custom editorial tools, data migration scripts, scheduling workflows and system-to-system workspace management.

Write access warning. Several endpoints can change live workspace data. Test integrations on a non-critical workspace first, keep tokens private, and give each token only the scopes it needs.

REST API vs Gateway API

Falcon Rundown has more than one integration surface. The REST API and Gateway API are related, but they solve different problems.

APIBest forTypical clientsAuthentication model
Falcon Rundown REST APIConcrete management of workspaces, members, folders, rundowns and stories.Admin tools, editorial systems, migration scripts, planning dashboards, automation services.User-created Bearer token with workspace permissions and scopes.
Falcon Gateway APIMOS-style discovery, published rundown consumption, rundown tokens and asset/media transactions between Falcon systems.MOS clients, Falcon Play, Gateway services, rundown subscription consumers, asset workflows.Gateway-specific tokens or encrypted publish tokens, depending on route.

In short: use the Gateway API to consume or transact with published rundown/media flows. Use the REST API to manage the underlying Falcon Rundown workspace data.

Base URL and request format

https://rundown.wearefalcon.tv/api/v1

All request and response bodies are JSON. For POST and PATCH requests, send:

Content-Type: application/json

Example request:

curl -H "Authorization: Bearer $FALCON_RUNDOWN_TOKEN" \
  https://rundown.wearefalcon.tv/api/v1/workspaces

Authentication

Every REST endpoint requires a Bearer token.

Authorization: Bearer fr_live_...

Users create tokens inside Falcon Rundown from the Workspaces page footer user badge menu under API Tokens. A token is shown only once when created. Falcon stores only a hashed version of the token.

Token lifecycle. Create separate tokens for separate integrations. Name tokens clearly, set an expiry date when possible, and revoke tokens that are no longer used.

Scopes

Each token has scopes. Write scopes also allow the matching read operation.

workspaces:readRead workspaces available to the token user.
workspaces:writeCreate, update and delete workspaces where role checks allow it.
members:readRead workspace members.
members:writeAdd, update and remove workspace members where admin access allows it.
rundowns:readRead rundowns.
rundowns:writeCreate, update, delete, duplicate, archive, restore and publish rundowns.
stories:readRead stories.
stories:writeCreate, update, delete and reorder stories.

Roles and access rules

The REST API reuses Falcon Rundown workspace roles:

RoleREST behaviour
ownerFull control of the workspace, including deleting the workspace.
superuserWorkspace administration and write operations, including members.
rwRead and write rundowns, folders and stories.
commentRead access and comment-oriented access in the web app. REST write endpoints require stronger roles.
roRead-only access.

Member rundown filters are respected. If a member is filtered to specific folders or rundowns, the REST API will only expose allowed rundowns and stories.

Response model

Successful responses use a consistent envelope:

{
  "data": {},
  "meta": {}
}

List responses include pagination metadata when relevant:

{
  "data": [],
  "meta": {
    "count": 11,
    "limit": 100,
    "offset": 0
  }
}

REST-layer errors use:

{
  "error": {
    "code": "missing_bearer_token",
    "message": "Use Authorization: Bearer <token>."
  }
}
Legacy access errors. Some workspace access checks are shared with existing Falcon Rundown endpoints. In those cases, an access-denied response may use the legacy shape {"error":"access_denied","reason":"not_a_member"}.

REST Resource IDs

REST v1 now exposes stable opaque resource IDs instead of internal database integers. They are intentionally token-like, safe to pass to integrations, and should be treated as strings.

PrefixResourceExample
prj_Workspaceprj_mUN_3p5tpK3eqYFc
fld_Folderfld_N8jBtxH4f5NwY2qs
rdn_Rundownrdn_Izqszf4NCzaf2Pag
sto_Storysto_-sfWOvHnMyuds9XV

Use these IDs in URL paths and JSON fields such as folder_id, parent_id, rundown_id and story reorder payloads. New clients should not store or depend on numeric database IDs. Legacy numeric IDs are still accepted by the router for backwards compatibility, but REST responses return the opaque format.

REST ID vs Gateway token. A rundown response can include both id and token. id is the REST resource ID used with this API. token is the existing encrypted Gateway/MOS rundown token and should not be used as a REST path parameter.
GET /api/v1/workspaces/prj_mUN_3p5tpK3eqYFc/rundowns
GET /api/v1/rundowns/rdn_Izqszf4NCzaf2Pag/stories
PATCH /api/v1/stories/sto_-sfWOvHnMyuds9XV

Status codes

StatusMeaning
200Successful read or update.
201Object created.
204Object deleted, no body returned.
400Invalid JSON or bad request.
401Missing, invalid or expired token.
403Missing scope or insufficient workspace access.
404Route or object not found.
409Conflict, such as attempting to write to an archived rundown.
422Validation error, such as a missing required name.
500Internal server error.

Endpoint summary

AreaEndpointPurpose
IdentityGET /meVerify the token and return token user details.
WorkspacesGET /workspacesList workspaces visible to the token user.
WorkspacesPOST /workspacesCreate a workspace owned by the token user.
WorkspacesGET /workspaces/{workspace_id}Read a single workspace.
WorkspacesPATCH /workspaces/{workspace_id}Update workspace name or asset package where owner access allows it.
WorkspacesDELETE /workspaces/{workspace_id}Delete a workspace. Owner only.
MembersGET /workspaces/{workspace_id}/membersList workspace members.
MembersPOST /workspaces/{workspace_id}/membersAdd or update a member.
MembersPATCH /workspaces/{workspace_id}/members/{email}Change a member role.
MembersDELETE /workspaces/{workspace_id}/members/{email}Remove a member.
FoldersGET /workspaces/{workspace_id}/foldersList folders in a workspace.
FoldersPOST /workspaces/{workspace_id}/foldersCreate a folder.
RundownsGET /workspaces/{workspace_id}/rundownsList active rundowns in a workspace.
RundownsPOST /workspaces/{workspace_id}/rundownsCreate a rundown.
RundownsGET /rundowns/{rundown_id}Read one rundown.
RundownsPATCH /rundowns/{rundown_id}Update rundown metadata.
RundownsDELETE /rundowns/{rundown_id}Delete a rundown.
RundownsPOST /rundowns/{rundown_id}/duplicateDuplicate a rundown and its stories.
RundownsPOST /rundowns/{rundown_id}/archiveArchive a rundown and unpublish it.
RundownsPOST /rundowns/{rundown_id}/restoreRestore an archived rundown.
PublishPOST /rundowns/{rundown_id}/publishPublish a rundown to Gateway catalog eligibility.
PublishDELETE /rundowns/{rundown_id}/publishUnpublish a rundown.
StoriesGET /rundowns/{rundown_id}/storiesList stories in a rundown.
StoriesPOST /rundowns/{rundown_id}/storiesCreate a story.
StoriesPOST /rundowns/{rundown_id}/stories/reorderReorder stories by position.
StoriesGET /stories/{story_id}Read one story.
StoriesPATCH /stories/{story_id}Update story fields.
StoriesDELETE /stories/{story_id}Delete a story.

Identity

Verify token

GET/me

Returns the token user and token metadata.

{
  "data": {
    "user": {
      "id": 43271,
      "email": "user@example.com",
      "name": "Example User"
    },
    "token": {
      "id": 4,
      "name": "Production integration",
      "prefix": "fr_live_abc123",
      "scopes": ["workspaces:read", "rundowns:read"]
    }
  }
}

Workspaces

List workspaces

GET/workspaces

Returns owned and shared workspaces visible to the token user. Supports limit and offset.

curl -H "Authorization: Bearer $FALCON_RUNDOWN_TOKEN" \
  "https://rundown.wearefalcon.tv/api/v1/workspaces?limit=50"

Create workspace

POST/workspaces
{
  "name": "Evening News",
  "asset_package_id": 7
}

asset_package_id is optional.

Read workspace

GET/workspaces/{workspace_id}

Returns workspace metadata and the current user's role.

Update workspace

PATCH/workspaces/{workspace_id}
{
  "name": "Evening News Updated",
  "asset_package_id": null
}

Requires owner access.

Delete workspace

DELETE/workspaces/{workspace_id}

Requires owner access. This removes workspace members, folders, rundowns and stories belonging to the workspace.

Members

List members

GET/workspaces/{workspace_id}/members

Returns owner and member rows with roles and any rundown/folder filters.

Add or update member

POST/workspaces/{workspace_id}/members
{
  "email": "producer@example.com",
  "role": "rw"
}

Allowed roles are superuser, rw, comment and ro. Requires owner or superuser access.

Change member role

PATCH/workspaces/{workspace_id}/members/{email}
{
  "role": "superuser"
}

Remove member

DELETE/workspaces/{workspace_id}/members/{email}

URL-encode the email address if needed.

Folders

List folders

GET/workspaces/{workspace_id}/folders

Returns folders in the workspace. Each row includes id, workspace_id, parent_id, name and updated_at.

Create folder

POST/workspaces/{workspace_id}/folders
{
  "name": "Studio rundowns",
  "parent_id": null
}

Rundowns

List rundowns

GET/workspaces/{workspace_id}/rundowns

Lists active rundowns in the workspace. Supports limit, offset, folder_id and include_archived=1.

curl -H "Authorization: Bearer $FALCON_RUNDOWN_TOKEN" \
  "https://rundown.wearefalcon.tv/api/v1/workspaces/prj_mUN_3p5tpK3eqYFc/rundowns?limit=25&offset=0"

Rundown responses include a token field. This is the encrypted rundown ID used by Gateway/MOS-style integrations. It is not the same as the REST Bearer token.

Create rundown

POST/workspaces/{workspace_id}/rundowns
{
  "title": "Evening News 18:00",
  "type": "rundown",
  "folder_id": null,
  "rundown_date": "2026-06-11",
  "start_time": "18:00:00",
  "end_time": "19:00:00"
}

type can be rundown or notelist.

Read rundown

GET/rundowns/{rundown_id}

Returns metadata, publish state, on-air state, encrypted Gateway token and tags.

Update rundown

PATCH/rundowns/{rundown_id}
{
  "title": "Evening News Updated",
  "start_time": "18:05:00",
  "end_time": "19:00:00",
  "rundown_date": "2026-06-11",
  "ignore_vo_time": false,
  "layout_id": null
}

Archived rundowns are read-only and return 409 for write endpoints.

Delete rundown

DELETE/rundowns/{rundown_id}

Duplicate rundown

POST/rundowns/{rundown_id}/duplicate

Copies rundown metadata, stories and tags into a new rundown. The new rundown is not published by default.

Archive or restore rundown

POST/rundowns/{rundown_id}/archive
POST/rundowns/{rundown_id}/restore

Archiving a rundown also clears its Gateway publish state.

Publishing to Gateway catalog

REST can mark a rundown as published or unpublished. Published rundowns are eligible for Gateway catalog discovery. Gateway clients still consume the Gateway API; REST only controls the publish flag on the Rundown side.

Publish rundown

POST/rundowns/{rundown_id}/publish
{
  "data": {
    "id": "rdn_Izqszf4NCzaf2Pag",
    "gateway_published": true
  }
}

Unpublish rundown

DELETE/rundowns/{rundown_id}/publish

Stories

List stories

GET/rundowns/{rundown_id}/stories

Returns stories ordered by pos. Story bodies are returned as HTML in text_html.

Create story

POST/rundowns/{rundown_id}/stories
{
  "pos": 0,
  "type": "story",
  "title": "Opening headlines"
}

Read story

GET/stories/{story_id}

Update story

PATCH/stories/{story_id}

Any subset of these fields can be sent:

{
  "title": "Updated title",
  "comments": "Producer notes",
  "story_time": "00:01:30",
  "vo_time": "00:00:20",
  "total_time": "00:01:50",
  "text_html": "<p>Script body</p>",
  "type": "story",
  "bg_color": "cam",
  "links": null,
  "files": null,
  "isTemplate": 0,
  "parked": 0,
  "seq": 1,
  "pos": 0
}

Delete story

DELETE/stories/{story_id}

Reorder stories

POST/rundowns/{rundown_id}/stories/reorder
{
  "stories": [
    { "id": "sto_-sfWOvHnMyuds9XV", "pos": 0 },
    { "id": "sto_ixizDXWUj_9MIWBY", "pos": 1 }
  ]
}

Common examples

Verify token

curl -H "Authorization: Bearer $FALCON_RUNDOWN_TOKEN" \
  https://rundown.wearefalcon.tv/api/v1/me

List workspaces

curl -H "Authorization: Bearer $FALCON_RUNDOWN_TOKEN" \
  https://rundown.wearefalcon.tv/api/v1/workspaces

Create a rundown

curl -X POST \
  -H "Authorization: Bearer $FALCON_RUNDOWN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
        "title": "Morning Show",
        "type": "rundown",
        "folder_id": null,
        "rundown_date": "2026-06-11",
        "start_time": "08:00:00",
        "end_time": "09:00:00"
      }' \
  https://rundown.wearefalcon.tv/api/v1/workspaces/prj_mUN_3p5tpK3eqYFc/rundowns

Create a story

curl -X POST \
  -H "Authorization: Bearer $FALCON_RUNDOWN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"pos":0,"type":"story","title":"Opening"}' \
  https://rundown.wearefalcon.tv/api/v1/rundowns/rdn_Izqszf4NCzaf2Pag/stories

Publish a rundown for Gateway discovery

curl -X POST \
  -H "Authorization: Bearer $FALCON_RUNDOWN_TOKEN" \
  https://rundown.wearefalcon.tv/api/v1/rundowns/rdn_Izqszf4NCzaf2Pag/publish

Python

import os, requests

BASE = "https://rundown.wearefalcon.tv/api/v1"
TOKEN = os.environ["FALCON_RUNDOWN_TOKEN"]
headers = {"Authorization": f"Bearer {TOKEN}"}

workspaces = requests.get(f"{BASE}/workspaces", headers=headers).json()
print(workspaces)

workspace_id = workspaces["data"][0]["id"]
rundowns = requests.get(
    f"{BASE}/workspaces/{workspace_id}/rundowns",
    headers=headers,
    params={"limit": 25},
).json()
print(rundowns)
  1. Create a dedicated API token from Falcon Rundown with only the scopes the integration needs.
  2. Call GET /me to verify the token and token user.
  3. Call GET /workspaces and select the workspace by ID.
  4. Read members, folders and rundowns as needed.
  5. For write integrations, create or update a test workspace first.
  6. If Gateway or MOS consumers need the rundown, publish the rundown with REST, then consume it through the Gateway API.

Troubleshooting

SymptomLikely causeWhat to check
401 missing_bearer_tokenThe Authorization header was not sent or was stripped by a proxy.Send Authorization: Bearer ... and confirm nginx forwards HTTP_AUTHORIZATION.
401 invalid_tokenThe token is wrong or revoked.Create a new token in Falcon Rundown.
401 token_expiredThe token has passed its expiry date.Create a replacement token.
403 scope_requiredThe token lacks the required scope.Edit or recreate the token with the necessary scope.
403 access_deniedThe token user is not a member of the target workspace, or lacks the required role.Check workspace membership and role in Falcon Rundown.
409 rundown_archived_read_onlyThe integration tried to write to an archived rundown.Restore the rundown before writing, or create a new rundown.
HTML login page instead of JSONThe request did not reach the REST front controller.Check reverse proxy routing for /api/v1/.

Version notes

This manual documents Falcon Rundown REST API v1 as introduced in June 2026. The API is designed to coexist with the existing Falcon Rundown web app API and the Gateway API. Resource IDs are exposed as opaque strings with prj_, fld_, rdn_ and sto_ prefixes; numeric IDs are accepted only for legacy compatibility.