Docs
Install Incursion, sign in, and call the Excession API.
Install
# macOS and Linux
curl -fsSL https://excessionlabs.ai/install.sh | sh
# Windows (PowerShell)
irm https://excessionlabs.ai/install.ps1 | iex
The script installs Incursion and puts the excession command 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
On first launch you choose one of the two models, then browser sign-in opens. Your Excession plan credit and balance pay for usage. The defaults are 12 workers and high reasoning.
excession login # sign in again
excession whoami # plan credit, balance and available
excession billing # open Billing to add funds or pick a plan
excession billing --use-balance on # use balance after plan credit
excession logout # revoke this device 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.
Signing in creates your account with $5 API credit, once per new account. No card required. Use it for your first requests, then add funds from $0.50 or pick a plan in Billing. Using the service means you accept the Acceptable Use Policy.
Models and reasoning
/model (or /models) lists deepseek/deepseek-v4.1-flash-1017 and deepseek-v4.1-flash-abliterated. Both run through the Excession API. /effort high sets reasoning directly; /effort opens the picker.
The app is fullscreen. Scroll messages with the wheel or PgUp/PgDn; the composer stays at the bottom. Ctrl+End follows the latest message.
Plan credit and balance
You pay in US dollars. A plan gives plan credit each month; Add funds adds balance. Without a plan, requests use your balance.
| Option | You pay | Plan credit or balance | Extra | Unused money |
|---|---|---|---|---|
| Pay as you go | Add funds: $0.50 to $1,000, card or crypto | Same amount as balance | 0% | Never expires |
| Starter | $20/month | $30/month | +50% | Ends at renewal |
| Pro | $100/month | $175/month | +75% | Ends at renewal |
| Max | $200/month | $400/month | +100% | Ends at renewal |
| Ultra | $500/month | $1,250/month | +150% | Ends at renewal |
Balance never expires while your account is open, including after you cancel a plan. Each plan covers one person.
Debit order
| Order | Money | When it is empty |
|---|---|---|
| 1st | Plan credit | Balance pays next. If Use balance after plan credit is off: HTTP 402 balance_use_off |
| 2nd | Balance | HTTP 402 insufficient_funds |
The setting is on by default. Change it in Billing or with excession billing --use-balance off. Available is what requests can spend now.
Alerts
The console and the CLI warn you at 80% and 95% of plan credit, when requests move to your balance, and when money is low.
Set Email me when available funds fall below in Billing (default $5). We send the email once, and again only after you add funds.
Streaming latency: measured timings, errors and raw data.
Prices
| Model, USD per 1M tokens | Input | Cached input | Output |
|---|---|---|---|
| DeepSeek V4.1 Flash | $0.035 | $0.005 | $0.50 |
| DeepSeek V4.1 Flash Abliterated | $0.20 | $0.025 | $0.80 |
Output includes reasoning tokens. Plans and pay as you go use the same prices. Compare models or estimate your monthly API cost.
A request holds an input estimate plus its maximum output (16,384 tokens by default), then releases what it does not use. If a request does not fit what is available, lower its maximum output.
Money fields
Field names for each money value in GET /v1/me and in an HTTP 402 body.
| Value | GET /v1/me | HTTP 402 body |
|---|---|---|
| Plan credit per month | plan.credit_usd | — |
| Plan credit left | plan.credit_left_usd | plan_credit_left_usd |
| New plan credit on | plan.resets_at | resets_at |
| Balance | balance_usd | balance_usd |
| Balance use on or off | balance_use_enabled | — |
| Available now | available_usd | available_usd |
| Cost of the request | — | required_usd |
| Where to add funds | billing_url | billing_url |
| Account state | state: ok, low, no_funds, plan_80, plan_95, plan_used_balance or plan_used_balance_off | |
Referrals
Every account has one referral link, https://excessionlabs.ai/r/<code>. Find it on the Invite page in the console, or run excession invite.
| Their first payment | They get, once | You get |
|---|---|---|
| Add funds, for example $50 | 10%: $5.00 | $10.00 |
| Starter, $20 | $2.00 | $10.00 |
| Pro, $100 | $10.00 | $15.00 |
| Max, $200 | $20.00 | $25.00 |
| Ultra, $500 | $50.00 | $50.00 |
- Both rewards go to the balance when the first payment clears. A refund or dispute reverses both.
- A visit to your link counts for 30 days, and only for a new account.
- At most $500.00 of rewards per month (UTC) for each person who invites. Self-referral does not count, including with the same card or Stripe customer.
Each step shows in Activity. See the Terms for the full rules.
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_....
| Endpoint | Format |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/responses | OpenAI Responses |
POST /v1/messages | Anthropic Messages |
GET /v1/models | Model list with prices |
GET /v1/me | Account: plan credit, balance and available |
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":"deepseek/deepseek-v4.1-flash-1017","messages":[{"role":"user","content":"hello"}]}'
Errors
Money errors are always HTTP 402. Retrying does not help until you add funds or change the setting. 429 is never a money error: it means a rate limit or a busy model.
| Status | code | Meaning |
|---|---|---|
| 401 | invalid_api_key | Missing, wrong or revoked key. |
| 402 | insufficient_funds | Not enough funds for this request. Add funds at the billing_url in the body, or reduce max output. |
| 402 | balance_use_off | Plan credit is used up and you have a balance, but balance use is off. Turn on Use balance after plan credit or run excession billing --use-balance on. |
| 429 | rate_limited / model_busy | More than 600 requests per minute on one key, or the model is busy. Wait for Retry-After seconds. |
| 503 | service_unavailable | Temporary. You were not charged. |
A 402 body gives the numbers in the money fields.
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 API returns the key once; store it with file mode 0600.