Skip to main content

Developer API (2.0.0)

Download OpenAPI specification:Download

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.

About RevenueCat’s REST API

RevenueCat provides a REST API for developers to perform customer and transaction related actions from their own server.

Most of this API is geared toward client usage via RevenueCat’s SDK, but there are various endpoints that can be used for refunding purchases, granting promotional entitlements, and other sensitive actions that can only be done via a Secret API key from your server.

Should I use this REST API or the RevenueCat SDK?

If you’re adding subscriptions or other in-app purchases to your app for the first time or if you don’t have a backend that stores your user’s receipts, you’re probably looking to implement the RevenueCat SDK.

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.

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.

API v2 Permissions

You can create a new secret API key in your project settings page > API keys. Select + New.

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

Each endpoint in this documentation will contain a description informing you which permissions are required.

Request Payload

The body of the POST requests should be encoded in JSON and have the 'Content-Type' header set to 'application/json'.

Content-Type: application/json
{
  "app_user_id": "user-1456",
  "fetch_token": "MQABC...EFH1234="
}

Params

Encode your URL params
For URL params, such as the `app_user_id`, make sure you URL encode them before using them.

Beta Interest

Our work on the APIs is not over yet. We are working on supporting a new and more consistent data model that will abstract away differences between the app stores.

We’re also working on a more RESTful API that will allow GET operations without side effects. For example, being able to read customer information without unintentionally manipulating it.

This will allow you to use customer endpoints without side effects of creating a new app user ID and provide you the necessary information about a customer’s subscription and purchase lifecycle.

We are looking for interested developers who want to take part in the beta program for our new REST APIs. Some key benefits of participating include:

  • Being the first to gain access to our new APIs
  • Being able to give feedback before launch

If you’re interested, please fill out this form to join our waitlist and to share your use cases!

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…

  • url is the full path base URL of the list endpoint (i.e., if you make a request to this endpoint, you will get the first page), e.g. /v2/projects/{project_id}/products
  • next_page is the URL for the next page, if there is one. If there is no next page, the next_page field will not be present. Example: /v2/projects/{project_id}/products?starting_after={last_id}
  • items is an array of the entries of the list.

The starting_after query parameter of list endpoints accepts the ID of the first list item that will not be part of the list (in other words, the ID of the last item of the previous page).

At the moment we only support forward pagination.

Parameters

limit optional, default is 20

A limit on the number of objects to be returned.

starting_after optional

A cursor for use in pagination. starting_after is an object ID that defines your place in the list. For instance, if you make a list request and receive 20 objects, ending with foo, your subsequent call can include starting_after=foo in order to fetch the next page of the list.

Rate Limit

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 milliseconds 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 content of the field backoff_ms is equal to the Retry-After header.

{
  "type": "rate_limit_error",
  "message": "Rate limit exceeded",
  "retryable": true,
  "doc_url": "https://errors.rev.cat/rate-limit-error",
  "backoff_ms": 1000
}

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.

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.

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

Error Types

authentication_error

Authentication is not valid for the given API key. Double check your API key.

authorization_error

The API key does not belong the project you specified. Double check that your API key is associated with the IDs you are passing.

invalid_request

This error can be due to several reasons:

  • Content-Type: application/json is missing in the request header for POST/PUT/PATCH requests
  • Using the incorrect HTTP method on a path (i.e: GET …/entitlements/<entitlements_id>/actions/attach_products)

parameter_error

The parameter provided is invalid. Please refer to the message field for more information.

  • IDs (e.g: entitlement_id, project_id, etc): 1 to 255 characters
  • display_name(applies to Entitlements): 1 to 1000 characters
  • lookup_key(applies to Entitlements): 1 to 200 characters

rate_limit_error

The request has hit the rate limit 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.

App

Operations about apps.

Get a list of apps

This endpoint requires the following permission(s): project_configuration:apps:read.

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

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "next_page": "/v2/projects/projec1a2b3c4d/apps?starting_after=app1a2b3c4d",
  • "url": "/v2/projects/projec1a2b3c4d/apps"
}

Create an App

This endpoint requires the following permission(s): project_configuration:apps:read_write.

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
Enum: "amazon" "app_store" "mac_app_store" "play_store" "stripe"

The platform of the app. Mac App Store is disabled by default. See Legacy Mac Apps for more details.

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

object

App Store type details. Should only be used when type is app_store.

