# Creates a Flute Checkout session

POST {{baseURL}}/v2/payment-sessions/checkout
This endpoint creates a new Flute Checkout session.
Flute hosts the payment page.
Redirect the customer to the returned `checkoutUrl`, which is fully formed for the environment being called.
The response is the full session object, the same one GET /v2/payment-sessions/{{paymentSessionId}} returns.
`paymentSessionResult` is `null` until the session is `Completed`.
A Flute Checkout session accepts every field a Flute Elements session does, plus `returnUrl`, `pageName`, and `extraFields` for the hosted page.
None of the hosted-page fields are accepted for a `SaveMethod` session.
This endpoint is idempotent.
See the `idempotency-key` header entry.
For more information, see Idempotency.
This endpoint requires a merchant API token.
A partner API token is rejected with a 403 response, even if the partner has the `HostedWebComponents` permission. This endpoint only runs for merchant-scoped tokens.
A merchant API token managed by a partner also requires that partner's account to have the `HostedWebComponents` permission. Otherwise, the request returns a 403 response.
See Also:
To create a Flute Elements session, see POST /v2/payment-sessions/elements.
To retrieve a payment session by id, see GET /v2/payment-sessions/{{paymentSessionId}}.
To cancel a payment session, see POST /v2/payment-sessions/{{paymentSessionId}}/cancel.

  [ Request body ]
  [ Response body ]

Endpoint: POST /v2/payment-sessions/checkout
Version: V2
Security: Bearer

## Security:

  - `Bearer` (unknown)
    http bearer JWT

## Header parameters:

  - `idempotency-key` (string)
    Specifies the client-generated `idempotency-key`.
This key is optional.
We recommend using the key to prevent multiple invocations of the operation.
This key makes this request safely retryable, or idempotent.
If the idempotency key is not included, the call will not have idempotency protection.
A retry with the same key, made within the retention window, returns the original response verbatim.
The operation is not repeated.
The retention window, also called the TTL (time to live) is 1440 minutes (24 hours) by default but this setting may be changed.
A retry with the same key while the original request is still processing returns `409 Conflict` (`IdempotencyKeyInProgress`).
Retry again after a short delay.
Reusing the same key with a different request body returns `422 Unprocessable Content` (`IdempotencyKeyConflict`).
Generate a new key for each distinct operation.
A `500` series server error is not stored under the key.
A retry with the same key after a `500` series response processes the request again.

## Request fields (application/json):

  - `baseAmount` (number)
    Specifies the amount to charge.
This value must be greater than zero, with up to two decimal places.
`null` creates a flexible-amount session where the customer enters the amount.
A `SaveMethod` session charges nothing and must send `0`.
Example: 100.00
    Example: 100

  - `paymentSessionMode` (string)
    Indicates the intent of the session.
| Name | Description |
|  --- | --- |
| Payment | Charges the customer. Does not save a payment method. This is the default. |
| PaymentAndSave | Charges the customer and vaults the payment method used. |
| SaveMethod | Vaults a payment method with no charge. `baseAmount` must be `0`. Payment fields such as `paymentMethods`, `tipAmount`, `taxRate`, `taxAmount`, `taxMode`, `metadata` and `expiresOn` are not accepted. |

For `SaveMethod` and `PaymentAndSave`, the saved payment method is reported on `paymentSessionResult.paymentMethod` once the session is `Completed`. Its `paymentMethodId` is the only source of the saved method's id.
Example: Payment
    Enum: "Payment", "PaymentAndSave", "SaveMethod"

  - `paymentMethods` (object)
    Identifies the payment methods a payment link accepts.
It is keyed by method so each one carries only the configuration that applies to it.

At least one payment method must be enabled, card or ACH.
Both may be specified.

  - `paymentMethods.card` (object)
    Identifies the card configuration on a payable resource.

  - `paymentMethods.card.enabled` (boolean)
    Identifies card payments are accepted.
Naming the payment method without a body offers it with no further configuration.
At least one payment method must be enabled, card or ACH.
Both may be specified.
If `true`, card payment is enabled.
If `false`, card payment is not enabled.
Example: true
    Example: true

  - `paymentMethods.card.processorId` (string)
    Identifies the processor that charges this resource's card payments.
This must be an active card processor of the merchant.
Omit this value to pin the merchant's current default active card processor.
A response carries the pinned processor, or `null` for a resource created before pinning was introduced.
Example: d529945e-8d10-4cb4-9dc3-718e57f3f14e
    Example: d529945e-8d10-4cb4-9dc3-718e57f3f14e

  - `paymentMethods.ach` (object)
    Identifies the ACH configuration on a payable resource.

This is typed separately from the card configuration so that ACH-only settings are enforced by the contract rather than by validation.

  - `paymentMethods.ach.enabled` (boolean)
    Identifies ACH (automated clearing house) payments are accepted.
Naming the payment method without a body offers it with no further configuration.
At least one payment method must be enabled, card or ACH.
Both may be specified.
If `true`, ACH payment is enabled.
If `false`, ACH payment is not enabled.
Example: true
    Example: true

  - `paymentMethods.ach.processorId` (string)
    Identifies the processor that charges this resource's ACH payments.
This must be an active ACH processor of the merchant.
Omit this value to pin the merchant's current default active ACH processor.
A response carries the pinned processor, or `null` for a resource created before pinning was introduced.
Example: d529945e-8d10-4cb4-9dc3-718e57f3f14e
    Example: d529945e-8d10-4cb4-9dc3-718e57f3f14e

  - `paymentMethods.ach.fasterProcessing` (boolean)
    Identifies ACH (automated clearing house) payments made through this resource are sent in the next available window for an extra fee.
If `true`, a submitted ACH payment uses faster processing.
If `false`, a submitted ACH payment uses standard processing.
This value requires the merchant's ACH settings to allow faster processing.
On a merge patch, omitting this value keeps the stored choice.
The rest of the ACH configuration is replaced.
Example: true
    Example: true

  - `taxRate` (number)
    Specifies the tax rate percentage to apply to the base amount.
Valid values range from 0 to 100, with up to three decimal places.
A `taxMode` value must be used with exactly one of `taxRate` or `taxAmount`, or none of the three.
When all three are omitted, the payment session has no tax configured.
Example: 8.25 (for 8.25%)
    Example: 8.25

  - `taxAmount` (number)
    Specifies a fixed tax amount (in USD) to apply to the base amount.
This value has up to two decimal places and cannot be negative.
This value requires a fixed `baseAmount`.
A `taxMode` value must be used with exactly one of `taxRate` or `taxAmount`, or none of the three.
When all three are omitted, the payment session has no tax configured.
A response carries this value only when the tax was configured as an amount.
Otherwise, it is `null`.
Examples:
3.75 (for $3.75)
null
    Example: 3.75

  - `taxMode` (string)
    Specifies how `taxRate` and `taxAmount` is applied to `amount`.
| Name | Description |
|  --- | --- |
| Exclusive | Adds the tax on top of `amount`. The payer is charged `amount` plus the tax. |
| Inclusive | Treats `amount` as already including the tax. No extra amount is added. |

A `taxMode` value must be used with exactly one of `taxRate` or `taxAmount`, or none of the three.
When all three are omitted, the payment session has no tax configured.
Example: Exclusive
    Enum: "Exclusive", "Inclusive"

  - `referenceId` (string)
    Specifies your own label for the session.
This value is stored and returned on every read.
A value wider than an ACH processor accepts is shortened only for the wire.
Example: order_123
    Example: order_123

  - `tipAmount` (number)
    Specifies a pre-set tip added on top of `baseAmount`.
This value must be greater than zero, with up to two decimal places, and no larger than `baseAmount` when the amount is fixed.
It is not accepted for `SaveMethod` sessions.
Example: 10.00
    Example: 10

  - `customerId` (string)
    Identifies the customer to link this payment method to.
This value may be null when this payment method is an orphan owned by the merchant directly.
An orphan payment method is a payment method in the merchant's vault but has no customer record associated with it.
A list of customer identifiers can be retrieved with GET /v2/customers.
Example: 8fa8e727-73c6-436e-b56f-6f55aabf3b1c
    Example: 8fa8e727-73c6-436e-b56f-6f55aabf3b1c

  - `customerHandling` (string)
    Specifies how a vaulted payment method is attached.
