Developers
RevBuddy API
Connect your station's systems to its promotion workspace. REST and MCP use the same operations, workspace permissions and plan allowances.
https://revbuddy.radioworkflow.com/api/v11. Create a key
2. Authenticate
Send the key as an Authorization bearer header or xi-api-key. Keep it on your server, out of URLs and source control. Use an environment variable in scripts. There is no OAuth flow.
curl 'https://revbuddy.radioworkflow.com/api/v1/kits' \
-H "Authorization: Bearer $REVBUDDY_API_KEY"For an assistant, use the MCP connection guide. Client generators can read the public OpenAPI 3.1 document without a key.
3. Try a request
Use the playground to send a read request with your workspace key and inspect the response.
Open the playgroundRequests and errors
The version is in the path, /api/v1. GET and DELETE arguments use path segments and query parameters. Other operations take JSON bodies. Responses are JSON unless an operation declares a file download. Collection operations publish their own pagination fields; use those to keep pages small.
A failure includes a stable status code and a readable message in detail. Keep the request-id response header when reporting a problem. Respect Retry-After on 429 responses. Do not repeatedly retry invalid credentials or insufficient scopes. Spending operations require an Idempotency-Key header of 8 to 128 letters, digits, dots, colons, underscores or hyphens. Reuse it only when retrying the same request. MCP exposes the same value as the idempotencyKey tool argument.
Shared rate limits allow 60 authorization checks per minute for a key and 300 per workspace. A REST request uses one check. An MCP tool call uses two, one for its transport request and one for operation execution, so one key can make up to 30 tool calls per minute before other traffic. Discovery and resource requests use one check. Activity counts include these checks.
{
"detail": {
"status": "insufficient_scope",
"message": "This API key does not carry the required scope."
}
}Scopes
Scopes are checked on every request. An empty scope list grants no operations that require a scope. Grant spending, publishing and destructive permissions deliberately.
- audience:read
- audio:read
- audio:render
- audio:write
- campaigns:read
- campaigns:write
- catalog:read
- goals:read
- goals:write
- kits:read
- kits:write
- leads:read
- links:read
- links:write
- stations:read
- stations:write
- workspace:read
Endpoint reference
Workspace
Catalog
Kits
- GETList kits
/api/v1/kits - GETGet a kit
/api/v1/kits/{slug} - POSTOpen a kit
/api/v1/kits/{slug} - PATCHChange kit state
/api/v1/kits/{slug}/state - PATCHSave kit deal
/api/v1/kits/{slug}/deal - PATCHSave sponsor rate card
/api/v1/kits/{slug}/rates - GETGet pipeline totals
/api/v1/pipeline - GETList market claims
/api/v1/claims - POSTClaim market exclusivity
/api/v1/claims/{slug} - DELRelease market exclusivity
/api/v1/claims/{slug}
Campaigns
- GETList campaigns
/api/v1/campaigns - GETGet a campaign
/api/v1/campaigns/{token} - POSTLaunch a campaign
/api/v1/campaigns - POSTClose a campaign
/api/v1/campaigns/{token}/close - GETGet campaign results
/api/v1/campaigns/{token}/results - GETList campaign sponsors
/api/v1/campaigns/{token}/sponsors - POSTAdd campaign sponsor
/api/v1/campaigns/{token}/sponsors
Leads
Audience
Stations
Links
Goals
Audio
- GETList approved audio previews
/api/v1/audio/{slug}/previews - GETDownload approved preview
/api/v1/audio/{slug}/previews/{position}/{length}/download - GETGet audio request status
/api/v1/audio/{slug}/request - POSTRequest studio audio
/api/v1/audio/{slug}/request - POSTRender a sponsor tag
/api/v1/audio/{slug}/tags/{stationId} - POSTCopy sponsor tag to stations
/api/v1/audio/{slug}/tags/{stationId}/copy - GETList finished spots
/api/v1/audio/{slug}/finished - POSTBuild finished spots
/api/v1/audio/{slug}/finished - GETDownload a finished spot
/api/v1/audio/{slug}/finished/{stationId}/{position}/{length}/download
Outside this API
- platform_studio: Master production, approval, publication, platform settings and staff management are global staff-only operations, not customer workspace capabilities.
- billing_and_team_mutations: Billing, purchases, team invitations, ownership transfer and authentication changes remain in their dedicated authorized account flows.
- newsletter_delivery: The current queueSend helper records a send but does not dispatch it; this API does not advertise delivery it cannot perform.
- audience_import_and_capture: Listener capture and imports have separate consent and attestation flows. API keys cannot manufacture listener consent, votes or prize claims.
- cross_workspace_syndication: The initial customer API is bounded to one workspace; cross-workspace audience and mutation semantics are not inferred from a shared owner.
- ai_drafts: The existing draft save path uses demo overlays. Persistent customer draft storage and atomic generation accounting must be implemented before exposing paid generation.
- advertiser_recaps: A combined advertiser recap is not available in this API release. Recap pages remain in the customer UI; integrations can use campaign results and scoped, paged consented leads.
- support_messages: Support messaging needs the signed-in customer's contact identity; a workspace key alone does not identify an email recipient.
- wav_and_zip_exports: This release downloads stored approved MP3s. On-demand WAV/ZIP generation remains in the customer UI and is not advertised as a stored API resource.