Skip to Content
API ReferenceWorkspaces

Workspaces

Create and manage workspaces, request ownership transfer or deletion, and (as sub-resources) manage a workspace’s API keys and inspect its API usage and request history.

Base URL

https://api.voxburst.io/v1/workspaces

Authentication: All core workspace endpoints (GET/POST/PATCH/DELETE /v1/workspaces*) require the workspaces:read / workspaces:write scopes. The API-key sub-resources below (api-keys, api-usage, request-history) have no scope of their own — see each section for its actual requirement.


List Workspaces

GET /v1/workspaces

Returns every workspace the caller is a member of.

curl https://api.voxburst.io/v1/workspaces \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Create a Workspace

POST /v1/workspaces

FieldTypeRequiredDescription
namestringYes1–100 characters
slugstringYesLowercase alphanumeric with hyphens, must be unique
logostringNoTrusted VoxBurst-hosted URL
settingsobjectNoSee Workspace Settings below
curl -X POST https://api.voxburst.io/v1/workspaces \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "name": "Acme Co", "slug": "acme-co" }'

The caller becomes OWNER. Enforces the plan’s workspace-count limit — returns 403 with plan/limit details if exceeded.

Error Codes

StatusCause
403Workspace-count limit reached for the caller’s plan
409slug already in use

Get a Workspace

GET /v1/workspaces/:id

curl https://api.voxburst.io/v1/workspaces/wsp_example123 \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Update a Workspace

PATCH /v1/workspaces/:id

All fields optional.

FieldTypeRequiredDescription
namestringNo1–100 characters
slugstringNoMust remain unique
logostring | nullNoTrusted VoxBurst-hosted URL, or null to clear
settingsobjectNoSee Workspace Settings below
curl -X PATCH https://api.voxburst.io/v1/workspaces/wsp_example123 \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "settings": { "week_start_day": "monday" } }'

Workspace Settings

The settings object is strictly typed server-side — any key not in this list is silently stripped before it reaches the database. Every currently supported key:

KeyTypeDescription
require_approvalbooleanGate publishing behind the approval workflow
approve_contentbooleanGate publishing on content approval specifically (defaults to true when require_approval is on)
approve_schedulebooleanGate scheduling (setting scheduledFor) on approval (default false)
week_start_day"sunday" | "monday"Calendar week start day
autoArchiveDays0 | 30 | 60 | 90 | 180Days after publish before auto-archiving a post (0 disables)
allowedPlatformsstring[]Restrict which platforms can be connected. Empty/absent = all platforms allowed. Values must be valid uppercase platform enum values.
platformBetaTesterbooleanSystem-admin only — grants access to connect platforms still in pendingApproval. Non-admin callers attempting to set this receive 403.
autoPrepareVideoAudiobooleanAuto-inject a silent audio track into videos with none, for platforms that require an audio stream (default: enabled)

calendar_execution_path also exists in the schema but is an internal implementation detail of the legacy calendar system — do not set it from an integration.

Error Codes

StatusCause
403Attempted to set platformBetaTester without system-admin privileges
404Workspace not found
409slug already in use

Delete a Workspace

DELETE /v1/workspaces/:id

curl -X DELETE https://api.voxburst.io/v1/workspaces/wsp_example123 \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Error Codes

StatusCause
400This is the caller’s only owned workspace — cannot delete your only workspace
404Workspace not found

Request Workspace Deletion

POST /v1/workspaces/:id/deletion-requests

Creates a deletion request (owner/admin only) that kicks off VoxBurst’s deletion review process, distinct from the immediate DELETE /v1/workspaces/:id above.

FieldTypeRequiredDescription
reasonstringNo10–2,000 characters
curl -X POST https://api.voxburst.io/v1/workspaces/wsp_example123/deletion-requests \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "reason": "Consolidating into a single workspace" }'

Ownership Transfer

Transfer workspace ownership to another user. The target user must accept before ownership actually moves — nothing changes until they do.

EndpointDescription
POST /v1/workspaces/:id/transfer-requestInitiate a transfer. Body: { "targetUserId": string }.
GET /v1/workspaces/:id/transfer-requestGet the pending transfer request, if any.
DELETE /v1/workspaces/:id/transfer-requestCancel a pending transfer request.
POST /v1/workspaces/:id/transfer-request/acceptCalled by the target user to accept and complete the transfer.
POST /v1/workspaces/:id/transfer-request/declineCalled by the target user to decline.

A transfer request expires after 7 days if not accepted. Initiating a transfer checks that the target user has capacity (workspace-count limit) to become an additional owner before creating the request.

Error Codes

StatusCause
400targetUserId equals the caller (already the owner)

Workspace API Keys

/v1/workspaces/:id/api-keys

