How Your Plan Is Metered
FourA sells two products, and they're measured in different units. Your plan is sold on one of those two units, which decides which allowance refuses you and which cards you see in the dashboard. This page is the whole model on one screen.
Two Products, Two Units
| Product | You call | The unit |
|---|---|---|
| API | POST /api/single, /api/proxy, /api/browser, /api/auto |
A request, priced in credits |
| Proxy port | proxy.foura.ai:34004 from any client that takes a proxy URL |
A tunnel, priced in gigabytes |
On the API, only a success outcome costs credits. A request that failed on the target's side, on your side, or on ours costs you none. Premium traffic is counted apart from credits, as described below. See Request Outcomes.
On the proxy port there are no credits and no request count, and that isn't an omission. A tunnel is one connection your tool opens, and what it sends inside is your own encrypted traffic, so FourA can count the tunnel and the bytes it carried and nothing finer. A request count here would be a number you could never reconcile against your own logs. The port is therefore always sold by the gigabyte. See Proxy Port.
What a Gigabyte Is, and What Goes Into It
One gigabyte means 1,073,741,824 bytes (2^30, the unit also written GiB). Every allowance, counter and price on your plan uses that figure, on the API and on the proxy port alike.
What is counted differs by product, because the two carry different things:
| Where | What is counted |
|---|---|
| API, standard exits | The body of the request you send us, plus the body of the response we return. HTTP headers are not counted, on either side. |
| API, premium exits | Every byte of the transfer as it crossed the network, both directions, compressed and encrypted as it travelled. |
| Proxy port | Every byte that crosses the tunnel, both directions, once it is open, including the encrypted-connection setup your client performs with the site. Opening the tunnel is not counted, except that a premium exit the port tries and doesn't use while opening your tunnel counts as premium traffic. |
A few consequences worth knowing:
- The page is counted decoded, because the decoded page is what we produce. Reaching it can mean running a real browser, completing an extra step the page asks for, then decoding the response and handing you content you can use. What you pay for is that result, not how compactly it happened to travel. The proxy port is the other case and is priced the other way: there we carry your own connection and do nothing to what is inside it, so we count the bytes exactly as they cross the tunnel.
- Retries on the standard pool cost you nothing. When Proxy Finder rotates through several exits, you pay once, for the answer you receive, however many exits were tried. On a premium exit every attempt counts, because that is how the premium networks bill us.
- A browser session on a standard exit is counted like any other API response: the body we return you, not every subresource the page loaded. Through a premium exit the whole session is on the wire and counts there.
- Premium is part of your total, not an addition to it. Your standard allowance is charged only for the part that did not go through a premium exit.
- An Auto call carries no traffic of its own. The Single, Proxy Finder and Browser requests it makes are counted as if you had made them yourself.
- A refusal by the site is counted; a refusal by your own plan is not. When a site answers 403, 404, 429 or 5xx, we carried that answer to you, so it counts. When a limit on your own plan refuses the request, nothing is fetched and nothing is counted.
- Nothing is rounded up. Bytes are counted exactly, with no block size and no minimum per request, and your figures are reconciled nightly against our metrics store.
Two Ways a Plan Is Sold
Both meters run for every account. Which one your plan is sold on is what changes.
Sold by credits
The API charges credits per billed request. The proxy port gets its own included gigabytes, quoted separately, because a tunnel has no request to charge a credit to. The two don't eat each other: your API traffic doesn't consume the port's gigabytes, and the port's tunnels don't consume your credits. Charging one API request twice, once in credits and once in the bytes those credits produced, would be the alternative.
The API's own traffic cap is off unless your plan carries one.
Sold by traffic
One standard-traffic allowance covers the API and the proxy port together, because both doors are priced in the same unit. A plan sold this way bills no credits, so credits disappear from the dashboard entirely rather than showing a number that means nothing.
Premium traffic, on both
Premium traffic always has its own allowance, on either kind of plan. It's never counted inside the standard figure, so a gigabyte is never charged to two ceilings. You reach a premium exit with exitClass: premium on POST /api/proxy/ or -network-premium on the proxy port.
It's measured as it crosses the network: both directions, compressed and encrypted as it went. On the API every premium attempt counts, including one that didn't return your page; on the proxy port it's the traffic of each premium tunnel, plus any premium exit the port tried and dropped while opening it.
What Refuses You, and Where
| Allowance | On the API | On the proxy port |
|---|---|---|
| Credits for the period | 429 with X-FourA-Limit: plan_limit_credits |
Not applicable |
| Standard traffic for the period | 429 with X-FourA-Limit: plan_limit_bandwidth |
429 with X-Foura-Error naming the traffic |
| Tunnels open at once | Not applicable | 429 with X-Foura-Error |
| Tunnel openings a minute | Not applicable | 429 with X-Foura-Error |
| Premium traffic | Downgraded, not refused | 403 on an explicit request |
A CONNECT has no body to put a JSON error in, which is why a port refusal is a status plus a header rather than the shape Rate Limits describes. Read X-Foura-Error before anything else on a proxy connection.
Premium running out is the one asymmetry
The two doors deliberately answer differently, because "I asked to spend" and "something was set for me once" are different situations.
On the API, an exhausted premium allowance never stops a job. The request is served from the standard pool and the response says exitClass: standard, so you can see what you actually got. A plan that doesn't include premium exits at all is a different answer: that's a 403 with plan_limit_premium.
On the proxy port:
- A connection that names
-network-premiumis refused with a403. You asked to spend, so being quietly served from somewhere else would leave you reconciling a premium line that never appears. - A premium default saved on the proxy user is downgraded to the shared network, and the tunnel still opens. You didn't choose it for this connection.
- An armed
-fallback-premiumsimply doesn't fire.
Buying More
Top-ups count exactly the same as what the plan includes. Each period your plan's own allowance is used first, and only what you go over draws on the balance you bought. A purchase lasts twelve months.
The dashboard keeps the two numbers apart wherever it quotes an allowance (75,000 (50,000 incl + 25,000 bought)), so the figure on screen can be reconciled against the invoice you're holding.
Where to Read Your Own Numbers
| Page | What it answers |
|---|---|
| Billing | This period against what's available, one card per thing your plan meters, with a Buy button on each |
| Usage & Limits | Every limit next to its live counter, plus a per-key, per-endpoint, and per-proxy-user breakdown |
| Overview | Volume and traffic over any period, per product |
Which cards Billing shows follows the two cases above: a plan sold by credits gets a Credits card and a Proxy port traffic card; a plan sold by traffic gets neither, and its Standard traffic card carries the cap and says The API and the proxy port together.
Don't hardcode any of these numbers. Every API refusal carries the ceiling that refused it, and every port refusal names it in X-Foura-Error.
Related
- Rate Limits: Every plan-limit body and header on the API
- Proxy Port: Metering, response codes, and the username options
- Request Outcomes: Which outcomes bill, for requests and for tunnels
- Billing & Subscriptions: Plans, top-ups, and invoices
- Usage & Limits: Your live counters against your plan