Terms of Service

Effective 29 October 2026 · Excession Labs

Docs

Install the agent, sign in from the terminal, and call the API.

Install

# macOS and Linux
curl -fsSL https://excessionlabs.ai/install.sh | sh

# Windows (PowerShell)
irm https://excessionlabs.ai/install.ps1 | iex

The script puts excession in ~/.local/bin (Windows: %LOCALAPPDATA%\Excession\bin). Set EXCESSION_INSTALL_DIR to choose another folder, or EXCESSION_VERSION to pin a version.

Sign in

excession login

The CLI shows a code like BCDF-GHJK and opens excessionlabs.ai/device. Check that the code matches, then press Approve. The CLI receives its own API key; you can revoke it on the API keys page.

New accounts finish a short access check first: email, a $0 card check, and the Acceptable Use Policy.

API

Base URL https://api.excessionlabs.ai/v1 (also served at https://excessionlabs.ai/v1). Send your key as Authorization: Bearer exl_... or x-api-key: exl_....

EndpointFormat
POST /v1/chat/completionsOpenAI Chat Completions
POST /v1/responsesOpenAI Responses
POST /v1/messagesAnthropic Messages
GET /v1/modelsModel list with prices
GET /v1/meAccount, access status, plan and balance

All three formats support streaming and tool calls. Every response carries an X-Request-Id header; non-streaming responses also carry X-Cost-Usd.

curl https://api.excessionlabs.ai/v1/chat/completions \
  -H "Authorization: Bearer $EXCESSION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"excession-1","messages":[{"role":"user","content":"hello"}]}'

Errors

StatuscodeMeaning
401invalid_api_keyMissing, wrong or revoked key.
402insufficient_creditNo credit left. Pick a plan or top up.
403access_requiredAccess setup is not finished or is in review.
429rate_limited / model_busySlow down; honor Retry-After.
503service_unavailableTemporary. You were not charged.

Device login for tool builders

Any client can sign in the way the CLI does, using the OAuth 2.0 Device Authorization Grant (RFC 8628).

POST /v1/device/code   {"client_name": "excession-cli 0.1 on my-laptop"}
→ {"device_code", "user_code": "BCDF-GHJK", "verification_uri", "verification_uri_complete", "expires_in": 900, "interval": 5}

POST /v1/device/token  {"device_code": "...", "grant_type": "urn:ietf:params:oauth:grant-type:device_code"}
→ 400 {"error": "authorization_pending"}   keep polling every interval seconds
→ 400 {"error": "slow_down"}               add 5 seconds to the interval
→ 400 {"error": "access_denied" | "expired_token"}
→ 200 {"access_token": "exl_...", "token_type": "Bearer", "key_id", "email"}

Open verification_uri_complete in the browser. The key is returned once; store it with file mode 0600.