bundle_id
required
string [ 1 .. 256 ] characters

The bundle ID of the app

shared_secret
string = 32 characters

The shared secret of the app

subscription_private_key
required
string [ 1 .. 4500 ] characters

PKCS /#8 In App Key downloaded from App Store Connect in PEM format. Copy the contents of the file in this field. See instructions on how to get it in: https://www.revenuecat.com/docs/in-app-purchase-key-configuration

subscription_key_id
required
string [ 1 .. 32 ] characters

In App Key id. The ID of the downloaded in app key. You can get it from App Store Connect

subscription_key_issuer
required
string [ 1 .. 36 ] characters
object

Mac App Store type details. Should only be used when type is mac_app_store.

bundle_id
required
string [ 1 .. 256 ] characters

The bundle ID of the app

shared_secret
string = 32 characters

The shared secret of the app

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

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.

Responses

Request samples

Content type
application/json
Example
{
  • "name": "My App Store App",
  • "type": "app_store",
  • "app_store": {
    }
}

Response samples

Content type
application/json
{
  • "object": "app",
  • "id": "app1a2b3c4",
  • "name": "string",
  • "created_at": 1658399423658,
  • "type": "app_store",
  • "project_id": "proj1a2b3c4",
  • "amazon": {
    },
  • "app_store": {
    },
  • "mac_app_store": {
    },
  • "play_store": {
    },
  • "stripe": {
    }
}

Get an app

This endpoint requires the following permission(s): project_configuration:apps:read.

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

Response samples

Content type
application/json
{
  • "object": "app",
  • "id": "app1a2b3c4",
  • "name": "string",
  • "created_at": 1658399423658,
  • "type": "app_store",
  • "project_id": "proj1a2b3c4",
  • "amazon": {
    },
  • "app_store": {
    },
  • "mac_app_store": {
    },
  • "play_store": {
    },
  • "stripe": {
    }
}

Update an app

This endpoint requires the following permission(s): project_configuration:apps:read_write.

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

Request Body schema: application/json
required
name
string [ 1 .. 255 ] characters

The name of the app

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

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

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

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

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.

Responses

Request samples

Content type
application/json
Example
{
  • "name": "New App name",
  • "app_store": {
    }
}

Response samples

Content type
application/json
{
  • "object": "app",
  • "id": "app1a2b3c4",
  • "name": "string",
  • "created_at": 1658399423658,
  • "type": "app_store",
  • "project_id": "proj1a2b3c4",
  • "amazon": {
    },
  • "app_store": {
    },
  • "mac_app_store": {
    },
  • "play_store": {
    },
  • "stripe": {
    }
}

Delete an app

This endpoint requires the following permission(s): project_configuration:apps:read_write.

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

Response samples

Content type
application/json
{
  • "object": "app",
  • "id": "string",
  • "deleted_at": 1658399423658
}

Charts & Metrics

Operations about chart metrics.

Get overview metrics for a project

This endpoint requires the following permission(s): charts_metrics:overview:read.

Authorizations:
BearerAuth
path Parameters
project_id
required
string <= 255 characters
Example: proj1ab2c3d4

ID of the project

Responses

Response samples

Content type
application/json
{
  • "object": "overview_metrics",
  • "metrics": [
    ]
}

Customer

Operations about customers.

Get a list of subscriptions associated with a customer

Only for web subscriptions using RevenueCat Billing
This endpoint currently only returns subscriptions made on the web using the RevenueCat Web SDK and RevenueCat Billing. We are planning to add information for other supported stores soon.
Lists all Subscriptions associated with the Customer. This currently includes only RevenueCat Billing subscriptions. We are planning to add information about subscriptions on other supported stores soon. This endpoint requires the following permission(s): `customer_information:subscriptions:read`. This endpoint requires the following permission(s): `customer_information:subscriptions:read`.
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
environment
string
Enum: "sandbox" "production"
Example: environment=production
starting_after
string
Example: starting_after=ent12354
limit
integer
Default: 20
Example: limit=10

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "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"
}

Entitlement

Operations about entitlements.

Get an entitlement

This endpoint requires the following permission(s): project_configuration:entitlements:read.

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.

Responses

Response samples

Content type
application/json
{
  • "object": "entitlement",
  • "project_id": "proj1ab2c3d4",
  • "id": "entla1b2c3d4e5",
  • "lookup_key": "premium",
  • "display_name": "Premium",
  • "created_at": 1658399423658,
  • "products": {
    }
}

