Skip to main content
Version: 2.0.1

Version 1.0

info

We use YAML type abbreviations to describe the supported types of fields.

The YAML snippets demonstrating the Pricing2Yaml specification are intentionally incomplete. Certain fields have been omitted for clarity and explanation purposes.

saasName

  • required
  • Field type: str

Name of the pricing.

saasName: "Petclinic"
Pricing4JavaPricing4TS
saasName

version

  • mandatory
  • Supported value: 1.0
version: "1.0"
Pricing4JavaPricing4TS
version

day

  • mandatory
  • Field type: int

Day of the month in which the pricing is model.

day: 29
Pricing4JavaPricing4TS
day

month

  • mandatory
  • Field type: int from 1 to 12

Month of the year the pricing is model.

Number 1 stands for January and 12 for December.

month: 10 # October
Pricing4JavaPricing4TS
month

year

  • mandatory
  • Field type: int

Year in which the pricing is model.

year: 2024
Pricing4JavaPricing4TS
year

currency

  • required
  • Field type: str

Currency in which the pricing plans and addOns are selled. Use preferably currency codes for better pricing standarization.

For example USD stands for USA dollars and EUR stands for Euros.

currency: "USD"

Libraries support

Pricing4JavaPricing4TS
currency

hasAnnualPayment

  • mandatory
  • Field type: bool

Setting hasAnnualPayment to true means that your pricing supports yearly billing.

hasAnnualPayment: true
Pricing4JavaPricing4TS
hasAnnualPayment

features

  • required
  • Field type: map

A map containing your pricing features. Each key of the map is the feature name and its value is a map containing feature attributes.

features:
awesome_feature:
cool_feature:
nice_feature:
# ...

Libraries support

Pricing4JavaPricing4TS
features

features.<name>.description

  • optional
  • Field type: str

Brief summary of what features does and offers to your users. Feature descriptions are usually in a collapsable element or in an icon hiding it, see Github pricing descriptions for example.

features:
publicRepositories:
description: Host open source projects in public GitHub repositories, accessible via web or command line.
Public repositories are accessible to anyone at GitHub.com."

Libraries support

Pricing4JavaPricing4TS
features.<name>.description

features.<name>.type

  • required
  • Field type: str
  • Supported values: one of AUTOMATION, DOMAIN, GUARANTEE, INFORMATION, INTEGRATION, MANAGEMENT, PAYMENT or SUPPORT

Automation: they permit to configure the system in order to perform some actions autonomously or track thresholds and notify the user if anyone is exceeded. It also includes any task performed by a bot or AI, such as predictions, generative AI, etc...

features:
codeOwners:
description:
Automatically request reviews or require approval by selected contributors
when changes are made to sections of code that they own.
type: AUTOMATION
automationType: TRACKING

Domain: provide functionality related to the domain of the system, allowing to perform new operations or using exclusive services.

features:
publicRepositories:
description:
Host open source projects in public GitHub repositories, accessible via
web or command line. Public repositories are accessible to anyone at
GitHub.com.
type: DOMAIN

Guarantee: technical commitments of the company that operates the system towards the users.

features:
dataCypher:
description: Data encryption at rest and in transit.
type: GUARANTEE

Information: allow to see, use, visualize or extract additional data from your features.

features:
auditLogs:
description:
Audit logs: Audit logs provide a record of changes and usage in the
Enterprise Grid plan. You can view audit logs directly in Slack, export
them in CSV format, and use the audit logs API to create custom monitoring
tools.
type: INFORMATION

Integration: permit users to interact with the system through its API, or to use functionalities from external third-party software within the system.

features:
adminAnalyticsAPI:
description: Retrieve analytics data for a specific date in a
compressed JSON file format.
type: INTEGRATION
integrationType: API

Management: are focused on team leaders and system administrators. They ease the supervision, organization and guidance of projects, and allow the configuration of accounts and organization-based restrictions and rules.

features:
customUserGroups:
description:
Custom user groups: Facilitate receiving notifications and communicating
with entire teams, departments, and groups.
type: MANAGEMENT

Support: expose the granularity of customer support offered within the plans.

features:
enterpriseSupport:
description: Custom support for our business partners
type: SUPPORT

Payment: specify payment conditions and possibilities.

features:
paymentMethod:
type: PAYMENT
defaultValue:
- INVOICE
- OTHER

Libraries support

Pricing4JavaPricing4TS
features.<name>.type

features.<name>.valueType

  • required
  • Field type: str
  • Supported values: one of BOOLEAN, NUMERIC or TEXT

