Skip to content

API Reference

All API endpoints require authentication using one of the following methods:

  • Header: Authorization: Bearer <token>
  • Header: x-api-key: <token>

Events

POST /api/events

Accepts batch or single events.

Request format — Batch:

json
{
  "events": [
    {
      "agent_id": "my-agent",
      "event_type": "llm_call",
      "source": "sdk",
      "timestamp": "2025-01-15T10:30:00.000Z",
      "provider": "openai",
      "model": "gpt-4o",
      "tokens_in": 500,
      "tokens_out": 200,
      "tokens_total": 700,
      "cost_usd": 0.0035,
      "latency_ms": 1200,
      "status_code": 200,
      "error_message": null,
      "tags": {}
    }
  ]
}

Request format — Single event:

json
{
  "agent_id": "my-agent",
  "event_type": "heartbeat",
  "source": "sdk",
  "timestamp": "2025-01-15T10:30:00.000Z"
}

Event types: llm_call | completion | heartbeat | error | custom | blocked

Event sources: sdk | proxy

Field descriptions:

FieldTypeRequiredDescription
agent_idstringYesAgent identifier (max 256 characters)
event_typestringYesEvent type
sourcestringYesData source (sdk / proxy)
timestampstringYesISO-8601 timestamp
providerstringNoLLM Provider name
modelstringNoModel name (actual model used)
requested_modelstringNoOriginally requested model (before override)
tokens_innumberNoInput token count
tokens_outnumberNoOutput token count
tokens_totalnumberNoTotal token count
cost_usdnumberNoCost (USD)
latency_msnumberNoLatency (milliseconds)
status_codenumberNoHTTP status code
error_messagestringNoError message (max 10,000 characters)
tagsobjectNoCustom tags (JSON object)

Response status codes:

Status CodeDescription
200 OKAll events validated and stored
207 Multi-StatusSome events failed validation; valid events were stored
400 Bad RequestAll events failed validation or malformed JSON
401 UnauthorizedInvalid Token
429 Too Many RequestsRate limited (1,000 events per minute); response includes Retry-After header

GET /api/events

Query events with the following filter parameters:

ParameterRequiredDescription
agent_idYesAgent identifier
fromNoStart time (ISO-8601)
toNoEnd time (ISO-8601)
event_typeNoFilter by event type
providerNoFilter by Provider
modelNoFilter by model
trace_idNoFilter by Trace ID
searchNoSearch keyword
limitNoMaximum number of results (max 10,000)

GET /api/events/export

Export event data in CSV or JSON format, up to 100,000 records.

Agents

GET /api/agents

List all Agents with pagination and search support.

ParameterDescription
limitNumber of results per page
offsetOffset
searchSearch keyword
statusFilter by status (healthy / degraded / down)

GET /api/agents/:agentId

Get detailed information for a specific Agent.

GET /api/agents/:agentId/policy

Get agent policy settings.

Response:

json
{
  "active": true,
  "budget_limit": 20.00,
  "allowed_hours_start": 9,
  "allowed_hours_end": 18
}
FieldTypeDescription
activebooleanWhether agent is enabled
budget_limitnumber | nullDaily spending cap in USD
allowed_hours_startnumber | nullStart hour (0-23)
allowed_hours_endnumber | nullEnd hour (0-23)

PUT /api/agents/:agentId/policy

Update agent policy settings. Partial updates are supported.

Request:

json
{
  "active": false,
  "budget_limit": 50.00
}

GET /api/agents/:agentId/providers

Get list of providers the agent has used.

Response:

json
{
  "providers": [
    { "provider": "openai", "model_override": "gpt-4o-mini" },
    { "provider": "anthropic", "model_override": null }
  ]
}

GET /api/agents/:agentId/model-rules

Get model override rules for an agent.

Response:

json
[
  { "provider": "openai", "model_override": "gpt-4o-mini" }
]

PUT /api/agents/:agentId/model-rules/:provider

Set model override for a specific provider.

Request:

json
{
  "model_override": "gpt-4o-mini"
}

DELETE /api/agents/:agentId/model-rules/:provider

Remove model override for a specific provider.

Models

GET /api/models

Get available models for each provider.

Response:

json
{
  "openai": ["gpt-4o", "gpt-4o-mini", "gpt-4-turbo", "gpt-3.5-turbo"],
  "anthropic": ["claude-opus-4-5-20251101", "claude-sonnet-4-5-20250929", "claude-haiku-4-5-20251001"],
  "google": ["gemini-1.5-pro", "gemini-1.5-flash"],
  ...
}

Stats

GET /api/stats/overview

Get aggregated statistics across all Agents.

ParameterDescription
rangeTime range: 1h, 24h, 7d, 30d

GET /api/stats/:agentId

Get statistics for a specific Agent.

ParameterDescription
rangePreset time range: 1h, 24h, 7d, 30d
fromCustom start time (ISO-8601)
toCustom end time (ISO-8601)

Alerts

GET /api/alerts

List alert rules.

ParameterDescription
limitNumber of results per page
offsetOffset
agent_idFilter by Agent
rule_typeFilter by rule type

POST /api/alerts

Create an alert rule.

json
{
  "agent_id": "my-agent",
  "rule_type": "error_rate",
  "config": {
    "threshold": 20,
    "window_minutes": 5
  },
  "webhook_url": "https://hooks.example.com/alert",
  "email": "ops@example.com",
  "enabled": true
}

PUT /api/alerts/:id

Update an alert rule (full replacement).

DELETE /api/alerts/:id

Delete an alert rule.

PATCH /api/alerts/:id/toggle

Toggle an alert rule's enabled/disabled state.

GET /api/alert-history

List alert trigger history records.

Auth

POST /api/auth/verify

Verify whether a Token is valid.

json
{
  "token": "your-token"
}

Response:

json
{
  "valid": true
}

Health Check

GET /api/health

Server health status.

json
{
  "status": "ok"
}