There are two ways to charge a Stripe-connected card during a phone call (IVR, agent-assisted, or AI voice agent): Twilio's own Stripe Pay Connector, or Shuttle's Pay Connector with Stripe configured as your gateway.
Both use Twilio's <Pay> verb for PCI-compliant card capture. The difference is what sits between Twilio and Stripe. The native connector links <Pay> to a single Stripe account and covers simple in-call charge and tokenisation. Shuttle connects Stripe (and 30+ other gateways) through one connector, adding multi-gateway routing, cross-channel token reuse, and multi-merchant management.
This guide walks through how the Stripe + Twilio integration works via Shuttle, how to set it up, and when the native Stripe connector is the better fit.
Two Ways to Connect Stripe to Twilio
Twilio ships a first-party Stripe Pay Connector: you authorise it against your Stripe account via Stripe Connect OAuth, and <Pay> can then charge or tokenise cards straight into Stripe. Since January 2024 Twilio bills $0.15 per successful transaction for it. If you have one Stripe account and only ever need a simple in-call charge, it is the simplest path, and we say so plainly in our full comparison of the Twilio Stripe Pay Connector.
The native connector's ceiling shows up quickly for platforms and contact centres: it is Stripe-only, there is no multi-gateway support, no multi-merchant management, refunds and post-payment operations happen outside the call flow in Stripe directly, and Twilio's docs do not list it for the Ireland (IE1) or Australia (AU1) regions.
Shuttle provides the multi-gateway alternative: a Pay Connector that accepts card data from Twilio's <Pay> verb and routes it to Stripe's API for processing. Your Stripe account and Stripe fees stay exactly as they are. What changes is everything around the transaction: routing, token reuse across channels, and merchant management.
How It Works
Caller → Twilio (DTMF capture) → Shuttle (Pay Connector) → Stripe (processing) → Result
Caller reaches payment step. Your Twilio call flow (IVR or custom TwiML) triggers the
<Pay>verb.Card details captured via DTMF. The caller enters their card number, expiry, and CVV on the keypad. The digits never reach the agent or the call recording.
Shuttle receives card data. The data passes from Twilio's PCI-compliant environment directly to Shuttle's connector. It never touches your servers.
Shuttle charges the card via Stripe. The connector creates a Stripe PaymentIntent (or charge), processes the transaction, and handles the response.
Result returned to your call flow. Your webhook receives the Stripe charge ID, last four digits, card brand, and transaction status. The call continues.
The caller stays on the line. No redirects, no "please visit our website."
Step-by-Step Setup
Prerequisites
A Twilio account with voice capability
A Stripe account with API keys
A Shuttle account (free to create; see pricing)
Step 1: Install Shuttle's Pay Connector
Go to the Twilio Marketplace and install the Shuttle Pay Connector. This adds Shuttle as an available connector in your Twilio account's Pay configuration.
Step 2: Add Stripe Credentials to Shuttle
Log into the Shuttle dashboard. Navigate to Payment Profiles and create a new profile:
Gateway: Stripe
API key: Your Stripe secret key (
sk_live_...)Currency: Set your default (GBP, USD, EUR, etc.)
Mode: Live or Test (use
sk_test_...for testing)
Save the profile. Shuttle now has a live connection to your Stripe account.
Step 3: Configure Your Twilio Call Flow
Add the <Pay> verb to your TwiML:
<Response>
<Say>Please enter your card number followed by the hash key.</Say>
<Pay paymentConnector="shuttle-pay-connector"
chargeAmount="29.99"
currency="GBP"
description="Monthly subscription"
action="/payment-complete">
</Pay>
</Response>Key parameters:
paymentConnector: set toshuttle-pay-connectorchargeAmount: the amount to chargecurrency: ISO currency codeaction: your webhook endpoint for the payment result
Step 4: Handle the Payment Result
Twilio sends a POST to your action URL with the payment result:
{
"Result": "success",
"PaymentCardNumber": "xxxx-xxxx-xxxx-4242",
"PaymentCardType": "visa",
"PaymentConfirmationCode": "ch_3ABC123...",
"ProfileId": "your-shuttle-profile-id"
}Use the PaymentConfirmationCode to look up the charge in Stripe if needed. Update your order, confirm to the caller, and continue the flow.
Step 5: Test
Use Stripe's test mode (sk_test_...) and Twilio's test credentials to verify the flow end-to-end before going live. Test card numbers: 4242 4242 4242 4242 (Visa), 5555 5555 5555 4444 (Mastercard).
What You Can Do With Stripe + Twilio
Charge Immediately
Standard auth-and-capture. The caller pays, Stripe processes, done.
Authorise Now, Capture Later
Place a hold on the card during the call. Capture the payment later: useful for hotel reservations, car hire deposits, or any scenario where the final amount might change.
Tokenise for Future Use
Capture card details once over the phone. Shuttle tokenises the card via Stripe and returns a reusable token. Use it for future payments across any channel: web, mobile, voice, or payment links. The card data is never stored in your systems.
Recurring Payments
Combine tokenisation with Stripe's subscription or recurring payment features. Capture the card securely over a phone call, then use the token for ongoing charges without the customer needing to call again.
Multi-PSP: Beyond Stripe
One of the key advantages of using Shuttle rather than a Stripe-only connector is flexibility. Your Twilio integration stays the same even if you:
Add a second gateway: serve your UK merchants with Worldpay and your US merchants with Stripe
Serve enterprise customers who mandate a specific PSP (Adyen, Checkout.com, Global Payments, etc.)
Want a backup gateway: if Stripe is down, you can move the affected payment types to another connected gateway. There is no automatic failover, and saved cards stay with the gateway that stored them, so repeat payments on stored cards will not run through the second one
Expand to new markets, with each merchant or entity there on its own gateway
You choose which connected provider handles each payment type in Shuttle’s dashboard. Your Twilio call flow doesn't change. The <Pay> verb always points to shuttle-pay-connector: Shuttle sends the payment to the provider you configured.
This is particularly important for platforms and BPOs that serve multiple merchants. Each merchant can use their own Stripe account (or another supported voice gateway) through the same Twilio integration.
PCI Compliance
The Stripe + Twilio integration via Shuttle limits your PCI scope:
Layer | PCI handled by |
|---|---|
Twilio | |
Card data processing | Shuttle (PCI DSS Level 1) |
Payment processing | Stripe (PCI DSS Level 1) |
Your systems | Merchants: SAQ-A. Platforms: SAQ-D. |
Card data flows from Twilio → Shuttle → Stripe. Your application only receives redacted data (last 4 digits, card brand, charge ID). Merchants complete SAQ-A, the lightest PCI self-assessment; platforms complete SAQ-D. Everyone taking card payments has to be PCI compliant, and your acquirer confirms which form applies to you.
For the full picture on PCI compliance with Twilio, see Twilio PCI Compliance: Payments Without Handling Card Data.
FAQ
Can I connect Stripe to Twilio without Shuttle? Yes. Twilio has a built-in Stripe Pay Connector that links <Pay> to a single Stripe account for in-call charges and tokenisation. It suits simple, single-account setups. Choose Shuttle when you need multiple gateways or merchants, per-merchant gateway selection, cross-channel token reuse, or availability in Twilio's IE1 and AU1 regions.
Can I use Stripe Connect with this? Not at the platform level. Shuttle doesn't connect to a Stripe Connect parent/platform account and route payments to connected accounts dynamically: there's no way to point Twilio <Pay> at a Connect platform key and have Shuttle distribute charges across sub-accounts.
What you can do: add each Stripe account as its own Shuttle payment profile using that account's own API key. That includes individual Stripe Connect connected accounts: if you have direct API key access to the connected (sub) account, add it as a standalone profile in Shuttle and route Twilio calls to that profile. Each sub-account = one Shuttle profile.
What about Stripe's test mode? Fully supported. Use your Stripe test API key (sk_test_...) in Shuttle and test the full flow with Twilio before going live.
What does it cost? Shuttle charges $49 per live instance per month, plus from $0.20 per transaction, falling with volume, billed through your Twilio account. Stripe's standard fees apply on top (2.9% + 30¢ or your negotiated rate).
Can I switch from Stripe to another gateway later? Yes. Change the gateway in your Shuttle payment profile. Your Twilio call flow stays exactly the same, with no code changes needed. Saved cards stay with the gateway that stored them, so repeat payments on stored cards will not move to the new gateway.
Related Reading
Twilio Stripe Pay Connector: Features, Limits and the Multi-Gateway Alternative (the full native-vs-Shuttle comparison)
Twilio Pay Connectors: How to Connect Any Compatible Payment Gateway: the complete guide to Twilio Pay Connectors and multi-PSP routing
Twilio PCI Compliance: Payments Without Handling Card Data (how to keep your PCI scope limited)
How to Connect Adyen to Twilio for Voice Payments: step-by-step Adyen + Twilio setup
How to Connect Worldpay to Twilio for Voice Payments: step-by-step Worldpay + Twilio setup
How to Connect Checkout.com to Twilio for Voice Payments: step-by-step Checkout.com + Twilio setup
Stripe Alternatives for Platforms: why platforms choose PSP-neutral infrastructure over Stripe-only
Shuttle vs Stripe for Platforms: comparing embedded payment approaches
Twilio Pay: Connect Any Compatible Payment Gateway to Twilio: all supported gateways, pricing, and setup
Connect Stripe to Twilio with Shuttle's Pay Connector: PCI DSS Level 1, $49 per live instance per month, plus from $0.20 per transaction, falling with volume, billed through your Twilio account. Install on Twilio or book a discovery call.