Account
GET /v1/me
Cost · Free (control-plane endpoint)
{ "data": { "id": "...", "email": "you@company.com", "plan_id": "monthly", "current_period_start": "2026-05-01T00:00:00.000Z", "status": "active", "plan": { "id": "monthly", "credits_per_cycle": 1000, "rate_limit_per_minute": 200 }, "credits": { "balance": 842, "granted_this_cycle": 1000 } }, "request_id": "..."}There is no usage: { this_period, remaining } object on /v1/me. Your
remaining-quota signal is data.credits.balance (credits left this cycle);
data.credits.granted_this_cycle is what the cycle started with, and
data.plan.credits_per_cycle / data.plan.rate_limit_per_minute describe the
plan’s caps.
GET /v1/usage
Cost · Free (control-plane endpoint)
| Query | Type | Notes |
|---|---|---|
since | ISO timestamp | created_at >= since |
limit | int | default 100, max 1000 |
{ "data": [ { "id": 91234, "endpoint": "/v1/properties/by-url", "actor": "detail", "units": 1, "status_code": 200, "created_at": "..." } ], "request_id": "..."}Credit balance
Programmatically, read your remaining balance from GET /v1/me →
data.credits.balance. The dashboard reads the same live balance via the
Supabase RPC credit_balance(p_account_id); you can also read your account row
- recent ledger via supabase-js (signed in with your dashboard user JWT, not
your API key). When balance hits zero the worker returns
402 out_of_credits, that’s the signal to top up.
Billing actions
Subscription and top-up purchases are dashboard-only flows. Sign in at https://zillapi.com/app/billing to:
- See current plan + balance + recent ledger
- Switch plans (Stripe Checkout)
- Buy top-up packs (paid plans only)
- Manage payment method / cancel (Stripe Customer Portal)