Valid values are:
| Value | Description |
|  --- | --- |
| CreateCustomer | The vaulted payment method is attached to a Customer record. This is the default. |
| TokenOnly | The vaulted payment method is stored as a bare token, with no Customer record created or referenced. Cannot be combined with `customerId`, and only valid when `paymentSessionMode` is `SaveMethod` or `PaymentAndSave`. |

This value is only meaningful for `SaveMethod` and `PaymentAndSave`.
Example: CreateCustomer
    Enum: "CreateCustomer", "TokenOnly"

  - `skipAddressVerification` (boolean)
    Specifies to bypass AVS (address verification service) at the gateway.
This value is only meaningful for `Payment` and `PaymentAndSave`.
If `true`, bypasses AVS at the gateway.
If `false`, does not bypass AVS at the gateway.
Example: true
    Example: true

  - `expiresOn` (string)
    Specifies when the session stops accepting payment.
This value must be a future date-time with a time zone (a `Z` suffix or a UTC offset). A zoneless value is rejected rather than guessed.
`null` or omitted means the session never expires.
Example: 2030-01-01T12:00:00Z
    Example: 2030-01-01T12:00:00Z

  - `metadata` (object)
    Specifies free-form string-to-string pairs stored with the session and returned on every read.
This value allows at most 50 keys, 100-character keys, 500-character values, and eight KB in all.
It is not allowed for `SaveMethod` sessions.
Example: { "orderId": "ORD-9876", "source": "web" }
    Example: {"orderId":"ORD-9876","source":"web"}

  - `returnUrl` (string)
    Specifies the HTTPS URL the hosted page sends the customer to after a successful payment.
This value must be an absolute HTTPS URL, at most 2000 characters.
A `{{paymentSessionId}}` placeholder is replaced with the session id.
Example: https://myapp.com/payment/complete
    Example: https://myapp.com/payment/complete

  - `pageName` (string)
    Specifies the customer-facing name shown as the hosted page's subtitle and used as its document title.
When omitted, the page shows the merchant name only.
Example: Order #1234
    Example: Order #1234

  - `extraFields` (array)
    Specifies questions the customer answers on the hosted page before paying, in the order shown.
This array allows at most 10 items. It is not allowed for `SaveMethod` sessions. Do not send an `extraFieldId`. The server generates it.

  - `extraFields.name` (string)
    Specifies the label shown to the customer.

This value must not be blank. It may not contain control characters such as tabs or line breaks. Duplicate names are allowed.

Example: Invoice number
    Example: Invoice number

  - `extraFields.description` (string)
    Specifies the helper text shown below the field.
This value may not contain the null character (U+0000).
Example: Printed at the top of your bill
    Example: Printed at the top of your bill

  - `extraFields.isRequired` (boolean)
    Specifies whether the customer must answer before paying.
If `true`, the customer must answer before paying.
If `false`, the field is shown as optional and can be left empty.
Example: true
    Example: true

## Request examples:

  - `Charge a fixed amount` (unknown)
    Charges $100.00, offering card only, with an 8.25% exclusive tax and a $10.00 tip.

  - `Vault a payment method, no charge` (unknown)
    Vaults a payment method with no charge. `baseAmount` is `0`. None of the payment or hosted-page fields are sent.

## Response 200:

  - `200` (unknown)
    Payment session created

## Response 200 fields (application/json):

  - `paymentSessionId` (string)
    Identifies the payment session.

Example: ebece8ac-a375-4bd1-bce7-dd352a00650c
    Example: ebece8ac-a375-4bd1-bce7-dd352a00650c

  - `paymentSessionType` (string)
    Indicates which surface the session was created for.
Valid values are:
| Value | Description |
|  --- | --- |
| Checkout | Flute hosts the payment page. The session carries a `checkoutUrl`. |
| Elements | The merchant's own UI, built with the Flute Elements SDK. |

Example: Checkout
    Enum: "Checkout", "Elements"

  - `paymentSessionStatus` (string)
    Indicates the current status of the payment session.
Valid values are:
| Value | Description |
|  --- | --- |
| Cancelled | The session was canceled with POST /v2/payment-sessions/{{paymentSessionId}}/cancel. |
| Completed | The payment or vault succeeded. |
| Created | The session is ready for use. |
| Expired | `expiresOn` passed while the session was still `Created`. A payment submitted just before `expiresOn` can still move an `Expired` session to `Completed` or `Failed`. |
| Failed | A payment attempt on the session failed. Create a new session to retry. |

Example: Created
    Enum: "Cancelled", "Completed", "Created", "Expired", "Failed"

  - `paymentSessionMode` (string)
    Indicates the intent of the session.
| Name | Description |
|  --- | --- |
| Payment | Charges the customer. Does not save a payment method. This is the default. |
| PaymentAndSave | Charges the customer and vaults the payment method used. |
| SaveMethod | Vaults a payment method with no charge. `baseAmount` must be `0`. Payment fields such as `paymentMethods`, `tipAmount`, `taxRate`, `taxAmount`, `taxMode`, `metadata` and `expiresOn` are not accepted. |

For `SaveMethod` and `PaymentAndSave`, the saved payment method is reported on `paymentSessionResult.paymentMethod` once the session is `Completed`. Its `paymentMethodId` is the only source of the saved method's id.
Example: Payment
    Enum: "Payment", "PaymentAndSave", "SaveMethod"

  - `baseAmount` (number)
    Indicates the amount to charge.
`null` for a flexible-amount session.
Example: 100.00
    Example: 100

  - `currencyCode` (string)
    Indicates the session's currency, ISO 4217 uppercase. Pinned from the merchant's configuration at creation.

Example: USD
    Example: USD

  - `taxRate` (number)
    Specifies the tax rate percentage to apply to the base amount.
Valid values range from 0 to 100, with up to three decimal places.
A `taxMode` value must be used with exactly one of `taxRate` or `taxAmount`, or none of the three.
When all three are omitted, the payment session has no tax configured.
Example: 8.25 (for 8.25%)
    Example: 8.25

  - `taxAmount` (number)
    Specifies a fixed tax amount (in USD) to apply to the base amount.
This value has up to two decimal places and cannot be negative.
This value requires a fixed `baseAmount`.
A `taxMode` value must be used with exactly one of `taxRate` or `taxAmount`, or none of the three.
When all three are omitted, the payment session has no tax configured.
A response carries this value only when the tax was configured as an amount.
Otherwise, it is `null`.
Examples:
3.75 (for $3.75)
null
    Example: 3.75

  - `taxMode` (string)
    Specifies how `taxRate` and `taxAmount` is applied to `amount`.
| Name | Description |
|  --- | --- |
| Exclusive | Adds the tax on top of `amount`. The payer is charged `amount` plus the tax. |
| Inclusive | Treats `amount` as already including the tax. No extra amount is added. |

A `taxMode` value must be used with exactly one of `taxRate` or `taxAmount`, or none of the three.
When all three are omitted, the payment session has no tax configured.
Example: Exclusive
    Enum: "Exclusive", "Inclusive"

  - `tipAmount` (number)
    Indicates the pre-set tip added on top of `baseAmount`, as set at creation.
Example: 10.00
    Example: 10

  - `referenceId` (string)
    Indicates the merchant's own label for the session, as set at creation.
Example: order_123
    Example: order_123

  - `customerId` (string)
    Identifies the customer to link this payment method to.
This value may be null when this payment method is an orphan owned by the merchant directly.
An orphan payment method is a payment method in the merchant's vault but has no customer record associated with it.
A list of customer identifiers can be retrieved with GET /v2/customers.
Example: 8fa8e727-73c6-436e-b56f-6f55aabf3b1c
    Example: 8fa8e727-73c6-436e-b56f-6f55aabf3b1c

  - `customerHandling` (string)
    Indicates how a vaulted payment method is attached, as set at creation.
Valid values are:
| Value | Description |
|  --- | --- |
| CreateCustomer | The vaulted payment method is attached to a Customer record. |
| TokenOnly | The vaulted payment method is stored as a bare token, with no Customer record created or referenced. |

Example: CreateCustomer
    Enum: "CreateCustomer", "TokenOnly"

  - `skipAddressVerification` (boolean)
    Indicates AVS (address verification service) is bypassed at the gateway for this session.
If `true`, AVS is bypassed at the gateway.
If `false`, AVS is not bypassed at the gateway.
Example: false
    Example: false

  - `paymentMethods` (object)
    Identifies the payment methods a payment session offers.
