Stripe Integration Guide

PayPal's partnership with Stripe enables merchants to leverage their existing Braintree integration to process transactions through the PayPal Orchestration platform.

Use this guide if you are a US-based merchant who wants to route card transactions through Stripe using your existing Braintree integration. This guide covers setup, transaction operations, status mapping, response codes, and testing. For SDK and GraphQL code examples, see the relavant links in Related content.

FeaturesAnchorIcon

The following topics summarize the capabilities that this integration supports.

Core transaction lifecycleAnchorIcon

The following table describes support for the core transaction lifecycle operations with this integration.

Legend: ✅ Supported | ❌ Not supported | ⚠️ Conditional or varies by merchant configuration

CapabilitySupportNotes
Core transaction lifecycle
Charge (single step)Authorize and capture in the same call through the the Braintree SDK or GraphQL.
Charge (dual step)Authorize and then capture in separate steps through the Braintree SDK (authorize, capture) or GraphQL (authorize, capture).
Standalone authorizationCapture authorization within 7 days (before it expires). This is available through the Braintree SDK or GraphQL.
Capture (full)Captures a previously authorized transaction. This is available through the Braintree SDK or GraphQL.
Partial capture
Capture greater than authorized amount
Adjust Authorization API (incremental auth / partial reversal)

Voids and refundsAnchorIcon

The following table describes support for voids and refusals with this integration.

Legend: ✅ Supported | ❌ Not supported | ⚠️ Conditional or varies by merchant configuration

CapabilitySupportNotes
Full void (auth reversal)Voids cancel an authorized transaction prior to settlement.
Partial void
Void on settled transactionUse refund instead.
Full refundMerchants must have sufficient funds in their Stripe account.
Partial refundRefunds cannot exceed the settled amount.
Multiple refunds
Blind credits (refunds for transactions processed elsewhere)Refunds must reference the original transaction.

Payment instruments and methodsAnchorIcon

The following table describes support for payment instruments and methods with this integration.

Legend: ✅ Supported | ❌ Not supported | ⚠️ Conditional or varies by merchant configuration

CapabilitySupportNotes
Credit cardsUSA: Mastercard, Visa, Diners, American Express, JCB, UnionPay
Debit cardsUSA: Mastercard, Visa, American Express, JCB, Diners
Prepaid cards⚠️Supported where Stripe supports prepaid.
PLCCs
Gift cards
Apple Pay
Google Pay
Venmo (PayPal)

Data, descriptors, and fraud signalsAnchorIcon

The following table describes support for data, descriptors, and fraud signals with this integration.

Legend: ✅ Supported | ❌ Not supported | ⚠️ Conditional or varies by merchant configuration

CapabilitySupportNotes
Card Verification Value (CVV) response handlingCVV results are returned in response fields for authorization.
Dynamic descriptors1–22 character limit
Network tokensBraintree-managed and Bring Your Own Token are both available. For more information, see Network tokens.
Level 2/3 and lodging data

VerificationsAnchorIcon

The following table describes support for verifications with this integration.

Legend: ✅ Supported | ❌ Not supported | ⚠️ Conditional or varies by merchant configuration

CapabilitySupportNotes
3D Secure (3DS)Supported for US transactions
$0 verificationStripe requires a minimum charge of $0.50 for card validation.
Non-zero verificationMinimum charge of $0.50 required for card validation.
Wallet verificationThis integration does not support Apple Pay and Google Pay verifications.

Before you beginAnchorIcon

To complete this integration, you must set up Braintree and Stripe:

  1. To set up currency-specific Braintree merchant accounts for use in your integration, contact your Braintree account manager (AM) or technical account manager (TAM).
  2. When you have your Stripe account, work with your AM or TAM to configure the Stripe connection within the Braintree control panel. Stripe provides distinct API keys for sandbox and production environments. You must create the connection using the correct key for each environment.
  3. Set up your environments to process the transactions using the information in Transactions.
  4. Confirm your setup by processing a test transaction using the sandbox test cards that are listed in this guide.

Also review the following Stripe-specific requirements to ensure that you are in compliance before processing transactions through Stripe:

  • Cardholder name: All Stripe transactions require the cardholderName. You must must include it during payment method tokenization.
  • Refunds: Merchants must have sufficient funds in their Stripe account to cover any refund amounts. If adequate funds are unavailable when a refund is initiated, Stripe will place the refund in PENDING status. If Stripe returns a PENDING refund, Braintree will receive the final status update through a webhook when the refund succeeds or fails. No intermediate updates are sent while the refund remains in the PENDING state.
  • Webhooks: Braintree registers webhook endpoints for refund.updated and refund.created Stripe events to receive final settlement status for pending refunds. Merchants are not required to implement their own webhooks.

