Skip to the page

API reference

List keyword rules

Your keyword rules, in the order they are tried.

GET/v1/automations/rules

Your keyword rules, in the order they are tried. The first rule that matches a text wins.

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

GET/v1/automations/rulesList keyword rules →
curl "https://usebluebot.com/api/v1/automations/rules" \
  -H "Authorization: Bearer $BLUEBOT_API_KEY"

Response

200: A page of rules.

  • object"list"required
  • dataarray of KeywordRulerequired
    Show its 13 fields
    • idstringrequired

      A kw_ id.

      Starts with kw_.

    • object"keyword_rule"required
    • namestringrequired
    • matchstringrequired

      exact (the whole text), starts_with, word (a whole word anywhere), contains, or regex.

      One of exact, starts_with, word, contains, regex.

    • keywordsarray of stringsrequired
    • patternstring or nullrequired

      For regex.

    • case_sensitivebooleanrequired
    • actionsarray of anyrequired
    • positionintegerrequired

      Rules are tried from the lowest position up; the first match wins.

    • enabledbooleanrequired
    • fire_countintegerrequired

      How many texts it answered.

    • last_fired_attimestamp or nullrequired

      When it last matched.

    • 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": "kw_1Hq2LxW9cVbN3mKpRtYs0a",
      "object": "keyword_rule",
      "name": "Pricing",
      "match": "word",
      "keywords": [
        "price",
        "pricing",
        "cost"
      ],
      "pattern": null,
      "case_sensitive": false,
      "actions": [
        {
          "type": "reply",
          "text": "Our plans start at $29 a month. Want me to send the details?",
          "template_id": null
        },
        {
          "type": "tag",
          "tags": [
            "asked-pricing"
          ]
        }
      ],
      "position": 10,
      "enabled": true,
      "fire_count": 18,
      "last_fired_at": "2026-11-13T17:20:00.000Z",
      "created_at": "2026-11-02T15: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.