- General
- Overview (v2)
- About RevenueCat’s REST API
- Should I use this REST API or the RevenueCat SDK?
- Base URL
- Authentication
- API v2 Permissions
- Request Payload
- Params
- Pagination
- Parameters
- Rate Limit
- Rate Limits by Domain
- Rate Limit Headers
- Expandables
- Error Handling
- Error Codes
- Error Types
- Representation of Subscriptions
- What constitutes a new subscription
- Overview (v2)
- Model Reference
- Subscription Data Model
- Endpoint Reference
- App
- getGet a list of the public API keys of an app
- getGet a list of apps
- postCreate an app
- getGet an app
- postUpdate an app
- delDelete an app
- getGet the StoreKit configuration for an app
- Audit Log
- getList audit logs
- Charts & Metrics
- getGet overview metrics for a project
- getGet revenue for a project
- getGet chart data
- getGet available options for a chart
- Collaborator
- getGet a list of collaborators
- Customer
- getGet a list of customers
- postCreate a customer
- getGet a customer
- delDelete a customer
- getGet customer center configuration
- postTransfer customer's subscriptions and one-time purchases to another customer
- postGrant an entitlement to a customer
- postRevoke a granted entitlement from a customer
- postAssign or clear an offering override for a customer
- postRestore a Google Play purchase by order ID
- getGet a list of subscriptions associated with a customer
- getGet a list of purchases associated with a customer
- getGet a list of customer's active entitlements
- getGet a list of the customer's aliases
- getGet a list of customer's virtual currencies balances
- postCreate a virtual currencies transaction
- postUpdate a virtual currencies balance without creating a transaction
- getGet a list of the customer's attributes
- postSet a customer's attributes
- Entitlement
- getGet an entitlement
- postUpdate an entitlement
- delDelete an entitlement
- getGet a list of entitlements
- postCreate an entitlement
- getGet a list of products attached to a given entitlement
- postArchive an entitlement
- postUnarchive an entitlement
- postAttach a set of products to an entitlement
- postDetach a set of product from an entitlement
- Offering
- getGet an offering
- postUpdate an offering
- delDelete an offering and its attached packages
- postArchive an offering
- postUnarchive an offering
- getGet a list of offerings
- postCreate an offering
- Package
- getGet a package
- postUpdate a package
- delDelete a package
- getGet a list of packages in an offering
- postCreate a package
- getGet a list of products attached to a given package of an offering
- postAttach a set of products to a package
- postDetach a set of products from a package
- Product
- getGet a product
- postUpdate a product
- delDelete a product
- postArchive a product
- postUnarchive a product
- postPush a product to the store
- getGet a list of products
- postCreate a product
- Virtual Currency
- getGet a list of virtual currencies
- postCreate a virtual currency
- getGet a virtual currency
- postUpdate a virtual currency
- delDelete a virtual currency
- postArchive a virtual currency
- postUnarchive a virtual currency
- Purchase
- getGet a purchase
- getGet a list of entitlements associated with a purchase
- postRefund a Web Billing purchase
- getSearch one-time purchases by store purchase identifier
- Subscription
- getGet a subscription
- getGet a Play Store or App Store subscription's transactions
- postRefund a Play Store or Galaxy subscription's transaction
- getGet a list of entitlements associated with a subscription
- postCancel an active Web Billing subscription
- postExtend the current billing period of a subscription
- postRefund an active Web Billing subscription
- getGet an authenticated subscription management URL
- getSearch subscriptions by store subscription identifier
- Invoice
- getGet a list of the customer's invoices
- getGet an invoice
- Paywall
- postUpload a media asset
- getGet a list of paywalls
- postCreate a paywall
- getGet a paywall
- patchUpdate a paywall draft
- delDelete a paywall
- Integration
- getList webhook integrations
- postCreate a webhook integration
- getGet a webhook integration
- postUpdate a webhook integration
- delDelete a webhook integration
- Project
- getGet a list of projects
- postCreates a new project
- App
API docs by Redocly](https://redocly.com/redoc/)
Developer API (2.0.0)
Download OpenAPI specification: Download
tag/Overview-(v2) Overview (v2)
New to RevenueCat?
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 Quickstart for more information on getting started with RevenueCat.
API v2 under development
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.
tag/Overview-(v2)/About-RevenueCat's-REST-API 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.
tag/Overview-(v2)/Should-I-use-this-REST-API-or-the-RevenueCat-SDK 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.
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.
tag/Overview-(v2)/Base-URL Base URL
The base URL for the RevenueCat REST API v2 is https://api.revenuecat.com/v2.
tag/Overview-(v2)/Authentication 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 for more information.
Authorization: Bearer YOUR_REVENUECAT_API_KEY
Authorization type `Bearer` required in header
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.
API v1 keys will not work with REST API v2
In order to utilize the RevenueCat API v2, please create new v2 secret keys and define your permissions.
tag/Overview-(v2)/API-v2-Permissions 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.
tag/Overview-(v2)/Request-Payload Request Payload
The body of the POST requests should be encoded in JSON and have the 'Content-Type' header set to 'application/json'.
Content-Type: application/json
{
"app_user_id": "user-1456",
"fetch_token": "MQABC...EFH1234="
}
tag/Overview-(v2)/Params Params
Encode your URL params
For URL params, such as the `app_user_id`, make sure you URL encode them before using them.
tag/Pagination Pagination
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:
{
"object": "list",
"items": [{}],
"next_page": "LIST_BASE_URL?starting_after=LAST_ID",
"url": "LIST_BASE_URL"
}
Where…
urlis 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}/productsnext_pageis the URL for the next page, if there is one. If there is no next page, thenext_pagefield will not be present. Example:/v2/projects/{project_id}/products?starting_after={last_id}itemsis 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.
tag/Pagination/Parameters 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.
tag/Rate-Limit Rate Limit
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.
tag/Rate-Limit/Rate-Limits-by-Domain Rate Limits by Domain
| Domain | Rate Limit (requests per minute) |
|---|---|
| Customer Information | 480 |
| Charts & Metrics | 25 |
| 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).
tag/Rate-Limit/Rate-Limit-Headers 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
}
tag/Expandables Expandables
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
{
"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:
{
"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.
tag/Error-Handling Error Handling
RevenueCat uses standard HTTP status 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:
{
"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 documentation.
tag/Error-Handling/Error-Codes 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 |
| 500 | Internal Server Error | The RevenueCat server ran into an unexpected problem – please check the RevenueCat status page 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 |
tag/Error-Handling/Error-Types 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/jsonis missing in the request header forPOST/PUT/PATCHrequests- 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 characterslookup_key(applies to Entitlements): 1 to 200 characters
rate_limit_error
The request has hit the 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.
tag/Representation-of-Subscriptions Representation of Subscriptions
In comparison to our v1 REST API, 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 useunsubscribe_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.
Eventually we will also expose this sort of information in webhooks and customer event details to incorporate the new data model throughout RevenueCat.
tag/Representation-of-Subscriptions/What-constitutes-a-new-subscription 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
tag/Subscription-Data-Model Subscription Data Model
| object required |
string Value:"subscription" String representing the object's type. Objects of the same type share the same value. |
| id required |
string [ 1 .. 255 ] characters The ID of the subscription (generated by RevenueCat) |
| customer_id required |
string [ 1 .. 1500 ] characters The ID of the customer |
| original_customer_id required |
string [ 1 .. 1500 ] characters The ID of the original customer. Relevant for subscriptions that were transferred from one customer to another |
| product_id required |
string or null [ 1 .. 255 ] characters The RevenueCat ID of the product that the customer is subscribed to. Exists for all store types except for promotional. |
| starts_at required |
integer The date when the subscription originally started in ms since epoch |
| current_period_starts_at required |
integer The date when the subscription billing period started in ms since epoch |
| current_period_ends_at required |
integer or null 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. |
| ends_at required |
integer or null 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. |
| gives_access required |
boolean Determines whether the customer should currently be provided access to the entitlements associated with the subscription |
| pending_payment required |
boolean Determines whether there is a pending payment associated with the subscription |
| auto_renewal_status required |
string Enum:"will_renew""will_not_renew""will_change_product""will_pause""requires_price_increase_consent""has_already_renewed" The auto renewal status of a subscription. Possible values: • will_renew: the subscription is currently set to automatically renew• will_not_renew: the subscription is currently set to expire at the end of the period• will_change_product: the subscription is currently set to change product at the end of the period (which might start a new subscription)• will_pause: the subscription is currently set to pause at the end of the current period• requires_price_increase_consent: the subscription will expire at the end of the current period unless the customer consents to the price increase• 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) |
| status required |
string Enum:"trialing""active""expired""in_grace_period""in_billing_retry""paused""unknown""incomplete" 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. Possible values: • trialing: the subscription is in a free trial period• active: the subscription is active, in a paid period• expired: the subscription is expired and no longer active• 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• 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.• unknown: the subscription is in an unknown state. Refer to the gives_access field to determine whether or not to grant access.• incomplete: the subscription is in an incomplete state, maybe due to incorrect billing details or because it's scheduled to start in the future. |
| total_revenue_in_usd required |
MonetaryAmount (object) Total revenue generated by a subscription in USD |
| One of |
MonetaryAmount
| currency required |
string (Currency) Enum:"AED""AFN""ALL""AMD""ANG""AOA""ARS""AUD""AWG""AZN"… 160 more ISO 4217 currency code |
| gross required |
number Total revenue generated (excluding taxes and commission) |
| commission | number Store commission or payment processor fees deducted from gross revenue (if any) |
| tax required |
number Estimated taxes deducted from gross revenue |
| proceeds required |
number Net revenue after store commission / fees and taxes |
| property name* additional property |
any |
| presented_offering_id required |
string or null [ 1 .. 200 ] characters The ID of the offering the customer saw when purchasing the subscription |
| entitlements required |
object (EntitlementList) |
| --- | --- |
| object required |
string Value:"list" String representing the object's type. Objects of the same type share the same value. Always has the value list. |
| items required |
Array of objects (Entitlement) Details about each object. |
| next_page required |
string or null URL to access the next page of the customer's entitlements. If not present / null, there is no next page |
| url required |
string <= 5000 characters The URL where this list can be accessed. |
| environment required |
Environment (string) The store environment |
| One of Environment string (Environment) Enum:"production""sandbox" The store environment |
|
| store required |
string Enum:"amazon""app_store""mac_app_store""play_store""promotional""stripe""rc_billing""external""roku""paddle"… 3 more Store the subscription belongs to |
| store_subscription_identifier required |
string [ 1 .. 255 ] characters 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) |
| ownership required |
Ownership (string) Ownership of the subscription |
| One of Ownership string (Ownership) Enum:"purchased""family_shared" Ownership of the subscription |
|
| pending_changes | object or null Expected changes to the subscription that will occur at the end of the current period. Present when the subscription has a pending product change, has already renewed for the next period, or has a failed upcoming renewal. Only fields that differ from the current subscription state are included. |
| --- | --- |
| product | object or null The product that will be active as of the next renewal |
| current_period_starts_at | integer or null Expected start of the next billing period in ms since epoch. Omitted when unchanged from the current subscription. |
| current_period_ends_at | integer or null Expected end of the next billing period in ms since epoch. Omitted when unchanged from the current subscription. |
| store_subscription_identifier | string or null [ 1 .. 255 ] characters Expected store subscription identifier for the next period. Omitted when unchanged from the current subscription. |
| auto_renewal_status | string or null Enum:"will_renew""will_not_renew""will_change_product""will_pause""requires_price_increase_consent""has_already_renewed" Expected auto renewal status for the next period. Omitted when unchanged from the current subscription. |
| status | string or null Enum:"trialing""active""expired""in_grace_period""in_billing_retry""paused""unknown""incomplete" Expected subscription status for the next period. Omitted when unchanged from the current subscription. |
| pending_payment | boolean or null Expected pending payment flag for the next period. Omitted when unchanged from the current subscription. |
| gives_access | boolean or null Expected access flag for the next period. Omitted when unchanged from the current subscription. |
| property name* additional property |
any |
| country | string or null (Country) Enum:null"AF""AL""DZ""AS""AD""AO""AI""AQ""AG"… 240 more The country that the object is associated with, in ISO alpha 2 code |
| management_url required |
string or null The URL to manage the subscription |
Copy Expand all Collapse all
`{"object": "subscription",
"id": "sub1ab2c3d4e5",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"starts_at": 1658399423658,
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1658399423658,
"ends_at": 1658399423658,
"gives_access": true,
"pending_payment": true,
"auto_renewal_status": "will_renew",
"status": "trialing",
"total_revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"items": [{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_subscription_identifier": 12345678,
"ownership": "purchased",
"pending_changes": {"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
},
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1660991423658,
"store_subscription_identifier": 12345679,
"auto_renewal_status": "will_renew",
"status": "active",
"pending_payment": false,
"gives_access": true
},
"country": "US",
"management_url": "https://apps.apple.com/account/subscriptions"
}`
tag/App App
Operations about apps.
tag/App/operation/list-app-public-api-keys Get a list of the public API keys of an app
get/projects/{project_id}/apps/{app_id}/public_api_keys
https://api.revenuecat.com/v2/projects/{project\_id}/apps/{app\_id}/public\_api\_keys
Returns public API keys for the app. RC Checkout public keys are omitted. Sandbox keys are always included. Production keys are omitted when the app uses Stripe or Web Billing and the linked Stripe connected account is sandbox or test-only (same behavior as the RevenueCat dashboard list).
This endpoint requires the following permission(s): project_configuration:apps:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| app_id required |
string <= 255 characters Example: app1ab2c3d4 ID of the app |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "public_api_key",
"id": "apikey12345",
"key": "goog_1ab2c3d4",
"environment": "production",
"app_id": "app1a2b3c4",
"created_at": 1658399423658
}
],
"next_page": "/v2/projects/projec1a2b3c4d/apps/app1a2b3c4d/public_api_keys?starting_after=pub1a2b3c4d",
"url": "/v2/projects/projec1a2b3c4d/apps/app1a2b3c4d/public_api_keys"
}`
tag/App/operation/list-apps Get a list of apps
get/projects/{project_id}/apps
https://api.revenuecat.com/v2/projects/{project\_id}/apps
This endpoint requires the following permission(s): project_configuration:apps:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
}
],
"next_page": "/v2/projects/projec1a2b3c4d/apps?starting_after=app1a2b3c4d",
"url": "/v2/projects/projec1a2b3c4d/apps"
}`
tag/App/operation/create-app Create an app
post/projects/{project_id}/apps
https://api.revenuecat.com/v2/projects/{project\_id}/apps
This endpoint requires the following permission(s): project_configuration:apps:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
| name required |
string [ 1 .. 255 ] characters The name of the app |
| type required |
string The platform of the app. Mac App Store is disabled by default. See Legacy Mac Apps for more details. paddlerokurc_billingstripeplay_storemac_app_storeapp_storeamazonamazon |
| amazon required |
object Amazon type details. Should only be used when type is amazon. |
| --- | --- |
| package_name required |
string [ 1 .. 256 ] characters The package name of the app |
| shared_secret | string Your Amazon Developer Identity Shared Key |
Responses
201
Success. The app was created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Example
App StorePlay StoreStripeAmazonWeb BillingRokuPaddleApp Store
Copy Expand all Collapse all
`{"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-----\nMHQCAQEEIGAkwOF0qkGO19yJlIzQVcOg+HBfvLL4KDXDtL+MMHk2oAcGBSuBBAAK\noUQDQgAEhDP7RaX4c6qOHkE1nIWMr5C90ybtr87VRGFm4VsfWqG47NPN+/dHcfwJ\nJPZGFgMcgvBc37AxQPPQjyXYjhhQDg==\n-----END EC PRIVATE KEY-----",
"subscription_key_id": "6345942CC3",
"subscription_key_issuer": "5a049d62-1b9b-453c-b605-1988189d8129"
}
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Example
amazonapp_storemac_app_storeplay_storestriperc_billingrokupaddletest_storeamazon
Copy Expand all Collapse all
`{"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
}`
tag/App/operation/get-app Get an app
get/projects/{project_id}/apps/{app_id}
https://api.revenuecat.com/v2/projects/{project\_id}/apps/{app\_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Example
amazonapp_storemac_app_storeplay_storestriperc_billingrokupaddletest_storeamazon
Copy Expand all Collapse all
`{"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
}`
tag/App/operation/update-app Update an app
post/projects/{project_id}/apps/{app_id}
https://api.revenuecat.com/v2/projects/{project\_id}/apps/{app\_id}
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| name | string [ 1 .. 255 ] characters The name of the app |
| amazon | object Amazon type details. Should only be used when type is amazon. |
| --- | --- |
| package_name | string [ 1 .. 256 ] characters The package name of the app |
| shared_secret | string or null Your Amazon Developer Identity Shared Key |
| app_store | object App Store type details. Should only be used when type is app_store. |
| --- | --- |
| bundle_id | string [ 1 .. 256 ] characters The bundle ID of the app |
| shared_secret | string or null = 32 characters The shared secret of the app |
| subscription_private_key | string PKCS |
| subscription_key_id | string In App Key id. The ID of the downloaded in app key. You can get it from App Store Connect |
| subscription_key_issuer | string 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 |
| app_store_connect_api_key | string 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. |
| app_store_connect_api_key_id | string App Store Connect API Key ID. The ID of the downloaded API key. You can get it from App Store Connect. |
| app_store_connect_api_key_issuer | string App Store Connect API Key Issuer ID. |
| app_store_connect_vendor_number | string Your vendor number from App Store Connect. Required for some features like financial reports. |
| mac_app_store | object Legacy Mac App Store type details. Should only be used when type is mac_app_store. |
| --- | --- |
| bundle_id | string [ 1 .. 256 ] characters The bundle ID of the app |
| shared_secret | string or null = 32 characters The shared secret of the app |
| play_store | object Play Store type details. Should only be used when type is play_store. |
| --- | --- |
| package_name required |
string [ 1 .. 256 ] characters The package name of the app |
| stripe | object Stripe type details. Should only be used when type is stripe. |
| --- | --- |
| stripe_account_id | string [ 1 .. 256 ] characters 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. |
| rc_billing | object Web Billing type details. Should only be used when type is rc_billing. |
| --- | --- |
| stripe_account_id | string or null [ 1 .. 256 ] characters 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. |
| app_name | string or null [ 1 .. 256 ] characters Shown in checkout, emails, and receipts sent to customers. |
| support_email | string or null [ 1 .. 320 ] characters 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. |
| default_currency | string (RCBillingCurrency) Enum:"USD""EUR""JPY""GBP""AUD""CAD""BRL""KRW""CNY""MXN"… 36 more ISO 4217 currency code |
| roku | object Roku Channel Store type details. Should only be used when type is roku. |
| --- | --- |
| roku_api_key | string or null = 33 characters Roku Pay API key provided on the Roku Pay Web Services page. |
| roku_channel_id | string or null = 6 characters Channel ID provided on the Roku Channel page. |
| roku_channel_name | string or null [ 1 .. 30 ] characters Channel name that is displayed on the Roku Channel page. |
| paddle | object Paddle Billing type details. Should only be used when type is paddle. |
| --- | --- |
| paddle_api_key | string or null = 50 characters Paddle Server-side API key provided on the Paddle dashboard. |
| paddle_is_sandbox | boolean Whether the app is tied to the sandbox environment. |
Responses
200
Success. The app was updated
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Example
Update App Store App propertiesUpdate App Store App secretRemove App Store App secretUpdate App Store App properties
Copy Expand all Collapse all
`{"name": "New App name",
"app_store": {"bundle_id": "com.my.new-app",
"shared_secret": "1234567890abcdef1234567890abcdef"
}
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Example
amazonapp_storemac_app_storeplay_storestriperc_billingrokupaddletest_storeamazon
Copy Expand all Collapse all
`{"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
}`
tag/App/operation/delete-app Delete an app
delete/projects/{project_id}/apps/{app_id}
https://api.revenuecat.com/v2/projects/{project\_id}/apps/{app\_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "app",
"id": "string",
"deleted_at": 1658399423658
}`
tag/App/operation/get-app-storekit-config Get the StoreKit configuration for an app
get/projects/{project_id}/apps/{app_id}/store_kit_config
https://api.revenuecat.com/v2/projects/{project\_id}/apps/{app\_id}/store\_kit\_config
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "store_kit_config_file",
"contents": { }
}`
tag/Audit-Log Audit Log
Operations about audit logs.
tag/Audit-Log/operation/list-audit-logs List audit logs
get/projects/{project_id}/audit_logs
https://api.revenuecat.com/v2/projects/{project\_id}/audit\_logs
This endpoint requires the following permission(s): project_configuration:audit_logs:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=log1ab2c3d4e5 Cursor for pagination. Returns audit logs after the specified audit log ID, using descending order by audit log ID. |
| start_date | string Example: start_date=2024-01-01 Start date for the data range (ISO 8601 format) |
| end_date | string Example: end_date=2024-12-31 End date for the data range (ISO 8601 format) |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "audit_log",
"id": "log1ab2c3d4e5",
"project_id": "proj1ab2c3d4",
"action_type": "project_name_updated",
"target_type": "project",
"target_identifier": "proj1ab2c3d4",
"actor_type": "user",
"actor_identifier": "user_abc123",
"occurred_at": 1713297600000,
"additional_data": { }
}
],
"next_page": "/v2/projects/proj1ab2c3d4/audit_logs?starting_after=log1ab2c3d4e5",
"url": "/v2/projects/proj1ab2c3d4/audit_logs"
}`
tag/Charts-and-Metrics Charts & Metrics
Operations about chart metrics.
tag/Charts-and-Metrics/operation/get-overview-metrics Get overview metrics for a project
get/projects/{project_id}/metrics/overview
https://api.revenuecat.com/v2/projects/{project\_id}/metrics/overview
This endpoint requires the following permission(s): charts_metrics:overview:read. This endpoint belongs to the Charts & Metrics domain, which has a default rate limit of 25 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| currency | string Enum:"USD""EUR""GBP""AUD""CAD""JPY""BRL""KRW""CNY""MXN"… 4 more Example: currency=EUR The currency to return metrics data in |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "overview_metrics",
"metrics": [{"object": "overview_metric",
"id": "active_trials",
"name": "Active Trials",
"description": "string",
"unit": "$",
"period": "P0D",
"value": 34765,
"last_updated_at": 1658399423658,
"last_updated_at_iso8601": "2022-10-13 09:45:00.123000+00:00"
}
],
"currency": "EUR"
}`
tag/Charts-and-Metrics/operation/get-revenue-metric Get revenue for a project
get/projects/{project_id}/metrics/revenue
https://api.revenuecat.com/v2/projects/{project\_id}/metrics/revenue
Returns the total revenue for the project across all of its apps for the
given inclusive date range [start_date, end_date]. The value is expressed
in the project's primary currency unless currency is provided.
Use revenue_type to choose which revenue definition the value represents:
gross revenue (default), revenue_net_of_taxes, or proceeds (net of both
taxes and store commission — the amount the developer keeps).
This endpoint is backed by the same realtime (v3) revenue chart that powers the dashboard. It is intended for cases where an app needs an authoritative revenue total without inferring it from the transaction list.
Note that the most recent day in the range may be partial if it includes
today, since transactions for today are still arriving.
This endpoint requires the following permission(s): charts_metrics:overview:read. This endpoint belongs to the Charts & Metrics domain, which has a default rate limit of 25 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| start_date required |
string Example: start_date=2024-01-01 Start date for the data range (ISO 8601 format) |
| end_date required |
string Example: end_date=2024-12-31 End date for the data range (ISO 8601 format) |
| currency | string Enum:"USD""EUR""GBP""AUD""CAD""JPY""BRL""KRW""CNY""MXN"… 4 more Example: currency=EUR The currency to return metrics data in |
| revenue_type | string Default: "revenue" Enum:"revenue""revenue_net_of_taxes""proceeds" Example: revenue_type=proceeds Which revenue definition to return as the metric value: - revenue: gross revenue.- revenue_net_of_taxes: revenue with taxes subtracted.- proceeds: revenue net of both taxes and store commission (the amount thedeveloper keeps). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "revenue_metric",
"start_date": "2026-01-01",
"end_date": "2026-01-31",
"currency": "USD",
"value": 12345.67,
"revenue_type": "proceeds"
}`
tag/Charts-and-Metrics/operation/get-chart-data Get chart data
get/projects/{project_id}/charts/{chart_name}
https://api.revenuecat.com/v2/projects/{project\_id}/charts/{chart\_name}
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.
Incomplete data
For the most recent periods, data may be flagged as incomplete, and may not be appropriate to use for analysis.
This endpoint requires the following permission(s): charts_metrics:charts:read. This endpoint belongs to the Charts & Metrics domain, which has a default rate limit of 25 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| chart_name required |
string <= 255 characters Enum:"actives""actives_movement""actives_new""arr""churn""cohort_explorer""conversion_to_paying""customers_new""initial_conversion""ltv_per_customer"… 14 more Example: revenue Name of the chart to retrieve: - actives: Active (paying) subscriptions - actives_movement: Period-over-period delta of active (paying) subscriptions - actives_new: New paying subscriptions, including trial conversions, resubscriptions, and product changes - arr: Annual recurring revenue - churn: Churn rate: active and expired subscriptions per period - cohort_explorer: allows measuring the performance of various cohort definitions over time for revenue, retained subscriptions, and cohort LTV - conversion_to_paying: Conversion of new customers to paying - customers_new: Newly seen customers - initial_conversion: Initial conversion of new customers to paying within fixed windows (0, 3, 7, 14, 30 days, and unbounded) - ltv_per_customer: Realized LTV per customer, also known as ARPU, cohorted by first seen date - ltv_per_paying_customer: Realized LTV per paying customer, also known as ARPPU, cohorted by first seen date - mrr: Monthly recurring revenue - mrr_movement: Period-over-period delta of monthly recurring revenue - prediction_explorer: similar to cohort_explorer but including future predictions - refund_rate: transactions per period, refunds, refund rate - revenue: revenue (gross, net of taxes, or proceeds net of taxes and commissions) and number of transactions (subscriptions and non-subscriptions) per period - subscription_retention: Per-period retention of paying subscriptions by duration - subscription_status: Break down paying subscriptions, trials, MRR, ARR, or revenue by whether the subscription is set to renew, cancelled, or in billing recovery - trials: Active trials - trials_movement: Movement of active trials - trials_new: New trials - customers_active: Customers seen during the period (also known as DAU/MAU/WAU/etc.) - trial_conversion_rate: Number of trials started in a period and ratio of them converting to paying - non-subscription_purchases: Number of non-subscription purchases per period |
query Parameters
| realtime | boolean Default: true Whether to request real-time (v3) charts. Defaults to true. Set to false to request the v2 charts. |
| filters | string Example: filters=[{"name":"country","values":["US","UK"]}] JSON array of chart filters. Each filter is a ChartFilter object. |
| selectors | string Example: selectors={"conversion_timeframe":"7_days","revenue_type":"proceeds"} JSON object of chart selectors. |
| aggregate | Array of strings non-empty unique Items Enum:"average""total" Example: aggregate=average,total Comma-separated aggregate operations to return in summary without raw values. |
| currency | string Enum:"USD""EUR""GBP""AUD""CAD""JPY""BRL""KRW""CNY""MXN"… 4 more Example: currency=EUR The currency to return metrics data in |
| resolution | string Example: resolution=0 Time resolution for the chart data. Use the chart options endpoint to discover available resolutions and their IDs. |
| start_date | string Example: start_date=2024-01-01 Start date for the data range (ISO 8601 format) |
| end_date | string Example: end_date=2024-12-31 End date for the data range (ISO 8601 format) |
| segment | string Example: segment=country Segment the data by this dimension. Use the chart options endpoint to discover available segments for a chart. |
| limit_num_segments | integer >= 1 Example: limit_num_segments=10 If set, limits the number of segments returned to the top N by value. All remaining segments are aggregated into an "Other" segment. Only applies when a segment is specified. |
| include_annotations | boolean Default: false Example: include_annotations=true When true, includes chart annotations for the project in the response, filtered to the chart's date window. |
Responses
200
Chart data retrieved successfully
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "chart_data",
"category": "revenue",
"display_type": "line",
"display_name": "Revenue",
"description": "string",
"documentation_link": "string",
"last_computed_at": 0,
"start_date": 0,
"end_date": 0,
"yaxis_currency": "USD",
"filtering_allowed": true,
"segmenting_allowed": true,
"resolution": "day",
"values": [[0
]
],
"summary": { },
"yaxis": "$",
"segments": [{"id": "string",
"display_name": "string"
}
],
"segments_limit": 0,
"measures": [{ }
],
"user_selectors": {"property1": "string",
"property2": "string"
},
"unsupported_params": {"filters": ["string"
],
"segment": "string"
},
"annotations": [{"object": "chart_annotation",
"id": "chartannot1a2b3c",
"description": "App version 2.0 released",
"start_date": "2024-01-15",
"end_date": "2024-01-20"
}
]
}`
tag/Charts-and-Metrics/operation/get-chart-options Get available options for a chart
get/projects/{project_id}/charts/{chart_name}/options
https://api.revenuecat.com/v2/projects/{project\_id}/charts/{chart\_name}/options
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:
- Build dynamic filter UIs
- Validate parameters before making chart data requests
- Discover available dimensions for analysis
. This endpoint requires the following permission(s):
charts_metrics:charts:read. This endpoint belongs to the Charts & Metrics domain, which has a default rate limit of 25 requests per minute.
Authorizations:
BearerAuth
path Parameters
query Parameters
| realtime | boolean Default: true Whether to request real-time (v3) charts. Defaults to true. Set to false to request the v2 charts. |
Responses
200
Chart options retrieved successfully
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "chart_options",
"resolutions": [{"id": "0",
"display_name": "day"
},
{"id": "1",
"display_name": "week"
},
{"id": "2",
"display_name": "month"
}
],
"segments": [{"object": "chart_segment_option",
"id": "country",
"display_name": "Country",
"group_display_name": "Geography"
}
],
"filters": [{"object": "chart_filter_option",
"id": "country",
"display_name": "Country",
"group_display_name": "Geography",
"options": [{"id": "US",
"display_name": "United States"
}
]
}
],
"user_selectors": {"property1": {"default": "string",
"display_name": "string",
"options": [{"id": "string",
"display_name": "string"
}
]
},
"property2": {"default": "string",
"display_name": "string",
"options": [{"id": "string",
"display_name": "string"
}
]
}
}
}`
tag/Collaborator Collaborator
Operations about collaborators.
tag/Collaborator/operation/list-collaborators Get a list of collaborators
get/projects/{project_id}/collaborators
https://api.revenuecat.com/v2/projects/{project\_id}/collaborators
This endpoint requires the following permission(s): project_configuration:collaborators:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "collaborator",
"id": "collab1a2b3c4d5",
"name": "John Doe",
"email": "john.doe@example.com",
"role": "admin",
"accepted_at": 1658399423658,
"has_mfa": true
}
],
"next_page": "/v2/projects/proj1ab2c3d4/collaborators?starting_after=collab1a2b3c4d5",
"url": "/v2/projects/proj1ab2c3d4/collaborators"
}`
tag/Customer Customer
Operations about customers.
tag/Customer/operation/list-customers Get a list of customers
get/projects/{project_id}/customers
https://api.revenuecat.com/v2/projects/{project\_id}/customers
This endpoint requires the following permission(s): customer_information:customers:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
| search | string [ 1 .. 255 ] characters Example: search=example@example.com Search term. Currently, only searching by email is supported (searching for exact matches in the $email attribute). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "customer",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"project_id": "proj1ab2c3d4",
"first_seen_at": 1658399423658,
"last_seen_at": 1658399423658,
"last_seen_app_version": "1.0.0",
"last_seen_country": "US",
"last_seen_platform": "android",
"last_seen_platform_version": "35",
"active_entitlements": {"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
},
"experiment": {"object": "experiment_enrollment",
"id": "string",
"name": "string",
"variant": "a"
},
"attributes": {"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}
}
],
"next_page": "/v2/projects/projec1a2b3c4d/customers?starting_after=223xx1100",
"url": "/v2/projects/projec1a2b3c4d/customers"
}`
tag/Customer/operation/create-customer Create a customer
post/projects/{project_id}/customers
https://api.revenuecat.com/v2/projects/{project\_id}/customers
This endpoint requires the following permission(s): customer_information:customers:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
| id required |
string [ 1 .. 1500 ] characters ^[0-9a-zA-Z_-]*$ The ID of the customer |
| attributes | Array of objects <= 50 characters |
| Array |
| name required |
CustomerAttributeReservedName (string) or CustomerAttributeCustomName (string) [ 1 .. 40 ] characters The name of the attribute |
| value required |
string <= 500 characters The value of the attribute |
Responses
201
Success. The customer was created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"attributes": [{"name": "$email",
"value": "cat@revenuecat.com"
}
]
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "customer",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"project_id": "proj1ab2c3d4",
"first_seen_at": 1658399423658,
"last_seen_at": 1658399423658,
"last_seen_app_version": "1.0.0",
"last_seen_country": "US",
"last_seen_platform": "android",
"last_seen_platform_version": "35",
"active_entitlements": {"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
},
"experiment": {"object": "experiment_enrollment",
"id": "string",
"name": "string",
"variant": "a"
},
"attributes": {"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}
}`
tag/Customer/operation/get-customer Get a customer
get/projects/{project_id}/customers/{customer_id}
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| customer_id required |
string [ 1 .. 1500 ] characters Example: 19b8de26-77c1-49f1-aa18-019a391603e2 ID of the customer |
query Parameters
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Value:"attributes" Example: expand=attributes Specifies which fields in the response should be expanded. Accepted values are: attributes (requires customer_information:customers:read permission). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "customer",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"project_id": "proj1ab2c3d4",
"first_seen_at": 1658399423658,
"last_seen_at": 1658399423658,
"last_seen_app_version": "1.0.0",
"last_seen_country": "US",
"last_seen_platform": "android",
"last_seen_platform_version": "35",
"active_entitlements": {"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
},
"experiment": {"object": "experiment_enrollment",
"id": "string",
"name": "string",
"variant": "a"
},
"attributes": {"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}
}`
tag/Customer/operation/delete-customer Delete a customer
delete/projects/{project_id}/customers/{customer_id}
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
202
Accepted. The customer deletion was queued.
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 202
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "customer",
"id": "b5b7bfd2-66fb-4091-af50-7c3cdccfdf24",
"deleted_at": 1658399423658
}`
tag/Customer/operation/get-customer-center-config Get customer center configuration
get/projects/{project_id}/customers/{customer_id}/customer_center
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/customer\_center
Authorizations:
BearerAuth
path Parameters
query Parameters
| platform | string Enum:"app_store""play_store""mac_app_store""stripe""amazon" Example: platform=app_store The platform to process the Customer Center configuration for. When provided, returns the locale-selected, platform-filtered configuration the customer would see. When omitted, returns the full unprocessed configuration for all platforms. Must match a store configured on this project. |
| locale | string Example: locale=en_US BCP 47 locale string (e.g. en_US) used to select the appropriate localization when platform is provided. When omitted, the configuration's default locale is used. Has no effect if platform is not provided. |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "customer_center_config",
"customer_center": { }
}`
tag/Customer/operation/transfer-customer-data Transfer customer's subscriptions and one-time purchases to another customer
post/projects/{project_id}/customers/{customer_id}/actions/transfer
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/actions/transfer
This endpoint requires the following permission(s): customer_information:customers:read_write, customer_information:subscriptions:read_write, customer_information:purchases:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| target_customer_id required |
string The ID of the customer to whom the subscriptions and one-time purchases will be transferred. |
| app_ids | Array of strings or null[ items [ 1 .. 255 ] characters ] Optional. The IDs of the apps to filter the transfer by. When specified, only purchases and subscriptions associated with these apps will be transferred. |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"target_customer_id": "string",
"app_ids": ["appa2b3c4d5e"
]
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"source_customer": {"object": "customer",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"project_id": "proj1ab2c3d4",
"first_seen_at": 1658399423658,
"last_seen_at": 1658399423658,
"last_seen_app_version": "1.0.0",
"last_seen_country": "US",
"last_seen_platform": "android",
"last_seen_platform_version": "35",
"active_entitlements": {"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
},
"experiment": {"object": "experiment_enrollment",
"id": "string",
"name": "string",
"variant": "a"
},
"attributes": {"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}
},
"target_customer": {"object": "customer",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"project_id": "proj1ab2c3d4",
"first_seen_at": 1658399423658,
"last_seen_at": 1658399423658,
"last_seen_app_version": "1.0.0",
"last_seen_country": "US",
"last_seen_platform": "android",
"last_seen_platform_version": "35",
"active_entitlements": {"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
},
"experiment": {"object": "experiment_enrollment",
"id": "string",
"name": "string",
"variant": "a"
},
"attributes": {"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}
}
}`
tag/Customer/operation/grant-customer-entitlement Grant an entitlement to a customer
post/projects/{project_id}/customers/{customer_id}/actions/grant_entitlement
Grants an entitlement to a customer unless one already exists. As a side effect, a promotional subscription is created. This endpoint requires the following permission(s): customer_information:customers:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| entitlement_id required |
string [ 1 .. 255 ] characters The ID of the entitlement to grant to the customer. |
| expires_at required |
integer The date after which the access to the entitlement expires in ms since epoch. |
Responses
201
Entitlement granted successfully
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "customer",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"project_id": "proj1ab2c3d4",
"first_seen_at": 1658399423658,
"last_seen_at": 1658399423658,
"last_seen_app_version": "1.0.0",
"last_seen_country": "US",
"last_seen_platform": "android",
"last_seen_platform_version": "35",
"active_entitlements": {"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
},
"experiment": {"object": "experiment_enrollment",
"id": "string",
"name": "string",
"variant": "a"
},
"attributes": {"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}
}`
tag/Customer/operation/revoke-customer-granted-entitlement Revoke a granted entitlement from a customer
post/projects/{project_id}/customers/{customer_id}/actions/revoke_granted_entitlement
Revokes a granted entitlement from a customer. As a side effect, the promotional subscription associated with the granted entitlement is expired. This endpoint requires the following permission(s): customer_information:customers:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| entitlement_id required |
string [ 1 .. 255 ] characters The ID of the granted entitlement to revoke from the customer. |
Responses
200
Entitlement revoked successfully
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"entitlement_id": "entla1b2c3d4e5"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "customer",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"project_id": "proj1ab2c3d4",
"first_seen_at": 1658399423658,
"last_seen_at": 1658399423658,
"last_seen_app_version": "1.0.0",
"last_seen_country": "US",
"last_seen_platform": "android",
"last_seen_platform_version": "35",
"active_entitlements": {"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
},
"experiment": {"object": "experiment_enrollment",
"id": "string",
"name": "string",
"variant": "a"
},
"attributes": {"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}
}`
tag/Customer/operation/assign-customer-offering Assign or clear an offering override for a customer
post/projects/{project_id}/customers/{customer_id}/actions/assign_offering
This endpoint requires the following permission(s): project_configuration:offerings:read, customer_information:customers:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| offering_id required |
string or null [ 1 .. 255 ] characters The ID of the offering to assign to the customer. Set to null to clear any existing override. |
Responses
200
Offering assigned successfully
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"offering_id": "offrng1b2c3d4e5"
}`
Response samples
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Example
parameter_errorinvalid_requestparameter_error
Copy
`{"object": "error",
"type": "parameter_error",
"param": "customer_id",
"message": "id is too long",
"retryable": false,
"doc_url": "https://errors.rev.cat/parameter-error"
}`
tag/Customer/operation/restore-purchase-by-order-id Restore a Google Play purchase by order ID
post/projects/{project_id}/customers/{customer_id}/actions/restore_purchase_by_order_id
Restores a Google Play purchase to the specified customer using a Google Play order ID. This endpoint requires the following permission(s): customer_information:customers:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| order_id required |
string non-empty The Google Play order ID to restore. |
Responses
200
Purchase restored successfully
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"order_id": "GPA.1234-5678-9012-34567"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "customer",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"project_id": "proj1ab2c3d4",
"first_seen_at": 1658399423658,
"last_seen_at": 1658399423658,
"last_seen_app_version": "1.0.0",
"last_seen_country": "US",
"last_seen_platform": "android",
"last_seen_platform_version": "35",
"active_entitlements": {"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
},
"experiment": {"object": "experiment_enrollment",
"id": "string",
"name": "string",
"variant": "a"
},
"attributes": {"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}
}`
tag/Customer/operation/list-subscriptions Get a list of subscriptions associated with a customer
get/projects/{project_id}/customers/{customer_id}/subscriptions
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/subscriptions
This endpoint requires the following permission(s): customer_information:subscriptions:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
query Parameters
| environment | string Enum:"sandbox""production" Example: environment=production |
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "subscription",
"id": "sub1ab2c3d4e5",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"starts_at": 1658399423658,
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1658399423658,
"ends_at": 1658399423658,
"gives_access": true,
"pending_payment": true,
"auto_renewal_status": "will_renew",
"status": "trialing",
"total_revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"items": [{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": null,
"grace_period_duration": null,
"trial_duration": null
},
"one_time": {"is_consumable": null
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": null,
"id": null,
"name": null,
"created_at": null,
"type": null,
"project_id": null,
"amazon": { }
},
"indicative_price": {"object": null,
"currency": null,
"country": null,
"amount_micros": null
},
"display_name": "Premium Monthly 2023"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_subscription_identifier": 12345678,
"ownership": "purchased",
"pending_changes": {"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
},
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1660991423658,
"store_subscription_identifier": 12345679,
"auto_renewal_status": "will_renew",
"status": "active",
"pending_payment": false,
"gives_access": true
},
"country": "US",
"management_url": "https://apps.apple.com/account/subscriptions"\
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/subscriptions?starting_after=sub1a2b3c4d",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/subscriptions"
}`
tag/Customer/operation/list-purchases Get a list of purchases associated with a customer
get/projects/{project_id}/customers/{customer_id}/purchases
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/purchases
This endpoint requires the following permission(s): customer_information:purchases:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
query Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "purchase",
"id": "purch1a2b3c4d5e",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"purchased_at": 1658399423658,
"revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"quantity": 1,
"status": "owned",
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"items": [{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": null,
"grace_period_duration": null,
"trial_duration": null
},
"one_time": {"is_consumable": null
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": null,
"id": null,
"name": null,
"created_at": null,
"type": null,
"project_id": null,
"amazon": { }
},
"indicative_price": {"object": null,
"currency": null,
"country": null,
"amount_micros": null
},
"display_name": "Premium Monthly 2023"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/purchases/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/purchases/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_purchase_identifier": 12345678,
"ownership": "purchased",
"country": "US"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/purchases?starting_after=purc1a2b3c4d5e",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/purchases"
}`
tag/Customer/operation/list-customer-active-entitlements Get a list of customer's active entitlements
get/projects/{project_id}/customers/{customer_id}/active_entitlements
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/active\_entitlements
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "customer.active_entitlement",
"entitlement_id": "entla1b2c3d4e5",
"expires_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/active_entitlements"
}`
tag/Customer/operation/list-customer-aliases Get a list of the customer's aliases
get/projects/{project_id}/customers/{customer_id}/aliases
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/aliases
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "customer.alias",
"id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"created_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/aliases?starting_after=9fjeja8fjed",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/aliases"
}`
tag/Customer/operation/list-virtual-currencies-balances Get a list of customer's virtual currencies balances
get/projects/{project_id}/customers/{customer_id}/virtual_currencies
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/virtual\_currencies
Authorizations:
BearerAuth
path Parameters
query Parameters
| include_empty_balances | boolean Example: include_empty_balances=true |
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "virtual_currency_balance",
"currency_code": "string",
"balance": 0,
"description": "string",
"name": "string"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/virtual_currencies?starting_after=9fjeja8fjed",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/virtual_currencies"
}`
tag/Customer/operation/create-virtual-currencies-transaction Create a virtual currencies transaction
post/projects/{project_id}/customers/{customer_id}/virtual_currencies/transactions
This endpoint requires the following permission(s): customer_information:purchases:read_write. This endpoint belongs to the Virtual Currencies - Create Transaction domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
query Parameters
| include_empty_balances | boolean Example: include_empty_balances=true |
header Parameters
| Idempotency-Key | string Example: 1234-5678-9101-1121 This is an optional idempotency key to ensure exactly once execution of the request. |
Request Body schema: application/json required
| adjustments required |
object The adjustments to the virtual currencies |
| --- | --- |
| property name* additional property |
integer |
| reference | string or null The reference of the transaction |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"adjustments": {"property1": 0,
"property2": 0
},
"reference": "string"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "virtual_currency_balance",
"currency_code": "string",
"balance": 0,
"description": "string",
"name": "string"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/virtual_currencies?starting_after=9fjeja8fjed",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/virtual_currencies"
}`
tag/Customer/operation/update-virtual-currencies-balance Update a virtual currencies balance without creating a transaction
post/projects/{project_id}/customers/{customer_id}/virtual_currencies/update_balance
Authorizations:
BearerAuth
path Parameters
query Parameters
| include_empty_balances | boolean Example: include_empty_balances=true |
header Parameters
Request Body schema: application/json required
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"adjustments": {"property1": 0,
"property2": 0
},
"reference": "string"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "virtual_currency_balance",
"currency_code": "string",
"balance": 0,
"description": "string",
"name": "string"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/virtual_currencies?starting_after=9fjeja8fjed",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/virtual_currencies"
}`
tag/Customer/operation/list-customer-attributes Get a list of the customer's attributes
get/projects/{project_id}/customers/{customer_id}/attributes
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/attributes
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}`
tag/Customer/operation/set-customer-attributes Set a customer's attributes
post/projects/{project_id}/customers/{customer_id}/attributes
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/attributes
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| attributes required |
Array of objects [ 1 .. 50 ] items |
| Array ([ 1 .. 50 ] items) |
| name required |
CustomerAttributeReservedName (string) or CustomerAttributeCustomName (string) [ 1 .. 40 ] characters The name of the attribute |
| value required |
string or null <= 500 characters The value of the attribute. Use null to delete the attribute. |
Responses
200
Success. The customer attributes were set
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"attributes": [{"name": "$email",
"value": "support@revenuecat.com"
},
{"name": "$displayName",
"value": "John Appleseed"
},
{"name": "my_custom_attr",
"value": "custom value"
}
]
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "customer.attribute",
"name": "$email",
"value": "garfield@revenuecat.com",
"updated_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes?starting_after=myCustomAttribute",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/attributes"
}`
tag/Entitlement Entitlement
Operations about entitlements.
tag/Entitlement/operation/get-entitlement Get an entitlement
get/projects/{project_id}/entitlements/{entitlement_id}
https://api.revenuecat.com/v2/projects/{project\_id}/entitlements/{entitlement\_id}
This endpoint requires the following permission(s): project_configuration:entitlements:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| entitlement_id required |
string [ 1 .. 255 ] characters Example: entla1b2c3d4e5 ID of the entitlement |
query Parameters
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Value:"product" Example: expand=product Specifies which fields in the response should be expanded. Accepted values are: product (requires project_configuration:products:read permission). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}`
tag/Entitlement/operation/update-entitlement Update an entitlement
post/projects/{project_id}/entitlements/{entitlement_id}
https://api.revenuecat.com/v2/projects/{project\_id}/entitlements/{entitlement\_id}
This endpoint requires the following permission(s): project_configuration:entitlements:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| display_name required |
string [ 1 .. 1500 ] characters The display name of the entitlement |
Responses
200
Success. The entitlement was updated
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"display_name": "Premium"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}`
tag/Entitlement/operation/delete-entitlement Delete an entitlement
delete/projects/{project_id}/entitlements/{entitlement_id}
https://api.revenuecat.com/v2/projects/{project\_id}/entitlements/{entitlement\_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "app",
"id": "string",
"deleted_at": 1658399423658
}`
tag/Entitlement/operation/list-entitlements Get a list of entitlements
get/projects/{project_id}/entitlements
https://api.revenuecat.com/v2/projects/{project\_id}/entitlements
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Value:"items.product" Example: expand=items.product Specifies which fields in the response should be expanded. Accepted values are: items.product (requires project_configuration:products:read permission). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements"
}`
tag/Entitlement/operation/create-entitlement Create an entitlement
post/projects/{project_id}/entitlements
https://api.revenuecat.com/v2/projects/{project\_id}/entitlements
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
| lookup_key required |
string [ 1 .. 200 ] characters The identifier of the entitlement |
| display_name required |
string [ 1 .. 1500 ] characters The display name of the entitlement |
Responses
201
Success. The entitlement was created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"lookup_key": "premium",
"display_name": "Premium access to all features"
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}`
tag/Entitlement/operation/get-products-from-entitlement Get a list of products attached to a given entitlement
get/projects/{project_id}/entitlements/{entitlement_id}/products
https://api.revenuecat.com/v2/projects/{project\_id}/entitlements/{entitlement\_id}/products
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entla1b2c3d4e5/products?starting_after=prod1a2b3c4d5",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entla1b2c3d4e5/products"
}`
tag/Entitlement/operation/archive-entitlement Archive an entitlement
post/projects/{project_id}/entitlements/{entitlement_id}/actions/archive
https://api.revenuecat.com/v2/projects/{project\_id}/entitlements/{entitlement\_id}/actions/archive
Archives an entitlement (makes it inactive).
This endpoint requires the following permission(s): project_configuration:entitlements:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The entitlement was archived
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}`
tag/Entitlement/operation/unarchive-entitlement Unarchive an entitlement
post/projects/{project_id}/entitlements/{entitlement_id}/actions/unarchive
Unarchives an entitlement (makes it active).
This endpoint requires the following permission(s): project_configuration:entitlements:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The entitlement was unarchived
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}`
tag/Entitlement/operation/attach-products-to-entitlement Attach a set of products to an entitlement
post/projects/{project_id}/entitlements/{entitlement_id}/actions/attach_products
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| product_ids required |
Array of strings [ 1 .. 50 ] characters [ items [ 1 .. 255 ] characters ] IDs of the products to be attached to the entitlement. |
Responses
200
Success. The products were attached to the entitlement
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"product_ids": ["prod1a2b3c4d5e"
]
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}`
tag/Entitlement/operation/detach-products-from-entitlement Detach a set of product from an entitlement
post/projects/{project_id}/entitlements/{entitlement_id}/actions/detach_products
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| product_ids required |
Array of strings [ 1 .. 50 ] characters [ items [ 1 .. 255 ] characters ] IDs of the products to be detached from the entitlement. |
Responses
200
Success. The products were detached from the entitlement
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"product_ids": ["prod1a2b3c4d5e"
]
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "entitlement",
"project_id": "proj1ab2c3d4",
"id": "entla1b2c3d4e5",
"lookup_key": "premium",
"display_name": "Premium",
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products?starting_after=prodeab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements/entle1a2b3c4d5/products"
}
}`
tag/Offering Offering
Operations about offerings.
tag/Offering/operation/get-offering Get an offering
get/projects/{project_id}/offerings/{offering_id}
https://api.revenuecat.com/v2/projects/{project\_id}/offerings/{offering\_id}
This endpoint requires the following permission(s): project_configuration:offerings:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| offering_id required |
string [ 1 .. 255 ] characters Example: ofrnge1a2b3c4d5 ID of the offering |
query Parameters
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Enum:"package""package.product" Example: expand=package 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). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"items": [{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": null
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
},
"eligibility_criteria": "all"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
}`
tag/Offering/operation/update-offering Update an offering
post/projects/{project_id}/offerings/{offering_id}
https://api.revenuecat.com/v2/projects/{project\_id}/offerings/{offering\_id}
This endpoint requires the following permission(s): project_configuration:offerings:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| display_name | string [ 1 .. 1500 ] characters The display name of the offering |
| is_current | boolean Indicates if the offering is the current offering |
| metadata | object or null (OfferingMetadata) Custom metadata of the offering |
| --- | --- |
| property name* additional property |
any |
Responses
200
Success. The offering was updated
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"display_name": "premium access to features",
"is_current": true,
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
}
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
}`
tag/Offering/operation/delete-offering Delete an offering and its attached packages
delete/projects/{project_id}/offerings/{offering_id}
https://api.revenuecat.com/v2/projects/{project\_id}/offerings/{offering\_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "app",
"id": "string",
"deleted_at": 1658399423658
}`
tag/Offering/operation/archive-offering Archive an offering
post/projects/{project_id}/offerings/{offering_id}/actions/archive
https://api.revenuecat.com/v2/projects/{project\_id}/offerings/{offering\_id}/actions/archive
Archives an offering (makes it inactive).
This endpoint requires the following permission(s): project_configuration:offerings:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The offering was archived
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
}`
tag/Offering/operation/unarchive-offering Unarchive an offering
post/projects/{project_id}/offerings/{offering_id}/actions/unarchive
https://api.revenuecat.com/v2/projects/{project\_id}/offerings/{offering\_id}/actions/unarchive
Unarchives an offering (makes it active).
This endpoint requires the following permission(s): project_configuration:offerings:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json optional
| unarchive_referenced_entities | boolean Default: false If true, also unarchive any archived products referenced by this offering's packages. |
Responses
200
Success. The offering was unarchived
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"unarchive_referenced_entities": false
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
}`
tag/Offering/operation/list-offerings Get a list of offerings
get/projects/{project_id}/offerings
https://api.revenuecat.com/v2/projects/{project\_id}/offerings
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Enum:"items.package""items.package.product" Example: expand=items.package 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). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"items": [{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"product": {"state": null,
"object": null,
"id": null,
"store_identifier": null,
"type": null,
"subscription": null,
"one_time": null,
"created_at": null,
"app_id": null,
"app": null,
"indicative_price": null,
"display_name": null
},
"eligibility_criteria": "all"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings?starting_after=ofrngeab21da",
"url": "/v2/projects/proj1ab2c3d4/offerings"
}`
tag/Offering/operation/create-offering Create an offering
post/projects/{project_id}/offerings
https://api.revenuecat.com/v2/projects/{project\_id}/offerings
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
| lookup_key required |
string [ 1 .. 200 ] characters The custom identifier of the offering |
| display_name required |
string [ 1 .. 1500 ] characters The display_name of the offering |
| metadata | object or null (OfferingMetadata) Custom metadata of the offering |
| --- | --- |
| property name* additional property |
any |
Responses
201
Success. The offering was created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"lookup_key": "default",
"display_name": "The standard set of packages",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
}
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
}`
tag/Package Package
Operations about packages.
tag/Package/operation/get-package Get a package
get/projects/{project_id}/packages/{package_id}
https://api.revenuecat.com/v2/projects/{project\_id}/packages/{package\_id}
This endpoint requires the following permission(s): project_configuration:packages:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| package_id required |
string [ 1 .. 255 ] characters Example: pkge1a2b3c4d5 ID of the package |
query Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
},
"eligibility_criteria": "all"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}`
tag/Package/operation/update-package Update a package
post/projects/{project_id}/packages/{package_id}
https://api.revenuecat.com/v2/projects/{project\_id}/packages/{package\_id}
This endpoint requires the following permission(s): project_configuration:packages:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| display_name | string [ 1 .. 1500 ] characters The display name of the package |
| position | integer >= 1 The position of the package within the offering |
Responses
200
Success. The package was updated
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"display_name": "monthly with one-week trial",
"position": 2
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}`
tag/Package/operation/delete-package-from-offering Delete a package
delete/projects/{project_id}/packages/{package_id}
https://api.revenuecat.com/v2/projects/{project\_id}/packages/{package\_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "app",
"id": "string",
"deleted_at": 1658399423658
}`
tag/Package/operation/list-packages Get a list of packages in an offering
get/projects/{project_id}/offerings/{offering_id}/packages
https://api.revenuecat.com/v2/projects/{project\_id}/offerings/{offering\_id}/packages
Authorizations:
BearerAuth
path Parameters
query Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}`
tag/Package/operation/create-packages Create a package
post/projects/{project_id}/offerings/{offering_id}/packages
https://api.revenuecat.com/v2/projects/{project\_id}/offerings/{offering\_id}/packages
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| lookup_key required |
string [ 1 .. 200 ] characters The lookup_key of the package |
| display_name required |
string [ 1 .. 1500 ] characters The display name of the package |
| position | integer The position of the package in the offering |
Responses
201
Success. The package was created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"lookup_key": "monthly",
"display_name": "monthly with one-week trial",
"position": 1
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}`
tag/Package/operation/get-products-from-package Get a list of products attached to a given package of an offering
get/projects/{project_id}/packages/{package_id}/products
https://api.revenuecat.com/v2/projects/{project\_id}/packages/{package\_id}/products
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/packages/pkge1a2b3c4d5/products?starting_after=prod1a2b3c4d5",
"url": "/v2/projects/proj1ab2c3d4/packages/pkge1a2b3c4d5/products"
}`
tag/Package/operation/attach-products-to-package Attach a set of products to a package
post/projects/{project_id}/packages/{package_id}/actions/attach_products
https://api.revenuecat.com/v2/projects/{project\_id}/packages/{package\_id}/actions/attach\_products
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| products required |
Array of objects (PackageProductIDAssociation) [ 1 .. 50 ] characters Product association list |
| Array |
| product_id required |
string [ 1 .. 255 ] characters |
| eligibility_criteria required |
string (EligibilityCriteria) Enum:"all""google_sdk_lt_6""google_sdk_ge_6" |
Responses
200
Success. The products were attached to the package.
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Example
Single product for package (applies to any store)Play Store with different products depending on SDK version (SDK v6+ and SDK <v5) for one packageSingle product for package (applies to any store)
Copy Expand all Collapse all
`{"products": [{"product_id": "prod1a2b3c4d5e",
"eligibility_criteria": "all"
}
]
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}`
tag/Package/operation/detach-products-from-package Detach a set of products from a package
post/projects/{project_id}/packages/{package_id}/actions/detach_products
https://api.revenuecat.com/v2/projects/{project\_id}/packages/{package\_id}/actions/detach\_products
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| product_ids required |
Array of strings [ 1 .. 50 ] characters [ items [ 1 .. 255 ] characters ] IDs of the products to detach from the package |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"product_ids": ["prod1a2b3c4d5e"
]
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}`
tag/Product Product
Operations about products.
tag/Product/operation/get-product Get a product
get/projects/{project_id}/products/{product_id}
https://api.revenuecat.com/v2/projects/{project\_id}/products/{product\_id}
This endpoint requires the following permission(s): project_configuration:products:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| product_id required |
string [ 1 .. 255 ] characters Example: prod1a2b3c4d5 ID of the product |
query Parameters
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Value:"app" Example: expand=app Specifies which fields in the response should be expanded. Accepted values are: app (requires project_configuration:apps:read permission). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
}`
tag/Product/operation/update-product Update a product
post/projects/{project_id}/products/{product_id}
https://api.revenuecat.com/v2/projects/{project\_id}/products/{product\_id}
This endpoint requires the following permission(s): project_configuration:products:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
query Parameters
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Specifies which fields in the response should be expanded. |
Request Body schema: application/json required
| display_name | string <= 1500 characters The display name of the product |
Responses
200
Success. The product was updated
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"display_name": "string"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
}`
tag/Product/operation/delete-product Delete a product
delete/projects/{project_id}/products/{product_id}
https://api.revenuecat.com/v2/projects/{project\_id}/products/{product\_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "app",
"id": "string",
"deleted_at": 1658399423658
}`
tag/Product/operation/archive-product Archive a product
post/projects/{project_id}/products/{product_id}/actions/archive
https://api.revenuecat.com/v2/projects/{project\_id}/products/{product\_id}/actions/archive
Archives a product (makes it inactive).
This endpoint requires the following permission(s): project_configuration:products:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The product was archived
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
}`
tag/Product/operation/unarchive-product Unarchive a product
post/projects/{project_id}/products/{product_id}/actions/unarchive
https://api.revenuecat.com/v2/projects/{project\_id}/products/{product\_id}/actions/unarchive
Unarchives a product (makes it active).
This endpoint requires the following permission(s): project_configuration:products:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The product was unarchived
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
}`
tag/Product/operation/create-product-in-store Push a product to the store
post/projects/{project_id}/products/{product_id}/create_in_store
https://api.revenuecat.com/v2/projects/{project\_id}/products/{product\_id}/create\_in\_store
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): project_configuration:products:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json optional
Store-specific information. Only required for subscription products. For in-app purchase products, send an empty body or omit the request body entirely.
| store_information | CreateAppStoreConnectSubscriptionInput (object) or CreateAppStoreConnectInAppPurchaseInput (object) Store-specific information for creating the product in the store |
| One of |
CreateAppStoreConnectSubscriptionInputCreateAppStoreConnectInAppPurchaseInput
| duration required |
string Enum:"ONE_WEEK""ONE_MONTH""TWO_MONTHS""THREE_MONTHS""SIX_MONTHS""ONE_YEAR" The subscription duration period |
| subscription_group_name required |
string [ 1 .. 255 ] characters The name of the subscription group |
| subscription_group_id | string or null [ 1 .. 255 ] characters The ID of the subscription group (optional) |
Responses
201
Success. The product was pushed to the store
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Example
Creating a subscription productCreating an in-app purchase product (no body needed)Creating a subscription product
Copy Expand all Collapse all
`{"store_information": {"duration": "ONE_MONTH",
"subscription_group_name": "Premium Subscriptions",
"subscription_group_id": "sub_group_123"
}
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"created_product": {"object": "store_product",
"id": 1234567890,
"name": "Premium Monthly Subscription",
"product_identifier": "com.example.premium_monthly"
}
}`
tag/Product/operation/list-products Get a list of products
get/projects/{project_id}/products
https://api.revenuecat.com/v2/projects/{project\_id}/products
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| app_id | string Example: app_id=app1a2b3c4 This is an optional query parameter to get a list of products of a given entitlement associated with a particular app |
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Value:"items.app" Example: expand=items.app Specifies which fields in the response should be expanded. Accepted values are: items.app (requires project_configuration:apps:read permission). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/products"
}`
tag/Product/operation/create-product Create a product
post/projects/{project_id}/products
https://api.revenuecat.com/v2/projects/{project\_id}/products
Warning
This endpoint does not allow to create Web Billing products.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
| store_identifier required |
string [ 1 .. 200 ] characters 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. |
| app_id required |
string [ 1 .. 255 ] characters The ID of the app |
| type required |
string (ProductType) Enum:"subscription""one_time""consumable""non_consumable""non_renewing_subscription" |
| display_name | string or null [ 1 .. 1500 ] characters The display name of the product |
| subscription | object or null (ProductSubscriptionInput) Subscription parameters for product creation. Only supported for simulated store products. |
| --- | --- |
| duration required |
string (Duration) Enum:"P1W""P1M""P2M""P3M""P6M""P1Y" The duration of the product subscription. This field is only supported for the test store and it is ignored for other stores. |
| title | string or null [ 1 .. 1500 ] characters The user-facing title of the product. This field is required for Test Store products. |
Responses
201
Success. The product was created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Example
App StorePlay Store Billing Client 4StripeAmazonPlay Store Subscription Billing Client 5Play Store One-time Billing Client 5Test StoreApp Store
Copy
`{"store_identifier": "com.revenuecat.magicweather.monthly9.99",
"app_id": "app1a2b3c4",
"type": "subscription",
"display_name": "Premium Monthly 2023"
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
}`
tag/Virtual-Currency Virtual Currency
Operations about virtual currencies.
tag/Virtual-Currency/operation/list-virtual-currencies Get a list of virtual currencies
get/projects/{project_id}/virtual_currencies
https://api.revenuecat.com/v2/projects/{project\_id}/virtual\_currencies
This endpoint requires the following permission(s): project_configuration:virtual_currencies:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"state": "active",
"object": "virtual_currency",
"project_id": "proj1ab2c3d4",
"code": "GLD",
"name": "Gold",
"created_at": 1658399423658,
"description": "Gold currency used in the game",
"product_grants": [{"object": "virtual_currency.product_grant",
"product_ids": ["prode1a2b3c4d5"
],
"amount": 100,
"trial_amount": 0,
"expire_at_cycle_end": false
}
]
}
],
"next_page": "/v2/projects/proj1ab2c3d4/virtual_currencies?starting_after=GLD",
"url": "/v2/projects/proj1ab2c3d4/virtual_currencies"
}`
tag/Virtual-Currency/operation/create-virtual-currency Create a virtual currency
post/projects/{project_id}/virtual_currencies
https://api.revenuecat.com/v2/projects/{project\_id}/virtual\_currencies
This endpoint requires the following permission(s): project_configuration:virtual_currencies:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
| code required |
string [ 1 .. 10 ] characters ^[a-zA-Z0-9_]+$ The unique code for this virtual currency |
| name required |
string [ 1 .. 50 ] characters The display name of the virtual currency |
| description | string or null [ 1 .. 1500 ] characters Description of the virtual currency |
| product_grants | Array of objects or null (VirtualCurrencyProductGrantInput) Product grants that define how products grant this virtual currency |
| Array |
| product_ids required |
Array of strings non-empty [ items [ 1 .. 255 ] characters ] The list of product IDs that grant this virtual currency |
| amount required |
integer >= 1 The amount of virtual currency granted |
| trial_amount | integer or null >= 0 The amount of virtual currency granted during trial period |
| expire_at_cycle_end | boolean or null Whether the grant expires at the end of the subscription cycle |
Responses
201
Success. The virtual currency was created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"code": "GLD",
"name": "Gold",
"description": "Gold currency used in the game",
"product_grants": [{"product_ids": ["prode1a2b3c4d5"
],
"amount": 100,
"trial_amount": 0,
"expire_at_cycle_end": false
}
]
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "virtual_currency",
"project_id": "proj1ab2c3d4",
"code": "GLD",
"name": "Gold",
"created_at": 1658399423658,
"description": "Gold currency used in the game",
"product_grants": [{"object": "virtual_currency.product_grant",
"product_ids": ["prode1a2b3c4d5"
],
"amount": 100,
"trial_amount": 0,
"expire_at_cycle_end": false
}
]
}`
tag/Virtual-Currency/operation/get-virtual-currency Get a virtual currency
get/projects/{project_id}/virtual_currencies/{virtual_currency_code}
https://api.revenuecat.com/v2/projects/{project\_id}/virtual\_currencies/{virtual\_currency\_code}
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| virtual_currency_code required |
string [ 1 .. 10 ] characters ^[a-zA-Z0-9_]+$ The virtual currency code |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "virtual_currency",
"project_id": "proj1ab2c3d4",
"code": "GLD",
"name": "Gold",
"created_at": 1658399423658,
"description": "Gold currency used in the game",
}`
tag/Virtual-Currency/operation/update-virtual-currency Update a virtual currency
post/projects/{project_id}/virtual_currencies/{virtual_currency_code}
https://api.revenuecat.com/v2/projects/{project\_id}/virtual\_currencies/{virtual\_currency\_code}
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| name | string [ 1 .. 50 ] characters The display name of the virtual currency |
| description | string or null [ 1 .. 1500 ] characters Description of the virtual currency |
| product_grants | Array of objects or null (VirtualCurrencyProductGrantInput) Product grants that define how products grant this virtual currency |
| Array |
Responses
200
Success. The virtual currency was updated
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"name": "Gold",
"description": "Gold currency used in the game",
"product_grants": [{"product_ids": ["prode1a2b3c4d5"
],
"amount": 100,
"trial_amount": 0,
"expire_at_cycle_end": false
}
]
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "virtual_currency",
"project_id": "proj1ab2c3d4",
"code": "GLD",
"name": "Gold",
"created_at": 1658399423658,
"description": "Gold currency used in the game",
}`
tag/Virtual-Currency/operation/delete-virtual-currency Delete a virtual currency
delete/projects/{project_id}/virtual_currencies/{virtual_currency_code}
https://api.revenuecat.com/v2/projects/{project\_id}/virtual\_currencies/{virtual\_currency\_code}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The virtual currency was deleted
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "app",
"id": "string",
"deleted_at": 1658399423658
}`
tag/Virtual-Currency/operation/archive-virtual-currency Archive a virtual currency
post/projects/{project_id}/virtual_currencies/{virtual_currency_code}/actions/archive
Archives a virtual currency (makes it inactive).
This endpoint requires the following permission(s): project_configuration:virtual_currencies:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The virtual currency was archived
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "virtual_currency",
"project_id": "proj1ab2c3d4",
"code": "GLD",
"name": "Gold",
"created_at": 1658399423658,
"description": "Gold currency used in the game",
}`
tag/Virtual-Currency/operation/unarchive-virtual-currency Unarchive a virtual currency
post/projects/{project_id}/virtual_currencies/{virtual_currency_code}/actions/unarchive
Unarchives a virtual currency (makes it active).
This endpoint requires the following permission(s): project_configuration:virtual_currencies:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The virtual currency was unarchived
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"state": "active",
"object": "virtual_currency",
"project_id": "proj1ab2c3d4",
"code": "GLD",
"name": "Gold",
"created_at": 1658399423658,
"description": "Gold currency used in the game",
}`
tag/Purchase Purchase
Operations about purchases.
tag/Purchase/operation/get-purchase Get a purchase
get/projects/{project_id}/purchases/{purchase_id}
https://api.revenuecat.com/v2/projects/{project\_id}/purchases/{purchase\_id}
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| purchase_id required |
string [ 1 .. 255 ] characters Example: purc1a2b3c4d5e ID of the purchase |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "purchase",
"id": "purch1a2b3c4d5e",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"purchased_at": 1658399423658,
"revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"quantity": 1,
"status": "owned",
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/purchases/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/purchases/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_purchase_identifier": 12345678,
"ownership": "purchased",
"country": "US"
}`
tag/Purchase/operation/list-purchase-entitlements Get a list of entitlements associated with a purchase
get/projects/{project_id}/purchases/{purchase_id}/entitlements
https://api.revenuecat.com/v2/projects/{project\_id}/purchases/{purchase\_id}/entitlements
Lists all Entitlements granted by a Purchase.
This endpoint requires the following permission(s): customer_information:purchases:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements"
}`
tag/Purchase/operation/refund-purchase Refund a Web Billing purchase
post/projects/{project_id}/purchases/{purchase_id}/actions/refund
https://api.revenuecat.com/v2/projects/{project\_id}/purchases/{purchase\_id}/actions/refund
Refund a Web Billing purchase and revoke access to associated granted entitlements.
This endpoint requires the following permission(s): customer_information:purchases:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The purchase has been successfully refunded.
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "purchase",
"id": "purch1a2b3c4d5e",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"purchased_at": 1658399423658,
"revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"quantity": 1,
"status": "owned",
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/purchases/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/purchases/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_purchase_identifier": 12345678,
"ownership": "purchased",
"country": "US"
}`
tag/Purchase/operation/search-purchases Search one-time purchases by store purchase identifier
get/projects/{project_id}/purchases
https://api.revenuecat.com/v2/projects/{project\_id}/purchases
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): customer_information:purchases:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| store_purchase_identifier required |
string [ 1 .. 255 ] characters Examples: - store_purchase_identifier=9aJscueFTxLPZXXo-AlBTkI0OnFXR2qiH14C1aqWnOT=:3:11 - Amazon Appstore - store_purchase_identifier=100001234567890 - Apple App Store - store_purchase_identifier=txn_01jss4bz50g1z5yw121npeb3ag - Paddle - store_purchase_identifier=GPA.1234-5678-9012-34567 - Google Play Store - store_purchase_identifier=txRcb553a54d4738816a63f1a05cfcb1723e3 - RevenueCat Web Billing - store_purchase_identifier=4ab8df12-3003-11f0-9646-8ac68bcdcaed - Roku - store_purchase_identifier=si_Rww1psqupbKxmt - Stripe Store ID associated with the one-time purchase. |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/purchases?starting_after=purc1a2b3c4d5e",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/purchases"
}`
tag/Subscription Subscription
Operations about subscriptions.
tag/Subscription/operation/get-subscription Get a subscription
get/projects/{project_id}/subscriptions/{subscription_id}
https://api.revenuecat.com/v2/projects/{project\_id}/subscriptions/{subscription\_id}
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| subscription_id required |
string [ 1 .. 255 ] characters Example: sub1a2b3c4d5e ID of the subscription |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "subscription",
"id": "sub1ab2c3d4e5",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"starts_at": 1658399423658,
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1658399423658,
"ends_at": 1658399423658,
"gives_access": true,
"pending_payment": true,
"auto_renewal_status": "will_renew",
"status": "trialing",
"total_revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_subscription_identifier": 12345678,
"ownership": "purchased",
"pending_changes": {"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
},
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1660991423658,
"store_subscription_identifier": 12345679,
"auto_renewal_status": "will_renew",
"status": "active",
"pending_payment": false,
"gives_access": true
},
"country": "US",
"management_url": "https://apps.apple.com/account/subscriptions"
}`
tag/Subscription/operation/get-play-store-or-app-store-subscription-transactions Get a Play Store or App Store subscription's transactions
get/projects/{project_id}/subscriptions/{subscription_id}/transactions
https://api.revenuecat.com/v2/projects/{project\_id}/subscriptions/{subscription\_id}/transactions
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
| sort | string Default: "id" Enum:"id""purchased_at" Example: sort=purchased_at Column to sort the result list by. |
| direction | string Default: "asc" Enum:"asc""desc" Example: direction=desc Sort direction for the result list. |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "subscription_transaction",
"id": "GPA.0000-0000-0000-00000",
"purchased_at": 1658399423658,
"product_store_identifier": "com.example.product",
"revenue_in_local_currency": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"expiration_date": 1658399423658,
"effective_expiration_date": 1658399423658
}
],
"next_page": "/v2/projects/proj123/subscriptions/sub123/transactions?starting_after=GPA.0000-0000-0000-00000",
"url": "/v2/projects/proj123/subscriptions/sub123/transactions"
}`
tag/Subscription/operation/refund-play-store-or-galaxy-subscription-transaction Refund a Play Store or Galaxy subscription's transaction
post/projects/{project_id}/subscriptions/{subscription_id}/transactions/{transaction_id}/actions/refund
Refund and cancel a Play Store or Galaxy subscription's transaction. Access to the subscription will be revoked. This endpoint requires the following permission(s): customer_information:subscriptions:read_write. This endpoint belongs to the Subscription Transactions Refunds domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| subscription_id required |
string [ 1 .. 255 ] characters Example: sub1a2b3c4d5e ID of the subscription |
| transaction_id required |
string [ 1 .. 255 ] characters Example: GPA.000-000-000-000 Identifier of the transaction in the store |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "subscription_transaction",
"id": "GPA.0000-0000-0000-00000",
"purchased_at": 1658399423658,
"product_store_identifier": "com.example.product",
"revenue_in_local_currency": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"expiration_date": 1658399423658,
"effective_expiration_date": 1658399423658
}`
tag/Subscription/operation/list-subscription-entitlements Get a list of entitlements associated with a subscription
get/projects/{project_id}/subscriptions/{subscription_id}/entitlements
https://api.revenuecat.com/v2/projects/{project\_id}/subscriptions/{subscription\_id}/entitlements
Lists all Entitlements granted by a Subscription.
This endpoint requires the following permission(s): customer_information:subscriptions:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/entitlements?starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/entitlements"
}`
tag/Subscription/operation/cancel-subscription Cancel an active Web Billing subscription
post/projects/{project_id}/subscriptions/{subscription_id}/actions/cancel
https://api.revenuecat.com/v2/projects/{project\_id}/subscriptions/{subscription\_id}/actions/cancel
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): customer_information:subscriptions:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The subscription has been successfully canceled.
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "subscription",
"id": "sub1ab2c3d4e5",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"starts_at": 1658399423658,
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1658399423658,
"ends_at": 1658399423658,
"gives_access": true,
"pending_payment": true,
"auto_renewal_status": "will_renew",
"status": "trialing",
"total_revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_subscription_identifier": 12345678,
"ownership": "purchased",
"pending_changes": {"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
},
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1660991423658,
"store_subscription_identifier": 12345679,
"auto_renewal_status": "will_renew",
"status": "active",
"pending_payment": false,
"gives_access": true
},
"country": "US",
"management_url": "https://apps.apple.com/account/subscriptions"
}`
tag/Subscription/operation/extend-subscription Extend the current billing period of a subscription
post/projects/{project_id}/subscriptions/{subscription_id}/actions/extend
https://api.revenuecat.com/v2/projects/{project\_id}/subscriptions/{subscription\_id}/actions/extend
Extend the current billing period of a subscription. Provide either extend_by_days to extend by a number of days, or extend_until_ms to extend to an absolute epoch-millisecond timestamp. Supported on Apple Store, Google Play Store, and Web Billing subscriptions. For Apple Store subscriptions, extend_reason_code is required and the extension is capped at 90 days.
This endpoint requires the following permission(s): customer_information:subscriptions:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
One of
ExtendSubscriptionByDurationExtendSubscriptionUntilDate
| extend_by_days required |
integer >= 1 Number of days to extend the current billing period by. For Apple Store subscriptions, the maximum allowed value is 90. |
| extend_reason_code | string Enum:"undeclared""customer_satisfaction""other""service_issue_or_outage" Reason for the extension. Required for Apple Store subscriptions; ignored for Google Play and Web Billing subscriptions. |
Responses
200
Success. The subscription's current billing period has been extended.
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Example
ExtendSubscriptionByDurationExtendSubscriptionUntilDateExtendSubscriptionByDuration
Copy
`{"extend_by_days": 14,
"extend_reason_code": "customer_satisfaction"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "subscription",
"id": "sub1ab2c3d4e5",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"starts_at": 1658399423658,
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1658399423658,
"ends_at": 1658399423658,
"gives_access": true,
"pending_payment": true,
"auto_renewal_status": "will_renew",
"status": "trialing",
"total_revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_subscription_identifier": 12345678,
"ownership": "purchased",
"pending_changes": {"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
},
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1660991423658,
"store_subscription_identifier": 12345679,
"auto_renewal_status": "will_renew",
"status": "active",
"pending_payment": false,
"gives_access": true
},
"country": "US",
"management_url": "https://apps.apple.com/account/subscriptions"
}`
tag/Subscription/operation/refund-subscription Refund an active Web Billing subscription
post/projects/{project_id}/subscriptions/{subscription_id}/actions/refund
https://api.revenuecat.com/v2/projects/{project\_id}/subscriptions/{subscription\_id}/actions/refund
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): customer_information:subscriptions:read_write. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success. The subscription has been successfully refunded.
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "subscription",
"id": "sub1ab2c3d4e5",
"customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"original_customer_id": "19b8de26-77c1-49f1-aa18-019a391603e2",
"product_id": "prod1a2b3c4d5e",
"starts_at": 1658399423658,
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1658399423658,
"ends_at": 1658399423658,
"gives_access": true,
"pending_payment": true,
"auto_renewal_status": "will_renew",
"status": "trialing",
"total_revenue_in_usd": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"presented_offering_id": "ofrnge1a2b3c4d5",
"entitlements": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements?status=active&starting_after=entlab21dac",
"url": "/v2/projects/proj1ab2c3d4/subscriptions/sub1a2b3c4d5e/entitlements"
},
"environment": "production",
"store": "amazon",
"store_subscription_identifier": 12345678,
"ownership": "purchased",
"pending_changes": {"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": "P1M",
"grace_period_duration": "P3D",
"trial_duration": "P1W"
},
"one_time": {"is_consumable": true
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": "app",
"id": "app1a2b3c4",
"name": "string",
"created_at": 1658399423658,
"type": "amazon",
"project_id": "proj1a2b3c4",
"amazon": {"package_name": "string"
}
},
"indicative_price": {"object": "indicative_price",
"currency": "USD",
"country": "US",
"amount_micros": "For 99.99, the value should be 99990000"
},
"display_name": "Premium Monthly 2023"
},
"current_period_starts_at": 1658399423658,
"current_period_ends_at": 1660991423658,
"store_subscription_identifier": 12345679,
"auto_renewal_status": "will_renew",
"status": "active",
"pending_payment": false,
"gives_access": true
},
"country": "US",
"management_url": "https://apps.apple.com/account/subscriptions"
}`
tag/Subscription/operation/get-authorized-subscription-management-url Get an authenticated subscription management URL
get/projects/{project_id}/subscriptions/{subscription_id}/authenticated_management_url
Get a secure, single-use URL that allows customers to access their Web Billing customer portal.
This endpoint requires the following permission(s): customer_information:subscriptions:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
502
Bad gateway
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 502
- 503
Content type
application/json
Copy
`{"object": "authenticated_management_url",
"management_url": "https://billing.revenuecat.com/app1a2b3c4/sub1ab2c3d4e5?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}`
tag/Subscription/operation/search-subscriptions Search subscriptions by store subscription identifier
get/projects/{project_id}/subscriptions
https://api.revenuecat.com/v2/projects/{project\_id}/subscriptions
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): customer_information:subscriptions:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| store_subscription_identifier required |
string [ 1 .. 255 ] characters Examples: - store_subscription_identifier=9aJscueFTxLPZXXo-AlBTkI0OnFXR2qiH14C1aqWnOT=:3:11..8 - Amazon Appstore - store_subscription_identifier=100001234567890 - Apple App Store - store_subscription_identifier=txn_01jss4bz50g1z5yw121npeb3ag - Paddle - store_subscription_identifier=GPA.1234-5678-9012-34567..0 - Google Play Store - store_subscription_identifier=txRcb553a54d4738816a63f1a05cfcb1723e3..1746748685 - RevenueCat Web Billing - store_subscription_identifier=4ab8df12-3003-11f0-9646-8ac68bcdcaed - Roku - store_subscription_identifier=si_Rww1psqupbKxmt - Stripe Store ID associated with the subscription for the current or next period. |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/subscriptions?starting_after=sub1a2b3c4d",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/subscriptions"
}`
tag/Invoice Invoice
Operations about invoices.
tag/Invoice/operation/list-customer-invoices Get a list of the customer's invoices
get/projects/{project_id}/customers/{customer_id}/invoices
https://api.revenuecat.com/v2/projects/{project\_id}/customers/{customer\_id}/invoices
This endpoint requires the following permission(s): customer_information:invoices:read. This endpoint belongs to the Customer Information domain, which has a default rate limit of 480 requests per minute.
Authorizations:
BearerAuth
path Parameters
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "invoice",
"id": "rcbin1a2b3c4d5e",
"total_amount": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
},
"line_items": [{"object": "invoice.line_item",
"product_identifier": "rc_1w_199",
"product_display_name": "Premium Monthly 2023",
"product_duration": "P1M",
"quantity": 1,
"unit_amount": {"currency": "USD",
"gross": 9.99,
"commission": 2.99,
"tax": 0.75,
"proceeds": 6.25
}
}
],
"issued_at": 1658399423658,
"paid_at": 1658399423658,
"invoice_url": "https://api.revenuecat.com/v2/projects/proj1ab2c3d4/customers/cust1ab2c3d4/invoices/inv1ab2c3d4/file"\
}
],
"next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/invoices?starting_after=rcbin1a2b3c4d5e",
"url": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-aa18-019a391603e2/invoices"
}`
tag/Invoice/operation/get-invoice Get an invoice
get/projects/{project_id}/customers/{customer_id}/invoices/{invoice_id}/file
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| customer_id required |
string [ 1 .. 1500 ] characters Example: 19b8de26-77c1-49f1-aa18-019a391603e2 ID of the customer |
| invoice_id required |
string [ 1 .. 1500 ] characters Example: rcbin1a2b3c4d5e ID of the invoice |
Responses
302
File found. Needs to be downloaded from the location header
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Example
parameter_errorinvalid_requestparameter_error
Copy
`{"object": "error",
"type": "parameter_error",
"param": "customer_id",
"message": "id is too long",
"retryable": false,
"doc_url": "https://errors.rev.cat/parameter-error"
}`
tag/Paywall Paywall
Operations about paywalls.
tag/Paywall/operation/create-media-asset Upload a media asset
post/projects/{project_id}/media_assets
https://api.revenuecat.com/v2/projects/{project\_id}/media\_assets
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
| filename required |
string [ 1 .. 255 ] characters File name for the uploaded image. |
| content_type required |
string Enum:"image/jpeg""image/png""image/avif""image/heic""image/heif""image/webp" MIME type for the uploaded image. |
| file_data_base64 required |
string [ 1 .. 2796204 ] characters Base64-encoded image bytes. |
Responses
201
Success. The media asset was uploaded.
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"filename": "hero.webp",
"content_type": "image/webp",
"file_data_base64": "UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "media_asset",
"id": "mediaasset123456789abcdef",
"object_name": "paywalls/originals/abc123.webp",
"original_name": "hero.webp",
"original_size": 12345,
"original_width": 1024,
"original_height": 1024,
"formats": {"property1": {"object": "media_asset_format",
"object_name": "paywalls/abc123.webp",
"size": 12345,
"width": 1024,
"height": 1024
},
"property2": {"object": "media_asset_format",
"object_name": "paywalls/abc123.webp",
"size": 12345,
"width": 1024,
"height": 1024
}
},
"alt_text": "A dog looking at a phone",
"is_decorative": false,
"asset_base_url": "https://paywalls-assets.revenuecat.com",
"asset_type": "image",
"video_metadata": { },
"transcoding_status": null
}`
tag/Paywall/operation/list-paywalls Get a list of paywalls
get/projects/{project_id}/paywalls
https://api.revenuecat.com/v2/projects/{project\_id}/paywalls
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Value:"items.offering" Example: expand=items.offering Specifies which fields in the response should be expanded. Accepted values are: items.offering (requires project_configuration:offerings:read permission). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "paywall",
"id": "pw123456789abcdef",
"name": "My Awesome Paywall",
"offering_id": "ofrng123456789a",
"created_at": 1658399423658,
"published_at": 1658399423958,
"automatically_scale_font_size": true,
"offering": {"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"items": [{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"product": null,
"eligibility_criteria": null
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
},
"components": {"published": {"revision": 1,
"components_config": {"base": {"stack": {"id": "l7Ylx2UZeA",
"type": "stack",
"components": [{"id": "LFVZUCf9yW",
"type": "text",
"text_lid": "OBUxLwsvXb"
}
]
},
"sticky_footer": {"id": "UJJRRPzRuz",
"type": "footer"
}
}
},
"default_locale": "en_US",
"components_localizations": {"en_US": {"title": "Premium"
}
},
"automatically_scale_font_size": true,
"fonts": {"CustomFont": {"src": "https://example.com/font.ttf"\
}
}
},
"draft": {"revision": 1,
"components_config": {"base": {"stack": {"id": "l7Ylx2UZeA",
"type": "stack",
"components": [{"id": "LFVZUCf9yW",
"type": "text",
"text_lid": "OBUxLwsvXb"
}
]
},
"sticky_footer": {"id": "UJJRRPzRuz",
"type": "footer"
}
}
},
"default_locale": "en_US",
"components_localizations": {"en_US": {"title": "Premium"
}
},
"automatically_scale_font_size": true,
"fonts": {"CustomFont": {"src": "https://example.com/font.ttf"\
}
}
}
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/paywalls?starting_after=pwXXXXXXXXXXXXXX",
"url": "/v2/projects/proj1ab2c3d4/paywalls"
}`
tag/Paywall/operation/create-paywall Create a paywall
post/projects/{project_id}/paywalls
https://api.revenuecat.com/v2/projects/{project\_id}/paywalls
Create a paywall draft for a project. You can either use the offering template shortcut or provide full draft components directly.
This endpoint requires the following permission(s): project_configuration:offerings:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
One of
objectobject
| offering_id required |
string [ 1 .. 200 ] characters The ID of the offering the paywall will be created for. |
| automatically_scale_font_size | boolean Default: true Whether font sizes should automatically scale for this paywall. Defaults to true. |
Responses
201
Success. The paywall was created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"offering_id": "ofrng123456789a",
"name": "Main Paywall",
"components_config": {"base": {"stack": {"id": "main_stack",
"type": "stack",
"components": [ ]
}
}
},
"components_localizations": {"en_US": {"title": "Premium"
}
},
"default_locale": "en_US",
"automatically_scale_font_size": true
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "paywall",
"id": "pw123456789abcdef",
"name": "My Awesome Paywall",
"offering_id": "ofrng123456789a",
"created_at": 1658399423658,
"published_at": 1658399423958,
"automatically_scale_font_size": true,
"offering": {"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"items": [{"object": "package",
"id": "pkge1a2b3c4d5",
"lookup_key": "monthly",
"display_name": "Monthly discounted with 3-day trial",
"position": 1,
"created_at": 1658399423658,
"products": {"object": "list",
"items": [{"product": {"state": "active",
"object": "product",
"id": "prod1a2b3c4d5e",
"store_identifier": "rc_1w_199",
"type": "subscription",
"subscription": {"duration": null,
"grace_period_duration": null,
"trial_duration": null
},
"one_time": {"is_consumable": null
},
"created_at": 1658399423658,
"app_id": "app1a2b3c4",
"app": {"object": null,
"id": null,
"name": null,
"created_at": null,
"type": null,
"project_id": null,
"amazon": { }
},
"indicative_price": {"object": null,
"currency": null,
"country": null,
"amount_micros": null
},
"display_name": "Premium Monthly 2023"
},
"eligibility_criteria": "all"
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products?starting_after=prodab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages/pkge1a2b3c4d5/products"
}
}
],
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
},
"components": {"published": {"revision": 1,
"components_config": {"base": {"stack": {"id": "l7Ylx2UZeA",
"type": "stack",
"components": [{"id": "LFVZUCf9yW",
"type": "text",
"text_lid": "OBUxLwsvXb"
}
]
},
"sticky_footer": {"id": "UJJRRPzRuz",
"type": "footer"
}
}
},
"default_locale": "en_US",
"components_localizations": {"en_US": {"title": "Premium"
}
},
"automatically_scale_font_size": true,
"fonts": {"CustomFont": {"src": "https://example.com/font.ttf"
}
}
},
"draft": {"revision": 1,
"components_config": {"base": {"stack": {"id": "l7Ylx2UZeA",
"type": "stack",
"components": [{"id": "LFVZUCf9yW",
"type": "text",
"text_lid": "OBUxLwsvXb"
}
]
},
"sticky_footer": {"id": "UJJRRPzRuz",
"type": "footer"
}
}
},
"default_locale": "en_US",
"components_localizations": {"en_US": {"title": "Premium"
}
},
"automatically_scale_font_size": true,
"fonts": {"CustomFont": {"src": "https://example.com/font.ttf"
}
}
}
}
}`
tag/Paywall/operation/get-paywall Get a paywall
get/projects/{project_id}/paywalls/{paywall_id}
https://api.revenuecat.com/v2/projects/{project\_id}/paywalls/{paywall\_id}
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| paywall_id required |
string [ 1 .. 255 ] characters Example: pwXXXXXXXXXXXXXX ID of the paywall |
query Parameters
| expand | Array of strings[ items [ 1 .. 5000 ] characters ] Items Enum:"offering""components" Example: expand=offering 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). |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "paywall",
"id": "pw123456789abcdef",
"name": "My Awesome Paywall",
"offering_id": "ofrng123456789a",
"created_at": 1658399423658,
"published_at": 1658399423958,
"automatically_scale_font_size": true,
"offering": {"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
},
"components": {"published": {"revision": 1,
"components_config": {"base": {"stack": {"id": "l7Ylx2UZeA",
"type": "stack",
"components": [{"id": "LFVZUCf9yW",
"type": "text",
"text_lid": "OBUxLwsvXb"
}
]
},
"sticky_footer": {"id": "UJJRRPzRuz",
"type": "footer"
}
}
},
"default_locale": "en_US",
"components_localizations": {"en_US": {"title": "Premium"
}
},
"automatically_scale_font_size": true,
"fonts": {"CustomFont": {"src": "https://example.com/font.ttf"
}
}
},
"draft": {"revision": 1,
"components_config": {"base": {"stack": {"id": "l7Ylx2UZeA",
"type": "stack",
"components": [{"id": "LFVZUCf9yW",
"type": "text",
"text_lid": "OBUxLwsvXb"
}
]
},
"sticky_footer": {"id": "UJJRRPzRuz",
"type": "footer"
}
}
},
"default_locale": "en_US",
"components_localizations": {"en_US": {"title": "Premium"
}
},
"automatically_scale_font_size": true,
"fonts": {"CustomFont": {"src": "https://example.com/font.ttf"
}
}
}
}
}`
tag/Paywall/operation/update-paywall Update a paywall draft
patch/projects/{project_id}/paywalls/{paywall_id}
https://api.revenuecat.com/v2/projects/{project\_id}/paywalls/{paywall\_id}
Update a paywall draft. If the paywall is already published, this updates its draft version without changing the published version.
This endpoint requires the following permission(s): project_configuration:offerings:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| revision required |
integer The current draft revision. Used to reject stale writes. |
| components_config required |
object The raw paywall components configuration to save as the draft. |
| --- | --- |
| property name* additional property |
any |
| components_localizations required |
object Localized component values keyed by locale. |
| --- | --- |
| property name* additional property |
object |
| --- | --- |
| property name* additional property |
any |
| default_locale required |
string [ 1 .. 255 ] characters The default locale for this paywall. |
| name | string or null [ 1 .. 255 ] characters Optional paywall name. |
| automatically_scale_font_size | boolean Whether font sizes should automatically scale for this paywall draft. |
Responses
200
Success. The paywall draft was updated.
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"revision": 1,
"components_config": {"base": {"stack": {"id": "main_stack",
"type": "stack",
"components": [ ]
}
}
},
"components_localizations": {"en_US": {"title": "Premium"
}
},
"default_locale": "en_US",
"name": "Main Paywall",
"automatically_scale_font_size": true
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "paywall",
"id": "pw123456789abcdef",
"name": "My Awesome Paywall",
"offering_id": "ofrng123456789a",
"created_at": 1658399423658,
"published_at": 1658399423958,
"automatically_scale_font_size": true,
"offering": {"state": "active",
"object": "offering",
"id": "ofrnge1a2b3c4d5",
"lookup_key": "default",
"display_name": "The standard set of packages",
"is_current": true,
"created_at": 1658399423658,
"project_id": "proj1ab2c3d4",
"metadata": {"color": "blue",
"call_to_action": "Subscribe Now!"
},
"packages": {"object": "list",
"next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
"url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}
},
"components": {"published": {"revision": 1,
"components_config": {"base": {"stack": {"id": "l7Ylx2UZeA",
"type": "stack",
"components": [{"id": "LFVZUCf9yW",
"type": "text",
"text_lid": "OBUxLwsvXb"
}
]
},
"sticky_footer": {"id": "UJJRRPzRuz",
"type": "footer"
}
}
},
"default_locale": "en_US",
"components_localizations": {"en_US": {"title": "Premium"
}
},
"automatically_scale_font_size": true,
"fonts": {"CustomFont": {"src": "https://example.com/font.ttf"
}
}
},
"draft": {"revision": 1,
"components_config": {"base": {"stack": {"id": "l7Ylx2UZeA",
"type": "stack",
"components": [{"id": "LFVZUCf9yW",
"type": "text",
"text_lid": "OBUxLwsvXb"
}
]
},
"sticky_footer": {"id": "UJJRRPzRuz",
"type": "footer"
}
}
},
"default_locale": "en_US",
"components_localizations": {"en_US": {"title": "Premium"
}
},
"automatically_scale_font_size": true,
"fonts": {"CustomFont": {"src": "https://example.com/font.ttf"
}
}
}
}
}`
tag/Paywall/operation/delete-paywall Delete a paywall
delete/projects/{project_id}/paywalls/{paywall_id}
https://api.revenuecat.com/v2/projects/{project\_id}/paywalls/{paywall\_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "app",
"id": "string",
"deleted_at": 1658399423658
}`
tag/Integration Integration
Operations about integrations.
tag/Integration/operation/list-webhook-integrations List webhook integrations
get/projects/{project_id}/integrations/webhooks
https://api.revenuecat.com/v2/projects/{project\_id}/integrations/webhooks
This endpoint requires the following permission(s): project_configuration:integrations:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "webhook_integration",
"id": "wh_1234567890abcdef",
"project_id": "proj_1234567890abcdef",
"name": "Customer updates webhook",
"url": "https://hooks.example.com/revenuecat",\
"environment": "production",
"event_types": ["initial_purchase"
],
"app_id": "app_1234567890abcdef",
"created_at": 1658399423658
}
],
"next_page": "/v2/projects/proj1ab2c3d4/integrations/webhooks?starting_after=whintgr1a2b3c4d",
"url": "/v2/projects/proj1ab2c3d4/integrations/webhooks"
}`
tag/Integration/operation/create-webhook-integration Create a webhook integration
post/projects/{project_id}/integrations/webhooks
https://api.revenuecat.com/v2/projects/{project\_id}/integrations/webhooks
This endpoint requires the following permission(s): project_configuration:integrations:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
Request Body schema: application/json required
| name required |
string [ 1 .. 1500 ] characters The display name of the webhook integration |
| url required |
string The URL RevenueCat will send webhook notifications to |
| authorization_header | string or null <= 5000 characters Optional authorization header that will be sent with webhook notifications |
| environment | string or null Enum:"production""sandbox"null The environment the webhook integration is configured for |
| event_types | Array of strings or null (WebhookEventType) Enum:"initial_purchase""renewal""product_change""cancellation""billing_issue""non_renewing_purchase""uncancellation""transfer""subscription_paused""expiration"… 5 more Event types that will trigger the webhook |
| app_id | string or null [ 1 .. 255 ] characters The ID of the app the webhook integration is scoped to |
Responses
201
Webhook integration created
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"name": "Customer updates webhook",
"url": "https://hooks.example.com/revenuecat",
"authorization_header": "Bearer 123456",
"environment": "production",
"event_types": ["initial_purchase"
],
"app_id": "app_1234567890abcdef"
}`
Response samples
- 201
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "webhook_integration",
"id": "wh_1234567890abcdef",
"project_id": "proj_1234567890abcdef",
"name": "Customer updates webhook",
"url": "https://hooks.example.com/revenuecat",
"environment": "production",
"event_types": ["initial_purchase"
],
"app_id": "app_1234567890abcdef",
"created_at": 1658399423658
}`
tag/Integration/operation/get-webhook-integration Get a webhook integration
get/projects/{project_id}/integrations/webhooks/{webhook_integration_id}
Authorizations:
BearerAuth
path Parameters
| project_id required |
string <= 255 characters Example: proj1ab2c3d4 ID of the project |
| webhook_integration_id required |
string [ 1 .. 255 ] characters Example: wh_1234567890abcdef The ID of the webhook integration |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "webhook_integration",
"id": "wh_1234567890abcdef",
"project_id": "proj_1234567890abcdef",
"name": "Customer updates webhook",
"url": "https://hooks.example.com/revenuecat",
"environment": "production",
"event_types": ["initial_purchase"
],
"app_id": "app_1234567890abcdef",
"created_at": 1658399423658
}`
tag/Integration/operation/update-webhook-integration Update a webhook integration
post/projects/{project_id}/integrations/webhooks/{webhook_integration_id}
Authorizations:
BearerAuth
path Parameters
Request Body schema: application/json required
| name | string [ 1 .. 1500 ] characters The display name of the webhook integration |
| url | string The URL RevenueCat will send webhook notifications to |
| authorization_header | string or null <= 5000 characters Optional authorization header that will be sent with webhook notifications |
| environment | string or null Enum:"production""sandbox"null The environment the webhook integration is configured for |
| event_types | Array of strings or null (WebhookEventType) Enum:"initial_purchase""renewal""product_change""cancellation""billing_issue""non_renewing_purchase""uncancellation""transfer""subscription_paused""expiration"… 5 more Event types that will trigger the webhook |
| app_id | string or null [ 1 .. 255 ] characters The ID of the app the webhook integration is scoped to |
Responses
200
Webhook integration updated
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy Expand all Collapse all
`{"name": "Customer updates webhook",
"url": "https://hooks.example.com/revenuecat",
"authorization_header": "Bearer 123456",
"environment": "production",
"event_types": ["initial_purchase"
],
"app_id": "app_1234567890abcdef"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "webhook_integration",
"id": "wh_1234567890abcdef",
"project_id": "proj_1234567890abcdef",
"name": "Customer updates webhook",
"url": "https://hooks.example.com/revenuecat",
"environment": "production",
"event_types": ["initial_purchase"
],
"app_id": "app_1234567890abcdef",
"created_at": 1658399423658
}`
tag/Integration/operation/delete-webhook-integration Delete a webhook integration
delete/projects/{project_id}/integrations/webhooks/{webhook_integration_id}
Authorizations:
BearerAuth
path Parameters
Responses
200
Webhook integration deleted
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "app",
"id": "string",
"deleted_at": 1658399423658
}`
tag/Project Project
Operations about projects.
tag/Project/operation/list-projects Get a list of projects
get/projects
https://api.revenuecat.com/v2/projects
This endpoint requires the following permission(s): project_configuration:projects:read. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
query Parameters
| starting_after | string Example: starting_after=ent12354 |
| limit | integer Default: 20 Example: limit=10 |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Response samples
- 200
- 400
- 401
- 403
- 404
- 423
- 429
- 500
- 503
Content type
application/json
Copy Expand all Collapse all
`{"object": "list",
"items": [{"object": "project",
"id": "proj1ab2c3d4",
"name": "MagicWeather",
"created_at": 1658399423658,
"icon_url": "https://www.appatar.io/abc123/small",\
"icon_url_large": "https://www.appatar.io/abc123/large"\
}
],
"next_page": "/v2/projects?starting_after=projab21dac",
"url": "/v2/projects"
}`
tag/Project/operation/create-project Creates a new project
post/projects
https://api.revenuecat.com/v2/projects
This endpoint requires the following permission(s): project_configuration:projects:read_write. This endpoint belongs to the Project Configuration domain, which has a default rate limit of 60 requests per minute.
Authorizations:
BearerAuth
Request Body schema: application/json required
| name required |
string [ 1 .. 255 ] characters The name of the project |
Responses
200
Success
400
Bad request
401
Unauthorized
403
Access denied
404
Not found
409
Conflict
422
Unprocessable entity
423
Locked
429
The request could not be completed because the rate limiting domain for this endpoint is currently at its limit for this project.
500
Internal server error
503
Internal server error
Request samples
- Payload
Content type
application/json
Copy
`{"name": "string"
}`
Response samples
- 200
- 400
- 401
- 403
- 404
- 409
- 422
- 423
- 429
- 500
- 503
Content type
application/json
Copy
`{"object": "project",
"id": "proj1ab2c3d4",
"name": "MagicWeather",
"created_at": 1658399423658,
"icon_url": "https://www.appatar.io/abc123/small",
"icon_url_large": "https://www.appatar.io/abc123/large"
}`