A gateway for agencies and freelancers: per-client billing
When several client projects run through one account, the hard part isn't finding a model — it's not losing track of who spent what.
5 min · · Updated · бизнес
If you're running several AI-driven projects at once — an agency with five clients, or a freelancer delivering work against different budgets — a single shared key for everything quickly turns into "figure out later who spent what." The gateway has concrete tools for this, not just one account-wide balance.
One key per client, not one key for everything
Keys in the fetch_... format are created in the cabinet at https://zukko.pro/app/api-keys, and nothing stops you from creating a separate key per client or project. This isn't just a formality, but note: /v1/usage history is shared across the whole account (all keys together, no per-key filter), and the balance is account-wide too. The practical way to split spend by client is the X-Zukko-Cost-Micros header — on every regular (non-streaming) response it shows the exact cost of that specific call; log it on your side together with the key that made the request, and you get a precise number to invoice against without manually parsing a shared log. Streaming responses (stream: true) don't carry this header — if you need strict separation for those too, set up a separate account for the client.
curl https://api.zukko.pro/v1/usage \
-H "Authorization: Bearer fetch_your_key"Cursor-based pagination on /v1/usage lets you pull the whole account's charge history in chunks — useful for building your own periodic report instead of eyeballing numbers.
Limits as insurance, not just savings
Every key can carry a daily and monthly dollar spend limit plus a list of allowed models, set in the cabinet. For an agency, this covers two different problems at once.
The first: a client on a fixed budget shouldn't accidentally blow past it because of an automation bug or a looping agent. A hard monthly limit on the key handles this at the infrastructure level instead of relying on manual watching.
The second: if a client only paid for access to a certain tier of models — say glm-5.3-flash and glm-5.3, but not claude-opus-5-5 — the allowed-models list on that key stops the project from accidentally sliding onto an expensive model midway through. Calling a blocked model returns a clean 403 model_not_allowed_for_key, not a silent budget overrun.
Idempotency matters especially in client-facing automation
Agent pipelines that generate content or reports for clients on a schedule usually build in retries for network failures. Without an Idempotency-Key (unique per logical request and identical across its retries), every retry after a response that actually went through but wasn't received by the client's code becomes a duplicate charge against someone else's budget. With the header, a retry within 24 hours simply returns the same stored result for free. For per-client billing this isn't a minor detail — the difference between "correctly counted spend" and "an accidentally doubled invoice" hits margin directly.
Caching pays off on templated work
If part of the client work is repetitive — the same checks, repeated classification of the same content, templated generations — turn on caching with X-Zukko-Cache: true (temperature: 0 also enables it, but only on models that accept it — Claude models may reject a temperature other than 1). A fully identical request (the whole body matches) repeated within 7 days for chat comes back instantly and free, flagged with X-Zukko-Cache: hit. Across several client projects at once, that's a real saving, not a theoretical one.
The referral program as income, not just a discount
If you bring other freelancers or agencies onto the platform, the referral program pays 10% of what invited users top up — worth treating as an ongoing revenue stream as your own practice scales, not a one-time bonus.
Payment options for international clients
Payment methods include SBP, a bank card via PayPear, crypto, and, as of 2026-09-16, a foreign Mastercard EU card via Fride (about 13% fee, amounts from $2 to $594; the minimum top-up for the other methods is $1). That matters if part of your client base or your own team operates outside Russia and needs a way to top up without a local card.
Split by language when it comes to documentation
The site is bilingual: the Russian version sits at the root, the English one under /en. If you're handing a client documentation or reporting in English, you can link directly to the matching language version of the cabinet and docs pages instead of translating by hand.
What the gateway doesn't do for you
Worth being clear about the boundaries: the gateway doesn't invoice your clients for you and doesn't build a ready-made per-project dashboard — it gives you precise raw data (keys, limits, /v1/usage history, cost headers on every request), and rolling that into a client-facing report or your own billing system is on you. For an agency with a handful of clients, a spreadsheet updated weekly from your per-key X-Zukko-Cost-Micros logs, reconciled against the shared /v1/usage history, is usually enough; as the number of projects grows, a small script that pulls this automatically into your own database is worth writing.
A practical setup to start with
- Create a separate key per active client at https://zukko.pro/app/api-keys.
- Set a daily/monthly limit matching that client's budget, plus an allowed-models list.
- Turn on
Idempotency-Key(a fresh one per logical request) in any automation that retries. - Log
X-Zukko-Cost-Microsper key on your side and reconcile the totals against the shared/v1/usagehistory each billing period before invoicing the client. - For billing questions or outages, support is on Telegram: https://t.me/zukkopro?direct.
None of this requires anything beyond what's already in the cabinet and the API — it just maps the existing tools onto individual clients instead of one shared account for everything.
zukko
Pay 25×
less
for Claude Code & ChatGPT
One fetch_* key and base URL api.zukko.pro — for Cursor, Claude Code, Codex, and any SDK.
Related articles
- AI for testers: test cases, checklists and bug reportsHow a QA engineer can use a model for test cases, checklists and bug reports, check coverage, and avoid requirements the model made up.
- Anonymizing data before sending it to a neural network: a practical wayYou do not have to send personal data to a model for it to process a document. How to replace it with labels, restore it in the answer and check that nothing leaked.
- A neural network for HR: job posts, candidate emails and resume reviewA model can draft job posts and emails and do a first-pass resume review. What to hand over, how to treat candidates' personal data and how to prevent biased decisions.
- An AI agent for 1C: which tasks to automate and howAn agent around 1C answers questions from data, drafts documents and looks for anomalies. We cover the scenarios, the HTTP-service architecture and safety measures.