TransactionsAnchorIcon

The following topics describe the requirements for this integration.

For general information about Braintree transactions, see:

Transaction creationAnchorIcon

Stripe transactions require the following Braintree fields.

FieldLocationHow to provideNotes
creditCard.numberPayment MethodInclude during tokenizationCard number
creditCard.expirationMonthPayment MethodInclude during tokenizationFormat: MM
creditCard.expirationYearPayment MethodInclude during tokenizationFormat: YYYY
amountTransactionInclude in transactionTransaction amount. Decimals are supported.
billing.countryCodePayment MethodInclude during tokenizationTwo-letter ISO country code. Must be US.
card.cardholderName (SDK) / creditCard.cardholderName (GraphQL)Payment MethodInclude during tokenizationName as it appears on the card

Fields that Braintree passes to StripeAnchorIcon

The following table maps Braintree fields to the corresponding Stripe fields for authorization and charge operations.

Braintree fieldStripe fieldRequiredNotes
amountamountConverted to cents (×100)
currencyIsoCodecurrencyThree-letter ISO currency code, lowercase
billing.countryCodeAlpha2billing_details.address.countryTwo-letter ISO country code. Must be US.
billing.postalCodebilling_details.address.postal_code
billing.streetAddressbilling_details.address.line1
billing.localitybilling_details.address.city
billing.regionbilling_details.address.state
customer.emailbilling_details.email
customer.phonebilling_details.phone
descriptor.namestatement_descriptor22-character limit
threeDSecureData.cavvpayment_method_options.card.three_d_secure.cavv3DS CAVV value
threeDSecureData.dsTransactionIdpayment_method_options.card.three_d_secure.ds_transaction_id3DS Directory Server Transaction ID
threeDSecureData.eciFlagpayment_method_options.card.three_d_secure.eci3DS Electronic Commerce Indicator
threeDSecureData.versionpayment_method_options.card.three_d_secure.versionFor example, "2.1.0"
threeDSecureData.xIdpayment_method_options.card.three_d_secure.xid3DS XID value
networkTransactionIdentifierpayment_method_options.card.mit_exemption.network_transaction_idIncluded for Merchant Initiated Transactions (MIT)

Customer creationAnchorIcon

Customer creation is optional but recommended for the Stripe integration. For more information, see the SDK or GraphQL documentation.

Vaulted payment methodsAnchorIcon

Vaulting a tokenized payment method creates an entity that can be authorized or charged multiple times. For more information, see the SDK or GraphQL documentation.

You also can vault a tokenized payment method during authorization. For more information, see the SDK or GraphQL documentation.

Transaction object supportAnchorIcon

The following topics describe support for transaction operations and CVV handling with this integration.

Supported transaction operationsAnchorIcon

The following table documents which transaction operations this integration supports.

Legend: ✅ Supported | ❌ Not supported |

OperationSupported
Transaction: Sale
Transaction: Find
Transaction: Void
Transaction: Refund
Transaction: Submit for Settlement
Transaction: Clone
Transaction: Search
Transaction: Adjust Authorization
Transaction: Hold in Escrow
Transaction: Release from Escrow
Transaction: Submit for Partial Settlement
Transaction: Cancel Release

CVV handlingAnchorIcon

For recurring transactions or when using vaulted cards, the CVV might not be present.

Transaction status mappingAnchorIcon

For general information about Braintree result objects, see Result Objects.

The following table maps Stripe responses to Braintree transaction statuses.

OperationStripe responseBraintree transaction statusAdditional information
AuthorizeSuccessAUTHORIZEDAuthorization must be captured within 7 days.
AuthorizeDeclinedPROCESSOR_DECLINEDHard decline from issuer or Stripe
AuthorizeAPI ErrorFAILEDNetwork or server error when communicating with Stripe
Charge (single step)SuccessSETTLEDAuthorization and capture are completed in one step.
Charge (single step)DeclinedPROCESSOR_DECLINEDHard decline from issuer or Stripe
Charge (single step)API ErrorFAILEDNetwork or server error when communicating with Stripe
CaptureSuccessSETTLED
CaptureDeclinedSETTLEMENT_DECLINEDThis can occur when authorization has expired.
CaptureAlready captured (idempotent)SETTLEDPayment intent was already in the succeeded state.
CaptureAuthorization already voidedVOIDEDPayment intent was previously canceled.
CaptureConnector error (HTTP 500)SETTLINGRare event. Braintree reconciles this transaction. Do not ship goods until status is SETTLED. For more information, see SETTLING status with HTTP errors.
RefundSuccessSETTLED
RefundPending (insufficient funds)SETTLINGStripe will process when funds become available. Braintree will receive the final status update through a webhook when the refund settles.
RefundDeclinedSETTLEMENT_DECLINEDRare event that can occur during disputes or chargebacks
RefundConnector error (HTTP 500)SETTLINGRare event. Braintree will reconcile this transaction. For more information, see SETTLING status with HTTP errors.
VoidSuccess or already canceledVOIDEDIdempotent: returns VOIDED even if already voided on Stripe's side.
VerifyCardSuccessVERIFIED
VerifyCardDeclinedPROCESSOR_DECLINED
VerifyCardAPI ErrorFAILED
VoidCardVerificationSuccess or already canceledVOIDEDBraintree calls Stripe to cancel the verification payment intent. Idempotent if already canceled.

