[{"data":1,"prerenderedAt":57},["ShallowReactive",2],{"$f2wn6bdty76kk2":3},{"href":4,"title":5,"description":6,"kind":7,"mark":7,"planned":8,"contributors":9,"provenance":7,"html":10,"headings":11},"\u002Fdocs\u002Fcontrol\u002Fspend","Spend and models","What counts as spend, the caps that hold it, which model a run uses, and the model connections that pay for it.",null,false,[],"\u003Ch2 id=\"your-keys-your-bill\">Your keys, your bill\u003C\u002Fh2>\n\u003Cp>Runs use model connections you add: your own Claude or OpenRouter credentials. The model provider bills you\ndirectly. Zero Human does not resell model usage, and a cheap model is not a budget: caps are.\u003C\u002Fp>\n\u003Ch2 id=\"what-counts-as-spend\">What counts as spend\u003C\u002Fh2>\n\u003Cp>Spend is the cost of model calls: every step of a run, and every chat reply. Tool calls are not spend. Each call is\npriced once, and the same figure is used by every cap, by the run's \u003Cstrong>Cost\u003C\u002Fstrong>, by today's total on \u003Cstrong>Spend\u003C\u002Fstrong>, and by\nan execution's total.\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Connection\u003C\u002Fth>\n\u003Cth>What a call costs\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>OpenRouter API key\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>What OpenRouter reports it billed, plus the provider's own charge when you bring that provider's key to OpenRouter.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Claude Console API key\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The model's list price for the tokens used, cache reads and writes included.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Claude Pro\u002FMax seat\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>A share of the seat's price: the seat's weekly price, times the share of its weekly limit the calls used, spread across them by what they would have cost on an API key. A seat never costs more than an API key would. Usage past the seat's limit is priced at API rates.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>The seat's plan comes from Anthropic, or you set it on the connection (\u003Cstrong>Seat plan\u003C\u002Fstrong> and \u003Cstrong>Monthly price (USD)\u003C\u002Fstrong>).\u003C\u002Fp>\n\u003Cp>A run's \u003Cstrong>Cost\u003C\u002Fstrong> is at the top right of its page. Hover it for the split between API and seat usage and the tokens\nin, out and cached.\u003C\u002Fp>\n\u003Ch2 id=\"caps\">Caps\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Settings → Spend\u003C\u002Fstrong> holds your caps. A cap sits on one layer: the enterprise, a team, a member, a role, or a task.\nAmounts are in US dollars.\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Limit\u003C\u002Fth>\n\u003Cth>What it holds\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Day $\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Money spent today (UTC).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Runs \u002F day\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Runs started today.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Run $\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>What one run should cost. See \u003Ca href=\"#per-run-budgets\">Per-run budgets\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Max model tier\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The most capable \u003Ca href=\"#model-tiers\">tier\u003C\u002Fa> a run may use.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>A run is held by every cap that applies to it: the enterprise's, and those on its team, its member, its task and\nits member's roles. The tightest one wins.\u003C\u002Fp>\n\u003Cp>Today's spend and today's runs are counted for the \u003Cstrong>whole enterprise\u003C\u002Fstrong>. A day cap on a team or a task is compared\nwith everything the enterprise spent today, not only that team's or task's share; the Spend page says so on each row.\u003C\u002Fp>\n\u003Cp>A new enterprise has no caps until you add one.\u003C\u002Fp>\n\u003Ch3 id=\"when-a-cap-is-reached\">When a cap is reached\u003C\u002Fh3>\n\u003Cp>The caps are checked when a run is about to start, before its first model call. If today's spend (with room for the\nnext call) is at a day cap, or today's runs are past a \u003Cstrong>Runs \u002F day\u003C\u002Fstrong> cap, the run does not start. It is parked as\n\u003Ccode>paused_spend\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>It keeps its place: its task and its member stay busy, so later starts of that task wait or are skipped.\u003C\u002Fli>\n\u003Cli>It appears on \u003Cstrong>Blockers\u003C\u002Fstrong> under \u003Cstrong>Paused spend\u003C\u002Fstrong>, with \u003Cstrong>Raise cap\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>A run already under way is not stopped by a day cap. It carries on to the end.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Paused runs start again when you raise a \u003Cstrong>Day $\u003C\u002Fstrong> cap to a higher amount (every paused run in the enterprise is\nqueued again and checks the caps afresh) or turn spend limits \u003Cstrong>Off\u003C\u002Fstrong>. Changing \u003Cstrong>Runs \u002F day\u003C\u002Fstrong> or \u003Cstrong>Run $\u003C\u002Fstrong> does not\nqueue them again, and nothing restarts them at midnight: raise a day cap, turn limits off, or cancel them. Once spend reaches 80% of the tightest day cap, \u003Cstrong>Spend\u003C\u002Fstrong> and \u003Cstrong>Enterprise\u003C\u002Fstrong> warn you and \u003Cstrong>Spend\u003C\u002Fstrong> in the\nsidebar shows a badge.\u003C\u002Fp>\n\u003Cp>Chat replies count toward today's spend too. Before each reply, the day caps on the enterprise and on that member\nare checked; at a cap the member says so and does not reply. See \u003Ca href=\"\u002Fdocs\u002Fwork\u002Fchat\">Chat and plans\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"per-run-budgets\">Per-run budgets\u003C\u002Fh3>\n\u003Cp>A task's \u003Cstrong>Spend USD \u002F run\u003C\u002Fstrong>, and \u003Cstrong>Run $\u003C\u002Fstrong> on a cap, set what one run should cost at most; the tighter of the two\napplies. It is only partly enforced today. On an OpenRouter connection, each model reply is kept short enough for the\nrun to stay within it, and a reply that the limit cuts off fails the run (\u003Ccode>llm_max_tokens\u003C\u002Fcode>). On a Claude connection\nit is not enforced during a run.\u003C\u002Fp>\n\u003Ch3 id=\"turning-spend-limits-off\">Turning spend limits off\u003C\u002Fh3>\n\u003Cp>The switch at the top of \u003Cstrong>Spend\u003C\u002Fstrong> turns spend limits \u003Cstrong>On\u003C\u002Fstrong> or \u003Cstrong>Off\u003C\u002Fstrong> for your enterprise. Off ignores every money\ncap, every run-count cap, the caps' model tiers and the tasks' per-run budgets, for runs and chat alike, and queues\nany paused runs again. Spend is still recorded, and a task's own highest tier still applies. With limits off, the\nrest of the Spend page and the \u003Cstrong>Paused spend\u003C\u002Fstrong> section on Blockers are hidden.\u003C\u002Fp>\n\u003Cdiv class=\"prose__planned\">\n\u003Cp class=\"prose__flag\">Planned\u003C\u002Fp>\n\u003Ch2 id=\"caps-still-to-come\">Caps still to come\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>A month cap.\u003C\u002Fstrong> \u003Cstrong>Month $\u003C\u002Fstrong> can be saved on a cap today, but nothing holds a run to it yet.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Stopping a run mid-way.\u003C\u002Fstrong> A run that reaches a cap will stop before its next paid model call, instead of only\nnew runs being held.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A per-run cap on every connection.\u003C\u002Fstrong> A run that reaches its per-run budget will stop, on a Claude connection as\non OpenRouter.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>An approval threshold.\u003C\u002Fstrong> A run that would spend more than an amount you set will wait at a gate for you before\nits next paid call.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"model-tiers\">Model tiers\u003C\u002Fh2>\n\u003Cp>A tier names a class of model, so a task can ask for &quot;a cheap one&quot; without naming it:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Tier\u003C\u002Fth>\n\u003Cth>For\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>economical\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The cheapest model; fine for API and data work.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mid\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A good mid-priced model.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>frontier\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The most capable, and the most expensive.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>Each tier stands for one model on each provider. The cap form shows which model a tier means on your connection.\u003C\u002Fp>\n\u003Ch3 id=\"which-model-a-run-uses\">Which model a run uses\u003C\u002Fh3>\n\u003Cp>A task's \u003Cstrong>Model\u003C\u002Fstrong> field decides:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>An exact model\u003C\u002Fstrong>, picked from your providers' directories, is the model the run uses. A tier cap does not block\nit; money caps still apply.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Default\u003C\u002Fstrong> uses a tier: the tightest of the tiers on the caps that apply and the task's own highest tier, or\n\u003Ccode>economical\u003C\u002Fcode> when neither sets one.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Every cap carries a \u003Cstrong>Max model tier\u003C\u002Fstrong>, \u003Ccode>mid\u003C\u002Fcode> unless you choose otherwise. So adding a cap also sets the tier your\nDefault runs use.\u003C\u002Fp>\n\u003Cp>Chat has its own setting, \u003Cstrong>Chat model\u003C\u002Fstrong> on \u003Cstrong>Enterprise\u003C\u002Fstrong>, \u003Ccode>economical\u003C\u002Fcode> unless you raise it, and tightened by caps\nlike a run.\u003C\u002Fp>\n\u003Ch2 id=\"model-connections\">Model connections\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Settings → Agents\u003C\u002Fstrong> lists every model connection in the enterprise, whose it is, and whether it can be read. Keys\nare never displayed. \u003Cstrong>Add Agent\u003C\u002Fstrong> adds one:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Provider\u003C\u002Fth>\n\u003Cth>How you connect it\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Claude\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>A Console API key, a setup token, or \u003Cstrong>Connect Claude Pro\u002FMax\u003C\u002Fstrong> to sign in with your seat.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>OpenRouter\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>An API key.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>A connection belongs to the \u003Cstrong>enterprise\u003C\u002Fstrong>, shared by everyone, or to one \u003Cstrong>member\u003C\u002Fstrong>, used for that member's runs and\nchats. A run tries them in this order:\u003C\u002Fp>\n\u003Col>\n\u003Cli>The member's own Claude connection.\u003C\u002Fli>\n\u003Cli>The enterprise's Claude connection.\u003C\u002Fli>\n\u003Cli>The member's own OpenRouter connection.\u003C\u002Fli>\n\u003Cli>The enterprise's OpenRouter connection.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>When a task names an exact model and both providers are connected, the provider that offers that model is tried\nfirst. The OS's own tasks have no member, so they use the enterprise's connections.\u003C\u002Fp>\n\u003Ch3 id=\"when-a-connection-cannot-be-used\">When a connection cannot be used\u003C\u002Fh3>\n\u003Cp>A run never fails for want of a model. It is \u003Cstrong>blocked\u003C\u002Fstrong>, says why, and resumes when the cause clears:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>What happened\u003C\u002Fth>\n\u003Cth>Reason\u003C\u002Fth>\n\u003Cth>Resumes\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>No connection at all\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>llm_not_bound\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>As soon as you add or change a credential, and it tries again hourly\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>The provider refused the credential, or it is out of credit\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>llm_http_401\u003C\u002Fcode>, \u003Ccode>…402\u003C\u002Fcode>, \u003Ccode>…403\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>As soon as you change a credential, and it tries again hourly\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>A Claude seat's usage limit is used up\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>llm_quota_exhausted\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>When the limit resets. \u003Cstrong>Blockers\u003C\u002Fstrong> lists it under \u003Cstrong>No LLM capacity\u003C\u002Fstrong>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>The model does not exist\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>llm_http_404\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>When the model answers again; after an hour it waits for you\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>The OS also checks every ten minutes that each tier's model still exists on your connection. A model the provider\nsays is gone is listed on \u003Cstrong>Blockers\u003C\u002Fstrong> under \u003Cstrong>Models unavailable\u003C\u002Fstrong>, before a run meets it. See\n\u003Ca href=\"\u002Fdocs\u002Fwork\u002Fruns#blocked-runs\">Runs\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"plans\">Plans\u003C\u002Fh2>\n\u003Cp>Your plan sets how long run history is kept (see \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fisolation\">Isolation and retention\u003C\u002Fa>), and what\nyour enterprise includes: members, runs, runner minutes, concurrent runs, schedules and storage. See\n\u003Ca href=\"\u002Fpricing\">pricing\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cdiv class=\"prose__planned\">\n\u003Cp class=\"prose__flag\">Planned\u003C\u002Fp>\n\u003Ch2 id=\"plan-limits\">Plan limits\u003C\u002Fh2>\n\u003Cp>The amounts your plan includes will be enforced. Where a plan says \u003Cstrong>stop\u003C\u002Fstrong>, work past it will not start until you\nmove to a plan that includes more, rather than running on and being billed. Today the plan's included amounts are not\nenforced; your own \u003Ca href=\"#caps\">caps\u003C\u002Fa> and your enterprise's \u003Cstrong>Concurrent runs\u003C\u002Fstrong> setting are what limit work.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"over-the-api\">Over the API\u003C\u002Fh2>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Call\u003C\u002Fth>\n\u003Cth>Scope\u003C\u002Fth>\n\u003Cth>What it does\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fv1\u002Fspend\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>spend:read\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Today's spend and runs, the tightest caps, and every cap.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>PATCH \u002Fv1\u002Fspend\u002Fcaps\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>spend:write\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Add or replace the cap on one layer. Raising a day cap queues paused runs again.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>PATCH \u002Fv1\u002Fspend\u002Fenabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>spend:write\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Turn spend limits on or off: \u003Ccode>{ &quot;enabled&quot;: false }\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fv1\u002Fllm\u002Fmodels\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>llm:read\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The models your connections offer, for a task's \u003Cstrong>Model\u003C\u002Fstrong>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fv1\u002Fllm\u002Fconnections\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>llm:read\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Your model connections, without their keys.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n",[12,16,19,22,26,29,32,36,39,42,45,48,51,54],{"id":13,"text":14,"level":15,"planned":8},"your-keys-your-bill","Your keys, your bill",2,{"id":17,"text":18,"level":15,"planned":8},"what-counts-as-spend","What counts as spend",{"id":20,"text":21,"level":15,"planned":8},"caps","Caps",{"id":23,"text":24,"level":25,"planned":8},"when-a-cap-is-reached","When a cap is reached",3,{"id":27,"text":28,"level":25,"planned":8},"per-run-budgets","Per-run budgets",{"id":30,"text":31,"level":25,"planned":8},"turning-spend-limits-off","Turning spend limits off",{"id":33,"text":34,"level":15,"planned":35},"caps-still-to-come","Caps still to come",true,{"id":37,"text":38,"level":15,"planned":8},"model-tiers","Model tiers",{"id":40,"text":41,"level":25,"planned":8},"which-model-a-run-uses","Which model a run uses",{"id":43,"text":44,"level":15,"planned":8},"model-connections","Model connections",{"id":46,"text":47,"level":25,"planned":8},"when-a-connection-cannot-be-used","When a connection cannot be used",{"id":49,"text":50,"level":15,"planned":8},"plans","Plans",{"id":52,"text":53,"level":15,"planned":35},"plan-limits","Plan limits",{"id":55,"text":56,"level":15,"planned":8},"over-the-api","Over the API",1791124519618]