buzzabout docs
API reference

API overview

REST surface map — base URL, response envelope, error model, pagination, and account scoping.

The Buzzabout REST API is a thin layer over the same primitives the web app uses. Everything you can do in the product, you can do through this API.

Beta

The API is stable for datasets, mentions, audience_datasets, and audience_profiles. Newer endpoints may change. We'll bump the URL prefix from /v1 to /v2 before any breaking change.

Base URL

https://api.buzzabout.ai

All endpoints live under /v1. Examples in these docs use absolute URLs so they're easy to copy.

Authentication

Every request needs an x-api-key header:

x-api-key: bz_live_...

See authentication for key lifecycle, OAuth, and headless MCP.

Content type

JSON in, JSON out. Send Content-Type: application/json on any request that has a body.

Response envelope

Every response is wrapped in a discriminated envelope. The top-level status field tells you which shape you got:

success — single resource
{
  "status": "success",
  "data": { "...": "..." }
}
success — paginated list
{
  "status": "success",
  "data": [ { "...": "..." }, { "...": "..." } ],
  "has_next": true,
  "cursor": "eyJjcmVhdGVkX2F0IjogMTcxNDU2NDg5MCwgImlkIjogImRzXzAxSCJ9"
}
error
{
  "status": "client_error",
  "error_code": "dataset_not_found",
  "detail": "Dataset not found",
  "transient": false
}

status collapses the HTTP status class:

HTTP classstatus
1xxinfo
2xxsuccess
3xxredirect
4xxclient_error
5xxserver_error

Successful 2xx responses always carry a data field. Error responses carry error_code, detail, and transient (when true, retrying the same request later may succeed).

A 204 No Content (used for DELETE /v1/datasets/{id} and DELETE /v1/audience_datasets/{id}) returns an empty body.

Pagination

List endpoints use cursor-based pagination. Pass limit and cursor:

ParameterTypeDefaultNotes
limitinteger10 for resources, 20 for mentions / profiles1–100.
cursorstringnullOpaque base64url. From cursor in a previous response.
orderenumdescasc or desc (where supported).

The response includes has_next: bool and cursor: string \| null. When has_next is false, the cursor is null and the page is the last one.

Cursors are sort-aware on mentions / audience_profiles. If you change the sort field between calls, request a fresh page (don't pass the old cursor — it'll fail validation).

Errors

HTTPerror_code examplesWhat it means
400bad_request, source_dataset_has_no_completed_runBad request semantics or insufficient state.
401unauthorizedMissing or invalid x-api-key.
402insufficient_credits_dataset_runAccount has no credits left for this operation.
404dataset_not_found, audience_dataset_not_foundResource doesn't exist or isn't owned by the key.
409audience_dataset_run_already_in_flightA pending / working run blocks a new one.
422unprocessable_entity, invalid_scraping_target_urlBody or query parameters are malformed.
429too_many_requestsSee rate limits.
5xxinternal_server_errorSomething on our end. Reachable by transient: true.

The error_code is stable — match on it, not on the human-readable detail.

Account scoping

Every API key is tied to one account. All read and write paths are scoped to that account:

  • Resources you create (datasets, audience datasets) belong to your account; nobody else can see or modify them.
  • Resource ids on inputs (e.g. dataset_ids, audience_dataset_ids, source_dataset_id) must reference resources you own — otherwise the endpoint returns a 404 instead of a 403 (existence is hidden).
  • The global mentions and audience-profiles endpoints implicitly scope to your account; passing dataset_ids / audience_dataset_ids is optional and only narrows further.

Endpoint groups

On this page