Setup guide
Everything PaidCheck needs, and exactly why. (The in-app forms generate a real secret and fill it in for you.)
1. Stripe restricted key
- Open Stripe Dashboard → Developers → API keys (use the same mode — Live or Test — your app charges in).
- Click “Create restricted key”. Choose “Providing this key to another website”, name it PaidCheck.
- Set these to Read: Customers, Subscriptions (under Billing), Charges, Events, Webhook Endpoints. Leave EVERYTHING else at None.
- Create the key, copy it (starts with rk_live_ or rk_test_) and paste it here. You can roll/delete it in Stripe at any time.
| Customers | Read | match a subscription to the customer's email |
| Subscriptions (Billing) | Read | know who is active, trialing, past_due, unpaid or canceled |
| Charges | Read | detect duplicate charges |
| Events | Read | find events whose webhook delivery failed (pending_webhooks > 0) |
| Webhook Endpoints | Read | detect disabled or missing webhook endpoints |
| Everything else | None | PaidCheck never writes to Stripe. |
2a. Supabase (Lovable, Bolt) — paste into your AI builder
Then give PaidCheck your project URL + anon/publishable key + the secret. The anon key alone can't read anything: the function checks the secret and only returns email/plan/active.
2b. HTTPS endpoint (Next.js, Cursor, any stack)
…or as a Supabase Edge Function
Expected format
[{"email":"ana@example.com","plan":"pro","active":true},
{"email":"bo@example.com","plan":null,"active":false}]