# Cost per Action

URL: /systems/finance/cost-per-action · Id: `page:systems/finance/cost-per-action`

> How an Action's spend is measured, kept inside its Limits, rolled up per Verb, Offer and Customer, and turned into a floor under every Price.

Every [Action](/business/nouns/action) settles what it cost: compute, model tokens, outside calls and human minutes. [Costs](/business/nouns/cost) roll up per [Verb](/business/nouns/verb), [Offer](/business/nouns/offer) and [Customer](/business/nouns/customer), and the rollup sets the floor under every [Price](/business/nouns/price).

## What an Action costs
An Action that costs anything posts a Cost to the [Startup](/business/nouns/startup) it ran in. `Cost.action` names the Action, so every dollar traces to the call that spent it.

| Kind | Settles |
| --- | --- |
| `model` | Model tokens, priced per token |
| `upstream` | Calls to outside data and execution services, misses included where they bill |
| `human` | Minutes a [Human](/business/nouns/human) spends on a [Task](/business/nouns/task), an [Approval](/business/nouns/approval) or a rescue |
| `platform` | Compute, storage, messages and the platform's share |
| `shared` | A slice of a cost many Startups share, split by the `cost.allocation` [Policy](/business/nouns/policy) |

A human minute costs the same whether a founder or an operator spends it. A capability bought from a sibling posts at its transfer price.

## Reserve, settle, release
An outside call's price is unknown until it settles: a routed lookup can bill a miss, and a video job bills by length. So a priced call reserves first: `Action.reserved` holds the most it can cost against its [Limits](/business/nouns/limit), billed misses included.

The Limit check reads the reservation, never the expected price. Fifty agents asking for a $6 video job each reserve $6, so a $100 Limit admits 16 of them at once. Concurrent calls never commit more than the Limit allows.

The call then settles at its actual cost, and the unused reservation is released at once. Each billed attempt posts its own Cost, numbered in `Cost.attempt`.

| Outcome | Records |
| --- | --- |
| Settles under the reservation | The actual cost; the rest is released |
| Settles over the reservation | The full amount, with the excess in `Cost.overrun`; an overrun past a Limit opens an Approval |
| Fails | No Cost |
| Declined by the upstream | Only what the upstream bills, and the Action ends `refused` |

## Rollups
Costs roll up along the records that caused them. An Action belongs to an [Order](/business/nouns/order), a Customer, an Offer or a [Play](/business/nouns/play), so three numbers fall out of one ledger.

Cost per Verb is the distribution of what each call of one Verb settled, with its median and 95th percentile. Cost per Offer adds the Verbs an Offer's [Entitlements](/business/nouns/entitlement) grant, weighted by use. Cost per Customer is what serving one Customer cost in a month, set beside what that Customer paid.

These rollups feed [Contribution margin](/agents/finance#contribution-margin) and every number in [unit economics](/systems/finance/unit-economics). Read them with [`Cost.list`](/business/nouns/cost/list), filtered by Action, Verb or Startup.

## The contribution floor
[`Offer.publish`](/business/nouns/offer/publish) checks the Offer's Price against its Cost before any buyer sees it. It reads the [Portfolio](/business/nouns/portfolio)'s observed Cost per Verb for each Entitlement the Offer grants. Once the Startup's own readings are large enough to trust, the floor shrinks toward them.

It computes contribution for the median Customer and for the 95th-percentile Customer, against the Startup's target margin in the [Setting](/business/nouns/setting) `pricing.targetMargin`.

| Median Customer | 95th-percentile Customer | Result |
| --- | --- | --- |
| Clears the floor | Clears the floor | Publishes |
| Clears the floor | Below break-even | Publishes with a usage Limit at break-even |
| Below the floor | Any | Refused with `below-contribution-floor`, naming the floor Price |

A $29 plan whose heaviest users trigger $60 of model calls never goes Live as written. It publishes with a monthly usage Limit that keeps those users at break-even, or it is repriced.

## Next
- [Unit economics](/systems/finance/unit-economics): margin, payback and lifetime value from these Costs.
- [Real-time books](/systems/finance/real-time-books): how each Cost posts as an [Entry](/business/nouns/entry).