Field valueType sets the defaultValue type signature of the feature you are modeling. For example, if your feature valueType is BOOLEAN you must put true or false in the defaultValue field, if valueType is NUMERIC you must put a number and in the case of TEXT then defaultValue has to be a string or a list of string.

features:
boolean-feature:
valueType: BOOLEAN
defaultValue: false
numeric-feature:
valueType: NUMERIC
defaultValue: 0
text-feature:
valueType: TEXT
defaultValue: Pricing2Yaml is awesome!

Libraries support

Pricing4JavaPricing4TS
features.<name>.valueType

features.<name>.defaultValue

  • required
  • Field type is bool if valueType is set to BOOLEAN
  • Field type is int if valueType set to NUMERIC
  • Field type is str or seq of payment methods if valueType is set to TEXT

This field holds the default value of your feature. All default values are shared in your plan and addons. You can override your features values in plans.<plan_name>.features or in addOns.<addOn_name>.features section of your pricing.

Supported payment methods are: CARD, GATEWAY, INVOICE, ACH, WIRE_TRANSFER or OTHER.

To help you understand how overriding features works, imagine you have the following pricing matrix:

SILVERGOLDPLATINUM
supportPriorityLOWMEDIUMHIGH

If you want your supportPriority to be different in your GOLD and PLATINUM plans you will do the following using Pricing2Yaml syntax:

features:
supportPriority:
valueType: TEXT
defaultValue: LOW
plans:
SILVER:
features: null
GOLD:
features:
supportPriority:
value: MEDIUM
PLATINUM:
features:
supportPriority:
value: HIGH

Notice that SILVER features are null, meaning that, supportPriority will have the value LOW as you have previously define it in the features block.

Libraries support

Pricing4JavaPricing4TS
features.<name>.defaultValue

features.<name>.expression

See Feature Evaluation for details.

Libraries support

Pricing4JavaPricing4TS
features.<name>.expression

features.<name>.serverExpression

See Feature Evaluation for details.

Libraries support

Pricing4JavaPricing4TS
features.<name>.expression

features.<name>.automationType

  • If feature type is AUTOMATION this field is required
  • Field type: str
  • Supported values: one of BOT, FILTERING, TRACKING or TASK_AUTOMATION

Type of the automation feature.

BOT: every automation feature that depends on machine learning algorithms or LLMs.

features:
postbot:
description: "https://learning.postman.com/docs/getting-started/basics/about-postbot/"
type: AUTOMATION
automationType: BOT

FILTERING: every automation feature that filters information. For example, spam filtering of mail clients.

features:
emailSpamFilter:
description: "Help protect your business against spam and malware with cloud-based email filtering"
type: AUTOMATION
automationType: FILTERING

TRACKING: every automation feature that monitors a metric and notify the user when reaching his threshold. For example, features that triggers some kind of event in the system like reaching the limit of API calls.

features:
dependabotAlerts:
description: "Get notified when there are new vulnerabilities affecting dependencies in your repositories."
type: AUTOMATION
automationType: TRACKING

TASK_AUTOMATION: every automation feature that permit users to automate tasks. For example, automatically moving the issues to "Done" when thery are closed in the Github kanban board.

features:
dependabotVersionUpdates:
description: "Keep projects up-to-date by automatically opening pull requests that update out-of-date dependencies."
type: AUTOMATION
automationType: TASK_AUTOMATION

Libraries support

Pricing4JavaPricing4TS
features.<name>.automationType

features.<name>.docUrl

  • If feature type is GUARANTEE this is required
  • Field type: str

URL redirecting to the guarantee or compliance documentation.

features:
enterpriseGradeSecurity:
description: "https://www.wrike.com/features/admin-security/"
type: GUARANTEE
docUrl: "https://www.wrike.com/features/admin-security/"

Libraries support

Pricing4JavaPricing4TS
features.<name>.docUrl

features.<name>.integrationType

  • If feature type is INTEGRATION this is required
  • Field type: str
  • Supported values: one of API, EXTENSION, IDENTITY_PROVIDER, WEB_SAAS, MARKETPLACE or EXTERNAL_DEVICE

Type of the integration feature.

API: every feature that includes an internal API that developers can consume.

adminAnalyticsAPI:
description: "Admin analytics API: Retrieve analytics data for a specific date in a compressed JSON file format."
type: INTEGRATION
integrationType: API

EXTENSION: every integration feature that extends your SaaS using an external system. For example a browser extension or code editor extension like VSCode.

