Skip to Content
SdksSDK ↔ REST mapping

SDK ↔ REST mapping

Quick-reference for switching between the TypeScript SDK, Go SDK, and raw REST calls. Covers every API resource.

Idempotency: All write operations (POST, PATCH, DELETE) accept an Idempotency-Key header. Pass a stable unique key per logical operation to safely retry on network failure without creating duplicates. See Idempotency for key format rules, behavior, and error codes.

OpenAPI spec: The machine-readable contract is available at https://api.voxburst.io/api/openapi.yaml (YAML) or https://api.voxburst.io/api/openapi.json (JSON). Use it with Postman, Insomnia, code generators, or type-safe HTTP clients.


Posts

RESTTypeScript SDKGo SDK
POST /v1/postsclient.posts.create(params)client.Posts.Create(ctx, params)
GET /v1/postsclient.posts.list(params)client.Posts.List(ctx, params)
GET /v1/posts (all pages)client.posts.listAll(params)client.Posts.ListAll(ctx, params)
GET /v1/posts/:idclient.posts.get(id)client.Posts.Get(ctx, id)
PATCH /v1/posts/:idclient.posts.update(id, params)client.Posts.Update(ctx, id, params)
DELETE /v1/posts/:idclient.posts.delete(id)client.Posts.Delete(ctx, id)
POST /v1/posts/:id/publishclient.posts.publish(id)client.Posts.Publish(ctx, id)
POST /v1/posts/:id/retryclient.posts.retry(id)client.Posts.Retry(ctx, id)
POST /v1/posts/:id/cancelclient.posts.cancel(id)client.Posts.Cancel(ctx, id)
POST /v1/posts/:id/cloneclient.posts.clone(id)client.Posts.Clone(ctx, id)
POST /v1/posts/:id/platforms/:pid/fixclient.posts.fixPlatform(id, pid, params)client.Posts.FixPlatform(ctx, id, pid, params)
POST /v1/posts/validateclient.posts.validate(params)client.Posts.Validate(ctx, params)
POST /v1/posts/bulkclient.batch.createPosts(posts)client.Batch.CreatePosts(ctx, posts)

Accounts

RESTTypeScript SDKGo SDK
GET /v1/accountsclient.accounts.list()client.Accounts.List(ctx, params)
GET /v1/accounts/:idclient.accounts.get(id)client.Accounts.Get(ctx, id)
POST /v1/accounts/connect/:platformclient.accounts.initiateConnect(platform, callbackUrl)client.Accounts.InitiateConnect(ctx, platform, callbackUrl)
POST /v1/accounts/callback/:platformclient.accounts.completeConnect(platform, code, state)client.Accounts.CompleteConnect(ctx, platform, params)
DELETE /v1/accounts/:idclient.accounts.delete(id)client.Accounts.Delete(ctx, id)
POST /v1/accounts/:id/refreshclient.accounts.refresh(id)client.Accounts.Refresh(ctx, id)
POST /v1/accounts/:id/testclient.accounts.test(id)client.Accounts.Test(ctx, id)

Media

RESTTypeScript SDKGo SDK
POST /v1/media/uploadREST only — use raw fetch/requests for the S3 PUT stepclient.Media.RequestUploadURL(ctx, params)
GET /v1/media/:idREST onlyclient.Media.Get(ctx, id)
GET /v1/mediaREST onlyclient.Media.List(ctx, params)
DELETE /v1/media/:idREST onlyclient.Media.Delete(ctx, id)
POST /v1/media/registerREST onlyREST only

Webhooks

RESTTypeScript SDKGo SDK
GET /v1/webhooksclient.webhooks.list()client.Webhooks.List(ctx)
POST /v1/webhooksclient.webhooks.create(params)client.Webhooks.Create(ctx, params)
GET /v1/webhooks/:idclient.webhooks.get(id)client.Webhooks.Get(ctx, id)
PATCH /v1/webhooks/:idclient.webhooks.update(id, params)client.Webhooks.Update(ctx, id, params)
DELETE /v1/webhooks/:idclient.webhooks.delete(id)client.Webhooks.Delete(ctx, id)
POST /v1/webhooks/testclient.webhooks.test(id)client.Webhooks.Test(ctx, id)

