Plans and limits
The Free and Pro plans, what counts as a billable request, and how invoices, usage alerts, and spend caps work.
Billing is per workspace. Each workspace has its own plan, its own usage, and its own invoice. Only workspace owners can manage billing.
Every workspace starts on Free. A workspace moves to Pro only when an owner subscribes in Stripe Checkout. Toggld charges nothing before that.
Plans
| Free | Pro | |
|---|---|---|
| Price | $0 | $5 per month for each workspace |
| Flags | 10 for each workspace | Unlimited |
| Evaluation requests | 1M per month | 2M per month included |
| Over the request limit | Throttled: evaluation returns HTTP 429 | $2 for each additional 1M requests |
| In-process evaluation in server SDKs | Unlimited, not billed | Unlimited, not billed |
| Definition sync and telemetry | Fair use, not billed | Fair use, not billed |
Throttled means that the API refuses evaluation requests with HTTP 429 until the count window ends. Your application then uses its fallback values. See When you reach the limit.
Pro charges overage for the exact number of requests, at $2 per 1M. For example, 500,000 extra requests cost $1.
Prices are in US dollars. Sales tax or VAT is added where it applies.
What counts as a billable request
A billable request is one evaluation that a client asks for and the Toggld API answers. It is the same over HTTP and over the evaluation stream: each evaluation that you ask for counts once.
| Traffic | Billable |
|---|---|
POST /ofrep/v1/evaluate/flags/{key} (one flag) | Yes, 1 for each request |
POST /ofrep/v1/evaluate/flags (every flag) | Yes, 1 for each request, for any number of flags |
GET /eval/v1/stream (browser evaluation stream) | Yes, 1 for each context message that the API answers with flag values. Opening the stream, values that it pushes after a flag change, and heartbeats do not count. |
| In-process evaluation in server SDKs (sync mode, file mode, serverless client) | No. The Toggld API never sees it. |
GET /sync/v1/flags and /sync/v1/stream (definition sync) | No. Fair use. |
POST /v1/telemetry | No. Fair use. |
| Management API, dashboard, and MCP server | No |
- Public tokens (
ffp_, used in browsers and mobile apps) and secret keys (ffk_, used on servers) count the same. - Only successful responses count: HTTP 2xx, and HTTP 404 with
FLAG_NOT_FOUND, which is a normal OFREP result. - Requests that the API refuses for authentication (HTTP 401 and 403) or for limits (HTTP 429) do not count. On the evaluation stream, a context message that the API refuses does not count. For example, the stream closes with code 4429 for too many context messages, or 4402 at the evaluation limit.
- Toggld does not bill from SDK telemetry. It bills only for the requests that it serves. Turning telemetry off does not change your bill.
Billable requests by client
| Client | Billable requests |
|---|---|
JavaScript server SDK in remote mode (mode: "remote") | 1 for each call to a getter or to evaluate. 1 for each call to evaluateAll. |
| JavaScript server SDK in sync mode (the default) | None. Snapshot polls are definition sync, and evaluation runs in your process. |
| JavaScript server SDK with a flag file | None. It sends no requests. |
Serverless client (@toggld/js/serverless) | None. Snapshot refreshes are definition sync, and evaluation runs in your code. |
| Browser SDK | 1 for each page view. The SDK asks the evaluation stream for the first values, and uses HTTP only when the stream does not answer within 1.5 seconds. After that, 1 for each new context and each refresh(), and 1 for each poll or visibility refresh. When the stream reconnects, the SDK sends its context again, which counts once. Values pushed over the stream do not count. Rarely, the stream answers after the SDK sent its HTTP request, and both count. |
Browser code that calls OFREP with fetch | 1 for each request. A bulk request counts once. |
| OpenFeature OFREP providers | 1 for each evaluation request that the provider sends. Check the provider documentation for how often it sends requests. |
To use fewer billable requests:
- Keep the JavaScript server SDK in its default sync mode on long-lived servers. On Cloudflare Workers, Vercel, and AWS Lambda, use the serverless client, which also evaluates in your code. See Choosing a runtime and mode.
- In browsers, call the bulk endpoint once per page load instead of one request per flag.
- With the browser SDK, use the evaluation stream instead of polling. Values pushed over the stream do not count.
Count windows
A count window is the period in which Toggld adds up your billable requests.
| Plan | Count window |
|---|---|
| Free | The calendar month in UTC. It starts at 00:00 UTC on the first day of the month. |
| Pro | Your billing period. It starts on the day that you subscribed and repeats each month. |
When you upgrade, the window changes from the calendar month to your billing period. Toggld does not bill for usage before the upgrade.
Toggld counts each billable request. It does not sample. It checks your usage against your limits once an hour. Throttling can start up to about one hour after you reach a limit. On Free, Toggld does not bill for the requests in that hour.
Invoices and payment
Toggld uses Stripe for payments. Owners subscribe through Stripe Checkout. They manage cards, invoices, the billing email, tax IDs, and cancellation in the Stripe Customer Portal.
You get one invoice and one card charge each month. Each invoice has two parts:
- The $5 base fee for the next month, billed in advance.
- The overage for the month that just ended, billed in arrears.
Your first invoice is $5. For example, if you subscribe on March 10:
| Date | Invoice |
|---|---|
| March 10 | $5 base fee for March 10 to April 10 |
| April 10 | $5 base fee for April 10 to May 10, plus the overage for March 10 to April 10 |
Example bills
These examples show one Pro billing period, before tax:
| Billable requests in the period | Overage | Bill |
|---|---|---|
| 300,000 | None | $5 |
| 2M | None | $5 |
| 8M | 6M × $2 = $12 | $17 |
| 50M | 48M × $2 = $96 | $101 |
Usage alerts
Toggld emails the workspace owners when usage reaches 80% and 100% of these amounts:
- The Free limit of 1M requests.
- The 2M requests included in Pro.
- Your spend cap, if you set one.
Toggld sends each alert once per count window.
Workspace settings show your usage in the current period, the projected bill, and a daily usage graph.
Spend cap
A spend cap is an optional monthly maximum for a Pro workspace. By default, a workspace has no cap.
- An owner sets the cap in whole dollars. The smallest cap is $5.
- Toggld converts the cap into a request limit: 2M requests, plus 1M for each full $2 above $5.
- When usage reaches that limit, Toggld throttles evaluation requests instead of billing more overage. See When you reach the limit.
| Spend cap | Request limit | Bill at the request limit |
|---|---|---|
| $5 | 2M | $5 |
| $10 | 4M | $9 |
| $17 | 8M | $17 |
Payment failure
If a payment fails:
- Stripe retries the card and emails the billing contact. Owners see a banner in the dashboard.
- For 30 days, nothing changes. The workspace keeps the Pro limits.
- If the invoice is still unpaid after 30 days, the workspace gets the Free limits. Stripe stops retrying and cancels the subscription.
- When the payment succeeds, the Pro limits return at once.
Toggld never deletes flags because of a payment problem. The worst case for any billing state is the Free plan, which still serves 1M evaluation requests per month.
Cancel or downgrade
Cancellation takes effect at the end of the current billing period. The last invoice includes the overage of that period. The workspace then gets the Free limits.
If the workspace has more than 10 flags when it returns to Free, it keeps every flag, and every flag keeps working. You cannot create new flags until the workspace has fewer than 10. Until then, a create request returns HTTP 402 with FlagLimitExceeded.
Delete a workspace with a subscription
When you delete a workspace that has an active subscription, Toggld cancels the subscription at once. The final invoice includes the overage that you used. Toggld does not refund the base fee for the current month.
Ownership changes
Billing belongs to the workspace, not to a person. When ownership changes, the subscription stays the same. The new owner can update the card or billing email in the Stripe Customer Portal.
Related
- When you reach the limit: how the API and SDKs behave when a workspace is throttled.
- Rate limits: per-minute limits that protect the API. They apply on every plan and are separate from the monthly evaluation limits.