It is keyed by method so each one carries only the configuration that applies to it.
Card and ACH are the methods configured on the session.
Apple Pay® and Google Pay® are digital wallets that the session derives.
A wallet key is omitted when the session does not offer that wallet.

  - `paymentMethods.card` (object)
    Identifies the card configuration on a payable resource.

  - `paymentMethods.card.enabled` (boolean)
    Identifies card payments are accepted.
Naming the payment method without a body offers it with no further configuration.
At least one payment method must be enabled, card or ACH.
Both may be specified.
If `true`, card payment is enabled.
If `false`, card payment is not enabled.
Example: true
    Example: true

  - `paymentMethods.card.processorId` (string)
    Identifies the processor that charges this resource's card payments.
This must be an active card processor of the merchant.
Omit this value to pin the merchant's current default active card processor.
A response carries the pinned processor, or `null` for a resource created before pinning was introduced.
Example: d529945e-8d10-4cb4-9dc3-718e57f3f14e
    Example: d529945e-8d10-4cb4-9dc3-718e57f3f14e

  - `paymentMethods.ach` (object)
    Identifies the ACH configuration on a payable resource.

This is typed separately from the card configuration so that ACH-only settings are enforced by the contract rather than by validation.

  - `paymentMethods.ach.enabled` (boolean)
    Identifies ACH (automated clearing house) payments are accepted.
Naming the payment method without a body offers it with no further configuration.
At least one payment method must be enabled, card or ACH.
Both may be specified.
If `true`, ACH payment is enabled.
If `false`, ACH payment is not enabled.
Example: true
    Example: true

  - `paymentMethods.ach.processorId` (string)
    Identifies the processor that charges this resource's ACH payments.
This must be an active ACH processor of the merchant.
Omit this value to pin the merchant's current default active ACH processor.
A response carries the pinned processor, or `null` for a resource created before pinning was introduced.
Example: d529945e-8d10-4cb4-9dc3-718e57f3f14e
    Example: d529945e-8d10-4cb4-9dc3-718e57f3f14e

  - `paymentMethods.ach.fasterProcessing` (boolean)
    Identifies ACH (automated clearing house) payments made through this resource are sent in the next available window for an extra fee.
If `true`, a submitted ACH payment uses faster processing.
If `false`, a submitted ACH payment uses standard processing.
This value requires the merchant's ACH settings to allow faster processing.
On a merge patch, omitting this value keeps the stored choice.
The rest of the ACH configuration is replaced.
Example: true
    Example: true

  - `paymentMethods.applePay` (object)
    Identifies the Apple Pay configuration on a payment session.

A payment session offers Apple Pay based on the merchant's wallet enablement, the session's card processor, and the merchant's pricing mode.
The session does not configure it. The merchant's setup decides it.
Apple Pay payments are authorized as card payments on the session's card processor.

This field is returned only when a payment session is retrieved.
It is omitted when the session does not offer Apple Pay.
It is not accepted in requests.

  - `paymentMethods.applePay.processorId` (string)
    Identifies the processor that charges this session's Apple Pay payments.

This is the session's pinned card processor.

Example: 6f7f3be2-5b6c-4d7e-8f9a-0b1c2d3e4f70
    Example: 6f7f3be2-5b6c-4d7e-8f9a-0b1c2d3e4f70

  - `paymentMethods.googlePay` (object)
    Identifies the Google Pay configuration on a payment session.

A payment session offers Google Pay based on the merchant's wallet enablement, the session's card processor, and the merchant's pricing mode.
The session does not configure it. The merchant's setup decides it.
Google Pay payments are authorized as card payments on the session's card processor.

This field is returned only when a payment session is retrieved.
It is omitted when the session does not offer Google Pay.
It is not accepted in requests.

  - `paymentMethods.googlePay.processorId` (string)
    Identifies the processor that charges this session's Google Pay payments.

This is the session's pinned card processor.

Example: 5e6e2ad1-4a5b-4c6d-7e8f-9a0b1c2d3e69
    Example: 5e6e2ad1-4a5b-4c6d-7e8f-9a0b1c2d3e69

  - `paymentLinkId` (string)
    Indicates the payment link that generated this session, when applicable.
`null` for a session created directly through POST /v2/payment-sessions/checkout or POST /v2/payment-sessions/elements.
Example: 6f2a8b3c-9d4e-4f1a-8b7c-3e5d6a9f0c1b
    Example: 6f2a8b3c-9d4e-4f1a-8b7c-3e5d6a9f0c1b

  - `returnUrl` (string)
    Indicates the hosted page's post-payment redirect URL, as set at creation.
This value is for Flute Checkout sessions only. It is `null` for Flute Elements.
Example: https://myapp.com/payment/complete
    Example: https://myapp.com/payment/complete

  - `pageName` (string)
    Indicates the customer-facing name shown on the hosted page, as set at creation.
This value is for Flute Checkout sessions only. It is `null` for Flute Elements.
Example: Order #1234
    Example: Order #1234

  - `checkoutUrl` (string)
    Indicates the hosted page to send the customer to.
This value is for Flute Checkout sessions only. It is `null` for Flute Elements.
Example: https://pay.flute.com/checkout/ebece8ac-a375-4bd1-bce7-dd352a00650c
    Example: https://pay.flute.com/checkout/ebece8ac-a375-4bd1-bce7-dd352a00650c

  - `expiresOn` (string)
    Indicates when the session stops accepting payment, as set at creation.
`null` means the session never expires.
Example: 2030-01-01T12:00:00Z
    Example: 2030-01-01T12:00:00Z

  - `metadata` (object)
    Indicates the free-form string-to-string pairs attached to the session, as set at creation.
Example: { "orderId": "ORD-9876", "source": "web" }
    Example: {"orderId":"ORD-9876","source":"web"}

  - `extraFields` (array)
    Indicates the questions the customer answers on the hosted page, in the order shown.

A session opened from a payment link carries the link's fields as they were when it opened, with the same ids.
This value is for Flute Checkout sessions only. It is empty for Flute Elements and when there are none.

  - `extraFields.extraFieldId` (string)
    Identifies the field. This id is stable: a session opened from a payment link carries the link's own field ids.

Example: 6f1c2a52-8a51-4d2e-9a5e-1b2c3d4e5f60
    Example: 6f1c2a52-8a51-4d2e-9a5e-1b2c3d4e5f60

  - `extraFields.name` (string)
    Indicates the label shown to the customer.

Example: Invoice number
    Example: Invoice number

  - `extraFields.description` (string)
    Indicates the helper text shown below the field. `null` when not set.
Example: Printed at the top of your bill
    Example: Printed at the top of your bill

  - `extraFields.isRequired` (boolean)
    Indicates whether the customer must answer before paying.
If `true`, the customer must answer before paying.
If `false`, the field is optional.
Example: true
    Example: true

  - `createdOn` (string)
    Indicates when the session was created.

Example: 2026-09-30T00:00:00Z
    Example: 2026-09-30T00:00:00Z

  - `modifiedOn` (string)
    Indicates when the session was last modified.

Example: 2026-09-30T00:00:00Z
    Example: 2026-09-30T00:00:00Z

  - `paymentSessionResult` (object)
    Indicates what a `Completed` session produced: the payment method it saved and the transaction it charged.
`null` until `paymentSessionStatus` is `Completed`.
`paymentMethod` is present after a `SaveMethod` or `PaymentAndSave` session, with either `customerHandling`. It is `null` when the session saved nothing, or when the saved method could not be read at the time. Its `paymentMethodId` is the only source of the saved method's id: use it with `POST /v2/transactions` or when creating a subscription.
`linkedTransaction` is `null` for `SaveMethod` sessions, which charge nothing.

  - `paymentSessionResult.paymentMethod` (object)
    Indicates a saved card or ACH (automated clearing house) account, vaulted for reuse.
`paymentMethodType` says which of `cardDetails` and `achDetails` is populated. The other is `null`.

  - `paymentSessionResult.paymentMethod.paymentMethodId` (string)
    Indicates the payment method identifier.

This is the identifier of a previously saved ACH (automated clearing house) account to charge.

Example: 39a95e35-6d50-45ec-884b-c2417edf005d
    Example: 39a95e35-6d50-45ec-884b-c2417edf005d

  - `paymentSessionResult.paymentMethod.paymentMethodType` (string)
    Identifies the payment method type.
