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.aiAll 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:
{
"status": "success",
"data": { "...": "..." }
}{
"status": "success",
"data": [ { "...": "..." }, { "...": "..." } ],
"has_next": true,
"cursor": "eyJjcmVhdGVkX2F0IjogMTcxNDU2NDg5MCwgImlkIjogImRzXzAxSCJ9"
}{
"status": "client_error",
"error_code": "dataset_not_found",
"detail": "Dataset not found",
"transient": false
}status collapses the HTTP status class:
| HTTP class | status |
|---|---|
| 1xx | info |
| 2xx | success |
| 3xx | redirect |
| 4xx | client_error |
| 5xx | server_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:
| Parameter | Type | Default | Notes |
|---|---|---|---|
limit | integer | 10 for resources, 20 for mentions / profiles | 1–100. |
cursor | string | null | Opaque base64url. From cursor in a previous response. |
order | enum | desc | asc 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
| HTTP | error_code examples | What it means |
|---|---|---|
| 400 | bad_request, source_dataset_has_no_completed_run | Bad request semantics or insufficient state. |
| 401 | unauthorized | Missing or invalid x-api-key. |
| 402 | insufficient_credits_dataset_run | Account has no credits left for this operation. |
| 404 | dataset_not_found, audience_dataset_not_found | Resource doesn't exist or isn't owned by the key. |
| 409 | audience_dataset_run_already_in_flight | A pending / working run blocks a new one. |
| 422 | unprocessable_entity, invalid_scraping_target_url | Body or query parameters are malformed. |
| 429 | too_many_requests | See rate limits. |
| 5xx | internal_server_error | Something 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 a404instead of a403(existence is hidden). - The global mentions and audience-profiles endpoints implicitly scope
to your account; passing
dataset_ids/audience_dataset_idsis optional and only narrows further.
Endpoint groups
Datasets
Container CRUD plus runs — create, list, retrieve, update, delete, and trigger / poll runs.
Audience datasets
Same shape as datasets, scoped to creator / commenter profile collection.
Mentions
POST /v1/mentions — global, filterable, paginated.
Audience profiles
POST /v1/audience_profiles — global, filterable, paginated.