# Product shapes

Every product has a shape that determines how buyers pay and what you need to
meter. All four shapes share the same integration. The
[API key exchange](/docs/api-key-exchange) and
[usage reporting](/docs/metering-and-usage) work identically, so you can add
or change shapes without touching your code.

| Shape | Base fee | Metering | Exhaustion means |
| --- | --- | --- | --- |
| Pay as you go | None | Required | Spend cap reached |
| Subscription | Recurring | Not required | Plan expired |
| Subscription + included usage | Recurring | Required | Included units used up |
| Prepaid credits | One-time | Required | Balance drawn down |

## Pay as you go

No base fee. Every unit of usage is billed at the plan's meter prices. Use it
when buyers' usage varies a lot or when they want to try your API without a
commitment.

- **Plan fields that matter:** per-meter unit price and bundle size, plus a
  spend cap to protect buyers.
- **What you meter:** everything billable, on every paid action.
- **Exhaustion:** only at the spend cap. Respond
  `402` + `X-ZeroClick-Reason: spend_cap_reached`.

**Example:** $0.50 per 1,000 API requests (bundle size 1,000, unit price
$0.50), spend cap $100/month. A buyer who makes 84,000 requests pays $42.

## Subscription

A flat recurring fee for access. There are no meters. What varies between
plans is entitlements, like `priority-support` or `max-resolution: 4k`.

- **Plan fields that matter:** billing interval, base price, entitlements.
- **What you meter:** nothing. You may still send usage for analytics, but it
  isn't billed.
- **Exhaustion:** only when the plan lapses. ZeroClick calls your `DELETE`
  exchange endpoint to revoke the key; respond to revoked or expired keys
  with `402` + `X-ZeroClick-Reason: plan_expired`.

**Example:** Pro plan at $29/month with `concurrent-jobs: 10`; Starter at
$9/month with `concurrent-jobs: 2`. Your API reads the entitlement and
enforces the difference.

## Subscription + included usage

A recurring fee that includes a usage allowance, with overage billed per
meter. Predictable revenue, plus billing that scales with heavy use.

- **Plan fields that matter:** billing interval, base price, per-meter
  **included units**, overage unit price, credit expiry (`expire` resets the
  allowance each period; `rollover` carries unused units forward), spend cap.
- **What you meter:** everything billable. ZeroClick tracks consumption
  against included units first, then bills overage.
- **Exhaustion:** when included units are gone and overage isn't allowed, or
  the spend cap is hit. Respond
  `402` + `X-ZeroClick-Reason: usage_exhausted`. The agent can then purchase
  more via `/extend`.

**Example:** $19/month including 50,000 API requests, then $0.40 per 1,000.
A buyer who makes 80,000 requests pays $19 + $12 = $31.

## Prepaid credits

Buyers purchase a balance upfront (billing interval `none`) and usage draws
it down at the plan's meter prices. A good fit for agents that prefer paying
once over managing a recurring relationship.

- **Plan fields that matter:** base price (the size of the credit purchase),
  included credits, credit expiry, per-meter prices that define the burn
  rate.
- **What you meter:** everything billable. Each reported unit burns
  `unit price × quantity` from the balance.
- **Exhaustion:** when the balance can't cover the next action. Respond
  `402` + `X-ZeroClick-Reason: usage_exhausted`. The agent tops up at
  `/extend` and retries.

**Example:** $50 credit pack; image generations burn $0.02 each and upscales
$0.08. A generation that would overdraw the balance returns a 402.

## Choosing a shape

Start from how buyers use your API. Variable, occasional work points to
**pay as you go** or **prepaid credits**. Steady consumption points to
**subscription + included usage**. Pure access gating points to
**subscription**. You can run multiple products with different shapes on the
same service.
