Skip to main content
POST
Send a message (strict)
Starts a new turn with your message. Use it when you need exactly one turn at a time. If the agent is still working, the call fails, so use the follow-up message endpoint to steer an active turn instead. Related guide: Agent access: grant credentials to agents. Says something to the agent. Exactly one turn may be active per conversation; a message sent while one is in flight answers 409. Use POST …/messages to follow up on an active turn instead.
Availability: Cloud · Community (self-hosted) · Enterprise (self-hosted)

Authorizations

Authorization
string
header
required

A workspace API key (oc_…) or organization API key (oc_org_…). Workspace-scoped endpoints called with an organization key also need X-Workspace-Id.

Path Parameters

conversationId
string
required

Body

application/json
message
string
required
Maximum string length: 100000
attachmentIds
string[]

Ids of attachments staged with POST /conversations/{conversationId}/attachments.

Maximum array length: 5

Response

The queued turn

id
string
conversationId
string
status
enum<string>

joining is a follow-up waiting to steer into the active turn; joined means it did.

Available options:
queued,
dispatched,
running,
done,
failed,
aborted,
joining,
joined
source
string

web for API and dashboard turns; a channel provider id for channel turns; cron, watch, agent, greeting, or peer_task for platform-authored turns.

userId
string | null
message
string
error
string | null

Human-readable failure text for failed turns.

errorCode
string | null
usage
object | null

Token usage reported by the harness, when available.

followUpOfTurnId
string | null
startedAt
string<date-time> | null
finishedAt
string<date-time> | null
createdAt
string<date-time>
attachments
object[]