Analytics

All analytics endpoints are REST-only — the TypeScript SDK and Go SDK do not wrap analytics routes. Use raw fetch (TypeScript) or http.Get (Go) with your API key header.

RESTTypeScript SDKGo SDK
GET /v1/analytics/posts/:idREST onlyREST only
GET /v1/analytics/posts/:id/refreshREST onlyREST only
GET /v1/analytics/accounts/:idREST onlyREST only
POST /v1/analytics/accounts/:id/refreshREST onlyREST only
GET /v1/analytics/aggregateREST onlyREST only
GET /v1/analytics/overviewREST onlyREST only
GET /v1/analytics/timeseriesREST onlyREST only
GET /v1/analytics/account-timeseriesREST onlyREST only
GET /v1/analytics/posting-heatmapREST onlyREST only
GET /v1/analytics/audience-growthREST onlyREST only
GET /v1/analytics/content-decayREST onlyREST only
GET /v1/analytics/hashtag-performanceREST onlyREST only
GET /v1/analytics/content-typesREST onlyREST only
GET /v1/analytics/insightsREST onlyREST only
GET /v1/analytics/publishing-calendarREST onlyREST only
GET /v1/analytics/content-themesREST onlyREST only
GET /v1/analytics/goalsREST onlyREST only
POST /v1/analytics/goalsREST onlyREST only
GET /v1/analytics/report-scheduleREST onlyREST only
POST /v1/analytics/report-scheduleREST onlyREST only
POST /v1/analytics/send-reportREST onlyREST only

Batch

RESTTypeScript SDKGo SDK
POST /v1/batch (generic)client.batch.execute(operations)client.Batch.Execute(ctx, operations)
POST /v1/posts/bulk (create posts)client.batch.createPosts(posts)client.Batch.CreatePosts(ctx, posts)
GET /v1/batch/limitsREST onlyREST only
POST /v1/batch/asyncREST onlyREST only
GET /v1/batch/async/:jobIdREST onlyREST only
GET /v1/batch/asyncREST onlyREST only

Personas

RESTTypeScript SDKGo SDK
GET /v1/personasREST onlyREST only
GET /v1/personas/:idREST onlyREST only
POST /v1/personasREST onlyREST only
PATCH /v1/personas/:idREST onlyREST only
DELETE /v1/personas/:idREST onlyREST only
POST /v1/personas/:id/defaultREST onlyREST only
POST /v1/personas/:id/duplicateREST onlyREST only
POST /v1/personas/:id/modulesREST onlyREST only
GET /v1/personas/:id/accountsREST onlyREST only
POST /v1/personas/:id/exportREST onlyREST only
POST /v1/personas/importREST onlyREST only

Hashtag Sets

RESTTypeScript SDKGo SDK
GET /v1/hashtag-setsREST onlyREST only
GET /v1/hashtag-sets/:idREST onlyREST only
POST /v1/hashtag-setsREST onlyREST only
PATCH /v1/hashtag-sets/:idREST onlyREST only
DELETE /v1/hashtag-sets/:idREST onlyREST only

Contacts

RESTTypeScript SDKGo SDK
GET /v1/contactsclient.contacts.list(params)REST only
GET /v1/contacts/:idclient.contacts.get(id)REST only
POST /v1/contactsclient.contacts.create(params)REST only
PATCH /v1/contacts/:idclient.contacts.update(id, params)REST only
DELETE /v1/contacts/:idclient.contacts.delete(id)REST only
POST /v1/contacts/:id/tagsREST onlyREST only
DELETE /v1/contacts/:id/tags/:tagREST onlyREST only

Broadcasts

RESTTypeScript SDKGo SDK
GET /v1/broadcastsclient.broadcasts.list(params)REST only
GET /v1/broadcasts/:idclient.broadcasts.get(id)REST only
POST /v1/broadcastsclient.broadcasts.create(params)REST only
PATCH /v1/broadcasts/:idclient.broadcasts.update(id, params)REST only
POST /v1/broadcasts/:id/sendclient.broadcasts.send(id)REST only
GET /v1/broadcasts/:id/deliveriesREST onlyREST only
DELETE /v1/broadcasts/:idclient.broadcasts.delete(id)REST only

