---
title: "Hand-off a SetupIntent to a Reader"
method: POST
path: "/v1/terminal/readers/{reader}/process_setup_intent"
---

# Hand-off a SetupIntent to a Reader

`POST /v1/terminal/readers/{reader}/process_setup_intent`

Initiates a setup intent flow on a Reader.

## Path parameters

- `reader` string, required

## Response `200`

Successful response.

- TerminalReader — A Reader represents a physical device for accepting payment details. Related guide: [Connecting to a reader](https://stripe.com/docs/terminal/payments/connect-reader)
  - `action` TerminalReaderReaderResourceReaderAction — Represents an action performed by the reader
    - `failure_code` string, nullable — Failure code, only set if status is `failed`.
    - `failure_message` string, nullable — Detailed failure message, only set if status is `failed`.
    - `process_payment_intent` TerminalReaderReaderResourceProcessPaymentIntentAction — Represents a reader action to process a payment intent
      - `payment_intent` union, required — Most recent PaymentIntent processed by the reader.
        - string
        - PaymentIntent — A PaymentIntent guides you through the process of collecting a payment from your customer. We recommend that you create exactly one PaymentIntent for each order or customer session in your system. You can reference the PaymentIntent later to see the history of payment attempts for a particular session. A PaymentIntent transitions through [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) throughout its lifetime as it interfaces with Stripe.js to perform authentication flows and ultimately creates at most one successful charge. Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents)
          - `amount` integer, required — Amount intended to be collected by this PaymentIntent. A positive integer representing how much to charge in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
          - `amount_capturable` integer — Amount that can be captured from this PaymentIntent.
          - `amount_details` union
            - PaymentFlowsAmountDetails
              - …
            - PaymentFlowsAmountDetailsClient
              - …
          - `amount_received` integer — Amount that this PaymentIntent collects.
          - `application` union — ID of the Connect application that created the PaymentIntent.
            - string
            - Application
              - …
          - `application_fee_amount` integer, nullable — The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. The amount of the application fee collected will be capped at the total payment amount. For more information, see the PaymentIntents [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts).
          - `automatic_payment_methods` PaymentFlowsAutomaticPaymentMethodsPaymentIntent
            - `allow_redirects` 'always' | 'never' — Controls whether this PaymentIntent will accept redirect-based payment methods. Redirect-based payment methods may require your customer to be redirected to a payment method's app or site for authentication or additional steps. To [confirm](https://stripe.com/docs/api/payment_intents/confirm) this PaymentIntent, you may be required to provide a `return_url` to redirect customers back to your site after they authenticate or complete the payment.
            - `enabled` boolean, required — Automatically calculates compatible payment methods
          - `canceled_at` integer, nullable — Populated when `status` is `canceled`, this is the time at which the PaymentIntent was canceled. Measured in seconds since the Unix epoch.
          - `cancellation_reason` 'abandoned' | 'automatic' | 'duplicate' | 'failed_invoice' | 'fraudulent' | 'requested_by_customer' | 'void_invoice', nullable — Reason for cancellation of this PaymentIntent, either user-provided (`duplicate`, `fraudulent`, `requested_by_customer`, or `abandoned`) or generated by Stripe internally (`failed_invoice`, `void_invoice`, or `automatic`).
          - `capture_method` 'automatic' | 'automatic_async' | 'manual', required — Controls when the funds will be captured from the customer's account.
          - `client_secret` string, nullable — The client secret of this PaymentIntent. Used for client-side retrieval using a publishable key. The client secret can be used to complete a payment from your frontend. It should not be stored, logged, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret. Refer to our docs to [accept a payment](https://stripe.com/docs/payments/accept-a-payment?ui=elements) and learn about how `client_secret` should be handled.
          - `confirmation_method` 'automatic' | 'manual', required — Describes whether we can confirm this PaymentIntent automatically, or if it requires customer action to confirm the payment.
          - `created` integer, required — Time at which the object was created. Measured in seconds since the Unix epoch.
          - `currency` string, currency, required — Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
          - `customer` union — ID of the Customer this PaymentIntent belongs to, if one exists. Payment methods attached to other Customers cannot be used with this PaymentIntent. If [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) is set and this PaymentIntent's payment method is not `card_present`, then the payment method attaches to the Customer after the PaymentIntent has been confirmed and any required actions from the user are complete. If the payment method is `card_present` and isn't a digital wallet, then a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card is created and attached to the Customer instead.
            - string
            - Customer — This object represents a customer of your business. Use it to [create recurring charges](https://stripe.com/docs/invoicing/customer), [save payment](https://stripe.com/docs/payments/save-during-payment) and contact information, and track payments that belong to the same customer.
              - …
            - DeletedCustomer
              - …
          - `description` string, nullable — An arbitrary string attached to the object. Often useful for displaying to users.
          - `id` string, required — Unique identifier for the object.
          - `invoice` union — ID of the invoice that created this PaymentIntent, if it exists.
            - string
            - Invoice — Invoices are statements of amounts owed by a customer, and are either generated one-off, or generated periodically from a subscription. They contain [invoice items](https://stripe.com/docs/api#invoiceitems), and proration adjustments that may be caused by subscription upgrades/downgrades (if necessary). If your invoice is configured to be billed through automatic charges, Stripe automatically finalizes your invoice and attempts payment. Note that finalizing the invoice, [when automatic](https://stripe.com/docs/invoicing/integration/automatic-advancement-collection), does not happen immediately as the invoice is created. Stripe waits until one hour after the last webhook was successfully sent (or the last webhook timed out after failing). If you (and the platforms you may have connected to) have no webhooks configured, Stripe waits one hour after creation to finalize the invoice. If your invoice is configured to be billed by sending an email, then based on your [email settings](https://dashboard.stripe.com/account/billing/automatic), Stripe will email the invoice to your customer and await payment. These emails can contain a link to a hosted page to pay the invoice. Stripe applies any customer credit on the account before determining the amount due for the invoice (i.e., the amount that will be actually charged). If the amount due for the invoice is less than Stripe's [minimum allowed charge per currency](/docs/currencies#minimum-and-maximum-charge-amounts), the invoice is automatically marked paid, and we add the amount due to the customer's credit balance which is applied to the next invoice. More details on the customer's credit balance are [here](https://stripe.com/docs/billing/customer/balance). Related guide: [Send invoices to customers](https://stripe.com/docs/billing/invoices/sending)
              - …
          - `last_payment_error` ApiErrors
            - `advice_code` string — For card errors resulting from a card issuer decline, a short string indicating [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines) if they provide one.
            - `charge` string — For card errors, the ID of the failed charge.
            - `code` string — For some errors that could be handled programmatically, a short string indicating the [error code](https://stripe.com/docs/error-codes) reported.
            - `decline_code` string — For card errors resulting from a card issuer decline, a short string indicating the [card issuer's reason for the decline](https://stripe.com/docs/declines#issuer-declines) if they provide one.
            - `doc_url` string — A URL to more information about the [error code](https://stripe.com/docs/error-codes) reported.
            - `message` string — A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.
            - `network_advice_code` string — For card errors resulting from a card issuer decline, a 2 digit code which indicates the advice given to merchant by the card network on how to proceed with an error.
            - `network_decline_code` string — For card errors resulting from a card issuer decline, a brand specific 2, 3, or 4 digit code which indicates the reason the authorization failed.
            - `param` string — If the error is parameter-specific, the parameter related to the error. For example, you can use this to display a message near the correct form field.
            - `payment_intent` PaymentIntent — recursive
            - `payment_method` PaymentMethod — PaymentMethod objects represent your customer's payment instruments. You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to Customer objects to store instrument details for future payments. Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios).
              - …
            - `payment_method_type` string — If the error is specific to the type of payment method, the payment method type that had a problem. This field is only populated for invoice-related errors.
            - `request_log_url` string — A URL to the request log entry in your dashboard.
            - `setup_intent` SetupIntent — A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. Later, you can use [PaymentIntents](https://stripe.com/docs/api#payment_intents) to drive the payment flow. Create a SetupIntent when you're ready to collect your customer's payment credentials. Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. The SetupIntent transitions through multiple [statuses](https://docs.stripe.com/payments/intents#intent-statuses) as it guides you through the setup process. Successful SetupIntents result in payment credentials that are optimized for future payments. For example, cardholders in [certain regions](https://stripe.com/guides/strong-customer-authentication) might need to be run through [Strong Customer Authentication](https://docs.stripe.com/strong-customer-authentication) during payment method collection to streamline later [off-session payments](https://docs.stripe.com/payments/setup-intents). If you use the SetupIntent with a [Customer](https://stripe.com/docs/api#setup_intent_object-customer), it automatically attaches the resulting payment method to that Customer after successful setup. We recommend using SetupIntents or [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) on PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. Related guide: [Setup Intents API](https://docs.stripe.com/payments/setup-intents)
              - …
            - `source` union — The [source object](https://stripe.com/docs/api/sources/object) for errors returned on a request involving a source.
              - …
            - `type` 'api_error' | 'card_error' | 'idempotency_error' | 'invalid_request_error', required — The type of error returned. One of `api_error`, `card_error`, `idempotency_error`, or `invalid_request_error`
          - `latest_charge` union — ID of the latest [Charge object](https://stripe.com/docs/api/charges) created by this PaymentIntent. This property is `null` until PaymentIntent confirmation is attempted.
            - string
            - Charge — The `Charge` object represents a single attempt to move money into your Stripe account. PaymentIntent confirmation is the most common way to create Charges, but transferring money to a different Stripe account through Connect also creates Charges. Some legacy payment flows create Charges directly, which is not recommended for new integrations.
              - …
          - `livemode` boolean, required — Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
          - `metadata` object — Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Learn more about [storing information in metadata](https://stripe.com/docs/payments/payment-intents/creating-payment-intents#storing-information-in-metadata).
          - `next_action` PaymentIntentNextAction
            - `alipay_handle_redirect` PaymentIntentNextActionAlipayHandleRedirect
              - …
            - `boleto_display_details` PaymentIntentNextActionBoleto
              - …
            - `card_await_notification` PaymentIntentNextActionCardAwaitNotification
              - …
            - `cashapp_handle_redirect_or_display_qr_code` PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode
              - …
            - `display_bank_transfer_instructions` PaymentIntentNextActionDisplayBankTransferInstructions
              - …
            - `konbini_display_details` PaymentIntentNextActionKonbini
              - …
            - `multibanco_display_details` PaymentIntentNextActionDisplayMultibancoDetails
              - …
            - `oxxo_display_details` PaymentIntentNextActionDisplayOxxoDetails
              - …
            - `paynow_display_qr_code` PaymentIntentNextActionPaynowDisplayQrCode
              - …
            - `pix_display_qr_code` PaymentIntentNextActionPixDisplayQrCode
              - …
            - `promptpay_display_qr_code` PaymentIntentNextActionPromptpayDisplayQrCode
              - …
            - `redirect_to_url` PaymentIntentNextActionRedirectToUrl
              - …
            - `swish_handle_redirect_or_display_qr_code` PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode
              - …
            - `type` string, required — Type of the next action to perform, one of `redirect_to_url`, `use_stripe_sdk`, `alipay_handle_redirect`, `oxxo_display_details`, or `verify_with_microdeposits`.
            - `use_stripe_sdk` object — When confirming a PaymentIntent with Stripe.js, Stripe.js depends on the contents of this dictionary to invoke authentication flows. The shape of the contents is subject to change and is only intended to be used by Stripe.js.
            - `verify_with_microdeposits` PaymentIntentNextActionVerifyWithMicrodeposits
              - …
            - `wechat_pay_display_qr_code` PaymentIntentNextActionWechatPayDisplayQrCode
              - …
            - `wechat_pay_redirect_to_android_app` PaymentIntentNextActionWechatPayRedirectToAndroidApp
              - …
            - `wechat_pay_redirect_to_ios_app` PaymentIntentNextActionWechatPayRedirectToIosApp
              - …
          - `object` 'payment_intent', required — String representing the object's type. Objects of the same type share the same value.
          - `on_behalf_of` union — The account (if any) for which the funds of the PaymentIntent are intended. See the PaymentIntents [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts) for details.
            - string
            - Account — This is an object representing a Stripe account. You can retrieve it to see properties on the account like its current requirements or if the account is enabled to make live charges or receive payouts. For accounts where [controller.requirement_collection](/api/accounts/object#account_object-controller-requirement_collection) is `application`, which includes Custom accounts, the properties below are always returned. For accounts where [controller.requirement_collection](/api/accounts/object#account_object-controller-requirement_collection) is `stripe`, which includes Standard and Express accounts, some properties are only returned until you create an [Account Link](/api/account_links) or [Account Session](/api/account_sessions) to start Connect Onboarding. Learn about the [differences between accounts](/connect/accounts).
              - …
          - `payment_method` union — ID of the payment method used in this PaymentIntent.
            - string
            - PaymentMethod — PaymentMethod objects represent your customer's payment instruments. You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to Customer objects to store instrument details for future payments. Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios).
              - …
          - `payment_method_configuration_details` PaymentMethodConfigBizPaymentMethodConfigurationDetails
            - `id` string, required — ID of the payment method configuration used.
            - `parent` string, nullable — ID of the parent payment method configuration used.
          - `payment_method_options` PaymentIntentPaymentMethodOptions
            - `acss_debit` union
              - …
            - `affirm` union
              - …
            - `afterpay_clearpay` union
              - …
            - `alipay` union
              - …
            - `alma` union
              - …
            - `amazon_pay` union
              - …
            - `au_becs_debit` union
              - …
            - `bacs_debit` union
              - …
            - `bancontact` union
              - …
            - `blik` union
              - …
            - `boleto` union
              - …
            - `card` union
              - …
            - `card_present` union
              - …
            - `cashapp` union
              - …
            - `customer_balance` union
              - …
            - `eps` union
              - …
            - `fpx` union
              - …
            - `giropay` union
              - …
            - `grabpay` union
              - …
            - `ideal` union
              - …
            - `interac_present` union
              - …
            - `kakao_pay` union
              - …
            - `klarna` union
              - …
            - `konbini` union
              - …
            - `kr_card` union
              - …
            - `link` union
              - …
            - `mobilepay` union
              - …
            - `multibanco` union
              - …
            - `naver_pay` union
              - …
            - `oxxo` union
              - …
            - `p24` union
              - …
            - `pay_by_bank` union
              - …
            - `payco` union
              - …
            - `paynow` union
              - …
            - `paypal` union
              - …
            - `pix` union
              - …
            - `promptpay` union
              - …
            - `revolut_pay` union
              - …
            - `samsung_pay` union
              - …
            - `sepa_debit` union
              - …
            - `sofort` union
              - …
            - `swish` union
              - …
            - `twint` union
              - …
            - `us_bank_account` union
              - …
            - `wechat_pay` union
              - …
            - `zip` union
              - …
          - `payment_method_types` string[], required — The list of payment method types (e.g. card) that this PaymentIntent is allowed to use.
          - `processing` PaymentIntentProcessing
            - `card` PaymentIntentCardProcessing
              - …
            - `type` 'card', required — Type of the payment method for which payment is in `processing` state, one of `card`.
          - `receipt_email` string, nullable — Email address that the receipt for the resulting payment will be sent to. If `receipt_email` is specified for a payment in live mode, a receipt will be sent regardless of your [email settings](https://dashboard.stripe.com/account/emails).
          - `review` union — ID of the review associated with this PaymentIntent, if any.
            - string
            - Review — Reviews can be used to supplement automated fraud detection with human expertise. Learn more about [Radar](/radar) and reviewing payments [here](https://stripe.com/docs/radar/reviews).
              - …
          - `setup_future_usage` 'off_session' | 'on_session', nullable — Indicates that you intend to make future payments with this PaymentIntent's payment method. If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](/api/payment_methods/attach) the payment method to a Customer after the transaction completes. If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](/strong-customer-authentication).
          - `shipping` Shipping
            - `address` Address
              - …
            - `carrier` string, nullable — The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc.
            - `name` string — Recipient name.
            - `phone` string, nullable — Recipient phone (including extension).
            - `tracking_number` string, nullable — The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas.
          - `statement_descriptor` string, nullable — Text that appears on the customer's statement as the statement descriptor for a non-card charge. This value overrides the account's default statement descriptor. For information about requirements, including the 22-character limit, see [the Statement Descriptor docs](https://docs.stripe.com/get-started/account/statement-descriptors). Setting this value for a card charge returns an error. For card charges, set the [statement_descriptor_suffix](https://docs.stripe.com/get-started/account/statement-descriptors#dynamic) instead.
          - `statement_descriptor_suffix` string, nullable — Provides information about a card charge. Concatenated to the account's [statement descriptor prefix](https://docs.stripe.com/get-started/account/statement-descriptors#static) to form the complete statement descriptor that appears on the customer's statement.
          - `status` 'canceled' | 'processing' | 'requires_action' | 'requires_capture' | 'requires_confirmation' | 'requires_payment_method' | 'succeeded', required — Status of this PaymentIntent, one of `requires_payment_method`, `requires_confirmation`, `requires_action`, `processing`, `requires_capture`, `canceled`, or `succeeded`. Read more about each PaymentIntent [status](https://stripe.com/docs/payments/intents#intent-statuses).
          - `transfer_data` TransferData
            - `amount` integer — Amount intended to be collected by this PaymentIntent. A positive integer representing how much to charge in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
            - `destination` union, required — The account (if any) that the payment is attributed to for tax reporting, and where funds from the payment are transferred to after payment success.
              - …
          - `transfer_group` string, nullable — A string that identifies the resulting payment as part of a group. Learn more about the [use case for connected accounts](https://stripe.com/docs/connect/separate-charges-and-transfers).
      - `process_config` TerminalReaderReaderResourceProcessConfig — Represents a per-transaction override of a reader configuration
        - `enable_customer_cancellation` boolean — Enable customer initiated cancellation when processing this payment.
        - `skip_tipping` boolean — Override showing a tipping selection screen on this transaction.
        - `tipping` TerminalReaderReaderResourceTippingConfig — Represents a per-transaction tipping configuration
          - `amount_eligible` integer — Amount used to calculate tip suggestions on tipping selection screen for this transaction. Must be a positive integer in the smallest currency unit (e.g., 100 cents to represent $1.00 or 100 to represent ¥100, a zero-decimal currency).
    - `process_setup_intent` TerminalReaderReaderResourceProcessSetupIntentAction — Represents a reader action to process a setup intent
      - `generated_card` string — ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod.
      - `process_config` TerminalReaderReaderResourceProcessSetupConfig — Represents a per-setup override of a reader configuration
        - `enable_customer_cancellation` boolean — Enable customer initiated cancellation when processing this SetupIntent.
      - `setup_intent` union, required — Most recent SetupIntent processed by the reader.
        - string
        - SetupIntent — A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. Later, you can use [PaymentIntents](https://stripe.com/docs/api#payment_intents) to drive the payment flow. Create a SetupIntent when you're ready to collect your customer's payment credentials. Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. The SetupIntent transitions through multiple [statuses](https://docs.stripe.com/payments/intents#intent-statuses) as it guides you through the setup process. Successful SetupIntents result in payment credentials that are optimized for future payments. For example, cardholders in [certain regions](https://stripe.com/guides/strong-customer-authentication) might need to be run through [Strong Customer Authentication](https://docs.stripe.com/strong-customer-authentication) during payment method collection to streamline later [off-session payments](https://docs.stripe.com/payments/setup-intents). If you use the SetupIntent with a [Customer](https://stripe.com/docs/api#setup_intent_object-customer), it automatically attaches the resulting payment method to that Customer after successful setup. We recommend using SetupIntents or [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) on PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. Related guide: [Setup Intents API](https://docs.stripe.com/payments/setup-intents)
          - `application` union — ID of the Connect application that created the SetupIntent.
            - string
            - Application
              - …
          - `attach_to_self` boolean — If present, the SetupIntent's payment method will be attached to the in-context Stripe Account. It can only be used for this Stripe Account’s own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer.
          - `automatic_payment_methods` PaymentFlowsAutomaticPaymentMethodsSetupIntent
            - `allow_redirects` 'always' | 'never' — Controls whether this SetupIntent will accept redirect-based payment methods. Redirect-based payment methods may require your customer to be redirected to a payment method's app or site for authentication or additional steps. To [confirm](https://stripe.com/docs/api/setup_intents/confirm) this SetupIntent, you may be required to provide a `return_url` to redirect customers back to your site after they authenticate or complete the setup.
            - `enabled` boolean, nullable — Automatically calculates compatible payment methods
          - `cancellation_reason` 'abandoned' | 'duplicate' | 'requested_by_customer', nullable — Reason for cancellation of this SetupIntent, one of `abandoned`, `requested_by_customer`, or `duplicate`.
          - `client_secret` string, nullable — The client secret of this SetupIntent. Used for client-side retrieval using a publishable key. The client secret can be used to complete payment setup from your frontend. It should not be stored, logged, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret.
          - `created` integer, required — Time at which the object was created. Measured in seconds since the Unix epoch.
          - `customer` union — ID of the Customer this SetupIntent belongs to, if one exists. If present, the SetupIntent's payment method will be attached to the Customer on successful setup. Payment methods attached to other Customers cannot be used with this SetupIntent.
            - string
            - Customer — This object represents a customer of your business. Use it to [create recurring charges](https://stripe.com/docs/invoicing/customer), [save payment](https://stripe.com/docs/payments/save-during-payment) and contact information, and track payments that belong to the same customer.
              - …
            - DeletedCustomer
              - …
          - `description` string, nullable — An arbitrary string attached to the object. Often useful for displaying to users.
          - `flow_directions` string[], nullable — Indicates the directions of money movement for which this payment method is intended to be used. Include `inbound` if you intend to use the payment method as the origin to pull funds from. Include `outbound` if you intend to use the payment method as the destination to send funds to. You can include both if you intend to use the payment method for both purposes.
          - `id` string, required — Unique identifier for the object.
          - `last_setup_error` ApiErrors
            - `advice_code` string — For card errors resulting from a card issuer decline, a short string indicating [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines) if they provide one.
            - `charge` string — For card errors, the ID of the failed charge.
            - `code` string — For some errors that could be handled programmatically, a short string indicating the [error code](https://stripe.com/docs/error-codes) reported.
            - `decline_code` string — For card errors resulting from a card issuer decline, a short string indicating the [card issuer's reason for the decline](https://stripe.com/docs/declines#issuer-declines) if they provide one.
            - `doc_url` string — A URL to more information about the [error code](https://stripe.com/docs/error-codes) reported.
            - `message` string — A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.
            - `network_advice_code` string — For card errors resulting from a card issuer decline, a 2 digit code which indicates the advice given to merchant by the card network on how to proceed with an error.
            - `network_decline_code` string — For card errors resulting from a card issuer decline, a brand specific 2, 3, or 4 digit code which indicates the reason the authorization failed.
            - `param` string — If the error is parameter-specific, the parameter related to the error. For example, you can use this to display a message near the correct form field.
            - `payment_intent` PaymentIntent — A PaymentIntent guides you through the process of collecting a payment from your customer. We recommend that you create exactly one PaymentIntent for each order or customer session in your system. You can reference the PaymentIntent later to see the history of payment attempts for a particular session. A PaymentIntent transitions through [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) throughout its lifetime as it interfaces with Stripe.js to perform authentication flows and ultimately creates at most one successful charge. Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents)
              - …
            - `payment_method` PaymentMethod — PaymentMethod objects represent your customer's payment instruments. You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to Customer objects to store instrument details for future payments. Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios).
              - …
            - `payment_method_type` string — If the error is specific to the type of payment method, the payment method type that had a problem. This field is only populated for invoice-related errors.
            - `request_log_url` string — A URL to the request log entry in your dashboard.
            - `setup_intent` SetupIntent — recursive
            - `source` union — The [source object](https://stripe.com/docs/api/sources/object) for errors returned on a request involving a source.
              - …
            - `type` 'api_error' | 'card_error' | 'idempotency_error' | 'invalid_request_error', required — The type of error returned. One of `api_error`, `card_error`, `idempotency_error`, or `invalid_request_error`
          - `latest_attempt` union — The most recent SetupAttempt for this SetupIntent.
            - string
            - SetupAttempt — A SetupAttempt describes one attempted confirmation of a SetupIntent, whether that confirmation is successful or unsuccessful. You can use SetupAttempts to inspect details of a specific attempt at setting up a payment method using a SetupIntent.
              - …
          - `livemode` boolean, required — Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
          - `mandate` union — ID of the multi use Mandate generated by the SetupIntent.
            - string
            - Mandate — A Mandate is a record of the permission that your customer gives you to debit their payment method.
              - …
          - `metadata` object, nullable — Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
          - `next_action` SetupIntentNextAction
            - `cashapp_handle_redirect_or_display_qr_code` PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode
              - …
            - `redirect_to_url` SetupIntentNextActionRedirectToUrl
              - …
            - `type` string, required — Type of the next action to perform, one of `redirect_to_url`, `use_stripe_sdk`, `alipay_handle_redirect`, `oxxo_display_details`, or `verify_with_microdeposits`.
            - `use_stripe_sdk` object — When confirming a SetupIntent with Stripe.js, Stripe.js depends on the contents of this dictionary to invoke authentication flows. The shape of the contents is subject to change and is only intended to be used by Stripe.js.
            - `verify_with_microdeposits` SetupIntentNextActionVerifyWithMicrodeposits
              - …
          - `object` 'setup_intent', required — String representing the object's type. Objects of the same type share the same value.
          - `on_behalf_of` union — The account (if any) for which the setup is intended.
            - string
            - Account — This is an object representing a Stripe account. You can retrieve it to see properties on the account like its current requirements or if the account is enabled to make live charges or receive payouts. For accounts where [controller.requirement_collection](/api/accounts/object#account_object-controller-requirement_collection) is `application`, which includes Custom accounts, the properties below are always returned. For accounts where [controller.requirement_collection](/api/accounts/object#account_object-controller-requirement_collection) is `stripe`, which includes Standard and Express accounts, some properties are only returned until you create an [Account Link](/api/account_links) or [Account Session](/api/account_sessions) to start Connect Onboarding. Learn about the [differences between accounts](/connect/accounts).
              - …
          - `payment_method` union — ID of the payment method used with this SetupIntent. If the payment method is `card_present` and isn't a digital wallet, then the [generated_card](https://docs.stripe.com/api/setup_attempts/object#setup_attempt_object-payment_method_details-card_present-generated_card) associated with the `latest_attempt` is attached to the Customer instead.
            - string
            - PaymentMethod — PaymentMethod objects represent your customer's payment instruments. You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to Customer objects to store instrument details for future payments. Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios).
              - …
          - `payment_method_configuration_details` PaymentMethodConfigBizPaymentMethodConfigurationDetails
            - `id` string, required — ID of the payment method configuration used.
            - `parent` string, nullable — ID of the parent payment method configuration used.
          - `payment_method_options` SetupIntentPaymentMethodOptions
            - `acss_debit` union
              - …
            - `amazon_pay` union
              - …
            - `bacs_debit` union
              - …
            - `card` union
              - …
            - `card_present` union
              - …
            - `link` union
              - …
            - `paypal` union
              - …
            - `sepa_debit` union
              - …
            - `us_bank_account` union
              - …
          - `payment_method_types` string[], required — The list of payment method types (e.g. card) that this SetupIntent is allowed to set up.
          - `single_use_mandate` union — ID of the single_use Mandate generated by the SetupIntent.
            - string
            - Mandate — A Mandate is a record of the permission that your customer gives you to debit their payment method.
              - …
          - `status` 'canceled' | 'processing' | 'requires_action' | 'requires_confirmation' | 'requires_payment_method' | 'succeeded', required — [Status](https://stripe.com/docs/payments/intents#intent-statuses) of this SetupIntent, one of `requires_payment_method`, `requires_confirmation`, `requires_action`, `processing`, `canceled`, or `succeeded`.
          - `usage` string, required — Indicates how the payment method is intended to be used in the future. Use `on_session` if you intend to only reuse the payment method when the customer is in your checkout flow. Use `off_session` if your customer may or may not be in your checkout flow. If not provided, this value defaults to `off_session`.
    - `refund_payment` TerminalReaderReaderResourceRefundPaymentAction — Represents a reader action to refund a payment
      - `amount` integer — The amount being refunded.
      - `charge` union — Charge that is being refunded.
        - string
        - Charge — The `Charge` object represents a single attempt to move money into your Stripe account. PaymentIntent confirmation is the most common way to create Charges, but transferring money to a different Stripe account through Connect also creates Charges. Some legacy payment flows create Charges directly, which is not recommended for new integrations.
          - `amount` integer, required — Amount intended to be collected by this payment. A positive integer representing how much to charge in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
          - `amount_captured` integer, required — Amount in cents (or local equivalent) captured (can be less than the amount attribute on the charge if a partial capture was made).
          - `amount_refunded` integer, required — Amount in cents (or local equivalent) refunded (can be less than the amount attribute on the charge if a partial refund was issued).
          - `application` union — ID of the Connect application that created the charge.
            - string
            - Application
              - …
          - `application_fee` union — The application fee (if any) for the charge. [See the Connect documentation](https://stripe.com/docs/connect/direct-charges#collect-fees) for details.
            - string
            - ApplicationFee
              - …
          - `application_fee_amount` integer, nullable — The amount of the application fee (if any) requested for the charge. [See the Connect documentation](https://stripe.com/docs/connect/direct-charges#collect-fees) for details.
          - `balance_transaction` union — ID of the balance transaction that describes the impact of this charge on your account balance (not including refunds or disputes).
            - string
            - BalanceTransaction — Balance transactions represent funds moving through your Stripe account. Stripe creates them for every type of transaction that enters or leaves your Stripe account balance. Related guide: [Balance transaction types](https://stripe.com/docs/reports/balance-transaction-types)
              - …
          - `billing_details` BillingDetails, required
            - `address` Address
              - …
            - `email` string, nullable — Email address.
            - `name` string, nullable — Full name.
            - `phone` string, nullable — Billing phone number (including extension).
          - `calculated_statement_descriptor` string, nullable — The full statement descriptor that is passed to card networks, and that is displayed on your customers' credit card and bank statements. Allows you to see what the statement descriptor looks like after the static and dynamic portions are combined. This value only exists for card payments.
          - `captured` boolean, required — If the charge was created without capturing, this Boolean represents whether it is still uncaptured or has since been captured.
          - `created` integer, required — Time at which the object was created. Measured in seconds since the Unix epoch.
          - `currency` string, currency, required — Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
          - `customer` union — ID of the customer this charge is for if one exists.
            - string
            - Customer — This object represents a customer of your business. Use it to [create recurring charges](https://stripe.com/docs/invoicing/customer), [save payment](https://stripe.com/docs/payments/save-during-payment) and contact information, and track payments that belong to the same customer.
              - …
            - DeletedCustomer
              - …
          - `description` string, nullable — An arbitrary string attached to the object. Often useful for displaying to users.
          - `disputed` boolean, required — Whether the charge has been disputed.
          - `failure_balance_transaction` union — ID of the balance transaction that describes the reversal of the balance on your account due to payment failure.
            - string
            - BalanceTransaction — Balance transactions represent funds moving through your Stripe account. Stripe creates them for every type of transaction that enters or leaves your Stripe account balance. Related guide: [Balance transaction types](https://stripe.com/docs/reports/balance-transaction-types)
              - …
          - `failure_code` string, nullable — Error code explaining reason for charge failure if available (see [the errors section](https://stripe.com/docs/error-codes) for a list of codes).
          - `failure_message` string, nullable — Message to user further explaining reason for charge failure if available.
          - `fraud_details` ChargeFraudDetails
            - `stripe_report` string — Assessments from Stripe. If set, the value is `fraudulent`.
            - `user_report` string — Assessments reported by you. If set, possible values of are `safe` and `fraudulent`.
          - `id` string, required — Unique identifier for the object.
          - `invoice` union — ID of the invoice this charge is for if one exists.
            - string
            - Invoice — Invoices are statements of amounts owed by a customer, and are either generated one-off, or generated periodically from a subscription. They contain [invoice items](https://stripe.com/docs/api#invoiceitems), and proration adjustments that may be caused by subscription upgrades/downgrades (if necessary). If your invoice is configured to be billed through automatic charges, Stripe automatically finalizes your invoice and attempts payment. Note that finalizing the invoice, [when automatic](https://stripe.com/docs/invoicing/integration/automatic-advancement-collection), does not happen immediately as the invoice is created. Stripe waits until one hour after the last webhook was successfully sent (or the last webhook timed out after failing). If you (and the platforms you may have connected to) have no webhooks configured, Stripe waits one hour after creation to finalize the invoice. If your invoice is configured to be billed by sending an email, then based on your [email settings](https://dashboard.stripe.com/account/billing/automatic), Stripe will email the invoice to your customer and await payment. These emails can contain a link to a hosted page to pay the invoice. Stripe applies any customer credit on the account before determining the amount due for the invoice (i.e., the amount that will be actually charged). If the amount due for the invoice is less than Stripe's [minimum allowed charge per currency](/docs/currencies#minimum-and-maximum-charge-amounts), the invoice is automatically marked paid, and we add the amount due to the customer's credit balance which is applied to the next invoice. More details on the customer's credit balance are [here](https://stripe.com/docs/billing/customer/balance). Related guide: [Send invoices to customers](https://stripe.com/docs/billing/invoices/sending)
              - …
          - `livemode` boolean, required — Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
          - `metadata` object, required — Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
          - `object` 'charge', required — String representing the object's type. Objects of the same type share the same value.
          - `on_behalf_of` union — The account (if any) the charge was made on behalf of without triggering an automatic transfer. See the [Connect documentation](https://stripe.com/docs/connect/separate-charges-and-transfers) for details.
            - string
            - Account — This is an object representing a Stripe account. You can retrieve it to see properties on the account like its current requirements or if the account is enabled to make live charges or receive payouts. For accounts where [controller.requirement_collection](/api/accounts/object#account_object-controller-requirement_collection) is `application`, which includes Custom accounts, the properties below are always returned. For accounts where [controller.requirement_collection](/api/accounts/object#account_object-controller-requirement_collection) is `stripe`, which includes Standard and Express accounts, some properties are only returned until you create an [Account Link](/api/account_links) or [Account Session](/api/account_sessions) to start Connect Onboarding. Learn about the [differences between accounts](/connect/accounts).
              - …
          - `outcome` ChargeOutcome
            - `advice_code` 'confirm_card_data' | 'do_not_try_again' | 'try_again_later', nullable — An enumerated value providing a more detailed explanation on [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines).
            - `network_advice_code` string, nullable — For charges declined by the network, a 2 digit code which indicates the advice returned by the network on how to proceed with an error.
            - `network_decline_code` string, nullable — For charges declined by the network, a brand specific 2, 3, or 4 digit code which indicates the reason the authorization failed.
            - `network_status` string, nullable — Possible values are `approved_by_network`, `declined_by_network`, `not_sent_to_network`, and `reversed_after_approval`. The value `reversed_after_approval` indicates the payment was [blocked by Stripe](https://stripe.com/docs/declines#blocked-payments) after bank authorization, and may temporarily appear as "pending" on a cardholder's statement.
            - `reason` string, nullable — An enumerated value providing a more detailed explanation of the outcome's `type`. Charges blocked by Radar's default block rule have the value `highest_risk_level`. Charges placed in review by Radar's default review rule have the value `elevated_risk_level`. Charges authorized, blocked, or placed in review by custom rules have the value `rule`. See [understanding declines](https://stripe.com/docs/declines) for more details.
            - `risk_level` string — Stripe Radar's evaluation of the riskiness of the payment. Possible values for evaluated payments are `normal`, `elevated`, `highest`. For non-card payments, and card-based payments predating the public assignment of risk levels, this field will have the value `not_assessed`. In the event of an error in the evaluation, this field will have the value `unknown`. This field is only available with Radar.
            - `risk_score` integer — Stripe Radar's evaluation of the riskiness of the payment. Possible values for evaluated payments are between 0 and 100. For non-card payments, card-based payments predating the public assignment of risk scores, or in the event of an error during evaluation, this field will not be present. This field is only available with Radar for Fraud Teams.
            - `rule` union — The ID of the Radar rule that matched the payment, if applicable.
              - …
            - `seller_message` string, nullable — A human-readable description of the outcome type and reason, designed for you (the recipient of the payment), not your customer.
            - `type` string, required — Possible values are `authorized`, `manual_review`, `issuer_declined`, `blocked`, and `invalid`. See [understanding declines](https://stripe.com/docs/declines) and [Radar reviews](https://stripe.com/docs/radar/reviews) for details.
          - `paid` boolean, required — `true` if the charge succeeded, or was successfully authorized for later capture.
          - `payment_intent` union — ID of the PaymentIntent associated with this charge, if one exists.
            - string
            - PaymentIntent — A PaymentIntent guides you through the process of collecting a payment from your customer. We recommend that you create exactly one PaymentIntent for each order or customer session in your system. You can reference the PaymentIntent later to see the history of payment attempts for a particular session. A PaymentIntent transitions through [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) throughout its lifetime as it interfaces with Stripe.js to perform authentication flows and ultimately creates at most one successful charge. Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents)
              - …
          - `payment_method` string, nullable — ID of the payment method used in this charge.
          - `payment_method_details` PaymentMethodDetails
            - `ach_credit_transfer` PaymentMethodDetailsAchCreditTransfer
              - …
            - `ach_debit` PaymentMethodDetailsAchDebit
              - …
            - `acss_debit` PaymentMethodDetailsAcssDebit
              - …
            - `affirm` PaymentMethodDetailsAffirm
              - …
            - `afterpay_clearpay` PaymentMethodDetailsAfterpayClearpay
              - …
            - `alipay` PaymentFlowsPrivatePaymentMethodsAlipayDetails
              - …
            - `alma` PaymentMethodDetailsAlma
            - `amazon_pay` PaymentMethodDetailsAmazonPay
              - …
            - `au_becs_debit` PaymentMethodDetailsAuBecsDebit
              - …
            - `bacs_debit` PaymentMethodDetailsBacsDebit
              - …
            - `bancontact` PaymentMethodDetailsBancontact
              - …
            - `blik` PaymentMethodDetailsBlik
              - …
            - `boleto` PaymentMethodDetailsBoleto
              - …
            - `card` PaymentMethodDetailsCard
              - …
            - `card_present` PaymentMethodDetailsCardPresent
              - …
            - `cashapp` PaymentMethodDetailsCashapp
              - …
            - `customer_balance` PaymentMethodDetailsCustomerBalance
            - `eps` PaymentMethodDetailsEps
              - …
            - `fpx` PaymentMethodDetailsFpx
              - …
            - `giropay` PaymentMethodDetailsGiropay
              - …
            - `grabpay` PaymentMethodDetailsGrabpay
              - …
            - `ideal` PaymentMethodDetailsIdeal
              - …
            - `interac_present` PaymentMethodDetailsInteracPresent
              - …
            - `kakao_pay` PaymentMethodDetailsKakaoPay
              - …
            - `klarna` PaymentMethodDetailsKlarna
              - …
            - `konbini` PaymentMethodDetailsKonbini
              - …
            - `kr_card` PaymentMethodDetailsKrCard
              - …
            - `link` PaymentMethodDetailsLink
              - …
            - `mobilepay` PaymentMethodDetailsMobilepay
              - …
            - `multibanco` PaymentMethodDetailsMultibanco
              - …
            - `naver_pay` PaymentMethodDetailsNaverPay
              - …
            - `oxxo` PaymentMethodDetailsOxxo
              - …
            - `p24` PaymentMethodDetailsP24
              - …
            - `pay_by_bank` PaymentMethodDetailsPayByBank
            - `payco` PaymentMethodDetailsPayco
              - …
            - `paynow` PaymentMethodDetailsPaynow
              - …
            - `paypal` PaymentMethodDetailsPaypal
              - …
            - `pix` PaymentMethodDetailsPix
              - …
            - `promptpay` PaymentMethodDetailsPromptpay
              - …
            - `revolut_pay` PaymentMethodDetailsRevolutPay
              - …
            - `samsung_pay` PaymentMethodDetailsSamsungPay
              - …
            - `sepa_debit` PaymentMethodDetailsSepaDebit
              - …
            - `sofort` PaymentMethodDetailsSofort
              - …
            - `stripe_account` PaymentMethodDetailsStripeAccount
            - `swish` PaymentMethodDetailsSwish
              - …
            - `twint` PaymentMethodDetailsTwint
            - `type` string, required — The type of transaction-specific details of the payment method used in the payment, one of `ach_credit_transfer`, `ach_debit`, `acss_debit`, `alipay`, `au_becs_debit`, `bancontact`, `card`, `card_present`, `eps`, `giropay`, `ideal`, `klarna`, `multibanco`, `p24`, `sepa_debit`, `sofort`, `stripe_account`, or `wechat`. An additional hash is included on `payment_method_details` with a name matching this value. It contains information specific to the payment method.
            - `us_bank_account` PaymentMethodDetailsUsBankAccount
              - …
            - `wechat` PaymentMethodDetailsWechat
            - `wechat_pay` PaymentMethodDetailsWechatPay
              - …
            - `zip` PaymentMethodDetailsZip
          - `radar_options` RadarRadarOptions — Options to configure Radar. See [Radar Session](https://stripe.com/docs/radar/radar-session) for more information.
            - `session` string — A [Radar Session](https://stripe.com/docs/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments.
          - `receipt_email` string, nullable — This is the email address that the receipt for this charge was sent to.
          - `receipt_number` string, nullable — This is the transaction number that appears on email receipts sent for this charge. This attribute will be `null` until a receipt has been sent.
          - `receipt_url` string, nullable — This is the URL to view the receipt for this charge. The receipt is kept up-to-date to the latest state of the charge, including any refunds. If the charge is for an Invoice, the receipt will be stylized as an Invoice receipt.
          - `refunded` boolean, required — Whether the charge has been fully refunded. If the charge is only partially refunded, this attribute will still be false.
          - `refunds` object, nullable — A list of refunds that have been applied to the charge.
            - `data` Refund[], required — Details about each object.
              - …
            - `has_more` boolean, required — True if this list has another page of items after this one that can be fetched.
            - `object` 'list', required — String representing the object's type. Objects of the same type share the same value. Always has the value `list`.
            - `url` string, required — The URL where this list can be accessed.
          - `review` union — ID of the review associated with this charge if one exists.
            - string
            - Review — Reviews can be used to supplement automated fraud detection with human expertise. Learn more about [Radar](/radar) and reviewing payments [here](https://stripe.com/docs/radar/reviews).
              - …
          - `shipping` Shipping
            - `address` Address
              - …
            - `carrier` string, nullable — The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc.
            - `name` string — Recipient name.
            - `phone` string, nullable — Recipient phone (including extension).
            - `tracking_number` string, nullable — The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas.
          - `source_transfer` union — The transfer ID which created this charge. Only present if the charge came from another Stripe account. [See the Connect documentation](https://docs.stripe.com/connect/destination-charges) for details.
            - string
            - Transfer — A `Transfer` object is created when you move funds between Stripe accounts as part of Connect. Before April 6, 2017, transfers also represented movement of funds from a Stripe account to a card or bank account. This behavior has since been split out into a [Payout](https://stripe.com/docs/api#payout_object) object, with corresponding payout endpoints. For more information, read about the [transfer/payout split](https://stripe.com/docs/transfer-payout-split). Related guide: [Creating separate charges and transfers](https://stripe.com/docs/connect/separate-charges-and-transfers)
              - …
          - `statement_descriptor` string, nullable — For a non-card charge, text that appears on the customer's statement as the statement descriptor. This value overrides the account's default statement descriptor. For information about requirements, including the 22-character limit, see [the Statement Descriptor docs](https://docs.stripe.com/get-started/account/statement-descriptors). For a card charge, this value is ignored unless you don't specify a `statement_descriptor_suffix`, in which case this value is used as the suffix.
          - `statement_descriptor_suffix` string, nullable — Provides information about a card charge. Concatenated to the account's [statement descriptor prefix](https://docs.stripe.com/get-started/account/statement-descriptors#static) to form the complete statement descriptor that appears on the customer's statement. If the account has no prefix value, the suffix is concatenated to the account's statement descriptor.
          - `status` 'failed' | 'pending' | 'succeeded', required — The status of the payment is either `succeeded`, `pending`, or `failed`.
          - `transfer` union — ID of the transfer to the `destination` account (only applicable if the charge was created using the `destination` parameter).
            - string
            - Transfer — A `Transfer` object is created when you move funds between Stripe accounts as part of Connect. Before April 6, 2017, transfers also represented movement of funds from a Stripe account to a card or bank account. This behavior has since been split out into a [Payout](https://stripe.com/docs/api#payout_object) object, with corresponding payout endpoints. For more information, read about the [transfer/payout split](https://stripe.com/docs/transfer-payout-split). Related guide: [Creating separate charges and transfers](https://stripe.com/docs/connect/separate-charges-and-transfers)
              - …
          - `transfer_data` ChargeTransferData
            - `amount` integer, nullable — The amount transferred to the destination account, if specified. By default, the entire charge amount is transferred to the destination account.
            - `destination` union, required — ID of an existing, connected Stripe account to transfer funds to if `transfer_data` was specified in the charge request.
              - …
          - `transfer_group` string, nullable — A string that identifies this transaction as part of a group. See the [Connect documentation](https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options) for details.
      - `metadata` object — Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
      - `payment_intent` union — Payment intent that is being refunded.
        - string
        - PaymentIntent — A PaymentIntent guides you through the process of collecting a payment from your customer. We recommend that you create exactly one PaymentIntent for each order or customer session in your system. You can reference the PaymentIntent later to see the history of payment attempts for a particular session. A PaymentIntent transitions through [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) throughout its lifetime as it interfaces with Stripe.js to perform authentication flows and ultimately creates at most one successful charge. Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents)
          - `amount` integer, required — Amount intended to be collected by this PaymentIntent. A positive integer representing how much to charge in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
          - `amount_capturable` integer — Amount that can be captured from this PaymentIntent.
          - `amount_details` union
            - PaymentFlowsAmountDetails
              - …
            - PaymentFlowsAmountDetailsClient
              - …
          - `amount_received` integer — Amount that this PaymentIntent collects.
          - `application` union — ID of the Connect application that created the PaymentIntent.
            - string
            - Application
              - …
          - `application_fee_amount` integer, nullable — The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. The amount of the application fee collected will be capped at the total payment amount. For more information, see the PaymentIntents [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts).
          - `automatic_payment_methods` PaymentFlowsAutomaticPaymentMethodsPaymentIntent
            - `allow_redirects` 'always' | 'never' — Controls whether this PaymentIntent will accept redirect-based payment methods. Redirect-based payment methods may require your customer to be redirected to a payment method's app or site for authentication or additional steps. To [confirm](https://stripe.com/docs/api/payment_intents/confirm) this PaymentIntent, you may be required to provide a `return_url` to redirect customers back to your site after they authenticate or complete the payment.
            - `enabled` boolean, required — Automatically calculates compatible payment methods
          - `canceled_at` integer, nullable — Populated when `status` is `canceled`, this is the time at which the PaymentIntent was canceled. Measured in seconds since the Unix epoch.
          - `cancellation_reason` 'abandoned' | 'automatic' | 'duplicate' | 'failed_invoice' | 'fraudulent' | 'requested_by_customer' | 'void_invoice', nullable — Reason for cancellation of this PaymentIntent, either user-provided (`duplicate`, `fraudulent`, `requested_by_customer`, or `abandoned`) or generated by Stripe internally (`failed_invoice`, `void_invoice`, or `automatic`).
          - `capture_method` 'automatic' | 'automatic_async' | 'manual', required — Controls when the funds will be captured from the customer's account.
          - `client_secret` string, nullable — The client secret of this PaymentIntent. Used for client-side retrieval using a publishable key. The client secret can be used to complete a payment from your frontend. It should not be stored, logged, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret. Refer to our docs to [accept a payment](https://stripe.com/docs/payments/accept-a-payment?ui=elements) and learn about how `client_secret` should be handled.
          - `confirmation_method` 'automatic' | 'manual', required — Describes whether we can confirm this PaymentIntent automatically, or if it requires customer action to confirm the payment.
          - `created` integer, required — Time at which the object was created. Measured in seconds since the Unix epoch.
          - `currency` string, currency, required — Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
          - `customer` union — ID of the Customer this PaymentIntent belongs to, if one exists. Payment methods attached to other Customers cannot be used with this PaymentIntent. If [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) is set and this PaymentIntent's payment method is not `card_present`, then the payment method attaches to the Customer after the PaymentIntent has been confirmed and any required actions from the user are complete. If the payment method is `card_present` and isn't a digital wallet, then a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card is created and attached to the Customer instead.
            - string
            - Customer — This object represents a customer of your business. Use it to [create recurring charges](https://stripe.com/docs/invoicing/customer), [save payment](https://stripe.com/docs/payments/save-during-payment) and contact information, and track payments that belong to the same customer.
              - …
            - DeletedCustomer
              - …
          - `description` string, nullable — An arbitrary string attached to the object. Often useful for displaying to users.
          - `id` string, required — Unique identifier for the object.
          - `invoice` union — ID of the invoice that created this PaymentIntent, if it exists.
            - string
            - Invoice — Invoices are statements of amounts owed by a customer, and are either generated one-off, or generated periodically from a subscription. They contain [invoice items](https://stripe.com/docs/api#invoiceitems), and proration adjustments that may be caused by subscription upgrades/downgrades (if necessary). If your invoice is configured to be billed through automatic charges, Stripe automatically finalizes your invoice and attempts payment. Note that finalizing the invoice, [when automatic](https://stripe.com/docs/invoicing/integration/automatic-advancement-collection), does not happen immediately as the invoice is created. Stripe waits until one hour after the last webhook was successfully sent (or the last webhook timed out after failing). If you (and the platforms you may have connected to) have no webhooks configured, Stripe waits one hour after creation to finalize the invoice. If your invoice is configured to be billed by sending an email, then based on your [email settings](https://dashboard.stripe.com/account/billing/automatic), Stripe will email the invoice to your customer and await payment. These emails can contain a link to a hosted page to pay the invoice. Stripe applies any customer credit on the account before determining the amount due for the invoice (i.e., the amount that will be actually charged). If the amount due for the invoice is less than Stripe's [minimum allowed charge per currency](/docs/currencies#minimum-and-maximum-charge-amounts), the invoice is automatically marked paid, and we add the amount due to the customer's credit balance which is applied to the next invoice. More details on the customer's credit balance are [here](https://stripe.com/docs/billing/customer/balance). Related guide: [Send invoices to customers](https://stripe.com/docs/billing/invoices/sending)
              - …
          - `last_payment_error` ApiErrors
            - `advice_code` string — For card errors resulting from a card issuer decline, a short string indicating [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines) if they provide one.
            - `charge` string — For card errors, the ID of the failed charge.
            - `code` string — For some errors that could be handled programmatically, a short string indicating the [error code](https://stripe.com/docs/error-codes) reported.
            - `decline_code` string — For card errors resulting from a card issuer decline, a short string indicating the [card issuer's reason for the decline](https://stripe.com/docs/declines#issuer-declines) if they provide one.
            - `doc_url` string — A URL to more information about the [error code](https://stripe.com/docs/error-codes) reported.
            - `message` string — A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.
            - `network_advice_code` string — For card errors resulting from a card issuer decline, a 2 digit code which indicates the advice given to merchant by the card network on how to proceed with an error.
            - `network_decline_code` string — For card errors resulting from a card issuer decline, a brand specific 2, 3, or 4 digit code which indicates the reason the authorization failed.
            - `param` string — If the error is parameter-specific, the parameter related to the error. For example, you can use this to display a message near the correct form field.
            - `payment_intent` PaymentIntent — recursive
            - `payment_method` PaymentMethod — PaymentMethod objects represent your customer's payment instruments. You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to Customer objects to store instrument details for future payments. Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios).
              - …
            - `payment_method_type` string — If the error is specific to the type of payment method, the payment method type that had a problem. This field is only populated for invoice-related errors.
            - `request_log_url` string — A URL to the request log entry in your dashboard.
            - `setup_intent` SetupIntent — A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. Later, you can use [PaymentIntents](https://stripe.com/docs/api#payment_intents) to drive the payment flow. Create a SetupIntent when you're ready to collect your customer's payment credentials. Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. The SetupIntent transitions through multiple [statuses](https://docs.stripe.com/payments/intents#intent-statuses) as it guides you through the setup process. Successful SetupIntents result in payment credentials that are optimized for future payments. For example, cardholders in [certain regions](https://stripe.com/guides/strong-customer-authentication) might need to be run through [Strong Customer Authentication](https://docs.stripe.com/strong-customer-authentication) during payment method collection to streamline later [off-session payments](https://docs.stripe.com/payments/setup-intents). If you use the SetupIntent with a [Customer](https://stripe.com/docs/api#setup_intent_object-customer), it automatically attaches the resulting payment method to that Customer after successful setup. We recommend using SetupIntents or [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) on PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. Related guide: [Setup Intents API](https://docs.stripe.com/payments/setup-intents)
              - …
            - `source` union — The [source object](https://stripe.com/docs/api/sources/object) for errors returned on a request involving a source.
              - …
            - `type` 'api_error' | 'card_error' | 'idempotency_error' | 'invalid_request_error', required — The type of error returned. One of `api_error`, `card_error`, `idempotency_error`, or `invalid_request_error`
          - `latest_charge` union — ID of the latest [Charge object](https://stripe.com/docs/api/charges) created by this PaymentIntent. This property is `null` until PaymentIntent confirmation is attempted.
            - string
            - Charge — The `Charge` object represents a single attempt to move money into your Stripe account. PaymentIntent confirmation is the most common way to create Charges, but transferring money to a different Stripe account through Connect also creates Charges. Some legacy payment flows create Charges directly, which is not recommended for new integrations.
              - …
          - `livemode` boolean, required — Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
          - `metadata` object — Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Learn more about [storing information in metadata](https://stripe.com/docs/payments/payment-intents/creating-payment-intents#storing-information-in-metadata).
          - `next_action` PaymentIntentNextAction
            - `alipay_handle_redirect` PaymentIntentNextActionAlipayHandleRedirect
              - …
            - `boleto_display_details` PaymentIntentNextActionBoleto
              - …
            - `card_await_notification` PaymentIntentNextActionCardAwaitNotification
              - …
            - `cashapp_handle_redirect_or_display_qr_code` PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode
              - …
            - `display_bank_transfer_instructions` PaymentIntentNextActionDisplayBankTransferInstructions
              - …
            - `konbini_display_details` PaymentIntentNextActionKonbini
              - …
            - `multibanco_display_details` PaymentIntentNextActionDisplayMultibancoDetails
              - …
            - `oxxo_display_details` PaymentIntentNextActionDisplayOxxoDetails
              - …
            - `paynow_display_qr_code` PaymentIntentNextActionPaynowDisplayQrCode
              - …
            - `pix_display_qr_code` PaymentIntentNextActionPixDisplayQrCode
              - …
            - `promptpay_display_qr_code` PaymentIntentNextActionPromptpayDisplayQrCode
              - …
            - `redirect_to_url` PaymentIntentNextActionRedirectToUrl
              - …
            - `swish_handle_redirect_or_display_qr_code` PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode
              - …
            - `type` string, required — Type of the next action to perform, one of `redirect_to_url`, `use_stripe_sdk`, `alipay_handle_redirect`, `oxxo_display_details`, or `verify_with_microdeposits`.
            - `use_stripe_sdk` object — When confirming a PaymentIntent with Stripe.js, Stripe.js depends on the contents of this dictionary to invoke authentication flows. The shape of the contents is subject to change and is only intended to be used by Stripe.js.
            - `verify_with_microdeposits` PaymentIntentNextActionVerifyWithMicrodeposits
              - …
            - `wechat_pay_display_qr_code` PaymentIntentNextActionWechatPayDisplayQrCode
              - …
            - `wechat_pay_redirect_to_android_app` PaymentIntentNextActionWechatPayRedirectToAndroidApp
              - …
            - `wechat_pay_redirect_to_ios_app` PaymentIntentNextActionWechatPayRedirectToIosApp
              - …
          - `object` 'payment_intent', required — String representing the object's type. Objects of the same type share the same value.
          - `on_behalf_of` union — The account (if any) for which the funds of the PaymentIntent are intended. See the PaymentIntents [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts) for details.
            - string
            - Account — This is an object representing a Stripe account. You can retrieve it to see properties on the account like its current requirements or if the account is enabled to make live charges or receive payouts. For accounts where [controller.requirement_collection](/api/accounts/object#account_object-controller-requirement_collection) is `application`, which includes Custom accounts, the properties below are always returned. For accounts where [controller.requirement_collection](/api/accounts/object#account_object-controller-requirement_collection) is `stripe`, which includes Standard and Express accounts, some properties are only returned until you create an [Account Link](/api/account_links) or [Account Session](/api/account_sessions) to start Connect Onboarding. Learn about the [differences between accounts](/connect/accounts).
              - …
          - `payment_method` union — ID of the payment method used in this PaymentIntent.
            - string
            - PaymentMethod — PaymentMethod objects represent your customer's payment instruments. You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to Customer objects to store instrument details for future payments. Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios).
              - …
          - `payment_method_configuration_details` PaymentMethodConfigBizPaymentMethodConfigurationDetails
            - `id` string, required — ID of the payment method configuration used.
            - `parent` string, nullable — ID of the parent payment method configuration used.
          - `payment_method_options` PaymentIntentPaymentMethodOptions
            - `acss_debit` union
              - …
            - `affirm` union
              - …
            - `afterpay_clearpay` union
              - …
            - `alipay` union
              - …
            - `alma` union
              - …
            - `amazon_pay` union
              - …
            - `au_becs_debit` union
              - …
            - `bacs_debit` union
              - …
            - `bancontact` union
              - …
            - `blik` union
              - …
            - `boleto` union
              - …
            - `card` union
              - …
            - `card_present` union
              - …
            - `cashapp` union
              - …
            - `customer_balance` union
              - …
            - `eps` union
              - …
            - `fpx` union
              - …
            - `giropay` union
              - …
            - `grabpay` union
              - …
            - `ideal` union
              - …
            - `interac_present` union
              - …
            - `kakao_pay` union
              - …
            - `klarna` union
              - …
            - `konbini` union
              - …
            - `kr_card` union
              - …
            - `link` union
              - …
            - `mobilepay` union
              - …
            - `multibanco` union
              - …
            - `naver_pay` union
              - …
            - `oxxo` union
              - …
            - `p24` union
              - …
            - `pay_by_bank` union
              - …
            - `payco` union
              - …
            - `paynow` union
              - …
            - `paypal` union
              - …
            - `pix` union
              - …
            - `promptpay` union
              - …
            - `revolut_pay` union
              - …
            - `samsung_pay` union
              - …
            - `sepa_debit` union
              - …
            - `sofort` union
              - …
            - `swish` union
              - …
            - `twint` union
              - …
            - `us_bank_account` union
              - …
            - `wechat_pay` union
              - …
            - `zip` union
              - …
          - `payment_method_types` string[], required — The list of payment method types (e.g. card) that this PaymentIntent is allowed to use.
          - `processing` PaymentIntentProcessing
            - `card` PaymentIntentCardProcessing
              - …
            - `type` 'card', required — Type of the payment method for which payment is in `processing` state, one of `card`.
          - `receipt_email` string, nullable — Email address that the receipt for the resulting payment will be sent to. If `receipt_email` is specified for a payment in live mode, a receipt will be sent regardless of your [email settings](https://dashboard.stripe.com/account/emails).
          - `review` union — ID of the review associated with this PaymentIntent, if any.
            - string
            - Review — Reviews can be used to supplement automated fraud detection with human expertise. Learn more about [Radar](/radar) and reviewing payments [here](https://stripe.com/docs/radar/reviews).
              - …
          - `setup_future_usage` 'off_session' | 'on_session', nullable — Indicates that you intend to make future payments with this PaymentIntent's payment method. If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](/api/payment_methods/attach) the payment method to a Customer after the transaction completes. If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](/strong-customer-authentication).
          - `shipping` Shipping
            - `address` Address
              - …
            - `carrier` string, nullable — The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc.
            - `name` string — Recipient name.
            - `phone` string, nullable — Recipient phone (including extension).
            - `tracking_number` string, nullable — The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas.
          - `statement_descriptor` string, nullable — Text that appears on the customer's statement as the statement descriptor for a non-card charge. This value overrides the account's default statement descriptor. For information about requirements, including the 22-character limit, see [the Statement Descriptor docs](https://docs.stripe.com/get-started/account/statement-descriptors). Setting this value for a card charge returns an error. For card charges, set the [statement_descriptor_suffix](https://docs.stripe.com/get-started/account/statement-descriptors#dynamic) instead.
          - `statement_descriptor_suffix` string, nullable — Provides information about a card charge. Concatenated to the account's [statement descriptor prefix](https://docs.stripe.com/get-started/account/statement-descriptors#static) to form the complete statement descriptor that appears on the customer's statement.
          - `status` 'canceled' | 'processing' | 'requires_action' | 'requires_capture' | 'requires_confirmation' | 'requires_payment_method' | 'succeeded', required — Status of this PaymentIntent, one of `requires_payment_method`, `requires_confirmation`, `requires_action`, `processing`, `requires_capture`, `canceled`, or `succeeded`. Read more about each PaymentIntent [status](https://stripe.com/docs/payments/intents#intent-statuses).
          - `transfer_data` TransferData
            - `amount` integer — Amount intended to be collected by this PaymentIntent. A positive integer representing how much to charge in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
            - `destination` union, required — The account (if any) that the payment is attributed to for tax reporting, and where funds from the payment are transferred to after payment success.
              - …
          - `transfer_group` string, nullable — A string that identifies the resulting payment as part of a group. Learn more about the [use case for connected accounts](https://stripe.com/docs/connect/separate-charges-and-transfers).
      - `reason` 'duplicate' | 'fraudulent' | 'requested_by_customer' — The reason for the refund.
      - `refund` union — Unique identifier for the refund object.
        - string
        - Refund — Refund objects allow you to refund a previously created charge that isn't refunded yet. Funds are refunded to the credit or debit card that's initially charged. Related guide: [Refunds](https://stripe.com/docs/refunds)
          - `amount` integer, required — Amount, in cents (or local equivalent).
          - `balance_transaction` union — Balance transaction that describes the impact on your account balance.
            - string
            - BalanceTransaction — Balance transactions represent funds moving through your Stripe account. Stripe creates them for every type of transaction that enters or leaves your Stripe account balance. Related guide: [Balance transaction types](https://stripe.com/docs/reports/balance-transaction-types)
              - …
          - `charge` union — ID of the charge that's refunded.
            - string
            - Charge — The `Charge` object represents a single attempt to move money into your Stripe account. PaymentIntent confirmation is the most common way to create Charges, but transferring money to a different Stripe account through Connect also creates Charges. Some legacy payment flows create Charges directly, which is not recommended for new integrations.
              - …
          - `created` integer, required — Time at which the object was created. Measured in seconds since the Unix epoch.
          - `currency` string, currency, required — Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
          - `description` string — An arbitrary string attached to the object. You can use this for displaying to users (available on non-card refunds only).
          - `destination_details` RefundDestinationDetails
            - `affirm` DestinationDetailsUnimplemented
            - `afterpay_clearpay` DestinationDetailsUnimplemented
            - `alipay` DestinationDetailsUnimplemented
            - `alma` DestinationDetailsUnimplemented
            - `amazon_pay` DestinationDetailsUnimplemented
            - `au_bank_transfer` DestinationDetailsUnimplemented
            - `blik` RefundDestinationDetailsBlik
              - …
            - `br_bank_transfer` RefundDestinationDetailsBrBankTransfer
              - …
            - `card` RefundDestinationDetailsCard
              - …
            - `cashapp` DestinationDetailsUnimplemented
            - `customer_cash_balance` DestinationDetailsUnimplemented
            - `eps` DestinationDetailsUnimplemented
            - `eu_bank_transfer` RefundDestinationDetailsEuBankTransfer
              - …
            - `gb_bank_transfer` RefundDestinationDetailsGbBankTransfer
              - …
            - `giropay` DestinationDetailsUnimplemented
            - `grabpay` DestinationDetailsUnimplemented
            - `jp_bank_transfer` RefundDestinationDetailsJpBankTransfer
              - …
            - `klarna` DestinationDetailsUnimplemented
            - `multibanco` RefundDestinationDetailsMultibanco
              - …
            - `mx_bank_transfer` RefundDestinationDetailsMxBankTransfer
              - …
            - `p24` RefundDestinationDetailsP24
              - …
            - `paynow` DestinationDetailsUnimplemented
            - `paypal` DestinationDetailsUnimplemented
            - `pix` DestinationDetailsUnimplemented
            - `revolut` DestinationDetailsUnimplemented
            - `sofort` DestinationDetailsUnimplemented
            - `swish` RefundDestinationDetailsSwish
              - …
            - `th_bank_transfer` RefundDestinationDetailsThBankTransfer
              - …
            - `type` string, required — The type of transaction-specific details of the payment method used in the refund (e.g., `card`). An additional hash is included on `destination_details` with a name matching this value. It contains information specific to the refund transaction.
            - `us_bank_transfer` RefundDestinationDetailsUsBankTransfer
              - …
            - `wechat_pay` DestinationDetailsUnimplemented
            - `zip` DestinationDetailsUnimplemented
          - `failure_balance_transaction` union — After the refund fails, this balance transaction describes the adjustment made on your account balance that reverses the initial balance transaction.
            - string
            - BalanceTransaction — Balance transactions represent funds moving through your Stripe account. Stripe creates them for every type of transaction that enters or leaves your Stripe account balance. Related guide: [Balance transaction types](https://stripe.com/docs/reports/balance-transaction-types)
              - …
          - `failure_reason` string — Provides the reason for the refund failure. Possible values are: `lost_or_stolen_card`, `expired_or_canceled_card`, `charge_for_pending_refund_disputed`, `insufficient_funds`, `declined`, `merchant_request`, or `unknown`.
          - `id` string, required — Unique identifier for the object.
          - `instructions_email` string — For payment methods without native refund support (for example, Konbini, PromptPay), provide an email address for the customer to receive refund instructions.
          - `metadata` object, nullable — Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
          - `next_action` RefundNextAction
            - `display_details` RefundNextActionDisplayDetails
              - …
            - `type` string, required — Type of the next action to perform.
          - `object` 'refund', required — String representing the object's type. Objects of the same type share the same value.
          - `payment_intent` union — ID of the PaymentIntent that's refunded.
            - string
            - PaymentIntent — A PaymentIntent guides you through the process of collecting a payment from your customer. We recommend that you create exactly one PaymentIntent for each order or customer session in your system. You can reference the PaymentIntent later to see the history of payment attempts for a particular session. A PaymentIntent transitions through [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) throughout its lifetime as it interfaces with Stripe.js to perform authentication flows and ultimately creates at most one successful charge. Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents)
              - …
          - `reason` 'duplicate' | 'expired_uncaptured_charge' | 'fraudulent' | 'requested_by_customer', nullable — Reason for the refund, which is either user-provided (`duplicate`, `fraudulent`, or `requested_by_customer`) or generated by Stripe internally (`expired_uncaptured_charge`).
          - `receipt_number` string, nullable — This is the transaction number that appears on email receipts sent for this refund.
          - `source_transfer_reversal` union — The transfer reversal that's associated with the refund. Only present if the charge came from another Stripe account.
            - string
            - TransferReversal — [Stripe Connect](https://stripe.com/docs/connect) platforms can reverse transfers made to a connected account, either entirely or partially, and can also specify whether to refund any related application fees. Transfer reversals add to the platform's balance and subtract from the destination account's balance. Reversing a transfer that was made for a [destination charge](/docs/connect/destination-charges) is allowed only up to the amount of the charge. It is possible to reverse a [transfer_group](https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options) transfer only if the destination account has enough balance to cover the reversal. Related guide: [Reverse transfers](https://stripe.com/docs/connect/separate-charges-and-transfers#reverse-transfers)
              - …
          - `status` string, nullable — Status of the refund. This can be `pending`, `requires_action`, `succeeded`, `failed`, or `canceled`. Learn more about [failed refunds](https://stripe.com/docs/refunds#failed-refunds).
          - `transfer_reversal` union — This refers to the transfer reversal object if the accompanying transfer reverses. This is only applicable if the charge was created using the destination parameter.
            - string
            - TransferReversal — [Stripe Connect](https://stripe.com/docs/connect) platforms can reverse transfers made to a connected account, either entirely or partially, and can also specify whether to refund any related application fees. Transfer reversals add to the platform's balance and subtract from the destination account's balance. Reversing a transfer that was made for a [destination charge](/docs/connect/destination-charges) is allowed only up to the amount of the charge. It is possible to reverse a [transfer_group](https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options) transfer only if the destination account has enough balance to cover the reversal. Related guide: [Reverse transfers](https://stripe.com/docs/connect/separate-charges-and-transfers#reverse-transfers)
              - …
      - `refund_application_fee` boolean — Boolean indicating whether the application fee should be refunded when refunding this charge. If a full charge refund is given, the full application fee will be refunded. Otherwise, the application fee will be refunded in an amount proportional to the amount of the charge refunded. An application fee can be refunded only by the application that created the charge.
      - `refund_payment_config` TerminalReaderReaderResourceRefundPaymentConfig — Represents a per-transaction override of a reader configuration
        - `enable_customer_cancellation` boolean — Enable customer initiated cancellation when refunding this payment.
      - `reverse_transfer` boolean — Boolean indicating whether the transfer should be reversed when refunding this charge. The transfer will be reversed proportionally to the amount being refunded (either the entire or partial amount). A transfer can be reversed only by the application that created the charge.
    - `set_reader_display` TerminalReaderReaderResourceSetReaderDisplayAction — Represents a reader action to set the reader display
      - `cart` TerminalReaderReaderResourceCart — Represents a cart to be displayed on the reader
        - `currency` string, currency, required — Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
        - `line_items` TerminalReaderReaderResourceLineItem[], required — List of line items in the cart.
          - `amount` integer, required — The amount of the line item. A positive integer in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal).
          - `description` string, required — Description of the line item.
          - `quantity` integer, required — The quantity of the line item.
        - `tax` integer, nullable — Tax amount for the entire cart. A positive integer in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal).
        - `total` integer, required — Total amount for the entire cart, including tax. A positive integer in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal).
      - `type` 'cart', required — Type of information to be displayed by the reader.
    - `status` 'failed' | 'in_progress' | 'succeeded', required — Status of the action performed by the reader.
    - `type` 'process_payment_intent' | 'process_setup_intent' | 'refund_payment' | 'set_reader_display', required — Type of action performed by the reader.
  - `device_sw_version` string, nullable — The current software version of the reader.
  - `device_type` 'bbpos_chipper2x' | 'bbpos_wisepad3' | 'bbpos_wisepos_e' | 'mobile_phone_reader' | 'simulated_wisepos_e' | 'stripe_m2' | 'stripe_s700' | 'verifone_P400', required — Type of reader, one of `bbpos_wisepad3`, `stripe_m2`, `stripe_s700`, `bbpos_chipper2x`, `bbpos_wisepos_e`, `verifone_P400`, `simulated_wisepos_e`, or `mobile_phone_reader`.
  - `id` string, required — Unique identifier for the object.
  - `ip_address` string, nullable — The local IP address of the reader.
  - `label` string, required — Custom label given to the reader for easier identification.
  - `livemode` boolean, required — Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
  - `location` union — The location identifier of the reader.
    - string
    - TerminalLocation — A Location represents a grouping of readers. Related guide: [Fleet management](https://stripe.com/docs/terminal/fleet/locations)
      - `address` Address, required
        - `city` string, nullable — City, district, suburb, town, or village.
        - `country` string, nullable — Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)).
        - `line1` string, nullable — Address line 1 (e.g., street, PO Box, or company name).
        - `line2` string, nullable — Address line 2 (e.g., apartment, suite, unit, or building).
        - `postal_code` string, nullable — ZIP or postal code.
        - `state` string, nullable — State, county, province, or region.
      - `configuration_overrides` string — The ID of a configuration that will be used to customize all readers in this location.
      - `display_name` string, required — The display name of the location.
      - `id` string, required — Unique identifier for the object.
      - `livemode` boolean, required — Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
      - `metadata` object, required — Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
      - `object` 'terminal.location', required — String representing the object's type. Objects of the same type share the same value.
  - `metadata` object, required — Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
  - `object` 'terminal.reader', required — String representing the object's type. Objects of the same type share the same value.
  - `serial_number` string, required — Serial number of the reader.
  - `status` 'offline' | 'online', nullable — The networking status of the reader. We do not recommend using this field in flows that may block taking payments.

## Other responses

- `default` — Error response.

## Changes

> 9 revisions in range; 2 not diffed.

- **2025-01-17** `b8a91ebdacb7` — 25 info
  - added the optional property `action/anyOf[subschema #1: TerminalReaderReaderResourceReaderAction]/process_payment_intent/payment_intent/anyOf[subschema #2: PaymentIntent]/invoice/anyOf[subschema #2: Invoice]/charge/anyOf[subschema #2: Charge]/outcome/anyOf[subschema #1: ChargeOutcome]/advice_code` to the response with the `200` status
  - added the optional property `action/anyOf[subschema #1: TerminalReaderReaderResourceReaderAction]/process_payment_intent/payment_intent/anyOf[subschema #2: PaymentIntent]/invoice/anyOf[subschema #2: Invoice]/charge/anyOf[subschema #2: Charge]/payment_method_details/anyOf[subschema #1: payment_method_details]/pay_by_bank` to the response with the `200` status
  - added the optional property `action/anyOf[subschema #1: TerminalReaderReaderResourceReaderAction]/process_payment_intent/payment_intent/anyOf[subschema #2: PaymentIntent]/invoice/anyOf[subschema #2: Invoice]/charge/anyOf[subschema #2: Charge]/payment_method_details/anyOf[subschema #1: payment_method_details]/paypal/country` to the response with the `200` status
  - added the optional property `action/anyOf[subschema #1: TerminalReaderReaderResourceReaderAction]/process_payment_intent/payment_intent/anyOf[subschema #2: PaymentIntent]/latest_charge/anyOf[subschema #2: Charge]/outcome/anyOf[subschema #1: ChargeOutcome]/advice_code` to the response with the `200` status
  - …21 more
- …earlier changes not shown

[Full history](https://skmtc.dev/stripe/apis/spec3/changes/v1/terminal/readers/:reader/process_setup_intent/post.md)

---

[API](https://skmtc.dev/stripe/apis/spec3.md) · [All operations](https://skmtc.dev/stripe/apis/spec3/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/stripe/spec3/revisions/b8a91ebdacb7/schema)
