Getting Started
Build social media integrations in minutes. This guide walks you through your first API calls.
Quick Start
Get Your API Key
Sign in to your VoxBurst dashboard and create an API key with the scopes you need:
| Scope | Description |
|---|---|
posts:read | Read posts |
posts:write | Create, update, delete, publish posts |
accounts:read | List connected social accounts |
accounts:write | Connect and disconnect accounts |
media:read | View uploaded media |
media:write | Upload media files |
webhooks:read | View webhook configurations |
webhooks:write | Create and manage webhooks |
personas:write | Create, update, and manage personas |
billing:write | Preview plan changes, change plans, manage add-ons, and purchase credits |
hashtag-sets:write | Create, update, and delete hashtag sets |
Make Your First Request
curl https://api.voxburst.io/v1/accounts \
-H "Authorization: Bearer vb_live_your_api_key_here"Or use the CLI for quick one-off commands:
npm install -g @voxburst/cli
voxburst accounts listEnvironment Setup
Set these environment variables in your project:
VOXBURST_API_KEY=vb_live_xxxxxxxxxxxxx
VOXBURST_API_URL=https://api.voxburst.io/v1 # optional — defaults to production; matches CLI env varFirst API Call Examples
List Connected Accounts
curl https://api.voxburst.io/v1/accounts \
-H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"Create a Draft Post
curl -X POST https://api.voxburst.io/v1/posts \
-H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"content": "Hello world from VoxBurst!",
"accountIds": ["acc_123"]
}'Instagram requires media. If acc_123 is an Instagram account, a text-only post will fail. See Posting to Instagram below for the complete flow.
platforms vs accountIds — Two different fields, two different endpoints:
POST /v1/postsusesaccountIds(an array of account IDs) to target where to post. The platform is inferred from each account.POST /v1/posts/validateusesplatforms(an array of platform constants like"TWITTER") to check content rules. It does not accept account IDs.
There is no platforms field on post creation or update. Always use accountIds to target accounts.
Schedule a Post
curl -X POST https://api.voxburst.io/v1/posts \
-H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"content": "Scheduled post! 📅",
"accountIds": ["acc_123", "acc_456"],
"scheduledFor": "2026-03-01T14:00:00Z"
}'Per-platform content (platformOverrides)
Use platformOverrides to customize content per platform. The platform is still inferred from accountIds — overrides only change what gets posted, not where:
{
"content": "Default content for all platforms",
"accountIds": ["acc_123", "acc_456"],
"platformOverrides": {
"TWITTER": {
"content": "Short version for Twitter! 🐦 #voxburst"
},
"LINKEDIN": {
"content": "A longer, more professional version for LinkedIn. This is where you can really expand on your message and include more context for your professional network."
}
}
}Publish Immediately
curl -X POST https://api.voxburst.io/v1/posts/{postId}/publish \
-H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"Platform Character Limits
VoxBurst validates content length before sending to each platform. The API returns a VALIDATION_ERROR if content exceeds platform limits.
| Platform | Max Text | Max Images | Video Length |
|---|---|---|---|
| Twitter/X | 280 chars | 4 | 2:20 min |
| 3,000 chars | 20 | 10 min | |
| 2,200 chars | 10 | 90 sec | |
| 63,206 chars | 10 | 4 hours | |
| Bluesky | 300 chars | 4 | 3 min |
| Threads | 500 chars | 10 | 5 min |
| YouTube | 5,000 chars | 0 | 12 hours |
| Mastodon | 500 chars | 4 | 5 min |
Error Handling
All errors return a consistent JSON format:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Content exceeds maximum length for Twitter (280 characters)",
"details": {
"field": "content",
"platform": "TWITTER",
"maxLength": 280,
"actualLength": 312
}
}
}| HTTP Status | Code | Description |
|---|---|---|
| 400 | VALIDATION_ERROR | Invalid request parameters |
| 401 | UNAUTHORIZED | Missing or invalid API key |
| 403 | FORBIDDEN | Insufficient permissions |
| 404 | NOT_FOUND | Resource not found |
| 429 | RATE_LIMITED | Too many requests |
| 500 | INTERNAL_ERROR | Server error |
Posting to Instagram
Instagram requires media on every post and a contentType to tell VoxBurst the format. The full flow is three steps: upload media, wait for it to be processed, then create the post.
Step 1 — Upload media and get a presigned URL
curl -X POST https://api.voxburst.io/v1/media/upload \
-H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"filename": "photo.jpg",
"contentType": "image/jpeg",
"sizeBytes": 204800
}'Response:
{
"mediaId": "media_abc1234567890abc12345678",
"uploadUrl": "https://s3.amazonaws.com/...",
"uploadHeaders": { "Content-Type": "image/jpeg" }
}Step 2 — PUT your file directly to S3
curl -X PUT "https://s3.amazonaws.com/..." \
-H "Content-Type: image/jpeg" \
--data-binary @photo.jpgStep 3 — Poll until status is READY
curl https://api.voxburst.io/v1/media/media_abc1234567890abc12345678 \
-H "Authorization: Bearer vb_live_xxxxxxxxxxxxx"Poll every 2–3 seconds until the response shows "status": "READY". Then create the post:
Step 4 — Create the Instagram post
curl -X POST https://api.voxburst.io/v1/posts \
-H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"content": "Check this out! 📸",
"accountIds": ["acc_instagram_123"],
"contentType": "IMAGE",
"media": ["media_abc1234567890abc12345678"],
"firstComment": "#photography #voxburst"
}'Use contentType: "CAROUSEL" for 2–10 images/videos, "REEL" for short-form video, or "VIDEO" for a standard feed video. Always set contentType when posting to Instagram — omitting it may cause the post to be rejected.
If you have a publicly hosted image and don’t want to upload it yourself, use POST /v1/media/register to reference it by URL — VoxBurst stores the reference without re-hosting the file.
Next Steps
- API Reference — Full endpoint documentation
- Authentication — API key scopes, rate limits, and idempotency
- Idempotency — Safely retry requests without duplicates; essential for agent workflows
- Versioning & Compatibility — Breaking change policy and what clients must handle
- MCP Server — Let AI assistants manage your workspace
- TypeScript SDK — Official SDK with full TypeScript support
- CLI — Post from your terminal
- OpenAPI spec — Machine-readable contract for Postman, code generators, and typed clients