Platform
Chatbot Builder Bulk Messaging Team Inbox Mini CRM API & Webhooks AI Integration WhatsApp Flows
Industries
E-commerce & D2C Real Estate Education Healthcare Finance & BFSI Logistics Hospitality Retail
Integrations 📚 Learn 📝 Blog 🗂 Codex Pricing Start Free Trial →
Connect  ›  Connect Stripe to WhatsApp
Payment connection guide

Connect Stripe to WhatsApp

Stripe is the most widely used payment gateway for international transactions. This guide uses Stripe Checkout Sessions, the cleanest way to generate a dynamic, one-time payment URL to send to a customer on WhatsApp.

 Published 21 June 2026  8 min read  Live-researched  India-first

Stripe uses standard Bearer token auth, the same pattern as OpenAI and Mistral, so if you have connected an AI provider the auth step will feel familiar. The key difference is that the request body uses form encoding by default, though JSON also works with the right Content-Type header.

For WhatsApp, Stripe Checkout Sessions are better than Stripe Payment Links. A Checkout Session takes the amount and product details inline, returns a one-time hosted checkout URL, and expires after the customer completes or abandons the payment. That matches how WhatsApp transactions work: one customer, one order, one link.

New to the External API Request step? Read the foundation guide first.

Step 1: Get your Stripe secret key

1

Log in to your Stripe Dashboard

Go to dashboard.stripe.com and log in or create an account.
2

Open Developers, then API Keys

In the left menu, go to Developers and then API Keys. You see a publishable key and a secret key.
3

Copy the secret key

Copy only the secret key (sk_test_... for testing, sk_live_... for production). Never use the publishable key (pk_...) for API calls from a server.

 Test keys vs live keys

Stripe test keys (sk_test_) do not process real payments. Use them while building and testing your flow. Switch to sk_live_ only when you are ready to accept real payments. The API endpoint is the same for both; only the key changes.

Step 2: Fill in the External API Request step

External API Request
Method
POST
Request URL
https://api.stripe.com/v1/checkout/sessions
Auth Type
Bearer token
Header Parameters
Authorization
Bearer sk_live_YOUR_SECRET_KEY
Content-Type
application/x-www-form-urlencoded
Body Type
Form (URL-encoded)
Response Type
Default Response
SaveRun and Save

 Stripe prefers form encoding, not JSON

Stripe's v1 API accepts form-encoded request bodies by default, with Content-Type: application/x-www-form-urlencoded. Set Body Type to Form in the External API Request step. JSON bodies also work if you set Content-Type to application/json, but form encoding is the documented default for Stripe v1.

Request URL

Request URL
https://api.stripe.com/v1/checkout/sessions

Body (form-encoded key-value pairs)

FieldValueNotes
modepaymentFor one-time payments
line_items[0][price_data][currency]inrCurrency code
line_items[0][price_data][product_data][name]{{product_name}}Name of what is being paid for
line_items[0][price_data][unit_amount]{{amount_paise}}Amount in smallest unit (paise for INR)
line_items[0][quantity]1Usually 1 per transaction
success_urlhttps://yoursite.com/successCustomer lands here after paying
cancel_urlhttps://yoursite.com/cancelCustomer lands here if they abandon

amount is in paise for INR (multiply rupee amount by 100). Map {{product_name}} and {{amount_paise}} from your flow.

Step 3: Send the checkout URL on WhatsApp

Response (key fields)
{
  "id": "cs_test_...",
  "object": "checkout.session",
  "url": "https://checkout.stripe.com/pay/cs_test_...",
  "status": "open",
  "expires_at": 1718999999,
  "amount_total": 50000,
  "currency": "inr"
}

Map the url field into the next WhatsApp message step. The message might read: 'Please complete your payment here: {{payment_url}}. This link expires in 24 hours.' The customer taps the link and pays on Stripe's hosted checkout page.

Troubleshooting

SymptomLikely causeFix
401 UnauthorizedWrong or missing secret keyConfirm the Authorization header starts with Bearer sk_ and the key is complete
400 Bad RequestMissing required fieldsEnsure mode, line_items, success_url, and cancel_url are all present
Amount confusionamount not in paiseMultiply rupee amount by 100; Rs 500 becomes 50000 in the request
Session expired linkCheckout session URL expiredSessions expire after 24 hours; generate a new session if the customer needs more time
Indian card declinedStripe India requires additional fields for some cardsCheck Stripe's India documentation for any RBI mandate requirements on domestic transactions

Common questions

Where do I get my Stripe API key?
+
Log in to your Stripe Dashboard at dashboard.stripe.com. Go to Developers, then API Keys. You see a publishable key and a secret key. Use only the secret key (sk_live_ or sk_test_) in the External API Request step; never use the publishable key for server-side calls.
Can Indian businesses use Stripe?
+
Yes. Stripe operates in India and supports INR payments, UPI, cards, and net banking. Indian businesses use Stripe primarily for international customers or for domestic transactions where they want Stripe's developer experience. For purely domestic Indian payments, Razorpay or Cashfree often offer better local payment method support.
What is a Stripe Price and why do I need one to create a payment link?
+
Stripe's payment links are built around Products and Prices. A Price is an item being sold at a specific amount. You create a Price once in your Stripe Dashboard (or via the API) and reference its ID when creating a payment link. This is different from Razorpay or Cashfree, which take an ad-hoc amount directly in the payment link request.
Can I create a payment link with a dynamic amount in Stripe?
+
The cleanest way is to use Stripe Checkout Sessions rather than Payment Links if you need to set the amount dynamically at the time of the WhatsApp conversation. A Checkout Session takes a price data object with the amount inline, and returns a url you can send to the customer, without needing a pre-created Price.
Does this cost anything on WA.Expert?
+
WA.Expert does not add a charge for the External API Request step. Stripe charges a per-transaction fee, usually 2-3 percent plus a flat amount, deducted from the settlement. INR settlements for domestic transactions may have different rates.
What is the difference between a Stripe payment link and a Checkout Session?
+
A payment link is a reusable URL tied to a specific price; it can be shared multiple times. A checkout session is a one-time, expiring checkout URL created fresh for each transaction. For WhatsApp, checkout sessions are usually more appropriate since each payment is for a specific customer and amount.
Related

Keep building

Connect Razorpay

India-first, strong UPI support, Basic Auth.

Read guide →

Connect Cashfree

Custom header auth, good for domestic Indian payments.

Read guide →

The External API Request step

Foundation guide.

Read guide →

Connect OpenAI

Same Bearer auth pattern as Stripe.

Read guide →

WhatsApp payment reminders

Automate follow-up on incomplete payments.

Read guide →

Connect hub

All connection guides.

Browse all →

Add Stripe checkout to your WhatsApp conversations.

Free trial, no credit card required. And if you ever get stuck, we are the only platform in India that answers you live on WhatsApp.

Start Free →Book Demo
1