developer-api
Developer API
Use this API
CLI (one command)
agentbridge chat developer-apiSDK / Agents
fetch("/api/developer-api/manifest")MCP (Claude Desktop / Cursor / Windsurf)
{
"mcpServers": {
"developer-api": {
"command": "npx",
"args": ["@agentbridgeai/mcp", "--api", "developer-api"]
}
}
}Add to ~/.claude/claude_desktop_config.json or Cursor/Windsurf MCP settings.
Actions (94)
/projects/{project_id}/paywallslist-paywalls
Get a list of paywalls
Parameters
project_idstringrequiredID of the projectstarting_afterstringstarting_afterlimitintegerlimitexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `items.offering` (requires `project_configuration:offerings:read` permission)./projects/{project_id}/paywallscreate-paywall
Create a paywall
Parameters
project_idstringrequiredID of the projectoffering_idstringrequiredThe ID of the offering the paywall will be created for.
/projects/{project_id}/paywalls/{paywall_id}get-paywall
Get a paywall
Parameters
project_idstringrequiredID of the projectpaywall_idstringrequiredID of the paywallexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `offering` (requires `project_configuration:offerings:read` permission), `components` (requires `project_configuration:offerings:read` permission)./projects/{project_id}/paywalls/{paywall_id}delete-paywall
Delete a paywall
Parameters
project_idstringrequiredID of the projectpaywall_idstringrequiredID of the paywall/projects/{project_id}/apps/{app_id}/public_api_keyslist-app-public-api-keys
Get a list of the public API keys of an app
Parameters
project_idstringrequiredID of the projectapp_idstringrequiredID of the app/projectslist-projects
Get a list of projects
Parameters
starting_afterstringstarting_afterlimitintegerlimit/projectscreate-project
Creates a new project
Parameters
bodyobjectrequiredRequest body/projects/{project_id}/appslist-apps
Get a list of apps
Parameters
project_idstringrequiredID of the projectstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/appscreate-app
Create an App
Parameters
project_idstringrequiredID of the projectbodyobjectrequiredRequest body/projects/{project_id}/apps/{app_id}get-app
Get an app
Parameters
project_idstringrequiredID of the projectapp_idstringrequiredID of the app/projects/{project_id}/apps/{app_id}update-app
Update an app
Parameters
project_idstringrequiredID of the projectapp_idstringrequiredID of the appnamestringThe name of the appamazonobjectAmazon type details. Should only be used when type is amazon.app_storeobjectApp Store type details. Should only be used when type is app_store.mac_app_storeobjectLegacy Mac App Store type details. Should only be used when type is mac_app_store.play_storeobjectPlay Store type details. Should only be used when type is play_store.stripeobjectStripe type details. Should only be used when type is stripe.rc_billingobjectWeb Billing type details. Should only be used when type is rc_billing.rokuobjectRoku Channel Store type details. Should only be used when type is roku.paddleobjectPaddle Billing type details. Should only be used when type is paddle./projects/{project_id}/apps/{app_id}delete-app
Delete an app
Parameters
project_idstringrequiredID of the projectapp_idstringrequiredID of the app/projects/{project_id}/apps/{app_id}/store_kit_configget-app-storekit-config
Get the StoreKit configuration for an app
Parameters
project_idstringrequiredID of the projectapp_idstringrequiredID of the app/projects/{project_id}/audit_logslist-audit-logs
List audit logs
Parameters
project_idstringrequiredID of the projectstarting_afterstringCursor for pagination. Returns audit logs after the specified audit log ID, using descending order by audit log ID.start_datestringStart date for the data range (ISO 8601 format)end_datestringEnd date for the data range (ISO 8601 format)limitintegerlimit/projects/{project_id}/collaboratorslist-collaborators
Get a list of collaborators
Parameters
project_idstringrequiredID of the projectstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/customerslist-customers
Get a list of customers
Parameters
project_idstringrequiredID of the projectstarting_afterstringstarting_afterlimitintegerlimitsearchstringSearch term. Currently, only searching by email is supported (searching for exact matches in the $email attribute)./projects/{project_id}/customerscreate-customer
Create a customer
Parameters
project_idstringrequiredID of the projectidstringrequiredThe ID of the customerattributesarrayattributes/projects/{project_id}/customers/{customer_id}get-customer
Get a customer
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `attributes` (requires `customer_information:customers:read` permission)./projects/{project_id}/customers/{customer_id}delete-customer
Delete a customer
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customer/projects/{project_id}/customers/{customer_id}/actions/transfertransfer-customer-data
Transfer customer's subscriptions and one-time purchases to another customer
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customertarget_customer_idstringrequiredThe ID of the customer to whom the subscriptions and one-time purchases will be transferred.app_idsarrayOptional. The IDs of the apps to filter the transfer by. When specified, only purchases and subscriptions associated with these apps will be transferred./projects/{project_id}/customers/{customer_id}/actions/grant_entitlementgrant-customer-entitlement
Grant an entitlement to a customer unless one already exists. As a side effect, a promotional subscription is created.
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerentitlement_idstringrequiredThe ID of the entitlement to grant to the customer.expires_atintegerrequiredThe date after which the access to the entitlement expires in ms since epoch./projects/{project_id}/customers/{customer_id}/actions/revoke_granted_entitlementrevoke-customer-granted-entitlement
Revoke a granted entitlement from a customer. As a side effect, the promotional subscription associated with the granted entitlement is expired.
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerentitlement_idstringrequiredThe ID of the granted entitlement to revoke from the customer./projects/{project_id}/customers/{customer_id}/actions/assign_offeringassign-customer-offering
Assign or clear an offering override for a customer
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customeroffering_idstringrequiredThe ID of the offering to assign to the customer. Set to null to clear any existing override./projects/{project_id}/integrations/webhookslist-webhook-integrations
List webhook integrations
Parameters
project_idstringrequiredID of the projectstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/integrations/webhookscreate-webhook-integration
Create a webhook integration
Parameters
project_idstringrequiredID of the projectnamestringrequiredThe display name of the webhook integrationurlstringrequiredThe URL RevenueCat will send webhook notifications toauthorization_headerstringOptional authorization header that will be sent with webhook notificationsenvironmentstringThe environment the webhook integration is configured forevent_typesarrayEvent types that will trigger the webhookapp_idstringThe ID of the app the webhook integration is scoped to/projects/{project_id}/integrations/webhooks/{webhook_integration_id}get-webhook-integration
Get a webhook integration
Parameters
project_idstringrequiredID of the projectwebhook_integration_idstringrequiredThe ID of the webhook integration/projects/{project_id}/integrations/webhooks/{webhook_integration_id}update-webhook-integration
Update a webhook integration
Parameters
project_idstringrequiredID of the projectwebhook_integration_idstringrequiredThe ID of the webhook integrationnamestringThe display name of the webhook integrationurlstringThe URL RevenueCat will send webhook notifications toauthorization_headerstringOptional authorization header that will be sent with webhook notificationsenvironmentstringThe environment the webhook integration is configured forevent_typesarrayEvent types that will trigger the webhookapp_idstringThe ID of the app the webhook integration is scoped to/projects/{project_id}/integrations/webhooks/{webhook_integration_id}delete-webhook-integration
Delete a webhook integration
Parameters
project_idstringrequiredID of the projectwebhook_integration_idstringrequiredThe ID of the webhook integration/projects/{project_id}/products/{product_id}get-product
Get a product
Parameters
project_idstringrequiredID of the projectproduct_idstringrequiredID of the productexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `app` (requires `project_configuration:apps:read` permission)./projects/{project_id}/products/{product_id}update-product
Update a product
Parameters
project_idstringrequiredID of the projectproduct_idstringrequiredID of the productexpandarraySpecifies which fields in the response should be expanded.
display_namestringThe display name of the product/projects/{project_id}/products/{product_id}delete-product
Delete a product
Parameters
project_idstringrequiredID of the projectproduct_idstringrequiredID of the product/projects/{project_id}/products/{product_id}/actions/archivearchive-product
Archive a product
Parameters
project_idstringrequiredID of the projectproduct_idstringrequiredID of the product/projects/{project_id}/products/{product_id}/actions/unarchiveunarchive-product
Unarchive a product
Parameters
project_idstringrequiredID of the projectproduct_idstringrequiredID of the product/projects/{project_id}/products/{product_id}/create_in_storecreate-product-in-store
Push a product to the store
Parameters
project_idstringrequiredID of the projectproduct_idstringrequiredID of the productstore_informationstringStore-specific information for creating the product in the store/projects/{project_id}/productslist-products
Get a list of products
Parameters
project_idstringrequiredID of the projectapp_idstringThis is an optional query parameter to get a list of products of a given entitlement associated with a particular appstarting_afterstringstarting_afterlimitintegerlimitexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `items.app` (requires `project_configuration:apps:read` permission)./projects/{project_id}/productscreate-product
Create a product
Parameters
project_idstringrequiredID of the projectstore_identifierstringrequiredThe store identifier of the product.
- For Apple App Store products this is the product ID of the subscription or in-app product.
- For Google's Play Store, it should follow the format 'productId:basePlanId' for subscription products and SKU for one-time purchase products.
- For Stripe, the product identifier that always starts with "prod_"
- For Amazon, if it's a subscription, the term SKU of the subscription. If it's a one-time purchase, the SKU of the product.
- For Roku, this is the product identifier of the subscription or one-time purchase product.
app_idstringrequiredThe ID of the apptypestringrequiredThe product typedisplay_namestringThe display name of the productsubscriptionstringSubscription parameters. Only supported for test store products.titlestringThe user-facing title of the product. This field is required for Test Store products./projects/{project_id}/virtual_currencieslist-virtual-currencies
Get a list of virtual currencies
Parameters
project_idstringrequiredID of the projectstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/virtual_currenciescreate-virtual-currency
Create a virtual currency
Parameters
project_idstringrequiredID of the projectcodestringrequiredThe unique code for this virtual currencynamestringrequiredThe display name of the virtual currencydescriptionstringDescription of the virtual currencyproduct_grantsarrayProduct grants that define how products grant this virtual currency/projects/{project_id}/virtual_currencies/{virtual_currency_code}get-virtual-currency
Get a virtual currency
Parameters
project_idstringrequiredID of the projectvirtual_currency_codestringrequiredThe virtual currency code/projects/{project_id}/virtual_currencies/{virtual_currency_code}update-virtual-currency
Update a virtual currency
Parameters
project_idstringrequiredID of the projectvirtual_currency_codestringrequiredThe virtual currency codenamestringThe display name of the virtual currencydescriptionstringDescription of the virtual currencyproduct_grantsarrayProduct grants that define how products grant this virtual currency/projects/{project_id}/virtual_currencies/{virtual_currency_code}delete-virtual-currency
Delete a virtual currency
Parameters
project_idstringrequiredID of the projectvirtual_currency_codestringrequiredThe virtual currency code/projects/{project_id}/virtual_currencies/{virtual_currency_code}/actions/archivearchive-virtual-currency
Archive a virtual currency
Parameters
project_idstringrequiredID of the projectvirtual_currency_codestringrequiredThe virtual currency code/projects/{project_id}/virtual_currencies/{virtual_currency_code}/actions/unarchiveunarchive-virtual-currency
Unarchive a virtual currency
Parameters
project_idstringrequiredID of the projectvirtual_currency_codestringrequiredThe virtual currency code/projects/{project_id}/entitlements/{entitlement_id}get-entitlement
Get an entitlement
Parameters
project_idstringrequiredID of the projectentitlement_idstringrequiredID of the entitlementexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `product` (requires `project_configuration:products:read` permission)./projects/{project_id}/entitlements/{entitlement_id}update-entitlement
Update an entitlement
Parameters
project_idstringrequiredID of the projectentitlement_idstringrequiredID of the entitlementdisplay_namestringrequiredThe display name of the entitlement/projects/{project_id}/entitlements/{entitlement_id}delete-entitlement
Delete an entitlement
Parameters
project_idstringrequiredID of the projectentitlement_idstringrequiredID of the entitlement/projects/{project_id}/entitlementslist-entitlements
Get a list of entitlements
Parameters
project_idstringrequiredID of the projectstarting_afterstringstarting_afterlimitintegerlimitexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `items.product` (requires `project_configuration:products:read` permission)./projects/{project_id}/entitlementscreate-entitlement
Create an entitlement
Parameters
project_idstringrequiredID of the projectlookup_keystringrequiredThe identifier of the entitlementdisplay_namestringrequiredThe display name of the entitlement/projects/{project_id}/entitlements/{entitlement_id}/productsget-products-from-entitlement
Get a list of products attached to a given entitlement
Parameters
project_idstringrequiredID of the projectentitlement_idstringrequiredID of the entitlementstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/entitlements/{entitlement_id}/actions/archivearchive-entitlement
Archive an entitlement
Parameters
project_idstringrequiredID of the projectentitlement_idstringrequiredID of the entitlement/projects/{project_id}/entitlements/{entitlement_id}/actions/unarchiveunarchive-entitlement
Unarchive an entitlement
Parameters
project_idstringrequiredID of the projectentitlement_idstringrequiredID of the entitlement/projects/{project_id}/entitlements/{entitlement_id}/actions/attach_productsattach-products-to-entitlement
Attach a set of products to an entitlement
Parameters
project_idstringrequiredID of the projectentitlement_idstringrequiredID of the entitlementproduct_idsarrayrequiredIDs of the products to be attached to the entitlement./projects/{project_id}/entitlements/{entitlement_id}/actions/detach_productsdetach-products-from-entitlement
Detach a set of product from an entitlement
Parameters
project_idstringrequiredID of the projectentitlement_idstringrequiredID of the entitlementproduct_idsarrayrequiredIDs of the products to be detached from the entitlement./projects/{project_id}/offerings/{offering_id}get-offering
Get an offering
Parameters
project_idstringrequiredID of the projectoffering_idstringrequiredID of the offeringexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `package` (requires `project_configuration:packages:read` permission), `package.product` (requires `project_configuration:products:read` permission)./projects/{project_id}/offerings/{offering_id}update-offering
Update an offering
Parameters
project_idstringrequiredID of the projectoffering_idstringrequiredID of the offeringdisplay_namestringThe display name of the offeringis_currentbooleanIndicates if the offering is the current offeringmetadatastringCustom metadata of the offering/projects/{project_id}/offerings/{offering_id}delete-offering
Delete an offering and its attached packages
Parameters
project_idstringrequiredID of the projectoffering_idstringrequiredID of the offering/projects/{project_id}/offerings/{offering_id}/actions/archivearchive-offering
Archive an offering
Parameters
project_idstringrequiredID of the projectoffering_idstringrequiredID of the offering/projects/{project_id}/offerings/{offering_id}/actions/unarchiveunarchive-offering
Unarchive an offering
Parameters
project_idstringrequiredID of the projectoffering_idstringrequiredID of the offeringunarchive_referenced_entitiesbooleanIf true, also unarchive any archived products referenced by this offering's packages./projects/{project_id}/offeringslist-offerings
Get a list of offerings
Parameters
project_idstringrequiredID of the projectstarting_afterstringstarting_afterlimitintegerlimitexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `items.package` (requires `project_configuration:packages:read` permission), `items.package.product` (requires `project_configuration:products:read` permission)./projects/{project_id}/offeringscreate-offering
Create an offering
Parameters
project_idstringrequiredID of the projectlookup_keystringrequiredThe custom identifier of the offeringdisplay_namestringrequiredThe display_name of the offeringmetadatastringCustom metadata of the offering/projects/{project_id}/packages/{package_id}get-package
Get a package
Parameters
project_idstringrequiredID of the projectpackage_idstringrequiredID of the packageexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `product` (requires `project_configuration:products:read` permission)./projects/{project_id}/packages/{package_id}update-package
Update a package
Parameters
project_idstringrequiredID of the projectpackage_idstringrequiredID of the packagedisplay_namestringThe display name of the packagepositionintegerThe position of the package within the offering/projects/{project_id}/packages/{package_id}delete-package-from-offering
Delete a package
Parameters
project_idstringrequiredID of the projectpackage_idstringrequiredID of the package/projects/{project_id}/offerings/{offering_id}/packageslist-packages
Get a list of packages in an offering
Parameters
project_idstringrequiredID of the projectoffering_idstringrequiredID of the offeringstarting_afterstringstarting_afterlimitintegerlimitexpandarraySpecifies which fields in the response should be expanded.
Accepted values are: `items.product` (requires `project_configuration:products:read` permission)./projects/{project_id}/offerings/{offering_id}/packagescreate-packages
Create a package
Parameters
project_idstringrequiredID of the projectoffering_idstringrequiredID of the offeringlookup_keystringrequiredThe lookup_key of the packagedisplay_namestringrequiredThe display name of the packagepositionintegerThe position of the package in the offering/projects/{project_id}/packages/{package_id}/productsget-products-from-package
Get a list of products attached to a given package of an offering
Parameters
project_idstringrequiredID of the projectpackage_idstringrequiredID of the packagestarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/packages/{package_id}/actions/attach_productsattach-products-to-package
Attach a set of products to a package
Parameters
project_idstringrequiredID of the projectpackage_idstringrequiredID of the packageproductsarrayrequiredProduct association list/projects/{project_id}/packages/{package_id}/actions/detach_productsdetach-products-from-package
Detach a set of products from a package
Parameters
project_idstringrequiredID of the projectpackage_idstringrequiredID of the packageproduct_idsarrayrequiredIDs of the products to detach from the package/projects/{project_id}/subscriptions/{subscription_id}get-subscription
Get a subscription
Parameters
project_idstringrequiredID of the projectsubscription_idstringrequiredID of the subscription/projects/{project_id}/subscriptions/{subscription_id}/transactionsget-play-store-or-app-store-subscription-transactions
Get a Play Store or App Store subscription's transactions
Parameters
project_idstringrequiredID of the projectsubscription_idstringrequiredID of the subscription/projects/{project_id}/subscriptions/{subscription_id}/transactions/{transaction_id}/actions/refundrefund-play-store-subscription-transaction
Refund a Play Store subscription's transaction
Parameters
project_idstringrequiredID of the projectsubscription_idstringrequiredID of the subscriptiontransaction_idstringrequiredIdentifier of the transaction in the store/projects/{project_id}/subscriptions/{subscription_id}/entitlementslist-subscription-entitlements
Get a list of entitlements associated with a subscription
Parameters
project_idstringrequiredID of the projectsubscription_idstringrequiredID of the subscriptionstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/subscriptions/{subscription_id}/actions/cancelcancel-subscription
Cancel an active Web Billing subscription
Parameters
project_idstringrequiredID of the projectsubscription_idstringrequiredID of the subscription/projects/{project_id}/subscriptions/{subscription_id}/actions/refundrefund-subscription
Refund an active Web Billing subscription
Parameters
project_idstringrequiredID of the projectsubscription_idstringrequiredID of the subscription/projects/{project_id}/subscriptions/{subscription_id}/authenticated_management_urlget-authorized-subscription-management-url
Get an authenticated Web Billing customer portal URL
Parameters
project_idstringrequiredID of the projectsubscription_idstringrequiredID of the subscription/projects/{project_id}/customers/{customer_id}/subscriptionslist-subscriptions
Get a list of subscriptions associated with a customer
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerenvironmentstringenvironmentstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/purchases/{purchase_id}get-purchase
Get a purchase
Parameters
project_idstringrequiredID of the projectpurchase_idstringrequiredID of the purchase/projects/{project_id}/purchases/{purchase_id}/entitlementslist-purchase-entitlements
Get a list of entitlements associated with a purchase
Parameters
project_idstringrequiredID of the projectpurchase_idstringrequiredID of the purchasestarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/purchases/{purchase_id}/actions/refundrefund-purchase
Refund a Web Billing purchase
Parameters
project_idstringrequiredID of the projectpurchase_idstringrequiredID of the purchase/projects/{project_id}/customers/{customer_id}/purchaseslist-purchases
Get a list of purchases associated with a customer
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerenvironmentstringenvironmentstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/customers/{customer_id}/active_entitlementslist-customer-active-entitlements
Get a list of customer's active entitlements
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/customers/{customer_id}/aliaseslist-customer-aliases
Get a list of the customer's aliases
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/customers/{customer_id}/virtual_currencieslist-virtual-currencies-balances
Get a list of customer's virtual currencies balances
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerinclude_empty_balancesbooleaninclude_empty_balancesstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/customers/{customer_id}/virtual_currencies/transactionscreate-virtual-currencies-transaction
Create a virtual currencies transaction
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerIdempotency-KeystringThis is an optional idempotency key to ensure exactly once execution of the request.include_empty_balancesbooleaninclude_empty_balancesadjustmentsobjectrequiredThe adjustments to the virtual currenciesreferencestringThe reference of the transaction/projects/{project_id}/customers/{customer_id}/virtual_currencies/update_balanceupdate-virtual-currencies-balance
Update a virtual currencies balance without creating a transaction
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerIdempotency-KeystringThis is an optional idempotency key to ensure exactly once execution of the request.include_empty_balancesbooleaninclude_empty_balancesadjustmentsobjectrequiredThe adjustments to the virtual currenciesreferencestringThe reference of the transaction/projects/{project_id}/customers/{customer_id}/attributeslist-customer-attributes
Get a list of the customer's attributes
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/customers/{customer_id}/attributesset-customer-attributes
Set a customer's attributes
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerattributesarrayrequiredattributes/projects/{project_id}/customers/{customer_id}/invoiceslist-customer-invoices
Get a list of the customer's invoices
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerstarting_afterstringstarting_afterlimitintegerlimit/projects/{project_id}/customers/{customer_id}/invoices/{invoice_id}/fileget-invoice
Get an invoice
Parameters
project_idstringrequiredID of the projectcustomer_idstringrequiredID of the customerinvoice_idstringrequiredID of the invoice/projects/{project_id}/metrics/overviewget-overview-metrics
Get overview metrics for a project
Parameters
project_idstringrequiredID of the projectcurrencystringISO 4217 currency code/projects/{project_id}/charts/{chart_name}get-chart-data
Get chart data
Parameters
project_idstringrequiredID of the projectchart_namestringrequiredName of the chart to retrieve.
realtimebooleanWhether to request real-time (v3) charts. Defaults to true. Set to false to request the v2 charts.filtersstringJSON array of chart filters. Each filter is a ChartFilter object.selectorsstringJSON object of chart selectors.aggregatearrayComma-separated aggregate operations to return in `summary` without raw `values`.
currencystringISO 4217 currency coderesolutionstringTime resolution for the chart data.
Use the chart options endpoint to discover available resolutions and their IDs.
start_datestringStart date for the data range (ISO 8601 format)end_datestringEnd date for the data range (ISO 8601 format)segmentstringSegment the data by this dimension. Use the chart options endpoint
to discover available segments for a chart.
/projects/{project_id}/charts/{chart_name}/optionsget-chart-options
Get available options for a chart
Parameters
project_idstringrequiredID of the projectchart_namestringrequiredName of the chart to retrieve.
realtimebooleanWhether to request real-time (v3) charts. Defaults to true. Set to false to request the v2 charts./projects/{project_id}/subscriptionssearch-subscriptions
Search subscriptions by store subscription identifier
Parameters
project_idstringrequiredID of the projectstore_subscription_identifierstringrequiredStore ID associated with the subscription for the current or next period./projects/{project_id}/purchasessearch-purchases
Search one-time purchases by store purchase identifier
Parameters
project_idstringrequiredID of the projectstore_purchase_identifierstringrequiredStore ID associated with the one-time purchase.Original OpenAPI Spec
info:
title: Developer API
version: 2.0.0
tags:
- name: App
description: Operations about apps.
- name: Audit Log
description: Operations about audit logs.
- name: Charts & Metrics
description: Operations about chart metrics.
- name: Collaborator
description: Operations about collaborators.
- name: Customer
description: Operations about customers.
- name: Entitlement
description: Operations about entitlements.
- name: Offering
description: Operations about offerings.
- name: Package
description: Operations about packages.
- name: Product
description: Operations about products.
- name: Virtual Currency
description: Operations about virtual currencies.
- name: Purchase
description: Operations about purchases.
- name: Subscription
description: Operations about subscriptions.
- name: Invoice
description: Operations about invoices.
- name: Paywall
description: Operations about paywalls.
- name: Integration
description: Operations about integrations.
- name: Project
description: Operations about projects.
- name: Subscription Data Model
x-modelReference: true
description: >
<SchemaDefinition schemaRef="#/components/schemas/Subscription"
showReadOnly={true} showWriteOnly={true} />
- name: Overview (v2)
x-traitTag: true
description: >-
<div class="theme-admonition theme-admonition-info alert alert--info">
<div class="heading">New to RevenueCat?</div>
<div>Welcome! If you're adding subscriptions or other in-app purchases to your app, the RevenueCat SDK will handle most of the heavy-lifting without the need to interact with this API directly. See our <a href="/docs/getting-started/quickstart">Quickstart</a> for more information on getting started with RevenueCat.</div>
</div>
<div class="theme-admonition theme-admonition-info alert alert--info">
<div class="heading">API v2 under development</div>
<div>
REST API v2 is currently under development and does not yet cover all use cases from API v1. For those missing use cases, please use v1 in the meantime.
</div>
</div>
## About RevenueCat’s REST API
RevenueCat provides a REST API for developers to perform customer and
transaction related actions from their own server.
Most of this API is geared toward client usage via RevenueCat’s SDK, but
there are various endpoints that can be used for refunding purchases,
granting promotional entitlements, and other sensitive actions that can
only be done via a Secret API key from your server.
## Should I use this REST API or the RevenueCat SDK?
If you’re adding subscriptions or other in-app purchases to your app for
the first time or if you don’t have a backend that stores your user’s
receipts, you’re probably looking to implement the [RevenueCat
SDK](/docs/getting-started/installation).
If you want to start migrating your existing users to RevenueCat and you
have your user’s receipts stored on your own server, or you want to check
subscription status of your users from your own server, the REST API is a
great solution.
## Base URL
The base URL for the RevenueCat REST API v2 is
`https://api.revenuecat.com/v2`.
## Authentication
Authentication for the RevenueCat REST API is achieved by setting the
`Authorization` header with a valid API key. You'll find two types of API
keys in your RevenueCat dashboard: _public_ and _secret_.
Certain endpoints require secret keys, which should be kept out of any
publicly accessible areas such as GitHub, client-side code, and so forth.
See our [Authentication guide](/docs/welcome/authentication) for more
information.
```text title="Authorization Header"
Authorization: Bearer YOUR_REVENUECAT_API_KEY
```
<div class="theme-admonition theme-admonition-info alert alert--warning">
<div class="heading">
Authorization type `Bearer` required in header
</div>
<div>
he RevenueCat REST API v2 requires stating the authorization type `Bearer` in the `Authorization` header before the API key in accordance with [RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235). This is different to the v1 API which allowed passing just the API key as the `Authorization` header.
</div>
</div>
<div class="theme-admonition theme-admonition-info alert alert--warning">
<div class="heading">
API v1 keys will not work with REST API v2
</div>
<div>
In order to utilize the RevenueCat API v2, please create new v2 secret keys and define your permissions.
</div>
</div>
## API v2 Permissions
You can create a new secret API key in your project settings page > API
keys. Select _+ New_.

