Console API
Conversations
15 endpoints.
/api/v1/admin/conversationsList conversations
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_id | query | string (uuid) | null | Scope contact hydration to this business. When provided, each list item's `contact` field is the business_contact record for that business; without it, contact is picked from any business the consumer is known to (first match). |
status | query | string | null | OPEN | CLOSED | SNOOZED |
assigned_to | query | integer | null | |
unread_only | query | boolean | default false |
needs_attention | query | boolean | null | Filter to conversations whose business contact is flagged needs-attention. Requires `business_id` — contacts are per-business while consumers are global, so an unscoped filter would match contacts flagged in other businesses. |
cursor | query | string | null | |
limit | query | integer | default 50 |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_list_ConversationListItem__| Field | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
success | true | default true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
datarequired | ConversationListItem[] | ConversationListItem[] fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fields
|
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversationsCreate or fetch conversation for a contact (idempotent)
Start a conversation with a contact from the console. Returns 200 with the existing conversation when one already exists for the contact's consumer (idempotent). Passing `initial_message` sends the first outbound atomically.
Console-created conversations default to `ai_enabled=True`, `ai_mode='AUTONOMOUS'` — the bot drives the thread out of the box. Operators opt out via PATCH /conversations/{id} or by flipping the contact-level `auto_contact_enabled` toggle (which cascades here).
Parameters
| Name | In | Type | Description |
|---|---|---|---|
authorization | header | string | null |
Request bodyrequired
application/jsonConversationCreateBody| Field | Type | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
business_idrequired | string | |||||||||||||||||||
contact_idrequired | string | |||||||||||||||||||
channel | string | null | IMESSAGE (only supported channel today) | ||||||||||||||||||
initial_message | MessageSendBody | null | MessageSendBody fields
| ||||||||||||||||||
idempotency_key | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_ConversationCreateResult_| Field | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
success | true | default true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
datarequired | ConversationCreateResult | ConversationCreateResult fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/{conversation_id}Get conversation
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversation_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_ConversationData_| Field | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
datarequired | ConversationData | ConversationData fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/{conversation_id}Update conversation
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversation_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
application/jsonConversationUpdateBody| Field | Type | Description |
|---|---|---|
status | string | null | OPEN | CLOSED | SNOOZED |
assigned_to | integer | null | |
ai_enabled | boolean | null | |
ai_mode | string | null | AUTONOMOUS | ASSIST | OFF |
snoozed_until | string (date-time) | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_ConversationData_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | ConversationData | ConversationData fieldsConversationData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/{conversation_id}/messagesList messages in a conversation
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversation_idrequired | path | string (uuid) | |
cursor | query | string | null | |
limit | query | integer | default 50 |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_list_MessageData__| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | MessageData[] | MessageData[] fieldsMessageData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/{conversation_id}/messagesSend outbound message
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversation_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
application/jsonMessageSendBodyMessageSendBody, expanded above.
Responses
201Successful Responseapplication/jsonSuccessResponse_MessageData_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | MessageData | MessageData fieldsMessageData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/{conversation_id}/messages/{message_id}Delete a DRAFT message (ASSIST-mode reject)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversation_idrequired | path | string (uuid) | |
message_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
204Successful Response400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/{conversation_id}/messages/{message_id}/retryRetry a FAILED or PENDING outbound message
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversation_idrequired | path | string (uuid) | |
message_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_MessageData_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | MessageData | MessageData fieldsMessageData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/{conversation_id}/messages/{message_id}/sendApprove and send a DRAFT (e.g. AI-authored) message
Used by the ASSIST-mode approve flow: promotes a DRAFT outbound row to PENDING, stamps ai_metadata.review_status='approved' with the approver's user_id, and publishes to raven. Optional `edited_body` in the body allows inline edits before approval.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversation_idrequired | path | string (uuid) | |
message_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request body
application/jsonDraftSendBody | null| Field | Type | Description |
|---|---|---|
edited_body | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_MessageData_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | MessageData | MessageData fieldsMessageData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/{conversation_id}/readMark conversation as read (zero unread_count)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversation_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_ConversationData_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | ConversationData | ConversationData fieldsConversationData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/configsList all conversations config versions (newest first)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_list_ConversationsConfigData__| Field | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
datarequired | ConversationsConfigData[] | ConversationsConfigData[] fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/configsCreate a new conversations config version
Inserts a new version that supersedes the current active row. Any field omitted in the body is inherited from the current active version, so callers can submit a small diff.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
authorization | header | string | null |
Request bodyrequired
application/jsonConversationsConfigCreateBody| Field | Type | Description |
|---|---|---|
persona_system_prompt | string | null | |
prompt_version | string | null | |
classification_provider | string | null | |
conversational_provider | string | null | |
summarization_provider | string | null | |
classification_enabled | boolean | null | |
conversational_enabled | boolean | null | |
conversational_multimodal_enabled | boolean | null | |
min_autonomous_confidence | number | null | |
forbidden_topics | string[] | null | string[] | null fields |
escalation_keywords | string[] | null | string[] | null fields |
max_auto_replies_per_hour_per_consumer | integer | null | |
max_auto_replies_per_day_global | integer | null | |
summary_trigger_message_count | integer | null | |
verbatim_tail_size | integer | null | |
summary_max_sentences | integer | null |
Responses
201Successful Responseapplication/jsonSuccessResponse_ConversationsConfigData_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | ConversationsConfigData | ConversationsConfigData fieldsConversationsConfigData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/configs/{version}Get a conversations config by version
Parameters
| Name | In | Type | Description |
|---|---|---|---|
versionrequired | path | integer | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_ConversationsConfigData_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | ConversationsConfigData | ConversationsConfigData fieldsConversationsConfigData, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/conversations/configs/activeGet the active conversations config
Parameters
| Name | In | Type | Description |
|---|---|---|---|
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_ConversationsConfigData_| Field | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
datarequired | ConversationsConfigData | ConversationsConfigData fieldsConversationsConfigData, expanded above. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/global-conversationsList conversations across all businesses (admin)
Admin cross-business inbox. Always unscoped. `needs_attention` matches conversations where any linked business_contact is flagged. Each row includes `businesses` (id + name) for UI badges and `contact.business_id` for actions.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
status | query | string | null | OPEN | CLOSED | SNOOZED |
assigned_to | query | integer | null | |
unread_only | query | boolean | default false |
needs_attention | query | boolean | null | Filter to conversations where any linked business_contact is flagged needs-attention (cross-business). |
cursor | query | string | null | |
limit | query | integer | default 50 |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_list_ConversationListItem__| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | ConversationListItem[] | ConversationListItem[] fieldsConversationListItem, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.