features:
copilotIDEIntegration:
description: "Get IDE integration from Copilot in your IDE and mobile devices."
type: INTEGRATION
integrationType: EXTENSION

IDENTITY_PROVIDER: every integration feature, that involves a process to authenticate users internally or externally. For example Single Sign On (SSO) or LDAP.

features:
ldap:
description: Access GitHub Enterprise Server using your existing accounts and centrally manage repository access.
type: INTEGRATION
integrationType: IDENTITY_PROVIDER

WEB_SAAS: every integration feature that involves an external SaaS. For example, sync your calendar with Outlook. Usage of features.<name>.pricingUrls is required.

features:
githubIntegration:
description: "Link your Overleaf projects directly to a GitHub repository that
acts as a remote repository for your overleaf project. This allows you to
share with collaborators outside of Overleaf, and integrate Overleaf into more complex workflows."
type: INTEGRATION
integrationType: WEB_SAAS
pricingsUrls:
- https://github.com/pricing

MARKETPLACE: every integration feature that offers many posibilities to integrate with other systems. For example a marketplace that offers widgets.

features:
githubApps:
description: Install apps that integrate directly with GitHub's API to improve
development workflows or build your own for private use or publication in the GitHub Marketplace."
type: INTEGRATION
integrationType: MARKETPLACE

EXTERNAL_DEVICE: every integration feature that involves interactiing with an outer device, like a mobile, a computer desktop. For example a 2FA feature.

features:
apps:
description: "Track time using a mobile app, desktop app, and browser extension."
type: INTEGRATION
integrationType: EXTERNAL_DEVICE

Libraries support

Pricing4JavaPricing4TS
features.<name>.integrationType

features.<name>.pricingUrls

  • If feature type is INTEGRATION and integrationType is WEB_SAAS this field is required
  • Field type: seq of str

You can specify a list of URLs linking to the associated pricing page of third party integrations that you offer in your pricing.

features:
googleWorkspaceIntegration:
type: INTEGRATION
integrationType: WEB_SAAS
pricingURLs:
- https://workspace.google.com/pricing

Libraries support

Pricing4JavaPricing4TS
features.<name>.pricingUrls

usageLimits

  • optional
  • Field type: map

A map containing the usage limits of your pricing. Each entry of this map will be the name of the corresponding usage limit.

usageLimits:
maxPets:
collaborators:
githubActionsQuota:
# ...
Pricing4JavaPricing4TS
usageLimits

usageLimits.<name>.description

  • optional
  • Field type: str

Brief summary of what the usage limit restricts.

usageLimits:
useMessagesAccess:
description: "The number of days you can access message and file information."
Pricing4JavaPricing4TS
usageLimits.<name>.description

usageLimits.<name>.type

  • required
  • Field type: str
  • Supported values: one of NON_RENEWABLE RENEWABLE , RESPONSE_DRIVEN or TIME_DRIVEN

Field that indicates the type of usage limit based on our clasification of usage limits.

NON_RENEWABLE: define a static limit towards which the user approaches, and that will remain until the end of the subscription.

usageLimits:
uploadSizeLimit:
type: NON_RENEWABLE

RENEWABLE: their limit is reset after a period of time, could be a day, week, month...

usageLimits:
githubCodepacesCoreHours:
type: RENEWABLE

RESPONSE_DRIVEN: represent a limit where user consumes more or less of his quota depending on the computational cost of the SaaS associated with the request.

usageLimits:
flowCredits:
description: "Number of flows executions steps included per month"
unit: credit/month
type: RESPONSE_DRIVEN

TIME_DRIVEN: with this type the quota is consumed by usage time, and is normally combined with a non-renewable limit.

compileTimeoutLimit:
description:
This is how much time you get to compile your project on the Overleaf servers.
You may need additional time for longer or more complex projects.
type: TIME_DRIVEN

Libraries support

Pricing4JavaPricing4TS
usageLimits.<name>.type

usageLimits.<name>.valueType

  • required
  • Field type: str
  • Supported values: one of BOOLEAN, NUMERIC or TEXT

Field valueType sets the defaultValue type signature of the usage limit you are modeling. For example, if your usage limit valueType is BOOLEAN you must put true or false in the defaultValue field, if valueType is NUMERIC you must put a number and in the case of TEXT then defaultValue has to be a string.

usageLimits:
privateAccessToCodeRepositories:
valueType: BOOLEAN
defaultValue: false
storageQuota:
valueType: NUMERIC
defaultValue: 30
support:
valueType: TEXT
defaultValue: LOW

Libraries support

Pricing4JavaPricing4TS
usageLimits.<name>.valueType