Update an entitlement

This endpoint requires the following permission(s): project_configuration:entitlements:read_write.

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

Request Body schema: application/json
required
display_name
required
string [ 1 .. 1500 ] characters

The display name of the entitlement

Responses

Request samples

Content type
application/json
{
  • "display_name": "Premium"
}

Response samples

Content type
application/json
{
  • "object": "entitlement",
  • "project_id": "proj1ab2c3d4",
  • "id": "entla1b2c3d4e5",
  • "lookup_key": "premium",
  • "display_name": "Premium",
  • "created_at": 1658399423658,
  • "products": {
    }
}

Delete an entitlement

This endpoint requires the following permission(s): project_configuration:entitlements:read_write.

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

Responses

Response samples

Content type
application/json
{
  • "object": "app",
  • "id": "string",
  • "deleted_at": 1658399423658
}

Get a list of entitlements

This endpoint requires the following permission(s): project_configuration:entitlements:read.

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.

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "next_page": "/v2/projects/proj1ab2c3d4/entitlements?starting_after=entlab21dac",
  • "url": "/v2/projects/proj1ab2c3d4/entitlements"
}

Create an entitlement

This endpoint requires the following permission(s): project_configuration:entitlements:read_write.

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

Request samples

Content type
application/json
{
  • "lookup_key": "premium",
  • "display_name": "Premium access to all features"
}

Response samples

Content type
application/json
{
  • "object": "entitlement",
  • "project_id": "proj1ab2c3d4",
  • "id": "entla1b2c3d4e5",
  • "lookup_key": "premium",
  • "display_name": "Premium",
  • "created_at": 1658399423658,
  • "products": {
    }
}

Get a list of products attached to a given entitlement

This endpoint requires the following permission(s): project_configuration:entitlements:read.

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
starting_after
string
Example: starting_after=ent12354
limit
integer
Default: 20
Example: limit=10

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "next_page": "/v2/projects/proj1ab2c3d4/entitlements/entla1b2c3d4e5/products?starting_after=prod1a2b3c4d5",
  • "url": "/v2/projects/proj1ab2c3d4/entitlements/entla1b2c3d4e5/products"
}

Attach a set of products to an entitlement

This endpoint requires the following permission(s): project_configuration:entitlements:read_write.

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

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

Request samples

Content type
application/json
{
  • "product_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "object": "entitlement",
  • "project_id": "proj1ab2c3d4",
  • "id": "entla1b2c3d4e5",
  • "lookup_key": "premium",
  • "display_name": "Premium",
  • "created_at": 1658399423658,
  • "products": {
    }
}

Detach a set of product from an entitlement

This endpoint requires the following permission(s): project_configuration:entitlements:read_write.

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

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

Request samples

Content type
application/json
{
  • "product_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "object": "entitlement",
  • "project_id": "proj1ab2c3d4",
  • "id": "entla1b2c3d4e5",
  • "lookup_key": "premium",
  • "display_name": "Premium",
  • "created_at": 1658399423658,
  • "products": {
    }
}

Offering

Operations about offerings.

Get an offering

This endpoint requires the following permission(s): project_configuration:offerings:read.

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, package.product.

Responses

Response samples

Content type
application/json
{
  • "object": "offering",
  • "id": "ofrnge1a2b3c4d5",
  • "lookup_key": "default",
  • "display_name": "The standard set of packages",
  • "is_current": true,
  • "created_at": 1658399423658,
  • "project_id": "proj1ab2c3d4",
  • "metadata": {
    },
  • "packages": {
    }
}

Update an offering

This endpoint requires the following permission(s): project_configuration:offerings:read_write.

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

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

object or null (OfferingMetadata)

Custom metadata of the offering

property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "display_name": "premium access to features",
  • "is_current": true,
  • "metadata": {
    }
}

Response samples

Content type
application/json
{
  • "object": "offering",
  • "id": "ofrnge1a2b3c4d5",
  • "lookup_key": "default",
  • "display_name": "The standard set of packages",
  • "is_current": true,
  • "created_at": 1658399423658,
  • "project_id": "proj1ab2c3d4",
  • "metadata": {
    },
  • "packages": {
    }
}

Delete an offering and its attached packages

