Skip to content

Models & pricing ​

A model is one AI capability users can invoke — openai/gpt-4o-mini, kling/v1-6-pro, elevenlabs/eleven_multilingual_v3. The Models page lists all of them; each provider's detail page has a filtered Models tab.

Activate / deactivate ​

Every model row has an inline status selector:

StatusEffect
ACTIVEAvailable to plans that include it
BETAAvailable, flagged as beta in the client UI
DISABLEDGateway refuses new calls instantly — existing jobs finish

Deactivating is the "kill switch" when a model misbehaves or a provider deprecates it. Models are never hard-deleted (usage history references them).

Instruction & defaults ​

Every model is given an instruction before the customer's prompt reaches it. It lives on the model, not in the apps, so improving what a model produces is an edit here rather than a release of the storefront — and the storefront, the playground and API customers all get the same behaviour.

Open a model → Instruction & defaults. Everything is optional; blank means "use the platform default for this type", and the panel shows what that default currently is along with what it costs on every single call.

FieldWhat it does
System promptWhat the model is told before the customer's prompt. Blank = the platform default for TEXT / MULTIMODAL.
DeliveryHow it reaches the model. Auto decides; System turn is normal; Fold into the first user turn is for models with no system role; Send no instruction turns it off.
Default negative promptImage/video only. Used when the customer sends none.
Default max tokensCaps output when the caller does not set their own. Billing is on actual output, so this only bites runaway answers.
Default temperatureApplied when the caller sends none.
Context token budgetHow much chat history is replayed each turn. The biggest avoidable cost on a long thread.

Keep it short. The instruction is sent on every call, so each extra sentence is a permanent per-request cost. The platform defaults are about 42 tokens; a 300-word instruction that feels thorough is real money at volume.

Not every model is improved by one. On gemini/gemma-4-31b-it the instruction came back restated instead of followed, and cost 74 input tokens against 6 without it — worse output at 12× the price. That family is sent nothing by default. After editing a prompt, run a generation in the playground and read what actually comes back before assuming it helped.

Provider pricing (cost, not retail) ​

Each model carries a pricing JSON — the real upstream cost per unit, in poisha (1/100 BDT), converted from the provider's USD price at 1 USD = 130 BDT:

ModalityPricing keyExample (poisha)= BDT
Text / chatinputPer1M, outputPer1M{ "inputPer1M": 3900, "outputPer1M": 32500 }৳39 / ৳325 per 1M tokens
ImageperImage{ "perImage": 507 }৳5.07 per image
VideoperSecond{ "perSecond": 4800 }৳48 per second
Audio (TTS)perChar{ "perChar": 0.21 }৳0.0021 per char

This value is not what the customer is charged. It drives three things: the providerCostCents recorded on every usage record, the reseller-account budget reservation, and the cost-to-serve / margin shown on the Plans page.

What the customer actually spends is a credit, counted per call — 1 request debits 1 image credit per image, 1 video credit per video, 1 text request (plus tokens) per text/audio call — against the allowance their plan or credit pack granted. Credits are counts, not a function of the model's pricing.

Setting pricing right:

  1. Find the provider's current USD list price per unit.
  2. Multiply by 130 (BDT), then by 100 (poisha). e.g. $0.039/1M input → 3900.
  3. Edit the model's pricing (Models → row, or PATCH /v1/admin/models/:id). Curated Gemini/Veo models already ship with real BDT costs baked in.

Because pricing is a cost, margin is set at the plan / pack level (grants vs price), not per model — see Plans and Analytics & margins.

Where models come from ​

Each provider is asked what it offers, every 6 hours and whenever you press Sync models. What arrives is stored with its capabilities, context and output limits, modalities and — where the provider publishes one — its price.

  • Models that can be sold switch on by themselves. Every 15 minutes, and after every Sync models, any switched-off model that an adapter can call, that has a price and that the provider has not shut down is put on sale. Customers on a package still see only that package's models; the rest are usable by token-only accounts and the All access plan.
  • A model cannot be sold without a price or a way to call it. Embeddings, realtime and transcription models stay off, and so does any model with no price. Only OpenRouter and xAI publish prices through their APIs; for the rest set the price yourself, and the model switches on within 15 minutes.
  • Switching a model off sticks. A model you switch off (the switch, the bulk action or the model editor) is marked as your decision and is never switched back on automatically. Neither is a model a sync retired.
  • Turning it off. Set REGISTRY_AUTO_ENABLE_MODELS=0 on the server to go back to enabling every model by hand.
  • Prices that move. A change of 5% or less is applied automatically. A larger one on a model that is on sale is held — the old price keeps billing until you approve it on the Models page.
  • Models that disappear. A model missing from a provider's list twice in a row is switched off, remembering what it was, and restored if it comes back. A provider that answers with an empty or obviously partial list retires nothing.
  • Models you added by hand are never retired by a sync — ElevenLabs, for example, does not list its music or speech-to-text models at all.

Giving an account every model ​

Packages each carry a short list of models. To give one account (a demo, a staff member, a partner) everything instead, assign the hidden All access plan:

bash
npm run plans:grant-all-access -- --email someone@example.com --dry-run
npm run plans:grant-all-access -- --email someone@example.com --days 365

The plan grants every model on sale, including ones switched on later, and adds 100,000,000 tokens. It is not shown on the pricing page and cannot be bought. Assigning it replaces the account's current package.

kikori.ai — internal documentation