{"auth":{"api_keys":"eb_live_ keys are issued by the operator via /v1/admin/keys","apps":"POST /v1/auth/anonymous {device_name, platform} once per install, store the ebt_ token in the OS keychain","compat_paths":"/api/v1/* is accepted on this host and on eesti.bot","scheme":"Authorization: Bearer \u003ctoken\u003e","sign_out":"DELETE /v1/auth/token","streaming":"GET /v1/runs/{id}/events is text/event-stream with AG-UI JSON events; send the bearer header (fetch/HTTP client, not EventSource)"},"base_url":"https://api.eesti.bot/v1","endpoints":[{"method":"GET","path":"/healthz","auth":"none","summary":"Liveness and database check"},{"method":"GET","path":"/openapi.json","auth":"none","summary":"OpenAPI 3.1 description"},{"method":"GET","path":"/v1/info","auth":"none","summary":"Service name, version, model and limits"},{"method":"POST","path":"/v1/auth/anonymous","auth":"none","summary":"Issue a device token for a new anonymous person: {device_name, platform} -\u003e {token}"},{"method":"GET","path":"/v1/auth/me","auth":"bearer","summary":"The caller's person id, token metadata and rate limits"},{"method":"DELETE","path":"/v1/auth/token","auth":"bearer","summary":"Revoke the presented device token or API key (sign out)"},{"method":"POST","path":"/v1/session","auth":"none","summary":"Legacy: signed anonymous session token (use /auth/anonymous)"},{"method":"GET","path":"/v1/agents","auth":"bearer","summary":"Agents visible to the caller (built-in, public and own)"},{"method":"POST","path":"/v1/agents","auth":"bearer","summary":"Create an agent"},{"method":"GET","path":"/v1/agents/{slug}","auth":"bearer","summary":"One agent"},{"method":"PUT","path":"/v1/agents/{slug}","auth":"bearer","summary":"Update an own agent"},{"method":"DELETE","path":"/v1/agents/{slug}","auth":"bearer","summary":"Delete an own agent"},{"method":"GET","path":"/v1/tools","auth":"bearer","summary":"Tool catalog agents can use"},{"method":"GET","path":"/v1/threads","auth":"bearer","summary":"The caller's conversations"},{"method":"GET","path":"/v1/threads/{id}/messages","auth":"bearer","summary":"Messages of a conversation"},{"method":"POST","path":"/v1/chat","auth":"bearer","summary":"Start a run: {agent, thread_id?, text} -\u003e 202 {thread_id, run_id, events} (rate limited)"},{"method":"GET","path":"/v1/runs/{id}/events","auth":"bearer","summary":"Run events as AG-UI JSON over SSE (supports Last-Event-ID)"},{"method":"POST","path":"/v1/runs/{id}/stop","auth":"bearer","summary":"Stop a run"},{"method":"POST","path":"/v1/admin/keys","auth":"admin","summary":"Create an API key: {name, rate_per_min?, user_id?} -\u003e {key} (shown once)"},{"method":"GET","path":"/v1/admin/keys","auth":"admin","summary":"List API keys (metadata only); ?all=1 includes revoked; ?kind=device lists device tokens"},{"method":"DELETE","path":"/v1/admin/keys/{id}","auth":"admin","summary":"Revoke an API key or device token by id"}],"limits":{"anonymous_tokens_per_hour_per_ip":20,"chat_runs_per_min_per_api_key":60,"chat_runs_per_min_per_ip":30,"chat_runs_per_min_per_token":10},"name":"eesti.bot API","openapi":"https://api.eesti.bot/openapi.json","version":"dev"}
