Pricing Models
Pricing models for Imperal Cloud extensions — choose free, per-action, or subscription billing and set the credit cost charged each time a chat function runs.
When you publish an extension, you pick one of three pricing models. You can change the model + values while the app is draft or suspended; once active, you must Pause first to edit.
free — no charge per call
pricing_model = "free"
pricing_config = {} # nothing else neededNo credits flow on a call. Your earnings analytics still record the call (with a zero share) so usage stats stay complete.
Use when:
- Building audience / portfolio extensions
- Helper utilities that complement a paid extension you also publish
- Anything where the value-prop is "make Imperal more useful for free"
per_action — charge per function call
pricing_model = "per_action"
pricing_config = {
"tool_prices": {
"summarize_inbox": 5, # credits per call
"draft_reply": 3,
"send_email": 10,
"list_messages": 1,
}
}
revenue_split_dev = 70 # explorer tier default; 80/85/95 at indie/studio/partnerFor each @chat.function, you set an integer credit cost. Pricing maps to the base_price component; web-kernel adds platform_fee on top (model-tier-derived; zero for BYOLLM users).
Effective user-side cost per call:
Non-BYOLLM user: cost = tool_price + platform_fee (e.g. 5 + 60 = 65 credits)
BYOLLM user: cost = tool_price (e.g. 5 credits)Your earnings per call (at explorer tier 70% — computed on your base_price, never the platform_fee):
Non-BYOLLM: earned = floor(base_price 5 × 0.70) = 3 credits (Imperal keeps the 60-credit platform_fee whole)
BYOLLM: earned = floor(5 × 0.70) = 3 creditsUpgrade to indie/studio/partner for higher % — see Developer Tiers for break-even math. BYOLLM impact in detail: BYOLLM Pricing.
Setting tool prices via the UI
- Open Dev Portal → My App → Pricing tab.
- Click Edit Pricing.
- Switch model to Per Action.
- For each discovered function, enter a credit price (or 0 for free-per-function inside an otherwise-paid extension).
- Save → status flips to
draft(or stayssuspended) → admin re-approval needed before live.
Functions are discovered from disk — the Dev Portal lists every
@chat.functionit finds in your deployed extension. Add a new function → push to git → deploy → it appears in the price table on next refresh.
Tip: pricing by action type
A common pattern — price destructive more than write more than read. When you DON'T set an explicit price for a function, the platform charges its category default for that action type. These defaults are an Imperal-managed platform setting — the values below are the current ones and can change:
| action_type | current default |
|---|---|
read | 1 credit |
write | 5 credits |
destructive | 10 credits |
If you want prices you fully control, set explicit tool_prices — anything you list is honored verbatim and is never affected by a change to the platform defaults. You're free to pick your own numbers; just remember users see the total including platform_fee — high prices push users away.
subscription — flat monthly fee per user
pricing_model = "subscription"
pricing_config = {
"monthly_price": 5000 # credits per month per user
}
revenue_split_dev = 80Not yet enforced. Dev Portal accepts subscription mode, but the recurring-billing behavior is not yet live. Stick to
per_actionorfreefor now if you want predictable revenue.
When enforced, this will:
- Charge the user's wallet
monthly_priceon subscription start AND every 30 days - Suspend access if the wallet can't cover the next cycle
- Resume on user top-up
When pricing goes live
Your saved pricing in Dev Portal is the source of truth for the UI and admin review. Once a change is approved, prices propagate to the billing runtime within seconds and apply to subsequent calls — there is nothing for you to wire up or push manually.
To inspect your live pricing and earnings programmatically, use the documented /v1/developer/* API; you never touch the underlying storage layer directly.
Edit lifecycle
draft / suspended → edit prices freely → Submit for Review
│
▼
pending_review
│
(admin review)
│
┌─────────────────────┴────────────────┐
▼ ▼
approved rejected
│ │
▼ ▼
status='active' status='draft' + reason
prices propagate you fix + resubmit
and go LIVEActive = immutable. To change anything, Dev Portal → Pause → edit → Resubmit. This protects users from surprise price hikes.
Per-function pricing — when category isn't enough
If your extension has wildly different costs per tool (e.g. lookup is trivial but full_report calls a paid API on your backend), use per_action with per-function prices instead of relying on the action_type categories.
pricing_config = {
"tool_prices": {
"lookup": 1,
"summarize": 5,
"full_report": 50, # this one's expensive, charge accordingly
}
}Tools you don't list fall back to the platform's current category defaults for their action type (currently read=1 / write=5 / destructive=10 — an Imperal-managed setting that can change). Anything you list explicitly in tool_prices is always honored verbatim and is unaffected by a platform-default change. To make a tool free, list it explicitly with 0.
Developer Tiers — split, caps, payouts
Developer revenue share from 70% to 95% across four Imperal Cloud tiers — compare monthly caps, per-call rates, publishing limits, and payout eligibility.
Revenue & Earnings
Revenue and earnings for Imperal Cloud developers — see how your share accrues in real time on every user action, and how Webbee usage turns into payouts.