Skip to main content
Docs
Agent

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.

Send a message

POST https://api.elyxir.ai/api/v1/openclaw

Streams the reply back as Server-Sent Events (text/event-stream).

FieldTypeRequiredDescription
messagestringYes1–64,000 characters
conversationIdUUIDYesGroups turns into one conversation
userIdUUIDYesWhich 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

StatusMeaning
400Invalid or missing fields
401Invalid or revoked API key
403No seat for this user, or billing suspended
502The agent is temporarily unreachable — retry
503No agent provisioned for this organization
Agent | Alvin