---
title: "What APIs does RevenueDot have?"
description: "RevenueDot serves the SDK endpoints, REST API v1, REST API v2 with extensions, store notification endpoints and webhooks, all described in one OpenAPI 3.1 document."
url: https://revenuedot.app/docs/api
---

# What APIs does RevenueDot have?

One RevenueDot server answers every API below on one port. The reference is generated from [openapi.yaml](https://revenuedot.app/docs/api/openapi.yaml) (OpenAPI 3.1), which a script checks against the server's route files on every change, so a path in these pages exists in the code.

| API | Paths | Auth | Operations | Reference |
|---|---|---|---|---|
| SDK endpoints and store notifications | `/v1/...`, `/rcbilling/...` | public app key | 44 | [SDK endpoints](https://revenuedot.app/docs/api/sdk-endpoints.md) |
| REST API v1 | `/v1/subscribers/...` | secret key | 10 | [REST API v1](https://revenuedot.app/docs/api/rest-v1.md) |
| REST API v2 | `/v2/projects/...` | secret key or dashboard session | 73 | [REST API v2](https://revenuedot.app/docs/api/rest-v2.md) |
| RevenueDot extensions | `/v2/...`, `/auth/...`, `/oauth/...` | secret key, session or none | 47 | [Extensions](https://revenuedot.app/docs/api/extensions.md) |
| Webhooks (sent by RevenueDot) | your URL | HMAC signature | 15 event types | [Webhook events](https://revenuedot.app/docs/api/webhook-events.md) |

## Quick example

```bash
export REVENUEDOT_URL=http://localhost:8787 SECRET_KEY=sk_... PROJECT_ID=proj...
curl -s "$REVENUEDOT_URL/v2/projects/$PROJECT_ID/customers/user_1" -H "Authorization: Bearer $SECRET_KEY"
```

```json
{
  "object": "customer",
  "id": "user_1",
  "project_id": "proj18pzzkao",
  "first_seen_at": 1790800914012,
  "last_seen_at": 1790800914034,
  "last_seen_app_version": null,
  "last_seen_country": null,
  "last_seen_platform": null,
  "last_seen_platform_version": null,
  "active_entitlements": {
    "object": "list",
    "items": [
      {
        "object": "customer.active_entitlement",
        "entitlement_id": "entl1v0bp6r0qs",
        "expires_at": 1793392914000
      }
    ],
    "next_page": null,
    "url": "/v2/projects/proj18pzzkao/customers/user_1/active_entitlements"
  },
  "experiment": null
}
```

## Conventions

- **Compatible first.** Paths, field names, list envelopes and error formats follow RevenueCat's public API. Operations that exist only in RevenueDot are marked "RevenueDot extension" and carry `x-revenuedot-extension: true` in the OpenAPI document.
- **Timestamps.** REST v2 and webhooks use epoch milliseconds. SDK customer info uses ISO 8601 strings in UTC with whole seconds.
- **IDs.** Customers are addressed by any of their app user ids. Other objects have prefixed ids: `proj`, `app`, `prod`, `entl`, `ofrng`, `pkge`, `sub_`, `wh_`, `key_`.
- **Pagination.** `limit` (1 to 100, default 20) and `starting_after`; follow `next_page`.

## Use the OpenAPI document

- Import [openapi.yaml](https://revenuedot.app/docs/api/openapi.yaml) into Postman, Insomnia or Bruno, or generate a client with any OpenAPI 3.1 generator.
- Each operation's `x-source` names the server file that implements it, and `x-scopes` lists the permissions it needs.

## Related

- [Authentication](https://revenuedot.app/docs/api/authentication.md)
- [Errors](https://revenuedot.app/docs/api/errors.md)
- [Quickstart](https://revenuedot.app/docs/getting-started/quickstart.md)