SETTLING status with HTTP errorsAnchorIcon

In rare cases when Stripe returns HTTP 4xx/5xx errors during capture or refund, the transaction may remain in SETTLING status while Braintree reconciles the outcome. This can happen due to:

  • Network or server overload
  • Stripe API unavailability

Reconciliation logic: Braintree queries Stripe for transaction status for capture, refund, and charge. If Stripe confirms the operation succeeded, the transaction moves to SETTLED. If Stripe declines, the transaction moves to SETTLEMENT_DECLINED.

Possible outcomes:

  • If Stripe approves, the status changes to SETTLED.
  • If Stripe declines, the status changes to SETTLEMENT_DECLINED.

FAILED status during chargeAnchorIcon

If Braintree doesn't receive an inline response from Stripe due to network errors or timeouts, the charge transaction status is set to FAILED. Unlike capture and refund, Braintree does not automatically reconcile charge errors. If you are unsure whether a charge was created, query the transaction (Find/Search) using your internal transaction reference before attempting a second create.

RetriesAnchorIcon

Follow these guidelines when implementing retry logic for Stripe transactions.

  • Do not build a "duplicate capture/refund retry loop" when you see success: true but status is SETTLING.
  • Always rely on transaction status before shipping goods or confirming the final outcome.
  • If your request times out or you are unsure whether a transaction was created, query the transaction (Find/Search) using your internal transaction reference (transactionId) before attempting a second create.
  • Retry logic on FAILED transactions can be configured at the merchant account level. For help with this configuration, contact your Braintree AM or TAM.

Network tokensAnchorIcon

Stripe supports network tokens. The integration includes:

To enable Braintree-managed network tokens for your account, contact your AM or Integration Engineer. For more information, see the Getting Started with Network Tokens guide.

Response codesAnchorIcon

Braintree can only display a limited number of response codes, because Stripe controls transaction results. When Stripe decline codes cannot be mapped to like-for-like Braintree decline codes, Braintree returns code 2000 with this message: Do Not Honor.

To query for the Stripe response message, use:

Processor response pass-through and debuggingAnchorIcon

Because approval and decline outcomes are ultimately controlled by Stripe, Braintree surfaces a standardized set of result codes. For detailed processor response information, see the appropriate documentation:

CVV response code mappingAnchorIcon

The following table maps Stripe CVV check results to Braintree CVV response codes.

Stripe CVV checkBraintree CVV response codeMeaning
passMMatch
failNNo Match
unavailableSIssuer does not support CVV
uncheckedUNot Processed
(absent)INot Provided

Failure response code mappingAnchorIcon

The following table maps Braintree error codes to Stripe error codes and decline codes.

