Documentation

How Outlay works.

Outlay maps your AI spend to the work that drove it, forecasts cost by scope, estimates planned work before you build it, and holds it to budget — all from read-only connections to the tools you already use. No proxy, no SDK, no changes to your app. Onboarding is through a design-partner pilot; here's what it does and how your data is handled.

Connect your sources — read-only

Setup is about 30 minutes and needs two read-only connections. Nothing is installed in your application; Outlay pulls metadata on a schedule.

SourceConnect withWhat we read
A tracker — GitHub Issues, Jira, or LinearA read-only token / API keyTicket, epic, and team metadata (IDs, titles, status) — to map spend to work.
AI usage — Anthropic Admin API, Cursor admin, or Claude Code transcriptsA read-only admin key / exportPer-call usage: model, token counts, timestamps — never prompt content.
Connect both on the Connect tab in your pilot console. Tokens are stored encrypted at rest, and you can sync on demand or on a daily / weekly schedule.

How spend is attributed to a ticket

Outlay resolves each AI agent's usage back to a ticket via the git branch, the PR→issue link, or a commit trailer. For remote / CI agents where the branch is detached, an explicit work tag (e.g. PROJ-123) makes the join reliable. Every attributed dollar carries a fidelity tier so you know how confident the join is, and unattributable spend is reconciled to the provider invoice — never dropped. Costs are cache-aware, so cached agentic workloads aren't overstated 5–10×.

What you get

  • Spend by ticket, epic, team & engineer — your AI bill mapped to the roadmap, reconciled to the invoice.
  • Forecast by scope — a quarter's cost projected bottom-up from open work, as a range.
  • Estimate planned work — price an epic from its requirements and design docs before you build it, with a confidence band.
  • Budgets & pace guardrails — by overall / team / work-type / project, with alerts before overspend, not at month-end.
  • Measured accuracy — every forecast is back-tested leave-one-out on your own closed tickets, shown with the sample size.
  • CSV export — ticket, work-type, and per-engineer spend, for business.

Walk through all of it interactively in the Product Tour.

Privacy & data flow

Outlay is not a proxy or gateway — your AI calls never flow through us. It connects read-only to your tracker and your provider's usage data, and reads metadata only.

Your toolstracker + AI usage Read-only syncusage counts + ticket ids Outlayspend mapped to work, forecast, budgets
  • Prompts and outputs never reach us. We read your provider's usage metadata, not your traffic.
  • Your API keys stay yours — used by your own tools to call Anthropic directly.
  • Metadata only — task categories, token counts, ticket IDs, and per-request cost figures.
  • Read-only & reversible — connect with read-only tokens; remove Outlay anytime and nothing about your traffic changes (we were never in the path).
Full detail, and a walkthrough for your security reviewer, on Security & privacy.

Enforce a budget by program (optional)

Everything above is read-only — Outlay alerts you before a budget is blown, and your own automation can act on a program.over webhook. If you want a true hard stop, there's an optional in-path mode: run the ModelPilot gateway in front of your Claude calls, and it will block or route down traffic the moment a program is over its cap.

This is the one mode where we're in your path, and it's entirely opt-in. The read-only product above never touches your traffic; you only run the gateway if you want it to enforce.

1. Define a program with a hard cap

In the console, go to Programs and create a program — a budget spanning several teams, projects, or work types (e.g. Platform = team platform + project PLAT). Set Enforcement to Hard cap and choose the action when it's over: block new calls, or route down to a cheaper floor model (e.g. claude-haiku-4-5).

2. Put the gateway in front of your calls

# point your SDK's base_url at the gateway, and turn enforcement on
export MODELPILOT_CONSOLE_URL=https://app.outlay-ai.com
export MODELPILOT_API_KEY=mp_live_…        # from the console API page
export MODELPILOT_ENFORCE=1
uvicorn modelpilot.gateway:app --port 8400

The gateway caches the current verdict from /api/v1/enforcement (refreshed every ~60s) and decides each call locally — no per-request round trip. It's fail-open: if the console is ever unreachable, calls pass through (we never block your traffic because our control plane blipped — only because a budget you set was actually exceeded).

3. Tag each call with its work context

So the gateway knows which program a call belongs to, send one of these headers (the same work tags used for attribution):

HeaderMatches a program member of type
x-modelpilot-work-ticket: PLAT-123project (the PLAT prefix)
x-modelpilot-cost-center: platformteam
x-modelpilot-work-type: featurework type

When a program is over its hard cap, a matching call is either blocked (HTTP 402, budget_exceeded) or returned on the floor model, with an x-modelpilot-enforced response header so you can see it happened. Programs left on Alert only are never blocked — they just fire the program.over webhook.

Start a pilot

Outlay is onboarding its first customers now — read-only, ~2 weeks, free. We'll map your real AI spend to your roadmap, forecast the quarter, and show you where it's headed. Become a customer →