Ověřování
Každé volání kromě GET /v1/health a POST /v1/validate/* nese API klíč.
Hlavička
Pošlete Authorization: Bearer <key>. Klíče se vytvářejí na nástěnce. Celý klíč se zobrazí jednou: ukládá se jen jeho hash SHA-256, takže ztracený klíč nelze obnovit — vytvořte nový a starý odvolejte.
Authorization: Bearer co_live_…Tři druhy klíčů
- Živé klíče — pro provoz. Patří k tarifu Engine API a čerpají jeho měsíční kvótu.
- Testovací klíče — zdarma pro každý přihlášený účet: 1 000 volání měsíčně, nikdy se neúčtují, počítají se odděleně od živých klíčů. GET /v1/usage pro ně vrací env: "test".
- Veřejný demo klíč — za tlačítky „Run this example“: bez účtu, jen malé synchronní úlohy 2D, 1D a dřevo, s rychlostním limitem. Každá odpověď nese X-CutOptim-Demo: true.
Jedna kvóta na účet
Účet může mít až 10 aktivních živých klíčů a všechny čerpají stejnou měsíční kvótu — víc klíčů nepřidá víc volání. Slouží k oddělení prostředí a integrací. Když se kvóta vyčerpá, každý klíč vrací 402, dokud neskončí měsíc nebo nezvolíte vyšší tarif.
Výměna a odvolání klíče
Vytvořte nový klíč, přepněte na něj integraci a pak na nástěnce odvolejte starý. Odvolaný klíč je okamžitě odmítnut s 403 key_revoked. Odvolání není účetní operace a nevrací už spotřebovaná volání.
GET /v1/usage
{
"plan": "studio",
"used": 137,
"limit": 10000,
"remaining": 9863,
"periodEnd": "2026-08-01",
"keyPrefix": "co_live_ab12",
"contractVersion": "1"
}Jen pro čtení: nespotřebuje volání a neposílá hlavičky rate limitu. ⚠️ used a limit popisují ÚČET, ne klíč, kterým jste volali: každý aktivní klíč účtu čerpá z jedné společné kvóty, takže více klíčů neznamená více kvóty. used počítá probíhající kalendářní měsíc UTC přes všechny, remaining je limit minus used a nikdy neklesne pod nulu, periodEnd je den vynulování jako prosté datum YYYY-MM-DD a keyPrefix je nerizikový zobrazovací prefix použitého klíče.
Samotný klíč nevrací žádný endpoint — ukládá se jen jeho hash, ztracený klíč se tedy nahrazuje, ne obnovuje.
| Pole | Typ | Popis |
|---|---|---|
| plan | string | The tier slug frozen onto the key when it was minted. Re-pricing the product later does not rewrite a live key. |
| used | integer | Calls counted in the current UTC calendar month, across EVERY key on the account — revoked keys included, so revoking a key cannot un-spend what it spent (053) — not just the one you called with. The quota is account-wide. |
| limit | integer | The monthly cap for the ACCOUNT: the largest monthly quota frozen onto any of its ACTIVE keys (049). All active keys draw on this one allowance; creating more keys does not create more quota. Keys are for separating environments and integrations (and for revoking one without disturbing the rest). |
| remaining | integer | limit − used, never negative. |
| periodEnd | string (date) | First day of next month as YYYY-MM-DD — a DATE, not a timestamp. The counter resets at 00:00 UTC on that day. |
| keyPrefix | string | Non-secret display prefix of the calling key, so you can tell which key you queried. The key itself is never returned by any endpoint. |
| contractVersion | string | Shape version. Currently "1". |
| env | "test" | Present ("test") only for a TEST key: created in the dashboard, never billed, with its own monthly allowance separate from the live keys. Absent for a live key — a live key gets exactly the body it always got. |
| keyClass | "tenant" | Present ("tenant") only for a key CutOptim issues to its own first-party service. Absent for every key you create in the dashboard. |