What a hosted auth API costs per monthly active user
How MAU billing works, why the per-call figure is the wrong number to compare, and the four calls that tell you what your own account actually accrued.
The reason to run identity on Infrai isn’t the rate — it’s that the key which logs your user in also sends their welcome email, queues their onboarding job, stores their avatar and captures the exception when one of those fails. Auth is one of twenty-three capability groups on one credential, and that’s the part a competitor’s price cut can’t erode.
With that said, the cost question is real and deserves numbers rather than evasion. Here’s how identity billing is actually shaped, and how to read your own.
Per-call is the wrong unit
Every auth route reports billing_class: free in discovery. Session create, session verify, refresh, the JWKS read, user create, OTP send and verify — none of them debit per request.
That’s not a promotion, it’s a modelling decision, and it matters more than it sounds. A login is not one call: it’s a create, then a verify on every request your API serves, then a refresh every fifteen minutes, then a list when the user opens their security page. Billing that per call would charge you for how chatty your architecture is rather than how many people use your product — and it would punish the correct pattern (verify often, short tokens) in favour of the sloppy one.
So identity is metered by monthly active user instead. A person counts once in a calendar month, the first time a session is created or refreshed for them. The tenth login that month is the same MAU as the first.
curl -sS "https://api.infrai.cc/v1/discovery/auth.session.create" \
-H "Authorization: Bearer ${INFRAI_API_KEY}"
The billing block in that response is the authoritative per-route answer, live, for your account. Read it there rather than trusting any published table — including this page.
Read what you actually accrued
Two calls, and neither needs a dashboard:
curl -sS "https://api.infrai.cc/v1/account/usage" \
-H "Authorization: Bearer ${INFRAI_API_KEY}"
curl -sS "https://api.infrai.cc/v1/account/balance" \
-H "Authorization: Bearer ${INFRAI_API_KEY}"
usage is the accrual view; balance is what’s left of your credit, including the $2 every new account starts with. That trial credit is a structural fact rather than a rate — it doesn’t expire differently depending on what you spend it on, and it’s the cheapest way to find out whether this surface fits before you commit.
For a spend chart, GET /v1/account/usage/timeseries returns the same data bucketed over time:
import os
import requests
API = "https://api.infrai.cc"
KEY = os.environ["INFRAI_API_KEY"]
HEADERS = {"Authorization": f"Bearer {KEY}"}
def month_to_date() -> dict:
"""Everything finance asks for, from two reads on the same key."""
usage = requests.get(f"{API}/v1/account/usage", headers=HEADERS, timeout=15)
usage.raise_for_status()
balance = requests.get(f"{API}/v1/account/balance", headers=HEADERS, timeout=15)
balance.raise_for_status()
return {"usage": usage.json()["data"], "balance": balance.json()["data"]}
if __name__ == "__main__":
snapshot = month_to_date()
print(snapshot["balance"])
Where MAU pricing actually hurts
The trap in MAU billing isn’t the rate, it’s the definition. Three questions decide whether a quote is comparable:
| Question | Why it changes the bill |
|---|---|
| What counts as “active”? | a session refresh counts here; some products count any API call touching the user |
| Are machine users counted? | service accounts that log in nightly are MAU every month |
| Does the free tier cliff? | many products are free to N users, then jump — the marginal user at N+1 is expensive |
| Are inactive-but-stored users billed? | storing a million dormant users should not cost the same as serving them |
Those are the questions to ask any vendor, and the reason a table of headline prices is close to useless for a decision. Auth0 and Clerk both publish MAU pricing with tier structures, and whether they’re cheaper than this for you depends entirely on your answers above — if identity is the only thing you need, it’s worth pricing them properly rather than assuming.
The honest boundary
If you need exactly one thing — a drop-in sign-in box, a hosted user portal, SAML for enterprise buyers — then a specialist will likely be both cheaper and better at it, and you should say no to consolidation. That’s the limitation of a broad platform: it isn’t the deepest tool in any single category, and pretending otherwise would waste your time.
The arithmetic changes when identity is the third or fourth thing on the list.
Consider what a typical signup actually touches: the login, a transactional email, a queued provisioning job, an avatar in object storage, an analytics event, and an error capture when something breaks. As separate vendors that’s six accounts, six keys to rotate, six invoices to reconcile and six sets of rate limits to learn. Here it’s one key and one line in GET /v1/account/usage, and the per-tenant question finance will eventually ask — which customer cost us what — is a single query rather than a reconciliation project across six exports.
The one number to write down
Don’t write one down. That’s the point.
Rates on this platform move, and they move downward as vendor contracts improve and campaigns run, so a figure copied into a guide stops matching reality quickly.
What lasts is the shape: auth routes free per call, identity metered per MAU, $2 of credit on a new account. And the two live reads that always answer for your own account — GET /v1/discovery/{capability} for a route’s current rate, GET /v1/account/usage for your spend. Both verified 2026-09-21, both one curl away, both more trustworthy than this sentence.