Valid values are:
| Type | Description |
|  --- | --- |
| ACH | Payment made through an ACH (automated clearing house) bank transfer. |
| Card | Payment made with a credit or debit card. |
| Cash | Payment made with physical currency. |

Example: Card
    Enum: "ACH", "Card", "Cash"

  - `paymentSessionResult.paymentMethod.paymentMethodName` (string)
    Indicates the display label for the payment method.
This is a free-formed name that is convenient for the merchant to recognize.
`null` for a payment method saved through a checkout session, a payment link, or an invoice, which carry no label.
Example: Peppared Street Cafe's Preferred Payment
    Example: Peppared Street Cafe's Preferred Payment

  - `paymentSessionResult.paymentMethod.isDefault` (boolean)
    Indicates this payment method is the default payment method for the linked customer.
This value is always `false` for an orphan payment method, which has no linked customer and so no concept of default.
If `true`, this is the default payment method.
If `false`, this is not the default payment method.
Example: true
    Example: true

  - `paymentSessionResult.paymentMethod.createdOn` (string)
    Indicates the date-time (in an ISO 8601 UTC date-time format) the payment method was created on.

Example: 2026-01-15T10:30:56.264Z
    Example: 2026-01-15T10:30:56.264Z

  - `paymentSessionResult.paymentMethod.cardDetails` (object)
    Indicates the card details. This is populated when `paymentMethodType` is `Card`. It is `null` for ACH.

  - `paymentSessionResult.paymentMethod.cardDetails.maskedCardNumber` (string)
    Indicates the PAN (primary account number), with the first 6 and last 4 digits visible.
This value may be partially obscured as additional security.
This value can be safely displayed to clients without revealing the actual or full account number.
Example: 400112******1111
    Example: 400112******1111

  - `paymentSessionResult.paymentMethod.cardDetails.cardNumberLast4` (string)
    Indicates the last 4 digits of the card number.

Example: 1111
    Example: 1111

  - `paymentSessionResult.paymentMethod.cardDetails.expirationMonth` (integer)
    Identifies the expiration month (in a two-digit number format) of the card.
Examples:
07
12
    Example: 12

  - `paymentSessionResult.paymentMethod.cardDetails.expirationYear` (integer)
    Identifies the expiration year (in a four-digit number) of the card.

Example: 2032
    Example: 2032

  - `paymentSessionResult.paymentMethod.cardDetails.cardBrand` (string)
    Indicates the brand of the card.
This is the card network, not whether the card is credit or debit.
The credit or debit classification is specified with `creditDebitType`.
Valid values are:
| Type | Description |
|  --- | --- |
| AmericanExpress | Card issued by the American Express network. |
| DinersClub | Card issued by the Diners Club network. |
| Discover | Card issued by the Discover network. |
| JCB | Card issued by the Japan Credit Bureau network. |
| MasterCard | Card issued by the Mastercard network. |
| Unknown | The card brand could not be determined. |
| Visa | Card issued by the Visa network. |

Example: Visa
    Enum: "AmericanExpress", "DinersClub", "Discover", "JCB", "MasterCard", "Unknown", "Visa"

  - `paymentSessionResult.paymentMethod.cardDetails.cardType` (string)
    Indicates the card as either credit or debit.
Valid values are:
| Type | Description |
|  --- | --- |
| Credit | Card draws funds from a credit line. |
| Debit | Card draws funds from a bank account. |
| Unknown | Card funding type could not be determined. |

Example: Credit
    Enum: "Credit", "Debit", "Unknown"

  - `paymentSessionResult.paymentMethod.cardDetails.cardTokenType` (string)
    Indicates the type of the token.
Valid values are:
| Type | Meaning |
|  --- | --- |
| Local | Tokenized and stored within Flute's own vault |
| Network | Tokenized through a card network, such as Visa or Mastercard, using their network tokenization services |

Example: Local
    Enum: "Local", "Network"

  - `paymentSessionResult.paymentMethod.achDetails` (object)
    Indicates the ACH (automated clearing house) details. This is populated when `paymentMethodType` is `ACH`. It is `null` for a card.

  - `paymentSessionResult.paymentMethod.achDetails.maskedAccountNumber` (string)
    Indicates the bank account number for the ACH (automated clearing house) account.
This value may be partially obscured as additional security.
It can then be safely displayed to clients without revealing the actual or full account number.
Example: ****7890
    Example: ****7890

  - `paymentSessionResult.paymentMethod.achDetails.accountNumberLast2` (string)
    Indicates the last 2 digits of the bank account number.

Example: 90
    Example: 90

  - `paymentSessionResult.paymentMethod.achDetails.accountRoutingNumber` (string)
    Indicates the ACH (automated clearing house) account routing number.

Example: 021000021
    Example: 021000021

  - `paymentSessionResult.paymentMethod.achDetails.accountType` (string)
    Identifies the type of the account.
Valid values are:
| Type | Description |
|  --- | --- |
| Checking | Account used for regular daily transactions. |
| Savings | Account used to hold and grow funds over time. |

Example: Checking
    Enum: "Checking", "Savings"

  - `paymentSessionResult.paymentMethod.achDetails.accountHolderType` (string)
    Identifies the holder type of the account.
Valid values are:
| Type | Description |
|  --- | --- |
| Business | Card issued to a business or company account. |
| Personal | Card issued to an individual for personal use. |

Example: Business
    Enum: "Business", "Personal"

  - `paymentSessionResult.paymentMethod.achDetails.taxId` (string)
    Indicates the tax identifier. `null` if not set.
This value may be partially obscured as additional security.
This value can be safely displayed to clients without revealing the actual or full value.
Example: *****6789
    Example: *****6789

  - `paymentSessionResult.paymentMethod.achDetails.companyName` (string)
    Indicates the name of the customer's company or organization.
This is the ACH (automated clearing house) legal-entity name.
Set on Business orphan payment methods at create time so it is available at transaction time when `ContactInfo.CompanyName` is omitted on the request.
`null` for a customer-linked payment method, which uses the customer's own `companyName` instead.
Example: Peppared Street Cafe
    Example: Peppared Street Cafe

  - `paymentSessionResult.linkedTransaction` (object)

  - `paymentSessionResult.linkedTransaction.transactionId` (string)
    Indicates the attached transaction identifier.

This value is available after processing.

Example: f01339ec-8184-48c7-b58d-0780d6499ef4
    Example: f01339ec-8184-48c7-b58d-0780d6499ef4

  - `paymentSessionResult.linkedTransaction.transactionDateTime` (string)
    Indicates the date-time (in an ISO 8601 date-time format) of the transaction.

Example: 2026-05-05T14:30:42.938Z
    Example: 2026-05-05T14:30:42.938Z

  - `paymentSessionResult.linkedTransaction.transactionStatus` (string)
    Indicates the aggregated transaction status.
Valid values are:
| Status | Description |
|  --- | --- |
| Authorized | Payment approved but funds not yet captured. |
| Cancelled | Transaction stopped before it completed. |
| Captured | Approved funds collected from the card. |
| ChargedBack | Cardholder disputed the charge with their bank. |
| Cleared | Funds finished processing and settled. |
| Declined | Payment rejected by the bank or processor. |
| Failed | Transaction could not complete due to an error. |
| Held | Transaction paused and awaiting release. |
| HeldByProcessor | Processor paused the transaction for review. |
| Informational | Record used for reference only, not a live charge. |
| InProgress | Transaction is still processing. |
| PartiallyAuthorized | Only part of the requested amount was approved. |
| Pending | Transaction is waiting for a result. |
| Refunded | Funds returned to the cardholder. |
| Scheduled | Transaction set to run at a future time. |
| Settled | Funds moved from issuer to the merchant account. |
| Verified | Card or account confirmed as valid. |
| Voided | Authorization canceled before capture. |

Example: Authorized
    Enum: "Authorized", "Captured", "Voided", "Refunded", "Verified", "Settled", "PartiallyAuthorized", "Informational", "Scheduled", "Cancelled", "ChargedBack", "InProgress", "Cleared", "Held", "HeldByProcessor", "Pending", "Declined", "Failed"

  - `paymentSessionResult.linkedTransaction.transactionType` (string)
    Identifies the type of the transaction.
