Skip to content

Budgets and spend caps

Give a person, team or project a single AI budget — and have it cover every tool they use. £1000/month for John, full stop, whether that's spent on Cursor, Claude, Veo, Notion AI or anything else Flowstate sees.

There are two rule types behind this. Use the right one for the job.

The two rule types

Rule typeWhat it capsUse when
MONTHLY_SPEND_CAP_PER_SUBJECTOne subject's spend on one provider, per calendar month"No engineer should spend more than $200/mo on Claude."
BUDGET_CROSS_PROVIDEROne subject's aggregate spend across many providers, in a rolling window"John gets £1000/mo total AI budget — wherever he spends it."

Both rules live in the active policy. Both raise signals when breached. Both can be set to WARN (capture + nudge) or BLOCK (capture + reject).

In development

BUDGET_CROSS_PROVIDER is partially live. The rule type, params schema and policy authoring flow ship today; the runtime evaluator that adds up cross-provider spend and enforces the cap at request time is currently in development. Until it ships, you can draft and activate cross-provider budget rules — they'll begin enforcing automatically once the evaluator is live. Per-provider caps (MONTHLY_SPEND_CAP_PER_SUBJECT) work end-to-end today. Watch the changelog for the cross-provider release.

Worked example: John's £1000/month

Goal: John (employee emp_a4f2c…) gets a hard cap of £1000 per calendar month across every AI tool.

In AI → Governance → Policy and enforcement, draft a new policy version and add a rule:

json
{
  "ruleType": "BUDGET_CROSS_PROVIDER",
  "scope": { "kind": "EMPLOYEE", "ids": ["emp_a4f2c..."] },
  "severity": "BLOCK",
  "params": {
    "periodMonths": 1,
    "capUsd": 1265,
    "providers": "all"
  }
}

Notes on the params:

  • periodMonths is a rolling window in calendar months. 1 ≈ month-to-date.
  • capUsd takes USD; convert your £1000 at the rate from /workforce/cost-model/exchange-rates (the example uses ~1.265 USD/GBP).
  • providers: "all" means every provider Flowstate currently sees for John — coding tools, chat, image, video, audio, the lot. To restrict to a subset, pass an array of provider slugs (["anthropic", "midjourney", "elevenlabs"]).

Activate the policy. From John's next request, his MTD aggregate is checked against £1000.

What John sees

  • At ~80% of the cap — a nudge appears on /me/ai-usage. Subject (John) gets the standing card update; his manager sees an item in the Alerts queue.
  • At 100% — if the rule is BLOCK, the next request is rejected by the Flowstate Agent with a structured error: rule name, % of cap consumed, and a link to request an exemption.
  • At 100% with WARN — request still goes through; signal raised at WARN severity and queued in /ai-governance/governance/alerts for the policy owner.

The behavioural signal that fires carries a stable reason code so dashboards and downstream SIEM forwarders can identify the cause without string-matching against display text. See Alerts and signals for the full reason-code reference.

Subject scopes

Both rule types accept the same scope model. Mirror what's in Enforcement:

Scopescope.kindUse case
Whole organisationALLOrg-wide spend ceiling.
One team (and descendants)TEAM"Mobile team's total AI spend."
One projectPROJECTCap per project; useful for fixed-budget client work.
One cost centreCOST_CENTREGroup caps by where the cost lands.
One employee or contractorEMPLOYEEThe John example above.
One service accountSERVICEProduction AI workloads. See Service accounts.

A subject can be covered by more than one rule. The strictest match wins.

Provider scope

providers: "all" is the right default — it covers every AI host Flowstate recognises (catalog-listed, hostname-recognised, billing-connectable). See AI Catalog for the four coverage states.

Use an explicit list when you want to budget a modality:

json
{ "providers": ["midjourney", "ideogram", "adobe-firefly"] }

That's "John gets £200/mo for image-gen, separate from his coding budget."

Period

periodMonths is a rolling window — 1 is the standard month-to-date cap. Larger values (3, 6, 12) give you quarterly or annual budgets that smooth out spiky months. The window slides daily; there's no calendar-month reset.

Two budgets, one number

A common ask: "Give John £1000/mo total, but no more than £300 of it on a single video tool." Layer two rules:

  1. BUDGET_CROSS_PROVIDER for John, providers: "all", cap £1000.
  2. MONTHLY_SPEND_CAP_PER_SUBJECT per video provider in the catalog, cap £300.

The aggregate fires when the £1000 is consumed across everything; the per-provider cap fires earlier if a single video tool runs away.

What it isn't

This is a policy spend cap — a control that fires at the request line. Not the same thing as a Finance budget snapshot, which is a versioned record of what the books say should happen. Budget snapshots support variance analysis and quarter-end reporting; spend caps stop the spend in the first place. They share a vocabulary (you'll set both in GBP/USD) but live in different parts of the platform.

Permissions

ActionPermission
View budget rulesAI_GOVERNANCE_VIEW
Draft a budget ruleAI_POLICY_ADMIN
Activate a draft containing budget rulesAI_POLICY_ADMIN
See your own standing(no permission required for the subject)

Cross-references

Flowstate Documentation