Give it a name, select `V2` as the version, and set your permissions. Be
sure to select _Generate_ at the top right corner.

Each endpoint in this documentation will contain a description informing
you which permissions are required.
## Request Payload
The body of the `POST` requests should be encoded in JSON and have the
'Content-Type' header set to 'application/json'.
```text title="Content-Type Header"
Content-Type: application/json
```
```json title="Sample Body"
{
"app_user_id": "user-1456",
"fetch_token": "MQABC...EFH1234="
}
```
## Params
<div class="theme-admonition theme-admonition-info alert alert--warning">
<div class="heading">Encode your URL params</div>
<div>For URL params, such as the `app_user_id`, make sure you URL encode them before using them.</div>
</div>
- name: Pagination
x-traitTag: true
description: >-
Top-level API resources have support for bulk fetches via "list" API
methods. For instance, you can list products, list entitlements, and list
offerings. These list API methods share a common structure, taking at
least these two parameters: `limit` and `starting_after`.
When a response or a field contains multiple entities of the same type, it
returns a `list` object of the following structure:
```json title="JSON"
{
"object": "list",
"items": [{}],
"next_page": "LIST_BASE_URL?starting_after=LAST_ID",
"url": "LIST_BASE_URL"
}
```
Where…
- `url` is the full path base URL of the list endpoint (i.e., if you make
a request to this endpoint, you will get the first page), e.g.
`/v2/projects/{project_id}/products`
- `next_page` is the URL for the next page, if there is one. If there is
no next page, the `next_page` field will not be present. Example:
`/v2/projects/{project_id}/products?starting_after={last_id}`
- `items` is an array of the entries of the list.
The `starting_after` query parameter of list endpoints accepts the ID of
the first list item that will not be part of the list (in other words, the
ID of the last item of the previous page).
At the moment we only support forward pagination.
## Parameters
`limit` _optional, default is 20_
A limit on the number of objects to be returned.
`starting_after` _optional_
A cursor for use in pagination. `starting_after` is an object ID that
defines your place in the list. For instance, if you make a list request
and receive 20 objects, ending with foo, your subsequent call can include
`starting_after=foo` in order to fetch the next page of the list.
- name: Rate Limit
x-traitTag: true
description: >
API v2 uses rate limiting to prevent abuse. Rate limits are configured per
domain, and all endpoints within the same domain share the same rate
limit.
## Rate Limits by Domain
| Domain | Rate Limit (requests per minute) |
|--------|-----------------------------------|
| Customer Information | 480 |
| Charts & Metrics | 5 |
| Project Configuration | 60 |
| Virtual Currencies - Create Transaction | 480 |
Each endpoint belongs to one of these domains. The rate limit applies per
API key (for app-level keys) or per developer (for developer-level keys).
## Rate Limit Headers
We will return the following headers on all successful requests:
* `RevenueCat-Rate-Limit-Current-Usage`: the number of executed requests
for the current rate limiting period, including the current request. The
rate limiting period is one minute.
* `RevenueCat-Rate-Limit-Current-Limit`: the limit in requests per minute
for this endpoint
If you reach the rate limit, as indicated by a 429 error code, we will
also include the following header:
* `Retry-After`: the number of seconds to wait until you can retry this
request.
Below is an example of the response body that will be sent when the rate
limit is reached. The value of the `backoff_ms` field corresponds to the
`Retry-After`` header but specified in milliseconds.
```
{
"type": "rate_limit_error",
"message": "Rate limit exceeded",
"retryable": true,
"doc_url": "https://errors.rev.cat/rate-limit-error",
"backoff_ms": 1000
}
```
- name: Expandables
x-traitTag: true
description: >
Expandables allow you to retrieve related data along with the request
without making additional requests. Fields in the REST API will allow you
to request additional information as an expanded response by using the
`expand` query parameter.
For example, a `product` object will have an associated `app_id` field.
This `app_id` field can be expanded in the same request with the `expand`
query parameter and will include an `app` object in the response.
### Without `expand` query param
```json title="GET /products/prod1a2b3c4d5"
{
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {
"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4"
}
```
### With `expand` query param:
```json title="GET /products/prod1a2b3c4d5?expand=app"
{
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {
"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4"
}
}
```
As you can see from above, the `app_id` field remains the same, but the
response contains an additional `app` object.
Fields that can be expanded into objects are indicated in the endpoint
documentation under **Query Params** and will list accepted values.
Also, the required permissions to be defined in the API key are listed
there.
- name: Error Handling
x-traitTag: true
description: >-
RevenueCat uses [standard HTTP status
codes](#tag/Error-Handling/Error-Codes) to indicate the success or failure
of an API request. Codes in the `2XX` range indicate the request was
successful. `4XX` codes indicate an error caused by the client. `5XX`
codes indicate an error in RevenueCat servers.
Successful modifications return the modified entity. Errors return the
following fields:
```json title="Sample Error Response"
{
"type": "parameter_error",
"param": "customer_id",
"message": "id is too long",
"retryable": false,
"doc_url": "https://errors.rev.cat/parameter-error"
}
```
For more information on the `type` field and how to resolve these errors,
please visit our [Error Types](#tag/Error-Handling/Error-Types)
documentation.
## Error Codes
| Code | Name |
Description
|
| :--- | :-------------------- |
:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
| 200 | OK | Processed as
expected
|
| 201 | Created | Entity was
created
|
| 202 | Accepted | Request acknowledged, but cannot be
processed in real time (for instance, async
job)
|
| 204 | No content | The request was successful and there was
no content that could be
returned
|
| 400 | Bad Request | Client
error
|
| 401 | Unauthorized | Not
authenticated
|
| 403 | Forbidden | Authorization
failed
|
| 404 | Not Found | No resource was
found
|
| 409 | Conflict | Uniqueness constraint
violation
|
| 418 | I'm a teapot | RevenueCat refuses to brew
coffee
|
| 422 | Unprocessable entity | The request was valid and the syntax
correct, but we were unable to process the contained
instructions.
|
| 423 | Locked | The request conflicted with another
ongoing
request
|
| 429 | Too Many Requests | Being [rate
limited](#tag/Rate-Limit)
|
| 500 | Internal Server Error | The RevenueCat server ran into an
unexpected problem – please check the [RevenueCat status
page](https://status.revenuecat.com/) for any known outages and/or report
the issue to RevenueCat support |
| 502 | Bad Gateway | Invalid response from an upstream
server
|
| 503 | Service Unavailable | There wasn’t a server to handle the
request
|
| 504 | Gateway Timeout | We could not get the response in time
from the upstream
server
|
## Error Types
### `authentication_error`
Authentication is not valid for the given API key. Double check your API
key.
### `authorization_error`
The API key does not belong the project you specified. Double check that
your API key is associated with the IDs you are passing.
### `invalid_request`
This error can be due to several reasons:
- `Content-Type: application/json` is missing in the request header for
`POST`/`PUT`/`PATCH` requests
- Using the incorrect HTTP method on a path (i.e: `GET
…/entitlements/<entitlements_id>/actions/attach_products`)
### `parameter_error`
The parameter provided is invalid. Please refer to the `message` field for
more information.
- IDs (e.g: `entitlement_id`, `project_id`, etc): 1 to 255 characters
- `display_name`(applies to Entitlements): 1 to 1000 characters
- `lookup_key`(applies to Entitlements): 1 to 200 characters
### `rate_limit_error`
The request has hit the [rate limit](#tag/Rate-Limit) for this endpoint.
Refer to the `backoff_ms` field to determine how many milliseconds to wait
before making another request to the same endpoint.
### `resource_missing`
The resource with the specific ID does not exist. Double check the IDs
(e.g: product ID, entitlement ID, etc) you are passing into the endpoints.
### `resource_already_exists`
The resource with the specific ID already exists. Use a different, unique
value for ID and try again.
### `resource_locked_error`
The resource is currently being modified by a concurrent request. Refer to
the `backoff_ms` field to determine when to try again.
### `server_error`
Request is not able to be processed due to an internal server error. Refer
to the `backoff_ms` field to determine when to try again. Please report
this to the RevenueCat team if you are encountering this issue.
### `store_error`
There was a problem with the stores (e.g: Apple App Store, Google Play
Store, etc). This typically occurs when the stores are unable to process
the request. Refer to the `backoff_ms` field to determine when to try
again.
### `unprocessable_entity_error`
Request is not able to be processed. Please refer to the `message` field
for more information.
### `entity_references_archived_entities`
The entity you are trying to make active references other entities that
are currently inactive (archived). The `referenced_object_ids` field
contains the IDs of the inactive entities that need to be made active
before the operation can succeed. Make those entities active first, then
retry the request.
- name: Representation of Subscriptions
x-traitTag: true
description: >-
In comparison to our [v1 REST API](/docs/api-v1#tag/customer_info_model),
we have made changes to improve the organization and accessibility of your
customers’ subscriptions. The data model used in the RevenueCat REST API
v2 has several advantages. Firstly, it better abstracts differences
between different app stores, making it easier for you to access your data
without needing to understand the specificities and idiosyncrasies of each
individual store.
Additionally, the REST API v2 subscription data model provides richer
information regarding your subscription data and includes new fields such
as:
- `gives_access`: Rather than having to create your own logic to determine
if a customer should have access, we will provide you with that
information directly.
- `auto_renewal_status`: Previously you would have to use
`unsubscribe_detected_at`, `billing_issues_detected_at`, and other fields
to determine the auto renewal status of the customer, now we include this
information to take away the estimation work.
- `status`: Gives you a quick and easy way to gather the status of the
customer’s subscription to determine what state they are currently in.
- `store_subscription_identifier`: Whereas the old data model was missing
the store’s subscription identifier (aka the transaction ID directly from
the stores), we have included this new field to help identify your
customer’s subscription.
- `total_revenue_in_usd`: You can easily determine how much a customer has
spent for this subscription in USD and utilize it for your own bookkeeping
purposes. This object also contains information such as gross, commission,
tax, and proceeds to help you break down the customer’s revenue.
To view more details of fields we have included for the subscription
object, check out the [model reference](#tag/Subscription-Data-Model).
Eventually we will also expose this sort of information in webhooks and
customer event details to incorporate the new data model throughout
RevenueCat.
## What constitutes a new subscription
Different stores supported by RevenueCat have different logic to define
what is a new subscription vs. a change to an existing subscription. To
make it easier to handle subscriptions across different stores, the data
model for the RevenueCat REST API v2 is now following a consistent
definition of what continues the same subscription vs. a new one:
- After a subscription has lapsed (e.g: after a billing retry or letting
subscription expire after an unsubscribe), if a customer subscribes to the
same product it will be considered a new subscription (this was previously
treated differently on Apple App Store vs. Google Play Store)
- If the product of a paid subscription is changed, the subscription to
the new product will be considered a new subscription. An exception is
product changes during a trial period, the post-trial subscription period
to a different product will not be considered a new subscription, but a
regular trial conversion
- For family shared subscriptions:
- Family shared subscriptions will be considered as a new subscription (albeit with no revenue)
- If family sharing access is revoked and later re-enabled, this will be considered as a new subscription
### Diagrams for different cases
#### Billing issue: unrecovered

#### Billing issue: recovered

#### Lapsed subscription

#### Product changes: upgrade (no trial)

#### Product changes: downgrade (no trial)

#### Product changes (with trial)

#### Subscription paused: Recovery

#### Subscription paused: Billing issue, recovered

#### Subscription paused: Billing issue, unrecovered

#### Family shared subscriptions

#### Family shared subscriptions: regranted

paths:
/projects/{project_id}/paywalls:
get:
summary: Get a list of paywalls
operationId: list-paywalls
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read
x-release-status: public
x-expandable-fields:
- items.offering: project_configuration:offerings:read
tags:
- Paywall
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `items.offering` (requires `project_configuration:offerings:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- items.offering
example: items.offering
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListPaywalls'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Create a paywall
operationId: create-paywall
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read_write
x-release-status: public
tags:
- Paywall
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- offering_id
properties:
offering_id:
description: |
The ID of the offering the paywall will be created for.
type: string
minLength: 1
maxLength: 200
example: ofrng123456789a
additionalProperties: false
responses:
'201':
description: Success. The paywall was created
content:
application/json:
schema:
$ref: '#/components/schemas/Paywall'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: |-
Create a paywall for an offering of the project.
This endpoint requires the following permission(s): <code>project_configuration:offerings:read_write</code>. This endpoint belongs to the <strong>Project Configuration</strong> domain, which has a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/paywalls/{paywall_id}:
get:
summary: Get a paywall
operationId: get-paywall
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read
x-release-status: public
x-expandable-fields:
- offering: project_configuration:offerings:read
- components: project_configuration:offerings:read
tags:
- Paywall
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: paywall_id
description: ID of the paywall
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: pwXXXXXXXXXXXXXX
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `offering` (requires `project_configuration:offerings:read` permission), `components` (requires `project_configuration:offerings:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- offering
- components
example: offering
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Paywall'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
delete:
summary: Delete a paywall
operationId: delete-paywall
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read_write
x-release-status: public
tags:
- Paywall
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: paywall_id
description: ID of the paywall
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: pwXXXXXXXXXXXXXX
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/apps/{app_id}/public_api_keys:
get:
summary: Get a list of the public API keys of an app
operationId: list-app-public-api-keys
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:apps:read
x-release-status: public
tags:
- App
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: app_id
description: ID of the app
required: true
in: path
schema:
type: string
maxLength: 255
example: app1ab2c3d4
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListPublicApiKeys'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:apps:read</code>. This endpoint belongs to
the <strong>Project Configuration</strong> domain, which has a default
rate limit of <strong>60 requests per minute</strong>.
/projects:
get:
summary: Get a list of projects
operationId: list-projects
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:projects:read
x-release-status: public
tags:
- Project
parameters:
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListProjects'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:projects:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Creates a new project
operationId: create-project
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:projects:read_write
x-release-status: public
tags:
- Project
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectCreate'
additionalProperties: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:projects:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/apps:
get:
summary: Get a list of apps
operationId: list-apps
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:apps:read
x-release-status: public
tags:
- App
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListApps'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:apps:read</code>. This endpoint belongs to
the <strong>Project Configuration</strong> domain, which has a default
rate limit of <strong>60 requests per minute</strong>.
post:
summary: Create an App
operationId: create-app
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:apps:read_write
x-release-status: public
tags:
- App
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AppCreate'
additionalProperties: false
examples:
App Store:
value:
name: My App Store App
type: app_store
app_store:
bundle_id: com.apple.Pages
shared_secret: 1234567890abcdef1234567890abcdef
subscription_private_key: >-
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIGAkwOF0qkGO19yJlIzQVcOg+HBfvLL4KDXDtL+MMHk2oAcGBSuBBAAK
oUQDQgAEhDP7RaX4c6qOHkE1nIWMr5C90ybtr87VRGFm4VsfWqG47NPN+/dHcfwJ
JPZGFgMcgvBc37AxQPPQjyXYjhhQDg==
-----END EC PRIVATE KEY-----
subscription_key_id: 6345942CC3
subscription_key_issuer: 5a049d62-1b9b-453c-b605-1988189d8129
Play Store:
value:
name: My Play Store App
type: play_store
play_store:
package_name: com.android.app
Stripe:
value:
name: My Stripe App
type: stripe
stripe:
stripe_account_id: acct_adcdef123456
Amazon:
value:
name: My Amazon App
type: amazon
amazon:
package_name: com.amazon.android.app
shared_secret: <Your Amazon Developer Identity Shared Key>
Web Billing:
value:
name: My RevenueCat App
type: rc_billing
rc_billing:
app_name: <Your app name>
default_currency: USD
Roku:
value:
name: My Roku App
type: roku
roku:
roku_api_key: <Your Roku Pay API Key goes here>
roku_channel_id: 123456
roku_channel_name: History Channel
Paddle:
value:
name: My Paddle App
type: paddle
paddle:
paddle_api_key: <Your Paddle API Key goes here>
responses:
'201':
description: Success. The app was created
content:
application/json:
schema:
$ref: '#/components/schemas/App'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:apps:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/apps/{app_id}:
get:
summary: Get an app
operationId: get-app
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:apps:read
x-release-status: public
tags:
- App
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: app_id
description: ID of the app
required: true
in: path
schema:
type: string
maxLength: 255
example: app1ab2c3d4
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/App'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:apps:read</code>. This endpoint belongs to
the <strong>Project Configuration</strong> domain, which has a default
rate limit of <strong>60 requests per minute</strong>.
post:
summary: Update an app
operationId: update-app
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:apps:read_write
x-release-status: public
tags:
- App
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: app_id
description: ID of the app
required: true
in: path
schema:
type: string
maxLength: 255
example: app1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
example: My App
nullable: false
amazon:
description: >-
Amazon type details. Should only be used when type is
amazon.
type: object
nullable: false
additionalProperties: false
properties:
package_name:
description: The package name of the app
type: string
minLength: 1
maxLength: 256
nullable: false
shared_secret:
description: Your Amazon Developer Identity Shared Key
type: string
nullable: true
app_store:
description: >-
App Store type details. Should only be used when type is
app_store.
type: object
nullable: false
additionalProperties: false
properties:
bundle_id:
description: The bundle ID of the app
type: string
minLength: 1
maxLength: 256
nullable: false
shared_secret:
description: The shared secret of the app
type: string
minLength: 32
maxLength: 32
nullable: true
subscription_private_key:
description: PKCS
type: string
subscription_key_id:
description: >-
In App Key id. The ID of the downloaded in app key. You
can get it from App Store Connect
type: string
subscription_key_issuer:
description: >-
The key Issuer id. See instructions on how to obtain
this in
https://www.revenuecat.com/docs/in-app-purchase-key-configuration#3-providing-the-issuer-id-to-revenuecat
type: string
app_store_connect_api_key:
description: >-
App Store Connect API Key downloaded from App Store
Connect in PEM format. Copy the contents of the file in
this field. This is optional and used for advanced
features like product imports.
type: string
app_store_connect_api_key_id:
description: >-
App Store Connect API Key ID. The ID of the downloaded
API key. You can get it from App Store Connect.
type: string
app_store_connect_api_key_issuer:
description: App Store Connect API Key Issuer ID.
type: string
app_store_connect_vendor_number:
description: >-
Your vendor number from App Store Connect. Required for
some features like financial reports.
type: string
mac_app_store:
description: >-
Legacy Mac App Store type details. Should only be used when
type is mac_app_store.
type: object
nullable: false
additionalProperties: false
properties:
bundle_id:
description: The bundle ID of the app
type: string
minLength: 1
maxLength: 256
nullable: false
shared_secret:
description: The shared secret of the app
type: string
minLength: 32
maxLength: 32
nullable: true
play_store:
description: >-
Play Store type details. Should only be used when type is
play_store.
type: object
required:
- package_name
nullable: false
additionalProperties: false
properties:
package_name:
description: The package name of the app
type: string
minLength: 1
maxLength: 256
nullable: false
stripe:
description: >-
Stripe type details. Should only be used when type is
stripe.
type: object
nullable: false
additionalProperties: false
properties:
stripe_account_id:
description: >-
It needs to be connected to your RevenueCat account. It
can be omitted if you only have a single Stripe account
connected to your RevenueCat account.
type: string
minLength: 1
maxLength: 256
nullable: false
rc_billing:
description: >-
Web Billing type details. Should only be used when type is
rc_billing.
type: object
nullable: false
additionalProperties: false
properties:
stripe_account_id:
description: >-
It needs to be connected to your RevenueCat account. It
can be omitted if you only have a single Stripe account
connected to your RevenueCat account.
type: string
nullable: true
minLength: 1
maxLength: 256
app_name:
description: >-
Shown in checkout, emails, and receipts sent to
customers.
type: string
nullable: true
minLength: 1
maxLength: 256
support_email:
description: >-
Used as the `reply to` address in all emails sent to
customers, to allow them to receive support. If you
leave this field blank, your RevenueCat account email
address will be used.
type: string
nullable: true
minLength: 1
maxLength: 320
default_currency:
$ref: '#/components/schemas/RCBillingCurrency'
roku:
description: >-
Roku Channel Store type details. Should only be used when
type is roku.
type: object
nullable: false
additionalProperties: false
properties:
roku_api_key:
description: >-
Roku Pay API key provided on the Roku Pay Web Services
page.
type: string
minLength: 33
maxLength: 33
nullable: true
roku_channel_id:
description: Channel ID provided on the Roku Channel page.
type: string
minLength: 6
maxLength: 6
nullable: true
roku_channel_name:
description: Channel name that is displayed on the Roku Channel page.
type: string
minLength: 1
maxLength: 30
nullable: true
paddle:
description: >-
Paddle Billing type details. Should only be used when type
is paddle.
type: object
nullable: false
additionalProperties: false
properties:
paddle_api_key:
description: >-
Paddle Server-side API key provided on the Paddle
dashboard.
type: string
nullable: true
minLength: 50
maxLength: 50
paddle_is_sandbox:
description: Whether the app is tied to the sandbox environment.
nullable: false
type: boolean
example: true
additionalProperties: false
examples:
Update App Store App properties:
value:
name: New App name
app_store:
bundle_id: com.my.new-app
shared_secret: 1234567890abcdef1234567890abcdef
Update App Store App secret:
value:
app_store:
shared_secret: 1234567890abcdef1234567890abcdef
Remove App Store App secret:
value:
app_store:
shared_secret: null
responses:
'200':
description: Success. The app was updated
content:
application/json:
schema:
$ref: '#/components/schemas/App'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:apps:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
delete:
summary: Delete an app
operationId: delete-app
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:apps:read_write
x-release-status: public
tags:
- App
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: app_id
description: ID of the app
required: true
in: path
schema:
type: string
maxLength: 255
example: app1ab2c3d4
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:apps:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/apps/{app_id}/store_kit_config:
get:
summary: Get the StoreKit configuration for an app
operationId: get-app-storekit-config
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:apps:read
x-release-status: public
tags:
- App
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: app_id
description: ID of the app
required: true
in: path
schema:
type: string
maxLength: 255
example: app1ab2c3d4
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/StoreKitConfigFile'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:apps:read</code>. This endpoint belongs to
the <strong>Project Configuration</strong> domain, which has a default
rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/audit_logs:
get:
summary: List audit logs
operationId: list-audit-logs
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:audit_logs:read
x-release-status: public
tags:
- Audit Log
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
description: >-
Cursor for pagination. Returns audit logs after the specified audit
log ID, using descending order by audit log ID.
in: query
required: false
schema:
type: string
example: log1ab2c3d4e5
- name: start_date
description: Start date for the data range (ISO 8601 format)
in: query
schema:
type: string
format: date
example: '2024-01-01'
- name: end_date
description: End date for the data range (ISO 8601 format)
in: query
schema:
type: string
format: date
example: '2024-12-31'
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListAuditLogs'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:audit_logs:read</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/collaborators:
get:
summary: Get a list of collaborators
operationId: list-collaborators
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:collaborators:read
x-release-status: public
tags:
- Collaborator
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListCollaborators'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:collaborators:read</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/customers:
get:
summary: Get a list of customers
operationId: list-customers
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
- name: search
description: >-
Search term. Currently, only searching by email is supported
(searching for exact matches in the $email attribute).
required: false
in: query
schema:
type: string
minLength: 1
maxLength: 255
example: [email protected]
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListCustomers'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
post:
summary: Create a customer
operationId: create-customer
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- id
properties:
id:
description: The ID of the customer
type: string
minLength: 1
maxLength: 1500
pattern: ^[0-9a-zA-Z_-]*$
example: 19b8de26-77c1-49f1-aa18-019a391603e2
attributes:
type: array
maxLength: 50
items:
type: object
additionalProperties: false
required:
- name
- value
properties:
name:
description: The name of the attribute
nullable: false
minLength: 1
maxLength: 40
oneOf:
- $ref: '#/components/schemas/CustomerAttributeReservedName'
- $ref: '#/components/schemas/CustomerAttributeCustomName'
example: $email
value:
description: The value of the attribute
type: string
maxLength: 500
nullable: false
example: [email protected]
additionalProperties: false
responses:
'201':
description: Success. The customer was created
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read_write</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}:
get:
summary: Get a customer
operationId: get-customer
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read
x-expandable-fields:
- attributes: customer_information:customers:read
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `attributes` (requires `customer_information:customers:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- attributes
example: attributes
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
delete:
summary: Delete a customer
operationId: delete-customer
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
example:
object: customer
id: b5b7bfd2-66fb-4091-af50-7c3cdccfdf24
deleted_at: 1658399423658
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read_write</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/actions/transfer:
post:
summary: >-
Transfer customer's subscriptions and one-time purchases to another
customer
operationId: transfer-customer-data
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read_write
- customer_information:subscriptions:read_write
- customer_information:purchases:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- target_customer_id
properties:
target_customer_id:
nullable: false
type: string
description: >-
The ID of the customer to whom the subscriptions and
one-time purchases will be transferred.
app_ids:
nullable: true
type: array
description: >-
Optional. The IDs of the apps to filter the transfer by.
When specified, only purchases and subscriptions associated
with these apps will be transferred.
items:
type: string
maxLength: 255
minLength: 1
example: appa2b3c4d5e
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Transfer'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read_write</code>,
<code>customer_information:subscriptions:read_write</code>,
<code>customer_information:purchases:read_write</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/actions/grant_entitlement:
post:
summary: >-
Grant an entitlement to a customer unless one already exists. As a side
effect, a promotional subscription is created.
operationId: grant-customer-entitlement
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- entitlement_id
- expires_at
properties:
entitlement_id:
nullable: false
type: string
description: The ID of the entitlement to grant to the customer.
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
expires_at:
nullable: false
type: integer
format: int64
description: >-
The date after which the access to the entitlement expires
in ms since epoch.
example: 1658399423658
responses:
'201':
description: Entitlement granted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read_write</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/actions/revoke_granted_entitlement:
post:
summary: >-
Revoke a granted entitlement from a customer. As a side effect, the
promotional subscription associated with the granted entitlement is
expired.
operationId: revoke-customer-granted-entitlement
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- entitlement_id
properties:
entitlement_id:
nullable: false
type: string
description: >-
The ID of the granted entitlement to revoke from the
customer.
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
responses:
'200':
description: Entitlement revoked successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read_write</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/actions/assign_offering:
post:
summary: Assign or clear an offering override for a customer
operationId: assign-customer-offering
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- project_configuration:offerings:read
- customer_information:customers:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- offering_id
properties:
offering_id:
nullable: true
type: string
description: >-
The ID of the offering to assign to the customer. Set to
null to clear any existing override.
minLength: 1
maxLength: 255
example: offrng1b2c3d4e5
responses:
'200':
description: Offering assigned successfully
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read</code>,
<code>customer_information:customers:read_write</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/integrations/webhooks:
get:
summary: List webhook integrations
operationId: list-webhook-integrations
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:integrations:read
x-release-status: public
tags:
- Integration
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListWebhookIntegrations'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:integrations:read</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Create a webhook integration
operationId: create-webhook-integration
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:integrations:read_write
x-release-status: public
tags:
- Integration
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookIntegrationInput'
additionalProperties: false
responses:
'201':
description: Webhook integration created
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookIntegration'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:integrations:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/integrations/webhooks/{webhook_integration_id}:
get:
summary: Get a webhook integration
operationId: get-webhook-integration
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:integrations:read
x-release-status: public
tags:
- Integration
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: webhook_integration_id
in: path
description: The ID of the webhook integration
required: true
schema:
type: string
minLength: 1
maxLength: 255
example: wh_1234567890abcdef
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookIntegration'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:integrations:read</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Update a webhook integration
operationId: update-webhook-integration
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:integrations:read_write
x-release-status: public
tags:
- Integration
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: webhook_integration_id
in: path
description: The ID of the webhook integration
required: true
schema:
type: string
minLength: 1
maxLength: 255
example: wh_1234567890abcdef
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateWebhookIntegrationInput'
additionalProperties: false
responses:
'200':
description: Webhook integration updated
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookIntegration'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:integrations:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
delete:
summary: Delete a webhook integration
operationId: delete-webhook-integration
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:integrations:read_write
x-release-status: public
tags:
- Integration
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: webhook_integration_id
in: path
description: The ID of the webhook integration
required: true
schema:
type: string
minLength: 1
maxLength: 255
example: wh_1234567890abcdef
responses:
'200':
description: Webhook integration deleted
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:integrations:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/products/{product_id}:
get:
summary: Get a product
operationId: get-product
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:products:read
x-expandable-fields:
- app: project_configuration:apps:read
x-release-status: public
tags:
- Product
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: product_id
description: ID of the product
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: prod1a2b3c4d5
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `app` (requires `project_configuration:apps:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- app
example: app
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:products:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Update a product
operationId: update-product
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:products:read_write
x-release-status: public
tags:
- Product
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: product_id
description: ID of the product
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: prod1a2b3c4d5
- name: expand
in: query
description: |
Specifies which fields in the response should be expanded.
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
display_name:
description: The display name of the product
type: string
maxLength: 1500
additionalProperties: false
responses:
'200':
description: Success. The product was updated
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:products:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
delete:
summary: Delete a product
operationId: delete-product
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:products:read_write
x-release-status: public
tags:
- Product
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: product_id
description: ID of the product
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: prod1a2b3c4d5
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:products:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/products/{product_id}/actions/archive:
post:
summary: Archive a product
operationId: archive-product
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:products:read_write
x-release-status: public
tags:
- Product
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: product_id
description: ID of the product
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: prod1a2b3c4d5
responses:
'200':
description: Success. The product was archived
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:products:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/products/{product_id}/actions/unarchive:
post:
summary: Unarchive a product
operationId: unarchive-product
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:products:read_write
x-release-status: public
tags:
- Product
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: product_id
description: ID of the product
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: prod1a2b3c4d5
responses:
'200':
description: Success. The product was unarchived
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:products:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/products/{product_id}/create_in_store:
post:
summary: Push a product to the store
description: >-
Push a product to the App Store.
**For subscription products**: You must provide store information
including duration and subscription group details.
**For in-app purchase products** (consumable, non-consumable,
non-renewing subscription): No request body is required.
This endpoint requires the following permission(s): <code>project_configuration:products:read_write</code>. This endpoint belongs to the <strong>Project Configuration</strong> domain, which has a default rate limit of <strong>60 requests per minute</strong>.
operationId: create-product-in-store
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:products:read_write
x-release-status: public
tags:
- Product
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: product_id
description: ID of the product
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: prod1a2b3c4d5
requestBody:
required: false
description: >
Store-specific information. Only required for subscription products.
For in-app purchase products, send an empty body or omit the request
body entirely.
content:
application/json:
schema:
type: object
properties:
store_information:
description: >-
Store-specific information for creating the product in the
store
oneOf:
- $ref: >-
#/components/schemas/CreateAppStoreConnectSubscriptionInput
- $ref: >-
#/components/schemas/CreateAppStoreConnectInAppPurchaseInput
additionalProperties: false
examples:
App Store Subscription:
summary: Creating a subscription product
value:
store_information:
duration: ONE_MONTH
subscription_group_name: Premium Subscriptions
subscription_group_id: sub_group_123
App Store In-App Purchase:
summary: Creating an in-app purchase product (no body needed)
value: {}
responses:
'201':
description: Success. The product was pushed to the store
content:
application/json:
schema:
type: object
required:
- created_product
properties:
created_product:
$ref: '#/components/schemas/StoreProduct'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
/projects/{project_id}/products:
get:
summary: Get a list of products
operationId: list-products
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:products:read
x-expandable-fields:
- items.app: project_configuration:apps:read
x-release-status: public
tags:
- Product
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: app_id
in: query
schema:
type: string
example: app1a2b3c4
description: >-
This is an optional query parameter to get a list of products of a
given entitlement associated with a particular app
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `items.app` (requires `project_configuration:apps:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- items.app
example: items.app
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListProducts'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:products:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Create a product
operationId: create-product
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:products:read_write
x-release-status: public
tags:
- Product
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- store_identifier
- app_id
- type
properties:
store_identifier:
description: >
The store identifier of the product.
- For Apple App Store products this is the product ID of the
subscription or in-app product.
- For Google's Play Store, it should follow the format
'productId:basePlanId' for subscription products and SKU for
one-time purchase products.
- For Stripe, the product identifier that always starts with
"prod_"
- For Amazon, if it's a subscription, the term SKU of the
subscription. If it's a one-time purchase, the SKU of the
product.
- For Roku, this is the product identifier of the
subscription or one-time purchase product.
type: string
minLength: 1
maxLength: 200
example: com.revenuecat.magicweather.monthly
app_id:
description: The ID of the app
type: string
minLength: 1
maxLength: 255
example: app1a2b3c4
type:
description: The product type
nullable: false
$ref: '#/components/schemas/ProductType'
display_name:
description: The display name of the product
nullable: true
type: string
minLength: 1
maxLength: 1500
example: Premium Monthly 2023
subscription:
nullable: true
description: >-
Subscription parameters. Only supported for test store
products.
$ref: '#/components/schemas/ProductSubscriptionInput'
title:
description: >-
The user-facing title of the product. This field is required
for Test Store products.
nullable: true
type: string
minLength: 1
maxLength: 1500
example: Premium Monthly 2023
additionalProperties: false
examples:
App Store:
value:
store_identifier: com.revenuecat.magicweather.monthly9.99
app_id: app1a2b3c4
type: subscription
display_name: Premium Monthly 2023
Play Store Billing Client 4:
value:
store_identifier: com.revenuecat.magicweather.monthly
app_id: app1a2b3c4
type: subscription
display_name: Premium Monthly 2023
Stripe:
value:
store_identifier: prod_LryUFGrmehs0tk
app_id: app1a2b3c4
type: subscription
display_name: Premium Monthly 2023
Amazon:
value:
store_identifier: com.mysubscription.weekly
app_id: app1a2b3c4
type: subscription
display_name: Premium Monthly 2023
Play Store Subscription Billing Client 5:
value:
store_identifier: mySubscription:basePlanId
app_id: app1a2b3c4
type: subscription
display_name: Premium Monthly 2023
Play Store One-time Billing Client 5:
value:
store_identifier: myProductSku
app_id: app1a2b3c4
type: one_time
display_name: Premium Lifetime 2023
Test Store:
value:
store_identifier: monthly_premium
app_id: app1a2b3c4
type: subscription
display_name: Premium Monthly
subscription:
duration: P1M
responses:
'201':
description: Success. The product was created
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
<div class="theme-admonition theme-admonition-info alert
alert--warning">
<div class="heading">Warning</div>
<div>This endpoint does not allow to create Web Billing products.</div>
This endpoint requires the following permission(s):
<code>project_configuration:products:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/virtual_currencies:
get:
summary: Get a list of virtual currencies
operationId: list-virtual-currencies
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:virtual_currencies:read
x-release-status: public
tags:
- Virtual Currency
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListVirtualCurrencies'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:virtual_currencies:read</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
post:
summary: Create a virtual currency
operationId: create-virtual-currency
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:virtual_currencies:read_write
x-release-status: public
tags:
- Virtual Currency
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- code
- name
properties:
code:
description: The unique code for this virtual currency
type: string
minLength: 1
maxLength: 10
pattern: ^[a-zA-Z0-9_]+$
example: GLD
name:
description: The display name of the virtual currency
type: string
minLength: 1
maxLength: 50
example: Gold
description:
description: Description of the virtual currency
nullable: true
type: string
minLength: 1
maxLength: 1500
example: Gold currency used in the game
product_grants:
description: >-
Product grants that define how products grant this virtual
currency
nullable: true
type: array
items:
$ref: '#/components/schemas/VirtualCurrencyProductGrantInput'
additionalProperties: false
responses:
'201':
description: Success. The virtual currency was created
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualCurrency'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:virtual_currencies:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/virtual_currencies/{virtual_currency_code}:
get:
summary: Get a virtual currency
operationId: get-virtual-currency
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:virtual_currencies:read
x-release-status: public
tags:
- Virtual Currency
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: virtual_currency_code
in: path
required: true
schema:
type: string
minLength: 1
maxLength: 10
pattern: ^[a-zA-Z0-9_]+$
description: The virtual currency code
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualCurrency'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:virtual_currencies:read</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
post:
summary: Update a virtual currency
operationId: update-virtual-currency
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:virtual_currencies:read_write
x-release-status: public
tags:
- Virtual Currency
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: virtual_currency_code
in: path
required: true
schema:
type: string
minLength: 1
maxLength: 10
pattern: ^[a-zA-Z0-9_]+$
description: The virtual currency code
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
description: The display name of the virtual currency
type: string
minLength: 1
maxLength: 50
example: Gold
description:
description: Description of the virtual currency
nullable: true
type: string
minLength: 1
maxLength: 1500
example: Gold currency used in the game
product_grants:
description: >-
Product grants that define how products grant this virtual
currency
nullable: true
type: array
items:
$ref: '#/components/schemas/VirtualCurrencyProductGrantInput'
additionalProperties: false
responses:
'200':
description: Success. The virtual currency was updated
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualCurrency'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:virtual_currencies:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
delete:
summary: Delete a virtual currency
operationId: delete-virtual-currency
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:virtual_currencies:read_write
x-release-status: public
tags:
- Virtual Currency
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: virtual_currency_code
in: path
required: true
schema:
type: string
minLength: 1
maxLength: 10
pattern: ^[a-zA-Z0-9_]+$
description: The virtual currency code
responses:
'200':
description: Success. The virtual currency was deleted
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:virtual_currencies:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/virtual_currencies/{virtual_currency_code}/actions/archive:
post:
summary: Archive a virtual currency
operationId: archive-virtual-currency
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:virtual_currencies:read_write
x-release-status: public
tags:
- Virtual Currency
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: virtual_currency_code
in: path
required: true
schema:
type: string
minLength: 1
maxLength: 10
pattern: ^[a-zA-Z0-9_]+$
description: The virtual currency code
responses:
'200':
description: Success. The virtual currency was archived
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualCurrency'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:virtual_currencies:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/virtual_currencies/{virtual_currency_code}/actions/unarchive:
post:
summary: Unarchive a virtual currency
operationId: unarchive-virtual-currency
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:virtual_currencies:read_write
x-release-status: public
tags:
- Virtual Currency
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: virtual_currency_code
in: path
required: true
schema:
type: string
minLength: 1
maxLength: 10
pattern: ^[a-zA-Z0-9_]+$
description: The virtual currency code
responses:
'200':
description: Success. The virtual currency was unarchived
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualCurrency'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:virtual_currencies:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/entitlements/{entitlement_id}:
get:
summary: Get an entitlement
operationId: get-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read
x-release-status: public
x-expandable-fields:
- product: project_configuration:products:read
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: entitlement_id
description: ID of the entitlement
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `product` (requires `project_configuration:products:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- product
example: product
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Entitlement'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Update an entitlement
operationId: update-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read_write
x-release-status: public
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: entitlement_id
description: ID of the entitlement
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- display_name
properties:
display_name:
description: The display name of the entitlement
type: string
minLength: 1
maxLength: 1500
example: Premium
additionalProperties: false
responses:
'200':
description: Success. The entitlement was updated
content:
application/json:
schema:
$ref: '#/components/schemas/Entitlement'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
delete:
summary: Delete an entitlement
operationId: delete-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read_write
x-release-status: public
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: entitlement_id
description: ID of the entitlement
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/entitlements:
get:
summary: Get a list of entitlements
operationId: list-entitlements
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read
x-release-status: public
x-expandable-fields:
- items.product: project_configuration:products:read
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `items.product` (requires `project_configuration:products:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- items.product
example: items.product
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListEntitlements'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Create an entitlement
operationId: create-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read_write
x-release-status: public
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- lookup_key
- display_name
properties:
lookup_key:
description: The identifier of the entitlement
type: string
minLength: 1
maxLength: 200
example: premium
display_name:
description: The display name of the entitlement
type: string
minLength: 1
maxLength: 1500
example: Premium access to all features
additionalProperties: false
responses:
'201':
description: Success. The entitlement was created
content:
application/json:
schema:
$ref: '#/components/schemas/Entitlement'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/entitlements/{entitlement_id}/products:
get:
summary: Get a list of products attached to a given entitlement
operationId: get-products-from-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read
x-release-status: public
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: entitlement_id
description: ID of the entitlement
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ProductsFromEntitlement'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/entitlements/{entitlement_id}/actions/archive:
post:
summary: Archive an entitlement
operationId: archive-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read_write
x-release-status: public
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: entitlement_id
description: ID of the entitlement
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
responses:
'200':
description: Success. The entitlement was archived
content:
application/json:
schema:
$ref: '#/components/schemas/Entitlement'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/entitlements/{entitlement_id}/actions/unarchive:
post:
summary: Unarchive an entitlement
operationId: unarchive-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read_write
x-release-status: public
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: entitlement_id
description: ID of the entitlement
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
responses:
'200':
description: Success. The entitlement was unarchived
content:
application/json:
schema:
$ref: '#/components/schemas/Entitlement'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/entitlements/{entitlement_id}/actions/attach_products:
post:
summary: Attach a set of products to an entitlement
operationId: attach-products-to-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read_write
x-release-status: public
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: entitlement_id
description: ID of the entitlement
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- product_ids
properties:
product_ids:
description: IDs of the products to be attached to the entitlement.
type: array
minLength: 1
maxLength: 50
items:
type: string
maxLength: 255
minLength: 1
example: prod1a2b3c4d5e
additionalProperties: false
responses:
'200':
description: Success. The products were attached to the entitlement
content:
application/json:
schema:
$ref: '#/components/schemas/Entitlement'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/entitlements/{entitlement_id}/actions/detach_products:
post:
summary: Detach a set of product from an entitlement
operationId: detach-products-from-entitlement
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:entitlements:read_write
x-release-status: public
tags:
- Entitlement
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: entitlement_id
description: ID of the entitlement
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- product_ids
properties:
product_ids:
description: IDs of the products to be detached from the entitlement.
type: array
minLength: 1
maxLength: 50
items:
type: string
maxLength: 255
minLength: 1
example: prod1a2b3c4d5e
additionalProperties: false
responses:
'200':
description: Success. The products were detached from the entitlement
content:
application/json:
schema:
$ref: '#/components/schemas/Entitlement'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:entitlements:read_write</code>. This
endpoint belongs to the <strong>Project Configuration</strong> domain,
which has a default rate limit of <strong>60 requests per
minute</strong>.
/projects/{project_id}/offerings/{offering_id}:
get:
summary: Get an offering
operationId: get-offering
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read
x-release-status: public
x-expandable-fields:
- package: project_configuration:packages:read
- package.product: project_configuration:products:read
tags:
- Offering
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: offering_id
description: ID of the offering
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: ofrnge1a2b3c4d5
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `package` (requires `project_configuration:packages:read` permission), `package.product` (requires `project_configuration:products:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- package
- package.product
example: package
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Offering'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Update an offering
operationId: update-offering
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read_write
x-release-status: public
tags:
- Offering
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: offering_id
description: ID of the offering
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: ofrnge1a2b3c4d5
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
display_name:
description: The display name of the offering
type: string
minLength: 1
maxLength: 1500
example: premium access to features
is_current:
description: Indicates if the offering is the current offering
type: boolean
example: true
metadata:
description: Custom metadata of the offering
nullable: true
$ref: '#/components/schemas/OfferingMetadata'
additionalProperties: false
responses:
'200':
description: Success. The offering was updated
content:
application/json:
schema:
$ref: '#/components/schemas/Offering'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
delete:
summary: Delete an offering and its attached packages
operationId: delete-offering
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read_write
x-release-status: public
tags:
- Offering
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: offering_id
description: ID of the offering
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: ofrnge1a2b3c4d5
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/offerings/{offering_id}/actions/archive:
post:
summary: Archive an offering
operationId: archive-offering
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read_write
x-release-status: public
tags:
- Offering
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: offering_id
description: ID of the offering
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: ofrnge1a2b3c4d5
responses:
'200':
description: Success. The offering was archived
content:
application/json:
schema:
$ref: '#/components/schemas/Offering'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/offerings/{offering_id}/actions/unarchive:
post:
summary: Unarchive an offering
operationId: unarchive-offering
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read_write
x-release-status: public
tags:
- Offering
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: offering_id
description: ID of the offering
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: ofrnge1a2b3c4d5
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
unarchive_referenced_entities:
description: >-
If true, also unarchive any archived products referenced by
this offering's packages.
type: boolean
default: false
additionalProperties: false
responses:
'200':
description: Success. The offering was unarchived
content:
application/json:
schema:
$ref: '#/components/schemas/Offering'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/offerings:
get:
summary: Get a list of offerings
operationId: list-offerings
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read
x-release-status: public
x-expandable-fields:
- items.package: project_configuration:packages:read
- items.package.product: project_configuration:products:read
tags:
- Offering
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `items.package` (requires `project_configuration:packages:read` permission), `items.package.product` (requires `project_configuration:products:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- items.package
- items.package.product
example: items.package
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListOfferings'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Create an offering
operationId: create-offering
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:offerings:read_write
x-release-status: public
tags:
- Offering
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- lookup_key
- display_name
properties:
lookup_key:
description: The custom identifier of the offering
type: string
minLength: 1
maxLength: 200
example: default
display_name:
description: The display_name of the offering
type: string
minLength: 1
maxLength: 1500
example: The standard set of packages
metadata:
description: Custom metadata of the offering
nullable: true
$ref: '#/components/schemas/OfferingMetadata'
additionalProperties: false
responses:
'201':
description: Success. The offering was created
content:
application/json:
schema:
$ref: '#/components/schemas/Offering'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:offerings:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/packages/{package_id}:
get:
summary: Get a package
operationId: get-package
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:packages:read
x-expandable-fields:
- product: project_configuration:products:read
x-release-status: public
tags:
- Package
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: package_id
description: ID of the package
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: pkge1a2b3c4d5
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `product` (requires `project_configuration:products:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- product
example: product
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Package'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:packages:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Update a package
operationId: update-package
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:packages:read_write
x-release-status: public
tags:
- Package
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: package_id
description: ID of the package
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: pkge1a2b3c4d5
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
display_name:
description: The display name of the package
type: string
minLength: 1
maxLength: 1500
example: monthly with one-week trial
position:
description: The position of the package within the offering
type: integer
minimum: 1
example: 2
additionalProperties: false
responses:
'200':
description: Success. The package was updated
content:
application/json:
schema:
$ref: '#/components/schemas/Package'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:packages:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
delete:
summary: Delete a package
operationId: delete-package-from-offering
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:packages:read_write
x-release-status: public
tags:
- Package
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: package_id
description: ID of the package
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: pkge1a2b3c4d5
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/DeletedObject'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:packages:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/offerings/{offering_id}/packages:
get:
summary: Get a list of packages in an offering
operationId: list-packages
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:packages:read
x-expandable-fields:
- items.product: project_configuration:products:read
x-release-status: public
tags:
- Package
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: offering_id
description: ID of the offering
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: ofrnge1a2b3c4d5
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
- name: expand
in: query
description: |-
Specifies which fields in the response should be expanded.
Accepted values are: `items.product` (requires `project_configuration:products:read` permission).
required: false
schema:
type: array
items:
maxLength: 5000
minLength: 1
type: string
enum:
- items.product
example: items.product
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListPackages'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:packages:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
post:
summary: Create a package
operationId: create-packages
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:packages:read_write
x-release-status: public
tags:
- Package
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: offering_id
description: ID of the offering
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: ofrnge1a2b3c4d5
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- lookup_key
- display_name
properties:
lookup_key:
description: The lookup_key of the package
nullable: false
example: monthly
type: string
minLength: 1
maxLength: 200
display_name:
description: The display name of the package
type: string
minLength: 1
maxLength: 1500
example: monthly with one-week trial
position:
description: The position of the package in the offering
type: integer
example: 1
additionalProperties: false
responses:
'201':
description: Success. The package was created
content:
application/json:
schema:
$ref: '#/components/schemas/Package'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:packages:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/packages/{package_id}/products:
get:
summary: Get a list of products attached to a given package of an offering
operationId: get-products-from-package
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:packages:read
x-release-status: public
tags:
- Package
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: package_id
description: ID of the package
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: pkge1a2b3c4d5
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ProductsFromPackage'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:packages:read</code>. This endpoint belongs
to the <strong>Project Configuration</strong> domain, which has a
default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/packages/{package_id}/actions/attach_products:
post:
summary: Attach a set of products to a package
operationId: attach-products-to-package
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:packages:read_write
x-release-status: public
tags:
- Package
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: package_id
description: ID of the package
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: pkge1a2b3c4d5
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- products
properties:
products:
description: Product association list
type: array
minLength: 1
maxLength: 50
items:
$ref: '#/components/schemas/PackageProductIDAssociation'
additionalProperties: false
examples:
Single product for package (applies to any store):
value:
products:
- product_id: prod1a2b3c4d5e
eligibility_criteria: all
Play Store with different products depending on SDK version (SDK v6+ and SDK <v5) for one package:
value:
products:
- product_id: prod1a2b3c4d5e
eligibility_criteria: google_sdk_lt_6
- product_id: prod445abb3188
eligibility_criteria: google_sdk_ge_6
responses:
'200':
description: Success. The products were attached to the package.
content:
application/json:
schema:
$ref: '#/components/schemas/Package'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:packages:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/packages/{package_id}/actions/detach_products:
post:
summary: Detach a set of products from a package
operationId: detach-products-from-package
x-revenuecat-rate-limiting-domain: project_configuration
x-scopes:
- project_configuration:packages:read_write
x-release-status: public
tags:
- Package
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: package_id
description: ID of the package
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: pkge1a2b3c4d5
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- product_ids
properties:
product_ids:
description: IDs of the products to detach from the package
type: array
minLength: 1
maxLength: 50
items:
type: string
maxLength: 255
minLength: 1
example: prod1a2b3c4d5e
additionalProperties: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Package'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>project_configuration:packages:read_write</code>. This endpoint
belongs to the <strong>Project Configuration</strong> domain, which has
a default rate limit of <strong>60 requests per minute</strong>.
/projects/{project_id}/subscriptions/{subscription_id}:
get:
summary: Get a subscription
operationId: get-subscription
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read
x-release-status: public
tags:
- Subscription
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: subscription_id
description: ID of the subscription
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: sub1a2b3c4d5e
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Subscription'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:subscriptions:read</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/subscriptions/{subscription_id}/transactions:
get:
summary: Get a Play Store or App Store subscription's transactions
operationId: get-play-store-or-app-store-subscription-transactions
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read
x-release-status: public
tags:
- Subscription
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: subscription_id
description: ID of the subscription
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: sub1a2b3c4d5e
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListSubscriptionTransaction'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:subscriptions:read</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/subscriptions/{subscription_id}/transactions/{transaction_id}/actions/refund:
post:
summary: Refund a Play Store subscription's transaction
operationId: refund-play-store-subscription-transaction
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read_write
x-release-status: public
tags:
- Subscription
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: subscription_id
description: ID of the subscription
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: sub1a2b3c4d5e
- name: transaction_id
description: Identifier of the transaction in the store
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: GPA.000-000-000-000
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SubscriptionTransaction'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
Refund a Play Store subscription's transaction. This endpoint does not
cancel the subscription or revoke access to it.
This endpoint requires the following permission(s): <code>customer_information:subscriptions:read_write</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/subscriptions/{subscription_id}/entitlements:
get:
summary: Get a list of entitlements associated with a subscription
operationId: list-subscription-entitlements
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read
x-release-status: public
tags:
- Subscription
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: subscription_id
description: ID of the subscription
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: sub1a2b3c4d5e
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListEntitlements'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: |-
Lists all Entitlements granted by a Subscription.
This endpoint requires the following permission(s): <code>customer_information:subscriptions:read</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/subscriptions/{subscription_id}/actions/cancel:
post:
summary: Cancel an active Web Billing subscription
operationId: cancel-subscription
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read_write
x-release-status: public
tags:
- Subscription
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: subscription_id
description: ID of the subscription
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: sub1a2b3c4d5e
responses:
'200':
description: Success. The subscription has been successfully canceled.
content:
application/json:
schema:
$ref: '#/components/schemas/Subscription'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
Cancel an active Web Billing subscription. The customer will lose access
to the associated entitlements at the end of the current period.
This endpoint requires the following permission(s): <code>customer_information:subscriptions:read_write</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/subscriptions/{subscription_id}/actions/refund:
post:
summary: Refund an active Web Billing subscription
operationId: refund-subscription
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read_write
x-release-status: public
tags:
- Subscription
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: subscription_id
description: ID of the subscription
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: sub1a2b3c4d5e
responses:
'200':
description: Success. The subscription has been successfully refunded.
content:
application/json:
schema:
$ref: '#/components/schemas/Subscription'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
Cancel a Web Billing subscription by refunding the most recent payment.
The customer will immediately lose access to the associated
entitlements.
This endpoint requires the following permission(s): <code>customer_information:subscriptions:read_write</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/subscriptions/{subscription_id}/authenticated_management_url:
get:
summary: Get an authenticated Web Billing customer portal URL
operationId: get-authorized-subscription-management-url
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read
x-release-status: public
tags:
- Subscription
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: subscription_id
description: ID of the subscription
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: sub1a2b3c4d5e
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticatedManagementUrl'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
Get a secure, single-use URL that allows customers to access their Web
Billing customer portal.
This endpoint requires the following permission(s): <code>customer_information:subscriptions:read</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/subscriptions:
get:
summary: Get a list of subscriptions associated with a customer
operationId: list-subscriptions
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: environment
in: query
schema:
type: string
enum:
- sandbox
- production
example: production
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListSubscriptions'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:subscriptions:read</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/purchases/{purchase_id}:
get:
summary: Get a purchase
operationId: get-purchase
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:purchases:read
x-release-status: public
tags:
- Purchase
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: purchase_id
description: ID of the purchase
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: purc1a2b3c4d5e
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Purchase'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:purchases:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/purchases/{purchase_id}/entitlements:
get:
summary: Get a list of entitlements associated with a purchase
operationId: list-purchase-entitlements
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:purchases:read
x-release-status: public
tags:
- Purchase
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: purchase_id
description: ID of the purchase
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: purc1a2b3c4d5e
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListEntitlements'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: |-
Lists all Entitlements granted by a Purchase.
This endpoint requires the following permission(s): <code>customer_information:purchases:read</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/purchases/{purchase_id}/actions/refund:
post:
summary: Refund a Web Billing purchase
operationId: refund-purchase
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:purchases:read_write
x-release-status: public
tags:
- Purchase
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: purchase_id
description: ID of the purchase
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 255
example: purc1a2b3c4d5e
responses:
'200':
description: Success. The purchase has been successfully refunded.
content:
application/json:
schema:
$ref: '#/components/schemas/Purchase'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
Refund a Web Billing purchase and revoke access to associated granted
entitlements.
This endpoint requires the following permission(s): <code>customer_information:purchases:read_write</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/purchases:
get:
summary: Get a list of purchases associated with a customer
operationId: list-purchases
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:purchases:read
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: environment
in: query
schema:
type: string
enum:
- sandbox
- production
example: production
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListPurchases'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:purchases:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/active_entitlements:
get:
summary: Get a list of customer's active entitlements
operationId: list-customer-active-entitlements
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListCustomerActiveEntitlements'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/aliases:
get:
summary: Get a list of the customer's aliases
operationId: list-customer-aliases
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListCustomerAliases'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/virtual_currencies:
get:
summary: Get a list of customer's virtual currencies balances
operationId: list-virtual-currencies-balances
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:purchases:read
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: include_empty_balances
in: query
required: false
schema:
type: boolean
example: true
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListVirtualCurrenciesBalances'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:purchases:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/virtual_currencies/transactions:
post:
summary: Create a virtual currencies transaction
operationId: create-virtual-currencies-transaction
x-revenuecat-rate-limiting-domain: virtual_currencies_create_transaction
x-scopes:
- customer_information:purchases:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: Idempotency-Key
in: header
schema:
type: string
example: 1234-5678-9101-1121
description: >-
This is an optional idempotency key to ensure exactly once execution
of the request.
- name: include_empty_balances
in: query
required: false
schema:
type: boolean
example: true
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- adjustments
properties:
adjustments:
description: The adjustments to the virtual currencies
type: object
additionalProperties:
type: integer
reference:
description: The reference of the transaction
type: string
nullable: true
additionalProperties: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListVirtualCurrenciesBalances'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:purchases:read_write</code>. This endpoint
belongs to the <strong>Virtual Currencies - Create Transaction</strong>
domain, which has a default rate limit of <strong>480 requests per
minute</strong>.
/projects/{project_id}/customers/{customer_id}/virtual_currencies/update_balance:
post:
summary: Update a virtual currencies balance without creating a transaction
operationId: update-virtual-currencies-balance
x-revenuecat-rate-limiting-domain: virtual_currencies_create_transaction
x-scopes:
- customer_information:purchases:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: Idempotency-Key
in: header
schema:
type: string
example: 1234-5678-9101-1121
description: >-
This is an optional idempotency key to ensure exactly once execution
of the request.
- name: include_empty_balances
in: query
required: false
schema:
type: boolean
example: true
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- adjustments
properties:
adjustments:
description: The adjustments to the virtual currencies
type: object
additionalProperties:
type: integer
reference:
description: The reference of the transaction
type: string
nullable: true
additionalProperties: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListVirtualCurrenciesBalances'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:purchases:read_write</code>. This endpoint
belongs to the <strong>Virtual Currencies - Create Transaction</strong>
domain, which has a default rate limit of <strong>480 requests per
minute</strong>.
/projects/{project_id}/customers/{customer_id}/attributes:
get:
summary: Get a list of the customer's attributes
operationId: list-customer-attributes
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListCustomerAttributes'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
post:
summary: Set a customer's attributes
operationId: set-customer-attributes
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:customers:read_write
x-release-status: public
tags:
- Customer
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- attributes
properties:
attributes:
type: array
nullable: false
minItems: 1
maxItems: 50
items:
type: object
additionalProperties: false
required:
- name
- value
properties:
name:
description: The name of the attribute
nullable: false
minLength: 1
maxLength: 40
oneOf:
- $ref: '#/components/schemas/CustomerAttributeReservedName'
- $ref: '#/components/schemas/CustomerAttributeCustomName'
example: $email
value:
description: >-
The value of the attribute. Use null to delete the
attribute.
type: string
maxLength: 500
nullable: true
example:
attributes:
- name: $email
value: [email protected]
- name: $displayName
value: John Appleseed
- name: my_custom_attr
value: custom value
responses:
'200':
description: Success. The customer attributes were set
content:
application/json:
schema:
$ref: '#/components/schemas/ListCustomerAttributes'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:customers:read_write</code>. This endpoint
belongs to the <strong>Customer Information</strong> domain, which has a
default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/invoices:
get:
summary: Get a list of the customer's invoices
operationId: list-customer-invoices
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:invoices:read
x-release-status: public
tags:
- Invoice
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: starting_after
in: query
required: false
schema:
type: string
example: ent12354
- name: limit
in: query
required: false
schema:
type: integer
example: 10
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListCustomerInvoices'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:invoices:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/customers/{customer_id}/invoices/{invoice_id}/file:
get:
summary: Get an invoice
operationId: get-invoice
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:invoices:read
x-release-status: public
tags:
- Invoice
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: customer_id
in: path
description: ID of the customer
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
- name: invoice_id
in: path
description: ID of the invoice
required: true
schema:
type: string
minLength: 1
maxLength: 1500
example: rcbin1a2b3c4d5e
responses:
'302':
description: File found. Needs to be downloaded from the location header
headers:
location:
description: The URL to download the invoice pdf
schema:
type: string
format: uri
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>customer_information:invoices:read</code>. This endpoint belongs
to the <strong>Customer Information</strong> domain, which has a default
rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/metrics/overview:
get:
summary: Get overview metrics for a project
operationId: get-overview-metrics
x-revenuecat-rate-limiting-domain: charts_metrics
x-scopes:
- charts_metrics:overview:read
x-release-status: public
tags:
- Charts & Metrics
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: currency
description: ISO 4217 currency code
in: query
schema:
type: string
enum:
- USD
- EUR
- GBP
- AUD
- CAD
- JPY
- BRL
- KRW
- CNY
- MXN
- SEK
- PLN
example: EUR
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/OverviewMetrics'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
This endpoint requires the following permission(s):
<code>charts_metrics:overview:read</code>. This endpoint belongs to the
<strong>Charts & Metrics</strong> domain, which has a default rate limit
of <strong>5 requests per minute</strong>.
/projects/{project_id}/charts/{chart_name}:
get:
summary: Get chart data
description: >-
Returns time-series data for a specific chart.
**Response Structure**
The response includes:
- Chart metadata (category, display_name, description)
- Time boundaries (start_date, end_date, last_computed_at)
- Data values (array of data points)
- Summary statistics
- Segment information (when segmented)
**Chart Types**
Different charts may return data in slightly different formats:
- Standard charts: values as arrays of data points with timestamps
- Cohort charts: values include cohort-specific data structures
- Segmented charts: include segment information in the response
**Filtering and Segmentation**
Use the `/charts/{chart_name}/options` endpoint to discover available
filters and segments for a specific chart before making requests.
Filter parameters vary by chart and can be passed as additional query
parameters.
**Aggregation**
Use `aggregate` to request summary-only output for supported charts.
When `aggregate` is provided, `values` is returned as an empty array and
`summary` includes only the requested aggregate operations.
This endpoint requires the following permission(s): <code>charts_metrics:charts:read</code>. This endpoint belongs to the <strong>Charts & Metrics</strong> domain, which has a default rate limit of <strong>5 requests per minute</strong>.
operationId: get-chart-data
x-revenuecat-rate-limiting-domain: charts_metrics
x-scopes:
- charts_metrics:charts:read
x-release-status: public
tags:
- Charts & Metrics
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: chart_name
description: |
Name of the chart to retrieve.
required: true
in: path
schema:
type: string
maxLength: 255
enum:
- actives
- actives_movement
- actives_new
- arr
- churn
- cohort_explorer
- conversion_to_paying
- customers_new
- ltv_per_customer
- ltv_per_paying_customer
- mrr
- mrr_movement
- refund_rate
- revenue
- subscription_retention
- subscription_status
- trials
- trials_movement
- trials_new
- customers_active
- trial_conversion_rate
example: revenue
- name: realtime
description: >-
Whether to request real-time (v3) charts. Defaults to true. Set to
false to request the v2 charts.
in: query
schema:
type: boolean
default: true
- name: filters
description: JSON array of chart filters. Each filter is a ChartFilter object.
in: query
schema:
type: string
example: '[{"name":"country","values":["US","UK"]}]'
- name: selectors
description: JSON object of chart selectors.
in: query
schema:
type: string
example: '{"conversion_timeframe":"7_days","revenue_type":"proceeds"}'
- name: aggregate
description: >
Comma-separated aggregate operations to return in `summary` without
raw `values`.
in: query
style: form
explode: false
schema:
type: array
minItems: 1
uniqueItems: true
items:
type: string
enum:
- average
- total
example: average,total
- name: currency
description: ISO 4217 currency code
in: query
schema:
type: string
enum:
- USD
- EUR
- GBP
- AUD
- CAD
- JPY
- BRL
- KRW
- CNY
- MXN
- SEK
- PLN
example: EUR
- name: resolution
description: >
Time resolution for the chart data.
Use the chart options endpoint to discover available resolutions and
their IDs.
in: query
schema:
type: string
example: '0'
- name: start_date
description: Start date for the data range (ISO 8601 format)
in: query
schema:
type: string
format: date
example: '2024-01-01'
- name: end_date
description: End date for the data range (ISO 8601 format)
in: query
schema:
type: string
format: date
example: '2024-12-31'
- name: segment
description: |
Segment the data by this dimension. Use the chart options endpoint
to discover available segments for a chart.
in: query
schema:
type: string
example: country
responses:
'200':
description: Chart data retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ChartData'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
/projects/{project_id}/charts/{chart_name}/options:
get:
summary: Get available options for a chart
description: >-
Returns configuration options for a specific chart.
Use this endpoint to discover:
- **Resolutions**: Available time granularities (day, week, month, etc.)
- **Segments**: Dimensions you can segment the data by (country, store,
product, etc.)
- **Filters**: Available filters and their possible values
The options returned are specific to the chart and may vary based on
your project's data and configuration.
**Usage**
Call this endpoint before requesting chart data to:
1. Build dynamic filter UIs
2. Validate parameters before making chart data requests
3. Discover available dimensions for analysis
. This endpoint requires the following permission(s):
<code>charts_metrics:charts:read</code>. This endpoint belongs to the
<strong>Charts & Metrics</strong> domain, which has a default rate limit
of <strong>5 requests per minute</strong>.
operationId: get-chart-options
x-revenuecat-rate-limiting-domain: charts_metrics
x-scopes:
- charts_metrics:charts:read
x-release-status: public
tags:
- Charts & Metrics
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: chart_name
description: |
Name of the chart to retrieve.
required: true
in: path
schema:
type: string
maxLength: 255
enum:
- actives
- actives_movement
- actives_new
- arr
- churn
- cohort_explorer
- conversion_to_paying
- customers_new
- ltv_per_customer
- ltv_per_paying_customer
- mrr
- mrr_movement
- refund_rate
- revenue
- subscription_retention
- subscription_status
- trials
- trials_movement
- trials_new
- customers_active
- trial_conversion_rate
example: revenue
- name: realtime
description: >-
Whether to request real-time (v3) charts. Defaults to true. Set to
false to request the v2 charts.
in: query
schema:
type: boolean
default: true
responses:
'200':
description: Chart options retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ChartOptions'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
/projects/{project_id}/subscriptions:
get:
summary: Search subscriptions by store subscription identifier
operationId: search-subscriptions
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:subscriptions:read
x-release-status: public
tags:
- Subscription
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: store_subscription_identifier
description: >-
Store ID associated with the subscription for the current or next
period.
required: true
in: query
schema:
type: string
nullable: false
minLength: 1
maxLength: 255
examples:
amazon:
value: 9aJscueFTxLPZXXo-AlBTkI0OnFXR2qiH14C1aqWnOT=:3:11..8
summary: 'Amazon Appstore '
app_store:
value: '100001234567890'
summary: Apple App Store
paddle:
value: txn_01jss4bz50g1z5yw121npeb3ag
summary: Paddle
play_store:
value: GPA.1234-5678-9012-34567..0
summary: Google Play Store
rc_billing:
value: txRcb553a54d4738816a63f1a05cfcb1723e3..1746748685
summary: RevenueCat Web Billing
roku:
value: 4ab8df12-3003-11f0-9646-8ac68bcdcaed
summary: Roku
stripe:
value: si_Rww1psqupbKxmt
summary: Stripe
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListSubscriptions'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
Search for a subscription by any of its associated
`store_subscription_identifier` values, whether from a past or current
subscription period.
For example, this may include the `transactionId` of any transaction in
an Apple App Store subscription, or any order ID from a Google Play
Store subscription.
This endpoint requires the following permission(s): <code>customer_information:subscriptions:read</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
/projects/{project_id}/purchases:
get:
summary: Search one-time purchases by store purchase identifier
operationId: search-purchases
x-revenuecat-rate-limiting-domain: customer_information
x-scopes:
- customer_information:purchases:read
x-release-status: public
tags:
- Purchase
parameters:
- name: project_id
description: ID of the project
required: true
in: path
schema:
type: string
maxLength: 255
example: proj1ab2c3d4
- name: store_purchase_identifier
description: Store ID associated with the one-time purchase.
required: true
in: query
schema:
type: string
nullable: false
minLength: 1
maxLength: 255
examples:
amazon:
value: 9aJscueFTxLPZXXo-AlBTkI0OnFXR2qiH14C1aqWnOT=:3:11
summary: 'Amazon Appstore '
app_store:
value: '100001234567890'
summary: Apple App Store
paddle:
value: txn_01jss4bz50g1z5yw121npeb3ag
summary: Paddle
play_store:
value: GPA.1234-5678-9012-34567
summary: Google Play Store
rc_billing:
value: txRcb553a54d4738816a63f1a05cfcb1723e3
summary: RevenueCat Web Billing
roku:
value: 4ab8df12-3003-11f0-9646-8ac68bcdcaed
summary: Roku
stripe:
value: si_Rww1psqupbKxmt
summary: Stripe
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ListPurchases'
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/Locked'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/InternalError'
description: >-
Search for a one-time purchases by any of its associated
`store_purchase_identifier` values.
For example, this may include the `transactionId` of any transaction in
an Apple App Store purchase, or any order ID from a Google Play Store
purchase.
This endpoint requires the following permission(s): <code>customer_information:purchases:read</code>. This endpoint belongs to the <strong>Customer Information</strong> domain, which has a default rate limit of <strong>480 requests per minute</strong>.
components:
securitySchemes:
BearerAuth:
bearerFormat: auth-scheme
description: >-
Bearer HTTP authentication. Allowed headers -- Authorization: Bearer
<api_key>
scheme: bearer
type: http
schemas:
AmazonApp:
type: object
properties:
amazon:
description: Amazon type details
type: object
required:
- package_name
nullable: false
properties:
package_name:
description: The package name of the app
type: string
nullable: false
minLength: 1
maxLength: 256
AmazonAppCreate:
type: object
required:
- name
- type
- amazon
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
nullable: false
type:
description: >
The platform of the app.
Mac App Store is disabled by default. See [Legacy Mac
Apps](https://www.revenuecat.com/docs/legacy-mac-apps) for more
details.
type: string
enum:
- amazon
nullable: false
amazon:
description: Amazon type details. Should only be used when type is amazon.
type: object
required:
- package_name
nullable: false
properties:
package_name:
description: The package name of the app
type: string
minLength: 1
maxLength: 256
nullable: false
shared_secret:
description: Your Amazon Developer Identity Shared Key
type: string
nullable: false
additionalProperties: false
App:
allOf:
- type: object
required:
- id
- name
- created_at
- type
- project_id
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- app
type: string
id:
description: The id of the app
nullable: false
type: string
minLength: 1
maxLength: 255
example: app1a2b3c4
name:
description: The name of the app
nullable: false
type: string
minLength: 1
maxLength: 255
created_at:
description: The date when the app was created in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
type:
description: The platform of the app
nullable: false
type: string
enum:
- amazon
- app_store
- mac_app_store
- play_store
- stripe
- rc_billing
- roku
- paddle
- test_store
example: app_store
project_id:
description: The id of the project
nullable: false
type: string
minLength: 1
maxLength: 255
example: proj1a2b3c4
- $ref: '#/components/schemas/AmazonApp'
- $ref: '#/components/schemas/AppStoreApp'
- $ref: '#/components/schemas/MacAppStoreApp'
- $ref: '#/components/schemas/PlayStoreApp'
- $ref: '#/components/schemas/StripeApp'
- $ref: '#/components/schemas/RCBillingApp'
- $ref: '#/components/schemas/RokuApp'
- $ref: '#/components/schemas/PaddleApp'
additionalProperties: true
AppCreate:
oneOf:
- $ref: '#/components/schemas/AmazonAppCreate'
- $ref: '#/components/schemas/AppStoreAppCreate'
- $ref: '#/components/schemas/MacAppStoreAppCreate'
- $ref: '#/components/schemas/PlayStoreAppCreate'
- $ref: '#/components/schemas/StripeAppCreate'
- $ref: '#/components/schemas/RCBillingAppCreate'
- $ref: '#/components/schemas/RokuAppCreate'
- $ref: '#/components/schemas/PaddleAppCreate'
discriminator:
propertyName: type
mapping:
amazon: '#/components/schemas/AmazonAppCreate'
app_store: '#/components/schemas/AppStoreAppCreate'
mac_app_store: '#/components/schemas/MacAppStoreAppCreate'
play_store: '#/components/schemas/PlayStoreAppCreate'
stripe: '#/components/schemas/StripeAppCreate'
rc_billing: '#/components/schemas/RCBillingAppCreate'
roku: '#/components/schemas/RokuAppCreate'
paddle: '#/components/schemas/PaddleAppCreate'
AppStoreApp:
type: object
properties:
app_store:
description: App Store type details
type: object
required:
- bundle_id
nullable: false
properties:
bundle_id:
description: The bundle ID of the app
type: string
nullable: false
minLength: 1
maxLength: 256
AppStoreAppCreate:
type: object
required:
- name
- type
- app_store
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
nullable: false
type:
description: >
The platform of the app.
Mac App Store is disabled by default. See [Legacy Mac
Apps](https://www.revenuecat.com/docs/legacy-mac-apps) for more
details.
type: string
enum:
- app_store
nullable: false
app_store:
description: App Store type details. Should only be used when type is app_store.
type: object
required:
- bundle_id
nullable: false
properties:
bundle_id:
description: The bundle ID of the app
type: string
minLength: 1
maxLength: 256
nullable: false
shared_secret:
description: The shared secret of the app
type: string
minLength: 32
maxLength: 32
nullable: false
subscription_private_key:
description: >
PKCS /#8 In App Key downloaded from App Store Connect in PEM
format. Copy the contents
of the file in this field. See instructions on how to get it
in:
https://www.revenuecat.com/docs/in-app-purchase-key-configuration
type: string
minLength: 1
maxLength: 4500
nullable: false
subscription_key_id:
description: >-
In App Key id. The ID of the downloaded in app key. You can get
it from App Store Connect
type: string
minLength: 1
maxLength: 32
nullable: false
subscription_key_issuer:
description: >-
The key Issuer id. See instructions on how to obtain this in:
https://www.revenuecat.com/docs/in-app-purchase-key-configuration#3-providing-the-issuer-id-to-revenuecat
type: string
minLength: 1
maxLength: 36
nullable: false
app_store_connect_api_key:
description: >
App Store Connect API Key downloaded from App Store Connect in
PEM format. Copy the contents
of the file in this field. This is optional and used for
advanced features like product imports.
type: string
minLength: 1
maxLength: 4500
nullable: false
app_store_connect_api_key_id:
description: >-
App Store Connect API Key ID. The ID of the downloaded API key.
You can get it from App Store Connect.
type: string
minLength: 1
maxLength: 36
nullable: false
app_store_connect_api_key_issuer:
description: App Store Connect API Key Issuer ID.
type: string
minLength: 1
maxLength: 36
nullable: false
app_store_connect_vendor_number:
description: >-
Your vendor number from App Store Connect. Required for some
features like financial reports.
type: string
minLength: 1
maxLength: 20
nullable: false
additionalProperties: false
AuditLog:
type: object
required:
- id
- project_id
- action_type
- target_type
- target_identifier
- actor_type
- actor_identifier
- occurred_at
- additional_data
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- audit_log
type: string
id:
type: string
maxLength: 255
example: log1ab2c3d4e5
project_id:
nullable: false
description: ID of the project to which the audit log belongs.
minLength: 1
maxLength: 20
type: string
example: proj1ab2c3d4
action_type:
type: string
description: Action that was performed.
example: project_name_updated
target_type:
type: string
description: Type of the target on which the action was performed.
example: project
target_identifier:
type: string
description: Identifier of the action target.
example: proj1ab2c3d4
actor_type:
type: string
description: Type of actor that performed the action.
enum:
- user
- system
- api_key
actor_identifier:
type: string
description: Identifier of the actor that performed the action.
example: user_abc123
occurred_at:
nullable: false
description: Timestamp when the action occurred, in milliseconds since epoch.
type: integer
format: int64
example: 1713297600000
additional_data:
type: object
description: Additional metadata associated with the audit log.
additionalProperties: true
additionalProperties: false
AuthenticatedManagementUrl:
type: object
required:
- management_url
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- authenticated_management_url
type: string
management_url:
description: >-
A secure, single-use URL that provides temporary access to the
customer portal for a specific customer. This URL can only be used
once and expires after use.
nullable: false
type: string
minLength: 1
maxLength: 255
example: >-
https://billing.revenuecat.com/app1a2b3c4/sub1ab2c3d4e5?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
additionalProperties: false
ChartData:
type: object
description: Chart data response containing time-series data and metadata
required:
- object
- category
- display_type
- display_name
- description
- resolution
- values
- yaxis
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- chart_data
type: string
category:
description: Category the chart belongs to
type: string
example: revenue
display_type:
description: Type of chart visualization
type: string
example: line
display_name:
description: Human-readable name of the chart
type: string
example: Revenue
description:
description: Description of what the chart shows
type: string
documentation_link:
description: Link to documentation for this chart
nullable: true
type: string
last_computed_at:
description: Timestamp when the chart data was last computed (ms since epoch)
nullable: true
type: integer
format: int64
start_date:
description: Start date of the data range (ms since epoch)
nullable: true
type: integer
format: int64
end_date:
description: End date of the data range (ms since epoch)
nullable: true
type: integer
format: int64
yaxis_currency:
description: Currency used for monetary values
type: string
example: USD
filtering_allowed:
description: Whether filtering is allowed for this chart
type: boolean
segmenting_allowed:
description: Whether segmentation is allowed for this chart
type: boolean
resolution:
description: Time resolution of the data points
type: string
enum:
- day
- week
- month
- quarter
- year
example: day
values:
description: >-
Chart data points. Structure varies by chart type - can be arrays of
numbers or objects with timestamps and values. Returned as an empty
array when aggregate operations are requested.
type: array
items:
oneOf:
- type: array
items:
type: number
nullable: true
- type: object
additionalProperties: true
summary:
description: Summary statistics for the chart data
nullable: true
type: object
additionalProperties: true
yaxis:
description: Y-axis configuration including unit
type: string
example: $
segments:
description: Segment information when data is segmented
nullable: true
type: array
items:
type: object
properties:
id:
type: string
display_name:
type: string
segments_limit:
description: Maximum number of segments returned
nullable: true
type: integer
measures:
description: Measure definitions for the chart (v3 charts)
nullable: true
type: array
items:
type: object
additionalProperties: true
user_selectors:
description: >-
Currently selected values for user-configurable selectors (keyed by
selector name)
nullable: true
type: object
additionalProperties:
type: string
unsupported_params:
description: Parameters that were provided but not supported
nullable: true
type: object
properties:
filters:
type: array
items:
type: string
segment:
type: string
nullable: true
additionalProperties: false
ChartFilterOption:
type: object
description: A filter option for a chart
required:
- id
- display_name
- options
properties:
id:
description: Unique identifier for the filter
type: string
example: country
display_name:
description: Human-readable name for the filter
type: string
example: Country
group_display_name:
description: Group name for organizing filter options
nullable: true
type: string
example: Geography
options:
description: Available values for this filter
type: array
items:
type: object
required:
- id
- display_name
additionalProperties: true
properties:
id:
description: Unique identifier for the option value
type: string
example: US
display_name:
description: Human-readable name for the option value
type: string
example: United States
ChartOptions:
type: object
description: Available options for filtering and segmenting a chart
required:
- object
- resolutions
- segments
- filters
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- chart_options
type: string
resolutions:
description: Available time resolutions for the chart
type: array
items:
type: object
properties:
id:
type: string
description: Resolution ID to use in requests
display_name:
type: string
description: Human-readable name
required:
- id
- display_name
example:
- id: '0'
display_name: day
- id: '1'
display_name: week
- id: '2'
display_name: month
segments:
description: Available segmentation options
type: array
items:
$ref: '#/components/schemas/ChartSegmentOption'
filters:
description: Available filter options
type: array
items:
$ref: '#/components/schemas/ChartFilterOption'
user_selectors:
description: User-configurable selectors for the chart (keyed by selector name)
nullable: true
type: object
additionalProperties:
type: object
properties:
default:
type: string
description: Default value for the selector
display_name:
type: string
description: Human-readable name
options:
type: array
items:
type: object
properties:
id:
type: string
display_name:
type: string
required:
- id
- display_name
additionalProperties: false
ChartSegmentOption:
type: object
description: A segmentation option for a chart
required:
- id
- display_name
properties:
id:
description: Unique identifier for the segment option
type: string
example: country
display_name:
description: Human-readable name for the segment option
type: string
example: Country
group_display_name:
description: Group name for organizing segment options
nullable: true
type: string
example: Geography
Collaborator:
type: object
required:
- id
- email
- role
- accepted_at
- has_mfa
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- collaborator
type: string
id:
description: The id of the collaborator
nullable: false
type: string
minLength: 1
example: collab1a2b3c4d5
name:
description: The name of the collaborator
nullable: true
type: string
example: John Doe
email:
description: The email address of the collaborator
nullable: false
type: string
format: email
example: [email protected]
role:
description: The role of the collaborator
nullable: false
type: string
example: admin
accepted_at:
description: >-
The date when the collaborator accepted the invitation in ms since
epoch
nullable: true
type: integer
format: int64
example: 1658399423658
has_mfa:
description: Whether the collaborator has 2FA enabled
nullable: false
type: boolean
example: true
additionalProperties: false
Country:
type: string
nullable: true
example: US
description: The country that the object is associated with, in ISO alpha 2 code
enum:
- null
- AF
- AL
- DZ
- AS
- AD
- AO
- AI
- AQ
- AG
- AR
- AM
- AW
- AU
- AT
- AZ
- BS
- BH
- BD
- BB
- BY
- BE
- BZ
- BJ
- BM
- BT
- BO
- BQ
- BA
- BW
- BV
- BR
- IO
- BN
- BG
- BF
- BI
- CV
- KH
- CM
- CA
- KY
- CF
- TD
- CL
- CN
- CX
- CC
- CO
- KM
- CD
- CG
- CK
- CR
- HR
- CU
- CW
- CY
- CZ
- CI
- DK
- DJ
- DM
- DO
- EC
- EG
- SV
- GQ
- ER
- EE
- SZ
- ET
- FK
- FO
- FJ
- FI
- FR
- GF
- PF
- TF
- GA
- GM
- GE
- DE
- GH
- GI
- GR
- GL
- GD
- GP
- GU
- GT
- GG
- GN
- GW
- GY
- HT
- HM
- VA
- HN
- HK
- HU
- IS
- IN
- ID
- IR
- IQ
- IE
- IM
- IL
- IT
- JM
- JP
- JE
- JO
- KZ
- KE
- KI
- KP
- KR
- KW
- KG
- LA
- LV
- LB
- LS
- LR
- LY
- LI
- LT
- LU
- MO
- MG
- MW
- MY
- MV
- ML
- MT
- MH
- MQ
- MR
- MU
- YT
- MX
- FM
- MD
- MC
- MN
- ME
- MS
- MA
- MZ
- MM
- NA
- NR
- NP
- NL
- NC
- NZ
- NI
- NE
- NG
- NU
- NF
- MP
- 'NO'
- OM
- PK
- PW
- PS
- PA
- PG
- PY
- PE
- PH
- PN
- PL
- PT
- PR
- QA
- MK
- RO
- RU
- RW
- RE
- BL
- SH
- KN
- LC
- MF
- PM
- VC
- WS
- SM
- ST
- SA
- SN
- RS
- SC
- SL
- SG
- SX
- SK
- SI
- SB
- SO
- ZA
- GS
- SS
- ES
- LK
- SD
- SR
- SJ
- SE
- CH
- SY
- TW
- TJ
- TZ
- TH
- TL
- TG
- TK
- TO
- TT
- TN
- TR
- TM
- TC
- TV
- UG
- UA
- AE
- GB
- UM
- US
- UY
- UZ
- VU
- VE
- VN
- VG
- VI
- WF
- EH
- YE
- ZM
- ZW
- AX
CreateAppStoreConnectInAppPurchaseInput:
type: object
properties: {}
additionalProperties: false
description: In-app purchase products do not require any additional information
CreateAppStoreConnectSubscriptionInput:
type: object
required:
- duration
- subscription_group_name
properties:
duration:
type: string
enum:
- ONE_WEEK
- ONE_MONTH
- TWO_MONTHS
- THREE_MONTHS
- SIX_MONTHS
- ONE_YEAR
description: The subscription duration period
subscription_group_name:
type: string
minLength: 1
maxLength: 255
description: The name of the subscription group
subscription_group_id:
type: string
nullable: true
minLength: 1
maxLength: 255
description: The ID of the subscription group (optional)
additionalProperties: false
CreateWebhookIntegrationInput:
type: object
required:
- name
- url
properties:
name:
description: The display name of the webhook integration
type: string
minLength: 1
maxLength: 1500
example: Customer updates webhook
url:
description: The URL RevenueCat will send webhook notifications to
type: string
format: uri
maxLength: 5000
example: https://hooks.example.com/revenuecat
authorization_header:
description: >-
Optional authorization header that will be sent with webhook
notifications
type: string
nullable: true
maxLength: 5000
example: Bearer 123456
environment:
description: The environment the webhook integration is configured for
type: string
nullable: true
enum:
- production
- sandbox
- null
event_types:
description: Event types that will trigger the webhook
type: array
nullable: true
items:
$ref: '#/components/schemas/WebhookEventType'
app_id:
description: The ID of the app the webhook integration is scoped to
type: string
nullable: true
minLength: 1
maxLength: 255
example: app_1234567890abcdef
Currency:
type: string
description: ISO 4217 currency code
nullable: false
example: USD
enum:
- AED
- AFN
- ALL
- AMD
- ANG
- AOA
- ARS
- AUD
- AWG
- AZN
- BAM
- BBD
- BDT
- BGN
- BHD
- BIF
- BMD
- BND
- BOB
- BRL
- BSD
- BTC
- BTN
- BWP
- BYN
- BZD
- CAD
- CDF
- CHF
- CLF
- CLP
- CNH
- CNY
- COP
- CRC
- CUC
- CUP
- CVE
- CZK
- DJF
- DKK
- DOP
- DZD
- EGP
- ERN
- ETB
- EUR
- FJD
- FKP
- GBP
- GEL
- GGP
- GHS
- GIP
- GMD
- GNF
- GTQ
- GYD
- HKD
- HNL
- HRK
- HTG
- HUF
- IDR
- ILS
- IMP
- INR
- IQD
- IRR
- ISK
- JEP
- JMD
- JOD
- JPY
- KES
- KGS
- KHR
- KMF
- KPW
- KRW
- KWD
- KYD
- KZT
- LAK
- LBP
- LKR
- LRD
- LSL
- LYD
- MAD
- MDL
- MGA
- MKD
- MMK
- MNT
- MOP
- MRU
- MUR
- MVR
- MWK
- MXN
- MYR
- MZN
- NAD
- NGN
- NIO
- NOK
- NPR
- NZD
- OMR
- PAB
- PEN
- PGK
- PHP
- PKR
- PLN
- PYG
- QAR
- RON
- RSD
- RUB
- RWF
- SAR
- SBD
- SCR
- SDG
- SEK
- SGD
- SHP
- SLL
- SOS
- SRD
- SSP
- STD
- STN
- SVC
- SYP
- SZL
- THB
- TJS
- TMT
- TND
- TOP
- TRY
- TTD
- TWD
- TZS
- UAH
- UGX
- USD
- UYU
- UZS
- VEF
- VES
- VND
- VUV
- WST
- XAF
- XAG
- XAU
- XCD
- XDR
- XOF
- XPD
- XPF
- XPT
- YER
- ZAR
- ZMW
- ZWL
Customer:
type: object
required:
- id
- project_id
- first_seen_at
- last_seen_at
- last_seen_app_version
- last_seen_country
- last_seen_platform
- last_seen_platform_version
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- customer
type: string
id:
type: string
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
project_id:
nullable: false
description: ID of the project to which the customer belongs
minLength: 1
maxLength: 20
type: string
example: proj1ab2c3d4
first_seen_at:
nullable: false
description: The first time the customer was seen
type: integer
format: int64
example: 1658399423658
last_seen_at:
nullable: true
description: The last time the customer was seen
type: integer
format: int64
example: 1658399423658
last_seen_app_version:
nullable: true
description: The last app version the customer was seen on
type: string
example: 1.0.0
last_seen_country:
nullable: true
description: The last country the customer was seen in
type: string
example: US
last_seen_platform:
nullable: true
description: The last platform the customer was seen on
type: string
example: android
last_seen_platform_version:
nullable: true
description: The last platform version the customer was seen on
type: string
example: '35'
active_entitlements:
allOf:
- type: object
description: >-
List of the entitlements currently active for the customer. This
property is only available in the "Get a customer" endpoint.
nullable: true
- $ref: '#/components/schemas/ListCustomerActiveEntitlements'
experiment:
description: The experiment enrollment object
nullable: true
$ref: '#/components/schemas/ExperimentEnrollment'
attributes:
allOf:
- type: object
description: >-
List of the attributes of the customer. This is an expandable
property, only available in the "Get a customer" endpoint.
nullable: true
- $ref: '#/components/schemas/ListCustomerAttributes'
additionalProperties: false
CustomerAlias:
type: object
required:
- id
- created_at
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- customer.alias
type: string
id:
type: string
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
created_at:
nullable: false
description: The time when the alias was created
type: integer
format: int64
example: 1658399423658
additionalProperties: false
CustomerAttribute:
type: object
required:
- name
- value
- updated_at
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- customer.attribute
type: string
name:
nullable: false
description: >-
The name of the attribute. Reserved attributes are prefixed with a
`$`.
type: string
maxLength: 1500
example: $email
value:
nullable: true
description: The value of the attribute.
type: string
example: [email protected]
updated_at:
nullable: false
description: The time when the attribute was last updated.
type: integer
format: int64
example: 1658399423658
additionalProperties: false
CustomerAttributeCustomName:
type: string
maxLength: 40
pattern: ^[a-zA-Z][a-zA-Z0-9_-]*$
example: opt_into_marketing
CustomerAttributeReservedName:
type: string
enum:
- $ad
- $adGroup
- $adjustId
- $airbridgeDeviceId
- $airshipChannelId
- $amazonAdId
- $amplitudeDeviceId
- $amplitudeUserId
- $appleRefundHandlingPreference
- $appleAdsAdGroupId
- $appleAdsCampaignId
- $appleAdsKeywordId
- $apnsTokens
- $appsflyerId
- $appsflyerSharingFilter
- $attConsentStatus
- $branchId
- $brazeAliasLabel
- $brazeAliasName
- $campaign
- $clevertapId
- $creative
- $customerioId
- $displayName
- $email
- $fbAnonId
- $fcmTokens
- $firebaseAppInstanceId
- $gpsAdId
- $idfa
- $idfv
- $ip
- $iterableCampaignId
- $iterableTemplateId
- $iterableUserId
- $keyword
- $kochavaDeviceId
- $mediaSource
- $mixpanelDistinctId
- $mparticleId
- $onesignalId
- $onesignalUserId
- $phoneNumber
- $posthogUserId
- $telemetryDeckUserId
- $telemetryDeckAppId
- telemetry_deck_user_id
- telemetry_deck_app_id
- $segmentId
- $solarEngineDistinctId
- $solarEngineAccountId
- $solarEngineVisitorId
- $tenjinId
- $deviceVersion
example: $email
CustomerEntitlement:
type: object
required:
- entitlement_id
- expires_at
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- customer.active_entitlement
type: string
entitlement_id:
nullable: false
description: ID of the entitlement granted to the customer
minLength: 1
maxLength: 255
type: string
example: entla1b2c3d4e5
expires_at:
nullable: true
description: >-
The date after which the access to the entitlement expires in ms
since epoch
type: integer
format: int64
example: 1658399423658
additionalProperties: false
DeletedObject:
type: object
required:
- object
- id
- deleted_at
properties:
object:
description: The type of the deleted object
enum:
- app
- customer
- entitlement
- experiment
- offering
- package
- paywall
- product
- virtual_currency
- webhook_integration
type: string
id:
description: The ID of the deleted object
nullable: false
type: string
deleted_at:
nullable: false
type: integer
format: int64
description: The date when the object was deleted in ms since epoch
example: 1658399423658
additionalProperties: false
Duration:
type: string
description: >-
The duration of the product subscription. This field is only supported
for the test store and it is ignored for other stores.
nullable: false
example: P1W
enum:
- P1W
- P1M
- P2M
- P3M
- P6M
- P1Y
EligibilityCriteria:
type: string
nullable: false
enum:
- all
- google_sdk_lt_6
- google_sdk_ge_6
Entitlement:
type: object
required:
- project_id
- id
- lookup_key
- display_name
- state
- created_at
- object
properties:
state:
description: Whether the entitlement is active or inactive (archived).
nullable: false
type: string
enum:
- active
- inactive
example: active
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- entitlement
type: string
project_id:
nullable: false
description: ID of the project to which the entitlement belongs
minLength: 1
maxLength: 20
type: string
example: proj1ab2c3d4
id:
description: The id of the entitlement
nullable: false
type: string
minLength: 1
maxLength: 255
example: entla1b2c3d4e5
lookup_key:
description: A custom identifier of the entitlement
nullable: false
type: string
minLength: 1
maxLength: 200
example: premium
display_name:
description: The display name of the entitlement
nullable: false
type: string
minLength: 1
maxLength: 1500
example: Premium
created_at:
nullable: false
type: integer
format: int64
description: The date when the entitlement was created in ms since epoch
example: 1658399423658
products:
description: List of products attached to the entitlement
nullable: true
required:
- items
- next_page
- object
- url
title: ProductsList
type: object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Product'
type: array
next_page:
description: >-
URL to access the next page of the Entitlement's products. If
not present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products
additionalProperties: false
EntityReferencesArchivedEntitiesError:
description: >-
Error returned when attempting to make an entity active, but that entity
references other entities that are currently inactive (archived). The
`referenced_object_ids` field lists the IDs of the inactive entities
that must be made active first.
allOf:
- $ref: '#/components/schemas/Error'
- type: object
required:
- referenced_object_ids
properties:
type:
type: string
enum:
- entity_references_archived_entities
referenced_object_ids:
description: >-
The IDs of the archived (inactive) entities that need to be made
active before this operation can succeed.
type: array
items:
type: string
example:
- prodabcd1234
- prodwxyz5678
Environment:
type: string
description: The store environment
example: production
nullable: false
enum:
- production
- sandbox
Error:
type: object
required:
- type
- message
- retryable
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- error
type: string
example: error
type:
description: The error type
type: string
nullable: false
enum:
- parameter_error
- resource_already_exists
- resource_missing
- idempotency_error
- rate_limit_error
- authentication_error
- authorization_error
- store_error
- server_error
- resource_locked_error
- unprocessable_entity_error
- invalid_request
- entity_references_archived_entities
example: parameter_error
param:
description: >-
If the error is parameter-specific, the parameter related to the
error
type: string
nullable: true
example: customer_id
doc_url:
description: A URL to more information about the error reported
type: string
nullable: false
example: https://errors.rev.cat/parameter-error
message:
type: string
description: A message describing the reason of the error
nullable: false
example: id shouldn't be longer than 1,500 characters
retryable:
description: Indicates if the error is retryable or not
type: boolean
nullable: false
example: false
backoff_ms:
description: >-
The ms the client should wait before retrying the request. Only
present for retryable errors.
type: integer
nullable: true
example: null
referenced_object_ids:
description: >-
The IDs of related objects relevant to the error, such as the
archived entities that need to be made active before the operation
can succeed.
type: array
items:
type: string
example:
- prodabcd1234
- prodwxyz5678
additionalProperties: false
ExperimentEnrollment:
type: object
required:
- id
- name
- variant
- object
nullable: true
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- experiment_enrollment
type: string
id:
type: string
maxLength: 1500
name:
type: string
maxLength: 1500
variant:
nullable: false
description: >-
The variant of the Experiment that the Customer was or is assigned
to, where 'a' represents the Control, and 'b' represents the
Treatment.
minLength: 1
maxLength: 1
type: string
example: a
additionalProperties: false
Invoice:
type: object
required:
- id
- total_amount
- line_items
- issued_at
- paid_at
- invoice_url
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- invoice
type: string
id:
description: The id of the invoice
nullable: false
type: string
minLength: 1
maxLength: 255
example: rcbin1a2b3c4d5e
total_amount:
$ref: '#/components/schemas/MonetaryAmount'
line_items:
description: >-
List of line items that are part of the invoice. Each line item
represents a product that was purchased.
title: InvoiceLiteItemList
nullable: false
items:
$ref: '#/components/schemas/InvoiceLineItem'
type: array
issued_at:
description: The date when the invoiced was issued in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
paid_at:
description: The date when the invoiced was paid in ms since epoch
nullable: true
type: integer
format: int64
example: 1658399423658
invoice_url:
description: URL to download the invoice pdf
nullable: true
type: string
example: >-
https://api.revenuecat.com/v2/projects/proj1ab2c3d4/customers/cust1ab2c3d4/invoices/inv1ab2c3d4/file
additionalProperties: false
InvoiceLineItem:
type: object
required:
- product_identifier
- product_display_name
- product_duration
- quantity
- unit_amount
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- invoice.line_item
type: string
product_identifier:
description: The product identifier
nullable: false
type: string
minLength: 1
maxLength: 255
example: rc_1w_199
product_display_name:
description: The display name of the product
nullable: true
type: string
minLength: 1
maxLength: 1500
example: Premium Monthly 2023
product_duration:
type: string
pattern: >-
^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$
nullable: true
description: The duration of the subscription in ISO-8601 standard
example: P1M
quantity:
description: Total purchased items
nullable: false
type: integer
example: 1
unit_amount:
$ref: '#/components/schemas/MonetaryAmount'
additionalProperties: false
ListApps:
type: object
required:
- items
- next_page
- object
- url
title: AppList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/App'
type: array
next_page:
description: >-
URL to access the next page of the project's apps. If not present /
null, there is no next page
type: string
nullable: true
example: /v2/projects/projec1a2b3c4d/apps?starting_after=app1a2b3c4d
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/projec1a2b3c4d/apps
additionalProperties: false
ListAuditLogs:
type: object
required:
- items
- next_page
- object
- url
title: AuditLogList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each audit log.
items:
$ref: '#/components/schemas/AuditLog'
type: array
next_page:
description: >-
URL to access the next page of the project's audit logs. If not
present / null, there is no next page.
type: string
nullable: true
example: /v2/projects/proj1ab2c3d4/audit_logs?starting_after=log1ab2c3d4e5
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/audit_logs
additionalProperties: false
ListCollaborators:
type: object
required:
- items
- next_page
- object
- url
title: CollaboratorList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Collaborator'
type: array
next_page:
description: >-
URL to access the next page of the project's collaborators. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/collaborators?starting_after=collab1a2b3c4d5
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/collaborators
additionalProperties: false
ListCustomerActiveEntitlements:
type: object
required:
- items
- next_page
- object
- url
title: CustomerActiveEntitlementList
description: >-
List of the entitlements currently active for the customer. This
property is only available in the "Get a customer" endpoint.
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/CustomerEntitlement'
type: array
next_page:
description: >-
URL to access the next page of the customer's active entitlements.
If not present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements
additionalProperties: false
ListCustomerAliases:
type: object
required:
- items
- next_page
- object
- url
title: CustomerAliasList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/CustomerAlias'
type: array
next_page:
description: >-
URL to access the next page of the customer's aliases. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/aliases?starting_after=9fjeja8fjed
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/aliases
additionalProperties: false
ListCustomerAttributes:
type: object
required:
- items
- next_page
- object
- url
title: CustomerAttributeList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/CustomerAttribute'
type: array
next_page:
description: >-
URL to access the next page of the customer's aliases. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes
additionalProperties: false
ListCustomerInvoices:
type: object
required:
- items
- next_page
- object
- url
title: CustomerInvoicesList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Invoice'
type: array
next_page:
description: >-
URL to access the next page of the customer's invoice. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/invoices?starting_after=rcbin1a2b3c4d5e
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/invoices
additionalProperties: false
ListCustomers:
type: object
required:
- items
- next_page
- object
- url
title: CustomerList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Customer'
type: array
next_page:
description: >-
URL to access the next page of the project's customers. If not
present / null, there is no next page
type: string
nullable: true
example: /v2/projects/projec1a2b3c4d/customers?starting_after=223xx1100
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/projec1a2b3c4d/customers
additionalProperties: false
ListEntitlements:
type: object
required:
- items
- next_page
- object
- url
title: EntitlementList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Entitlement'
type: array
next_page:
description: >-
URL to access the next page of the project's entitlements. If not
present / null, there is no next page
type: string
nullable: true
example: /v2/projects/proj1ab2c3d4/entitlements?starting_after=entlab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/entitlements
additionalProperties: false
ListOfferings:
type: object
required:
- items
- next_page
- object
- url
title: OfferingList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Offering'
type: array
next_page:
description: >-
URL to access the next page of the project's offerings. If not
present / null, there is no next page
type: string
nullable: true
example: /v2/projects/proj1ab2c3d4/offerings?starting_after=ofrngeab21da
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/offerings
additionalProperties: false
ListPackages:
type: object
required:
- items
- next_page
- object
- url
title: PackageList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Package'
type: array
next_page:
description: >-
URL to access the next page of the project's packages. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages
additionalProperties: false
ListPaywalls:
type: object
required:
- items
- next_page
- object
- url
title: PaywallList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Paywall'
type: array
next_page:
description: >-
URL to access the next page of the project's paywalls. If not
present / null, there is no next page
type: string
nullable: true
example: /v2/projects/proj1ab2c3d4/paywalls?starting_after=pwXXXXXXXXXXXXXX
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/paywalls
additionalProperties: false
ListProducts:
type: object
required:
- items
- next_page
- object
- url
title: ProductList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Product'
type: array
next_page:
description: >-
URL to access the next page of the project's products. If not
present / null, there is no next page
type: string
nullable: true
example: /v2/projects/proj1ab2c3d4/products?starting_after=prodab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/products
additionalProperties: false
ListProjects:
type: object
required:
- items
- next_page
- object
- url
title: ProjectList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Project'
type: array
next_page:
description: >-
URL to access the next page of the projects. If not present / null,
there is no next page
type: string
nullable: true
example: /v2/projects?starting_after=projab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects
additionalProperties: false
ListPublicApiKeys:
type: object
required:
- items
- next_page
- object
- url
title: PublicApiKeyList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/PublicApiKey'
type: array
next_page:
description: >-
URL to access the next page of the app's public API keys. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/projec1a2b3c4d/apps/app1a2b3c4d/public_api_keys?starting_after=pub1a2b3c4d
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/projec1a2b3c4d/apps/app1a2b3c4d/public_api_keys
additionalProperties: false
ListPurchases:
type: object
required:
- items
- next_page
- object
- url
title: PurchaseList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Purchase'
type: array
next_page:
description: >-
URL to access the next page of the customer's purchases. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/purchases?starting_after=purc1a2b3c4d5e
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/purchases
additionalProperties: false
ListSubscriptionTransaction:
type: object
required:
- items
- next_page
- object
- url
title: SubscriptionTransactionList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/SubscriptionTransaction'
type: array
next_page:
description: >-
URL to access the next page of the projects. If not present / null,
there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj123/subscriptions/sub123/transactions?starting_after=GPA.0000-0000-0000-00000
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj123/subscriptions/sub123/transactions
additionalProperties: false
ListSubscriptions:
type: object
required:
- items
- next_page
- object
- url
title: SubscriptionList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Subscription'
type: array
next_page:
description: >-
URL to access the next page of the customer's subscriptions. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/subscriptions?starting_after=sub1a2b3c4d
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/subscriptions
additionalProperties: false
ListVirtualCurrencies:
type: object
required:
- items
- next_page
- object
- url
title: VirtualCurrencyList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/VirtualCurrency'
type: array
next_page:
description: >-
URL to access the next page of the project's virtual currencies. If
not present / null, there is no next page
type: string
nullable: true
example: /v2/projects/proj1ab2c3d4/virtual_currencies?starting_after=GLD
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/virtual_currencies
additionalProperties: false
ListVirtualCurrenciesBalances:
type: object
title: VirtualCurrenciesBalancesList
required:
- items
- next_page
- object
- url
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/VirtualCurrencyBalance'
type: array
next_page:
description: >-
URL to access the next page of the customer's balances. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/virtual_currencies?starting_after=9fjeja8fjed
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/virtual_currencies
additionalProperties: false
ListWebhookIntegrations:
required:
- items
- object
- url
title: WebhookIntegrationList
type: object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the
same value.
enum:
- list
type: string
items:
description: Webhook integrations configured for the project.
type: array
items:
$ref: '#/components/schemas/WebhookIntegration'
next_page:
description: >-
URL to access the next page of webhook integrations. If not present
/ null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/integrations/webhooks?starting_after=whintgr1a2b3c4d
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/integrations/webhooks
additionalProperties: false
MacAppStoreApp:
type: object
properties:
mac_app_store:
description: Legacy Mac App Store type details
type: object
required:
- bundle_id
nullable: false
properties:
bundle_id:
description: The bundle ID of the app
type: string
nullable: false
minLength: 1
maxLength: 256
MacAppStoreAppCreate:
type: object
required:
- name
- type
- mac_app_store
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
nullable: false
type:
description: >
The platform of the app.
Mac App Store is disabled by default. See [Legacy Mac
Apps](https://www.revenuecat.com/docs/legacy-mac-apps) for more
details.
type: string
enum:
- mac_app_store
nullable: false
mac_app_store:
description: >-
Mac App Store type details. Should only be used when type is
mac_app_store.
type: object
required:
- bundle_id
nullable: false
properties:
bundle_id:
description: The bundle ID of the app
type: string
minLength: 1
maxLength: 256
nullable: false
shared_secret:
description: The shared secret of the app
type: string
minLength: 32
maxLength: 32
nullable: false
additionalProperties: false
MonetaryAmount:
type: object
required:
- currency
- gross
- tax
- proceeds
properties:
currency:
$ref: '#/components/schemas/Currency'
gross:
description: Total revenue generated (excluding taxes and commission)
nullable: false
type: number
example: 9.99
commission:
description: >-
Store commission or payment processor fees deducted from gross
revenue (if any)
nullable: false
type: number
example: 2.99
tax:
description: Estimated taxes deducted from gross revenue
nullable: false
type: number
example: 0.75
proceeds:
description: Net revenue after store commission / fees and taxes
nullable: false
type: number
example: 6.25
Offering:
type: object
required:
- id
- lookup_key
- display_name
- is_current
- state
- created_at
- project_id
- object
properties:
state:
description: >-
Whether the offering is active or inactive (archived). Inactive
offerings are not returned by the SDK.
nullable: false
type: string
enum:
- active
- inactive
example: active
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- offering
type: string
id:
description: The id of the offering
nullable: false
type: string
minLength: 1
maxLength: 255
example: ofrnge1a2b3c4d5
lookup_key:
description: A custom identifier of the entitlement
nullable: false
type: string
minLength: 1
maxLength: 200
example: default
display_name:
description: The display name of the offering
nullable: false
type: string
minLength: 1
maxLength: 1500
example: The standard set of packages
is_current:
description: Indicates if the offering is the current offering
nullable: false
type: boolean
example: true
created_at:
description: The date the offering was created at in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
project_id:
description: ID of the project to which the offering belongs
nullable: false
minLength: 1
maxLength: 20
type: string
example: proj1ab2c3d4
metadata:
description: Custom metadata of the offering
nullable: true
$ref: '#/components/schemas/OfferingMetadata'
packages:
nullable: true
required:
- items
- next_page
- object
- url
title: PackageList
type: object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Package'
type: array
next_page:
description: >-
URL to access the next page of the Offering's packages. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages
additionalProperties: false
OfferingMetadata:
description: Custom metadata of the offering
type: object
nullable: true
additionalProperties: true
example:
color: blue
call_to_action: Subscribe Now!
OneTimeProduct:
type: object
required:
- is_consumable
nullable: true
properties:
is_consumable:
type: boolean
nullable: true
description: Indicates whether the product is consumable or not.
example: true
OverviewMetric:
type: object
required:
- id
- name
- description
- unit
- period
- value
- last_updated_at
- last_updated_at_iso8601
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- overview_metric
type: string
id:
description: Id of the overview metric
nullable: false
type: string
minLength: 1
maxLength: 255
example: active_trials
name:
description: Display name of the overview metric
nullable: false
type: string
example: Active Trials
description:
description: Description of the overview metric
nullable: false
type: string
unit:
description: Unit of the overview metric
nullable: false
type: string
example: $
period:
description: >-
Length of time during which metric data is collected in ISO 8601
format. Zero period means metric data was collected now
nullable: false
type: string
enum:
- P0D
- P28D
example: P0D
value:
description: Value of the overview metric
nullable: false
type: number
example: 34765
last_updated_at:
description: Last time the overview metric was updated in ms since epoch
nullable: true
type: integer
format: int64
example: 1658399423658
last_updated_at_iso8601:
description: >-
Last time the overview metric was updated datetime in ISO 8601
format
nullable: true
type: string
format: date-time
example: '2022-10-13 09:45:00.123000+00:00'
additionalProperties: false
OverviewMetrics:
type: object
required:
- metrics
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- overview_metrics
type: string
metrics:
description: Details about each overview metric.
items:
$ref: '#/components/schemas/OverviewMetric'
type: array
additionalProperties: false
Ownership:
type: string
example: purchased
enum:
- purchased
- family_shared
Package:
type: object
required:
- id
- lookup_key
- display_name
- position
- created_at
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- package
type: string
id:
description: The id of the package
nullable: false
type: string
minLength: 1
maxLength: 255
example: pkge1a2b3c4d5
lookup_key:
description: The lookup_key of the package
nullable: false
example: monthly
type: string
minLength: 1
maxLength: 200
display_name:
description: The display name of the package
nullable: false
type: string
minLength: 1
maxLength: 1500
example: Monthly discounted with 3-day trial
position:
description: The position of the package within the offering
nullable: true
type: integer
example: 1
created_at:
description: The date the package was created at in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
products:
nullable: true
required:
- items
- next_page
- object
- url
title: ProductList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Product association
items:
$ref: '#/components/schemas/PackageProductAssociation'
type: array
next_page:
description: >-
URL to access the next page of the project's products. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products
additionalProperties: false
PackageProductAssociation:
type: object
required:
- product
- eligibility_criteria
properties:
product:
$ref: '#/components/schemas/Product'
nullable: false
eligibility_criteria:
$ref: '#/components/schemas/EligibilityCriteria'
nullable: false
PackageProductIDAssociation:
type: object
required:
- product_id
- eligibility_criteria
properties:
product_id:
type: string
maxLength: 255
minLength: 1
nullable: false
eligibility_criteria:
$ref: '#/components/schemas/EligibilityCriteria'
nullable: false
PaddleApp:
type: object
properties:
paddle:
description: Paddle Billing type details
type: object
nullable: false
properties:
paddle_is_sandbox:
description: Whether the app is tied to the sandbox environment.
nullable: false
type: boolean
example: true
paddle_api_key:
description: Paddle Server-side API key provided on the Paddle dashboard.
type: string
nullable: true
minLength: 50
maxLength: 70
PaddleAppCreate:
type: object
required:
- name
- type
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
nullable: false
type:
description: >
The platform of the app.
Mac App Store is disabled by default. See [Legacy Mac
Apps](https://www.revenuecat.com/docs/legacy-mac-apps) for more
details.
type: string
enum:
- paddle
nullable: false
paddle:
description: Paddle Billing details. Should only be used when type is paddle.
type: object
nullable: true
properties:
paddle_api_key:
description: Paddle Server-side API key provided on the Paddle dashboard.
type: string
nullable: true
minLength: 50
maxLength: 70
paddle_is_sandbox:
description: |
[Deprecated] Whether the app is tied to the sandbox environment.
This field is deprecated and will be removed in the future.
The environment is determined by the `paddle_api_key` format.
nullable: true
type: boolean
example: true
additionalProperties: false
Paywall:
type: object
required:
- id
- name
- offering_id
- created_at
- published_at
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- paywall
type: string
id:
description: The id of the paywall
nullable: false
type: string
minLength: 1
maxLength: 255
example: pw123456789abcdef
name:
description: The name of the paywall
nullable: true
type: string
minLength: 1
maxLength: 255
example: My Awesome Paywall
offering_id:
description: The ID of the offering the paywall is for.
nullable: false
type: string
minLength: 1
maxLength: 255
example: ofrng123456789a
created_at:
description: The date the paywall was created at in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
published_at:
description: The date the paywall was published at in ms since epoch
nullable: true
type: integer
format: int64
example: 1658399423958
offering:
description: The offering associated with this paywall. Expandable.
nullable: true
$ref: '#/components/schemas/Offering'
components:
description: >-
Published and draft components configurations for this paywall.
Expandable.
nullable: true
$ref: '#/components/schemas/PaywallComponents'
additionalProperties: false
PaywallComponents:
type: object
required:
- published
- draft
properties:
published:
description: >-
The currently published version of the paywall. Null if the paywall
has never been published.
nullable: true
$ref: '#/components/schemas/PaywallComponentsVersion'
draft:
description: >-
The draft version of the paywall if there are unpublished changes.
Null if there are no unpublished changes.
nullable: true
$ref: '#/components/schemas/PaywallComponentsVersion'
additionalProperties: false
PaywallComponentsVersion:
description: >-
A specific version (published or draft) of a paywall's components
configuration.
type: object
nullable: true
required:
- revision
- components_config
- default_locale
- components_localizations
properties:
revision:
description: The revision number of this version.
type: integer
nullable: true
example: 1
components_config:
description: >-
The raw, schemaless JSON payload for paywall components
configuration.
type: object
nullable: true
additionalProperties: true
example:
base:
stack:
id: l7Ylx2UZeA
type: stack
components:
- id: LFVZUCf9yW
type: text
text_lid: OBUxLwsvXb
sticky_footer:
id: UJJRRPzRuz
type: footer
default_locale:
description: The default locale for the paywall.
type: string
nullable: true
example: en_US
components_localizations:
description: Localized values keyed by locale code.
type: object
additionalProperties:
type: object
additionalProperties: true
example:
en_US:
title: Premium
fonts:
description: >-
Font objects used by the published paywall components. Only present
on published versions.
type: object
nullable: true
additionalProperties: true
example:
CustomFont:
src: https://example.com/font.ttf
additionalProperties: false
PlayStoreApp:
type: object
properties:
play_store:
description: Play Store type details
type: object
required:
- package_name
nullable: false
properties:
package_name:
description: The package name of the app
type: string
nullable: false
minLength: 1
maxLength: 256
PlayStoreAppCreate:
type: object
required:
- name
- type
- play_store
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
nullable: false
type:
description: >
The platform of the app.
Mac App Store is disabled by default. See [Legacy Mac
Apps](https://www.revenuecat.com/docs/legacy-mac-apps) for more
details.
type: string
enum:
- play_store
nullable: false
play_store:
description: >-
Play Store type details. Should only be used when type is
play_store.
type: object
required:
- package_name
nullable: false
properties:
package_name:
description: The package name of the app
type: string
minLength: 1
maxLength: 256
nullable: false
additionalProperties: false
Product:
type: object
required:
- id
- store_identifier
- type
- state
- created_at
- app_id
- object
- display_name
properties:
state:
description: Whether the product is active or inactive (archived).
nullable: false
type: string
enum:
- active
- inactive
example: active
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- product
type: string
id:
description: The id of the product
nullable: false
type: string
minLength: 1
maxLength: 255
example: prod1a2b3c4d5e
store_identifier:
description: The store product identifier
nullable: false
type: string
minLength: 1
maxLength: 255
example: rc_1w_199
type:
description: The product type
nullable: false
$ref: '#/components/schemas/ProductType'
subscription:
description: The subscription product object
nullable: true
$ref: '#/components/schemas/SubscriptionProduct'
one_time:
description: The one time product object
nullable: true
$ref: '#/components/schemas/OneTimeProduct'
created_at:
description: The date when the product was created in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
app_id:
description: The id of the app
nullable: false
type: string
minLength: 1
maxLength: 255
example: app1a2b3c4
app:
description: The app associated with the product
nullable: true
$ref: '#/components/schemas/App'
display_name:
description: The display name of the product
nullable: true
type: string
minLength: 1
maxLength: 1500
example: Premium Monthly 2023
additionalProperties: false
ProductSubscriptionInput:
type: object
description: >-
Subscription parameters for product creation. Only supported for
simulated store products.
nullable: true
required:
- duration
properties:
duration:
$ref: '#/components/schemas/Duration'
description: >-
The duration of the subscription. Only supported for test store
products.
additionalProperties: false
ProductType:
type: string
nullable: false
enum:
- subscription
- one_time
- consumable
- non_consumable
- non_renewing_subscription
ProductsFromEntitlement:
type: object
required:
- items
- next_page
- object
- url
title: ProductsFromEntitlementList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Product'
type: array
next_page:
description: >-
URL to access the next page of the entitlement's products. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/entitlements/entla1b2c3d4e5/products?starting_after=prod1a2b3c4d5
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/entitlements/entla1b2c3d4e5/products
additionalProperties: false
ProductsFromPackage:
type: object
required:
- items
- next_page
- object
- url
title: ProductsFromPackageList
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/PackageProductAssociation'
type: array
next_page:
description: >-
URL to access the next page of the entitlement's products. If not
present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/packages/pkge1a2b3c4d5/products?starting_after=prod1a2b3c4d5
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/packages/pkge1a2b3c4d5/products
additionalProperties: false
Project:
type: object
required:
- id
- name
- created_at
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- project
type: string
id:
description: The id of the project
nullable: false
type: string
minLength: 1
maxLength: 255
example: proj1ab2c3d4
name:
description: The name of the project
nullable: false
type: string
minLength: 1
maxLength: 256
example: MagicWeather
created_at:
description: The date when the project was created in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
icon_url:
description: The URL of the project's icon (small size)
nullable: true
type: string
example: https://www.appatar.io/abc123/small
icon_url_large:
description: The URL of the project's icon (large size)
nullable: true
type: string
example: https://www.appatar.io/abc123/large
additionalProperties: false
ProjectCreate:
allOf:
- type: object
required:
- name
properties:
name:
description: The name of the project
type: string
minLength: 1
maxLength: 255
nullable: false
PublicApiKey:
type: object
required:
- id
- key
- app_id
- created_at
- environment
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- public_api_key
type: string
id:
description: The ID of the public API key
nullable: false
type: string
minLength: 1
maxLength: 255
example: apikey12345
key:
description: The value of the public API key
nullable: false
type: string
minLength: 1
maxLength: 255
example: goog_1ab2c3d4
environment:
description: The environment the public API key is for
nullable: false
enum:
- production
- sandbox
type: string
app_id:
description: The ID of the app the public API key is for
nullable: false
type: string
minLength: 1
maxLength: 255
example: app1a2b3c4
created_at:
description: The date when the public API key was created in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
additionalProperties: false
Purchase:
type: object
required:
- id
- customer_id
- original_customer_id
- product_id
- purchased_at
- revenue_in_usd
- quantity
- status
- presented_offering_id
- entitlements
- environment
- store
- store_purchase_identifier
- ownership
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- purchase
type: string
id:
description: The id of the purchase
nullable: false
type: string
minLength: 1
maxLength: 255
example: purch1a2b3c4d5e
customer_id:
description: The id of the customer
nullable: false
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
original_customer_id:
description: The ID of the original customer
nullable: false
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
product_id:
description: The ID of the product that was purchased
nullable: false
minLength: 1
maxLength: 255
type: string
example: prod1a2b3c4d5e
purchased_at:
description: The date when the purchase was made in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
revenue_in_usd:
description: The revenue generated by the purchase in USD
nullable: false
oneOf:
- $ref: '#/components/schemas/MonetaryAmount'
quantity:
description: The quantity of the product purchased in one transaction
type: integer
example: 1
status:
description: The status of a purchase
nullable: false
type: string
enum:
- owned
- refunded
example: owned
presented_offering_id:
description: The ID of the offering the customer saw when they did the purchase
nullable: true
type: string
minLength: 1
maxLength: 200
example: ofrnge1a2b3c4d5
entitlements:
required:
- items
- next_page
- object
- url
title: EntitlementList
type: object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Entitlement'
type: array
next_page:
description: >-
URL to access the next page of the customer's entitlements. If
not present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/purchases/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: /v2/projects/proj1ab2c3d4/purchases/sub1a2b3c4d5e/entitlements
environment:
$ref: '#/components/schemas/Environment'
store:
description: Store the purchase belongs to
nullable: false
type: string
enum:
- amazon
- app_store
- mac_app_store
- play_store
- promotional
- stripe
- rc_billing
example: amazon
store_purchase_identifier:
description: The store purchase identifier
nullable: false
type: string
minLength: 1
maxLength: 255
example: 12345678
ownership:
description: Ownership of the purchase
nullable: false
oneOf:
- $ref: '#/components/schemas/Ownership'
country:
description: Billing country in ISO alpha 2 code
nullable: true
$ref: '#/components/schemas/Country'
additionalProperties: false
RCBillingApp:
type: object
properties:
rc_billing:
description: Revenue Cat Billing Store type details
type: object
required:
- seller_company_name
- default_currency
nullable: false
properties:
stripe_account_id:
description: Stripe account connected to your RevenueCat account.
type: string
nullable: true
minLength: 1
maxLength: 256
seller_company_name:
description: >-
The company name. This field is deprecated. Please, use
`app_name` instead.
type: string
nullable: false
minLength: 1
maxLength: 256
deprecated: true
app_name:
description: Shown in checkout, emails, and receipts sent to customers.
type: string
nullable: false
minLength: 1
maxLength: 256
seller_company_support_email:
description: >-
The company support email. This field is deprecated. Please, use
`support_email` instead.
type: string
nullable: true
minLength: 1
maxLength: 320
deprecated: true
support_email:
description: >-
Used as the `reply to` address in all emails sent to customers,
to allow them to receive support.
type: string
nullable: true
minLength: 1
maxLength: 320
default_currency:
description: The default currency to be used for the app.
$ref: '#/components/schemas/RCBillingCurrency'
RCBillingAppCreate:
type: object
required:
- name
- type
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
nullable: false
type:
description: >
The platform of the app.
Mac App Store is disabled by default. See [Legacy Mac
Apps](https://www.revenuecat.com/docs/legacy-mac-apps) for more
details.
type: string
enum:
- rc_billing
nullable: false
rc_billing:
description: Revenue Cat Billing Store type details
type: object
required:
- app_name
nullable: true
properties:
stripe_account_id:
description: >-
It needs to be connected to your RevenueCat account. It can be
omitted if you only have a single Stripe account connected to
your RevenueCat account.
type: string
nullable: true
minLength: 1
maxLength: 256
app_name:
description: Shown in checkout, emails, and receipts sent to customers.
type: string
nullable: false
minLength: 1
maxLength: 256
support_email:
description: >-
Used as the `reply to` address in all emails sent to customers,
to allow them to receive support. If you leave this field
blank, your RevenueCat account email address will be used.
type: string
nullable: true
minLength: 1
maxLength: 320
default_currency:
$ref: '#/components/schemas/RCBillingCurrency'
additionalProperties: false
RCBillingCurrency:
type: string
description: ISO 4217 currency code
nullable: false
example: USD
enum:
- USD
- EUR
- JPY
- GBP
- AUD
- CAD
- BRL
- KRW
- CNY
- MXN
- SEK
- PLN
- MYR
- PHP
- CHF
- SAR
- TWD
- NOK
- DKK
- THB
- NZD
- SGD
- HKD
- CZK
- AED
- CLP
- COP
- CRC
- GEL
- HUF
- IDR
- ILS
- IQD
- JOD
- KES
- KZT
- MAD
- PEN
- QAR
- RON
- RSD
- TZS
- VND
- ZAR
- TRY
- UAH
RokuApp:
type: object
properties:
roku:
description: Roku Channel Store type details
type: object
nullable: false
properties:
roku_channel_id:
description: Channel ID provided on the Roku Channel page.
type: string
nullable: true
minLength: 6
maxLength: 6
roku_channel_name:
description: Channel name that is displayed on the Roku Channel page.
type: string
nullable: true
minLength: 1
maxLength: 30
RokuAppCreate:
type: object
required:
- name
- type
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
nullable: false
type:
description: >
The platform of the app.
Mac App Store is disabled by default. See [Legacy Mac
Apps](https://www.revenuecat.com/docs/legacy-mac-apps) for more
details.
type: string
enum:
- roku
nullable: false
roku:
description: Roku Channel Store details. Should only be used when type is roku.
type: object
nullable: true
properties:
roku_api_key:
description: Roku Pay API key provided on the Roku Pay Web Services page.
type: string
nullable: true
minLength: 33
maxLength: 33
roku_channel_id:
description: Channel ID provided on the Roku Channel page.
type: string
nullable: true
minLength: 6
maxLength: 6
roku_channel_name:
description: Channel name that is displayed on the Roku Channel page.
type: string
nullable: true
minLength: 1
maxLength: 30
additionalProperties: false
StoreKitConfigFile:
type: object
description: Contents of a generated StoreKit config file for an app
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- store_kit_config_file
type: string
contents:
type: object
description: Contents of the StoreKit config file
additionalProperties: true
required:
- object
- contents
additionalProperties: false
StoreProduct:
type: object
required:
- id
- product_identifier
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- store_product
type: string
id:
description: >-
The unique identifier of the product in the store (e.g., App Store
Connect product ID)
nullable: false
type: string
minLength: 1
maxLength: 255
example: 1234567890
name:
description: The name of the store product
nullable: true
type: string
minLength: 1
maxLength: 255
example: Premium Monthly Subscription
product_identifier:
description: The product identifier used in the store
nullable: false
type: string
minLength: 1
maxLength: 255
example: com.example.premium_monthly
additionalProperties: false
StripeApp:
type: object
properties:
stripe:
description: Stripe type details
type: object
nullable: false
properties:
stripe_account_id:
description: Stripe account connected to your RevenueCat account.
type: string
nullable: true
minLength: 1
maxLength: 256
StripeAppCreate:
type: object
required:
- name
- type
properties:
name:
description: The name of the app
type: string
minLength: 1
maxLength: 255
nullable: false
type:
description: >
The platform of the app.
Mac App Store is disabled by default. See [Legacy Mac
Apps](https://www.revenuecat.com/docs/legacy-mac-apps) for more
details.
type: string
enum:
- stripe
nullable: false
stripe:
description: Stripe type details. Should only be used when type is stripe.
type: object
nullable: false
properties:
stripe_account_id:
description: >-
It needs to be connected to your RevenueCat account. It can be
omitted if you only have a single Stripe account connected to
your RevenueCat account.
type: string
minLength: 1
maxLength: 256
nullable: true
additionalProperties: false
Subscription:
type: object
required:
- id
- customer_id
- original_customer_id
- product_id
- starts_at
- current_period_starts_at
- current_period_ends_at
- ends_at
- gives_access
- pending_payment
- auto_renewal_status
- status
- total_revenue_in_usd
- presented_offering_id
- entitlements
- environment
- store
- store_subscription_identifier
- ownership
- management_url
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- subscription
type: string
id:
description: The ID of the subscription (generated by RevenueCat)
nullable: false
type: string
minLength: 1
maxLength: 255
example: sub1ab2c3d4e5
customer_id:
description: The ID of the customer
nullable: false
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
original_customer_id:
description: >-
The ID of the original customer. Relevant for subscriptions that
were transferred from one customer to another
nullable: false
type: string
minLength: 1
maxLength: 1500
example: 19b8de26-77c1-49f1-aa18-019a391603e2
product_id:
description: >-
The RevenueCat ID of the product that the customer is subscribed to.
Exists for all store types except for promotional.
nullable: true
minLength: 1
maxLength: 255
type: string
example: prod1a2b3c4d5e
starts_at:
description: The date when the subscription originally started in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
current_period_starts_at:
description: >-
The date when the subscription billing period started in ms since
epoch
nullable: false
type: integer
format: int64
example: 1658399423658
current_period_ends_at:
description: >-
The date when the subscription billing period is expected to end in
ms since epoch. Can be null if the subscription is paused until an
indefinite date.
nullable: true
type: integer
format: int64
example: 1658399423658
ends_at:
description: >-
The date when the latest subscription billing period is expected to
end in ms since epoch. It will only be different from
`current_period_ends_at` if `auto_renewal_status` is
`has_already_renewed`, in which case it indicates the end of the
next billing period. Can be null if the subscription is paused until
an indefinite date.
nullable: true
type: integer
format: int64
example: 1658399423658
gives_access:
description: >-
Determines whether the customer should currently be provided access
to the entitlements associated with the subscription
nullable: false
type: boolean
example: true
pending_payment:
description: >-
Determines whether there is a pending payment associated with the
subscription
nullable: false
type: boolean
example: true
auto_renewal_status:
description: >
The auto renewal status of a subscription.<br><br>Possible
values:<br>• `will_renew`: the subscription is currently set to
automatically renew<br>• `will_not_renew`: the subscription is
currently set to expire at the end of the period<br>•
`will_change_product`: the subscription is currently set to change
product at the end of the period (which might start a new
subscription)<br>• `will_pause`: the subscription is currently set
to pause at the end of the current period<br>•
`requires_price_increase_consent`: the subscription will expire at
the end of the current period unless the customer consents to the
price increase<br>• `has_already_renewed`: the customer has already
been charged for the upcoming renewal (so the renewal will take
place even if the customer opts out of auto-renewal before the end
of the period)
nullable: false
type: string
enum:
- will_renew
- will_not_renew
- will_change_product
- will_pause
- requires_price_increase_consent
- has_already_renewed
example: will_renew
status:
description: >
The status of a subscription. Please note that additional states
might be added in the future. To determine whether or not a
subscription currently provides access to any associated
entitlements, use the _gives_access_ field.<br><br>Possible
values:<br>• `trialing`: the subscription is in a free trial
period<br>• `active`: the subscription is active, in a paid
period<br>• `expired`: the subscription is expired and no longer
active<br>• `in_grace_period`: the subscription is past its regular
expiry date and experienced a billing issue, but is currently still
in an access-granting grace period<br>• `in_billing_retry`: the
subscription has experienced a billing issue. Billing is being
retried, access is suspended.-paused: the subscription is currently
paused and should not provide access.<br>• `unknown`: the
subscription is in an unknown state. Refer to the _gives_access_
field to determine whether or not to grant access.<br>•
`incomplete`: the subscription is in an incomplete state, maybe due
to incorrect billing details or because it's scheduled to start in
the future.
nullable: false
type: string
enum:
- trialing
- active
- expired
- in_grace_period
- in_billing_retry
- paused
- unknown
- incomplete
example: trialing
total_revenue_in_usd:
description: Total revenue generated by a subscription in USD
nullable: false
oneOf:
- $ref: '#/components/schemas/MonetaryAmount'
presented_offering_id:
description: >-
The ID of the offering the customer saw when purchasing the
subscription
nullable: true
type: string
minLength: 1
maxLength: 200
example: ofrnge1a2b3c4d5
entitlements:
required:
- items
- next_page
- object
- url
title: EntitlementList
type: object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value. Always has the value `list`.
enum:
- list
type: string
items:
description: Details about each object.
items:
$ref: '#/components/schemas/Entitlement'
type: array
next_page:
description: >-
URL to access the next page of the customer's entitlements. If
not present / null, there is no next page
type: string
nullable: true
example: >-
/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac
url:
description: The URL where this list can be accessed.
maxLength: 5000
type: string
example: >-
/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements
environment:
description: The store environment
nullable: false
oneOf:
- $ref: '#/components/schemas/Environment'
store:
description: Store the subscription belongs to
nullable: false
type: string
enum:
- amazon
- app_store
- mac_app_store
- play_store
- promotional
- stripe
- rc_billing
example: amazon
store_subscription_identifier:
description: >-
The subscription identifier as per the store (e.g, for Apple App
Store, the `transaction_id` of the latest transaction of the
subscription, or for Google Play Store, the Order ID of the last
renewal of the subscription)
nullable: false
type: string
minLength: 1
maxLength: 255
example: 12345678
ownership:
description: Ownership of the subscription
nullable: false
oneOf:
- $ref: '#/components/schemas/Ownership'
pending_changes:
description: >-
Indicates pending product changes. Present if the
`auto_renewal_status` is `will_change_product`.
nullable: true
type: object
properties:
product:
description: The product that will be active as of the next renewal
nullable: false
$ref: '#/components/schemas/Product'
country:
$ref: '#/components/schemas/Country'
description: Billing country in ISO alpha 2 code
nullable: true
management_url:
description: The URL to manage the subscription
nullable: true
type: string
example: https://apps.apple.com/account/subscriptions
additionalProperties: false
SubscriptionProduct:
type: object
required:
- duration
- grace_period_duration
- trial_duration
nullable: true
properties:
duration:
type: string
pattern: >-
^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$
nullable: true
description: The duration of the subscription in ISO-8601 standard
example: P1M
grace_period_duration:
type: string
pattern: >-
^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$
nullable: true
description: The duration of the subscription's grace period in ISO-8601 standard
example: P3D
trial_duration:
type: string
pattern: >-
^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$
nullable: true
description: The duration of the subscription's trial period in ISO-8601 standard
example: P1W
SubscriptionTransaction:
type: object
required:
- id
- purchased_at
- object
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- subscription_transaction
type: string
id:
description: The ID of the subscription transaction in the store
nullable: false
type: string
minLength: 1
maxLength: 255
example: GPA.0000-0000-0000-00000
purchased_at:
description: The date of the transaction in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
product_store_identifier:
description: The store identifier of the purchased product
nullable: false
type: string
minLength: 1
maxLength: 511
example: com.example.product
expiration_date:
description: The expiration date of the transaction in ms since epoch
nullable: true
type: integer
format: int64
example: 1658399423658
effective_expiration_date:
description: >-
The effective expiration date of the transaction in ms since epoch,
including potential grace period
nullable: true
type: integer
format: int64
example: 1658399423658
additionalProperties: false
Transfer:
type: object
title: TransferResult
required:
- source_customer
- target_customer
properties:
source_customer:
description: The original customer before the transfer
$ref: '#/components/schemas/Customer'
target_customer:
description: The target customer after the transfer
$ref: '#/components/schemas/Customer'
UpdateWebhookIntegrationInput:
type: object
properties:
name:
description: The display name of the webhook integration
type: string
minLength: 1
maxLength: 1500
example: Customer updates webhook
url:
description: The URL RevenueCat will send webhook notifications to
type: string
format: uri
maxLength: 5000
example: https://hooks.example.com/revenuecat
authorization_header:
description: >-
Optional authorization header that will be sent with webhook
notifications
type: string
nullable: true
maxLength: 5000
example: Bearer 123456
environment:
description: The environment the webhook integration is configured for
type: string
nullable: true
enum:
- production
- sandbox
- null
event_types:
description: Event types that will trigger the webhook
type: array
nullable: true
items:
$ref: '#/components/schemas/WebhookEventType'
app_id:
description: The ID of the app the webhook integration is scoped to
type: string
nullable: true
minLength: 1
maxLength: 255
example: app_1234567890abcdef
VirtualCurrency:
type: object
required:
- project_id
- code
- name
- state
- created_at
- object
properties:
state:
description: Whether the virtual currency is active or inactive (archived).
nullable: false
type: string
enum:
- active
- inactive
example: active
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- virtual_currency
type: string
project_id:
description: ID of the project to which the virtual currency belongs
nullable: false
minLength: 1
maxLength: 20
type: string
example: proj1ab2c3d4
code:
description: The unique code for this virtual currency
nullable: false
type: string
minLength: 1
maxLength: 10
pattern: ^[a-zA-Z0-9_]+$
example: GLD
name:
description: The display name of the virtual currency
nullable: false
type: string
minLength: 1
maxLength: 50
example: Gold
created_at:
description: The date the virtual currency was created at in ms since epoch
nullable: false
type: integer
format: int64
example: 1658399423658
description:
description: Description of the virtual currency
nullable: true
type: string
minLength: 1
maxLength: 1500
example: Gold currency used in the game
product_grants:
description: The grants that define how products grant this virtual currency
nullable: true
type: array
items:
$ref: '#/components/schemas/VirtualCurrencyProductGrant'
additionalProperties: false
VirtualCurrencyBalance:
type: object
title: VirtualCurrencyBalance
required:
- object
- currency_code
- balance
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- virtual_currency_balance
type: string
currency_code:
description: The code of the virtual currency.
type: string
balance:
description: The balance of the virtual currency.
type: integer
description:
description: The description of the virtual currency.
type: string
name:
description: The name of the virtual currency.
type: string
additionalProperties: false
VirtualCurrencyProductGrant:
type: object
required:
- object
- product_ids
- amount
- trial_amount
- expire_at_cycle_end
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the same value.
enum:
- virtual_currency.product_grant
type: string
product_ids:
description: The list of product IDs that grant this virtual currency
type: array
minItems: 1
items:
type: string
minLength: 1
maxLength: 255
example: prode1a2b3c4d5
amount:
description: The amount of virtual currency granted
type: integer
minimum: 1
example: 100
trial_amount:
description: The amount of virtual currency granted during trial period
nullable: false
type: integer
minimum: 0
example: 0
expire_at_cycle_end:
description: Whether the grant expires at the end of the subscription cycle
nullable: false
type: boolean
example: false
additionalProperties: false
VirtualCurrencyProductGrantInput:
type: object
required:
- product_ids
- amount
properties:
product_ids:
description: The list of product IDs that grant this virtual currency
type: array
minItems: 1
items:
type: string
minLength: 1
maxLength: 255
example: prode1a2b3c4d5
amount:
description: The amount of virtual currency granted
type: integer
minimum: 1
example: 100
trial_amount:
description: The amount of virtual currency granted during trial period
nullable: true
type: integer
minimum: 0
example: 0
expire_at_cycle_end:
description: Whether the grant expires at the end of the subscription cycle
nullable: true
type: boolean
example: false
WebhookEventType:
type: string
description: The type of event that triggers the webhook
example: initial_purchase
enum:
- initial_purchase
- renewal
- product_change
- cancellation
- billing_issue
- non_renewing_purchase
- uncancellation
- transfer
- subscription_paused
- expiration
- subscription_extended
- invoice_issuance
- temporary_entitlement_grant
- refund_reversed
- virtual_currency_transaction
WebhookIntegration:
type: object
required:
- id
- name
- url
- project_id
- object
- created_at
- app_id
- environment
properties:
object:
description: >-
String representing the object's type. Objects of the same type
share the
same value.
enum:
- webhook_integration
type: string
id:
description: The ID of the webhook integration
type: string
minLength: 1
maxLength: 255
example: wh_1234567890abcdef
project_id:
description: The ID of the project the webhook integration belongs to
type: string
minLength: 1
maxLength: 255
example: proj_1234567890abcdef
name:
description: The display name of the webhook integration
type: string
minLength: 1
maxLength: 1500
example: Customer updates webhook
url:
description: The URL RevenueCat will send webhook notifications to
type: string
format: uri
maxLength: 5000
example: https://hooks.example.com/revenuecat
environment:
description: >-
The environment the webhook integration is configured for. Only
events for the selected environment will be sent.
type: string
nullable: true
enum:
- production
- sandbox
- null
event_types:
description: >-
Event types that will trigger the webhook. Only events for the
selected event types will be sent.
type: array
nullable: true
items:
type: string
description: >-
The event type. Known values include: initial_purchase, renewal,
product_change, cancellation, billing_issue,
non_renewing_purchase, uncancellation, transfer,
subscription_paused, expiration, subscription_extended,
invoice_issuance, temporary_entitlement_grant, refund_reversed,
virtual_currency_transaction. New event types may be added in the
future.
example: initial_purchase
app_id:
description: >-
The ID of the app the webhook integration is scoped to. If not
provided, the webhook integration will be scoped to all apps in the
project.
type: string
nullable: true
minLength: 1
maxLength: 255
example: app_1234567890abcdef
created_at:
description: >-
The timestamp in ms since epoch when the webhook integration was
created
type: integer
format: int64
example: 1658399423658
additionalProperties: false
headers:
RateLimitCurrentLimit:
required: true
description: The rate limit for this endpoint, expressed in requests per minute.
schema:
type: integer
example: 30
RateLimitCurrentUsage:
required: true
description: >-
The current number of requests used for the current limit (including the
current request).
schema:
type: integer
example: 25
RateLimitRetryAfter:
required: true
description: >-
The number of seconds to wait before retrying a rate limited
request.Only present when a request is rate limited.
schema:
type: integer
example: 10
responses:
BadRequest:
description: Bad request
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- parameter_error
- invalid_request
examples:
parameter_error:
value:
object: error
type: parameter_error
param: customer_id
message: id is too long
retryable: false
doc_url: https://errors.rev.cat/parameter-error
invalid_request:
value:
object: error
type: invalid_request
message: Content-Type not application/json
retryable: false
doc_url: https://errors.rev.cat/invalid-request
Conflict:
description: Conflict
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- resource_already_exists
- idempotency_error
examples:
resource_already_exists:
value:
object: error
type: resource_already_exists
message: Name is already taken
retryable: false
doc_url: https://errors.rev.cat/resource-already-exists
idempotency_error:
value:
object: error
type: idempotency_error
message: Idempotency key already used for a different request
retryable: false
doc_url: https://errors.rev.cat/idempotency-error
Forbidden:
description: Access denied
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- authorization_error
example:
object: error
type: authorization_error
message: You're not authorized to access this resource
retryable: false
doc_url: https://errors.rev.cat/authorization-error
InternalError:
description: Internal server error
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- server_error
example:
object: error
type: server_error
message: There was an internal server error
retryable: true
doc_url: https://errors.rev.cat/server-error
backoff_ms: 1000
Locked:
description: Locked
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- resource_locked_error
example:
object: error
type: resource_locked_error
message: The resource is currently being modified by a concurrent request
retryable: true
doc_url: https://errors.rev.cat/resource-locked-error
backoff_ms: 1000
NotFound:
description: Not found
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- resource_missing
example:
object: error
type: resource_missing
message: Resource not found
retryable: false
doc_url: https://errors.rev.cat/resource-missing
RateLimited:
description: >-
The request could not be completed because the rate limiting domain for
this endpoint is currently at its limit for this project.
headers:
RevenueCat-Rate-Limit-Current-Usage:
$ref: '#/components/headers/RateLimitCurrentUsage'
RevenueCat-Rate-Limit-Current-Limit:
$ref: '#/components/headers/RateLimitCurrentLimit'
Retry-After:
$ref: '#/components/headers/RateLimitRetryAfter'
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- rate_limit_error
example:
object: error
type: rate_limit_error
message: Rate limit exceeded
retryable: true
doc_url: https://errors.rev.cat/rate-limit-error
backoff_ms: 1000
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- authentication_error
example:
object: error
type: authentication_error
message: Invalid API key
retryable: false
doc_url: https://errors.rev.cat/authentication-error
UnprocessableEntity:
description: Unprocessable entity
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
type:
type: string
enum:
- unprocessable_entity_error
- parameter_error
- store_error
- entity_references_archived_entities
examples:
unprocessable_entity:
value:
object: error
type: unprocessable_entity_error
message: Cannot delete a product that has purchases
retryable: false
doc_url: https://errors.rev.cat/unprocessable-entity-error
parameter_error:
value:
object: error
type: parameter_error
message: Date must in the future
retryable: false
doc_url: https://errors.rev.cat/parameter-error
store_error:
value:
object: error
type: store_error
message: There was a problem on the App Store
retryable: true
doc_url: https://errors.rev.cat/store-error
backoff_ms: 1000
entity_references_archived_entities:
value:
object: error
type: entity_references_archived_entities
message: >-
This offering references inactive products. You will need to
make the products active first before making the offering
active.
retryable: false
doc_url: https://errors.rev.cat/entity-references-archived-entities
referenced_object_ids:
- prodabcd1234
- prodwxyz5678
security:
- BearerAuth: []
servers:
- url: https://api.revenuecat.com/v2
x-tagGroups:
- name: General
tags:
- Overview (v2)
- Pagination
- Rate Limit
- Expandables
- Error Handling
- Representation of Subscriptions
- name: Model Reference
tags:
- Subscription Data Model
- name: Endpoint Reference
tags:
- App
- Audit Log
- Charts & Metrics
- Collaborator
- Customer
- Entitlement
- Offering
- Package
- Product
- Virtual Currency
- Purchase
- Subscription
- Invoice
- Paywall
- Integration
- Project
openapi: 3.0.3