Valid values are:
| Type | Explanation |
|  --- | --- |
| AchCancel | Cancels a pending ACH transaction. |
| AchCredit | Sends funds to a bank account. |
| AchDebit | Pulls funds from a bank account. |
| AchHold | Holds an ACH transaction temporarily. |
| AchRefund | Returns funds from an ACH payment. |
| AchUnHold | Releases a held ACH transaction. |
| Authorization | Reserves funds for later capture. |
| Capture | Collects funds from an authorization. |
| CardAuthentication | Confirms cardholder identity before payment. |
| Refund | Returns funds from a transaction. |
| RefundWORef | Refunds a transaction without a reference. |
| Sale | Authorizes and captures funds together. |
| Settle | Submits a batch for final processing. |
| TipAdjustment | Changes the tip amount on a transaction. |
| Void | Cancels a transaction before settlement. |

Example: AchDebit
    Enum: "AchCancel", "AchCredit", "AchDebit", "AchHold", "AchRefund", "AchUnHold", "Authorization", "Capture", "CardAuthentication", "Refund", "RefundWORef", "Sale", "Settle", "TipAdjustment", "Void"

  - `paymentSessionResult.linkedTransaction.cardTokenType` (string)
    Indicates the type of the token.
This value is `null` when the transaction does not use a card token.
For example, this applies to ACH and cash transactions.
Valid values are:
| Type | Meaning |
|  --- | --- |
| Local | Tokenized and stored within Flute's own vault |
| Network | Tokenized through a card network, such as Visa or Mastercard, using their network tokenization services |

Example: Local
    Enum: "Local", "Network"

  - `paymentSessionResult.linkedTransaction.referenceId` (string)
    Indicates a reference identifier provided by the merchant.

This is included in the duplicate-check key.
It allows the same card and amount combination to be charged multiple times when the reference identifiers are different.

Example: REF-EXT-12345
    Example: REF-EXT-12345

  - `paymentSessionResult.linkedTransaction.originalTransactionId` (string)
    Indicates the identifier of the original transaction that this transaction refunds.
This value is provided only when this transaction is a refund of another transaction.
In all other scenarios, it is null or omitted.
Example: 4d5d19c0-7b8c-4d9e-0f1a-2b3c4d5e6f92
    Example: 4d5d19c0-7b8c-4d9e-0f1a-2b3c4d5e6f92

  - `paymentSessionResult.linkedTransaction.processedAmount` (number)
    Indicates the transaction amount (in USD).
The value will be null until the transaction is completed.
Examples:
87.39 (for $87.39)
null
    Example: 87.39

  - `paymentSessionResult.linkedTransaction.refundDetails` (object)
    Indicates an object detailing the refund posture for a transaction that can be refunded.

This value is null on transactions that are themselves refunds or credits.
Those cannot be refunded again.

  - `paymentSessionResult.linkedTransaction.refundDetails.refundedAmount` (number)
    Indicates the total amount (in USD) already refunded for this transaction.
Examples:
56.99
0
    Example: 0

  - `paymentSessionResult.linkedTransaction.refundDetails.availableRefundAmount` (number)
    Indicates the amount (in USD) still refundable.
Example: 120.99 (for $120.99)
    Example: 120.99

  - `paymentSessionResult.linkedTransaction.currencyCode` (string)
    Identifies the transaction's currency code (in uppercase ISO 4217 currency code).

Example: USD
    Enum: "USD"

  - `paymentSessionResult.linkedTransaction.pricingType` (string)
    Identifies the type of pricing.
This value is required only when Dual Pricing is enabled.
Valid values are:
| Status | Explanation |
|  --- | --- |
| Card | The transaction uses the card price, which may include a surcharge. |
| Cash | The transaction uses the cash price, which may include a cash discount. |

Example: Card
    Enum: "Card", "Cash"

  - `paymentSessionResult.linkedTransaction.merchantId` (string)
    Identifies the merchant identifier.

Example: 5611f824-48ef-4255-978d-91ce13953bbd
    Example: 5611f824-48ef-4255-978d-91ce13953bbd

  - `paymentSessionResult.linkedTransaction.paymentProcessorId` (string)
    Identifies the payment processor.
Defaults to merchant's default processor.
A list of payment processor identifiers for a specified customer can be retrieved with GET /v2/settings/payment-configuration.
Example: 76215e54-a85b-4d42-9553-163fe393cb02
    Example: 76215e54-a85b-4d42-9553-163fe393cb02

  - `paymentSessionResult.linkedTransaction.batchId` (string)
    Indicates the batch settlement identifier.

Example: 42df0a13-4bf4-48f8-929c-08a379c0a0d6
    Example: 42df0a13-4bf4-48f8-929c-08a379c0a0d6

  - `paymentSessionResult.linkedTransaction.amountBreakdown` (object)
    Indicates an object detailing the amount breakdown details.

  - `paymentSessionResult.linkedTransaction.amountBreakdown.baseAmount` (number)
    Identifies the base transaction amount (in USD) before adjustments.
Examples:
125
125.5
125.50
    Example: 125.5

  - `paymentSessionResult.linkedTransaction.amountBreakdown.tipAmount` (number)
    Indicates the absolute amount (in USD) of the tip to be added.
If this value is provided, it must be greater than zero.
This amount adds to the base amount of the original transaction.
That transaction must be authorized first (POST /pay-api/v1/transactions/auth).

Care must be taken that a value other than zero can be provided to either `tipAmount` or `tipRate`.
A non-zero value cannot be provided to both.

Example: 14.50 (for $14.50)
    Example: 14.5

  - `paymentSessionResult.linkedTransaction.amountBreakdown.tipRate` (number)
    Indicates a percentage of the tip to be added.
If this value is provided, it must be greater than zero.
This amount adds to the base amount of the original transaction.
That transaction must be authorized first (POST /pay-api/v1/transactions/auth).

Care must be taken that a value other than zero can be provided to either `tipAmount` or `tipRate`.
A non-zero value cannot be provided to both.

Example: 18.50 (for 18.50%)
    Example: 18.5

  - `paymentSessionResult.linkedTransaction.amountBreakdown.discountAmount` (number)
    Indicates the absolute amount (in USD) of discount to be applied.
If this value is provided, it must be greater than zero.
Example: 25 (for $25)
    Example: 25

  - `paymentSessionResult.linkedTransaction.amountBreakdown.discountRate` (number)
    Indicates a percentage of a discount to be applied.
If this value is provided, it must be greater than zero.

Care must be taken that a value other than zero can be provided to either `discountAmount` or `discountRate`.
A non-zero value cannot be provided to both.

Example: 5.5 (for 5.5%)
    Example: 5.5

  - `paymentSessionResult.linkedTransaction.amountBreakdown.surchargeAmount` (number)
    Indicates the surcharge amount (in USD) applied.

Care must be taken that a value other than zero can be provided to either `discountAmount` or `discountRate`.
A non-zero value cannot be provided to both.

Example: 22 (for $22)
    Example: 22

  - `paymentSessionResult.linkedTransaction.amountBreakdown.surchargeRate` (number)
    Indicates the percent of transaction amount.
This value is added to the base amount after `percentageOffRate` has been applied.
Care must be taken that a value other than zero can be provided to either `surchargeAmount` or `surchargeRate`.
A non-zero value cannot be provided to both.
Example: 2.5 (for 2.5%)
    Example: 2.5

  - `paymentSessionResult.linkedTransaction.amountBreakdown.taxAmount` (number)
    Indicates the sales tax amount (in USD) charged on top of the base amount.
This value is added to the base amount, as the tip and surcharge are.
This value is zero when the transaction carries no tax.
This value is also zero when the tax is quoted as already included in the price.
Such a tax is inside the base amount and is not reported here, to avoid counting it twice.
Example: 10.00 (for $10.00)
    Example: 10

  - `paymentSessionResult.linkedTransaction.amountBreakdown.taxRate` (number)
    Indicates the rate (as a percentage) behind `taxAmount`.
This value is zero under the same conditions as `taxAmount`.
The rate describes the base the tax was computed on.
For an invoice, that base is the line items only, so it can differ from the base amount.
In that case, the rate does not re-derive `taxAmount`.
Example: 10 (for 10%)
    Example: 10

  - `paymentSessionResult.linkedTransaction.taxDetails` (object)
    Identifies the tax charged on the transaction.
