PATCH
https://app.evoriqa.com/api/v1/channelsUpdate a channel
Pauses or resumes a channel, sets its reply mode, or edits its provider config in place. At least one field is required; replyMode wins over aiFirst.
Requires scope channels:write
Warning:
Access is gated — enable it before your first call
The API is off by default. A request succeeds only when all three switches are on: the platform master switch (off by default), your organisation’s API toggle, and your plan or client entitlement. Any one off returns 403 API access is not enabled for this workspace.
Request body
Content type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
| id | string uuid | Required | The channel's id. |
| active | boolean | Optional | Whether the channel receives traffic. |
| aiFirst | boolean | Optional | Legacy two-state reply toggle: true sets autonomous, false sets human_first. Ignored when replyMode is also sent. |
| replyMode | string one of human_first · shadow · autonomous | Optional | Three-state reply mode, honoured by the e-mail channel and the messaging channels alike: human_first (Off) queues inbound in the inbox for a human and the AI never answers; shadow (Draft for review) stores the AI's reply as an inbox draft and sends nothing until an agent approves it; autonomous (AI replies) sends the AI answer. aiFirst is the legacy two-state shorthand (true → autonomous, false → human_first); when both are sent, replyMode wins and aiFirst is ignored. voice has its own pipeline and is unaffected. An out-of-workspace channel returns 404. |
| config | object | Optional | Edits the channel's provider config in place — the channel keeps its id, so its webhook URL and inbound secret stay valid. Send only the keys to change, using the same keys as config on POST /channels: the patch is merged over the stored config and the result is validated exactly like a connect (a failing merge returns 422 and changes nothing). A secret sent blank or as a non-string keeps the stored secret; an empty string clears an optional non-secret field. provider cannot be changed — disconnect and reconnect to switch transports. |
Request
curl
curl -X PATCH "https://app.evoriqa.com/api/v1/channels" \
-H "x-api-key: $EVORIQA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "id": "0b8de9f2-4c11-4f7e-9a34-5c6d7e8f9a0b", "replyMode": "shadow" }'Node.js
const res = await fetch("https://app.evoriqa.com/api/v1/channels", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.EVORIQA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"id": "0b8de9f2-4c11-4f7e-9a34-5c6d7e8f9a0b",
"replyMode": "shadow"
}),
});
const responseBody = await res.json();Python
import os
import requests
res = requests.patch(
"https://app.evoriqa.com/api/v1/channels",
headers={"Authorization": f"Bearer {os.environ['EVORIQA_API_KEY']}"},
json={
"id": "0b8de9f2-4c11-4f7e-9a34-5c6d7e8f9a0b",
"replyMode": "shadow"
},
)
body = res.json()Response
200 OK
{
"success": true,
"data": {
"updated": true
}
}