Braintree error codeBraintree error messageStripe error codeStripe decline code
2000Do Not Honorcard_declineddo_not_honor
2000Do Not Honorcard_declinedapprove_with_id
2000Do Not Honorcard_declinedcall_issuer
2001Insufficient Fundsbalance_insufficientN/A
2001Insufficient Fundsinsufficient_fundsN/A
2001Insufficient Fundsbalance_insufficientinsufficient_funds
2002Limit Exceededcard_declinedcard_velocity_exceeded
2004Expired Cardcard_declinedexpired_card
2004Expired Cardexpired_cardN/A
2004Expired Cardexpired_or_canceled_cardN/A
2005Invalid Credit Card Numbercard_declinedincorrect_number
2005Invalid Credit Card Numbercard_declinedinvalid_number
2005Invalid Credit Card Numbercard_declinedinvalid_account
2005Invalid Credit Card Numberincorrect_numberN/A
2006Invalid Expiration Datecard_declinedinvalid_expiry_month
2006Invalid Expiration Datecard_declinedinvalid_expiry_year
2006Invalid Expiration Dateinvalid_expiry_monthN/A
2006Invalid Expiration Dateinvalid_expiry_yearN/A
2010Card Issuer Declined CVVcard_declinedincorrect_cvc
2010Card Issuer Declined CVVcard_declinedinvalid_cvc
2010Card Issuer Declined CVVincorrect_cvcN/A
2010Card Issuer Declined CVVinvalid_cvcN/A
2012Possible lost or stolen cardlost_or_stolen_cardN/A
2014Processor Declined – Fraud Suspectedcard_declinedfraudulent
2014Processor Declined – Fraud Suspectedcard_declinednot_permitted
2014Processor Declined – Fraud Suspectedpayment_method_customer_declineN/A
2016Duplicate Transactioncard_declinedduplicate_transaction
2017Cardholder Stopped Billingcard_declinedstop_payment_order
2019Invalid Transactioncard_declinedcard_not_supported
2024Card Type Not Enabledinvalid_card_typeN/A
2029Setup Error - Cardpayment_method_not_availableN/A
2033Inconsistent Datacard_declinedincorrect_zip
2033Inconsistent Datacardholder_phone_number_requiredN/A
2033Inconsistent Dataemail_invalidN/A
2033Inconsistent Dataincorrect_addressN/A
2033Inconsistent Dataincorrect_zipN/A
2033Inconsistent Datapostal_code_invalidN/A
2047Call Issuer. Pick Up Cardcard_declinedpickup_card
2048Invalid Amountamount_too_smallN/A
2048Invalid Amountamount_too_smallinvalid_amount
2048Invalid Amountinvalid_charge_amountN/A
2053Card reported as lost or stolencard_declinedlost_card
2053Card reported as lost or stolencard_declinedstolen_card
2057Issuer or Cardholder restrictioncard_declinedrestricted_card
2059Address Verification Failedpayment_method_billing_details_address_missingN/A
2060Address Verification and CVV Failedaccount_country_invalid_addressN/A
2061Invalid Transaction Datainvalid_charactersN/A
2064Invalid Currency Codecard_declinedcurrency_not_supported
2067Authorization Expiredcapture_charge_authorization_expiredN/A
2067Authorization Expiredcard_declinedN/A
2067Authorization Expiredcharge_expired_for_captureN/A
2075Payer Account Locked/Closedaccount_closedN/A
2099Cardholder Authentication Requiredcard_declinedauthentication_required
2102Incorrect PINcard_declinedincorrect_pin
2102Incorrect PINcard_declinedinvalid_pin
2102Incorrect PINcard_declinedoffline_pin_required
2102Incorrect PINcard_declinedonline_or_offline_pin_required
2102Incorrect PINcard_declinedprocessing_error
2103PIN try exceededcard_declinedpin_try_exceeded
2107Card Not Activatedcard_declinednew_account_information_available
4001Settlement Declinedcard_declined(multiple decline codes)
4001Settlement DeclineddeclinedN/A
4001Settlement DeclinedunknownN/A
4004Already Refundedcharge_already_refundedN/A
4004Already Refundedreturn_intent_already_processedN/A
4006Capture Amount Exceededamount_too_largeN/A
4019Refund with Open Case Not Allowedrefund_disputed_paymentN/A
4024Refund Time Limit Exceededcharge_not_refundableN/A

Test cardsAnchorIcon

Braintree provides a set of test card numbers for sandbox testing. With the Stripe integration, some Braintree test card numbers are automatically mapped to Stripe test card numbers.

Credit cards: SuccessAnchorIcon

The following test card numbers produce successful transaction results in the sandbox.

Card brandBraintree test numberStripe test numberAutomatically mapped
American Express378282246310005378282246310005
Diners Club362596000000043056930009020004
Discover60110009913000096011111111111117
Mastercard55555555555544445555555555554444Pass-through
Visa41111111111111114242424242424242
JCB35301113333000003566002020360505
UnionPay62430300000000016200000000000005

Credit cards: FailureAnchorIcon

The following test card numbers produce declined or error results in the sandbox.

ScenarioBraintree test numberStripe test numberAutomatically mapped?Braintree result
Processing Error Decline40001111111111154000000000000119Processor Declined
Insufficient Funds51051051051051004000000000009995Processor Declined
Lost Card3787344936710004000000000009987Processor Declined
Stolen Card60110009901394244000000000009979Processor Declined
Expired Card38520000000098144000000000000069Processor Declined
Expired Card (Visa)40128888888818814000000000000069Processor Declined
Card Velocity Exceeded35660020203605054000000000006975Processor Declined

The following resources provide additional information for working with Stripe and Braintree.