Help
API reference (v1.0.0)
Every public Boita API endpoint with parameters, request and response schemas, scopes, and examples in curl, TypeScript and Python, from the OpenAPI document.
https://api.boita.io/v1 · every request carries Authorization: Bearer boita_sk_…. Keys are created on Developers → API keys in the app and are bound to one workspace. Errors are always { "error": { "code", "message", "details" } }; the rate limit is 600 requests a minute per key.Scopes#
A key carries one or more scopes; each operation below lists which one it needs (any one is enough).
| Scope | Allows |
|---|---|
files:read | List and search files, folders, versions and trash; read transfers and watch folders |
files:write | Create folders, rename, delete and restore; start transfers; manage watch folders |
shares:write | Create, extend and revoke share links and read their details |
portals:write | Create, update and revoke upload portals and review their uploads |
receipts:read | Read delivery receipts, verification reports, comments and share details |
webhooks:manage | Manage webhook endpoints and REST-hook subscriptions (Zapier, Make, n8n), read deliveries, retry and test them; poll the event stream |
usage:read | Read storage, bandwidth, dashboard figures and the audit log |
SDKs#
The examples use the official clients, generated from this same contract: @boita/sdk for TypeScript (Node 18+ or any runtime with fetch) and boita for Python 3.9+ (standard library only). Both retry 429 and 5xx with backoff, honour Retry-After, never replay a POST except on 429/503, and throw a BoitaError carrying the API envelope. Set BOITA_API_KEY and BOITA_WORKSPACE (the id in the app URL, /app/<workspaceId>/…).
npm install @boita/sdkPOST …/transfers returns a transfer spec for the transfer engine on the machine that holds the files (the desktop app, the Linux agent or a gateway) to run; poll transfers.get until status is completed, then share.Operations#
- Files
Browse, search and organise the workspace
19 operations
- Transfers
Transfer specs and progress
4 operations
- Shares
Share links and recipient comments
9 operations
- Receipts
Delivery receipts, verification reports and delivery notes
4 operations
- Portals
Upload portals and the uploads they receive
6 operations
- Webhooks
Endpoints, deliveries and the signed event stream
12 operations
- Events
Polling alternative to webhooks
1 operation
- Usage
Storage and bandwidth figures
2 operations
- Cloud
Deliveries to connected Google Drive, Dropbox, OneDrive and Box folders
3 operations
Files#
Browse, search and organise the workspace
- GET List a folder
- PATCH Rename a file or folder
- DELETE Move files to the trash (or delete permanently)
- GET Search files by name
- GET Every file under a folder with size and modification time (for sync clients)
- POST Create a folder
- GET List the trash
- POST Restore a trashed item
- DELETE Purge one trashed item now
- GET List kept versions of a file
- POST Restore a kept version
- GET Thumbnail of a file
- GET Rendered proxies of a file
- POST Render proxies now
- GET A rendered proxy (supports Range)
- POST Queue a server-side move or copy
- GET Move/copy jobs of the workspace
- POST Cancel a queued or running move/copy job
- POST Rename many items with a pattern (preview with dryRun)
GETList a folder#
/workspaces/{workspaceId}/files
SDK: files.list · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
path | query | string | max length 4096 · default "" |
skip | query | integer | minimum 0 · default 0 |
count | query | integer | minimum 1, maximum 1000 · default 200 |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pathrequired | string | |||||||||||||||||||||||||
accessrequired | string | |||||||||||||||||||||||||
itemsrequired | array of FileEntry |
| ||||||||||||||||||||||||
totalrequired | integer |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files?path=&count=200" \
-H "Authorization: Bearer $BOITA_API_KEY"PATCHRename a file or folder#
/workspaces/{workspaceId}/files
SDK: files.rename · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
pathrequired | string | min length 1, max length 4096 |
newNamerequired | string | min length 1, max length 255 |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
okrequired | boolean |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X PATCH "https://api.boita.io/v1/workspaces/$WORKSPACE/files" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"path":"deliveries/ep01/EP01_final.mov","newName":"EP01_final.mov"}'DELETEMove files to the trash (or delete permanently)#
/workspaces/{workspaceId}/files
SDK: files.delete · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
pathsrequired | array of string | min items 1, max items 500 |
permanent | boolean | · default false |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
okrequired | boolean |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X DELETE "https://api.boita.io/v1/workspaces/$WORKSPACE/files" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"paths":["deliveries/ep01/EP01_final.mov"],"permanent":false}'GETSearch files by name#
/workspaces/{workspaceId}/files/search
SDK: files.search · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
qrequired | query | string | min length 1, max length 200 |
path | query | string | max length 4096 · default "" |
limit | query | integer | minimum 1, maximum 500 · default 100 |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
itemsrequired | array of FileEntry |
|
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files/search?q=EP01&path=" \
-H "Authorization: Bearer $BOITA_API_KEY"GETEvery file under a folder with size and modification time (for sync clients)#
/workspaces/{workspaceId}/files/manifest
SDK: files.manifest · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
path | query | string | max length 4096 · default "" |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
rootrequired | string | |||||||||||||
filesrequired | array of object |
| ||||||||||||
truncatedrequired | boolean |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files/manifest?path=" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTCreate a folder#
/workspaces/{workspaceId}/files/folder
SDK: files.createFolder · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
pathrequired | string | min length 1, max length 4096 |
Response 201 · application/json
| Field | Type | Notes |
|---|---|---|
okrequired | boolean |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/files/folder" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"path":"deliveries/ep01/EP01_final.mov"}'GETList the trash#
/workspaces/{workspaceId}/files/trash
SDK: files.listTrash · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
pathrequired | string | |
namerequired | string | |
sizeBytesrequired | number | nullable |
deletedAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
purgeAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files/trash" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTRestore a trashed item#
/workspaces/{workspaceId}/files/trash/{itemId}/restore
SDK: files.restoreFromTrash · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
itemIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
okrequired | boolean |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/files/trash/<itemId>/restore" \
-H "Authorization: Bearer $BOITA_API_KEY"DELETEPurge one trashed item now#
/workspaces/{workspaceId}/files/trash/{itemId}
SDK: files.purgeFromTrash · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
itemIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
okrequired | boolean |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X DELETE "https://api.boita.io/v1/workspaces/$WORKSPACE/files/trash/<itemId>" \
-H "Authorization: Bearer $BOITA_API_KEY"GETList kept versions of a file#
/workspaces/{workspaceId}/files/versions
SDK: files.listVersions · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
pathrequired | query | string | min length 1, max length 4096 |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
pathrequired | string | |
sizeBytesrequired | number | nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files/versions?path=deliveries%2Fep01%2FEP01_final.mov" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTRestore a kept version#
/workspaces/{workspaceId}/files/versions/{versionId}/restore
SDK: files.restoreVersion · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
versionIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
okrequired | boolean |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/files/versions/<versionId>/restore" \
-H "Authorization: Bearer $BOITA_API_KEY"GETThumbnail of a file#
/workspaces/{workspaceId}/files/preview
SDK: files.preview · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
pathrequired | query | string | min length 1, max length 4096 |
Response 200 · image/jpeg
string
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files/preview?path=deliveries%2Fep01%2FEP01_final.mov" \
-H "Authorization: Bearer $BOITA_API_KEY"GETRendered proxies of a file#
/workspaces/{workspaceId}/files/proxies
What the proxy pipeline has rendered for a file or a kept version (720p MP4, waveform, contact sheet, PDF pages), with its media kind and frame rate.
SDK: files.proxyStatus · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
path | query | string | max length 4096 · default "" |
version | query | string |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
mediarequired | "video" | "audio" | "image" | "pdf" | nullable | ||||||||||||||||||||||||
fpsrequired | number | nullable | ||||||||||||||||||||||||
durationMsrequired | integer | nullable | ||||||||||||||||||||||||
proxiesrequired | array of object |
|
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files/proxies?path=" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTRender proxies now#
/workspaces/{workspaceId}/files/proxies
Queues the proxies a file (or a kept version) needs. Video and audio queue on upload; images and PDFs render on demand.
SDK: files.renderProxies · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
paths | array of string | max items 50 |
versions | array of string | max items 50 |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
queuedrequired | integer |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/files/proxies" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"paths":["deliveries/ep01/EP01_final.mov"],"versions":["…"]}'GETA rendered proxy (supports Range)#
/workspaces/{workspaceId}/files/proxy
SDK: files.proxy · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
path | query | string | max length 4096 · default "" |
kindrequired | query | "proxy720" | "waveform" | "contact_sheet" | "page" | |
page | query | integer | minimum 0, maximum 50 · default 0 |
version | query | string |
Response 200 · application/octet-stream
string
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files/proxy?path=&kind=proxy720" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTQueue a server-side move or copy#
/workspaces/{workspaceId}/files/operations
The workers copy through the transfer engine, verify size and count, and delete the originals only then (move). Conflicts are refused unless `overwrite` is true; a selected frame of a numbered set takes the whole set unless `expandSequences` is false. Caps: 200 items and 500 GB per job (250 GB on plans without the feature).
SDK: files.createOperation · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
kindrequired | "move" | "copy" | |
pathsrequired | array of string | min items 1, max items 200 |
destination | string | max length 4096 · default "" |
overwrite | boolean | · default false |
expandSequences | boolean | · default true |
Response 201 · application/json
| Field | Type | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | |||||||||||||
kindrequired | "move" | "copy" | |||||||||||||
statusrequired | "queued" | "running" | "completed" | "failed" | "cancelled" | |||||||||||||
destinationrequired | string | |||||||||||||
overwriterequired | boolean | |||||||||||||
itemsrequired | array of object |
| ||||||||||||
filesTotalrequired | integer | |||||||||||||
filesDonerequired | integer | |||||||||||||
bytesTotalrequired | number | |||||||||||||
bytesDonerequired | number | |||||||||||||
errorrequired | string | nullable | ||||||||||||
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time | ||||||||||||
startedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable | ||||||||||||
finishedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/files/operations" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"move","paths":["deliveries/ep01/EP01_final.mov"],"destination":""}'GETMove/copy jobs of the workspace#
/workspaces/{workspaceId}/files/operations
SDK: files.listOperations · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
active | query | "1" | "true" | |
limit | query | integer | minimum 1, maximum 200 · default 50 |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | |||||||||||||
kindrequired | "move" | "copy" | |||||||||||||
statusrequired | "queued" | "running" | "completed" | "failed" | "cancelled" | |||||||||||||
destinationrequired | string | |||||||||||||
overwriterequired | boolean | |||||||||||||
itemsrequired | array of object |
| ||||||||||||
filesTotalrequired | integer | |||||||||||||
filesDonerequired | integer | |||||||||||||
bytesTotalrequired | number | |||||||||||||
bytesDonerequired | number | |||||||||||||
errorrequired | string | nullable | ||||||||||||
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time | ||||||||||||
startedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable | ||||||||||||
finishedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/files/operations" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTCancel a queued or running move/copy job#
/workspaces/{workspaceId}/files/operations/{jobId}/cancel
SDK: files.cancelOperation · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
jobIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | |||||||||||||
kindrequired | "move" | "copy" | |||||||||||||
statusrequired | "queued" | "running" | "completed" | "failed" | "cancelled" | |||||||||||||
destinationrequired | string | |||||||||||||
overwriterequired | boolean | |||||||||||||
itemsrequired | array of object |
| ||||||||||||
filesTotalrequired | integer | |||||||||||||
filesDonerequired | integer | |||||||||||||
bytesTotalrequired | number | |||||||||||||
bytesDonerequired | number | |||||||||||||
errorrequired | string | nullable | ||||||||||||
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time | ||||||||||||
startedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable | ||||||||||||
finishedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/files/operations/<jobId>/cancel" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTRename many items with a pattern (preview with dryRun)#
/workspaces/{workspaceId}/files/rename-batch
Find/replace, prefix/suffix and numbering with padding. `dryRun: true` returns the plan and conflicts without touching anything; the apply runs exactly that plan.
SDK: files.renameBatch · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pathsrequired | array of string | min items 1, max items 200 | |||||||||||||||||||||||||||||||||||||||||||||
patternrequired | object |
| |||||||||||||||||||||||||||||||||||||||||||||
dryRun | boolean | · default false | |||||||||||||||||||||||||||||||||||||||||||||
overwrite | boolean | · default false | |||||||||||||||||||||||||||||||||||||||||||||
expandSequences | boolean | · default true |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
dryRunrequired | boolean | |||||||||||||||||||
expandedrequired | integer | |||||||||||||||||||
changedrequired | integer | |||||||||||||||||||
stepsrequired | array of object |
| ||||||||||||||||||
conflictsrequired | array of object |
| ||||||||||||||||||
appliedrequired | array of object |
| ||||||||||||||||||
failedrequired | object | nullable
|
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/files/rename-batch" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"paths":["deliveries/ep01/EP01_final.mov"],"pattern":{"find":"…","replace":"…","regex":true},"dryRun":false}'Transfers#
Transfer specs and progress
- POST Request a transfer spec
- GET List recent transfers
- GET Get one transfer
- PATCH Report client-side progress
POSTRequest a transfer spec#
/workspaces/{workspaceId}/transfers
Returns a spec the transfer engine (Boita desktop, the CLI agent or a gateway) runs; the API never moves bytes itself.
SDK: transfers.create · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
directionrequired | "send" | "receive" | ||||||||||
pathsrequired | array of object | min items 1, max items 10000
| |||||||||
destinationRoot | any | ||||||||||
sourceRoot | any | ||||||||||
fileCount | integer | minimum 0 | |||||||||
totalBytes | integer | minimum 0 | |||||||||
streams | integer | minimum 1, maximum 128 | |||||||||
growingFileWaitSeconds | integer | minimum 1, maximum 3600 | |||||||||
contentProtectionPassword | string | min length 8, max length 256 | |||||||||
priority | "normal" | "deadline" | "background" | ||||||||||
deliverTo | array of string | max items 20 | |||||||||
rawAscp | boolean | ||||||||||
speedMode | boolean | ||||||||||
client | "web" | "desktop" | "mobile" | "gateway" | "share" | "portal" | "agent" | · default "agent" | |||||||||
deviceId | string | ||||||||||
shareId | string | ||||||||||
portalId | string |
Response 201 · application/json
| Field | Type | Notes |
|---|---|---|
transferIdrequired | string | |
transferSpecrequired | object | Hand this to the transfer engine unchanged; it is valid for a short window. |
expiresAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/transfers" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"direction":"send","paths":[{"source":"deliveries/ep01/EP01_final.mov","destination":"deliveries/ep01/EP01_final.mov"}],"destinationRoot":null}'GETList recent transfers#
/workspaces/{workspaceId}/transfers
SDK: transfers.list · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
directionrequired | "send" | "receive" | |
clientrequired | string | |
enginerequired | string | |
statusrequired | "queued" | "running" | "paused" | "completed" | "failed" | "cancelled" | |
streamsrequired | integer | |
priorityrequired | string | |
usageIdrequired | string | |
filesTotalrequired | integer | nullable |
filesDonerequired | integer | |
bytesTotalrequired | number | nullable |
bytesDonerequired | number | |
avgRateKbpsrequired | number | nullable |
startedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
finishedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
errorCoderequired | string | nullable |
errorMessagerequired | string | nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/transfers" \
-H "Authorization: Bearer $BOITA_API_KEY"GETGet one transfer#
/workspaces/{workspaceId}/transfers/{transferId}
SDK: transfers.get · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
transferIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
directionrequired | "send" | "receive" | |
clientrequired | string | |
enginerequired | string | |
statusrequired | "queued" | "running" | "paused" | "completed" | "failed" | "cancelled" | |
streamsrequired | integer | |
priorityrequired | string | |
usageIdrequired | string | |
filesTotalrequired | integer | nullable |
filesDonerequired | integer | |
bytesTotalrequired | number | nullable |
bytesDonerequired | number | |
avgRateKbpsrequired | number | nullable |
startedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
finishedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
errorCoderequired | string | nullable |
errorMessagerequired | string | nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/transfers/<transferId>" \
-H "Authorization: Bearer $BOITA_API_KEY"PATCHReport client-side progress#
/workspaces/{workspaceId}/transfers/{transferId}
SDK: transfers.reportProgress · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
transferIdrequired | path | string |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
statusrequired | "queued" | "running" | "paused" | "completed" | "failed" | "cancelled" | |
bytesDonerequired | integer | minimum 0 |
bytesTotal | integer | minimum 0 |
filesDonerequired | integer | minimum 0 |
filesTotal | integer | minimum 0 |
rateKbps | number | minimum 0 |
errorCode | string | |
errorMessage | string | max length 500 |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
directionrequired | "send" | "receive" | |
clientrequired | string | |
enginerequired | string | |
statusrequired | "queued" | "running" | "paused" | "completed" | "failed" | "cancelled" | |
streamsrequired | integer | |
priorityrequired | string | |
usageIdrequired | string | |
filesTotalrequired | integer | nullable |
filesDonerequired | integer | |
bytesTotalrequired | number | nullable |
bytesDonerequired | number | |
avgRateKbpsrequired | number | nullable |
startedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
finishedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
errorCoderequired | string | nullable |
errorMessagerequired | string | nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X PATCH "https://api.boita.io/v1/workspaces/$WORKSPACE/transfers/<transferId>" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"queued","bytesDone":48000000000,"bytesTotal":48000000000,"filesDone":0}'Receipts#
Delivery receipts, verification reports and delivery notes
- GET Delivery receipt
- GET Delivery receipt as PDF
- GET Verification report as CSV
- GET Printable delivery note
GETDelivery receipt#
/workspaces/{workspaceId}/shares/{shareId}/receipt
Who viewed, who downloaded, per-file checksums and whether every download verified.
SDK: receipts.get · scope: receipts:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
shareIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
receiptIdrequired | string | |||||||||||||||||||||||||||||||
sharerequired | object |
| ||||||||||||||||||||||||||||||
itemsrequired | array of ShareItem |
| ||||||||||||||||||||||||||||||
totalBytesrequired | number | nullable | ||||||||||||||||||||||||||||||
recipientsrequired | array of object |
| ||||||||||||||||||||||||||||||
anonymousrequired | object |
| ||||||||||||||||||||||||||||||
downloadsrequired | array of object |
| ||||||||||||||||||||||||||||||
timelinerequired | array of object |
| ||||||||||||||||||||||||||||||
integrityrequired | "verified" | "none" | |||||||||||||||||||||||||||||||
filesrequired | array of object |
| ||||||||||||||||||||||||||||||
checksumTyperequired | string |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/shares/<shareId>/receipt" \
-H "Authorization: Bearer $BOITA_API_KEY"GETDelivery receipt as PDF#
/workspaces/{workspaceId}/shares/{shareId}/receipt.pdf
SDK: receipts.pdf · scope: receipts:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
shareIdrequired | path | string |
Response 200 · application/pdf
string
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/shares/<shareId>/receipt.pdf" \
-H "Authorization: Bearer $BOITA_API_KEY"GETVerification report as CSV#
/workspaces/{workspaceId}/shares/{shareId}/receipt.csv
SDK: receipts.verificationCsv · scope: receipts:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
shareIdrequired | path | string |
Response 200 · text/csv
string
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/shares/<shareId>/receipt.csv" \
-H "Authorization: Bearer $BOITA_API_KEY"GETPrintable delivery note#
/workspaces/{workspaceId}/shares/{shareId}/delivery-note.pdf
SDK: receipts.deliveryNotePdf · scope: receipts:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
shareIdrequired | path | string |
Response 200 · application/pdf
string
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/shares/<shareId>/delivery-note.pdf" \
-H "Authorization: Bearer $BOITA_API_KEY"Portals#
Upload portals and the uploads they receive
- POST Create an upload portal
- GET List upload portals
- GET Get a portal with its uploads
- PATCH Update or pause a portal
- DELETE Revoke a portal
- POST Approve or reject an upload
POSTCreate an upload portal#
/workspaces/{workspaceId}/portals
SDK: portals.create · scope: portals:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fields | array of object | max items 20
| |||||||||||||||||||||||||||||||||
rules | object |
| |||||||||||||||||||||||||||||||||
spec | object |
| |||||||||||||||||||||||||||||||||
dueAt | string (date-time) | date-time | |||||||||||||||||||||||||||||||||
inviteEmails | array of string (email) | max items 100 | |||||||||||||||||||||||||||||||||
invitePhones | array of string | max items 100 | |||||||||||||||||||||||||||||||||
titlerequired | string | min length 1, max length 120 | |||||||||||||||||||||||||||||||||
message | string | max length 2000 | |||||||||||||||||||||||||||||||||
targetPath | string | max length 4096 · default "" | |||||||||||||||||||||||||||||||||
requireEmail | boolean | ||||||||||||||||||||||||||||||||||
password | string | min length 8, max length 256 | |||||||||||||||||||||||||||||||||
maxBytesPerUpload | integer | ||||||||||||||||||||||||||||||||||
expiresInDays | integer | minimum 1, maximum 3650 | |||||||||||||||||||||||||||||||||
notifyOnUpload | boolean | ||||||||||||||||||||||||||||||||||
projectId | string | max length 64, nullable |
Response 201 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
slugrequired | string | |
urlrequired | string | |
titlerequired | string | |
messagerequired | string | nullable |
targetPathrequired | string | |
requireEmailrequired | boolean | |
hasPasswordrequired | boolean | |
maxBytesPerUploadrequired | number | nullable |
expiresAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
notifyOnUploadrequired | boolean | |
statusrequired | "active" | "paused" | "revoked" | |
uploadCountrequired | integer | |
bytesReceivedrequired | number | |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/portals" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fields":[{"key":"…","label":"…","required":false}],"rules":{"allowedExtensions":["…"],"maxFiles":1,"namePattern":"…"},"spec":{"name":"EP01_final.mov","containers":["…"],"videoCodecs":["…"]},"title":"EP01 final"}'GETList upload portals#
/workspaces/{workspaceId}/portals
SDK: portals.list · scopes: portals:writereceipts:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
slugrequired | string | |
urlrequired | string | |
titlerequired | string | |
messagerequired | string | nullable |
targetPathrequired | string | |
requireEmailrequired | boolean | |
hasPasswordrequired | boolean | |
maxBytesPerUploadrequired | number | nullable |
expiresAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
notifyOnUploadrequired | boolean | |
statusrequired | "active" | "paused" | "revoked" | |
uploadCountrequired | integer | |
bytesReceivedrequired | number | |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/portals" \
-H "Authorization: Bearer $BOITA_API_KEY"GETGet a portal with its uploads#
/workspaces/{workspaceId}/portals/{portalId}
SDK: portals.get · scopes: portals:writereceipts:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
portalIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | |||||||||||||||||||||||||||||||||||||
slugrequired | string | |||||||||||||||||||||||||||||||||||||
urlrequired | string | |||||||||||||||||||||||||||||||||||||
titlerequired | string | |||||||||||||||||||||||||||||||||||||
messagerequired | string | nullable | ||||||||||||||||||||||||||||||||||||
targetPathrequired | string | |||||||||||||||||||||||||||||||||||||
requireEmailrequired | boolean | |||||||||||||||||||||||||||||||||||||
hasPasswordrequired | boolean | |||||||||||||||||||||||||||||||||||||
maxBytesPerUploadrequired | number | nullable | ||||||||||||||||||||||||||||||||||||
expiresAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable | ||||||||||||||||||||||||||||||||||||
notifyOnUploadrequired | boolean | |||||||||||||||||||||||||||||||||||||
statusrequired | "active" | "paused" | "revoked" | |||||||||||||||||||||||||||||||||||||
uploadCountrequired | integer | |||||||||||||||||||||||||||||||||||||
bytesReceivedrequired | number | |||||||||||||||||||||||||||||||||||||
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time | ||||||||||||||||||||||||||||||||||||
uploadsrequired | array of PortalUpload |
|
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/portals/<portalId>" \
-H "Authorization: Bearer $BOITA_API_KEY"PATCHUpdate or pause a portal#
/workspaces/{workspaceId}/portals/{portalId}
SDK: portals.update · scope: portals:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
portalIdrequired | path | string |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
projectId | string | max length 64, nullable |
title | string | min length 1, max length 120 |
message | string | max length 2000, nullable |
status | "active" | "paused" | |
requireEmail | boolean | |
password | string | min length 8, max length 256, nullable |
maxBytesPerUpload | integer | nullable |
expiresInDays | integer | minimum 1, maximum 3650, nullable |
notifyOnUpload | boolean |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
slugrequired | string | |
urlrequired | string | |
titlerequired | string | |
messagerequired | string | nullable |
targetPathrequired | string | |
requireEmailrequired | boolean | |
hasPasswordrequired | boolean | |
maxBytesPerUploadrequired | number | nullable |
expiresAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
notifyOnUploadrequired | boolean | |
statusrequired | "active" | "paused" | "revoked" | |
uploadCountrequired | integer | |
bytesReceivedrequired | number | |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X PATCH "https://api.boita.io/v1/workspaces/$WORKSPACE/portals/<portalId>" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"ckz7…","title":"EP01 final","message":"Final grade, please confirm."}'DELETERevoke a portal#
/workspaces/{workspaceId}/portals/{portalId}
SDK: portals.revoke · scope: portals:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
portalIdrequired | path | string |
Response 204
No body.
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X DELETE "https://api.boita.io/v1/workspaces/$WORKSPACE/portals/<portalId>" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTApprove or reject an upload#
/workspaces/{workspaceId}/portals/{portalId}/uploads/{uploadId}/review
SDK: portals.reviewUpload · scope: portals:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
portalIdrequired | path | string | |
uploadIdrequired | path | string |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
decisionrequired | "approved" | "rejected" | "pending" | |
note | string | max length 500 |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
senderEmailrequired | string | nullable |
senderNamerequired | string | nullable |
messagerequired | string | nullable |
folderPathrequired | string | |
fileCountrequired | integer | nullable |
bytesTotalrequired | number | nullable |
bytesDonerequired | number | |
statusrequired | string | |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
completedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/portals/<portalId>/uploads/<uploadId>/review" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"decision":"approved","note":"Final grade, please confirm."}'Webhooks#
Endpoints, deliveries and the signed event stream
- GET Event types an endpoint can subscribe to
- POST Create a webhook endpoint
- GET List webhook endpoints
- PATCH Update, disable or re-enable an endpoint
- DELETE Delete an endpoint
- POST Rotate the signing secret
- POST Send a webhook.test event to this endpoint
- GET Recent deliveries to an endpoint
- POST Retry a delivery now
- POST Subscribe a REST hook
- DELETE Unsubscribe a REST hook
- GET A sample delivery for an event type
GETEvent types an endpoint can subscribe to#
/workspaces/{workspaceId}/webhooks/events
SDK: webhooks.eventTypes · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
eventsrequired | array of string |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks/events" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTCreate a webhook endpoint#
/workspaces/{workspaceId}/webhooks
SDK: webhooks.create · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
urlrequired | string | min length 8, max length 2048 |
eventsrequired | array of string | min items 1, max items 50 |
description | string | max length 200 |
Response 201 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
urlrequired | string | |
descriptionrequired | string | nullable |
eventsrequired | array of string | |
statusrequired | "active" | "disabled" | |
failureCountrequired | integer | |
lastDeliveryAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
secretrequired | string | Signing secret, shown once |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/hook","events":["…"],"description":"…"}'GETList webhook endpoints#
/workspaces/{workspaceId}/webhooks
SDK: webhooks.list · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
urlrequired | string | |
descriptionrequired | string | nullable |
eventsrequired | array of string | |
statusrequired | "active" | "disabled" | |
failureCountrequired | integer | |
lastDeliveryAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks" \
-H "Authorization: Bearer $BOITA_API_KEY"PATCHUpdate, disable or re-enable an endpoint#
/workspaces/{workspaceId}/webhooks/{webhookId}
SDK: webhooks.update · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
webhookIdrequired | path | string |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
url | string | min length 8, max length 2048 |
events | array of string | min items 1, max items 50 |
description | string | max length 200, nullable |
status | "active" | "disabled" |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
urlrequired | string | |
descriptionrequired | string | nullable |
eventsrequired | array of string | |
statusrequired | "active" | "disabled" | |
failureCountrequired | integer | |
lastDeliveryAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X PATCH "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks/<webhookId>" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/hook","events":["…"],"description":"…"}'DELETEDelete an endpoint#
/workspaces/{workspaceId}/webhooks/{webhookId}
SDK: webhooks.delete · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
webhookIdrequired | path | string |
Response 204
No body.
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X DELETE "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks/<webhookId>" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTRotate the signing secret#
/workspaces/{workspaceId}/webhooks/{webhookId}/rotate-secret
SDK: webhooks.rotateSecret · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
webhookIdrequired | path | string |
Response 201 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
secretrequired | string |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks/<webhookId>/rotate-secret" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTSend a webhook.test event to this endpoint#
/workspaces/{workspaceId}/webhooks/{webhookId}/test
SDK: webhooks.sendTest · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
webhookIdrequired | path | string |
Response 201 · application/json
| Field | Type | Notes |
|---|---|---|
eventIdrequired | string | |
deliveryId | string |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks/<webhookId>/test" \
-H "Authorization: Bearer $BOITA_API_KEY"GETRecent deliveries to an endpoint#
/workspaces/{workspaceId}/webhooks/{webhookId}/deliveries
SDK: webhooks.listDeliveries · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
webhookIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
eventIdrequired | string | |
typerequired | string | |
statusrequired | "pending" | "delivered" | "failed" | |
attemptsrequired | integer | |
nextAttemptAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
lastStatusCoderequired | integer | nullable |
lastErrorrequired | string | nullable |
deliveredAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks/<webhookId>/deliveries" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTRetry a delivery now#
/workspaces/{workspaceId}/webhooks/{webhookId}/deliveries/{deliveryId}/retry
SDK: webhooks.retryDelivery · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
webhookIdrequired | path | string | |
deliveryIdrequired | path | string |
Response 201 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
statusrequired | string |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/webhooks/<webhookId>/deliveries/<deliveryId>/retry" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTSubscribe a REST hook#
/workspaces/{workspaceId}/hooks/subscribe
Zapier-style REST hook: creates a webhook endpoint for the event(s) and returns its id. Same limits as webhook endpoints (10 per workspace).
SDK: hooks.subscribe · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
target_urlrequired | string | Where to POST events (https) · min length 8, max length 2048 |
event | string | One event type (alternative to `events`) · min length 1, max length 64 |
events | array of string | Event types, or ["*"] · min items 1, max items 50 |
source | "zapier" | "make" | "n8n" | "other" | Shown next to the endpoint on the Developers page |
Response 201 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
urlrequired | string | |
eventsrequired | array of string | |
secretrequired | string | Signing secret, shown once |
sourcerequired | string | |
unsubscribeUrlrequired | string | Relative; DELETE it to unsubscribe |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/hooks/subscribe" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target_url":"https://example.com/hook","event":"…","events":["…"]}'DELETEUnsubscribe a REST hook#
/workspaces/{workspaceId}/hooks/unsubscribe/{hookId}
SDK: hooks.unsubscribe · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
hookIdrequired | path | string |
Response 204
No body.
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X DELETE "https://api.boita.io/v1/workspaces/$WORKSPACE/hooks/unsubscribe/<hookId>" \
-H "Authorization: Bearer $BOITA_API_KEY"GETA sample delivery for an event type#
/workspaces/{workspaceId}/hooks/sample
The exact envelope the worker POSTs, with realistic data, so a trigger can be built before the first event.
SDK: hooks.sample · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
eventrequired | query | string | min length 1, max length 64 |
Response 200 · application/json
| Field | Type | Notes | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | ||||||||||
typerequired | string | ||||||||||
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time | |||||||||
workspaceIdrequired | string | ||||||||||
datarequired | object | ||||||||||
deliveryrequired | object |
|
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/hooks/sample?event=%E2%80%A6" \
-H "Authorization: Bearer $BOITA_API_KEY"Events#
Polling alternative to webhooks
GETPoll the workspace event stream#
/workspaces/{workspaceId}/events
Pass `after` = the last id you saw to page forward; the same events webhooks deliver.
SDK: events.list · scope: webhooks:manage
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
after | query | string | max length 64 |
type | query | string | max length 64 |
limit | query | integer | minimum 1, maximum 200 |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
typerequired | string | |
datarequired | object | |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/events" \
-H "Authorization: Bearer $BOITA_API_KEY"Usage#
Storage and bandwidth figures
GETStorage usage and quota state#
/workspaces/{workspaceId}/usage
SDK: usage.summary · scope: usage:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
quotaBytesrequired | number | |||||||||||||||||||
planCoderequired | string | |||||||||||||||||||
percentrequired | number | nullable | ||||||||||||||||||
levelrequired | integer | |||||||||||||||||||
uploadsBlockedrequired | boolean | |||||||||||||||||||
latestrequired | any | |||||||||||||||||||
historyrequired | array of UsageSnapshot |
|
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/usage" \
-H "Authorization: Bearer $BOITA_API_KEY"GETBandwidth over the last 30 or 90 days#
/workspaces/{workspaceId}/usage/bandwidth
SDK: usage.bandwidth · scope: usage:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
days | query | "30" | "90" |
Response 200 · application/json
| Field | Type | Notes |
|---|---|---|
daysrequired | integer |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/usage/bandwidth" \
-H "Authorization: Bearer $BOITA_API_KEY"Cloud#
Deliveries to connected Google Drive, Dropbox, OneDrive and Box folders
POSTDeliver files to a connected cloud folder#
/workspaces/{workspaceId}/cloud/deliveries
Queues a server-side copy of a share's files (or explicit workspace paths) into a folder of a cloud account connected with delivery access. `destinationPath` is the provider-native folder locator from the web picker ("" = root).
SDK: cloud.deliver · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
Request body (application/json, required)
| Field | Type | Notes |
|---|---|---|
accountIdrequired | string | max length 64 |
shareId | string | max length 64 |
sourcePaths | array of string | max items 500 |
destinationPath | string | max length 2048 · default "" |
destinationLabel | string | max length 300 · default "" |
overwrite | boolean | · default false |
Response 201 · application/json
| Field | Type | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | |||||||||||||
accountrequired | object |
| ||||||||||||
shareIdrequired | string | nullable | ||||||||||||
sourcePathsrequired | array of string | |||||||||||||
destinationPathrequired | string | |||||||||||||
destinationLabelrequired | string | |||||||||||||
overwriterequired | boolean | |||||||||||||
statusrequired | "queued" | "running" | "completed" | "failed" | "cancelled" | |||||||||||||
filesTotalrequired | integer | nullable | ||||||||||||
bytesTotalrequired | number | nullable | ||||||||||||
filesDonerequired | integer | |||||||||||||
bytesDonerequired | number | |||||||||||||
skippedrequired | array of object | nullable
| ||||||||||||
errorrequired | string | nullable | ||||||||||||
startedAtrequired | string (date-time) | date-time, nullable | ||||||||||||
finishedAtrequired | string (date-time) | date-time, nullable | ||||||||||||
createdAtrequired | string (date-time) | date-time | ||||||||||||
createdByrequired | string |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/cloud/deliveries" \
-H "Authorization: Bearer $BOITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"accountId":"ckz7…","shareId":"ckz7…","sourcePaths":["deliveries/ep01/EP01_final.mov"]}'GETList cloud deliveries#
/workspaces/{workspaceId}/cloud/deliveries
SDK: cloud.listDeliveries · scope: files:read
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
shareId | query | string |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | |||||||||||||
accountrequired | object |
| ||||||||||||
shareIdrequired | string | nullable | ||||||||||||
sourcePathsrequired | array of string | |||||||||||||
destinationPathrequired | string | |||||||||||||
destinationLabelrequired | string | |||||||||||||
overwriterequired | boolean | |||||||||||||
statusrequired | "queued" | "running" | "completed" | "failed" | "cancelled" | |||||||||||||
filesTotalrequired | integer | nullable | ||||||||||||
bytesTotalrequired | number | nullable | ||||||||||||
filesDonerequired | integer | |||||||||||||
bytesDonerequired | number | |||||||||||||
skippedrequired | array of object | nullable
| ||||||||||||
errorrequired | string | nullable | ||||||||||||
startedAtrequired | string (date-time) | date-time, nullable | ||||||||||||
finishedAtrequired | string (date-time) | date-time, nullable | ||||||||||||
createdAtrequired | string (date-time) | date-time | ||||||||||||
createdByrequired | string |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X GET "https://api.boita.io/v1/workspaces/$WORKSPACE/cloud/deliveries" \
-H "Authorization: Bearer $BOITA_API_KEY"POSTCancel a cloud delivery#
/workspaces/{workspaceId}/cloud/deliveries/{deliveryId}/cancel
SDK: cloud.cancelDelivery · scope: files:write
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
workspaceIdrequired | path | string | The workspace id (the key is bound to one workspace) |
deliveryIdrequired | path | string |
Response 200 · application/json
| Field | Type | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | |||||||||||||
accountrequired | object |
| ||||||||||||
shareIdrequired | string | nullable | ||||||||||||
sourcePathsrequired | array of string | |||||||||||||
destinationPathrequired | string | |||||||||||||
destinationLabelrequired | string | |||||||||||||
overwriterequired | boolean | |||||||||||||
statusrequired | "queued" | "running" | "completed" | "failed" | "cancelled" | |||||||||||||
filesTotalrequired | integer | nullable | ||||||||||||
bytesTotalrequired | number | nullable | ||||||||||||
filesDonerequired | integer | |||||||||||||
bytesDonerequired | number | |||||||||||||
skippedrequired | array of object | nullable
| ||||||||||||
errorrequired | string | nullable | ||||||||||||
startedAtrequired | string (date-time) | date-time, nullable | ||||||||||||
finishedAtrequired | string (date-time) | date-time, nullable | ||||||||||||
createdAtrequired | string (date-time) | date-time | ||||||||||||
createdByrequired | string |
Errors: 400 (validation_failed | path_rejected | authorization_pending | slow_down | access_denied | expired_token) · 401 (unauthenticated) · 403 (email_unverified | mfa_required | forbidden | plan_limit) · 404 (not_found) · 429 (rate_limited | node_busy)
curl -X POST "https://api.boita.io/v1/workspaces/$WORKSPACE/cloud/deliveries/<deliveryId>/cancel" \
-H "Authorization: Bearer $BOITA_API_KEY"Schemas#
Objects the operations above return, as named in the contract.
FileEntry#
| Field | Type | Notes |
|---|---|---|
namerequired | string | |
pathrequired | string | |
typerequired | "file" | "folder" | "link" | |
sizerequired | integer | nullable |
modifiedAtrequired | string | nullable |
encryptedrequired | boolean | |
preview | boolean |
FileListing#
| Field | Type | Notes | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pathrequired | string | |||||||||||||||||||||||||
accessrequired | string | |||||||||||||||||||||||||
itemsrequired | array of FileEntry |
| ||||||||||||||||||||||||
totalrequired | integer |
SearchResult#
| Field | Type | Notes | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
itemsrequired | array of FileEntry |
|
TrashItem#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
pathrequired | string | |
namerequired | string | |
sizeBytesrequired | number | nullable |
deletedAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
purgeAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
FileVersion#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
pathrequired | string | |
sizeBytesrequired | number | nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Ok#
| Field | Type | Notes |
|---|---|---|
okrequired | boolean |
Transfer#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
directionrequired | "send" | "receive" | |
clientrequired | string | |
enginerequired | string | |
statusrequired | "queued" | "running" | "paused" | "completed" | "failed" | "cancelled" | |
streamsrequired | integer | |
priorityrequired | string | |
usageIdrequired | string | |
filesTotalrequired | integer | nullable |
filesDonerequired | integer | |
bytesTotalrequired | number | nullable |
bytesDonerequired | number | |
avgRateKbpsrequired | number | nullable |
startedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
finishedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
errorCoderequired | string | nullable |
errorMessagerequired | string | nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
TransferCreated#
| Field | Type | Notes |
|---|---|---|
transferIdrequired | string | |
transferSpecrequired | object | Hand this to the transfer engine unchanged; it is valid for a short window. |
expiresAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
BulkResult#
| Field | Type | Notes | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
donerequired | integer | ||||||||||
failed | array of object |
|
Comment#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
bodyrequired | string | |
authorrequired | string | nullable |
itemPathrequired | string | nullable |
resolvedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
Receipt#
| Field | Type | Notes | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
receiptIdrequired | string | |||||||||||||||||||||||||||||||
sharerequired | object |
| ||||||||||||||||||||||||||||||
itemsrequired | array of ShareItem |
| ||||||||||||||||||||||||||||||
totalBytesrequired | number | nullable | ||||||||||||||||||||||||||||||
recipientsrequired | array of object |
| ||||||||||||||||||||||||||||||
anonymousrequired | object |
| ||||||||||||||||||||||||||||||
downloadsrequired | array of object |
| ||||||||||||||||||||||||||||||
timelinerequired | array of object |
| ||||||||||||||||||||||||||||||
integrityrequired | "verified" | "none" | |||||||||||||||||||||||||||||||
filesrequired | array of object |
| ||||||||||||||||||||||||||||||
checksumTyperequired | string |
Portal#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
slugrequired | string | |
urlrequired | string | |
titlerequired | string | |
messagerequired | string | nullable |
targetPathrequired | string | |
requireEmailrequired | boolean | |
hasPasswordrequired | boolean | |
maxBytesPerUploadrequired | number | nullable |
expiresAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
notifyOnUploadrequired | boolean | |
statusrequired | "active" | "paused" | "revoked" | |
uploadCountrequired | integer | |
bytesReceivedrequired | number | |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
PortalUpload#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
senderEmailrequired | string | nullable |
senderNamerequired | string | nullable |
messagerequired | string | nullable |
folderPathrequired | string | |
fileCountrequired | integer | nullable |
bytesTotalrequired | number | nullable |
bytesDonerequired | number | |
statusrequired | string | |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
completedAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
PortalDetail#
| Field | Type | Notes | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired | string | |||||||||||||||||||||||||||||||||||||
slugrequired | string | |||||||||||||||||||||||||||||||||||||
urlrequired | string | |||||||||||||||||||||||||||||||||||||
titlerequired | string | |||||||||||||||||||||||||||||||||||||
messagerequired | string | nullable | ||||||||||||||||||||||||||||||||||||
targetPathrequired | string | |||||||||||||||||||||||||||||||||||||
requireEmailrequired | boolean | |||||||||||||||||||||||||||||||||||||
hasPasswordrequired | boolean | |||||||||||||||||||||||||||||||||||||
maxBytesPerUploadrequired | number | nullable | ||||||||||||||||||||||||||||||||||||
expiresAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable | ||||||||||||||||||||||||||||||||||||
notifyOnUploadrequired | boolean | |||||||||||||||||||||||||||||||||||||
statusrequired | "active" | "paused" | "revoked" | |||||||||||||||||||||||||||||||||||||
uploadCountrequired | integer | |||||||||||||||||||||||||||||||||||||
bytesReceivedrequired | number | |||||||||||||||||||||||||||||||||||||
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time | ||||||||||||||||||||||||||||||||||||
uploadsrequired | array of PortalUpload |
|
Webhook#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
urlrequired | string | |
descriptionrequired | string | nullable |
eventsrequired | array of string | |
statusrequired | "active" | "disabled" | |
failureCountrequired | integer | |
lastDeliveryAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
WebhookCreated#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
urlrequired | string | |
descriptionrequired | string | nullable |
eventsrequired | array of string | |
statusrequired | "active" | "disabled" | |
failureCountrequired | integer | |
lastDeliveryAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
secretrequired | string | Signing secret, shown once |
WebhookSecret#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
secretrequired | string |
WebhookDelivery#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
eventIdrequired | string | |
typerequired | string | |
statusrequired | "pending" | "delivered" | "failed" | |
attemptsrequired | integer | |
nextAttemptAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
lastStatusCoderequired | integer | nullable |
lastErrorrequired | string | nullable |
deliveredAtrequired | string (date-time) | ISO 8601 timestamp · date-time, nullable |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
DeliveryQueued#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
statusrequired | string |
TestQueued#
| Field | Type | Notes |
|---|---|---|
eventIdrequired | string | |
deliveryId | string |
EventCatalogue#
| Field | Type | Notes |
|---|---|---|
eventsrequired | array of string |
WorkspaceEvent#
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
typerequired | string | |
datarequired | object | |
createdAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
UsageSnapshot#
| Field | Type | Notes |
|---|---|---|
takenAtrequired | string (date-time) | ISO 8601 timestamp · date-time |
bytesStoredrequired | number | |
fileCountrequired | integer | |
bytesIn30drequired | number | |
bytesOut30drequired | number |
UsageSummary#
| Field | Type | Notes | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
quotaBytesrequired | number | |||||||||||||||||||
planCoderequired | string | |||||||||||||||||||
percentrequired | number | nullable | ||||||||||||||||||
levelrequired | integer | |||||||||||||||||||
uploadsBlockedrequired | boolean | |||||||||||||||||||
latestrequired | any | |||||||||||||||||||
historyrequired | array of UsageSnapshot |
|
Bandwidth#
| Field | Type | Notes |
|---|---|---|
daysrequired | integer |
Error#
Every error response
| Field | Type | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
errorrequired | object |
|
Error codes#
The code field of the error envelope takes one of these values; the HTTP status says which class it is.
access_deniedauthorization_pendingemail_unverifiedexpired_tokenforbiddenmfa_requirednode_busynot_foundpath_rejectedplan_limitrate_limitedslow_downunauthenticatedvalidation_failed