Pricing
Pricing your app
Charge for a marketplace app with price books — plans, trials, monthly active users, usage reporting, review and price changes.
Paid apps are priced with a price book per major version line (1.x, 2.x, …). A price book offers one
or more plans (editions, such as Starter and Team). The installer picks a plan and consents to its prices.
Verentis bills the customer, and you earn your revenue share of every charge.
Price books
- One line per major version. Installations of
1.xare billed by the1.xprice book, even after you ship2.x. Updates within a major keep the plan the customer consented to. - Revisions are reviewed. Every revision is reviewed before buyers see it, and a submitted revision can't be edited. To change prices, propose a new revision.
- Two ways to author.
- Propose the first revision in the manifest (
spec.pricing; see Usage metrics & pricing). It is submitted automatically when you publish the first version of a major. - Edit in the developer portal: Packages → your package → Pricing → Create price book / Propose price change,
then Submit for review. The API is
POST/PUT /v1/packages/{packageId}/price-books[/{id}]andPOST /v1/packages/{packageId}/price-books/{id}/submit.
- Propose the first revision in the manifest (
- Packages without a price book for the installed major are free (or use the deprecated single price plan).
Plans and components
Each plan combines up to one component of each kind:
| Component | Charged |
|---|---|
flat-monthly | Once per month per customer account, however many workspaces install the plan |
per-installation | Per month for each installation |
one-off | Once per account and major version, when the trial ends (or at install without a trial) |
per-active-user | Per monthly active user, one component per audience |
usage | Per unit of a declared metric, one component per metric |
Monthly prices are prorated per day.
Tiers. Any component can be tiered.
- With
graduatedtiers, each unit is charged at the price of the tier it falls into. - With
volumetiers, every unit is charged at the price of the tier the total reaches.
Plan options.
| Option | Effect |
|---|---|
trial-days | Nothing is charged during the trial. A customer gets a trial once per package, no matter how many workspaces or reinstalls. Uninstalling during the trial owes nothing. |
max-users | Active users beyond the cap are not charged. |
minimum-monthly | If the month's charges for the plan are lower, the customer is charged the difference at month end. |
Currencies. USD is required. Add other currencies to set local prices; otherwise prices are converted from
USD at the platform's monthly FX rate.
Active users
A user is an active user of your app in a month if they use one of its installations at least once that month. Verentis observes activity on the platform side; you don't report it. A user counts when they:
- open one of your app's documents (the platform mints an app token for the launch);
- start or join a collaboration session in your app (WOPI or native);
- run one of your app's programs, including scheduled and triggered runs;
- use one of your app's tools through the AI assistant.
Each user counts once per month: once per account (default uniqueness), or once per workspace with
uniqueness: workspace. Each user is charged as they are first seen in the month, so the bill grows with
adoption rather than being estimated upfront.
Audiences
audience | Counts |
|---|---|
internal (default) | Members of the installing account |
external | Users from outside the installing account |
service | Service principals, such as the run-as principal your app backend or schedules use |
Each audience you price is a separate component. An audience without a component is free. If your app runs
mostly as a service principal, decide whether to price service users or leave them free.
Reporting usage
Apps with a backend report custom metrics to price with usage components. First declare the metrics in
spec.usage-metrics, then report them with the backend's own client-credentials token:
POST /v1/installations/{installationId}/usage
Authorization: Bearer <backend client-credentials token>
Content-Type: application/json
{
"records": [
{
"metric": "documents.converted",
"quantity": 3,
"idempotencyKey": "job-8f2c:convert",
"occurredAt": "2025-05-14T09:30:00Z"
}
]
}
| Rule | |
|---|---|
| Caller | Only the backend bound to the installation's package version can report for it (403 otherwise). |
| Metrics | Only custom metrics declared by the installed version. Platform metrics (ai.tokens, compute.vcpu-seconds, …) are measured by Verentis. |
| Records | 1–100 per request. quantity greater than 0 and at most 1,000,000,000. |
idempotencyKey | Required, up to 128 characters A-Z a-z 0-9 . _ : -, stable across retries. Each key counts once per installation. |
occurredAt | Optional (defaults to now), at most 3 days in the past and 5 minutes in the future. |
| Response | 202 Accepted with the number of accepted records. Any invalid record rejects the whole request with 400. |
Retry failed requests with the same idempotency keys.
Review and effective dates
Reviewers check every submitted revision. Prices above the marketplace's guardrails are flagged for closer review, never rejected automatically. A rejection includes the reviewer's reason.
| Revision | Takes effect |
|---|---|
| First price book of a major | On approval |
| Only lowers prices | On approval |
Raises any price or minimum, adds a component, removes a plan, or introduces or lowers max-users | At the start of the next calendar month (UTC) if that is at least 14 days after approval, otherwise at the first month start at least 30 days after approval |
A revision that mixes increases and decreases is an increase as a whole. Until it takes effect, customers keep the previous prices and see the upcoming change on their billing page and on your package page. Accounts with an active installation are notified by email.
GET /v1/packages/{packageId}/pricing returns the active and upcoming price books for every major.
Your earnings
You earn a share of every charge for your app, including subscriptions, fees, active users, usage and minimum top-ups. The default share is 70%. Refunds and credits reverse earnings at the share they were earned with.