This endpoint requires the following permission(s): project_configuration:offerings:read_write.

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

Responses

Response samples

Content type
application/json
{
  • "object": "app",
  • "id": "string",
  • "deleted_at": 1658399423658
}

Get a list of offerings

This endpoint requires the following permission(s): project_configuration:offerings:read.

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, items.package.product.

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "next_page": "/v2/projects/proj1ab2c3d4/offerings?starting_after=ofrngeab21da",
  • "url": "/v2/projects/proj1ab2c3d4/offerings"
}

Create an offering

This endpoint requires the following permission(s): project_configuration:offerings:read_write.

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

object or null (OfferingMetadata)

Custom metadata of the offering

property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "lookup_key": "default",
  • "display_name": "The standard set of packages",
  • "metadata": {
    }
}

Response samples

Content type
application/json
{
  • "object": "offering",
  • "id": "ofrnge1a2b3c4d5",
  • "lookup_key": "default",
  • "display_name": "The standard set of packages",
  • "is_current": true,
  • "created_at": 1658399423658,
  • "project_id": "proj1ab2c3d4",
  • "metadata": {
    },
  • "packages": {
    }
}

Package

Operations about packages.

Get a package

This endpoint requires the following permission(s): project_configuration:packages:read.

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
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.

Responses

Response samples

Content type
application/json
{
  • "object": "package",
  • "id": "pkge1a2b3c4d5",
  • "lookup_key": "monthly",
  • "display_name": "Monthly discounted with 3-day trial",
  • "position": 1,
  • "created_at": 1658399423658,
  • "products": {
    }
}

Update a package

This endpoint requires the following permission(s): project_configuration:packages:read_write.

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

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

Request samples

Content type
application/json
{
  • "display_name": "monthly with one-week trial",
  • "position": 2
}

Response samples

Content type
application/json
{
  • "object": "package",
  • "id": "pkge1a2b3c4d5",
  • "lookup_key": "monthly",
  • "display_name": "Monthly discounted with 3-day trial",
  • "position": 1,
  • "created_at": 1658399423658,
  • "products": {
    }
}

Delete a package

This endpoint requires the following permission(s): project_configuration:packages:read_write.

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

Responses

Response samples

Content type
application/json
{
  • "object": "app",
  • "id": "string",
  • "deleted_at": 1658399423658
}

Get a list of packages in an offering

This endpoint requires the following permission(s): project_configuration:packages:read.

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
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.

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "next_page": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages?starting_after=pkgeab21dac",
  • "url": "/v2/projects/proj1ab2c3d4/offerings/ofrnge1a2b3c4d5/packages"
}

Create a package

This endpoint requires the following permission(s): project_configuration:packages:read_write.

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

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

Request samples

Content type
application/json
{
  • "lookup_key": "monthly",
  • "display_name": "monthly with one-week trial",
  • "position": 1
}

Response samples

Content type
application/json
{
  • "object": "package",
  • "id": "pkge1a2b3c4d5",
  • "lookup_key": "monthly",
  • "display_name": "Monthly discounted with 3-day trial",
  • "position": 1,
  • "created_at": 1658399423658,
  • "products": {
    }
}

Get a list of products attached to a given package of an offering

This endpoint requires the following permission(s): project_configuration:packages:read.

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
starting_after
string
Example: starting_after=ent12354
limit
integer
Default: 20
Example: limit=10

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "next_page": "/v2/projects/proj1ab2c3d4/packages/pkge1a2b3c4d5/products?starting_after=prod1a2b3c4d5",
  • "url": "/v2/projects/proj1ab2c3d4/packages/pkge1a2b3c4d5/products"
}

Attach a set of products to a package

This endpoint requires the following permission(s): project_configuration:packages:read_write.

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

Request Body schema: application/json
required
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

Request samples

Content type
application/json
Example
{
  • "products": [
    ]
}

Response samples

Content type
application/json
{
  • "object": "package",
  • "id": "pkge1a2b3c4d5",
  • "lookup_key": "monthly",
  • "display_name": "Monthly discounted with 3-day trial",
  • "position": 1,
  • "created_at": 1658399423658,
  • "products": {
    }
}

Detach a set of products from a package

This endpoint requires the following permission(s): project_configuration:packages:read_write.

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

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

Request samples

