buzzabout docs
API referenceEndpoints

Ask (assistant)

POST /v1/ask — hand a prompt to the buzzabout assistant, get markdown back plus typed references.

POST /v1/ask hands a message to the buzzabout assistant. Optionally continue an existing chat via chat_id and scope the turn to specific datasets — the assistant returns markdown with inline post citations plus a typed list of references. Already wired buzzabout into Claude / Cursor / ChatGPT? You get the same surface through MCP — see Use in your agent.

Pricing

Free — asking the assistant does not consume credits. See Pricing.

Endpoint

POST
/v1/ask

Authorization

ApiKeyAuth
x-api-key<token>

Buzzabout API key, beginning with bz_live_ (or bz_test_ for staging-only keys).

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/ask" \  -H "Content-Type: application/json" \  -d '{    "context": {      "dataset_ids": [        "ds_abc123"      ],      "post_refs": [        {          "id": "t3_1oqliu8",          "source": "reddit"        }      ]    },    "message": "Summarize the top three signals from these datasets in one paragraph."  }'
{
  "status": "info",
  "data": {
    "chat_id": "ch_2NK4Y3JxhJ8r9c0Y1u5lkjm9Wb1",
    "message_id": "msg_2NK4ZG2BqkAxK1nT0RZyZbBmZHN",
    "status": "working"
  }
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}
{
  "status": "info",
  "error_code": "ai_assistant_unavailable",
  "detail": "string",
  "transient": true
}
{
  "status": "info",
  "error_code": "ai_assistant_timeout",
  "detail": "string",
  "transient": true
}

Response shape

The response carries:

  • text — markdown body, including inline post citations as [label](post:source:id) links (see Reference types).
  • references[] — a flat list of typed pointers ({ type, id }) into buzzabout resources (patterns, datasets, research previews, pattern-detection runs, etc.).
  • chat_id + message_id — the assistant chose a chat for this turn. Pass chat_id back on the next call to continue the same conversation.

The output is always markdown. The endpoint enforces output_format=markdown on the assistant — public clients cannot request openui or other in-app block formats.

Continuing a conversation

import httpx

client = httpx.Client(
    base_url="https://api.buzzabout.ai",
    headers={"x-api-key": "bz_live_abcdef1234567890abcdef1234567890"},
)

# First turn
turn1 = client.post(
    "/v1/ask",
    json={"message": "Find the top hooks for cold brew posts"},
).raise_for_status().json()["data"]
chat_id = turn1["chat_id"]

# Second turn — continues the same chat
turn2 = client.post(
    "/v1/ask",
    json={
        "message": "Now compare the top hooks on Reddit vs TikTok",
        "chat_id": chat_id,
    },
).raise_for_status().json()["data"]

Both turns are asynchronous — the response carries a message_id you poll via GET /v1/chats/{chat_id}/messages/{message_id} until status transitions to completed.

Scoping with context

The optional context field accepts:

  • dataset_ids — list of dataset ids the assistant should treat as in-scope for the turn. When omitted, the assistant may consult any dataset visible to the account.
  • post_refs — up to 50 specific posts to pin into the assistant's working context (each { id, source } — see the schema above).

Filters and other narrowing (sentiment-only, date windows, etc.) live inside the message text — the assistant reads them naturally. There is no structured filter field.

Reading the history

Once you have a chat_id, use GET /v1/chats/{id}/messages to page through the full transcript (user + assistant turns, ascending by created_at).

Next steps

  • Chats — read message history and chat metadata.
  • Reference types — how references[] and the post:source:id markdown scheme resolve.
  • Use in your agent — same surface via MCP for Claude / Cursor / ChatGPT users.

On this page