Payment Methods Supported by the Sources API

    Learn about the different payment methods and mechanisms available through the Sources API.

    Source objects allow you to accept a variety of payment methods with one single API. They represent a customer’s payment instrument and can be used with the Stripe API to create payments. They can be charged directly or attached to customers for later reuse.

    Each payment method supported by the Sources API is defined by four key characteristics. The combination of these determine how a source is made chargeable and used in a charge request to complete a payment.

    • Pull or push: How the funds for the method of payment are transferred from your customer
    • Flow: The type of action your customer needs to take to authenticate the payment
    • Usage: Whether the Source is reusable or not
    • Synchronous or asynchronous: Whether the resulting charge can be confirmed immediately or if it takes time

    Supported payment methods

    You can enable any payment methods available to you within the Dashboard. Activation is generally instantaneous and does not require any additional contract or lengthy process. The table below summarizes the payment methods currently supported and how they map to the key characteristics listed above with links to their specific guides.


    None Redirect Code verification Receiver
    Pull Synchronous
    Asynchronous
    Push Synchronous
    Asynchronous

    Pull or push of funds

    Each method of payment is categorized as either pull or push, depending on how the transfer of funds from the customer’s payment method takes place.

    • Using a pull method, you debit the funds from the customer’s account after they have provided consent. Card payments are an example of a pull method—your customer’s card is debited when a payment is made (without requiring any customer interaction for subsequent debits).
    • Using a push method, the customer sends the funds to you. Bitcoin is an example of a push method—your customer is provided a receiver address to send (push) the correct amount of bitcoin to. Once it’s confirmed that your customer has sent the funds to you, the source becomes chargeable and is ready to be used in a charge request. Other push payment methods such as iDEAL or SOFORT rely on a redirect for your customer to push the money to you directly from their online bank account. Generally, push methods require a customer interaction for each payment.

    Flow for customer action

    Overview of the customer action flow

    Certain payment methods require your customer to complete a particular action (flow) before the source is made chargeable. The type of flow that applies to a payment method is stated within the Source object’s flow parameter.

    Each method is categorized into one of the following flow types. Click on each to view the appropriate diagram above:

    • None: No action is required from your customer. Some payment methods (generally pull methods), such as cards (excluding 3D Secure), require no additional authentication beyond collecting the payment information from customers. Sources representing this payment method can be used immediately when making charge requests.
    • Redirect: Your customer must approve the payment through a redirect (to their online banking service, as an example). When creating a source for this type of payment method, the Source object contains the URL to redirect your customer to.
    • Code verification: Your customer must verify ownership of their account by providing a code that you post to the Stripe API.
    • Receiver: Your customer must push funds to the account information provided. The Source object contains suitable account information that your customer must push funds to.

    Once a source becomes chargeable after the required flow has been completed, it must be used to make a charge request for the payment to be completed. If not, the source is canceled and the customer’s authenticated payment is refunded automatically—no money is moved into your account.

    Single-use or reusable

    Certain payment methods allow for the creation of sources that can be reused for additional payments without your customer needing to complete the payment process again. Sources that can be reused have their usage parameter set to reusable.

    Conversely, if a source can only be used once, this parameter is set to single_use and a source must be created each time a customer makes a payment. Such sources should not be attached to customers and should be charged directly instead. They can only be charged once and their status will transition to consumed when they get charged.

    Reusable sources must be attached to a Customer in order to be reused (they will get consumed as well if otherwise charged directly). Refer to the Sources & Customers guide to learn how to attach Sources to Customers and manage a Customer’s sources list.

    Synchronous or asynchronous confirmation

    The status of a Charge object created using any payment method source can either be confirmed immediately (synchronously) or after a certain amount of time (asynchronously).

    • With a synchronous payment method, the charge request’s status can be immediately confirmed as either succeeded or failed. If the charge request is successful, the payment is completed—it’s considered guaranteed that the customer has been charged and that you’ll receive the funds. Card payments are an example of a synchronous payment method as there is real-time confirmation of the payment’s success or failure.

    • For asynchronous payment methods, it can take up to several days to confirm if the payment has been successful, during which time the payment cannot be guaranteed. The status of payment’s Charge object is initially set to pending until it has been confirmed as successful or failed. ACH debits are an example of an asynchronous method as it takes a few days to confirm that the payment has succeeded.

    Stripe sends a webhook event once the charge’s status has changed. When accepting any payment method that is asynchronous, your integration must be able to receive webhooks so it can receive this notification and confirm whether the customer’s payment was successful or if it has failed.

    Related resources