# Plans and trials (https://upapi.io/docs/plans)



Every number on this page is read at build time from `@upapi/plans`, the same
module the pricing page and the billing system use. It cannot drift from what
you are actually charged.

## Tiers [#tiers]

| Plan | Price / month | Units / month | Requests / minute | Trial units |
| --- | --- | --- | --- | --- |
| Free | USD 0 | 1,000 | 10 | — |
| Starter | USD 29 | 100,000 | 60 | 10,000 |
| Pro | USD 99 | 500,000 | 300 | 50,000 |
| Scale | USD 499 | 5,000,000 | 1,000 | 500,000 |

"Units" are weighted — see [Rate limits](https://upapi.io/docs/rate-limits) for what an
individual call costs. Quota is pooled across every key in your organization and
resets at the start of each UTC calendar month.

You only pay for calls we actually ran: requests we reject before running them,
throttled calls, idempotent replays and cache hits all cost zero units. [What
you are charged for](https://upapi.io/docs/rate-limits#what-you-are-charged-for) is the exact table.

Plans also govern how many operations and products you may configure, and
whether [hosted functions](https://upapi.io/docs/platform/hosted-functions) are available.

## Trials [#trials]

Every paid tier starts with a **14-day free trial**. A trial is limited in time *and* in volume: it includes **10% of the tier's monthly units** for the whole trial, not per month.

That second limit is the one to plan around. A trial is not simply "the paid
plan for two weeks" — it is a bounded evaluation budget, sized so you can test
the platform end to end before you are billed for anything. When either limit is
reached the trial stops: time runs out, or the units do.

<Callout type="warn" title="A trial takes a card; the free tier does not">
  Starting a trial means completing checkout, and checkout collects a payment method — the card is
  validated with a zero-amount authorisation and charged only when the trial converts. If you want
  to try upAPI without entering card details at all, use the **Free** tier above: it is a real,
  permanent plan with its own monthly units and no payment method on file.
</Callout>

While a trial is live, `X-Trial-Units-Limit` and `X-Trial-Units-Remaining`
appear on every gateway response and a `trial` block appears in
[`/api/usage`](https://upapi.io/docs/usage-api). Both disappear once the trial ends.

Spending the trial's units returns `429 QUOTA_EXCEEDED`, with `Retry-After` set
to the time remaining until the trial ends. It is deliberately not
`RATE_LIMITED`: no window refills here, so a client backing off on the burst code
would retry until the trial expired.

<Callout title="One trial per organization">
  The trial budget belongs to the organization, and an organization can only trial once. Switching
  tiers mid-trial does not restart the clock or top up the units — the original end date and the
  cumulative budget both carry over, and the switch itself is free.
</Callout>

## Changing plan [#changing-plan]

Billing lives at
[Dashboard → Billing](https://app.upapi.io/dashboard/billing). Plan changes take
effect immediately for rate limits and quota; you do not need to re-issue keys.

You will get a [notification](https://upapi.io/docs/platform/notifications) when consumption
crosses **70% and 90%** of your monthly quota, so a plan change is a
decision rather than a surprise.
