Integrations
Estimate Your Monthly API Cost
Calculate a CurrencyCore bill from included requests, completed 1,000-request overage blocks, the hard cap, and the separate AI credit pool.
A plan price covers an included request count. Paid plans then bill overage in completed blocks of 1,000 requests. The word completed matters: 900 requests over the limit cost nothing, 1,000 over cost one block, and 1,900 over still cost one block. Free is a hard cap with no overage.
Only successful billable requests count toward the monthly quota. The per-minute limit counts every request, including errors and retries, but it does not add to the monthly bill. AI credits are a separate pool: native /v1/ai uses credits, and BYOK bills one API request per successful tool call instead.
The formula
overageBlocks = floor(max(0, requests - included) / 1000)
monthlyBill = planPrice + overageBlocks * overageRatePer1000
If a hard cap is enabled, requests stop at the cap instead of producing overage.
| Plan | Price | Included requests | Overage per 1,000 |
|---|---|---|---|
| Free | $0 | 1,000 | None (hard cap) |
| Starter | $9 | 50,000 | $0.10 |
| Growth | $29 | 500,000 | $0.05 |
| Growth Plus | $79 | 2,000,000 | $0.05 |
| Business | $199 | 10,000,000 | $0.03 |
Source: PLAN_LIMITS in packages/shared. Public pricing checked 2026-11-11.
Calculate it in code
type Plan = {
price: number;
included: number;
overagePer1000: number | null;
};
const PLANS = {
free: { price: 0, included: 1_000, overagePer1000: null },
starter: { price: 9, included: 50_000, overagePer1000: 0.1 },
growth: { price: 29, included: 500_000, overagePer1000: 0.05 },
"growth-plus": { price: 79, included: 2_000_000, overagePer1000: 0.05 },
business: { price: 199, included: 10_000_000, overagePer1000: 0.03 },
} satisfies Record<string, Plan>;
export function monthlyBill(plan: Plan, requests: number): number | null {
if (requests <= plan.included) return plan.price;
if (plan.overagePer1000 == null) return null; // hard cap: requests return 429
const blocks = Math.floor((requests - plan.included) / 1000);
return plan.price + blocks * plan.overagePer1000;
}
The function returns null for a Free organization over its cap, because the
request is rejected rather than billed. It does not include tax, proration, AI
credit packs, or a custom Enterprise contract.
Worked examples
650,000 requests on Growth. Overage is 150,000, or 150 completed blocks. 29 + 150 * 0.05 = $36.50. Growth Plus would cost $79 and include 2,000,000, so Growth is cheaper at this volume unless you need a Growth Plus feature.
2,500,000 requests on Growth Plus. Overage is 500,000, or 500 blocks. 79 + 500 * 0.05 = $104. Business is $199 and includes 10,000,000, so Growth Plus remains cheaper here.
120,000 requests on Starter. Overage is 70,000, or 70 blocks. 9 + 70 * 0.10 = $16.
50,900 requests on Starter. Overage is 900, which is zero completed blocks. The bill stays at $9.
Use the next tier’s included volume as a sanity check, not as an automatic upgrade trigger. A tier also changes rate limit, seats, analytics access, SSO, and audit retention. If you need those, compare the feature, not only the request math.
What can make the real bill different
- A plan change mid-cycle, proration, tax, and the payment provider’s invoice rules.
- A hard cap that blocks traffic before overage is billed.
- AI credit add-ons, which are separate from request overage.
- A custom or Enterprise contract, where the rates above do not apply.
The dashboard billing page is the source of truth for your organization. This page is a planning estimate, not an invoice. See Billing and Rate limits.