Repository navigation
feature/INT-1714 - new payout destination types in payments (network token) - #229
Conversation
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 7 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🟠 Advisory review: Concerns worth a lookThis PR needs a human approval. Before you give it, these are the things I'd want resolved. The PR adds NetworkTokenDestination, CardPayoutProcessing, CardPayoutItem, InstructionRemittance, UnreferencedRefundRequest, ResidentialStatusType, NETWORK_TOKEN to DestinationType, and PAY_LATER/MOTO rename to PaymentType, plus extensive doc comments. The structural changes look correct, but there is one breaking value change and one missing require that need resolution. Concerns
This is not an approval. wall-e cannot auto-approve this PR — it is an opinion to help whoever does. Advisory review · us.anthropic.claude-sonnet-4-6 · wall-e 2026.06.19-02 |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 16 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 16 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 23 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 26 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 26 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 37 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 39 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 39 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
|
This release adds card payouts to network tokens, unreferenced refunds and the missing card payout and bank payout request fields, the Payment Setup payment type, and the Dunning and Downtime payment retry types. It also makes the Issuing revoke and suspend request optional, aligns the PaymentType::MOTO value with the API, and deprecates the members the API no longer accepts on requests. Every deprecated member keeps working and will be removed in the next major version. **Added** Issuing (#225) * `IssuingClient#revoke_card` and `IssuingClient#suspend_card` can now be called without a request; the request argument is optional and an empty JSON object is sent when it is omitted. Payment Setups (#226) * `PaymentSetupPaymentType` with the lowercase values of the Payment Setups API: `REGULAR`, `RECURRING`, `MOTO`, `INSTALLMENT`, `PAY_LATER`, `UNSCHEDULED`. Use it for the `:payment_type` key of a Payment Setup create or update request. * `AccountFundingTransactionSender#reference`. Payouts and unreferenced refunds (#229) * `PaymentsClient#request_unreferenced_refund` and `UnreferencedRefundRequest`, sent to POST /payments with `payment_type` set to `UnreferencedRefund`. * `NetworkTokenDestination` and `DestinationType::NETWORK_TOKEN`, for card payouts and unreferenced refunds to a network token. * `PayoutRequest#segment`, `#items`, `#previous_payment_id` and `#processing`. * `CardPayoutProcessing` (`affiliate_id`, `affiliate_url`, `processing_speed`, `purchase_country`) and `CardPayoutItem` (`type`, `sub_type`). * `PaymentInstruction#remittance` and `InstructionRemittance` (`reference`), for bank payouts. * `CheckoutSdk::Common::ResidentialStatusType` (`RESIDENT`, `NON_RESIDENT`) for `AccountHolder#residential_status`. The field is optional and only used by bank payouts. Payments (#229) * `PaymentType::PAY_LATER` (`PayLater`). Payment retries, hosted payments, payment links and payment sessions (#228) * `PaymentRetryRequest#dunning` and `#downtime`, with the new `DunningRetryRequest` (`enabled`, `max_attempts`, `end_after_days`) and `DowntimeRetryRequest` (`enabled`). * `CheckoutSdk::Common::CustomerRetry` (`max_attempts`). * `PaymentSessionsRequest#customer_retry` and `#instruction`. * `PaymentLink#instruction` and `#payment_method_configuration`. **Changed** * `CustomerRetry` moves from `CheckoutSdk::Accounts` to `CheckoutSdk::Common`; `CheckoutSdk::Accounts::CustomerRetry` remains as an alias of the same class (#228). * `PaymentSessionsRequest#payment_type` is documented as a `PaymentType` string; it was documented as a boolean (#228). * `PayoutSource#amount` is documented as an Integer; it was documented as a String (#229). * Request fields of payouts, unreferenced refunds, Payment Setups, hosted payments, payment links and payment sessions now document whether they are required or optional per request, with the limits and enum values of the API reference (#226, #228, #229). **Fixed** * `PaymentSegment` is now loaded by the gem, so `PayoutRequest#segment`, `UnreferencedRefundRequest#segment` and `PaymentRequest#segment` can take a `PaymentSegment` object (#229). * `PaymentRetryRequest` is now loaded by the gem; it could not be referenced before (#228). **Deprecated** All deprecated members keep working and will be removed in the next major version. * `CheckoutSdk::Issuing::CardUpdateHeaders` and the `headers` argument of `IssuingClient#update_card`: the API no longer documents these headers; call `update_card(card_id, update_card_request)`. Headers that are set are still sent unchanged (#225). * `AccountFundingTransactionSender#first_name`, `#last_name`, `#country_of_birth`, `#nationality` and `#address`: not part of the Payment Setups sender; no replacement (#226). * `AccountFundingTransactionRecipient#account_type`: not part of the Payment Setups recipient; no replacement (#226). * `AccountHolder#full_name`: not in any account holder request; no replacement (#229). * `AccountHolder#gender`: not in any account holder request; no replacement (#229). * `BankAccountDestination#bank`: not in the bank payout destination; no replacement (#229). * `PaymentInstruction#charge_bearer`, `#repair` and `#quote_id`: not in the payout instruction request, still returned when retrieving a payout; no replacement (#229). * `PaymentInstruction#skip_expiry` and `#mvv`: not in the API; no replacement (#229). * `InstructionScheme::SWIFT`: the bank payout request only accepts `local` and `instant`; no replacement (#229). * `PayoutSource#amount`: not in any payout or unreferenced refund source request; no replacement (#229). * `PaymentSessionsRequest#retry`: not part of the payment sessions request and ignored by the API; no replacement (#228). * `HostedPaymentsSession#payment_ip`, `PaymentLink#payment_ip` and `PaymentSessionsRequest#ip_address`: deprecated by the API; no replacement (#228). * `CheckoutSdk::Accounts::CustomerRetry`: use `CheckoutSdk::Common::CustomerRetry` (#228). **Breaking changes required by the API**⚠️ * `AccountFundingTransactionIdentificationType::TAX_ID` and `::OTHER` are removed, because the API rejects them with a 422. Use `DRIVING_LICENSE`, `PASSPORT` or `NATIONAL_ID` (#226). **Breaking changes (SDK alignment)**⚠️ * `PaymentType::MOTO` sends `MOTO` instead of `Moto`. Code that uses the constant needs no change; code that compares responses or stored values with the literal `Moto` should compare with `MOTO` (#229). * `PaymentRetryRequest#max_attempts` and `#end_after_day` are removed. The class could not be loaded before this release, so no working code is affected. Use `dunning.max_attempts` and `dunning.end_after_days` (#228).



This pull request enhances the documentation and expands the data models related to payout destinations, account holders, and card payout processing in the SDK. It introduces new classes, adds detailed attribute documentation, and improves the clarity and completeness of API model definitions, especially for payout and refund flows.
Model and Documentation Enhancements
AccountHolder,AccountHolderIdentification, and various payout destination classes, specifying required/optional fields, expected formats, and deprecation notes. [1] [2] [3] [4] [5] [6] [7] [8]NETWORK_TOKENtoDestinationType, and documented the use of these types across different payout and refund destinations.New Classes for Payout Processing
CardPayoutProcessingto encapsulate affiliate and processing speed details for card payouts.CardPayoutItemto represent individual items in a card payout, supporting item-level metadata.InstructionRemittancefor remittance details in bank payout instructions.NetworkTokenDestinationto support network token-based payout destinations.Enum and Type Additions
ResidentialStatusTypeenum for account holders' residential status, and ensured it is required in relevant contexts. [1] [2]These changes collectively improve the SDK’s support for complex payout and refund scenarios, increase type safety, and provide clearer guidance to developers integrating with the API.
Breaking changes⚠️