Skip to the page

API reference

List broadcasts

Your broadcasts, newest first.

GET/v1/broadcasts

Your broadcasts, newest first.

Needs a key with the messages:read scope. Keys and scopes

Query parameters

  • statestring

    Only broadcasts in this state.

    One of draft, scheduled, sending, completed, canceled.

  • limitinteger

    How many to return, 1 to 100. Default 25.

    1 to 100.Default 25.

  • cursorstring

    The next_cursor of the page before. Leave it out for the first page.

    Up to 200 characters.

Example

GET/v1/broadcastsList broadcasts →
curl "https://usebluebot.com/api/v1/broadcasts" \
  -H "Authorization: Bearer $BLUEBOT_API_KEY"

Response

200: A page of broadcasts.

  • object"list"required
  • dataarray of Broadcastrequired
    Show its 18 fields
    • idstringrequired

      A bc_ id.

      Starts with bc_.

    • object"broadcast"required
    • namestringrequired
    • textstring or nullrequired

      The words, with {{variables}}, as you wrote them. Each person’s filled-in text is on their message. Null once they’re deleted, 30 days after the broadcast finished.

    • text_deletedbooleanrequired

      True once the words, and the values each person’s list row brought, were deleted 30 days after the broadcast finished.

    • template_idstring or nullrequired

      The template the words came from, when one did.

    • audienceanyrequired

      Who the broadcast goes to.

    • servicestringrequired

      One of auto, imessage, sms.

    • statestringrequired

      draft, scheduled (waiting for send_at), sending, completed or canceled.

      One of draft, scheduled, sending, completed, canceled.

    • send_attimestamp or nullrequired

      When it starts, for a scheduled broadcast.

    • started_attimestamp or nullrequired

      When the first text was queued.

    • completed_attimestamp or nullrequired

      When every text had settled.

    • canceled_attimestamp or nullrequired

      When the rest was canceled.

    • recipient_countintegerrequired

      How many people it goes to, up to 500.

    • countsmap of integerrequired

      How many recipients are in each state: pending, queued, sent, delivered, read, failed, skipped and so on.

    • estimateBroadcastEstimate or nullrequired

      For a scheduled or sending broadcast, when the rest should go. Worked out on GET /v1/broadcasts/{id} and when it is made; null in lists.

      Show its 6 fields
      • first_attimestamp or nullrequired

        When the first text should go.

      • last_attimestamp or nullrequired

        When the last text should go, given your pace, quiet hours and daily limits.

      • daysintegerrequired

        How many days the sending spans in your time zone.

      • waits_forarray of stringsrequired

        Holds the texts will meet on the way: quiet_hours, daily_new_people_limit, platform_daily_limit.

      • blocked_bystring or nullrequired

        A hold with no end that stops the broadcast from going, such as plan_lapsed.

      • mac_onlinebooleanrequired

        Whether your Mac is online now. The estimate assumes it stays on.

    • created_viastringrequired

      One of dashboard, api, assistant, mcp, zapier, cli.

    • created_attimestamprequired

      When it was made.

  • has_morebooleanrequired

    Whether another page follows.

  • next_cursorstring or nullrequired

    Send as cursor for the next page; null on the last.

Response200
{
  "object": "list",
  "data": [
    {
      "id": "bc_1Hq2LxW9cVbN3mKpRtYs0a",
      "object": "broadcast",
      "name": "Open house Saturday",
      "text": "Hi {{first_name|there}}, open house at 412 Oak St this Saturday 1–4. Reply STOP to opt out.",
      "text_deleted": false,
      "template_id": null,
      "audience": {
        "kind": "tags",
        "tags": [
          "buyer"
        ]
      },
      "service": "auto",
      "state": "scheduled",
      "send_at": "2026-11-14T15:00:00.000Z",
      "started_at": null,
      "completed_at": null,
      "canceled_at": null,
      "recipient_count": 42,
      "counts": {
        "pending": 41,
        "skipped": 1
      },
      "estimate": null,
      "created_via": "api",
      "created_at": "2026-11-13T19:41:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

Every refusal has the same envelope and a page of its own. These are the ones this operation can give.

CodeStatusWhat it means
unauthorized401The request carried no key, or a key BlueBot doesn’t know: mistyped, revoked, or a test key sent to the live API.
insufficient_scope403The key doesn’t carry the scope the endpoint needs. Each endpoint’s reference names its scope.
rate_limited429Too many requests. A key may make 120 requests a minute. The RateLimit header says how many are left, and Retry-After how long to wait.
internal500Something went wrong on BlueBot’s side. It was reported. Send the request again; with an Idempotency-Key that is always safe.
invalid_request400Something in the request doesn’t fit: a missing or malformed field, a bad id, or a combination the endpoint refuses. details names each field.

Try it

Call this operation from the page with your own key. The key stays in this tab and is forgotten when you leave.