Sequences

RESTTypeScript SDKGo SDK
GET /v1/sequencesclient.sequences.list(params)REST only
GET /v1/sequences/:idclient.sequences.get(id)REST only
POST /v1/sequencesclient.sequences.create(params)REST only
PATCH /v1/sequences/:idclient.sequences.update(id, params)REST only
DELETE /v1/sequences/:idclient.sequences.delete(id)REST only
GET /v1/sequences/:id/stepsREST onlyREST only
POST /v1/sequences/:id/stepsREST onlyREST only
PATCH /v1/sequences/:id/steps/:stepIdREST onlyREST only
DELETE /v1/sequences/:id/steps/:stepIdREST onlyREST only
GET /v1/sequences/:id/enrollmentsREST onlyREST only
POST /v1/sequences/:id/enrollmentsREST onlyREST only
DELETE /v1/sequences/:id/enrollments/:contactIdREST onlyREST only

Approval Workflows

RESTTypeScript SDKGo SDK
GET /v1/approval-workflowsREST onlyREST only
POST /v1/approval-workflowsREST onlyREST only
PATCH /v1/approval-workflows/:idREST onlyREST only
POST /v1/posts/:id/approvalREST onlyREST only
GET /v1/posts/:id/approvalREST onlyREST only
POST /v1/posts/:id/approval/approveREST onlyREST only
POST /v1/posts/:id/approval/rejectREST onlyREST only

Image Generation Jobs

RESTTypeScript SDKGo SDK
POST /v1/image-jobsREST onlyREST only
GET /v1/image-jobs/:idREST onlyREST only
GET /v1/image-jobsREST onlyREST only
DELETE /v1/image-jobs/:idREST onlyREST only
POST /v1/image-jobs/:id/retry-itemREST onlyREST only

Error class mapping

TypeScript SDK

ClassHTTP statusAPI error code
AuthenticationError401UNAUTHORIZED
ValidationError400 / 422VALIDATION_ERROR
NotFoundError404NOT_FOUND
RateLimitError429RATE_LIMITED — includes .retryAfter seconds
ConflictError409CONFLICT / IDEMPOTENCY_CONFLICT
VoxBurstErrorall othersbase class — check .status and .code
import { NotFoundError, RateLimitError, ValidationError, VoxBurstError } from '@voxburst/sdk'

Go SDK

HelperHTTP statusWhen to use
voxburst.IsNotFound(err)404Resource does not exist
voxburst.IsUnauthorized(err)401Invalid or expired API key
voxburst.IsRateLimited(err)429Too many requests
voxburst.IsServerError(err)5xxTransient server error — retry
import "github.com/FortheanLabsProjects/voxburst-go/voxburst"

SDK-only conveniences

These features are provided by the SDKs and have no direct REST equivalent:

FeatureTypeScriptGoNotes
Auto-paginationclient.posts.listAll()client.Posts.ListAll()Iterates all cursor pages automatically
Automatic retry on 429✅ (maxRetries option)✅ (built-in)Respects Retry-After header
Automatic retry on 5xxExponential backoff
Typed request/response shapesAll fields are typed
Typed error classes✅ (helpers)Branch on error type, not status code
AbortSignal / context support✅ (context.Context)Cancel in-flight requests
Response streamingUse raw HTTP for streaming use cases

Using the REST API directly alongside an SDK

The SDKs and raw REST calls are fully interoperable — they share the same base URL, auth scheme, and resource IDs. A common pattern is to use the SDK for most operations and raw HTTP for the S3 upload step (which goes directly to S3, not through the VoxBurst API):

// SDK: request the upload URL const { mediaId, uploadUrl, uploadHeaders } = await fetch('https://api.voxburst.io/v1/media/upload', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ filename: 'photo.jpg', contentType: 'image/jpeg', sizeBytes: 204800 }), }).then(r => r.json()) // Raw HTTP: PUT bytes directly to S3 (SDK cannot do this step) await fetch(uploadUrl, { method: 'PUT', headers: uploadHeaders, body: fileBytes }) // SDK: use the mediaId in a post const post = await client.posts.create({ content: '...', accountIds: ['acc_123'], media: [mediaId] })
Last updated on