usageLimits.<name>.defaultValue

  • required
  • Field type is bool if valueType is set to BOOLEAN
  • Field type is int if valueType set to NUMERIC
  • Field type is str if valueType is set to TEXT

This field holds the default value of your usage limit. All default values are shared in your plan and addons. You can override your usage limits values in plans.<plan_name>.usageLimits or in addOns.<addOn_name>.usageLimits section of your pricing.

To help you understand how overriding usage limits works, imagine you have the following pricing matrix:

SILVERGOLDPLATINUM
collaborators1610

If you want your collaborators usage limit to be different in your GOLD and PLATINUM plans you will do the following using Pricing2Yaml syntax:

usageLimits:
collaborators:
valueType: NUMERIC
defaultValue: 1
plans:
SILVER:
usageLimits: null
GOLD:
usageLimits:
collaborators:
value: 6
PLATINUM:
usageLimits:
collaborators:
value: 10

Libraries support

Pricing4JavaPricing4TS
usageLimits.<name>.defaultValue

usageLimits.<name>.unit

  • required
  • Field type: str

Measure of the usage limit.

Here is an example using unit from Github pricing:

usageLimits:
githubActionsQuota:
unit: minute/month

Libraries support

Pricing4JavaPricing4TS
usageLimits.<name>.unit

usageLimits.<name>.linkedFeatures

  • optional
  • Field type: seq of feature names which are str

Bounds your usage limit to a one or multiple features by adding your feature name to the list.

features:
feature1:
feature2:
feature3:
feature4:
usageLimits:
usageLimit1:
linkedFeatures:
- feature1
- feature2
- feature3
usageLimit2:
linkedFeatures:
- feature4

Libraries support

Pricing4JavaPricing4TS
usageLimits.<name>.linkedFeatures

plans

  • optional
  • Field type: map

A map containing the plans of your pricing. Each entry of this map will be the name of the corresponding plan.

saasName: Petclinic
plans:
BASIC:
GOLD:
PLATINUM:
# ...
info

You have to specify at least plans or addOns. A combination of both also works.

Pricing4JavaPricing4TS
plans

plans.<name>.description

  • optional
  • Field type: str

An overview describing the plan's purpose.

plans:
FREE:
description: "All the basics for businesses that are just getting started."

Libraries support

Pricing4JavaPricing4TS
plans.<name>.description

plans.<name>.monthlyPrice

  • required
  • Field type: float

Price of your plan when billing is set to monthly.

plans:
PRO:
monthlyPrice: 9.99
info

You have to specify at least monthlyPrice or annualPrice. A combination of both also works.

Libraries support

Pricing4JavaPricing4TS
plans.<name>.monthlyPrice

plans.<name>.annualPrice

  • required
  • Field type: float

Price of your plan when billing is set to annual.

plans:
PRO:
annualPrice: 14.99
info

You have to specify at least monthlyPrice or annualPrice. A combination of both also works.

Libraries support

Pricing4JavaPricing4TS
plans.<name>.annualPrice

plans.<name>.unit

  • required
  • Field type: str

Measure of the plan subscription.

plans:
TEAM:
unit: user/month

Libraries support

Pricing4JavaPricing4TS
plans.<name>.unit

plans.<name>.features

  • optional when leaving the field blank or null, loads every defaultValue of your features
  • Field type: map

A map containing the keys of your features you want to override.

features:
awesome_feature:
cool_feature:
nice_feature:
plans:
my_plan:
features:
cool_feature:
nice_feature:
# ...

Libraries support

Pricing4JavaPricing4TS
plans.<name>.features

plans.<name>.features.<name>.value

  • optional
  • Field type: bool, int or str depending on the valueType of the feature

Every plan that you model will have by default all features defaultValue. You can customize it by putting a value in it.

features:
supportPriority:
defaultValue: LOW
plans:
GOLD:
features:
supportPriority:
value: MEDIUM

Libraries support

Pricing4JavaPricing4TS
plans.<name>.features.<name>.value

plans.<name>.usageLimits

  • optional when leaving the field blank or null it loads every defaultValue of your usage limits
  • Field type: map

A map containing the keys of your usage limits you want to override.

usageLimits:
usageLimit1:
usageLimit2:
plans:
my_plan:
usageLimits:
usageLimit1:
usageLimit2:
# ...

Libraries support

Pricing4JavaPricing4TS
plans.<name>.usageLimits

plans.<name>.usageLimits.<name>.value

  • optional
  • Field type: bool, int or str depending on the valueType of the usage limit

