Verentis

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.x are billed by the 1.x price book, even after you ship 2.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}] and POST /v1/packages/{packageId}/price-books/{id}/submit.
  • 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:

ComponentCharged
flat-monthlyOnce per month per customer account, however many workspaces install the plan
per-installationPer month for each installation
one-offOnce per account and major version, when the trial ends (or at install without a trial)
per-active-userPer monthly active user, one component per audience
usagePer unit of a declared metric, one component per metric

Monthly prices are prorated per day.

Tiers. Any component can be tiered.

  • With graduated tiers, each unit is charged at the price of the tier it falls into.
  • With volume tiers, every unit is charged at the price of the tier the total reaches.

Plan options.

OptionEffect
trial-daysNothing 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-usersActive users beyond the cap are not charged.
minimum-monthlyIf 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

audienceCounts
internal (default)Members of the installing account
externalUsers from outside the installing account
serviceService 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
CallerOnly the backend bound to the installation's package version can report for it (403 otherwise).
MetricsOnly custom metrics declared by the installed version. Platform metrics (ai.tokens, compute.vcpu-seconds, …) are measured by Verentis.
Records1–100 per request. quantity greater than 0 and at most 1,000,000,000.
idempotencyKeyRequired, up to 128 characters A-Z a-z 0-9 . _ : -, stable across retries. Each key counts once per installation.
occurredAtOptional (defaults to now), at most 3 days in the past and 5 minutes in the future.
Response202 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.

RevisionTakes effect
First price book of a majorOn approval
Only lowers pricesOn approval
Raises any price or minimum, adds a component, removes a plan, or introduces or lowers max-usersAt 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.

Next