Skip to main content
An Expert’s billing type is not something you select from a list — it is derived automatically from the price you enter. Enter 0 and it is free (FREE); enter anything greater than 0 and it is unlock (UNLOCK). There is no third option. A trial is not a separate billing type; it is two parameters on an unlock Expert (allowTrial and freeTrialPerUser). Metered billing does not exist for the Expert product — that term belongs to a separate vocabulary used by Apps and the open platform.
Figures on this page verified 2026-08-11; sources listed under “Sources of truth” at the end.

The two billing types

The derivation is hard-coded server-side and cannot be bypassed:
Two consequences follow:
  • Changing the price from 199 to 0 automatically converts the Expert from UNLOCK to FREE — there is no separate switch to flip
  • The billing_type column can only ever hold one of these two values; any other value mentioned in third-party docs or older versions does not apply to Experts
You may have seen METERED, ONE_TIME, and PER_USE in the open platform SDK or App configuration. That is the App product’s own vocabulary (packages/db/src/constants/billing-type.ts), a different namespace from an Expert’s FREE / UNLOCK. Supplying those values for an Expert has no effect.

Parameter bounds (enforced server-side)

The following constraints are enforced by the API layer’s schema. Out-of-range values return 400 — they are never silently clamped: The price is an integer and does not accept decimals. Entering 99,901 is rejected:

How trial turns resolve

Trial turns resolve in two layers, with the Expert-level value taking precedence over the global one:
So “entering 0 means no trial” is wrong — entering 0 delegates to the global default, and users still get 3 turns. To genuinely disable trials you must set allowTrial to 0:
The global expert_trial_turns is configured by platform operations and can change at any time. If your Expert needs a definite number of trial turns — because your product description promises “5 free trial turns,” for instance — set freeTrialPerUser = 5 explicitly rather than relying on the global default.

How to configure it

1

Open the Expert editor in Studio

Open your Expert and switch to the “Billing” tab.
2

Enter the price

0 for free; any positive integer for unlock. The billing type derives automatically — there is nothing else to select.
3

Configure the trial (only meaningful for unlock Experts)

Set freeTrialPerUser (1–10) if you need a definite number of turns; turn off the “allow trial” switch to disable trials entirely. Trials do not apply to free Experts.
4

Save and submit for review

Saving only writes the draft row. For an already-published Expert, a new price does not reach users until you publish a new version and it passes review; the old price stays live in the meantime.

Boundaries and failure states

This is by design, not a caching problem. For a PUBLISHED Expert, the public-facing surface reads the latest approved record in expert_release, not the draft row you are editing. A price change takes effect only via “publish new version → review approved.” The old version stays live throughout review.
That Expert already has a version under review (pending_submission_id is non-null), which locks the draft row against edits. Withdraw the pending submission in Studio, or wait for the review outcome, before changing the price.
No. An unlock is a one-time permanent entitlement; price changes apply only to new users afterwards.
No. Completed unlock transactions and already-credited diamond revenue are unaffected by later price changes.
No. Creator self-purchases are excluded from revenue to prevent gaming.

Verifying your configuration

After the release passes review, open the Expert’s marketplace page in a private window using an account that is not yours, and check each item:
  1. The price on the marketplace card matches what you entered (free Experts show “Free,” not “0 credits”)
  2. Start a conversation; when the trial turns run out, an unlock prompt appears with the turn count you expected
  3. If you disabled trials, the very first message should require purchase, with no free turns at all
Verifying with your own account proves nothing — creators have full access to their own Experts and never see the trial gate.

Your revenue

  • Unlock (UNLOCK) — each time a user unlocks, you receive diamond revenue at the share rate for your creator level
  • Free (FREE) — no direct revenue; typically used as a funnel alongside paid Experts
Share rates and level thresholds are in Revenue System.

Sources of truth

Verified 2026-08-11. Sources:
  • Billing type derivation: services/core/src/db/service/expert.ts
  • Parameter validation ranges: services/core/src/routes/marketplace-expert/index.ts
  • Trial turn rules and the default of 3: services/core/src/db/service/expert-trial.ts
  • The App product’s separate vocabulary: packages/db/src/constants/billing-type.ts
The global expert_trial_turns is an ops-configurable platform setting; this page documents only the default and the fallback rule.

Next steps

Publish to the Marketplace

Pricing set — time to go live

Revenue System

Share rates and level thresholds