Top-up credits now work without an active subscription.
- Your credits keep working if your subscription lapses. If your plan ends or a payment fails, requests continue to run on any top-up credits you already bought.
403 no_active_planis only returned when you have no active plan and no top-up credits. You still need an active subscription to buy credit packs. See Plans and credits.
New request parameters, cleaner responses, and a few billing fixes.
- More sampling controls.
repetition_penaltyandmin_pare now accepted and forwarded to the model. - Sessions for prompt caching. Pass a
session_idto keep a conversation on the same prompt cache across turns. See Sessions and prompt caching. - New models.
deepseek/deepseek-v4-flash-0731anddeepseek/deepseek-v4-pro-0813are in the catalog. - Cleaner responses and consistent errors. Responses carry only public fields,
modelalways matches the catalog ID, and errors now use a fixed set of codes documented in the API reference. - Failed generations are free. Any request that fails, including a stream that fails partway through, is not billed.
- Slow generations are no longer cut off. Long-running requests that went quiet for more than a few seconds could previously be dropped mid-generation.
One weekly allowance now replaces the separate base and weekly buckets.
- One weekly allowance per plan. Spark includes $4.00 per week and Ember includes $8.00 per week. The base bucket and its eight-hour refresh are gone.
- Everyone resets Friday at 06:00 UTC. The single global reset replaces per-user rolling windows. Unused allowance does not roll over.
- Going over carries into the next reset. Postpay usage beyond your balance is deducted from Friday’s allowance. Renewing or changing plans restores the full allowance. Top-up credits are untouched and never go negative.
GET /v1/balancehas a new shape.balances.weekly,caps.weekly, and a staticrefreshobject replace the base and overage balances, caps, and two window objects.balances.totalno longer reports a percentage. Reading your balance no longer triggers refills.- The dashboard has one weekly meter and a complete ledger. The meter shows when you are over the allowance.
A billing fairness release: you no longer pay for empty generations, and a credit refill race that could overfill buckets is fixed.
- Empty generations are free. A generation that produces zero visible output costs nothing.
- Every request has a sane output cap. Requests without an output limit now default to 8,192 output tokens, and explicit limits are clamped to the model’s maximum, so the pre-flight cost estimate and the actual generation always agree on the same bound.
- Finer reasoning control. The
reasoningobject now acceptsenabledandexcludebooleans alongsideeffortandmax_tokens, so you can toggle reasoning on or off and keep reasoning tokens out of the response. - Credit refills no longer overfill. Concurrent requests arriving right as a credit window elapsed could each apply a full refill, pushing a bucket above its plan cap. The refill decision now happens under a lock, and balances that were over-granted by this bug have been corrected.
A large rewrite of the API plus a wave of gateway improvements. The whole stack is more stable, usage tracking is more precise, and caching hits far more often.
- Reasoning controls actually work now, with more levels.
reasoning/reasoning_effortis now forwarded in the form the model expects, so the setting genuinely reaches the model instead of being silently dropped. The effort enum also grew fromhigh/medium/low/minimal/noneto addmaxandxhigh. - Legacy
max_tokensis honored. Requests foldmax_tokensintomax_completion_tokensbefore forwarding, so older OpenAI-style clients get their output limits respected, including in the pre-flight cost estimate. - No more concurrency cap. The 3-concurrent-generations-per-user limit and its
Too many concurrent generations(429) error are gone. Parallel requests just work. - Far fewer false “insufficient balance” rejections. The pre-flight affordability check used to assume 4,096 output tokens when the client did not set a limit. That default is now 800, so users with a small remaining balance can make normal-sized requests without being blocked by a wildly pessimistic estimate.
- Cleaner, more standard API responses. Internal fields are now stripped from both non-streaming responses and every streaming chunk (previously chunks leaked them), and the
modelfield is rewritten back to the public model id. Responses look like plain OpenAI responses. - More accurate billing. Streaming cost is only resolved from chunks that actually carry usage. Streams that end without usage are billed on observed output and tagged
completed_no_usage, and the whole flow is typed end to end, so you get charged on real usage numbers more reliably. - Better error messages. An unknown model is now a
400withcode: "model_not_found"(previously a bare404). Accounts without a plan get a403withcode: "no_active_plan"and a human-readable message. Validation errors were consolidated for consistent messages and parameters. - More precise usage tracking. Usage accounting is tighter and more reliable across both streaming and non-streaming paths.
- Higher cache hit rate. Caching now hits far more often, cutting latency and cost.
- Slightly faster requests. The balance snapshot is read once and reused across the windowed-credit refresh and the affordability check, cutting redundant database roundtrips on
/v1/chat/completionsand/v1/balance.
The starting point for our public changelog.
- OpenAI-compatible gateway live at
https://api.kyara-intelligence.com/v1. - Curated catalog of high-performance models behind one familiar API.
- Dashboard for creating API keys and managing your account.
- Plans and credits with a bucket-based balance system.
- Documentation covering quickstart, authentication, integrations, and the API reference.