Imperal Docs
Billing & Earnings

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

Dev Portal → Pricing tab → Set Model: Free
pricing_model = "free"
pricing_config = {}    # nothing else needed

No 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

Dev Portal → Pricing tab → Set Model: Per Action
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/partner

For 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 credits

Upgrade 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

  1. Open Dev Portal → My App → Pricing tab.
  2. Click Edit Pricing.
  3. Switch model to Per Action.
  4. For each discovered function, enter a credit price (or 0 for free-per-function inside an otherwise-paid extension).
  5. Save → status flips to draft (or stays suspended) → admin re-approval needed before live.

Functions are discovered from disk — the Dev Portal lists every @chat.function it 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_typecurrent default
read1 credit
write5 credits
destructive10 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

Dev Portal → Pricing tab → Set Model: Subscription
pricing_model = "subscription"
pricing_config = {
    "monthly_price": 5000   # credits per month per user
}
revenue_split_dev = 80

Not yet enforced. Dev Portal accepts subscription mode, but the recurring-billing behavior is not yet live. Stick to per_action or free for now if you want predictable revenue.

When enforced, this will:

  • Charge the user's wallet monthly_price on 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 LIVE

Active = 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.

On this page