Skip to the page

API reference

List Text Hooks

Your Text Hooks, newest first.

GET/v1/hooks

Your Text Hooks, newest first.

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

Query parameters

  • 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

curl "https://usebluebot.com/api/v1/hooks" \
  -H "Authorization: Bearer $BLUEBOT_API_KEY"

Response

200: A page of Text Hooks.

  • object"list"required
  • dataarray of TextHookrequired
    Show its 11 fields
    • idstringrequired

      A hook_ id.

      Starts with hook_.

    • object"text_hook"required
    • namestringrequired
    • urlstringrequired

      The address to post to. Anyone with it can send texts from your number, so keep it private.

    • enabledbooleanrequired
    • test_modebooleanrequired

      Posts are recorded and checked but no text is sent.

    • mappingobjectrequired

      How a post becomes a text. Each value is a template over the posted fields: body for the JSON or form, query for the address’s query string.

      Show its 5 fields
      • tostring or nullrequired

        Who to text, as a {{body.…}} path into the posted fields.

        Up to 200 characters.

      • textstring or nullrequired

        The words, with {{body.…}} fields. Leave it empty to use template_id.

        Up to 2,000 characters.

      • first_namestring or nullrequired

        Saved on the contact when it has no first name yet.

        Up to 200 characters.

      • last_namestring or nullrequired

        Up to 200 characters.

      • tagsstring or nullrequired

        Tags to add, separated by commas. May use {{body.…}} fields.

        Up to 200 characters.

    • template_idstring or nullrequired
    • sequence_idstring or nullrequired

      A sequence each person is added to.

      Starts with seq_.

    • last_used_attimestamp or nullrequired

      When it last received a post.

    • 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": "hook_1Hq2LxW9cVbN3mKpRtYs0a",
      "object": "text_hook",
      "name": "Calendly bookings",
      "url": "https://usebluebot.com/h/th_8Rk2mQ4zN7wX1cVbL5pT9yHsQ2aVc0Ld",
      "enabled": true,
      "test_mode": false,
      "mapping": {
        "to": "{{body.payload.questions_and_answers.0.answer}}",
        "text": "Hi {{body.payload.name}}, you’re booked for {{body.payload.scheduled_event.start_time}}. Text back if anything changes.",
        "first_name": "{{body.payload.first_name}}",
        "last_name": "{{body.payload.last_name}}",
        "tags": "calendly"
      },
      "template_id": null,
      "sequence_id": null,
      "last_used_at": "2026-11-13T18:02:00.000Z",
      "created_at": "2026-11-03T16:00: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.