Billing & credits
API traffic is paid for in two layers:
- The plan. Your organization’s subscription includes a token allowance, enforced over monthly, weekly and 5-hour windows.
- Usage credits. An optional prepaid US-dollar wallet that pays, at per-model rates, for requests the plan cannot cover.
Requests always try the plan first. Credits are only touched once a plan window is full, and only if you have turned them on. This page covers plans, the credit wallet, buying credits, auto-reload and the spend limits that keep it all bounded.
Plans
Each plan includes a monthly token allowance shared by everyone in the organization. Prices are on syntic.ai/pricing.
| Plan | Monthly tokens | Weekly window (60%) | 5-hour window (25%) |
|---|---|---|---|
| Free | 200,000 | 120,000 | 50,000 |
| Starter | 2,000,000 | 1,200,000 | 500,000 |
| Business | 2,000,000 | 1,200,000 | 500,000 |
| Pro | 5,000,000 | 3,000,000 | 1,250,000 |
| Scale | 8,000,000 | 4,800,000 | 2,000,000 |
| Operations | 25,000,000 | 15,000,000 | 6,250,000 |
| Enterprise | Unlimited | Unlimited | Unlimited |
How the windows work is explained in Usage & cost. Some models are only offered on certain plans; a request for a model your plan does not include is served by the default model instead, and the response carries an x-syntic-model-downgraded header. See Models.
Usage credits
Usage credits keep your API running after the plan allowance is spent, at a cost you control.
A request is paid from credits only when all of these hold:
- a plan window is full for this request;
- credits are turned on for the organization;
- the organization has not reached its monthly spend limit;
- the member who owns the key has not reached their own spend limit, if one is set;
- the wallet balance covers a conservative estimate of what the request could cost.
If any condition fails, the API returns 402 quota_exhausted and names the reason in limit. See the table in Usage & cost.
Settings
Credits are managed in Settings → Billing, in the Usage credits section. Only owners and administrators can change them; every member can see them.
| Setting | Default for a new organization | Notes |
|---|---|---|
| Usage credits | Off | Nothing is charged to the wallet until this is on |
| Monthly spend limit | $20 | The most credits may spend per calendar month (UTC). Clear the limit for no cap. Can be set to $0. |
| Auto-reload | Off | Tops the wallet up automatically from your saved card |
| Reload when balance falls to | $5 | The trigger amount |
| Reload up to | $15 | The target balance. Must be higher than the trigger while auto-reload is on. |
The section also shows the current balance and how much credit has been spent this month.
Buy credits
Open billing
As an owner or administrator, go to Settings → Billing with the organization you want to fund selected. Credits always go to that organization’s wallet.
Pick an amount
Choose a preset pack or enter your own amount. The minimum top-up is $25.
Pay
Card payments go through a hosted checkout. Larger amounts switch to an invoice or to the sales team, as shown below.
Wait for confirmation
The wallet is credited once the payment is confirmed, not when you click pay.
Preset packs
| You pay | Credit added | Bonus |
|---|---|---|
| $25 | $25 | none |
| $100 | $107 | 7% |
| $500 | $550 | 10% |
| $2,000 | $2,300 | 15% |
Custom amounts
| Amount | Bonus | How you pay |
|---|---|---|
| $25 to $99.99 | none | Card checkout |
| $100 to $499.99 | 7% | Card checkout |
| $500 to $1,999.99 | 10% | Card checkout |
| $2,000 to $9,999.99 | 15% | Card checkout |
| $10,000 to $49,999.99 | 20% | Invoice, payable by bank transfer |
| $50,000 and above | Agreed with sales | The request goes to the sales team, who reply within one business day |
Auto-reload
Auto-reload keeps the wallet from running dry in the middle of a busy day.
How it behaves
- The platform checks wallets with auto-reload turned on at regular intervals.
- When the balance is at or below the trigger, your saved default card is charged the difference between the balance and the target, so the balance returns to the target. With a $5 trigger, $15 target and $3.20 left, the charge is $11.80.
- The wallet is credited once the charge succeeds, just like a manual top-up.
- Charges under $0.50 are skipped.
Auto-reload needs a saved payment method. Without one, reloads are skipped silently and requests start failing with 402 quota_exhausted once the balance can no longer cover them. Add a card under Settings → Billing before relying on auto-reload.
Because reloads happen on a schedule rather than on every request, a large burst can still empty the wallet between checks. Leave enough headroom between the trigger and your busiest few minutes of spend.
Spend limits
Spend limits only ever restrict credit spend; plan usage is never blocked by them.
| Limit | Set by | Where | Effect when reached |
|---|---|---|---|
| Organization monthly spend limit | Owner or administrator | Settings → Billing → Usage credits | Every member’s credit-paid requests fail with 402, limit: "spend_limit" |
| Group limit | Owner or administrator | Settings → Usage → Group spend limits | Applies to each member of the group who has no limit of their own; a member who reaches it is blocked as below |
| Member limit | Owner or administrator | Settings → Usage → Spend limits | That member’s API requests fail with 402, limit: "spend_limit" |
All spend limits start afresh when a new calendar month begins (UTC midnight). Details of group and member limits are in Usage & cost.
React to billing errors in code
Your code cannot change billing settings, but it can tell the difference between “wait” and “a person needs to act”:
import os
import requests
resp = requests.post(
"https://app.syntic.ai/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['SYNTIC_API_KEY']}"},
json={
"model": "Amara Deep",
"stream": False,
"messages": [{"role": "user", "content": "Draft a reply to this refund request."}],
},
timeout=120,
)
if resp.status_code == 402:
err = resp.json()
if err["limit"] in ("monthly", "weekly", "session"):
print("Plan window full; it reopens at", err["resets_at"])
elif err["limit"] in ("spend_limit", "no_credits"):
print("A billing admin needs to act:", err["add_credit_url"])
else: # "unavailable"
print("Usage check failed; retry shortly")
else:
resp.raise_for_status()
print(resp.headers["x-syntic-billing-source"], resp.json()["usage"])A fuller pattern, with retries and alerting, is in Handle usage limits.
Who can do what
| Action | Owner / Primary owner | Administrator | Developer / Custom |
|---|---|---|---|
| View plan, balance and month-to-date spend | Yes | Yes | Yes |
| Turn credits on or off, set the spend limit, configure auto-reload | Yes | Yes | No |
| Buy credits | Yes | Yes | No |
| Set group and member spend limits | Yes | Yes | No |
| Change plan or payment method | Yes | Yes | No |
| Cancel the subscription | Yes | No | No |
Adding and removing payment methods is recorded in the audit log.