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.

The TypeScript SDK column reflects @voxburst/sdk v1.3.0. A cell reading “REST only” means that SDK has no wrapper for the endpoint — call it with raw fetch (TypeScript) or http (Go).

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/publishREST onlyclient.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/unpublishclient.posts.unpublish(id)REST only
POST /v1/posts/:id/cloneREST onlyclient.Posts.Clone(ctx, id)
POST /v1/posts/:id/platforms/:pid/fixREST onlyclient.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 (all pages)client.accounts.listAll(params)client.Accounts.ListAll(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/:platformREST onlyclient.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/select-pageclient.accounts.selectPage(id, pageId, options)REST only
POST /v1/accounts/:id/testREST onlyclient.Accounts.Test(ctx, id)

Media

RESTTypeScript SDKGo SDK
POST /v1/media/uploadclient.media.getUploadUrl(params) — the S3 PUT step is raw fetch in both SDKsclient.Media.RequestUploadURL(ctx, params)
GET /v1/media/:idclient.media.get(id)client.Media.Get(ctx, id)
GET /v1/mediaREST onlyclient.Media.List(ctx, params)
DELETE /v1/media/:idclient.media.delete(id)client.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/testREST onlyclient.Webhooks.Test(ctx, id)

Analytics

The TypeScript SDK wraps four analytics routes; the rest are REST-only, as are all analytics routes in the Go SDK. Use raw fetch (TypeScript) or http.Get (Go) with your API key header for anything not listed as an SDK method below.

RESTTypeScript SDKGo SDK
GET /v1/analytics/postsclient.analytics.listPostAnalytics(params)REST only
GET /v1/analytics/posts/:idclient.analytics.getPostAnalytics(postId, params)REST only
GET /v1/analytics/posts/:id/refreshREST onlyREST only
GET /v1/analytics/accounts/:idclient.analytics.getAccountAnalytics(accountId, params)REST only
POST /v1/analytics/accounts/:id/refreshREST onlyREST only
GET /v1/analytics/aggregateREST onlyREST only
GET /v1/analytics/overviewclient.analytics.getOverview(params)REST 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/tagsclient.contacts.addTag(id, tag)REST only
DELETE /v1/contacts/:id/tags/:tagclient.contacts.removeTag(id, tag)REST 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/deliveriesclient.broadcasts.listDeliveries(id, params)REST 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/stepsclient.sequences.listSteps(id)REST only
POST /v1/sequences/:id/stepsclient.sequences.addStep(id, params)REST only
PATCH /v1/sequences/:id/steps/:stepIdclient.sequences.updateStep(id, stepId, params)REST only
DELETE /v1/sequences/:id/steps/:stepIdclient.sequences.deleteStep(id, stepId)REST only
GET /v1/sequences/:id/enrollmentsclient.sequences.listEnrollments(id, params)REST only
POST /v1/sequences/:id/enrollmentsclient.sequences.enroll(id, contactId, platform)REST only
DELETE /v1/sequences/:id/enrollments/:enrollIdclient.sequences.exitEnrollment(id, enrollId)REST 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/fortheanprojects/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