RaabtaHQ
Set an assistant’s instructions

Set an assistant’s instructions

PUT/api/v1/assistants/{id}/instructions

scope assistants:write

Replaces the whole binding list in one call. Send every instruction you want bound; anything absent is unbound. PUT rather than PATCH because position is only meaningful across the whole set.

Path parameters

NameTypeDescription
idrequired
string (uuid)Assistant id

Body

application/json
NameTypeDescription
instructionsrequired
object[]The complete binding list
instructions[].instruction_idrequired
string (uuid)A library instruction on this account
instructions[].enabledoptional
booleanDefaults to true
instructions[].modeoptional
string (enum)Defaults to alwaysalwayson_demand
instructions[].positionoptional
integerPrompt order, 0 first
Request
curl -X PUT "https://your-crm.example.com/api/v1/assistants/8f2c1d3e-4a5b-4c6d-9e0f-1a2b3c4d5e6f/instructions" \
  -H "Authorization: Bearer $RAABTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instructions": [
      {
        "instruction_id": "5c6d7e8f-9a0b-4c1d-8e2f-3a4b5c6d7e8f",
        "mode": "always",
        "position": 0
      }
    ]
  }'
Response · 200 OK
{
  "data": [
    {
      "instruction_id": "5c6d7e8f-9a0b-4c1d-8e2f-3a4b5c6d7e8f",
      "title": "Refund policy",
      "enabled": true,
      "mode": "always",
      "position": 0
    }
  ]
}

Response

Wrapped in { data: … }
NameTypeDescription
instruction_idrequired
string (uuid)The library instruction this binding points at
titlerequired
stringThat instruction title, copied for convenience
enabledrequired
booleanWhether this binding is live
moderequired
string (enum)always puts it in every prompt; on_demand indexes the title and lets the model fetch the bodyalwayson_demand
positionrequired
integerOrder within the assistant, 0 first

Errors

StatusCodeWhen
400bad_requestThe request could not be parsed: malformed JSON, an invalid cursor, or a query parameter of the wrong shape.
400validation_errorThe body or query failed validation. `details` lists each failing field with a `path` and a `message`.
401unauthorizedNo usable API key: the Authorization header is missing or malformed, or the key is unknown, revoked or expired. The three are deliberately indistinguishable.
403forbiddenThe key is valid but lacks the scope this endpoint requires, or the request came from an address outside the key’s IP allowlist. The message says which.
403account_suspendedThe account this key belongs to is suspended. Rotating the key will not help; contact support.
404not_foundNo such resource in this account. A resource that exists in another account also returns this.
422unprocessableThe request was well-formed but cannot be carried out. `reason` is a stable string saying why (for example `outside_window` or `stage_not_in_pipeline`).
429rate_limitedThe per-key budget, or the per-IP budget for failed authentication, is exhausted. Honour `Retry-After` before retrying.
500internalSomething failed on our side. Safe to retry with the same Idempotency-Key; quote `request_id` if it persists.