Post Assistant Message
Send the assistant a message (RO-303): 202 at once with the stored message and the assistant's `running` one; the turn runs in the background (poll the thread). The planner may ask questions (`question`, `form`), read data with the user's permissions, or propose writes as a `confirm` card (nothing changes until it is confirmed). It never sends email, calls, approves drafts or starts campaigns. A new message expires earlier unconfirmed plans. 429 when the workspace's daily message budget (`ASSISTANT_DAILY_MESSAGES`) is used up; 409 while the previous turn is still running.
API key access
/api/v1/assistant/threads/{thread_id}/messagesAccess token from /api/v1/auth/login, or an API key (ro_pat_..., RO-176) from /api/v1/workspaces/current/api-keys: the key implies its workspace and needs the route's scope. MCP connectors (/api/v1/mcp only) may use an OAuth access token (ro_oat_..., RO-284).
In: header
Path Parameters
uuidHeader Parameters
Id of the workspace to act on (must be a member).
1 <= length <= 4000A submitted form's answers by field name (text, number, boolean or a list of up to 20 short texts; at most 20).
Empty Object
At most 10.
Ids of the user's attached files (POST /assistant/attachments), at most
ASSISTANT_ATTACHMENTS_PER_MESSAGE (RO-323).
Response Body
curl -X POST "http://localhost:8000/api/v1/assistant/threads/497f6eca-6276-4993-bfeb-53cbbbba6f08/messages" \ -H "X-Workspace-Id: string" \ -H "Content-Type: application/json" \ -d '{ "text": "string" }'{
"user_message": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"role": "user",
"text": "string",
"components": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"text": "string",
"chips": [
"string"
],
"type": "question"
}
],
"status": "done",
"created_at": "2019-08-24T14:15:22Z",
"usage": {},
"feedback": {},
"attachments": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"filename": "string",
"kind": "pdf",
"byte_size": 0,
"status": "ready"
}
]
},
"assistant_message": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"role": "user",
"text": "string",
"components": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"text": "string",
"chips": [
"string"
],
"type": "question"
}
],
"status": "done",
"created_at": "2019-08-24T14:15:22Z",
"usage": {},
"feedback": {},
"attachments": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"filename": "string",
"kind": "pdf",
"byte_size": 0,
"status": "ready"
}
]
}
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}List Assistant Tools
What Oro can do, by area of the app (RO-322): each tool with its route, whether it reads or writes (writes run only after the user confirms) and the scope the same route needs with an API key; plus the human-only actions Oro never does (sending, dialling, starting campaigns, approving drafts, team and workspace deletion, roles, billing) with the page that does them. Signed-in users only (API keys: 403).
Preview Assistant Attachment Import
Put an attached CSV or Excel file (its first sheet) through the lead import pipeline's upload step: the same preview as `POST /imports/leads` (detected encoding and delimiter, suggested column mapping, sample rows) plus `attachment_id`. Nothing is imported until `POST /imports/{import_id}/commit` (Oro asks for a confirmation with the mapping first). 422 for other kinds (RO-323).