OpenAPI Spec
The VoxBurst API is fully described by an OpenAPI 3.1 spec. Use it to generate typed clients, validate requests, power IDE autocompletion, or import into API testing tools.
https://api.voxburst.io/api/openapi.yaml # YAML
https://api.voxburst.io/api/openapi.json # JSONThe spec reflects the live API. See Versioning & Compatibility for the guarantee: the API source code is ground truth, the spec is kept in sync with the implementation, and breaking changes are announced 30 days in advance.
Download
# Fetch YAML
curl -o voxburst.yaml https://api.voxburst.io/api/openapi.yaml
# Fetch JSON
curl -o voxburst.json https://api.voxburst.io/api/openapi.jsonGenerate a TypeScript client
openapi-typescript generates zero-runtime types directly from the spec. Pair it with openapi-fetch for a fully type-safe HTTP client.
npm install -D openapi-typescript openapi-fetch
npx openapi-typescript https://api.voxburst.io/api/openapi.yaml -o voxburst.d.tsThe generated types for the Post schema look like this:
// voxburst.d.ts (excerpt — generated from spec)
export interface components {
schemas: {
Post: {
id: string // cuid2, e.g. "post_abc123"
content: string
contentType: 'TEXT' | 'IMAGE' | 'VIDEO' | 'CAROUSEL' | 'STORY' | 'REEL' | 'THREAD' | null
status: 'draft' | 'scheduled' | 'publishing' | 'published' | 'partial' | 'failed' | 'cancelled' | 'unpublished'
scheduledFor: string | null // ISO 8601 UTC
publishedAt: string | null
firstComment: string | null
firstCommentDelay: number | null
tags: string[]
metadata: Record<string, unknown> | null
media: components['schemas']['MediaObject'][]
platforms: components['schemas']['PlatformResult'][]
threadPosts: components['schemas']['ThreadItem'][]
personaId: string | null
createdAt: string
updatedAt: string
}
CreatePostInput: {
content: string
accountIds: string[] // required — platform inferred from account
contentType?: 'TEXT' | 'IMAGE' | 'VIDEO' | 'CAROUSEL' | 'STORY' | 'REEL' | 'THREAD'
media?: string[]
scheduledFor?: string
saveAsDraft?: boolean
queue?: boolean
firstComment?: string
firstCommentDelay?: number
platformOverrides?: Record<string, { content?: string; media?: string[] }>
tags?: string[]
metadata?: Record<string, unknown>
personaId?: string
threadPosts?: components['schemas']['ThreadItem'][]
}
PlatformResult: {
postPlatformId: string
platform: string
accountId: string
accountName: string | null
status: 'pending' | 'publishing' | 'published' | 'failed' | 'skipped'
platformPostId: string | null
platformPostUrl: string | null
publishedAt: string | null
error: { code: string; message: string } | null
}
}
}Use with openapi-fetch for end-to-end type safety:
import createClient from 'openapi-fetch'
import type { paths } from './voxburst.d.ts'
const client = createClient<paths>({
baseUrl: 'https://api.voxburst.io/v1',
headers: { Authorization: `Bearer ${process.env.VOXBURST_API_KEY}` },
})
// Fully typed — IDE autocompletes fields, flags unknown keys at compile time
const { data, error } = await client.POST('/posts', {
body: {
content: 'Hello from a generated client!',
accountIds: ['acc_abc123'],
scheduledFor: '2026-07-01T15:00:00Z',
},
})Generate a Python client
openapi-generator-cli produces a full Python package with typed models and a requests-based client.
npx @openapitools/openapi-generator-cli generate \
-i https://api.voxburst.io/api/openapi.yaml \
-g python \
-o ./voxburst-client \
--additional-properties=packageName=voxburst_client,projectName=voxburst-clientGenerated client usage:
import voxburst_client
from voxburst_client.api.posts_api import PostsApi
from voxburst_client.model.create_post_input import CreatePostInput
configuration = voxburst_client.Configuration(
host="https://api.voxburst.io/v1",
access_token=os.environ["VOXBURST_API_KEY"],
)
with voxburst_client.ApiClient(configuration) as api_client:
api = PostsApi(api_client)
post = api.create_post(CreatePostInput(
content="Hello from the generated Python client!",
account_ids=["acc_abc123"],
scheduled_for="2026-07-01T15:00:00Z",
))
print(f"Created: {post.id}")Validate requests with Zod
openapi-zod-client generates Zod schemas directly from the spec — useful for validating request bodies before sending them to the API.
npx openapi-zod-client https://api.voxburst.io/api/openapi.yaml \
-o voxburst-schemas.tsThe generated schema for CreatePostInput matches the API contract exactly:
// voxburst-schemas.ts (excerpt — matches API contract)
import { z } from 'zod'
export const CreatePostInputSchema = z.object({
content: z.string().max(10_000),
accountIds: z.array(z.string()).min(1),
contentType: z.enum(['TEXT', 'IMAGE', 'VIDEO', 'CAROUSEL', 'STORY', 'REEL', 'THREAD']).optional(),
media: z.array(z.string()).optional(),
scheduledFor: z.string().datetime({ offset: true }).optional(),
saveAsDraft: z.boolean().optional(),
queue: z.boolean().optional(),
firstComment: z.string().max(2200).optional(),
firstCommentDelay: z.number().int().min(0).max(60).optional(),
platformOverrides: z.record(z.object({
content: z.string().optional(),
media: z.array(z.string()).optional(),
})).optional(),
tags: z.array(z.string()).optional(),
metadata: z.record(z.unknown()).optional(),
})
// Validate before sending
const result = CreatePostInputSchema.safeParse(inputFromUser)
if (!result.success) {
console.error('Invalid post input:', result.error.flatten())
}Postman & Insomnia
Postman
- Open Postman → Import
- Select Link and paste:
https://api.voxburst.io/api/openapi.yaml - Postman generates a collection with all endpoints pre-populated
- Set
{{baseUrl}}tohttps://api.voxburst.io/v1and{{apiKey}}to your key
Other tooling
| Tool | Command |
|---|---|
| Redocly (hosted docs) | npx @redocly/cli preview-docs https://api.voxburst.io/api/openapi.yaml |
Go client (oapi-codegen) | oapi-codegen -package voxburst -generate types,client voxburst.yaml > voxburst.gen.go |
| Mock server (Prism) | npx @stoplight/prism-cli mock https://api.voxburst.io/api/openapi.yaml |
| Spectral lint | npx @stoplight/spectral-cli lint https://api.voxburst.io/api/openapi.yaml |