Skip to content

Budget and cost#

ATLAS prices every AI request when it happens and caps spend before a request is sent. It also summarises spend in monthly statements. You can see what you pay for and avoid surprise overspend. One exception: a stream already running can overrun its last call.

How spend is counted#

  • ATLAS prices every request that reaches a provider once, in euros, at the moment it happens. That price never changes afterwards.
  • Failed and cancelled requests count too when they reached a provider and used tokens, normally on input tokens only. Requests the provider rejected or that ATLAS refused cost nothing. For more information, see Pricing and cost.
  • A model without a price costs nothing and counts for nothing. A price of zero is genuinely free. The model lists warn you about models with no price.
  • Budgets and statistics add up the same totals, so the figure on a dashboard is the figure that can block a request.
  • Days and months start at midnight in your organisation's business time zone.

The big picture#

  1. Cost is frozen per request. ATLAS prices each request from the model's prices, converts it to euros and applies your contract terms. Later changes to prices, exchange rates or contracts never rewrite history.
  2. Budgets are ceilings in a tree. A budget on a space caps everything beneath it. The tightest ceiling in the chain wins.
  3. Enforcement happens before the call. The gateway checks spend against the ceilings and refuses a request when one is used up.
flowchart LR
  P[Model prices] --> C[Cost calculation]
  FX[Exchange rate] --> C
  K[Your contract] --> C
  C --> A[(Usage record with frozen cost)]
  A --> S[Spend so far]
  S --> E[Budget check]
  S --> ST[Statistics]
  S --> B[Monthly statements]
  T[Space budgets] --> E
  E -->|budget exceeded| R[Request refused]

How a request is priced#

Stage What happens
Native cost Tokens multiplied by the model's prices. Cached input, cache writes, reasoning and audio, and non-token units such as seconds or characters, each use their own rate.
Currency conversion The native cost is converted to euros at the exchange rate in force. Models priced in euros need no conversion.
Margin The contract's percentage and optional flat fee per request.
Billed cost Converted cost plus margin. Budgets, statistics and statements use this figure.
  • Cache and reasoning. Cache reads are cheaper than ordinary input and cache writes cost more. Reasoning tokens are part of the output and are never charged twice. If a provider doesn't report a category, it's left empty rather than shown as zero.
  • What you see. Your organisation sees total cost, which is list-price cost plus the platform fees. The dashboard shows the platform fees as a separate figure. It doesn't show ATLAS's own provider-side cost for platform models.

Currencies and exchange rates#

Billing is always in euros. A model may be priced in euros, US dollars or pounds. ATLAS converts its cost to euros using daily reference rates. If a rate is unavailable when a request is made, the request still succeeds. Its cost shows as unavailable and isn't counted against budgets. ATLAS doesn't fill in unavailable costs afterwards. If you see this, ask your ilionx contact.

Budget tree#

You can set budgets at every level of the space tree except the organisation root.

flowchart TD
  ORG["Organisation (root, no budget)"] --> D["Division: €10,000"]
  D --> U["Unit: €6,000"]
  D --> U2["Unit: €3,000"]
  U --> T["Team: €2,000"]
  T --> M1[Member A]
  T --> M2[Member B]
  • Effective ceiling. The lowest of a space's own budget and every budget above it. A space can't be unlimited beneath a limited parent, so it must set its own budget.
  • Tighten only. A child's budget can never exceed what its parents leave. The budgets of a space's children can never add up to more than the space's own budget.
  • Set from above. An Admin or a manager of a parent space sets a space's budget. A space's own manager can't raise their own ceiling.
  • Unallocated amount. ATLAS shows the part of a space's budget not yet handed to children for information.
  • Moving a space resets budgets beneath it, because the old ceilings no longer apply.
  • Budget or allocation. The app says "Budget" at the top levels. It says "Allocation" lower down, where a space receives a share of its parent's money.

What each space type controls#

Type What it controls
Organisation (root) Nothing of its own. It shows the total handed out to its direct children.
Division, Unit A monthly budget. They govern and delegate, and do not spend.
Team A monthly budget, daily and monthly spending limits, and how the budget is split between members.

Splitting a team budget#

Mode Behaviour
Pool Everyone draws from one shared monthly budget.
Fixed Each member has a euro amount. The amounts cannot add up to more than the team budget.
Proportion Each member has a percentage, and the percentages add up to exactly 100.

With Fixed or Proportion, a member without a share is blocked, and new members start blocked until you give them a share. When someone leaves, a fixed amount is freed and proportions are rescaled to add up to 100 again. Daily and monthly spending limits are independent caps on the team's total.

Enforcement#

The gateway checks budgets as the last step before forwarding a request. For personal keys acting under a team space, it checks in this order:

  1. The budgets of the space and the spaces above it.
  2. The member's share.
  3. The team's daily and monthly limits.

The first breach stops the request.

flowchart TD
  R[Request] --> Q{Key acts under}
  Q -->|Team space| A1{Budget of the space or above used up?}
  A1 -->|yes| X[Refused: budget exceeded]
  A1 -->|no| A2{Member share used up?}
  A2 -->|yes| X
  A2 -->|no| A3{Daily or monthly limit reached?}
  A3 -->|yes| X
  A3 -->|no| OK[Forwarded to the provider]
  Q -->|Project| M{Funding mode}
  M -->|Funded| P{Funding exhausted?}
  M -->|Tracked| L{Monthly limit set and reached?}
  P -->|yes| X
  P -->|no| OK
  L -->|yes| X
  L -->|no| OK
  • Checked before the call. A long response may run past the limit by one request. The next request is refused.
  • Refusals are explicit. You get a 429 (402 for Anthropic-compatible clients) with a message saying that the budget is used up. Retrying won't help until an Admin raises the budget or the new period starts.
  • Safe by default. If ATLAS can't read a project's budget position, it refuses the request with the usual budget error. The message says this is an internal failure, not an exhausted budget. A budget that can't be checked never lets a request through.
  • Two separate envelopes. Personal keys acting under a space draw on the space budgets. Keys acting under a project draw only on the project's funding or monthly limit, and space budgets don't apply. For more information, see Projects.
  • What counts. The billed cost of every request outcome made within the budgeted scope.
  • Time zone. Periods follow the organisation's business time zone (default Europe/Amsterdam), including daylight saving.

Members see their own position, and managers see per-member utilisation. Members can see the budget behind each of their keys on the API keys page. The page explains a blocked key before the first failed call.

Statements#

Closed months are frozen documents. The current month is a live preview.

Document For Content
Monthly invoice Organisation AI usage through ATLAS per model and AI service, contract fees (platform fee, seats, licence) and the total
Your AI subscriptions Organisation An informational estimate of what your own provider accounts cost. It is not an invoice.
Contract revision Organisation The contract as it took effect, including the billing schedule
Internal allocation Organisation What each unit used, plus projects and anything not allocated, for internal charge-back
Unit cost report Unit managers What one unit and its teams used in the month

Project statements are described in Projects. Who can open each document, and the exact billing rules, are in the Budgets reference.