Managing API keys requires a Cognito session — this sub-resource cannot be called with another API key. API credentials cannot create, broaden, rotate, or revoke API credentials; only an authenticated workspace user can. All endpoints also require OWNER or ADMIN role.

Create an API Key

POST /v1/workspaces/:id/api-keys

FieldTypeRequiredDescription
namestringYes1–100 characters
scopesstring[]YesNamed scopes (see Scopes), or ["*"] for wildcard
expiresAtstring | nullNoISO 8601 datetime
curl -X POST https://api.voxburst.io/v1/workspaces/wsp_example123/api-keys \ -H "Authorization: Bearer <cognito-token>" \ -H "Content-Type: application/json" \ -d '{ "name": "CI integration", "scopes": ["posts:read", "posts:write"] }'

Response (201)

{ "data": { "id": "key_abc123", "name": "CI integration", "prefix": "vb_live_xxxx", "scopes": ["posts:read", "posts:write"], "createdAt": "2026-08-01T00:00:00.000Z", "expiresAt": null, "key": "vb_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } }

The full key value is returned only in this response. It is never retrievable again — store it immediately. Every other endpoint on this page only ever returns the prefix.

Workspaces are capped at 25 active keys.

List API Keys

GET /v1/workspaces/:id/api-keys — never returns the full key, only prefix. Each key includes expirationStatus ("active" | "expiring_soon" | "expired", "expiring_soon" = within 7 days) and daysUntilExpiration.

List Keys Expiring Soon

GET /v1/workspaces/:id/api-keys/expiring?days=7days must be 1–365 (default 7).

Update an API Key

PATCH /v1/workspaces/:id/api-keys/:keyId

FieldTypeRequiredDescription
namestringNo1–100 characters
scopesstring[]NoReplaces the key’s full scope list
allowedIpsstring[]NoIP allowlist — individual IPs or CIDR ranges

Revoke an API Key

DELETE /v1/workspaces/:id/api-keys/:keyId — soft-deletes (sets revokedAt); does not hard-delete the row.

Per-Key Usage

GET /v1/workspaces/:id/api-keys/:keyId/usage?startDate=&endDate=

Returns total request count, last-used timestamp, per-endpoint breakdown (method, path, count, error count), and average response time for a single key. Defaults to the current calendar month if no date range is given.

Error Codes (all API key endpoints)

StatusCodeCause
400LIMIT_EXCEEDED25 active keys already exist for this workspace
400VALIDATION_ERRORInvalid scope string, wildcard combined with named scopes, or invalid IP/CIDR
404NOT_FOUNDAPI key not found (or already revoked)

Workspace API Usage

GET /v1/workspaces/:id/api-usage

Returns aggregate API request counts against the workspace’s monthly plan limit for the current billing period.

curl https://api.voxburst.io/v1/workspaces/wsp_example123/api-usage \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Response

{ "data": { "requests": { "total": 4213, "limit": 100000, "remaining": 95787 }, "percentage": { "remaining": 96, "used": 4 }, "status": "healthy", "period": { "start": "2026-08-01T00:00:00.000Z", "end": "2026-08-31T23:59:59.000Z" }, "plan": { "slug": "pro", "name": "Pro" } } }

status is "healthy" below 75% used, "warning" at 75–89%, "critical" at 90%+.

Additional Usage Breakdown Endpoints

EndpointDescription
GET /v1/workspaces/:id/api-usage/timeseriesUsage broken down over time (for charting request volume)
GET /v1/workspaces/:id/api-usage/endpointsUsage broken down by endpoint (path + method)

Request History

GET /v1/workspaces/:id/request-history

Developer-friendly, paginated log of API requests made against the workspace — built for debugging integrations. Rate limited to 30 requests/minute.

Query Parameters

ParameterTypeDescription
methodstringFilter by GET, POST, PATCH, PUT, or DELETE
pathstringSubstring match on request path
statusstring3-digit HTTP status code, e.g. "404"
apiKeyIdstringFilter to requests made with a specific API key
startDate / endDatestringISO 8601 range
cursorstringOpaque pagination cursor
limitnumber1–100, default 50
curl "https://api.voxburst.io/v1/workspaces/wsp_example123/request-history?status=500&limit=20" \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Response

{ "data": [ { "id": "log_abc123", "timestamp": "2026-08-30T12:00:00.000Z", "method": "POST", "path": "/v1/posts", "statusCode": 201, "responseTimeMs": 142, "requestId": "req_xyz789", "apiKeyId": "key_abc123", "actorType": "api_key", "actorId": null, "ipAddress": "203.0.113.4" } ], "pagination": { "has_more": true, "next_cursor": "eyJ...", "limit": 20 } }
Last updated on