Every plan that you model will have by default all usage limits defaultValue. You can customize it by putting a value in it.

In the following example collaborators usage limit is overridden by STANDARD.

usageLimits:
collaborators:
defaultValue: 1
addOns:
STANDARD:
usageLimits:
collaborators:
value: 6

Libraries support

Pricing4JavaPricing4TS
plans.<name>.usageLimits.<name>.value

addOns

  • optional
  • Field type: map

A map containing the addons of your pricing. Each entry of this map will be the name of the corresponding addon.

addOns:
awesome_addOn:
cool_addOn:
# ...
info

You have to specify at least plans or addOns. A combination of both also works.

Libraries support

Pricing4JavaPricing4TS
addOns

addOns.<name>.description

  • optional
  • Field type: str-

An overview describing the addon purpose.

addOns:
StorageBooster:
description: Boost your file storage. Do not run out of space!.

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.description

addOns.<name>.availableFor

  • optional, if the availableFor field is not present within an add-on, it will be available for all plans by default
  • Field type: seq of plan names

This add-on fields indicates that your add-on is available to purchase only if the user is subscribed to any of the plans indicated in this list.

plans:
SILVER:
GOLD:
PLATINUM:
# ...
addOns:
EMERALD:
# if availableFor is missing or null EMERALD is available for
# SILVER, GOLD and PLATINUM by default
# availableFor: null
RUBY:
availableFor:
- GOLD
- SILVER

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.availableFor

addOns.<name>.monthlyPrice

  • required
  • Field type: float

Price of your addon when billing is set to monthly.

addOns:
postmanFlowsBasic:
monthlyPrice: 15.00
info

You have to specify at least monthlyPrice or annualPrice. A combination of both also works.

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.monthlyPrice

addOns.<name>.annualPrice

  • required
  • Field type: float

Price of your addon when billing is set to annual.

addOns:
postmanFlowsBasic:
annualPrice: 12.00
info

You have to specify at least monthlyPrice or annualPrice. A combination of both also works.

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.annualPrice

addOns.<name>.unit

  • required
  • Field type: str

Measure of the addon subscription.

addOns:
gitLFSDataPack:
unit: user/month

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.unit

addOns.<name>.features

  • optional when leaving the field blank or null, loads every defaultValue of your features
  • Field type: map

A map containing the keys of your features you want to override.

features:
awesome_feature:
cool_feature:
nice_feature:
addOns:
my_addOn:
features:
cool_feature:
nice_feature:
# ...

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.features

addOns.<name>.features.<name>.value

  • optional
  • Field type: bool, int or str depending on the valueType of the feature

Every addon that you model will have by default all features defaultValue. You can customize it by putting a value in it.

features:
supportPriority:
defaultValue: LOW
addOns:
B:
features:
supportPriority:
value: MEDIUM

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.features.<name>.value

addOns.<name>.usageLimits

  • optional when leaving the field blank or null it loads every defaultValue of your usage limits
  • Field type: map

A map containing the keys of your usage limits you want to override.

usageLimits:
usageLimit1:
usageLimit2:
addOns:
my_addOn:
usageLimits:
usageLimit1:
usageLimit2:
# ...
Pricing4JavaPricing4TS
addOns.<name>.usageLimits

addOns.<name>.usageLimits.<name>.value

  • optional
  • Field type: bool, int or str depending on the valueType of the usage limit

Every addon that you model will have by default all usage limits defaultValue. You can customize it by putting a value in it.

In the following example collaborators usage limit are overridden by B and C:

usageLimits:
collaborators:
defaultValue: 1
addOns:
A:
usageLimits: null
B:
usageLimits:
collaborators:
value: 6
C:
usageLimits:
collaborators:
value: 10

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.usageLimits.<name>.value

addOns.<name>.usageLimitsExtensions

  • optional
  • Field type: map

A map containing the keys of your usage limits that you want to extend with this addon.

usageLimits:
my_usage_limit:
defaultValue: 5
addOns:
my_addOn:
usageLimitsExtensions:
my_usage_limit:

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.usageLimitsExtensions

addOns.<name>.usageLimitsExtensions.<name>.value

  • optional
  • Field type: bool, int or str depending on the valueType of the usage limit

Specify the quantity in which you want to extend your usage limit

In the following example collaborators usage limit is extended by 10 units:

usageLimits:
collaborators:
defaultValue: 1
addOns:
B:
usageLimitsExtensions:
collaborators:
value: 10

Libraries support

Pricing4JavaPricing4TS
addOns.<name>.usageLimitsExtensions.<name>.value