Payments
Accepting Payments
TackQuote collects buyer payments through your own Stripe, Razorpay, or PayPal account — money goes directly to you, and TackQuote never touches your funds. This guide covers connecting each gateway and choosing how buyers pay.
On this page
Concept
How payments work
All payment gateways are configured under Settings → Payments in the seller portal. Each tenant connects its own gateway accounts, so buyer payments settle directly into your Stripe, Razorpay, or PayPal account. Credentials are encrypted with AES-256-GCM before storage — the encryption key lives server-side and is never persisted in the database.
- Stripe — credit/debit card checkout, best for US and international card payments.
- Razorpay — INR payments (UPI, cards, netbanking) for buyers in India.
- PayPal — PayPal balance and card checkout via your PayPal Business account.
Gateway
Connect Stripe (US / cards)
Grab your Stripe API keys
In the Stripe Dashboard → Developers → API keys, copy your Secret key (and optionally the Publishable key for client-side payment elements).
Open Settings → Payments → Configure Stripe
Paste your keys into the Stripe card. Only the secret key is required; it must start with
sk_.Field Required Example Secret KeyYes sk_live_… / sk_test_…Publishable KeyOptional pk_live_… / pk_test_…Webhook Signing SecretRecommended whsec_…Add the webhook endpoint
In Stripe, add a webhook endpoint pointing at your TackQuote instance, then paste the signing secret back into the form:
Stripe webhook endpointhttps://app.yourdomain.com/v1/webhooks/stripeSubscribe to
checkout.session.completedandpayment_intent.succeeded. Without a webhook secret, payment confirmation may be delayed.Save
Click Save Stripe Configuration. The status badge flips to Configured.
API reference
/v1/settings/payments/v1/settings/payments/stripe/v1/settings/payments/stripeGateway
Connect Razorpay (India)
Razorpay is the recommended gateway for INR checkout — it supports UPI, cards, and netbanking. When a quote is priced in INR, TackQuote automatically prefers Razorpay over other configured gateways.
Generate Razorpay API keys
From Razorpay Dashboard → Account & Settings → API Keys, generate a Key ID and Key Secret.
Open Settings → Payments → Configure Razorpay
Field Required Example Key IDYes rzp_live_… / rzp_test_…Key SecretYes •••••••• Webhook SecretRecommended •••••••• Add the webhook
Razorpay webhook endpointhttps://app.yourdomain.com/v1/webhooks/razorpaySubscribe to the
payment.capturedevent and paste the webhook secret into the form.
API reference
/v1/settings/payments/razorpay/v1/settings/payments/razorpayGateway
Connect PayPal
Create a PayPal REST app
In the PayPal Developer Dashboard, create an app to obtain a Client ID and Client Secret.
Open Settings → Payments → Configure PayPal
Field Required Notes Client IDYes — Client SecretYes — ModeYes liveorsandbox(defaults tolive)Webhook IDRecommended Async capture events are rejected without it Add the webhook
PayPal webhook endpointhttps://app.yourdomain.com/v1/webhooks/paypalCreate a webhook for
PAYMENT.CAPTURE.COMPLETEDand paste its Webhook ID into the form.
API reference
/v1/settings/payments/paypal/v1/settings/payments/paypalConfiguration
Buyer checkout modes
When a buyer accepts a quote, TackQuote decides which payment path to surface. If you have both a storefront (enabled for checkout under Integrations) and an in-app gateway (Stripe/PayPal/Razorpay), the preferred checkout mode controls the primary call-to-action. Set it under Settings → Payments → Preferred buyer checkout.
| Mode | Behaviour |
|---|---|
platform | Prefer storefront checkout. The primary CTA sends buyers to your eCommerce platform; in-app gateways stay under "Other options". This is the default. |
gateway | Prefer Stripe / PayPal / Razorpay. Skip the storefront for Accept & Pay and use in-app gateways only. |
buyer_chooses | Show storefront and gateway buttons as equal, primary options and let the buyer decide. |
API reference
/v1/settings/payments/preferred-checkoutEnvironments
Test vs live mode
| Gateway | How mode is set | Test | Live |
|---|---|---|---|
| Stripe | Implied by key prefix | sk_test_… | sk_live_… |
| Razorpay | Implied by key prefix | rzp_test_… | rzp_live_… |
| PayPal | Explicit Mode field | sandbox | live |
Mode to live) once you've confirmed a successful payment end-to-end.Reference
Payment webhooks
Webhooks are how TackQuote confirms a payment and marks the quote as paid. Each provider posts to a dedicated endpoint; TackQuote verifies the signature against the secret you stored before acting on the event.
| Provider | Endpoint | Signature header | Key events |
|---|---|---|---|
| Stripe | POST /v1/webhooks/stripe | stripe-signature | checkout.session.completed, payment_intent.succeeded |
| Razorpay | POST /v1/webhooks/razorpay | x-razorpay-signature | payment.captured |
| PayPal | POST /v1/webhooks/paypal | Verified via headers + Webhook ID | PAYMENT.CAPTURE.COMPLETED |