Umans Code User Guide
Frontier coding models, in the tools you already use.
Run Claude Code, Cursor, Zed, Copilot, OpenCode, Kilo Code, Pi, and more with one API key. Pay only for what you use. Add credit, create a key, and start coding. Currently serving Kimi K3, GLM 5.3, DeepSeek V4 Pro, and DeepSeek V4 Flash.
We run frontier open-weight models on our own GPU infrastructure. Same SOTA coding quality as the closed labs, without the lock-in. Switch in a minute. We don't train on your data.
We publish our model tests and reviews at blog.umans.ai.
Quick Start
Pick the tool you already use. Setup is one command or two env vars. Every tab links to its full walkthrough in .
Or via the CLI: umans opencode
Install the umans CLI
The OpenCode, Claude Code, and omp paths use the umans CLI. On first run it opens your browser to authenticate and saves your API key. After that, launches are instant.
curl -fsSL https://api.code.umans.ai/cli/install.sh | bashVideo Demo: CLI with Claude Code walkthrough
CLI Commands
umans claude # Launch Claude Code (default: umans-coder, our current pick)
umans claude --model umans-kimi-k3 # Kimi K3: 1M context, native vision, max reasoning by default
umans claude --model umans-deepseek-v4-pro-0813 # DeepSeek V4 Pro: the long-context coding flagship (1M context, high reasoning by default)
umans claude --model umans-glm-5.3 # GLM 5.3: Z.ai's flagship coding model (1M context, always thinks)
umans claude --model umans-deepseek-v4-flash-0731 # DeepSeek V4 Flash: the cheapest production model
umans claude --model umans-flash # Light, high-interactivity complement (Qwen3.6-35B-A3B-FP8)
umans claude --websearch native # Umans web search: Kimi-backed path
umans claude --websearch exa # Umans web search: Exa-backed path
umans claude --websearch none # Disable server-side search; pass your own web_search tool through
umans opencode # Launch OpenCode with Umans backend
umans opencode --model umans-kimi-k3 # Use Kimi K3 on OpenCode
umans opencode --model umans-deepseek-v4-pro-0813 # Use DeepSeek V4 Pro on OpenCode
umans opencode --model umans-glm-5.3 # Use GLM 5.3 on OpenCode
umans opencode --model umans-deepseek-v4-flash-0731 # Use DeepSeek V4 Flash on OpenCode
umans opencode --model umans-flash # Use umans-flash on OpenCode
umans omp # Launch omp (Oh My Pi) with Umans backend
umans status # Check authentication status
umans logout # Remove saved credentials
umans --help # Show all available commandsManual Configuration (Alternative)
If the CLI does not work for your setup or you prefer to configure tools manually, use these settings:
API Endpoint
| Setting | Value |
|---|---|
| Base URL | https://api.code.umans.ai |
| Anthropic Endpoint | https://api.code.umans.ai/v1/messages |
| OpenAI Endpoint | https://api.code.umans.ai/v1/chat/completions |
| Model Name | umans-coder |
Getting Your API Key
- Log in to app.umans.ai/billing
- Go to your Dashboard → API Keys
- Generate a new key (shown only once - copy it immediately)
API Reference
Anthropic-Compatible Endpoints
Umans Code implements the Anthropic Messages API.
POST /v1/messages
curl -N -X POST https://api.code.umans.ai/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: sk-your-umans-api-key" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "umans-coder",
"messages": [{"role": "user", "content": "Hello!"}],
"max_tokens": 4096,
"stream": true
}'OpenAI-Compatible Endpoints
Umans Code also implements the OpenAI Chat Completions API.
POST /v1/chat/completions
curl -N -X POST https://api.code.umans.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-your-umans-api-key" \
-d '{
"model": "umans-coder",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'Models
Our Philosophy: We believe in serving the best open-source models available. We continuously evaluate and filter models to ensure your agents stay productive all day, without the decision fatigue of choosing between dozens of options.
Available Models
| Model | Base | Context | Best For | Trade-off |
|---|---|---|---|---|
| umans-kimi-k3 | Kimi K3 | 1M | Repository-scale agentic work at frontier-class quality: whole repos in one pass, screenshots and diagrams natively, max-effort reasoning | The premium tier — priced for the jobs where its depth pays for itself |
| umans-deepseek-v4-pro-0813 | DeepSeek-V4-Pro-0813 | 1M | The long-context coding flagship: repository-scale agentic work with high-effort reasoning by default ($1.32 / $3.96 per 1M tokens) | Thinks at high effort by default; dial to max when a task deserves more depth |
| umans-coder | We pick for you * | — | Default: we choose the best for you | Routes to our top pick (may change over time) |
| umans-glm-5.3 | GLM 5.3 | 1M | Z.ai's flagship coding model: the GLM 5.2 successor with large gains on complex, long-horizon tasks ($1.40 / $4.40 per 1M tokens) | Always thinks at max effort by default; dial to low or high (thinking cannot be turned off) |
| umans-deepseek-v4-flash-0731 | DeepSeek-V4-Flash-0731 | 1M | The cheapest production model in the lineup ($0.14 / $0.28 per 1M tokens). The default for new chats on app.umans.ai | Thinks at low effort by default; dial up high or max when a task deserves more depth |
| umans-flash | Qwen3.6-35B-A3B-FP8 | 256K | High-interactivity light model; complement to umans-coder | A different category, not the headline coder. Pair the two in your workflow. |
* umans-coder routes to our current pick, which changes as we evaluate models. The live target is always listed on GET /v1/models/info.
Retired models. Kimi K2.7-Code (umans-kimi-k2.7) and GLM 5.2 (umans-glm-5.2) retire on September 10, 2026. Requests to these ids keep working until the cutoff; from that date they return a clear deprecation error pointing to their successors: umans-kimi-k3 (same always-on reasoning lineage, 1M context, native vision) and umans-glm-5.3 (same GLM lineage, 1M context). Past models and their history stay visible on the status page.
Read more at blog.umans.ai.
Model IDs, exactly
Every model has one exact ID, starting with umans-, like umans-coder or umans-kimi-k3. The live list is always at GET /v1/models.
Using Claude Code or an Anthropic-style tool? Its claude-* names keep working out of the box. The mapping:
| Request says | We serve |
|---|---|
| claude-haiku-* (any version) | umans-flash |
| claude-sonnet-4 / claude-opus-4 or newer | umans-coder |
| Older claude-* (3.x and below) | umans-flash |
| claude-fable-* (Claude Code's /model fable tier) | umans-kimi-k3 |
Typo or wrong ID? You get a clear 400 Unknown model error that lists the valid IDs, and when you are one character off it suggests the one you probably meant (for example kimi-k3 → umans-kimi-k3).
How to Choose
- Use
umans-kimi-k3for repository-scale work: the 1M context window reads a whole repo (or a whole spec tree) in one pass, native vision takes screenshots and diagrams directly, and it reasons at maximum effort by default. It is Moonshot's most capable model and the first open 3T-class release — closed-frontier-class quality at open-model prices ($3.00 / $15.00 per 1M tokens; see the evidence box below). Select a lower effort (loworhigh) when you want its context without the full think. - Use
umans-deepseek-v4-pro-0813for the hardest long-horizon coding work: the coding flagship with a 1M context window and high-effort reasoning by default ($1.32 / $3.96 / $0.044 per 1M tokens, input / output / cached). It served here as a seat-gated pre-release lab from August 13 to 15, 2026, so its status page already carries that window's metrics as its pre-release period. - Use
umans-coder(default) to let us choose the best model for you. We continuously evaluate and select what works best for most coding tasks; the live target is always onGET /v1/models/info. - Use
umans-flashfor the workflow roles aroundumans-coder, not as a standalone coder (think Haiku or Sonnet alongside Opus). Its speed (200+ tps) compounds when gathering context, running scout subagents, doing research, writing summaries, documentation, or release notes. - Use
umans-glm-5.3for GLM 5.2's lineage taken further: Z.ai's flagship coding model on a 1M context window, with large post-training gains on complex, long-horizon tasks ($1.40 / $4.40 / $0.26 per 1M tokens, input / output / cached). It always thinks — at max effort by default; dialloworhighto tune latency and cost (thinking cannot be turned off). - Use
umans-deepseek-v4-flash-0731for everyday agentic work at the lowest price in the lineup ($0.14 / $0.28 / $0.028 per 1M tokens, input / output / cached). Its 1M window covers most sessions, and for most users a month of it costs less than a flat subscription did. It thinks at low effort by default: selecthighormaxon the hard tasks instead of switching models. Through September 10, 2026 every wallet top-up earns twice its amount in bonus credit usable on this model; see dsv4fx3 promotion terms.
Benchmark Comparison
We believe in transparency. We start with the Artificial Analysis composite indices (Coding and Agentic, August 2026), which rank our whole lineup against the frontier at max reasoning effort. Then FrontierSWE and Terminal-Bench v2.1, which feature Claude Fable 5 (with MCP) and our Kimi K2.7-Code (retired September 10, 2026; what umans-coder routed to at the time). Use the tabs to compare our models against GPT-5.5/5.6, Claude Opus 4.8 and Opus 5, Gemini 3.1 Pro, and the leading open models. The remaining benchmarks are from Z.ai's GLM 5.2 model card. Different harnesses are not comparable across sources.
Weighted average of coding benchmarks, from Artificial Analysis. Higher is better.
August 2026⚡ DeepSeek V4 Flash punches far above its price: on the Artificial Analysis composite indices (August 2026) it scores 69.1 on Coding and 45.7 on Agentic, at $0.14 / $0.28 per 1M tokens. Kimi K3 leads the open weights at 76.2 Coding and 50.1 Agentic, within 2 points of Claude Opus 5 on Coding.
🏆 The GLM lineage went neck-and-neck with Opus 4.8 on FrontierSWE: GLM 5.2 scored 74.4 vs 75.1, ahead of GPT-5.5 (72.6), Gemini 3.1 Pro (39.6), and every other open model, and beat GPT-5.5 and Gemini on SWE-bench Pro, HLE w/ tools, and MCP-Atlas. GLM 5.2 retired on September 10, 2026; its successor umans-glm-5.3 carries the lineage further.
🖥️ Agentic coding & terminal use: Terminal-Bench v2.1 puts Claude Fable 5 (with MCP) at 85 and GPT-5.5 at 84. GLM 5.2 (since retired) was the top non-frontier model at 78, ahead of Gemini 3.1 Pro (74). Kimi K2.7-Code (retired September 10, 2026; what umans-coder routed to at the time) scores 67, ahead of MiniMax M3 (65) and DeepSeek-V4-Pro (64).
🤖 A track record of winning on tool use: Kimi K2.7-Code (what umans-coder routed to before its September 10, 2026 retirement) beat Claude Opus 4.8 on MCPMark-Verified (81.1 vs 76.4). See the note below for harness details.
🏆 Kimi K3 is frontier-class on agentic work: Fireworks' independent study ran it against Claude Fable 5 on ~1,030 real agentic tasks (SWE fixes, terminal ops, algorithms, multi-language, legal): 92.4% vs 92.6% — within a point of the closed frontier — and routing between the two reached 93% at up to ~50× lower cost on long agentic loops. Moonshot's own evals report FrontierSWE 81.2 and Terminal-Bench 2.1 88.3 (Kimi Code harness), top-three across six coding benchmarks. That is why it leads our lineup: closed-frontier-class work, open-model prices.
Sources: Artificial Analysis: Coding Index and Agentic Index (accessed 2026-08-03: Opus 5, GPT-5.6 Sol/Terra/Luna, Fable 5, Kimi K3, Opus 4.8, Muse Spark 1.1, Qwen3.8 Max, DeepSeek V4 Flash, GLM 5.2, DeepSeek-V4-Pro); Z.ai: GLM 5.2 model card (FrontierSWE, SWE-bench Pro, HLE w/ tools, MCP-Atlas: GLM 5.2, GPT-5.5, Opus 4.8, Gemini 3.1 Pro, Qwen3.7-Max, MiniMax M3, DeepSeek-V4-Pro); Artificial Analysis: Terminal-Bench v2.1 (Fable 5 with MCP, Kimi K2.7-Code); and Moonshot — Kimi K2.7-Code model card (MCPMark-Verified for K2.7-Code); Moonshot — Kimi K3 model card (FrontierSWE, Terminal-Bench 2.1 for K3); and Fireworks — Kimi K3 vs Fable 5 routing study (~1,030 agentic tasks, July 2026).
Note: Scores are from each evaluator's own harness; do not compare Terminal-Bench v2.1 numbers (Artificial Analysis) to Terminal-Bench figures reported by Z.ai or Anthropic. Kimi K2.7-Code and Claude Sonnet 4.6 do not publish FrontierSWE, so they do not appear on the Z.ai benchmarks; Kimi K2.7-Code does appear on the Terminal-Bench v2.1 tab.
umans-flash: light model comparison
umans-flash sits in a different category from the headline coder above. It isn't a standalone coding model. Think of it the way you'd think of Claude Haiku or Sonnet next to Opus: a light, high-interactivity model meant as a workflow complement rather than the deepest solver. We target 200+ tokens per second on this route (median observed above 300 tps), so it stays snappy for quick edits, orchestration steps, and tight inner loops. It's built to make the rest of your coding workflow faster: gathering context, scout subagents, research, summaries, documentation, release notes, even quick reviews.
Below, we line it up against peer open-weight light and mid models, with Claude 4.5 Opus included as a frontier reference rather than a peer.
Real-world agent tasks. Higher is better.
April 2026Where it shines: On real-world agent tasks (QwenClawBench), umans-flash (52.6) sits in the same band as Claude 4.5 Opus (52.3) and the larger Qwen3.5-397B-A17B (51.8), while staying small enough to serve at 200+ tps. Pair it with umans-coder for the hard solving.
Source: scores from the Qwen3.6-35B-A3B model card. Throughput targets reflect our own measurements on the Umans serving stack.
Model Information API
For programmatic access to current model information, including context windows, pricing, and capabilities:
curl https://api.code.umans.ai/v1/models/info | jqThis public endpoint returns up-to-date information about all available models, their capabilities, and current pricing.
Reasoning & Extended Thinking
Umans coding models can produce extended reasoning (internal thinking) before their final answer. You control it with the same standard knobs the two APIs define, and you can use either one on either endpoint. Umans normalizes your request to a single effective setting before it reaches the model.
Two standard controls
/v1/messages(Anthropic): the extended thinking standard, via thethinkingobject./v1/chat/completions(OpenAI): the reasoning standard, via thereasoning_effortfield.
You can send the OpenAI reasoning_effort on the Anthropic route, or the Anthropic thinking object on the OpenAI route. Both are accepted and mapped. Send one control per request; if both are present, the explicit thinking object wins, so the request never conflicts.
Enable or disable reasoning
- Anthropic:
"thinking": {"type": "enabled"}to enable,{"type": "disabled"}to turn off. - OpenAI:
"reasoning_effort": "low" | "medium" | "high"to enable,"none"to turn off.
Per-model defaults: umans-glm-5.3 always thinks — at max effort by default; dial low or high (thinking cannot be turned off). umans-kimi-k3 also thinks by default — at max effort — but honors "reasoning_effort": "none" with a genuinely non-thinking answer, and accepts low/ high/max to trade depth for speed. Its sampling fields (temperature, top_p) are fixed server-side; the gateway removes them rather than failing your request. umans-deepseek-v4-pro-0813 thinks by default at high effort, honors "reasoning_effort": "none" with a genuinely non-thinking answer, and accepts high/ max (lower values map to high).
Effort level vs. thinking budget
reasoning_effort selects how hard the model thinks: none, low, medium, high (other values such as minimal are accepted and mapped to the nearest level). On the Anthropic route you can instead set an explicit token budget: "thinking": {"type": "enabled", "budget_tokens": 4096}. Higher effort or larger budget means deeper reasoning. If you give an effort rather than a budget, Umans picks an appropriate budget for you.
Max output tokens
max_tokens (/v1/messages) and max_completion_tokens (/v1/chat/completions) cap the total tokens the model generates, and reasoning counts toward that cap. Your thinking budget must therefore be smaller than your max output tokens. Umans never raises the max_tokens you set; if your thinking budget would not leave room under it, Umans automatically reduces the budget to fit instead of rejecting the request, and if max_tokens is too small for any meaningful reasoning, thinking is turned off for that request.
Where reasoning appears in the response
/v1/messages: asthinkingcontent blocks (streamed asthinking_deltaevents), separate from thetextanswer./v1/chat/completions: in areasoning_contentfield on the message and on streamed deltas, separate fromcontent.
Reasoning streams live, token by token, alongside the answer.
Examples
Anthropic, explicit budget:
curl -N -X POST https://api.code.umans.ai/v1/messages \
-H "x-api-key: sk-your-umans-api-key" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "umans-coder",
"max_tokens": 8000,
"thinking": {"type": "enabled", "budget_tokens": 4096},
"messages": [{"role": "user", "content": "Refactor this function for clarity."}],
"stream": true
}'OpenAI, effort level:
curl -N -X POST https://api.code.umans.ai/v1/chat/completions \
-H "Authorization: Bearer sk-your-umans-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "umans-coder",
"reasoning_effort": "high",
"messages": [{"role": "user", "content": "Refactor this function for clarity."}],
"stream": true
}'Web Search
When your agent needs to look something up, we can run the search for you and hand the results back to the model. These calls show up in your usage breakdown next to model requests, with the chosen backend in the Served column.
Backends
| Backend | How it works | Pick when |
|---|---|---|
| native | Kimi-powered search built into our endpoint. No third-party traffic leaves our infrastructure. | You want the leanest, lowest-latency path and trust the model-native search quality. |
| exa | Exa-backed search routed through our endpoint. Results come back in the same shape the model expects. | You want richer, neural-ranked results for harder lookups (changelogs, niche topics, recent docs). |
| none | Turn server-side search off. Your own web_search tool is passed through to the model unchanged. | You ship your own web_search tool and do not want our server-side search to handle it. |
Choosing a backend
Set it once per Claude Code session via the CLI:
umans claude --websearch native # Kimi-backed
umans claude --websearch exa # Exa-backed
umans claude --websearch none # Off; pass your own web_search tool throughOr set it per request when calling the API directly:
X-Umans-Websearch-Provider: native
X-Umans-Websearch-Provider: exa
X-Umans-Websearch-Provider: noneIf neither is set, we use the default backend. The override only takes effect on requests that actually carry a web search tool, and only on routes where we own the search step (some models run search themselves, in which case the header is moot). Use none to turn server-side search off entirely and pass your own web_search tool through to the model unchanged.
What we record
Only usage metrics: the bucket timestamp, requested model alias, served backend, route, status, and token counts. We do not store the search query, the results, or anything from your conversation. We also do not log per-call payloads in production logs.
Pay by Token
Umans Code is pay-per-token. You prepay a wallet and every request bills exactly what it uses at the published per-token prices. One key works for every job: you coding interactively in Claude Code, OpenCode, Cursor, Zed, or Pi, and also CI, scheduled jobs, unattended automations, bots serving other people, and cloud agents funded from your wallet.
Your balance is the real spend limit. Burst limits come from your wallet's tier (they grow with lifetime top-ups; see ), and wallet keys are never auto-paused. Automations get plain, retryable 429s at worst.
Looking for the flat monthly plans? They were sunset on August 1, 2026 — kept for reference in the .
Which key for which job
| Workload | Use |
|---|---|
| You, coding in your editor or terminal | Your wallet key |
| A deployed app or backend in production | Wallet key (billed per token) |
| CI, cron, unattended automation | Wallet key (billed per token) |
| A bot or assistant that serves other people | Wallet key (billed per token) |
| A cloud agent working on your behalf | Your wallet, chosen at launch |
| A team sharing spend | Org wallet (one shared budget) |
Mint keys from your wallet. When the spend belongs to a team, an organization wallet keeps the budget, keys, and audit in one place, with service accounts for its automations.
Limits
Every key draws from a prepaid wallet and bills per token, so your balance is the real spend limit. On top of it, your wallet's tier bounds burst: how much you can run at once, and how fast you can fire requests. Tiers grow with your lifetime top-ups and never go down. (Flat-rate subscription plans were retired on August 1, 2026 — see the .) There are two kinds of limit: how much you can use over time, and how much you can run at once. This page explains exactly how both work and what happens when you reach them, so nothing here ever surprises you. The short version: enforcement starts gently, everything is visible in your dashboard, and the rare hard stop exists to protect you from a runaway setup as much as it protects everyone else's experience.
Wallet tiers at a glance
Wallet keys work differently: your balance is the real spend limit, so tiers only bound burst. Your tier is set by your lifetime paid top-ups and never goes down. Bonus credits count toward your balance but never toward your tier.
| Tier | Unlocks at | Requests | Concurrency |
|---|---|---|---|
| Tier 0 | Your first top-up | 2,000 per rolling 5-hour window | Up to 4 requests in flight |
| Tier 1 | $50 lifetime top-up | 4,000 per window | Up to 8 in flight |
| Tier 2 | $250 lifetime top-up | 8,000 per window | Up to 12 in flight |
| Tier 3 | $1,000 lifetime top-up | 16,000 per window | Up to 16 in flight |
All of a wallet's keys share its tier limits: they are per wallet, not per key. That includes keys you mint for automations and any wallet-funded cloud agents. Your current tier, and how far you are from the next one, is always visible on the Wallet tab.
When the wallet runs dry
Rate limits are the gentle part; balance exhaustion is the hard one. A wallet with no credit at all — no paid top-up, no active promo grant — does not serve until it has some. Promo credit (like the founders' bonus) serves while it lasts; the moment it drains or expires, the wallet suspends until a paid top-up. And a funded wallet that drains to its tier's floor — a small negative allowance ($5 at Tiers 0–1, $25 at Tier 2, $100 at Tier 3), there to absorb in-flight requests and auto-refill latency, never free credit — suspends at the gateway. That is a stop, not a 429: requests fail until you top up, then everything resumes on its own, keys untouched. Your balance and state are always on the Wallet tab, and auto-refill exists exactly so production automations never meet the floor.
The window rolls, it doesn't reset
Your tier's request budget counts in a rolling five-hour window: each request stops counting exactly five hours after it happened. There is no fixed reset time, no daily quota, and no weekly cap on top. If you ever reach the limit, capacity comes back continuously as your oldest requests age out, so a heavy morning never costs you the afternoon. And since billing is per token, the window only ever throttles burst — it can never charge you more than the balance you chose to top up.
Light requests count less
Requests are weighted by the model that serves them. The headline coding models count as one request each. Lighter models count as a fraction: today, umans-flash counts as half a request. Coding agents route plenty of small steps to a light model (summaries, titles, quick checks), so your effective usage grows more slowly than your raw request count. The Usage tab in your dashboard shows raw and effective numbers side by side. Weights can change as models evolve; the Usage tab always reflects the ones actually applied.
Concurrency means requests in flight, not terminals open
Your concurrency limit caps how many requests are being processed at the same instant, not how many sessions you have open. An agent session only holds a slot while a model is actually generating; while it runs tools, edits files, or waits for you, it holds none. In practice, 3 or 4 slots cover more parallel sessions than the numbers suggest. What does add up quickly is fan-out: five subagents thinking at the same moment is five requests in flight.
Headroom before errors
We don't return errors at exactly your limit. Today, hard enforcement starts around twice the stated number. The headroom exists to absorb honest mistakes, like a forgotten cron job or a runner you didn't know was still alive, so you can spot the problem in your dashboard and fix it before it costs you anything. Treat it as a safety net, not extra capacity: it is operational slack we tune over time, and workflows that depend on it will eventually hit the real limit.
If you push past it
Beyond the headroom, requests return HTTP 429 (rate limited). Coding agents handle 429s by backing off and retrying, so brushing the limit usually feels like a short pause rather than a failure. Each 429 also places your account at lower priority for about 30 minutes: requests keep working, just slower. The fastest way back to full speed is to reduce the parallelism that caused it.
The automatic pause
On the remaining flat-rate seat keys (legacy team orgs), an account that racks up repeated concurrency 429s in a single day is paused for five hours. Normal individual use doesn't get there. In practice, a pause means something is hammering the API without you noticing: a loop spawning agents, a stuck script, a key being used somewhere it shouldn't be. When it happens, your dashboard shows a banner with a countdown, and you have two ways out:
- Wait it out. The pause lifts on its own after five hours, and your API keys are untouched.
- Reactivate now from the dashboard. This revokes and rotates all your API keys, which guarantees that whatever was hammering the API stops with them. You can self-reactivate up to five times a week; after that, contact support and we'll figure it out with you.
The pause is a flat-rate leftover and can only reach those seat keys. Wallet keys are never paused: they exist for real workloads, where a surprise five-hour stop would hurt more than it helps. Past your tier's limits they get plain, retryable 429s, and nothing else. (One different thing can stop them: an exhausted wallet — see When the wallet runs dry below.)
Exceptionally heavy days: low-interactivity mode
Flat-rate seat keys are sized for a person coding, even intensively, all day. On the very rare days an account goes far beyond that (think an agent fleet left running overnight, not a long day of work), we serve it in low-interactivity mode for the next 24 hours: at quiet moments nothing changes, and at busy moments its requests queue behind interactive sessions and may occasionally be asked to retry. Nothing is blocked, and your models and answer quality stay exactly the same. Interactive mode resumes automatically at the shown time; you never have to do anything.
You always see where you stand: umans usage and the Usage tab show your current mode and the exact time interactive mode resumes, and the CLI mentions it when you start a session. In a team, this only ever applies to the seat having the heavy day, never to teammates. If your workload is genuinely this large, that is exactly what wallet keys (billed per token) are for: they never enter low-interactivity mode. And if it ever surprises you, check for a runaway automation first, then ask us on Discord.
Fair use, in one paragraph
Pay-per-token has no fair-use puzzle: if it bills to your wallet, it is a legitimate workload — your own coding, your automations, your production traffic. What a key still is: a credential. Keep it on machines and runners you control, never publish it, and don't hand it to other people — anyone holding it spends your balance. For teams, an organization wallet keeps the budget shared and the audit per key, with service accounts for its automations. If you are not sure which side of the line your setup is on, ask us on Discord; the answer is usually that you are fine.
See where you stand
The Usage tab at umans.ai/billing shows your requests (raw and effective), your concurrency peaks, and any rate-limited requests, over the same rolling window the limits use. If anything on this page ever affects you, that is where it shows up first.
Images
A single request can include up to 20 images, counted across all messages on both /v1/messages and /v1/chat/completions. Past that, the request is rejected with a 400 before it reaches a model.
The API is stateless: your tool resends the whole conversation on every turn, so this is really “20 images in the conversation you send,” not 20 per session on our side. Long, image-heavy sessions reach it quickly. The usual fix, which good harnesses do for you, is to keep only the most recent images and replace older ones with a short text description of what they showed, so the model keeps the context without resending every pixel.
Usage
See where you stand at any time, from the CLI or the API. The quickest way is umans usage:
$ umans usage
Requests [█░░░░░░░░░] 480 / 4,000 burst 8,000 resets in 3h 12m
Concurrency [█░░░░░░░░░] 1 / 8 burst 16
Tokens 1.2M in · 340K out
✓ You're all set — requests are flowing normally.(The header line, elided here, names the plan or tier your key was created under; the bars reflect your wallet's current tier.)
The bars show how close you are to each soft cap, the burst ceiling is the headroom you get before any throttling, and the last line tells you how your traffic is being served right now: all set, briefly deprioritized after a burst, or in low-interactivity mode with the time interactive mode resumes. Wallet keys are never deprioritized and never enter low-interactivity mode, so for them the last line always reads all set. Pass --json for the raw response.
Current window: GET /v1/usage
Returns your key's plan or tier, your limits (soft cap + burst ceiling), and live counters for the rolling window: requests used, remaining, in-flight concurrency, and token totals. It is scoped to your account — all keys under the same wallet share the tier's counters, which is exactly what triggers a 429.
curl https://api.code.umans.ai/v1/usage \
-H "Authorization: Bearer sk-your-umans-api-key"{
"limits": {
"requests": { "limit": 4000, "hard_cap": 8000, "burst_pct": 1.0, "window_seconds": 18000 },
"concurrency": { "limit": 8, "hard_cap": 16, "burst_pct": 1.0 }
},
"usage": {
"requests_in_window": 480,
"remaining_requests": 3520,
"concurrent_sessions": 1,
"tokens_in": 1200000,
"tokens_out": 340000,
"priority": { "low": false, "boxed_until": null, "reason": null },
"service_mode": { "current": "interactive", "resets_at": null }
}
}limit is the soft cap; hard_cap is the burst ceiling we let you reach before throttling (null when unlimited). The example above shows a Tier 1 wallet; the plan block (omitted here) echoes the plan slug the key was created under. If priority.low is true — seat keys only, never wallet keys — your requests are briefly deprioritized after a rate-limit burst: they still go through, just queued behind other traffic. service_mode.current is interactive in normal operation and low_interactivity during exceptionally heavy days, with resets_at the exact time interactive mode resumes. concurrent_sessions is this server's view; concurrency is enforced fleet-wide.
History: GET /v1/usage/history
Bucketed history for your account, up to 90 days back. Pass from, to, and granularity (hour or day). Each bucket breaks down requests, weighted requests, tokens (in / out / cached), peak concurrency, and a machine-readable error_category when something failed.
curl "https://api.code.umans.ai/v1/usage/history?from=2026-06-01T00:00:00Z&to=2026-06-22T00:00:00Z&granularity=day" \
-H "Authorization: Bearer sk-your-umans-api-key"Scoped to the authenticated key's account — you can't read another account's usage. Add scope=mine to narrow an org seat's view to its own keys. When summing tokens across the Anthropic and OpenAI routes, prefer tokens_in_total / tokens_in_uncached — the legacy tokens_in counts cache reads differently per route.
Service status
Live status, uptime, and per-model speed (median time to first token and output tokens per second) are published at status.umans.ai. The same data is available from the CLI and the API.
From the CLI: umans health
$ umans healthCurrent status band, 24h uptime, and median TTFT / output speed per model. Pass --json for the raw response.
Snapshot: GET /v1/status
Public health snapshot: a status band (operational, degraded, or major_outage), 24h uptime, median TTFT, and median output tokens per second, overall and per model.
curl https://api.code.umans.ai/v1/status \
-H "Authorization: Bearer sk-your-umans-api-key"History: GET /v1/status/history
Bucketed history for the public metrics (uptime_pct, ttft_ms, output_tokens_per_second), up to 90 days back. Pass from, to, granularity (minute, hour, or day), and optionally metric and model.
curl "https://api.code.umans.ai/v1/status/history?granularity=day&metric=uptime_pct" \
-H "Authorization: Bearer sk-your-umans-api-key"Liveness: GET /health
An unauthenticated probe that returns OK when the gateway is up. Good for uptime monitors; /v1/status is the richer, per-model view.
Tool-Specific Setup
Claude Code Official Docs →
Using the CLI (Recommended):
umans claude # Default: umans-coder (our current pick)
umans claude --model umans-kimi-k3 # Kimi K3: 1M context, native vision, max reasoning by default
umans claude --model umans-glm-5.3 # GLM 5.3: Z.ai's flagship coding model
umans claude --model umans-flash # Light, high-interactivity complement
umans claude --websearch native # Umans web search: Kimi-backed path
umans claude --websearch exa # Umans web search: Exa-backed path
umans claude --websearch none # Disable server-side search; pass your own web_search tool through--websearch selects the backend for our server-side web search: native for the Kimi-backed path, exa for the Exa-backed path, or none to turn it off and pass your own web_search tool through to the model unchanged. Applies only to umans claude.
Available Models:
| Model | Provider | Capabilities | Best For |
|---|---|---|---|
| umans-coder | Our current pick * | Follows the routed model | Default: we choose the best for you |
| umans-kimi-k3 | Kimi K3 | Text, Vision, WebSearch | Frontier-class: 1M context, native vision |
| umans-glm-5.3 | GLM 5.3 | Text, WebSearch | Z.ai's flagship coding model (1M context) |
| umans-deepseek-v4-pro-0813 | DeepSeek-V4-Pro-0813 | Text, WebSearch | Long-context coding flagship (1M context) |
| umans-deepseek-v4-flash-0731 | DeepSeek-V4-Flash-0731 | Text, WebSearch | Cheapest production model (1M context) |
| umans-flash | Qwen3.6-35B-A3B-FP8 | Text, Vision, WebSearch | High-interactivity light model; pair with umans-coder |
* umans-coder routes to our current pick; capabilities follow the routed model, and the live target is always on GET /v1/models/info. See our model selection methodology at blog.umans.ai.
Manual configuration:
export ANTHROPIC_BASE_URL=https://api.code.umans.ai
export ANTHROPIC_AUTH_TOKEN=sk-your-umans-api-key
claude --model umans-coderOpenCode Official Docs →
Using the CLI (Recommended):
umans opencode # Default: umans-coder
umans opencode --model umans-flash # Light, high-interactivity complement
umans opencode --model umans-kimi-k3 # Use Kimi K3
umans opencode --model umans-glm-5.3 # Use GLM 5.3umans opencode --setup writes the Umans provider config into OpenCode's global config (~/.config/opencode/opencode.json, or $XDG_CONFIG_HOME/opencode/opencode.json if set), so OpenCode Desktop picks up the same models as the CLI.
Manual configuration (add to ~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"model": "umans/umans-coder",
"provider": {
"umans": {
"npm": "@ai-sdk/openai-compatible",
"name": "Umans AI",
"options": {
"baseURL": "https://api.code.umans.ai/v1",
"apiKey": "sk-your-umans-api-key"
},
"models": {
"umans-coder": {
"id": "umans-coder",
"name": "Umans Coder",
"modalities": { "input": ["text", "image"], "output": ["text"] }
},
"umans-flash": {
"id": "umans-flash",
"name": "Umans Flash",
"modalities": { "input": ["text", "image"], "output": ["text"] }
},
"umans-kimi-k3": {
"id": "umans-kimi-k3",
"name": "Umans Kimi K3",
"modalities": { "input": ["text", "image"], "output": ["text"] }
},
"umans-glm-5.3": {
"id": "umans-glm-5.3",
"name": "Umans GLM 5.3",
"modalities": { "input": ["text"], "output": ["text"] }
},
"umans-deepseek-v4-pro-0813": {
"id": "umans-deepseek-v4-pro-0813",
"name": "Umans DeepSeek V4 Pro",
"modalities": { "input": ["text"], "output": ["text"] }
},
"umans-deepseek-v4-flash-0731": {
"id": "umans-deepseek-v4-flash-0731",
"name": "Umans DeepSeek V4 Flash",
"modalities": { "input": ["text"], "output": ["text"] }
}
}
}
}
}This is the full lineup today; the live list is always at GET /v1/models.
Cursor IDE Official Docs →
Video Demo: Setting up Cursor with Umans Code
- Open Cursor Settings → Models
- Enable Override OpenAI Base URL
- Set the base URL to:
https://api.code.umans.ai/v1 - Paste your Umans API key in the API key field
- Add one or more custom models — any id from the :
umans-coder(default),umans-flash,umans-kimi-k3,umans-glm-5.3,umans-deepseek-v4-pro-0813,umans-deepseek-v4-flash-0731(the DeepSeek and GLM ids are text-only on this route) - Select the model you want in the model dropdown
Zed Official Docs →
Video Demo: Setting up Zed with Umans Code
Zed supports custom OpenAI-compatible providers. Configure it with the same base URL and API key you'd use for any BYOK tool:
- Base URL:
https://api.code.umans.ai/v1 - API Key: Your Umans API key
- Model:
umans-coder,umans-flash,umans-kimi-k3,umans-glm-5.3,umans-deepseek-v4-pro-0813,umans-deepseek-v4-flash-0731— any id from the live catalog (GET /v1/models)
Crush (Charm Bracelet) Official Docs →
Add to your Crush configuration ( ~/.config/crush/config.json ):
{
"$schema": "https://charm.land/crush.json",
"providers": {
"umans": {
"type": "anthropic",
"base_url": "https://api.code.umans.ai",
"api_key": "sk-your-umans-api-key",
"models": [
{
"id": "umans-coder",
"name": "Umans Coder",
"default_max_tokens": 50000,
"can_reason": true
},
{
"id": "umans-flash",
"name": "Umans Flash",
"default_max_tokens": 50000,
"can_reason": true
},
{
"id": "umans-kimi-k3",
"name": "Umans Kimi K3",
"default_max_tokens": 50000,
"can_reason": true
},
{
"id": "umans-glm-5.3",
"name": "Umans GLM 5.3",
"default_max_tokens": 50000,
"can_reason": true
},
{
"id": "umans-deepseek-v4-pro-0813",
"name": "Umans DeepSeek V4 Pro",
"default_max_tokens": 50000,
"can_reason": true
},
{
"id": "umans-deepseek-v4-flash-0731",
"name": "Umans DeepSeek V4 Flash",
"default_max_tokens": 50000,
"can_reason": true
}
]
}
}
}Every model we serve works the same way — the live list is at GET /v1/models.
Pi Extension →
Pi has a dedicated Umans provider extension that makes integration effortless. No manual base URL or env-var fiddling. Install it, sign in, paste your key, and you're done.
- Install the pi-provider-umans extension from the Pi package registry.
- Run
/loginin Pi. - Choose your Umans subscription when prompted.
- Paste your Umans API key (from app.umans.ai/billing → API Keys).
- Voilà. Pi is wired to the Umans backend.
Big thanks to @karutoil for the pi-provider-umans extension and the lovely open-source collaboration. We're lucky to keep building this together. ❤️
omp (Oh My Pi) omp.sh →GitHub →
Oh My Pi (omp) is a terminal coding agent, and it now ships Umans as a native built-in provider. Install omp, sign in once, and you're on our models — no config file to edit.
Native provider (simplest):
# Install omp from https://omp.sh, then inside omp:
/login umans # Select the Umans provider and paste your API key
# Or set it without a prompt:
export UMANS_AI_CODING_PLAN_API_KEY=sk-your-umans-api-keyomp discovers the Umans model list from /v1/models/info automatically, so every model we serve shows up in its picker.
Or use the umans CLI:
umans omp # Launch omp wired to Umans (installs it if needed)
umans omp --setup # Make a bare 'omp' use Umans by default (and cap concurrency to your tier)
umans install omp # Install omp (Oh My Pi)After umans omp --setup, running bare omp uses the Umans backend by default.
DeepSeek Harness GitHub →
DeepSeek Harness (DSH) is an open-source agent harness from deepseek-ai. Add Umans as a custom OpenAI-compatible provider in ~/.dsh/settings.yaml:
llm-pi-ai:
providers:
umans:
displayName: Umans AI
apiKeyEnv: UMANS_AI_API_KEY
api: openai-completions
baseURL: https://api.code.umans.ai/v1
models:
- id: umans-coder
- id: umans-flash
- id: umans-kimi-k3
- id: umans-glm-5.3
- id: umans-deepseek-v4-pro-0813
- id: umans-deepseek-v4-flash-0731Then set the credential once (per request the harness reads $UMANS_AI_API_KEY):
export UMANS_AI_API_KEY=sk-your-umans-api-keyOr use the umans CLI:
umans setup dsh # Write the Umans provider into ~/.dsh/settings.yamlThe harness's Models settings can also Fetch available models from our GET /v1/models endpoint instead of hand-listing them. umans-coder and umans-glm-5.3 are always-thinking (no Off level); the other models expose their reasoning levels per the catalog. GLM 5.3 is text-only on this route.
Any BYOK Tool
Umans Code exposes both OpenAI-compatible and Anthropic-compatible endpoints. If your tool lets you set a custom base URL and API key, it works. Configure with:
- Base URL:
https://api.code.umans.ai/v1(OpenAI-compatible) orhttps://api.code.umans.ai(Anthropic-compatible) - API Key: Your Umans API key (starts with
sk-) - Model:
umans-coder(default),umans-flash,umans-kimi-k3,umans-glm-5.3,umans-deepseek-v4-pro-0813, orumans-deepseek-v4-flash-0731— the full live list is atGET /v1/models
Desktop App with Umans
Prefer a GUI over the terminal? Try OpenCode Desktop. It is open-source and talks to any OpenAI-compatible backend, which is the kind of tool we enjoy working with.
The models we serve are open-weight too, so your whole stack stays open and auditable. Nothing here is designed to lock you in.
One-command setup
The fastest path: run the CLI setup once and OpenCode Desktop picks up the Umans provider automatically.
# Install the Umans CLI (one-time)
curl -fsSL https://api.code.umans.ai/cli/install.sh | bash
# Write the Umans provider into OpenCode's global config
umans opencode --setupThis writes to ~/.config/opencode/opencode.json (or $XDG_CONFIG_HOME/opencode/opencode.json if set). Launch OpenCode Desktop and select any umans/* model from the model picker.
Manual configuration
If you'd rather edit the config file yourself, use the JSON snippet from .
Code from Your Phone
Keep a long-running agent working on your main machine and drive it from your phone over a secure private network. The stack is four pieces that each do one thing well:
- tmux: persistent terminal sessions that survive disconnects.
- Tailscale: zero-config mesh VPN; your machine gets a private
100.x.x.xIP reachable only from your own devices. No port-forwarding. - Termius: mobile SSH client with proper key handling and a touchscreen-friendly terminal.
- umans claude: your agent, running inside the tmux session.
Based on Emre Işık's walkthrough: Code from your phone like a boss.
1. Prepare your machine (macOS / Linux)
# Install tmux, Tailscale, and the Umans CLI
brew install tmux tailscale
curl -fsSL https://api.code.umans.ai/cli/install.sh | bash
# Sign in to Tailscale and note your IP (100.x.x.x)
sudo tailscale up
tailscale ip -4Sane tmux defaults (optional):
cat > ~/.tmux.conf <<'EOF'
set -s escape-time 1
set -g mouse on
set -g default-terminal "screen-256color"
set -g history-limit 10000
set -g base-index 1
setw -g pane-base-index 1
EOF2. Enable SSH
- macOS: System Settings → General → Sharing → enable Remote Login.
- Linux:
sudo systemctl enable --now ssh. - Verify locally:
ssh yourusername@localhost.
3. Add a reattach-or-create helper
Add this to ~/.zshrc (or ~/.bashrc) so one command always drops you back into the same session:
function umans-tmux() {
if tmux has-session -t umans 2>/dev/null; then
tmux attach -t umans
else
tmux new -s umans 'umans claude'
fi
}4. Connect from your phone
- Install the Tailscale app on your phone and sign in with the same account.
- Install Termius (or any SSH client you prefer).
- Add a new host in Termius:
- Host: your Tailscale IP (
100.x.x.x) - Username: your machine username
- Port:
22
- Host: your Tailscale IP (
- Connect, then run
umans-tmux.
5. Survive every disconnect
Ctrl+bthenddetaches the session. The agent keeps running.- Reconnect later from anywhere and run
umans-tmuxagain to reattach exactly where you left off. tmux list-sessionsshows every session, including detached ones.
Personal Assistants (Telegram, WhatsApp, Discord)
Drive Umans from the chat apps you already live in. Tools like AutoClaw expose Telegram, WhatsApp, and Discord channels that you can wire up to any OpenAI-compatible model, including Umans.
Heads up: these assistants run on your machine and act on messages you send (or receive). Review the permissions you grant to each channel carefully: anything the assistant can do, the bridged chat can trigger.
Configure Umans as the model
Open the app's Settings → Models & API, click Add Model, and fill in:
| Field | Value |
|---|---|
| Provider | Custom |
| Model ID | umans-coder |
| Display Name | umans-coder |
| API Key | sk-your-umans-api-key |
| API Protocol | OpenAI |
| Base URL | https://api.code.umans.ai/v1 |
Click Connectivity Test to verify the endpoint, then Save. Any Umans model works here: swap umans-coder for umans-flash, umans-kimi-k3, umans-glm-5.3, umans-deepseek-v4-pro-0813, or umans-deepseek-v4-flash-0731 if you prefer — the full live list is at GET /v1/models.
Connect a channel
Follow the app's own instructions to connect Telegram, WhatsApp, or Discord. Once a channel is linked and Umans is selected as the model, messages you send in that channel are handled by the assistant running locally on your machine.
Troubleshooting
CLI Issues
"Command not found: umans"
- Ensure
~/.local/binor/usr/local/binis in your PATH - Run
source ~/.bashrcorsource ~/.zshrcafter installation
"Authentication failed"
- Run
umans logoutto clear saved credentials - Run
umans claudeagain to re-authenticate
Browser does not open
- Copy the URL shown in the terminal and open it manually
- The CLI displays a localhost callback URL - authentication will complete when you visit the URL
Connection Issues
"401 Unauthorized"
- Your API key may be expired or revoked
- Generate a new key in the Dashboard
"400: Unknown model"
- The model ID in your request does not exist. The error message lists every valid ID and usually suggests the one you meant: copy it exactly.
- IDs start with
umans-. Names likegpt-4oordeepseek-v4-flashare not valid here. - Using
claude-*names, like Claude Code's defaults? Those still work, see the mapping under Models. - Changed September 2, 2026: before this date, an unknown ID ran on the default model. Now it stops with this error instead.
"Rate limit exceeded"
- You have hit your wallet tier's burst limits (your balance is the spend limit; the tier only bounds burst)
- Check your usage in the Dashboard, wait for the rolling window to free capacity, or top up to grow your tier
Streaming interruptions
- For long-running sessions, some networks may drop idle connections
- Check your network stability or try a wired connection
Windows-Specific
The Umans CLI runs natively on Windows. Install it from cmd:
curl -fsSL https://api.code.umans.ai/cli/install.cmd -o install.cmd && install.cmd && del install.cmdThen run umans claude. If you were using WSL only to launch Claude with Umans, you no longer need it.
Prefer manual setup? Set the environment variables in PowerShell:
$env:ANTHROPIC_BASE_URL="https://api.code.umans.ai"
$env:ANTHROPIC_AUTH_TOKEN="sk-your-umans-api-key"FAQ
What models does Umans Code use?
Umans Code serves the best open-source models available. We do the hard work of evaluating and selecting so you don't have to. Currently:
- umans-coder: our recommended default. We continuously evaluate and route to what works best; the live target is always on
GET /v1/models/info. - umans-kimi-k3: Kimi K3, Moonshot's frontier-class open model. 1M context, native vision, max reasoning by default.
- umans-glm-5.3: Z.ai's flagship coding model on a 1M context window. Always thinks (dial low to max).
- umans-deepseek-v4-pro-0813: the long-context coding flagship (1M context, high-effort reasoning by default).
- umans-deepseek-v4-flash-0731: the cheapest production model in the lineup, and the default for new chats on app.umans.ai.
- umans-flash: light, high-interactivity model (Qwen3.6-35B-A3B-FP8) targeting 200+ tps. A workflow complement, not a headline coder. Pair it with
umans-coderthe way you would pair Haiku or Sonnet with Opus.
Kimi K2.7-Code and GLM 5.2 retire on September 10, 2026 (they keep serving until the cutoff) — see the retired-models note under Models.
We publish our model evaluations and reviews at blog.umans.ai.
How can you offer this pricing sustainably?
Fair question. We're not reselling API calls or burning cash on each request. A few choices, taken together, make the economics work:
- We run inference on our own GPU infrastructure. No per-token margin paid to a frontier lab.
- We serve open-weight models, selectively. Just the best coding models (Kimi, GLM), and only the ones with architectures that scale efficiently. We don't serve every model on the market.
- We tune for agent workloads, not high-interactivity chat. Long-running sessions have a different shape; our SLOs reflect that and let us serve more developers per GPU.
- We accept thinner margins than the frontier labs. SemiAnalysis has shown that in 2026 the closed labs are earning healthy inference margins. That's not where we choose to sit.
Openness is also a principle, not just a cost lever: we believe the best coding models will be open-weight, and building on them lets us pass savings on to developers.
Can I use my own Claude Code license?
Yes. If you have a Claude Code subscription with Anthropic, you can use claude to run Claude Code with your Anthropic subscription. Use umans claude when you want to use Claude Code powered by Umans (frontier open-source models, billed per token). Switch between them anytime.
Is my data secure?
Your code and conversations are processed through our infrastructure. We do not train on your data. Enterprise customers can opt for self-hosted deployments where all data remains within their infrastructure.
What happens if I hit my usage limit?
Usually nothing dramatic. There is headroom past the stated number before hard enforcement, then requests return a rate-limit error that coding agents retry automatically, and capacity comes back on its own as the rolling five-hour window moves. The full mechanics, including concurrency, request weights, and the automatic pause, are in Limits.
Can I use the same API key for multiple machines?
Yes, across your own machines. Usage simply bills to your wallet per token, wherever the key runs. Keep the key to yourself, though: anyone holding it spends your balance. For teammates, use an organization wallet — shared budget, per-member keys, per-key audit — with service accounts for shared automations.
Support
Need help?
Archived — no longer available. Subscription plans were sunset on August 1, 2026. This section is kept for reference only; everything outside it describes today's pay-per-token offering.
Archive: subscription plans (sunset August 1, 2026)
Until August 1, 2026, Umans Code also came in two flat monthly plans for individual coding: Code Pro (200 effective requests per rolling 5-hour window, up to 5 requests in flight) and Code Max (unlimited tokens, no request window, up to 4 in flight). A plan covered one human coding interactively in the tools they already used, on every machine they owned — never shared, never powering automations.
Plan keys carried mechanics built for flat-rate abuse protection: a five-hour automatic pause after repeated concurrency abuse (with self-reactivation that rotated keys), low-interactivity mode on exceptionally heavy days, and fair-use enforcement. None of these apply to wallet keys, which bill per token and are never paused.
At the sunset, every remaining subscription was canceled and refunded (monthly: the last payment in full; yearly: prorated to the cutoff), and founding members kept their ★ Founding badge and perks. The story is on blog.umans.ai.