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

  1. Open Stripe Dashboard → Developers → API keys (use the same mode — Live or Test — your app charges in).
  2. Click “Create restricted key”. Choose “Providing this key to another website”, name it PaidCheck.
  3. Set these to Read: Customers, Subscriptions (under Billing), Charges, Events, Webhook Endpoints. Leave EVERYTHING else at None.
  4. 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.
CustomersReadmatch a subscription to the customer's email
Subscriptions (Billing)Readknow who is active, trialing, past_due, unpaid or canceled
ChargesReaddetect duplicate charges
EventsReadfind events whose webhook delivery failed (pending_webhooks > 0)
Webhook EndpointsReaddetect disabled or missing webhook endpoints
Everything elseNonePaidCheck 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}]