cocodot
← Back to guides
Local card declined for overseas AI? cocodot: one card + one key
For TeamsUpdated 2026-10

Enterprise LLM API for Teams: Per-Project Keys, One Balance, Auditable Cost Attribution (2026)

How to roll an LLM API out to a team without a shared-key mess: keys split by blast radius, one prepaid balance, a per-call ledger for cost attribution, and a vendor checklist.

TL;DR: A team's first LLM API call takes ten minutes; what hurts later is three management problems. Payment: the official route wants a card that survives fraud screening, and a personal card is the wrong instrument for a company purchase. Isolation: one shared key means a leak stops every project and nobody can say who spent what. Reconciliation: finance asks where the month's spend went and the vendor only shows a balance. The setup that answers all three: one prepaid USD balance for the account; several named keys, split by blast radius (production, CI, one per heavy project or person); and a per-call ledger with model and token counts on every line, so a monthly export is your audit trail. Everything goes through one OpenAI-compatible endpoint, so existing code changes `base_url` and `api_key` only. Honest boundary up front: no invoices are issued today, so check that your procurement process can book a prepaid technical-service balance before you start.

1. Why team adoption stalls after the first call

Getting one request through an LLM API is the easy part. The friction shows up when the second and third teammate arrive. Payment is the first wall: official consoles want a card that clears the provider's risk screening, and when a company buys through an official purchasing flow, one employee's personal card is not a compliant instrument anyway. Isolation is the second: for speed, everyone shares one key, and months later nobody can answer which project burned the budget, nobody dares rotate the key because rotation takes everything down, and a leaked key means a full outage. Reconciliation is the third: at month end finance gets a single total and asks where it went. If the vendor only exposes a balance, the honest answer is 'unknown'. The rest of this guide treats each wall in turn, and none of the fixes needs special infrastructure.

2. Split keys by blast radius, not by headcount

The wrong rule is one key per person. The useful question is: if this key leaks tomorrow, how much of the business stops when I revoke it? Work backwards from that. A sensible split is one key for the production service, one for CI and automated tests, and one each for every heavy project or high-volume teammate. A leak, an accidental commit to a public repo, or a runaway script then costs you one line of work, not all of it. The production key deserves extra discipline: it should live only in the deployment environment's secret store and never on a developer laptop. Check the current per-account key limit in your console; if you hit it, revoke idle keys before creating new ones instead of letting people crowd onto one. Keep keys in environment variables or a secret manager, never in front-end code, and remember that deleting a committed key from a repo does not remove it from history.

3. Name keys on day one

This takes five minutes and decides whether reconciliation works later. Use a purpose-owner convention: prod-api, ci-bot, proj-alpha, dev-alice. Two payoffs follow. First, cost roll-ups become mechanical: group the ledger by key prefix and every proj- line sums into a per-project cost. Second, anomaly triage gets instant: when one key's usage spikes, its name tells you who to ask before you open a single log. Compare the alternative, keys called key1, key2 and new-key, which three months later nobody can map to anything. Put the convention in the team wiki, make creating a key without it a review comment, and rename or retire keys that predate the rule. If your vendor lets you attach a note to a key, use it for the owning team and a contact; if it does not, keep the mapping in a short table next to your secrets inventory.

4. Turn a ledger into cost attribution

Cost attribution only works if every call is a line item. Each call needs the key that made it, the model name and the input and output token counts. A vendor that gives you only a running balance cannot support it, whatever method you try. With per-call lines the month-end routine is simple: export the ledger, group by key prefix for project cost, then group again by model. The second grouping surfaces optimisation: if a project routes classification and field-extraction chores to the flagship tier, that is the first saving. A good tiering rule is cheap tiers for batch and extraction, a mid tier for daily coding, and the top tier only for work that fails on the lower ones. Then tag each project's budget in a spreadsheet and compare it to the grouped totals weekly, not monthly, so an overrun is a conversation instead of a post-mortem.

5. Migrating: change two parameters, then test small

An OpenAI-compatible endpoint means migration is a two-parameter change: point `base_url` at the provider's endpoint (for cocodot that is https://cocodot.co/api/ai/v1, and the trailing /v1 matters, since leaving it off is the most common cause of all-404 failures) and swap in the new `api_key`. Official SDKs in every language, and editors or clients that accept a custom OpenAI endpoint, take the same two values. Ease of migration is not a reason to cut production over the same day. For enterprise buyers the expensive thing is rarely the unit price; it is switching cost and the cost of a surprise. Top up a small amount, run real tasks in a test environment for a week, and check latency, error rate, streaming behaviour and billing against your own logs. Only then repoint production, and keep the old route configured for a fast rollback until you have a clean month.