Content type
application/json
{
  • "product_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "object": "package",
  • "id": "pkge1a2b3c4d5",
  • "lookup_key": "monthly",
  • "display_name": "Monthly discounted with 3-day trial",
  • "position": 1,
  • "created_at": 1658399423658,
  • "products": {
    }
}

Product

Operations about products.

Get a product

This endpoint requires the following permission(s): project_configuration:products:read.

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.

Responses

Response samples

Content type
application/json
{
  • "object": "product",
  • "id": "prod1a2b3c4d5e",
  • "store_identifier": "rc_1w_199",
  • "type": "subscription",
  • "subscription": {
    },
  • "created_at": 1658399423658,
  • "app_id": "app1a2b3c4",
  • "app": {
    },
  • "display_name": "Premium Monthly 2023"
}

Delete a product

This endpoint requires the following permission(s): project_configuration:products:read_write.

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

Responses

Response samples

Content type
application/json
{
  • "object": "app",
  • "id": "string",
  • "deleted_at": 1658399423658
}

Get a list of products

This endpoint requires the following permission(s): project_configuration:products:read.

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.

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "next_page": "/v2/projects/proj1ab2c3d4/products?starting_after=prodab21dac",
  • "url": "/v2/projects/proj1ab2c3d4/products"
}

Create a product

This endpoint requires the following permission(s): project_configuration:products:read_write.

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.
app_id
required
string [ 1 .. 255 ] characters

The ID of the app

type
required
string (ProductType)
Enum: "subscription" "one_time"
display_name
string or null [ 1 .. 1500 ] characters

The display name of the product

Responses

Request samples

Content type
application/json
Example
{
  • "store_identifier": "com.revenuecat.magicweather.monthly9.99",
  • "app_id": "app1a2b3c4",
  • "type": "subscription",
  • "display_name": "Premium Monthly 2023"
}

Response samples

Content type
application/json
{
  • "object": "product",
  • "id": "prod1a2b3c4d5e",
  • "store_identifier": "rc_1w_199",
  • "type": "subscription",
  • "subscription": {
    },
  • "created_at": 1658399423658,
  • "app_id": "app1a2b3c4",
  • "app": {
    },
  • "display_name": "Premium Monthly 2023"
}

Subscription

Operations about subscriptions.

Cancels an active RevenueCat Billing subscription

This endpoint requires the following permission(s): customer_information:subscriptions:read_write.

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

Response samples

Content type
application/json
{
  • "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,
  • "gives_access": true,
  • "pending_payment": true,
  • "auto_renewal_status": "will_renew",
  • "status": "trialing",
  • "total_revenue_in_usd": {
    },
  • "presented_offering_id": "ofrnge1a2b3c4d5",
  • "entitlements": {
    },
  • "environment": "production",
  • "store": "amazon",
  • "store_subscription_identifier": 12345678,
  • "ownership": "purchased",
  • "pending_changes": {
    },
  • "country": "US"
}

Refunds the last payment of an active RevenueCat Billing subscription and revokes access to associated granted entitlements.

This endpoint requires the following permission(s): customer_information:subscriptions:read_write.

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

Response samples

Content type
application/json
{
  • "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,
  • "gives_access": true,
  • "pending_payment": true,
  • "auto_renewal_status": "will_renew",
  • "status": "trialing",
  • "total_revenue_in_usd": {
    },
  • "presented_offering_id": "ofrnge1a2b3c4d5",
  • "entitlements": {
    },
  • "environment": "production",
  • "store": "amazon",
  • "store_subscription_identifier": 12345678,
  • "ownership": "purchased",
  • "pending_changes": {
    },
  • "country": "US"
}

Invoice

Operations about invoices.

Get a list of the customer's invoices

This endpoint requires the following permission(s): customer_information:invoices:read.

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
starting_after
string
Example: starting_after=ent12354
limit
integer
Default: 20
Example: limit=10

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "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"
}

Get an invoice

This endpoint requires the following permission(s): customer_information:invoices:read.

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

Response samples

Content type
application/json
Example
{}

Project

Operations about projects.

Get a list of projects

This endpoint requires the following permission(s): project_configuration:projects:read.

Authorizations:
BearerAuth
query Parameters
starting_after
string
Example: starting_after=ent12354
limit
integer
Default: 20
Example: limit=10

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "items": [
    ],
  • "next_page": "/v2/projects?starting_after=projab21dac",
  • "url": "/v2/projects"
}