Agent
Check agent availability, manage seats, and stream a conversation with your organization's agent.
Genie is a persistent personal agent — it keeps memory across sessions, can use the tools you connect, and works on longer-running tasks than a single chat turn. These endpoints let you talk to it from your own application.
Access is seat-based: each user who talks to the agent occupies a seat, and your plan sets how many seats you get. See Plans.
Authentication
Unlike the other Platform API endpoints, these authenticate with your elyxir_ API key — the same credential as the inference endpoints.
Authorization: Bearer elyxir_your_api_key
Agent status
GET https://api.elyxir.ai/api/v1/openclaw
Tells you whether the organization has an active agent and how many seats are in use.
curl https://api.elyxir.ai/api/v1/openclaw \
-H "Authorization: Bearer elyxir_your_api_key"When an agent is available:
{
"available": true,
"status": "active",
"modelId": "claude-sonnet-4-6",
"activeSeats": 3,
"lastActiveAt": "2026-08-03T09:12:00.000Z"
}When it isn't:
{
"available": false,
"reason": "..."
}reason is a human-readable string for display or logging — branch on available, not on its wording.
Check available before offering agent features in your UI — it's the difference between a graceful "not enabled on your plan" and a broken button.
The response may carry additional operational fields beyond those shown. Read the ones you need rather than assuming a fixed shape.
Send a message
POST https://api.elyxir.ai/api/v1/openclaw
Streams the reply back as Server-Sent Events (text/event-stream).
| Field | Type | Required | Description |
|---|---|---|---|
message | string | Yes | 1–64,000 characters |
conversationId | UUID | Yes | Groups turns into one conversation |
userId | UUID | Yes | Which user is speaking — must hold a seat |
curl -X POST https://api.elyxir.ai/api/v1/openclaw \
-H "Authorization: Bearer elyxir_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"message": "Summarize what we decided in this thread",
"conversationId": "00000000-0000-0000-0000-000000000000",
"userId": "11111111-1111-1111-1111-111111111111"
}'Reuse the same conversationId across turns — that's how the agent keeps context.
List seats
GET https://api.elyxir.ai/api/v1/openclaw/seats
{
"seats": [ /* ... */ ],
"maxSeats": 5
}maxSeats is your plan's cap. A user without a seat gets 403 from the message endpoint.
Errors
| Status | Meaning |
|---|---|
| 400 | Invalid or missing fields |
| 401 | Invalid or revoked API key |
| 403 | No seat for this user, or billing suspended |
| 502 | The agent is temporarily unreachable — retry |
| 503 | No agent provisioned for this organization |
403 and 503 mean different things. 503 is "your organization has no agent" — a plan or provisioning issue. 403 is "this specific user has no seat" — assign one, or point them at a different feature. 502 is transient; the other two are not.
Related
- Plans — included seats per plan
- Authentication — API key setup
- Memory — the memory the agent draws on