Skip to Content

Calendar

Manage posts through VoxBurst’s content calendar and approval workflow: create and update calendar posts, submit them for approval, approve/reject, and publish. Also covers calendar personas (a separate, legacy persona system — see the callout below) and platform-to-calendar sync.

This is a separate system from /v1/posts. /v1/calendar/posts are a distinct resource (CalendarPost) from the Post resource documented in Posts. If your integration was built against POST /v1/posts, you do not need this group — it exists for workspaces using the calendar-based drafting and approval UI.

Calendar personas are legacy. The /v1/calendar/personas* endpoints on this page sit on top of the older CalendarPersona model. They remain fully functional, but the intended long-term replacement is the newer persona engine documented in Personas (/v1/personas, backed by PersonaProfile). New integrations should prefer /v1/personas.

Base URL

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

Authentication: All endpoints require a Bearer token and workspace context, with the group’s schedule:read / schedule:write scopes. Some write endpoints additionally require an ADMIN or OWNER workspace role — noted per endpoint below.


List Calendar Posts

GET /v1/calendar/posts

curl "https://api.voxburst.io/v1/calendar/posts?status=scheduled&limit=20" \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Query Parameters

ParameterTypeRequiredDescription
statusstringNoFilter by calendar post status
platformstringNoFilter by platform
fromstringNoISO 8601 start of date range
tostringNoISO 8601 end of date range
limitnumberNo1–100, default 20
cursorstringNoPagination cursor

Get a Calendar Post

GET /v1/calendar/posts/:id

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

Returns { "data": <CalendarPost> }, or 404 if not found in the workspace.


Create a Calendar Post

POST /v1/calendar/posts

Request Body

FieldTypeRequiredDescription
accountIdstringYesSocial account to post to
contentstringYesPost content, 1–10,000 characters
platformstringYesPlatform string
personaIdstringNoCalendar persona to associate
scheduledAtstringNoISO 8601 datetime — must be in the future if set
mediaIdstringNoAttached media ID
imageUrlstringNoDirect image URL (alternative to mediaId)
notesstringNoInternal notes, not shown to end viewers
arcstringNoFree-form campaign/arc grouping label
curl -X POST https://api.voxburst.io/v1/calendar/posts \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "accountId": "acc_abc123", "content": "Draft for review", "platform": "TWITTER", "scheduledAt": "2026-09-01T15:00:00Z" }'

Returns { "data": <CalendarPost> } with 201.


Update a Calendar Post

PATCH /v1/calendar/posts/:id

All fields optional; only send what changes. Body fields mirror the create schema (content, scheduledAt, mediaId, imageUrl, notes, arc, personaId, status — each nullable where noted in the create schema).

curl -X PATCH https://api.voxburst.io/v1/calendar/posts/cmp6v6bhf000369v60htcu3vc \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "content": "Updated draft copy" }'

Submit for Approval

POST /v1/calendar/posts/:id/submit

Submits a calendar post into the approval workflow. Requires the calendar_approval_workflows plan feature.

If the workspace has disabled post approval (settings.require_approval: false), this endpoint is a no-op that returns 402 PAYMENT_REQUIRED-shaped error content explaining posts publish automatically without an approval step — it is not a bug, the workspace has opted out of the approval gate entirely.

Error Codes

StatusCause
403PAYMENT_REQUIRED-class error — plan does not include calendar_approval_workflows, or approval is disabled for the workspace
403User authentication required (not just an API key)
404Calendar post not found

Approve / Reject a Calendar Post

POST /v1/calendar/posts/:id/approve — requires ADMIN or OWNER role.

POST /v1/calendar/posts/:id/reject — requires ADMIN or OWNER role. Body: { "notes"?: string }.

curl -X POST https://api.voxburst.io/v1/calendar/posts/cmp6v6bhf000369v60htcu3vc/reject \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "notes": "Please shorten the caption" }'

Error Codes

StatusCause
403Caller lacks ADMIN/OWNER role, or lacks user authentication
404Calendar post not found

Publish a Calendar Post

POST /v1/calendar/posts/:id/publish — requires ADMIN or OWNER role.

Hands the calendar post off to VoxBurst’s publish pipeline.

curl -X POST https://api.voxburst.io/v1/calendar/posts/cmp6v6bhf000369v60htcu3vc/publish \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Sync Posts from Platforms

POST /v1/calendar/sync

For each active connected account in the workspace whose platform adapter supports fetching historical posts (currently Mastodon and TikTok), imports recently published posts into the calendar and marks previously-tracked posts as UNPUBLISHED if they’ve been removed from the platform.

curl -X POST https://api.voxburst.io/v1/calendar/sync \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Response

{ "data": { "added": 3, "removed": 1, "unchanged": 46, "platforms": ["MASTODON"], "postsPerPlatform": 50 } }

Fix Duplicate Platform Records

POST /v1/calendar/fix-duplicate-platforms

Maintenance endpoint that de-duplicates internal records created by a sync run that executed twice concurrently. Safe to call repeatedly — returns 0 removed if there is nothing to fix.

curl -X POST https://api.voxburst.io/v1/calendar/fix-duplicate-platforms \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"

Response

{ "data": { "removed": 2, "postPlatformRowsRemoved": 1, "duplicatePostsRemoved": 1 } }

Calendar Personas

See the legacy-status note at the top of this page. These endpoints operate on CalendarPersona, not the PersonaProfile model used by /v1/personas.

List Personas

GET /v1/calendar/personas — requires the calendar_personas plan feature.

Get a Persona

GET /v1/calendar/personas/:id — requires the calendar_personas plan feature.

Create a Persona

POST /v1/calendar/personas — requires ADMIN/OWNER role and the calendar_personas plan feature.

FieldTypeRequiredDescription
slugstringYesLowercase alphanumeric, hyphens/underscores only
displayNamestringYesDisplay name
runtimePromptstringNoPersona system prompt used for AI-assisted drafting
accountIdsstring[]NoSocial accounts this persona applies to

Update a Persona

PATCH /v1/calendar/personas/:id — requires ADMIN/OWNER role and the calendar_personas plan feature.

FieldTypeRequiredDescription
displayNamestringNoDisplay name
runtimePromptstring | nullNoPersona system prompt
isActivebooleanNoEnable/disable the persona

Error Codes (all persona endpoints)

StatusCause
403Plan does not include calendar_personas, or (write endpoints) caller lacks ADMIN/OWNER role
404Persona not found in the workspace
Last updated on