Skip to the page

API reference

Change a keyword rule

Changes what it matches, what it does, its position, or turns it off.

PATCH/v1/automations/rules/{id}

Changes what it matches, what it does, its position, or turns it off.

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

Path parameters

  • idstringrequired

    The rule’s id.

    Starts with kw_.

Request body

  • namestring

    Up to 80 characters.

  • matchstring

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

  • keywordsarray of strings

    Up to 20 items.

  • patternstring or null

    Up to 500 characters.

  • case_sensitiveboolean
  • actionsarray of any

    Up to 5 items.

  • enabledboolean
  • positioninteger

    0 to 10,000.

Example

PATCH/v1/automations/rules/kw_1Hq2LxW9cVbN3mKpRtYs0aChange a keyword rule →
curl -X PATCH "https://usebluebot.com/api/v1/automations/rules/kw_1Hq2LxW9cVbN3mKpRtYs0a" \
  -H "Authorization: Bearer $BLUEBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": false
  }'

Response

200: The changed rule.

  • 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.

Response200
{
  "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": false,
  "fire_count": 18,
  "last_fired_at": "2026-11-13T17:20:00.000Z",
  "created_at": "2026-11-02T15:00:00.000Z"
}

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.
not_found404There is no such thing on this account. Ids are prefixed by kind, so a message id starts with msg_.

Try it

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