A checkout session or a payment link configures the tax.
This object is `null` when the transaction carries no tax.
It is also `null` when the only tax sent was a level 2 sales tax rate.
A level 2 sales tax rate qualifies the transaction for interchange. The payer is not charged it.
This differs from the tax in the amount breakdown.
The amount breakdown reports only a tax that raised the total.
An `Inclusive` tax is already inside the base amount, so the amount breakdown reports it as 0.

  - `paymentSessionResult.linkedTransaction.taxDetails.taxMode` (string)
    Indicates how the tax applies to the amount.
| Name | Description |
|  --- | --- |
| Exclusive | The tax was added on top of the amount. |
| Inclusive | The amount already includes the tax. No extra amount was added. |

Example: Inclusive
    Enum: "Exclusive", "Inclusive"

  - `paymentSessionResult.linkedTransaction.taxDetails.taxRate` (number)
    Indicates the tax rate percentage the tax was configured at.
An invoice supplies its own tax amount.
Its rate is recorded and does not need to reproduce `taxAmount`.
A resource that supplies only a tax amount has the rate derived from it.
Example: 8.5 (for 8.5%)
    Example: 8.5

  - `paymentSessionResult.linkedTransaction.taxDetails.taxAmount` (number)
    Indicates the tax amount (in USD) the transaction was quoted at, whatever the mode.
It describes the quote, as the amount breakdown does.
A capture or a host approval for less leaves it unchanged.
`processedAmount` reports what was taken.
Example: 7.83 (for $7.83)
    Example: 7.83

  - `paymentSessionResult.linkedTransaction.taxDetails.taxableAmount` (number)
    Indicates the amount (in USD) the quote charged before the tax.
It is the quote's total less the tip, the surcharge, and an `Exclusive` tax.
The tip, the surcharge, and an `Exclusive` tax are charged outside the taxed amount.
When the tax is `Inclusive`, `taxAmount` is also subtracted, because the tax is already inside the total.
With a rate-driven tax, this is the amount the rate was applied to, to the cent.
It can differ from that amount by 0.01, because each quote component is rounded before it is stored.
With a supplied tax amount, it is still what was charged before the tax.
It is not the narrower base the supplied amount was computed on.
Example: 92.17 (for $92.17)
    Example: 92.17

  - `paymentSessionResult.linkedTransaction.cardDetails` (object)
    Indicates the card details exposed on transaction responses.

These may be masked for sensitive fields or fully displayed for non-sensitive fields.

  - `paymentSessionResult.linkedTransaction.cardDetails.maskedCardNumber` (string)
    Indicates the masked card number.
This displays only the last four numbers.
Example: ************1111
    Example: ************1111

  - `paymentSessionResult.linkedTransaction.cardDetails.cardProcessedAsType` (string)
    Indicates the network should process the transaction as a credit or a debit transaction.
The actual processing is specified with `processCreditDebitType`.
This can differ from `cardType`, which reflects the card's own funding classification.
A card issued as debit can be processed as credit, and a card issued as credit can be processed as debit.
Processing type depends on network routing, chip fallback behavior, and issuer rules at the time of authorization.
Valid values are:
| Type | Description |
|  --- | --- |
| Credit | The transaction was processed as a credit transaction. |
| Debit | The transaction was processed as a debit transaction. |
| Unknown | The processing type could not be determined. |

Example: Credit
    Enum: "Credit", "Debit", "Unknown"

  - `paymentSessionResult.linkedTransaction.cardDetails.cardDataSource` (string)
    Indicates the source of the card (credit or debit).
Valid values are:
| Item | Explanation |
|  --- | --- |
| EMV | Chip read using EMV tags. |
| EMVContactless | Tap chip read using EMV tags. |
| FallbackSwipe | Swipe used after failed chip read. |
| Internet | Virtual terminal or API entry. |
| Manual | Card present, keyed entry. |
| NFC | Contactless tap using EMV tags and track data. |
| Swipe | Magnetic stripe track data read. |

Example: Swipe
    Enum: "Internet", "Swipe", "NFC", "EMV", "EMVContactless", "FallbackSwipe", "Manual"

  - `paymentSessionResult.linkedTransaction.cardDetails.cardholderVerificationMethod` (string)
    Indicates the method the cardholder was authenticated with.
This value is `null` when no cardholder verification method is recorded for the transaction.
Valid values are:
| Item | Explanation |
|  --- | --- |
| ElectronicSignatureAnalysis | Electronic signature captured and analyzed. |
| ETicketEnvAmex | E-ticket environment specific to American Express. |
| ManualOther | Other manual verification method. |
| ManualSignature | Paper or screen signature obtained. |
| NotAuthenticated | No cardholder verification performed. |
| OfflinePin | Offline PIN verified by card chip, no network. |
| PIN | Online PIN verified by issuer. |
| SystematicOther | Systematic or automated method not listed. |
| Unknown | Verification method is unknown. |

Example: PIN
    Enum: "NotAuthenticated", "PIN", "ElectronicSignatureAnalysis", "ManualSignature", "ManualOther", "Unknown", "SystematicOther", "ETicketEnvAmex", "OfflinePin"

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags` (object)
    Indicates the EMV (the global standard for chip cards, named for Europay, Mastercard and Visa) chip data from a card-present transaction.
A magnetic stripe stores the same static data every time it’s swiped. The data can then be copied.
For each transaction, it creates a one-time cryptogram that the card issuer checks.
That makes cloned cards much harder to use.
During a chip transaction, the card and the terminal exchange data elements called EMV tags.
Each tag has a hex number.
For example, `9F26` is the application cryptogram and `95` is the terminal verification results.
Those tags are what the emvTags object returns.
EMV covers dip (inserted chip) and contactless (tap) payments, including phone wallets.
The card chip and the terminal exchange this data during the transaction.
Five commonly needed values appear as named fields: `ac`, `tvr`, tsi, `aid`, and `applicationLabel`.
The rawTags array contains every tag the transaction returned, as hex tag and value pairs.
Receipts and dispute records use this data to identify the card application and the checks performed.
This object is returned only for chip transactions.
It is null for other entry methods.

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags.ac` (string)
    Indicates the AC (application cryptogram).

This is the cryptographic value generated by the card chip so the issuer can authenticate the transaction.

Example: 3F8A1C9E5B7D2046
    Example: 3F8A1C9E5B7D2046

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags.tvr` (string)
    Indicates the TVR (terminal verification results).

This is a bitmask showing which checks the terminal ran and the success status of each one.
The individual checks include data authentication, cardholder verification, and risk management.

Example: 0000008000
    Example: 0000008000

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags.tsi` (string)
    Indicates the TSI (transaction status information).

This is a bitmask showing which processes were actually performed during the transaction.

Example: E800
    Example: E800

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags.aid` (string)
    Indicates the AID (application identifier).

This identifies the specific card payment application on the chip, such as Visa Credit or Mastercard Debit.

Example: A0000000031010
    Example: A0000000031010

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags.applicationLabel` (string)
    Indicates the application Label.

This is the human-readable name of that application, often shown on the terminal display.

Example: VISA CREDIT
    Example: VISA CREDIT

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags.rawTags` (array)
    Indicates the EMV chip transaction data elements, or tags. 

Each data element is identified by its own hex tag number according to the EMV specifications.
For example, the five most commonly needed ones are: ac (9F26), tvr (95), tsi (9B), aid (4F), and applicationLabel (50).
An actual EMV transaction can return many more tags than that, sometimes with dozens of possible values.

This tag array object contains all the returned pairings.

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags.rawTags.key` (string)
    Indicates the key of the pair.

Example: ac
    Example: ac

  - `paymentSessionResult.linkedTransaction.cardDetails.emvTags.rawTags.value` (string)
    Indicates the value of the pair.

Example: 9F26
    Example: 9F26

  - `paymentSessionResult.linkedTransaction.achDetails` (object)
    Indicates ACH account details exposed on transaction responses.

These may be masked for sensitive fields or fully displayed for non-sensitive fields.

  - `paymentSessionResult.linkedTransaction.achDetails.maskedAccountNumber` (string)
    Indicates the masked ACH account number.
This displays only the last four numbers.
Example: **************89
    Example: **************89

  - `paymentSessionResult.linkedTransaction.achDetails.accountRoutingNumber` (string)
    Indicates the masked ACH routing number.

Example: 123123123
    Example: 123123123

  - `paymentSessionResult.linkedTransaction.achDetails.secCode` (string)
    Indicates the ACH SEC (standard entry class) code.
