Stripe Setup
Lygotype integrates Stripe directly into the form. Each form has its own Stripe credentials — there's no shared account or platform fee.
Prerequisites
- A Stripe account (free to create at [stripe.com](https://stripe.com))
- A published Stripe API key pair (publishable + secret)
- A configured Stripe webhook endpoint
Per-form credentials
Stripe credentials are set per-form in Settings → Integrations:
| Setting | Description |
|---|---|
| Publishable Key | Your Stripe publishable key (pk_live_... or pk_test_...). Sent to the client. |
| Secret Key | Your Stripe secret key (sk_live_...). Masked in the UI — never sent to the client. |
| Webhook Secret | The signing secret from your Stripe webhook endpoint (whsec_...). |
Adding a payment question
1. In the form builder, click + Add Question 2. Select Payment from the question type picker 3. Configure the amount (fixed) or link a prior question (dynamic) 4. Select currency: CAD or USD
See Fixed Pricing and Dynamic Pricing for configuration details.
Setting up the Stripe webhook
Stripe sends payment confirmation events to your server. To handle them:
1. In your Stripe Dashboard, go to Developers → Webhooks
2. Add endpoint: https://lygo.yourdomain.com/api/stripe/webhook
3. Select events: payment_intent.succeeded, payment_intent.payment_failed
4. Copy the signing secret and paste it into Settings → Integrations → Webhook Secret
Test mode
Use test keys (pk_test_... / sk_test_...) during development. Stripe test cards:
| Card | Behaviour |
|---|---|
| 4242 4242 4242 4242 | Always succeeds |
| 4000 0000 0000 9995 | Always declines |
| 4000 0025 0000 3155 | Requires 3D Secure |
Use any future expiry date and any 3-digit CVC.
Security
- Secret keys are masked in the UI immediately after entry — they are never returned in API responses
- Keys are stored encrypted at rest
- Each form has independent credentials — a breach of one form's keys does not expose others