Improved
Checkout SDK Updates — Web v1.3.1, Android v1.2.0, iOS v1.5.0
July 27th, 2026
Web SDK — v1.3.1 (2026-07-23)
Added
- Stripe Radar:
stripeRadar(publishableKey, options?)(Hosted Fields and Express Checkout) wrapsStripe.createRadarSession()and resolves with the Radar session id (ornullon failure) to forward with a Stripe Payment Intents charge; legacySpreedly.stripeRadar(...)parity (callback → Promise).
Changed
- Breaking (offsite): the
offsitePaymentErrorpayload shape changed from{ message, error }(1.2.0) to{ message, status, errors }.
Fixed
- Hosted Fields cardholder name typing:
HostedFieldsFormData.first_nameandlast_nameare now correctly optional — provide eitherfull_nameor bothfirst_name+last_name; the SDK forwards what is supplied and Spreedly Core enforces the requirement. (Express Checkout's prebuilt form is unchanged.) - Hosted Fields integration guide now documents
sdk.validate()and the structured field-levelvalidationevent.
Android SDK — v1.2.0 (2026-07-22)
Added
- Additive parameters
CheckoutButton.isFormValid,AppTextField.maxLength, and aNameValidatormin length; prior signatures are retained via hidden compatibility overloads /@JvmOverloads.
Breaking Changes
PaymentProcessingResult(payments-core) addsRejected(ALREADY_PROCESSING)andFailed(UNEXPECTED_ERROR).processPayment()returns this sealed type, so exhaustivewhenexpressions must handle the new branches (or add anelse). Card flows never return the new values, but the type is shared.
Changed
- Express checkout guide clarifies that card sheet
borderRadiusandfieldShapeare independent
iOS SDK — v1.5.0 (2026-07-20)
Added
- Stripe Radar device data: optional
SpreedlyStripeRadarmodule collects a Radar session ID viacreateRadarSession(Swift) orcreateRadarSessionWithConfig:completion:(ObjC); passradar_session_idundergateway_specific_fields.stripe_payment_intentson the next purchase. Headless — usesStripePaymentsonly, not Payment Sheet. SPLTextField.requiredMessage: optional Swift parameter and ObjC property to override the default required-field validation message.FormFieldType.bankName: optional bank name onSPLTextField,BankAccountFormDropIn, and headlesscreateBankAccountwhen enabled viaBankAccountFieldConfig.
Fixed
- Braintree unparseable
created_at: checkout now blocks launch whencreated_atcannot be parsed (same outcome as an expired token); missing or blankcreated_atstill allows launch. - Headless name fields on tokenize:
createCreditCardresolves holder names fromAdditionalFieldwhen secure-container values are absent (Android parity).
Security
- Built-in screen prevention on drop-ins:
CardFormDropIn,BankAccountFormDropIn, andSpreedlyCVVRecachingViewapply screenshot/recording protection automatically — no merchant wrap required on those components. Custom forms still need merchant.screenPrevention().

