Repository navigation
Release 2.8.0 - Payment setup type, issuing updates, network token payouts - #231
Conversation
🟡 Risk Classification: MINORApproval route: AI Review + Human Approval Classification reasons
Operational gates
Files analysed: 1 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: Sound, but needs your judgementThis PR needs a human approval. The code itself reads as correct; whether it should land depends on context I don't have. This diff only bumps the version from 2.7.1 to 2.8.0; the actual feature changes described in the PR body are not visible in this diff, so correctness of the release cannot be verified from what is shown. For you to decide
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 |
1377b78 to
f4f0759
Compare
🟡 Risk Classification: MINORApproval route: AI Review + Human Approval Classification reasons
Operational gates
Files analysed: 1 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 |
f4f0759 to
65616af
Compare
🟡 Risk Classification: MINORApproval route: AI Review + Human Approval Classification reasons
Operational gates
Files analysed: 1 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_cardandIssuingClient#suspend_cardcan 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)
PaymentSetupPaymentTypewith the lowercase values of the Payment Setups API:REGULAR,RECURRING,MOTO,INSTALLMENT,PAY_LATER,UNSCHEDULED. Use it for the:payment_typekey of a Payment Setup create or update request.AccountFundingTransactionSender#reference.Payouts and unreferenced refunds (#229)
PaymentsClient#request_unreferenced_refundandUnreferencedRefundRequest, sent to POST /payments withpayment_typeset toUnreferencedRefund.NetworkTokenDestinationandDestinationType::NETWORK_TOKEN, for card payouts and unreferenced refunds to a network token.PayoutRequest#segment,#items,#previous_payment_idand#processing.CardPayoutProcessing(affiliate_id,affiliate_url,processing_speed,purchase_country) andCardPayoutItem(type,sub_type).PaymentInstruction#remittanceandInstructionRemittance(reference), for bank payouts.CheckoutSdk::Common::ResidentialStatusType(RESIDENT,NON_RESIDENT) forAccountHolder#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#dunningand#downtime, with the newDunningRetryRequest(enabled,max_attempts,end_after_days) andDowntimeRetryRequest(enabled).CheckoutSdk::Common::CustomerRetry(max_attempts).PaymentSessionsRequest#customer_retryand#instruction.PaymentLink#instructionand#payment_method_configuration.Changed
CustomerRetrymoves fromCheckoutSdk::AccountstoCheckoutSdk::Common;CheckoutSdk::Accounts::CustomerRetryremains as an alias of the same class (fix(payments): load retry types and add customer_retry to sessions #228).PaymentSessionsRequest#payment_typeis documented as aPaymentTypestring; it was documented as a boolean (fix(payments): load retry types and add customer_retry to sessions #228).PayoutSource#amountis documented as an Integer; it was documented as a String ( feature/INT-1714 - new payout destination types in payments (network token) #229).Fixed
PaymentSegmentis now loaded by the gem, soPayoutRequest#segment,UnreferencedRefundRequest#segmentandPaymentRequest#segmentcan take aPaymentSegmentobject ( feature/INT-1714 - new payout destination types in payments (network token) #229).PaymentRetryRequestis now loaded by the gem; it could not be referenced before (fix(payments): load retry types and add customer_retry to sessions #228).Deprecated
All deprecated members keep working and will be removed in the next major version.
CheckoutSdk::Issuing::CardUpdateHeadersand theheadersargument ofIssuingClient#update_card: the API no longer documents these headers; callupdate_card(card_id, update_card_request). Headers that are set are still sent unchanged (deprecate(issuing): update-card headers, optional revoke/suspend body #225).AccountFundingTransactionSender#first_name,#last_name,#country_of_birth,#nationalityand#address: not part of the Payment Setups sender; no replacement (feat(setups): add setup payment type, drop rejected identification types #226).AccountFundingTransactionRecipient#account_type: not part of the Payment Setups recipient; no replacement (feat(setups): add setup payment type, drop rejected identification types #226).AccountHolder#full_name: not in any account holder request; no replacement ( feature/INT-1714 - new payout destination types in payments (network token) #229).AccountHolder#gender: not in any account holder request; no replacement ( feature/INT-1714 - new payout destination types in payments (network token) #229).BankAccountDestination#bank: not in the bank payout destination; no replacement ( feature/INT-1714 - new payout destination types in payments (network token) #229).PaymentInstruction#charge_bearer,#repairand#quote_id: not in the payout instruction request, still returned when retrieving a payout; no replacement ( feature/INT-1714 - new payout destination types in payments (network token) #229).PaymentInstruction#skip_expiryand#mvv: not in the API; no replacement ( feature/INT-1714 - new payout destination types in payments (network token) #229).InstructionScheme::SWIFT: the bank payout request only acceptslocalandinstant; no replacement ( feature/INT-1714 - new payout destination types in payments (network token) #229).PayoutSource#amount: not in any payout or unreferenced refund source request; no replacement ( feature/INT-1714 - new payout destination types in payments (network token) #229).PaymentSessionsRequest#retry: not part of the payment sessions request and ignored by the API; no replacement (fix(payments): load retry types and add customer_retry to sessions #228).HostedPaymentsSession#payment_ip,PaymentLink#payment_ipandPaymentSessionsRequest#ip_address: deprecated by the API; no replacement (fix(payments): load retry types and add customer_retry to sessions #228).CheckoutSdk::Accounts::CustomerRetry: useCheckoutSdk::Common::CustomerRetry(fix(payments): load retry types and add customer_retry to sessions #228).Breaking changes required by the API⚠️
AccountFundingTransactionIdentificationType::TAX_IDand::OTHERare removed, because the API rejects them with a 422. UseDRIVING_LICENSE,PASSPORTorNATIONAL_ID(feat(setups): add setup payment type, drop rejected identification types #226).Breaking changes (SDK alignment)⚠️
PaymentType::MOTOsendsMOTOinstead ofMoto. Code that uses the constant needs no change; code that compares responses or stored values with the literalMotoshould compare withMOTO( feature/INT-1714 - new payout destination types in payments (network token) #229).PaymentRetryRequest#max_attemptsand#end_after_dayare removed. The class could not be loaded before this release, so no working code is affected. Usedunning.max_attemptsanddunning.end_after_days(fix(payments): load retry types and add customer_retry to sessions #228).