The billing endpoints expose the current user’s credit balance and subscription state, and accept lifecycle events from RevenueCat. iOS readsDocumentation Index
Fetch the complete documentation index at: https://docs.manticscore.com/llms.txt
Use this file to discover all available pages before exploring further.
GET /v1/usage on every app launch and after every paywall presentation — it is the single source of truth for “what does this user have access to right now”.
Get current usage
Returns the current monthly billing period, the user’s tier with caps, current consumption, and remaining allowance. Rate limit: 120 requests per minute.200 response
Tier caps reference
| Tier | Questions | TTS minutes | Credits |
|---|---|---|---|
free | 50 | 5 | 20 |
explorer | 500 | 60 | 200 |
plus | 1500 | 180 | 300 |
pro | 2500 | 300 | 400 |
early_access | 100000 | 10000 | 100000 |
New users with no profile row receive a default response:
tier.id: "free", the free-tier caps, and zeroed counters. The profile row is created lazily on first call to GET /profile.The previous
/v1/usage shape (plan, credits.{used,total,remaining,resets_at,weights}, subscription.{...}) has been replaced. Subscription lifecycle data now lives on GET /profile and individual webhook events; tier identity and entitlement are derived from tier.id here. Per-action credit weights are documented under Credits.RevenueCat webhook
Endpoint that RevenueCat calls to deliver subscription lifecycle events. You do not call this endpoint directly — configure it once in the RevenueCat dashboard under Project → Integrations → Webhook.Authentication
Two layers, both required when configured:-
Bearer token (required). The value of the
Authorizationheader is compared in constant time to the secret configured in the RevenueCat dashboard. -
HMAC-SHA256 body signature (optional, defense-in-depth). When
revenuecat_signing_secretis configured server-side, requests must include a hex digest of the raw body in theX-RevenueCat-Signatureheader. The verification path is currently dormant because RevenueCat removed the signing-secret field from current dashboards; leave the secret unset to skip this check.
401. If the JSON body is malformed it returns 400. All other outcomes — including event-handler exceptions — return 200 so RevenueCat does not enter retry backoff for issues that require a code fix. The event row is always written to the audit table first, so failed events can be replayed from there.
Handled event types
| RevenueCat event | Subscription status |
|---|---|
INITIAL_PURCHASE | active |
RENEWAL | active |
NON_RENEWING_PURCHASE | active |
UNCANCELLATION | active |
PRODUCT_CHANGE | active |
CANCELLATION | active (auto-renew off; entitled until expiry) |
EXPIRATION | expired |
BILLING_ISSUE | in_billing_retry |
SUBSCRIPTION_PAUSED | paused |
SUBSCRIBER_ALIAS | audit-only |
TRANSFER | audit-only |
TEST | audit-only |
GET /v2/projects/{project_id}/customers/{customer_id}/subscriptions and reconciles the user’s stored state against RevenueCat’s authoritative view. Reconciliation is best-effort — a transient failure does not fail the webhook.
Each successful entitlement state flip also fires a usage.changed silent control envelope over the realtime gateway so the user’s iOS client refreshes /v1/usage immediately without waiting for the next foreground poll.
200 response (test event)
200 response (deferred after handler exception)