Skip to main content
POST
/
v1
/
sessions
/
{session_id}
/
events
curl -X POST https://api.dari.dev/v1/sessions/sess_123/events \
  -H "Authorization: Bearer $DARI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ticket-T-1042-message-1" \
  -d '{
    "type": "user.message",
    "content": [
      { "type": "text", "text": "Summarize this ticket and draft a reply." },
      { "type": "file", "file_id": "file_456" }
    ],
    "metadata": {
      "ticket_id": "T-1042"
    }
  }'
{
  "event": {
    "id": "sess_123:evt_1",
    "session_id": "sess_123",
    "sequence_number": 1,
    "message_id": "msg_123",
    "type": "user.message",
    "source": "user",
    "actor": { "type": "user", "id": "org_123" },
    "data": {
      "content": [
        { "type": "text", "text": "Summarize this ticket and draft a reply." },
        { "type": "file", "file_id": "file_456" }
      ],
      "metadata": { "ticket_id": "T-1042" },
      "message_id": "msg_123"
    },
    "created_at": "2026-03-31T18:40:00Z"
  },
  "message": {
    "id": "msg_123",
    "status": "queued"
  },
  "session": {
    "id": "sess_123",
    "agent_id": "agt_123",
    "version_id": "ver_123",
    "storage_binding_id": null,
    "internet_access": false,
    "status": "running",
    "last_message_id": "msg_123",
    "last_message_status": "queued",
    "created_at": "2026-03-31T18:39:00Z"
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.dari.dev/llms.txt

Use this file to discover all available pages before exploring further.

Send one event to a session. Use user.message to start or enqueue a user turn. Use tool.result_submitted to answer an external tool request that Dari previously sent as tool.call_requested; see Webhooks for the pushed delivery flow. This endpoint writes to the canonical event ledger. If you need a display-ready conversation view, call Get Session Transcript. For safe retries of user messages, pass an Idempotency-Key header. Reusing the same key for the same session returns the original event instead of creating another message.

Path Parameters

session_id
string
required
Session ID.

Headers

Authorization
string
required
Bearer token using your Dari API key.
Content-Type
string
required
Must be application/json.
Idempotency-Key
string
Optional key for safely retrying user.message requests.

Request Body

type
string
required
user.message or tool.result_submitted.
content
object[]
Required for user.message. Ordered list of content blocks. Blocks support text, file, and image.
metadata
object
Optional metadata attached to the derived message for user.message.
message_id
string
Required for tool.result_submitted. The message ID from the matching tool.call_requested event.
tool_call_id
string
Required for tool.result_submitted. The tool call ID from the matching tool.call_requested event.
result
object
Required for successful tool.result_submitted events. Raw JSON result returned by your infrastructure. If the external tool defines an output_schema, Dari validates this object before resuming the agent.
is_error
boolean
Optional for tool.result_submitted. Set to true to return an error result to the model.

Response Fields

event
object
The canonical ledger event that was recorded.
message
object
The derived message summary when the event is associated with a message.
session
object
The current session summary after the event was recorded.
curl -X POST https://api.dari.dev/v1/sessions/sess_123/events \
  -H "Authorization: Bearer $DARI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ticket-T-1042-message-1" \
  -d '{
    "type": "user.message",
    "content": [
      { "type": "text", "text": "Summarize this ticket and draft a reply." },
      { "type": "file", "file_id": "file_456" }
    ],
    "metadata": {
      "ticket_id": "T-1042"
    }
  }'
{
  "event": {
    "id": "sess_123:evt_1",
    "session_id": "sess_123",
    "sequence_number": 1,
    "message_id": "msg_123",
    "type": "user.message",
    "source": "user",
    "actor": { "type": "user", "id": "org_123" },
    "data": {
      "content": [
        { "type": "text", "text": "Summarize this ticket and draft a reply." },
        { "type": "file", "file_id": "file_456" }
      ],
      "metadata": { "ticket_id": "T-1042" },
      "message_id": "msg_123"
    },
    "created_at": "2026-03-31T18:40:00Z"
  },
  "message": {
    "id": "msg_123",
    "status": "queued"
  },
  "session": {
    "id": "sess_123",
    "agent_id": "agt_123",
    "version_id": "ver_123",
    "storage_binding_id": null,
    "internet_access": false,
    "status": "running",
    "last_message_id": "msg_123",
    "last_message_status": "queued",
    "created_at": "2026-03-31T18:39:00Z"
  }
}
Use the session event stream to watch the canonical ledger live, Get Session Transcript for a renderable full-session timeline, and Get Message for the per-turn read model.