Smoke test from a terminal before touching any application code
curl https://cocodot.co/api/ai/v1/chat/completions \
  -H "Authorization: Bearer $COCODOT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"<model-id-from-the-model-list>","messages":[{"role":"user","content":"ping"}]}'

6. Vet any vendor with a ten-minute checklist

Procurement conversations about LLM relays usually stall on trust, so replace trust with checks you can run. One: does the listed price equal the amount actually deducted? Make ten small calls and compare line by line. Two: are failed calls charged? Force a few errors, such as an oversized context or a bad parameter, and see whether the balance moves. Three: is the per-call detail exportable, with model and token counts? Four: is the model what you ordered? Substitution is the industry's classic complaint, and you can test it with an open-source fingerprint tool such as probe.cocodot.co, which accepts any OpenAI-compatible endpoint and works on any vendor, including ours. Five: what are the stated limits on concurrency, data handling and invoicing, in writing, before you integrate? A vendor that answers all five with evidence is cheaper to trust than one with a better headline price.

7. Know the boundaries before you commit

Four limits worth stating plainly. First, no invoices are issued today, so the fit is teams that can book a prepaid technical-service balance; if your purchasing process requires invoices, evaluate that before anything else. Second, very high concurrency, on the order of thousands of requests a minute, should be discussed with the vendor before launch rather than discovered in production; ordinary team volumes have no extra limits we are aware of. Third, models differ in behaviour and pricing mechanics, including long-context tiers and reasoning models that generate a hidden chain of thought you pay for, so confirm the details for each model you plan to use. Fourth, the endpoint forwards requests and does not store call contents, but sensitive data should still be redacted before it leaves your network, exactly as with a direct vendor API. Caching is billed as follows: cache hits at half the input price, and Claude cache writes at 1.25x the input price (2x for the portion written to the 1-hour cache), the same structure as the official pricing; for cache-heavy agent workloads, going direct to the model maker can be cheaper on the cache-hit line.

8. Pre-launch self-check

Compress the guide into something a reviewer can tick off. Keys split by blast radius, with a production key on no developer machine. Naming convention documented and applied. Keys read from environment variables or a secret manager, and the repo history searched for leaked ones. `base_url` ends in /v1. A week of real workload run in a test environment with latency, error rate and billing reconciled. Per-model pricing details confirmed, including tiers and reasoning behaviour. Timeouts and retries set in the client, with streaming for long answers. A named owner for the monthly ledger export. A rollback route kept warm. If every line is ticked, the rollout will be boring, which is exactly what you want from infrastructure.

Team LLM API rollout: problem, practice, how you verify it

ProblemPracticeHow to verify it yourself
PaymentOne prepaid balance, billed per token after useTop up a small amount, run ten calls, compare each charge to the listed price
IsolationKeys named purpose-owner, split by blast radiusRevoke a test key and confirm only that key's traffic fails
ReconciliationPer-call ledger with model and token countsExport a day, group by key prefix, check the totals match the balance change
Model integrityProbe the endpoint before committingRun an open-source fingerprint check against it, vendor included
Switching costTest environment first, production secondRun a real workload for a week before moving production

FAQ

Do you issue invoices?

No, not currently. The service suits teams that can book a prepaid technical-service balance. If your purchasing process requires an invoice, evaluate that before you start, because it is the first thing to rule a vendor in or out.

How many API keys can one account hold, and how should I split them?

There is a per-account cap, shown in the console, and it is enough for most teams. Split by blast radius: production, CI, then one per heavy project or person. If you reach the cap, revoke idle keys before creating new ones.

How do I allocate monthly cost to projects?

Name keys purpose-owner on creation, export the per-call ledger, and group by key prefix. Group once more by model to find savings, such as chores running on a flagship model.

How much code changes when we migrate?

Two parameters in most stacks: `base_url` set to the compatible endpoint, ending in /v1, and the new `api_key`. Test in a non-production environment for a week before switching production.

Are there rate limits?

No extra limits at ordinary team volumes that we know of. If you expect thousands of requests a minute, talk to the vendor about capacity before launch and confirm the answer in writing.

How can I be sure the model is the one I pay for?

Test it. Run an open-source fingerprint check such as probe.cocodot.co against the endpoint with a temporary low-balance key, then repeat it periodically. It works on any vendor, including cocodot.

About cocodot

cocodot is a payment and AI access service for developers and cross-border teams in mainland China. It provides US-BIN virtual cards issued by a licensed institution — used to pay for overseas subscriptions and ad accounts — and an OpenAI-compatible AI API gateway for calling Claude, GPT and Gemini from within mainland China. Both share one wallet, funded by Alipay and accounted in USD. Card: $9.9 to open, 3% to load, $1 per active card per month; spending: $0.60 settlement fee on purchases under $20; a corresponding fee applies when the issuer charges one.

Service scope, pricing and limits →