Build integrations with the API
The Boords API gives you programmatic access to your projects, scripts, storyboards, frames, and comments, so you can build custom integrations, automate workflows, and keep your tools in sync.
See also: API and webhooks, an overview of what teams automate with Boords.
The Boords API is currently in Beta. The core functionality is stable, but some details may change as we refine the experience.
For the full endpoint reference, visit the API documentation.
The API lets you:
Using Claude or ChatGPT? You don't need an API key. Connect Boords to your AI app instead and sign in with your Boords account. The API is for your own scripts, pipelines and integrations.
To use the Boords API, you'll need:
API keys are managed in Settings → Team → API. You'll need an Owner or Admin role to create them.
To create a key:
API keys start with bap_ and are tied to your user account. Any actions performed with your key use your permissions and appear as your activity.
Include your API key in the X-API-KEY header with every request:
X-API-KEY: bap_your_key_here
You can also include an optional X-API-CLIENT header to identify your integration:
X-API-CLIENT: my-custom-tool
This helps you track which integration made which changes in your activity log.
All API requests use the base URL:
https://app.boords.com/v1
Boords organises content in a hierarchy:
Teams → Projects → Storyboards → Frames → Comments
Each team has projects, each project has storyboards and scripts, and each storyboard has frames. Comments are attached to individual frames. Library assets and their folders hang directly off the team at /v1/teams/{team_id}/library_assets and /v1/teams/{team_id}/library_asset_folders.
Teams, projects, and storyboards use short text identifiers (like t3n4xk or p4k9az). Frames and comments use numeric IDs. You'll find these identifiers in API responses and can use them in subsequent requests.
All API responses use a consistent JSON envelope:
For a single resource:
{ "data": { "id": "p4k9az", "type": "project", "attributes": { ... } } }For a list of resources:
{ "data": [ ... ], "meta": { "next_cursor": "..." } }List endpoints return results in pages. Use the limit parameter (up to 100, default 25) and the cursor parameter to step through results. When meta.next_cursor is present in the response, there are more results available. Pass it as the cursor parameter in your next request.
Most list endpoints support an updated_since parameter (ISO 8601 timestamp) to fetch only resources that have changed since a specific time. This is useful for building sync workflows.
What you can do via the API depends on your team role:
| Action | Roles |
|---|---|
| Read projects, scripts, storyboards and frames | Owner, Admin, Full access, Restricted |
| Create and edit content | Owner, Admin, Full access |
| Read and manage comments | Owner, Admin |
| Manage team members | Owner, Admin |
| Create API keys and team webhooks | Owner, Admin |
For more detail on team roles, see Team users and roles.
You can create a storyboard with pre-populated frames in a single API call. Send a POST request to /v1/storyboards with a frames array, and Boords will create the storyboard and all frames at once.
Each frame in the array can include a label (which becomes the frame's reference field) and any number of custom fields like action, sound, or dialogue. Boords automatically generates field definitions from your data.
The response includes a field_key_map in the meta object, which maps your original field names to the generated field IDs, which is useful if you need to update those fields later.
Fields generated this way are text fields. To use date, dropdown or checkbox fields, create the storyboard with typed frame_fields first and then add the frames, or change a field's type later with a storyboard update. Changing a text field's type through the API doesn't convert its values. Text that isn't a valid option, date or checkbox value is hidden until the field is switched back to text, so send those values again after the switch (as option labels for a dropdown). In the Boords editor, Convert to Dropdown turns existing text into options.
For the full request and response format, see the Create Storyboard endpoint in the API reference.
Each field in a storyboard's frame_fields has a type: text, date, dropdown or checkbox. Dropdown fields also include multi_select and their options, each with an id, label and color. Built-in fields such as reference are always text.
When you write a frame's field_data:
YYYY-MM-DD.true or false.An unknown dropdown option returns a 422 that lists the valid options. Writing a value never creates a new option.
Frame responses also include field_display, readable text for date, dropdown and checkbox fields, such as 3 Nov 2026, Wide or Yes. frame.* webhooks carry it too.
For the field types and value formats, see the API reference.
Storyboards and scripts share one set of statuses. Your team sets them up in Team settings, and each one belongs to one of five categories:
| Category | status value |
|---|---|
| Draft | null |
| In progress | in_progress |
| In review | review_needed |
| Changes requested | changes_required |
| Approved | approved |
Storyboard and script responses include status, the category, and custom_status, your team's status as { "id", "name" }.
To change a status with PATCH /v1/storyboards/{id}, POST /v1/scripts or PATCH /v1/scripts/{id}:
status to move the item to that category's default status. You can send the value, the label (In review) or an older label (Review Needed). Send null, "" or "draft" for Draft.status_id to pick one of your team's statuses. Get the ids from GET /v1/teams/{team_id}/statuses. An id that isn't one of the team's statuses returns a 422. If you send status too, it must name the same category.New versions start at Draft. Duplicates keep their status.
To see status history, read the team activity feed with GET /v1/teams/{team_id}/events. Status change events include status_change, with the status the item moved from and to, each as { "category", "id", "name" }. The name is the status name at the time of the change, so later renames don't alter it. status_change is null for other events and for status changes made before custom statuses.
To keep an external tool in sync with your Boords workspace:
cursor parameter to page through large collections.updated_since parameter with the timestamp of your last sync. This returns only resources that have changed, keeping your requests efficient.storyboard.updated and scripts send script.updated. Most edits made in the web app don't send webhooks, so keep using updated_since to pick those up.The API lets you attach any image to a frame, whether it's a photo, a render from your 3D pipeline, or an AI-generated image from a tool like Midjourney or DALL·E.
Use the frame image endpoint to upload an image by URL or base64 data. Boords automatically processes the image to generate the right sizes for your storyboard's aspect ratio.
This means you can build fully automated pipelines: generate images with your tool of choice, then push them straight into your Boords storyboard via the API.
For the full request format, see the API documentation.
The API allows 120 requests per minute per API key. Response headers tell you where you stand:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Your total allowance per window |
X-RateLimit-Remaining | Requests left in the current window |
X-RateLimit-Reset | When the window resets |
If you receive a 429 response, wait until the time in X-RateLimit-Reset before retrying.
If you're building a sync workflow, use updated_since filtering and webhooks to reduce the number of requests you need to make.
When something goes wrong, the API returns a consistent error format:
{
"error": {
"code": "forbidden",
"message": "You do not have access to this resource."
}
}Common status codes:
| Code | Meaning |
|---|---|
| 400 | Invalid request. Check your request format |
| 401 | Invalid or missing API key |
| 403 | Your role or plan doesn't allow this action |
| 404 | Resource not found (or not accessible to you) |
| 422 | Validation error. Check the error message for details |
| 429 | Rate limit exceeded. Wait until X-RateLimit-Reset, then retry |
For the full error reference, see the API documentation.
The API is available on all paid Boords plans. You can view the API documentation on any plan, but you'll need a paid plan to create API keys and make requests.
Yes. While there isn't a native Boords app on Zapier or Make, you can use their generic HTTP/webhook actions to call the Boords API. You can also use Boords webhooks as triggers. For example, use Zapier's "Webhooks by Zapier" trigger, or a custom webhook in Make, to start a workflow when a storyboard is approved.
Each API key can make up to 120 requests per minute. Check the X-RateLimit-Remaining response header to monitor your usage. If you receive a 429 response, wait until the time in the X-RateLimit-Reset header before retrying.
Boords' built-in image generation isn't available via the API yet, but you can upload any image to a frame, including images generated by external tools like Midjourney, DALL·E, or your own pipeline. Use the frame image endpoint to attach images by URL or base64.