---
title: "Revenuecat Webhook"
method: POST
path: "/webhooks/revenuecat"
tags: ["play-billing"]
---

# Revenuecat Webhook

`POST /webhooks/revenuecat`

Primary entitlement webhook. RevenueCat normalises Play (and later
Apple) state changes into a single event shape:

    { "event": { "type": "INITIAL_PURCHASE", "app_user_id": "<uuid>",
                 "product_id": "premium_monthly", "transaction_id": "...",
                 "expiration_at_ms": 123, "auto_renewing": true, ... } }

Auth: the shared secret configured in the RC dashboard arrives in the
Authorization header (RC sends it verbatim, no Bearer prefix). We
compare with `hmac.compare_digest` to avoid timing leaks.

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored.md) · [All operations](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/fluentea/aurqa-language-learning-platform-refactored/revisions/78f314acd8bf/schema)
