Boords API and webhooks

Start production the moment a client approves a storyboard, and send shot lists, scripts and renders into Boords from the tools your team already runs.

On Solo, Pro, Team and Agency plans. An Owner or Admin creates API keys.

What production teams automate first

Hand approved work straight to production, open projects as deals close, and fill storyboards from the shot lists and renders you already make.

  • Client approves, production starts

    When a storyboard is set to Approved, a task appears in Asana, Monday, ClickUp or Jira with the board name and review link. Nobody has to forward the sign-off.

    1. Catch the storyboard.updated webhook in Zapier or Make.
    2. Carry on only when the status is approved.
    3. Create the task in your project tool.

    No code. Zapier or Make webhooks.

  • Won deal, new Boords project

    A deal marked won in HubSpot or Salesforce becomes a Boords project, named and described, before the kickoff call.

    1. Start from the deal-won trigger in Zapier or Make.
    2. Call POST /v1/projects from an HTTP action, with your API key in the header.
    3. Optionally add a storyboard with starter frames.

    No code. An HTTP action in Zapier or Make.

  • Shot list or renders fill the storyboard

    Send a shot list from a sheet or your pipeline and Boords builds the storyboard, one frame per shot. Then push each render onto its frame as it finishes.

    1. Create the storyboard and its frames in one request.
    2. Attach each image by URL or upload.
    3. Match frames on later runs with your own shot IDs.

    Needs code.

Build a storyboard in one request

A REST API at https://app.boords.com/v1. Send a shot list as frames and the storyboard is ready for images and review.

Turn a shot list into a storyboard

Every request sends your API key in the X-API-KEY header. Each frame arrives with its label, sound and action filled in, and external_reference carries your own shot ID so later runs update the right frame.

curl https://app.boords.com/v1/storyboards \
  -H "X-API-KEY: $BOORDS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "name": "First Light (30s)",
      "project_id": "p4k9az",
      "frames": [
        {
          "label": "Laces",
          "sound": "Nobody sees the first mile.",
          "action": "Porch light on. Hands double-knot the laces.",
          "external_reference": "SH010"
        },
        {
          "label": "Empty street",
          "sound": "No crowd. No finish line. Just you and the cold.",
          "action": "She sets off down the terrace.",
          "external_reference": "SH020"
        }
      ]
    }
  }'
Projects
Create, rename and archive projects.
Storyboards
Create a storyboard with its frames in one request, set its status, duplicate it and save versions.
Frames
Add, edit, reorder and delete frames, and attach images by URL or upload.
Scripts
Create and edit scripts, duplicate them and save versions.
Comments
Read, add, edit and delete comments. Needs an Owner or Admin.
Team
Manage members, invitations and the Asset Library, and read the activity feed.

Hear about approvals as they happen

Team webhooks fire when a storyboard changes status in Boords, such as a client approving on the review link, and for work done through the API or an AI connection. Personal webhooks carry your own comment notifications.

  • Status changes in Boords

    • storyboard.updated

    A storyboard moves to Approved, Changes Required or any other status, whether a teammate sets it or a client does on the review link, when reviewers can set the status. It also fires when the API or an AI connection updates a storyboard or reorders its frames, so filter on the status you care about.

  • Your own notifications

    • notification.created

    Someone mentions you or replies to you in a storyboard comment, marks your comment complete or reopens it, or comments on a storyboard you follow. Comments made in the app count too. Each endpoint belongs to the person whose API key registers it, with one API call.

  • Work done through the API or AI connections

    • project.created
    • project.updated
    • project.archived
    • storyboard.created
    • storyboard.archived
    • script.created
    • script.updated
    • script.archived
    • frame.created
    • frame.updated
    • frame.deleted
    • comment.created
    • comment.updated
    • comment.deleted

    Changes made by your own code, Claude or ChatGPT. frame.created also fires when the Boords Agent adds frames.

A client approves: storyboard.updated

Boords posts JSON to your HTTPS endpoint. Trimmed here: the full payload also carries the frame fields, aspect ratio, cover image and edit link.

{
  "id": "evt_3f9a1c0b7e2d4a6f8b1c2d3e",
  "event": "storyboard.updated",
  "occurred_at": "2026-10-17T10:42:08Z",
  "data": {
    "type": "storyboard",
    "id": "s9bx1z",
    "attributes": {
      "name": "First Light (30s)",
      "project_id": "p4k9az",
      "status": "approved",
      "frame_ids": [101, 102, 103, 104, 105, 106, 107, 108],
      "public_url": "https://app.boords.com/s/k7m2qd8x",
      "updated_at": "2026-10-17T10:42:08Z",
      "archived": false
    }
  }
}

Check it came from Boords

X-Boords-Signature is a hex HMAC SHA-256 of the X-Boords-Timestampvalue, a full stop and the raw body, signed with your webhook’s secret. Boords does not reject old timestamps for you, so check them on your side.

import crypto from 'node:crypto'

// rawBody: the request body exactly as it arrived
const timestamp = req.headers['x-boords-timestamp']
const signature = req.headers['x-boords-signature'] ?? ''

const expected = crypto
  .createHmac('sha256', process.env.BOORDS_WEBHOOK_SECRET)
  .update(`${timestamp}.${rawBody}`)
  .digest('hex')

const valid =
  signature.length === expected.length &&
  crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))

Set up in three steps

API keys and webhooks live on one page in Boords Settings.

  1. Step 1: Create an API key

    In Boords Settings, open API & Webhooks and click Create API key. Name it, for example Zapier, and set an expiry if you want one.
  2. Step 2: Add a webhook

    On the same page, enter your HTTPS endpoint, pick the events and click Create webhook. Copy the signing secret, because it only shows once.
  3. Step 3: Send a test

    Choose Send test from the webhook's menu. Boords sends a sample project.created event so you can check your endpoint.

Who can set this up

  • API keys and webhooks are on Solo, Pro, Team and Agency. Free teams see the settings with an upgrade prompt.
  • An Owner or Admin creates API keys and team webhooks.
  • Each API key acts with the permissions of the person who created it.

Good to know

Rate limit
120 requests a minute per API key. Past that, Boords returns a 429 and the X-RateLimit-Reset header says when to try again.
Webhook endpoints
Up to 10 per team, each on an HTTPS URL.
Retries
Any response other than a 2xx counts as a failure. Boords tries each delivery 5 times over about 6 minutes. Every event has a unique id, so skip any you have already handled.
What a payload carries
The project, storyboard, script, frame or comment as it is now, without its previous values or who made the change. The activity feed records who did what.
Comments, views and exports
A comment made in the app reaches webhooks only as a notification.created event for the person it notifies. To see every comment, view and export, read the activity feed, GET /v1/teams/{team_id}/events, on a schedule; each request covers up to 90 days.
New endpoints
The API is in beta, and more endpoints are on the way.

Frequently asked questions

Let approvals start the next job

Clients review and sign off in Boords. The API and webhooks carry that decision to the rest of your production stack.