Entitlements
Server-side gating
Ask Fictura whether a user is entitled instead of maintaining your own billing table — one GET, derived from the same webhooks that feed everything else.
curl https://api.fictura.co/api/v1/entitlements/<user_id> \
-H "x-api-key: gk_..."<user_id> is any identifier you've given Fictura for the user — your account id, the RevenueCat app user id, or the device id; the lookup matches all three. An unknown user answers status: "none" with a 200, so one code path handles everyone, and the check never creates a user as a side effect.
How the verdict is computed
- Recomputed from the billing ledger on every RevenueCat and Stripe webhook, and the clock is re-checked on every read — a lapsed subscription reads as lapsed immediately.
- Cancellation does not end access — it flips
will_renewtofalse; access runs toexpires_at. Only an expiration event closes the window. - A failed payment grants
grace_period— stillis_active: true— while the card retries. - Sandbox rides the same verdict: the environment of the user's most recent granting event wins, so a test purchase answers
is_active: truewithenvironment: "SANDBOX". Check theenvironmentfield before granting production access. - Fails closed: a granting event with no expiry to reason about yields
unknown, neveractive.
The complete field-by-field contract, statuses, and both response shapes are in the API reference. Prefer keeping your own table? Feed it from the billing webhook — same events, same truth.