---
title: "Integration"
permalink: "/docs/api-v2/integration"
original_source: "openapi-spec/api-v2.yaml"
---

> **AI agents:** This is the Markdown version of a RevenueCat documentation page. For the complete documentation index, see [llms.txt](https://www.revenuecat.com/docs/llms.txt).

# Integration

## Integration

Operations about integrations.

### List webhook integrations

`GET /projects/{project_id}/integrations/webhooks`

Operation ID: `list-webhook-integrations`

This endpoint requires the following permission(s): <code>project_configuration:integrations:read</code>. This endpoint belongs to the <strong>Project Configuration</strong> domain, which has a default rate limit of <strong>60 requests per minute</strong>.

**Parameters**

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `project_id` | path | yes | ID of the project |
| `starting_after` | query | no | Pagination cursor. Pass the id of the last item from the previous page to fetch the next page; omit for the first page. |
| `limit` | query | no | Maximum number of items to return per page. Values below 1 or above 100 are clamped to that range rather than rejected. |

**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 `200` body**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | String representing the object's type. Objects of the same type share the same value. One of: `list` |
| `items` | array of WebhookIntegration | yes | Webhook integrations configured for the project. |
| `next_page` | string | no | URL to access the next page of webhook integrations. If not present / null, there is no next page |
| `url` | string | yes | The URL where this list can be accessed. |

<details><summary><code>items</code></summary>

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | String representing the object's type. Objects of the same type share the same value. One of: `webhook_integration` |
| `id` | string | yes | The ID of the webhook integration |
| `project_id` | string | yes | The ID of the project the webhook integration belongs to |
| `name` | string | yes | The display name of the webhook integration |
| `url` | string | yes | The URL RevenueCat will send webhook notifications to |
| `environment` | string | yes | The environment the webhook integration is configured for. Only events for the selected environment will be sent. One of: `production`, `sandbox`, `null` |
| `event_types` | array of string | no | Event types that will trigger the webhook. Only events for the selected event types will be sent. |
| `app_id` | string | yes | The ID of the app the webhook integration is scoped to. If not provided, the webhook integration will be scoped to all apps in the project. |
| `signing_secret` | string | no | The plaintext HMAC signing secret. Only returned in the response to a rotate request. |
| `created_at` | integer | yes | The timestamp in ms since epoch when the webhook integration was created |

</details>
### Create a webhook integration

`POST /projects/{project_id}/integrations/webhooks`

Operation ID: `create-webhook-integration`

This endpoint requires the following permission(s): <code>project_configuration:integrations:read_write</code>. This endpoint belongs to the <strong>Project Configuration</strong> domain, which has a default rate limit of <strong>60 requests per minute</strong>.

**Parameters**

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `project_id` | path | yes | ID of the project |

**Request body**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | The display name of the webhook integration |
| `url` | string | yes | The URL RevenueCat will send webhook notifications to |
| `authorization_header` | string | no | Optional authorization header that will be sent with webhook notifications |
| `environment` | string | no | The environment the webhook integration is configured for One of: `production`, `sandbox`, `null` |
| `event_types` | array of WebhookEventType | no | Event types that will trigger the webhook |
| `app_id` | string | no | 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

**Response `201` body**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | String representing the object's type. Objects of the same type share the same value. One of: `webhook_integration` |
| `id` | string | yes | The ID of the webhook integration |
| `project_id` | string | yes | The ID of the project the webhook integration belongs to |
| `name` | string | yes | The display name of the webhook integration |
| `url` | string | yes | The URL RevenueCat will send webhook notifications to |
| `environment` | string | yes | The environment the webhook integration is configured for. Only events for the selected environment will be sent. One of: `production`, `sandbox`, `null` |
| `event_types` | array of string | no | Event types that will trigger the webhook. Only events for the selected event types will be sent. |
| `app_id` | string | yes | The ID of the app the webhook integration is scoped to. If not provided, the webhook integration will be scoped to all apps in the project. |
| `signing_secret` | string | no | The plaintext HMAC signing secret. Only returned in the response to a rotate request. |
| `created_at` | integer | yes | The timestamp in ms since epoch when the webhook integration was created |

### Get a webhook integration

`GET /projects/{project_id}/integrations/webhooks/{webhook_integration_id}`

Operation ID: `get-webhook-integration`

This endpoint requires the following permission(s): <code>project_configuration:integrations:read</code>. This endpoint belongs to the <strong>Project Configuration</strong> domain, which has a default rate limit of <strong>60 requests per minute</strong>.

**Parameters**

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `project_id` | path | yes | ID of the project |
| `webhook_integration_id` | path | yes | 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 `200` body**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | String representing the object's type. Objects of the same type share the same value. One of: `webhook_integration` |
| `id` | string | yes | The ID of the webhook integration |
| `project_id` | string | yes | The ID of the project the webhook integration belongs to |
| `name` | string | yes | The display name of the webhook integration |
| `url` | string | yes | The URL RevenueCat will send webhook notifications to |
| `environment` | string | yes | The environment the webhook integration is configured for. Only events for the selected environment will be sent. One of: `production`, `sandbox`, `null` |
| `event_types` | array of string | no | Event types that will trigger the webhook. Only events for the selected event types will be sent. |
| `app_id` | string | yes | The ID of the app the webhook integration is scoped to. If not provided, the webhook integration will be scoped to all apps in the project. |
| `signing_secret` | string | no | The plaintext HMAC signing secret. Only returned in the response to a rotate request. |
| `created_at` | integer | yes | The timestamp in ms since epoch when the webhook integration was created |

### Update a webhook integration

`POST /projects/{project_id}/integrations/webhooks/{webhook_integration_id}`

Operation ID: `update-webhook-integration`

This endpoint requires the following permission(s): <code>project_configuration:integrations:read_write</code>. This endpoint belongs to the <strong>Project Configuration</strong> domain, which has a default rate limit of <strong>60 requests per minute</strong>.

**Parameters**

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `project_id` | path | yes | ID of the project |
| `webhook_integration_id` | path | yes | The ID of the webhook integration |

**Request body**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no | The display name of the webhook integration |
| `url` | string | no | The URL RevenueCat will send webhook notifications to |
| `authorization_header` | string | no | Optional authorization header that will be sent with webhook notifications |
| `environment` | string | no | The environment the webhook integration is configured for One of: `production`, `sandbox`, `null` |
| `event_types` | array of WebhookEventType | no | Event types that will trigger the webhook |
| `app_id` | string | no | 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

**Response `200` body**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | String representing the object's type. Objects of the same type share the same value. One of: `webhook_integration` |
| `id` | string | yes | The ID of the webhook integration |
| `project_id` | string | yes | The ID of the project the webhook integration belongs to |
| `name` | string | yes | The display name of the webhook integration |
| `url` | string | yes | The URL RevenueCat will send webhook notifications to |
| `environment` | string | yes | The environment the webhook integration is configured for. Only events for the selected environment will be sent. One of: `production`, `sandbox`, `null` |
| `event_types` | array of string | no | Event types that will trigger the webhook. Only events for the selected event types will be sent. |
| `app_id` | string | yes | The ID of the app the webhook integration is scoped to. If not provided, the webhook integration will be scoped to all apps in the project. |
| `signing_secret` | string | no | The plaintext HMAC signing secret. Only returned in the response to a rotate request. |
| `created_at` | integer | yes | The timestamp in ms since epoch when the webhook integration was created |

### Delete a webhook integration

`DELETE /projects/{project_id}/integrations/webhooks/{webhook_integration_id}`

Operation ID: `delete-webhook-integration`

This endpoint requires the following permission(s): <code>project_configuration:integrations:read_write</code>. This endpoint belongs to the <strong>Project Configuration</strong> domain, which has a default rate limit of <strong>60 requests per minute</strong>.

**Parameters**

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `project_id` | path | yes | ID of the project |
| `webhook_integration_id` | path | yes | The ID of the webhook integration |

**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 `200` body**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | The type of the deleted object One of: `app`, `chart_annotation`, `customer`, `discount`, `entitlement`, `experiment`, `offering`, `package`, `paywall`, `product`, `virtual_currency`, `webhook_integration` |
| `id` | string | yes | The ID of the deleted object |
| `deleted_at` | integer | yes | The date when the object was deleted in ms since epoch |