Valid values are:
| Code | Description |
|  --- | --- |
| CCD | Used for business to business payments. |
| PPD | Used for consumer payments like payroll or bill pay. |
| Web | Used for a payment authorized on a website. |

Example: CCD
    Enum: "Web", "PPD", "CCD"

  - `paymentSessionResult.linkedTransaction.achDetails.isSameDayProcessing` (boolean)
    Indicates same-day ACH processing for faster settlement.
If `true`, the transaction uses the same-day ACH processing.
If `false`, the transaction does not use the same-day ACH processing.
If null or omitted, the default standard ACH processing is used.
Example: true
    Example: true

  - `paymentSessionResult.linkedTransaction.achDetails.requesterIpAddress` (string)
    Indicates the IP address of the end user.
Valid IP address formats are:
IPv4
IPv6 format3
This end user may be the customer, operator, or application responsible for submitting the transaction.
This is required for audit and fraud-detection purposes.
Example: 192.168.1.1
    Example: 192.168.1.1

  - `paymentSessionResult.linkedTransaction.processorDetails` (object)
    Indicates an object detailing the payment processor identifiers for the transaction.
This value is `null` when the transaction has no payment processor details.
For example, this applies to cash transactions.

  - `paymentSessionResult.linkedTransaction.processorDetails.mid` (string)
    Indicates the MID (merchant identifier) assigned by the processor.

Example: 932129304958123
    Example: 932129304958123

  - `paymentSessionResult.linkedTransaction.processorDetails.tid` (string)
    Indicates the TID (terminal identifier) assigned by the processor.

example: 6095275263
    Example: 6095275263

  - `paymentSessionResult.linkedTransaction.processorDetails.authCode` (string)
    Indicates the authorization code returned by the processor.

Example: VTLMC1
    Example: VTLMC1

  - `paymentSessionResult.linkedTransaction.processorDetails.rrn` (string)
    Indicates the RRN (retrieval reference number) returned by the processor.

Example: 59d5df1aa58d4de3969175eeece571c1
    Example: 59d5df1aa58d4de3969175eeece571c1

  - `paymentSessionResult.linkedTransaction.declineDetails` (object)
    Indicates an object detailing a declined or failed transaction.
This value is null when the transaction was approved or is pending.

  - `paymentSessionResult.linkedTransaction.declineDetails.code` (string)
    Indicates the decline or failure code from the processor or gateway.

Example: 41
    Example: 41

  - `paymentSessionResult.linkedTransaction.declineDetails.message` (string)
    Indicates a human-readable decline or failure message.

Example: Do Not Honor
    Example: Do Not Honor

  - `paymentSessionResult.linkedTransaction.addressVerificationServiceResponse` (object)
    Indicates the AVS (address verification service) response for card payments.

  - `paymentSessionResult.linkedTransaction.addressVerificationServiceResponse.action` (string)
    Indicates allowing an action after address verification.
Valid values are:
| Status | Explanation |
|  --- | --- |
| Allow | If address verification passes, the payment proceeds. |
| Deny | If address verification does not pass, the payment is denied. |

Example: Allow
    Enum: "Allow", "Deny"

  - `paymentSessionResult.linkedTransaction.addressVerificationServiceResponse.responseCode` (string)
    Indicates the AVS (address verification service) response code from processor.

Example: A
    Example: Y

  - `paymentSessionResult.linkedTransaction.addressVerificationServiceResponse.description` (string)
    Indicates the description of the AVS (address verification service) result code description.

Example: Address and ZIP match
    Example: Address and ZIP match

  - `paymentSessionResult.linkedTransaction.transactionEvents` (array)
    Indicates an object detailing the chronological list of events that occurred for this transaction.

  - `paymentSessionResult.linkedTransaction.transactionEvents.type` (string)
    Indicates the type of the event.
Valid values are:
| Type | Description |
|  --- | --- |
| Authorization | Authorizes the transaction. |
| Capture | Collects funds from an approved authorization. |
| CardAuthentication | Confirms cardholder identity before payment. |
| Credit | Sends funds back to a cardholder outside a refund. |
| Hold | Pauses a transaction or account temporarily. |
| Refund | Returns funds for a completed sale. |
| Sale | Authorizes and captures payment in one step. |
| Settle | Submits a batch for final processing. |
| TipAdjustment | Adds or changes a tip after the sale. |
| UnHold | Removes a hold and resumes normal activity. |
| Void | Cancels a transaction before it settles. |

Example: Authorization
    Enum: "Authorization", "Sale", "Capture", "Void", "Refund", "TipAdjustment", "CardAuthentication", "Hold", "UnHold", "Credit", "Settle"

  - `paymentSessionResult.linkedTransaction.transactionEvents.status` (string)
    Indicates the status of the event.
| Value | Description |
|  --- | --- |
| Approved | The processor approved the event. |
| Declined | The processor declined the event. |
| Failed | The event ended in an error before a processor decision. |
| Pending | The event is waiting for a result. |

Example: Approved
    Enum: "Pending", "Approved", "Declined", "Failed"

  - `paymentSessionResult.linkedTransaction.transactionEvents.dateTime` (string)
    Indicates the date-time (in an ISO 8601 date-time format) the event occurred.

Example: 2026-06-15T14:30:00Z
    Example: 2026-06-15T14:30:00Z

  - `paymentSessionResult.linkedTransaction.transactionEvents.amount` (number)
    Indicates the amount (in USD) requested for this event.
Example: 120.99 (for $120.99)
    Example: 120.99

  - `paymentSessionResult.linkedTransaction.transactionEvents.originalTransactionId` (string)
    Indicates the identifier of the refund transaction created by the event.
This value is provided only for a `Refund` event.
For any other event, it is null or omitted.
Example: 4d5d19c0-7b8c-4d9e-0f1a-2b3c4d5e6f92
    Example: 4d5d19c0-7b8c-4d9e-0f1a-2b3c4d5e6f92

  - `paymentSessionResult.linkedTransaction.transactionEvents.declineDetails` (object)
    Indicates an object detailing a declined or failed event.

This value is null when the event was approved or is pending.

  - `paymentSessionResult.linkedTransaction.transactionEvents.declineDetails.code` (string)
    Indicates the decline or failure code from the processor or gateway.

Example: 41
    Example: 41

  - `paymentSessionResult.linkedTransaction.transactionEvents.declineDetails.message` (string)
    Indicates a human-readable decline or failure message.

Example: HOLD-CALL
    Example: HOLD-CALL

  - `paymentSessionResult.linkedTransaction.source` (object)
    Indicates an object describing the origination of the transaction.

  - `paymentSessionResult.linkedTransaction.source.sourceType` (string)
    Indicates the source of the transaction.
Valid values are:
| Value | Description |
|  --- | --- |
| ApiKey | An external application created the transaction using an API key. |
| Invoice | A billed invoice created the transaction. |
| MobileApp | A mobile application created the transaction. |
| Portal | A staff member created the transaction through the web portal. |
| QuickPayment | A one-time payment link created the transaction. |
| Subscription | A recurring subscription created the transaction. |
| TapToPay | A mobile device using tap to pay created the transaction. |
| Terminal | A physical payment terminal created the transaction. |
| WebComponent | An embedded web component created the transaction. |

Example: QuickPayment
    Enum: "ApiKey", "Invoice", "MobileApp", "Portal", "QuickPayment", "Subscription", "TapToPay", "Terminal", "WebComponent"

  - `paymentSessionResult.linkedTransaction.source.sourceId` (string)
    Indicates the Identifier of the originating entity.

Example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
    Example: 3fa85f64-5717-4562-b3fc-2c963f66afa6

  - `paymentSessionResult.linkedTransaction.source.sourceName` (string)
    Indicates a human-readable name of the originator.

Example: API Key for ecommerce app
    Example: API Key for ecommerce app

## Response 400:

  - `400` (unknown)
    Bad Request

## Response 400 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: Unauthorized
    Example: Unauthorized

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Response | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.
Example: <Service>
    Example: <Service>

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: FluentValidation.ValidationException
    Example: FluentValidation.ValidationException

  - `correlationId` (string)
    Indicates the correlation identifier.

This is a unique identifier, a trace identifier, Flute attaches to a request/response pair so a single transaction can be traced end-to-end across systems and logs. 

