Repository navigation
Release 4.9.0 - Payment setup actions, network token payouts, unreferenced refunds - #263
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: Looks good to meThis PR still needs a human approval — wall-e cannot auto-approve it. For what it's worth, I read the diff and found nothing I'd block on. This diff contains only a version bump from 4.8.1 to 4.9.0 in the properties file; the actual feature changes described in the PR body are not visible in this diff. What I checked
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 |
8b84823 to
14561d8
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 |
14561d8 to
aa26752
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 brings Payment Setups in line with the API specification, adds card payouts to card, token and network token destinations, and adds unreferenced refunds. It also documents the payment retry types and deprecates the members the API does not accept, each with its replacement where one exists. Nothing is removed: every deprecated member keeps working until the next major version.
Added
Payment Setups (#258)
PaymentSetupPaymentTypeenum with the lowercase values the Payment Setups API accepts:regular,recurring,moto,installment,pay_later,unscheduled.Klarna.action(KlarnaAction, withtype(KlarnaActionType.SDK),client_tokenandsession_id) andKlarna.iban. Both are response only.Stcpay.action(StcpayAction, withtype(StcpayActionType.OTP)). Response only.Tamara.initialization(PaymentMethodInitialization, defaultdisabled) andTamara.risk_assessment(TamaraRiskAssessment, withpremium_customer,risk_score,order_count_last24handlinked_device_count).Payouts and unreferenced refunds (#261)
PaymentsClient.request_unreferenced_refund(unreferenced_refund_request, idempotency_key=None)andUnreferencedRefundRequest, sent toPOST /payments. The constructor setspayment_typetoUnreferencedRefund.PaymentRequestCardDestination(typecard),PaymentRequestNetworkTokenDestination(typenetwork_token) andPaymentRequestTokenDestination(typetoken).PaymentRequestIdDestination(typeid) already existed.PaymentDestinationType.NETWORK_TOKEN.NetworkTokenTypeenum:vts,mdes,applepay,googlepay.CardPayoutProcessing(affiliate_id,affiliate_url,processing_speed,purchase_country), used byPayoutRequest.processingandUnreferencedRefundRequest.processing.CardPayoutItem(type,sub_type), the item type ofPayoutRequest.items.Changed
Payment Setups (#258)
Tamara()now sends"initialization": "disabled"when you do not set it; before, it sent noinitializationat all. This matches the API's default on create and the other payment methods that already carried this default (Klarna, stc pay, Tabby, Bizum, Blik). SetinitializationtoPaymentMethodInitialization.ENABLEDto enable Tamara.PaymentSetupsRequest.payment_typeis typedPaymentSetupPaymentTypeinstead ofPaymentType. Values fromPaymentTypeare capitalized (for examplePayLater), which the Payment Setups API rejects; usePaymentSetupPaymentTypeinstead.PaymentSetupTerminal.local_date_timeis typeddatetimeinstead ofstr. Pass a timezone awaredatetimeso the offset is sent; microseconds are not sent. A string still serializes as before.MerchantAccount.last_payment_amountis typedfloatinstead ofint, as in the specification.initializationasenabledagain to keep a method enabled.Ideal.description,Knet.languageandBancontact.account_holder_nameare optional in the specification, but the API keeps the method invalid until they are sent.Payouts and unreferenced refunds (#261)
PayoutRequest.processingis typedCardPayoutProcessinginstead ofProcessingSettings, andPayoutRequest.itemsholdsCardPayoutIteminstead ofProduct.PaymentRequestNetworkTokenSource.token_typeis typedNetworkTokenTypeinstead ofstr. Plain strings still serialize as before.Payments (#260)
checkout_sdk.payments.sessions.sessionsnow usesCustomerRetryfromcheckout_sdk.common.common. The import from the sessions module still works.PaymentRetryRequest,DowntimeRetryRequest,DunningRetryRequestandCustomerRetryare documented with their ranges and defaults.Fixed
CardPayoutItem. UnlikeProduct, it does not send"type": nulland"sub_type": nullwhen they are not set ( feature/INT-1714 - new payout destination types in payments (network token) #261).Deprecated
All of these are removed in the next major version.
Payment Setups (#258)
PaymentTypeimported fromcheckout_sdk.payments.setups.setups: usePaymentSetupPaymentType.Klarna.payment_method_options: useKlarna.action.Stcpay.payment_method_options: useStcpay.action.Tabby.payment_method_options: no replacement.Bizum.payment_method_options: no replacement.PaymentMethodOptionsandPaymentMethodOption: useactionon Klarna and stc pay; no replacement for the other methods.PaymentMethodAction.client_token: for Klarna useKlarna.action.client_token; no replacement for PayPal and instrument.PaymentMethodAction.session_id: for Klarna useKlarna.action.session_id; no replacement for PayPal and instrument.Bizum.initialization: no replacement.Blik.initialization: no replacement.PaymentSetupInstrument.phone: no replacement (the API ignores it).PaymentSetupInstrument.account_holder: no replacement (the API ignores it).PaymentSetupInstrument.allow_update: no replacement (the API ignores it).Payouts and unreferenced refunds (#261)
AccountHolder.full_name: no replacement.AccountHolder.gender: no replacement.InstructionScheme.SWIFT: no replacement (the request accepts onlylocalandinstant).PaymentInstruction.charge_bearer: no replacement.PaymentInstruction.repair: no replacement.PaymentInstruction.quote_id: no replacement.PaymentBankAccountDestination.bank: no replacement.Payments (#260)
PaymentRetryRequest.max_attempts: usePaymentRetryRequest.dunning.max_attempts.PaymentRetryRequest.end_after_days: usePaymentRetryRequest.dunning.end_after_days.Breaking changes required by the API⚠️
None.
Breaking changes (SDK alignment)⚠️
None.