Its intent is to support troubleshooting.
We recommend including this value when contacting support.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
This is a field on Flute's standard error response object, alongside values such as `correlationId`, `errorCode`, or `statusCode`.
It's the identifier of the specific resource the failed request was about.
Error messages may specify "Entity with ID b31fbe9f-eebb-45ce-9cae-92265389f47f does not exist or has been deleted."
When a 404 (or similar entity-specific error, like a conflict) comes back,
check `entityId` to get the exact identifier of the record that couldn't be found or matched.
This is useful for confirming which resource reference was wrong, especially if the request touched multiple identifiers at once.
Example: null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

  - `title` (string)
    Indicates a short, human-readable summary of the error category.

Example: Resource not found
    Example: Resource not found

  - `cause` (string)
    Indicates the reason the error occurred.

Example: The requested resource does not exist or has been deleted.
    Example: The requested resource does not exist or has been deleted.

  - `resolution` (string)
    Indicates the recommended action for resolving the error.

Example: Verify the resource ID is correct or retrieve a list of available resources.
    Example: Verify the resource ID is correct or retrieve a list of available resources.

  - `documentationUrl` (string)
    https://developer.flute.com/

## Response 401:

  - `401` (unknown)
    Unauthorized

## Response 401 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: Unauthorized
    Example: Unauthorized

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Response | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.
Example: <Service>
    Example: <Service>

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: FluentValidation.ValidationException
    Example: FluentValidation.ValidationException

  - `correlationId` (string)
    Indicates the correlation identifier.

This is a unique identifier, a trace identifier, Flute attaches to a request/response pair so a single transaction can be traced end-to-end across systems and logs. 

Its intent is to support troubleshooting.
We recommend including this value when contacting support.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
This is a field on Flute's standard error response object, alongside values such as `correlationId`, `errorCode`, or `statusCode`.
It's the identifier of the specific resource the failed request was about.
Error messages may specify "Entity with ID b31fbe9f-eebb-45ce-9cae-92265389f47f does not exist or has been deleted."
When a 404 (or similar entity-specific error, like a conflict) comes back,
check `entityId` to get the exact identifier of the record that couldn't be found or matched.
This is useful for confirming which resource reference was wrong, especially if the request touched multiple identifiers at once.
Example: null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

  - `title` (string)
    Indicates a short, human-readable summary of the error category.

Example: Resource not found
    Example: Resource not found

  - `cause` (string)
    Indicates the reason the error occurred.

Example: The requested resource does not exist or has been deleted.
    Example: The requested resource does not exist or has been deleted.

  - `resolution` (string)
    Indicates the recommended action for resolving the error.

Example: Verify the resource ID is correct or retrieve a list of available resources.
    Example: Verify the resource ID is correct or retrieve a list of available resources.

  - `documentationUrl` (string)
    https://developer.flute.com/

## Response 403:

  - `403` (unknown)
    Forbidden

## Response 403 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: Validation failed: -- Email: 'Email' is not a valid email address. Severity: Error
    Example: Validation failed: -- Email: 'Email' is not a valid email address. Severity: Error

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Status | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.
Example: <Service>
    Example: <Service>

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: FluentValidation.ValidationException
    Example: FluentValidation.ValidationException

  - `correlationId` (string)
    Indicates the correlation identifier.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
Example:
null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

  - `title` (string)

  - `cause` (string)

  - `resolution` (string)

  - `documentationUrl` (string)
    https://developer.flute.com/

  - `errors` (object)

## Response 422:

  - `422` (unknown)
    Unprocessable Content

## Response 422 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: Unauthorized
    Example: Unauthorized

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Response | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.
Example: <Service>
    Example: <Service>

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: FluentValidation.ValidationException
    Example: FluentValidation.ValidationException

  - `correlationId` (string)
    Indicates the correlation identifier.

This is a unique identifier, a trace identifier, Flute attaches to a request/response pair so a single transaction can be traced end-to-end across systems and logs. 

Its intent is to support troubleshooting.
We recommend including this value when contacting support.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
This is a field on Flute's standard error response object, alongside values such as `correlationId`, `errorCode`, or `statusCode`.
It's the identifier of the specific resource the failed request was about.
Error messages may specify "Entity with ID b31fbe9f-eebb-45ce-9cae-92265389f47f does not exist or has been deleted."
When a 404 (or similar entity-specific error, like a conflict) comes back,
check `entityId` to get the exact identifier of the record that couldn't be found or matched.
This is useful for confirming which resource reference was wrong, especially if the request touched multiple identifiers at once.
Example: null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

  - `title` (string)
    Indicates a short, human-readable summary of the error category.

Example: Resource not found
    Example: Resource not found

  - `cause` (string)
    Indicates the reason the error occurred.

Example: The requested resource does not exist or has been deleted.
    Example: The requested resource does not exist or has been deleted.

  - `resolution` (string)
    Indicates the recommended action for resolving the error.

Example: Verify the resource ID is correct or retrieve a list of available resources.
    Example: Verify the resource ID is correct or retrieve a list of available resources.

  - `documentationUrl` (string)
    https://developer.flute.com/

## Response 429:

  - `429` (unknown)
    Too Many Requests

## Response 429 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: Unauthorized
    Example: Unauthorized

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Response | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.
Example: <Service>
    Example: <Service>

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: FluentValidation.ValidationException
    Example: FluentValidation.ValidationException

  - `correlationId` (string)
    Indicates the correlation identifier.

This is a unique identifier, a trace identifier, Flute attaches to a request/response pair so a single transaction can be traced end-to-end across systems and logs. 

Its intent is to support troubleshooting.
We recommend including this value when contacting support.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
This is a field on Flute's standard error response object, alongside values such as `correlationId`, `errorCode`, or `statusCode`.
It's the identifier of the specific resource the failed request was about.
Error messages may specify "Entity with ID b31fbe9f-eebb-45ce-9cae-92265389f47f does not exist or has been deleted."
When a 404 (or similar entity-specific error, like a conflict) comes back,
check `entityId` to get the exact identifier of the record that couldn't be found or matched.
This is useful for confirming which resource reference was wrong, especially if the request touched multiple identifiers at once.
Example: null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

  - `title` (string)
    Indicates a short, human-readable summary of the error category.

Example: Resource not found
    Example: Resource not found

  - `cause` (string)
    Indicates the reason the error occurred.

Example: The requested resource does not exist or has been deleted.
    Example: The requested resource does not exist or has been deleted.

  - `resolution` (string)
    Indicates the recommended action for resolving the error.

Example: Verify the resource ID is correct or retrieve a list of available resources.
    Example: Verify the resource ID is correct or retrieve a list of available resources.

  - `documentationUrl` (string)
    https://developer.flute.com/

## Response 500:

  - `500` (unknown)
    Internal Server Error

## Response 500 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: Unauthorized
    Example: Unauthorized

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Response | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.
Example: <Service>
    Example: <Service>

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: FluentValidation.ValidationException
    Example: FluentValidation.ValidationException

  - `correlationId` (string)
    Indicates the correlation identifier.

This is a unique identifier, a trace identifier, Flute attaches to a request/response pair so a single transaction can be traced end-to-end across systems and logs. 

Its intent is to support troubleshooting.
We recommend including this value when contacting support.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
This is a field on Flute's standard error response object, alongside values such as `correlationId`, `errorCode`, or `statusCode`.
It's the identifier of the specific resource the failed request was about.
Error messages may specify "Entity with ID b31fbe9f-eebb-45ce-9cae-92265389f47f does not exist or has been deleted."
When a 404 (or similar entity-specific error, like a conflict) comes back,
check `entityId` to get the exact identifier of the record that couldn't be found or matched.
This is useful for confirming which resource reference was wrong, especially if the request touched multiple identifiers at once.
Example: null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

  - `title` (string)
    Indicates a short, human-readable summary of the error category.

Example: Resource not found
    Example: Resource not found

  - `cause` (string)
    Indicates the reason the error occurred.

Example: The requested resource does not exist or has been deleted.
    Example: The requested resource does not exist or has been deleted.

  - `resolution` (string)
    Indicates the recommended action for resolving the error.

Example: Verify the resource ID is correct or retrieve a list of available resources.
    Example: Verify the resource ID is correct or retrieve a list of available resources.

  - `documentationUrl` (string)
    https://developer.flute.com/

## Response 200 examples:

  - `Flute Checkout session created` (unknown)
    A Flute Checkout session ready for the customer. Redirect them to checkoutUrl. paymentSessionResult stays null until the session is Completed.

