# Release Notes

> This section lists recent platform changes — please note, not all changes are relevant to all users.

This section lists recent platform changes — please note, not all changes are relevant to all users.

## 19 October 2026
**New Features**

* Stripe — merchants can now turn on Bank Transfer, including SPEI in Mexico, in their Stripe gateway settings; it's no longer limited to beta. SPEI payments can't be refunded through Shuttle

  <details><summary>Why it matters</summary>Customers can pay by sending money from their own banking app, which opens up markets such as Mexico where bank transfer is a preferred way to pay.</details>

* Stripe — bank transfers the customer never pays are now declined and cancelled at Stripe automatically, after the number of days the merchant sets in the Stripe gateway settings (default 14)

  <details><summary>Why it matters</summary>Unpaid orders don't sit open indefinitely or need closing by hand. A transfer that's part paid, or where the money is on its way, isn't declined: it's held for review.</details>

* Adyen — merchants processing through Adyen can now offer Apple Pay and Google Pay at checkout

  <details><summary>Why it matters</summary>Customers get a faster way to pay, especially on mobile, and cards stored on their phone go through without a second bank check.</details>

* Voice — businesses on Telnyx can now take card and ACH payments over the phone, with callers keying in their details, using Telnyx's `<Pay>` and the Shuttle Pay Connector. No Twilio account is needed

  <details><summary>Why it matters</summary>Businesses already on Telnyx can take phone payments without adding a second carrier. Setup, scope and pricing are on the Telnyx Pay page at shuttleglobal.com.</details>

* Voice — your IVR can now check the outcome of a phone payment for 24 hours, by the carrier's transaction ID or your own reference (`alt_key`), and gets back the payment, saved payment method and contract; Twilio replies also return the transaction ID as `PayConnector_nonce`

  <details><summary>Why it matters</summary>Your IVR can confirm what actually happened before it tells the caller, even when the carrier's reply doesn't arrive, so a caller is never told a payment failed when it went through.</details>

* Merchant Setup — merchants can now enter their country next to their legal name on Customise Checkout, which Google Pay needs before it will show

  <details><summary>Why it matters</summary>Setting the country once lets merchants offer Google Pay to every customer, including those who don't give a billing address.</details>

* Merchant Setup — now available in Russian: it opens in the language the merchant's browser is set to, and your platform's branding text can be set for each language

  <details><summary>Why it matters</summary>Russian-speaking merchants can complete setup in their own language, with your platform's wording shown in that language too.</details>

<br />

**Improvements**

* USAePay — the gateway settings now show the webhook URL to add in USAePay for ACH payments, with a link to the setup instructions

  <details><summary>Why it matters</summary>Merchants can finish ACH setup from the gateway settings alone, so bank payments update promptly when they settle or are returned.</details>

* USAePay — a new ACH Type (MOTO) setting chooses the authorisation type sent with bank payments that staff take for a customer who isn't present: TEL (telephone-initiated), PPD (prearranged) or the USAePay account default

  <details><summary>Why it matters</summary>Bank payments taken by staff, for example over the phone, are submitted the way the customer actually agreed to them, as ACH rules require.</details>

* Worldpay — a partial refund on a payment Worldpay hasn't settled yet is now refused with a message saying why; issue a full refund instead, or try again once the payment has settled

  <details><summary>Why it matters</summary>Staff know straight away why a refund can't go through yet and what to do instead.</details>

* Cybersource and NAB — payments that pass 3D Secure now carry the result through to the card issuer, so they qualify for liability shift, including Mastercard Identity Check payments on NAB

  <details><summary>Why it matters</summary>When a cardholder authenticates with their bank, liability for fraud chargebacks moves to the card issuer, protecting the merchant's revenue.</details>

* Global Payments — when Global Payments blocks the connection by IP address, gateway setup now says so and points to the addresses to allowlist, instead of reporting invalid credentials; it also says whether the merchant ID or the account is wrong

  <details><summary>Why it matters</summary>Merchants can see the real cause of a connection problem and fix it themselves, instead of re-entering credentials that were never the issue.</details>

* Authorize.Net — when an eCheck payment is refused because that eCheck type isn't enabled on the merchant's Authorize.Net account, the error now says so, rather than giving a message about refunds

  <details><summary>Why it matters</summary>Staff can see straight away that the fix is a setting on the Authorize.Net account, not a problem with the customer's bank details.</details>

* Google Pay — customers are only offered the Google Pay cards their merchant's payment provider can process: cards on their phone where the provider accepts network tokens, and cards saved to their Google account where it also runs 3D Secure

  <details><summary>Why it matters</summary>Customers don't choose a card in Google Pay only to have the payment declined afterwards.</details>

* Checkout — when an ad blocker or browser privacy setting stops the Braintree, PayPal or Square card form loading, the customer is now told to allow the site and reload, or try another browser

  <details><summary>Why it matters</summary>Customers who would otherwise see a card form that won't load can sort it out and complete the payment, rather than giving up.</details>

* Checkout — the receipt for a bank transfer or Multibanco payment the customer hasn't paid yet now reads Payment In Progress (action required)

  <details><summary>Why it matters</summary>Customers understand the payment isn't complete until they send the money, which means fewer unpaid orders and fewer "did my payment go through?" queries.</details>

* Checkout — on phones, the bank's 3D Secure check in the embedded checkout now opens full screen, with a Cancel option that takes the customer back to the checkout

  <details><summary>Why it matters</summary>Customers on phones can complete their bank's check comfortably, or back out and choose another way to pay.</details>

* Checkout — when a card is declined, the customer now sees a clear message in their own language instead of the processor's raw response, and the checkout monitor reports each decline as it happens

  <details><summary>Why it matters</summary>Customers understand what went wrong and are more likely to try again or use another card, and platforms watching the checkout can respond to declines in real time.</details>

* Transactions — new `sub_status` and `sub_status_reason` fields on transactions and payments show when a pending payment is waiting on the customer, for example `CUSTOMER_ACTION_REQUIRED` while a bank transfer or Multibanco voucher is unpaid

  <details><summary>Why it matters</summary>Platforms can tell a payment the bank is still processing from one waiting on the customer, so they can prompt the right customers to pay.</details>

* Automatic retries — a payment that leaves part of the balance unpaid no longer resets `retry_count` or `retry_complete` on a contract; they reset only once nothing is left due

  <details><summary>Why it matters</summary>When a customer pays only part of what they owe, automatic retries don't start over against them: retries that had run out stay stopped, and the next scheduled payment collects everything still owed.</details>

* Contracts — contracts returned by the API now include their `type`

  <details><summary>Why it matters</summary>Integrations can tell what kind of contract they're handling, such as a one-off payment or a payment plan, straight from the response instead of working it out from other fields.</details>

* Merchant View — Edit Schedule now stops staff changing or removing charges that are paid, cancelled, failed or still processing, keeps removed instalments out of the schedule and its total, won't save a schedule that totals zero, and shows why a save was refused

  <details><summary>Why it matters</summary>Staff can amend a payment plan knowing that what they see is what will be collected, and know exactly what to correct if a change isn't accepted.</details>

* Merchant View — payment plans with a single scheduled charge now offer Edit Schedule and show their audit history, a contract replaced by an amendment no longer offers Suspend, Resume, Terminate or Edit, and Schedule now on a charge makes it due straight away

  <details><summary>Why it matters</summary>Staff always act on the current version of a contract, and every payment plan keeps its full editing and history tools however many charges it has.</details>

* Merchant View — a contract's Arrears now shows the amount overdue today rather than the whole remaining balance, its statement total leaves out cancelled instalments, and declined refunds are labelled Refund attempt

  <details><summary>Why it matters</summary>Staff can quote customers the right amount owed today, and the statement matches what the customer was actually invoiced.</details>

* Merchant View — the audit history now has a copy button for the record's ID, and copying a status update entry includes its full details

  <details><summary>Why it matters</summary>Staff can paste an exact record or event into a note or support request in one step.</details>

* Merchant View — when Suspend, Resume or Terminate can't be applied to a contract, staff now see the reason, and Resume explains that any overdue amount is collected with the next charge

  <details><summary>Why it matters</summary>Staff know why an action didn't apply, and can tell the customer upfront what they'll be charged when their plan restarts.</details>

* Merchant View — a saved payment method held by an archived or inactive processor now shows as UNAVAILABLE, because it can't be charged, and the processor shows a badge saying it's retired or inactive

  <details><summary>Why it matters</summary>Staff can see at a glance which customers need to give a new payment method before their next payment is due.</details>

* Merchant View — failing, failed and expired payment methods can now be archived, not just active ones

  <details><summary>Why it matters</summary>Staff can tidy away payment methods that won't be charged again, keeping the customer's record clear.</details>

* Merchant View — options you set in the Developer Portal or in a deep link's `context.features` now always take effect, and staff can amend a contract in place unless you turn that option off

  <details><summary>Why it matters</summary>Merchant View behaves as you configured it whichever spelling your integration uses, and staff keep the choice to update a contract in place unless you deliberately take it away.</details>

* Merchant View — staff who open Merchant View from a deep link with the Support role can now service customers, including refunds and taking payments; the Support (read-only) role is view only

  <details><summary>Why it matters</summary>Platforms can give support staff what they need to resolve a customer's issue from a deep link, and keep a view-only role for staff who shouldn't move money.</details>

* Merchant View — users who can view but not edit branding can now open Localisation to read customer-facing wording; editing, importing and reverting it needs edit permission

  <details><summary>Why it matters</summary>Team members can check customer-facing wording without being able to change it.</details>

* Merchant Setup — archived and inactive processors now appear under Show archived, with the reason they were retired, and can be restored from there

  <details><summary>Why it matters</summary>Merchants can see which processors were retired and why, and bring one back without setting it up again.</details>

* Developer Portal — the Support and Support (read-only) teams set up for each division can now view contracts, transactions, gateways and branding, and Support can also service contracts and transactions

  <details><summary>Why it matters</summary>New divisions get support teams that can help customers from day one, without an admin granting permissions by hand.</details>

* Developer Portal — accepting a team invite now signs you straight in, and someone invited before they've been given access sees a holding page instead of an error

  <details><summary>Why it matters</summary>New team members get into the portal in one step, and admins are only offered roles that make sense for the division.</details>

* Voice — platforms can now connect the Pay Connector with their application key and name the merchant in an `instance_key` parameter, so one connector serves all their merchants

  <details><summary>Why it matters</summary>Platforms can set up and maintain a single Pay Connector for all their merchants instead of one per merchant.</details>

* Voice demo app — now works with Telnyx as well as Twilio, and gives callers more time to key in card details (30 seconds and 3 attempts by default)

  <details><summary>Why it matters</summary>Teams on Telnyx can try phone payments end to end before building their own IVR.</details>

<br />

**Bug Fixes**

Gateways:

* Adyen — fixed captures and refunds staying pending in Shuttle when Adyen was connected with an API key scoped to a single merchant account. Those keys now work, and the connection check warns if Shuttle can't receive Adyen's updates

  <details><summary>Why it matters</summary>Captures and refunds show as completed in Shuttle without anyone checking Adyen.</details>

* Apple Pay / Google Pay — fixed a wallet not showing at checkout when only one of the merchant's payment providers supports it. Payment method rules, such as amount limits, now also apply to Apple Pay and Google Pay

  <details><summary>Why it matters</summary>Customers see every wallet the merchant has set up. If a merchant's rule excludes a payment method, its Apple Pay and Google Pay versions are now hidden too.</details>

* Google Pay — fixed payments failing when Google Pay sent a single-digit expiry month (such as `3` instead of `03`), which some payment providers reject. Click to Pay had the same fix

  <details><summary>Why it matters</summary>Customers whose cards expire between January and September can pay with Google Pay again on those providers.</details>

* Authorize.Net — fixed payments held for fraud review staying pending after they were approved or declined in Authorize.Net. Holds that expire or are voided now show as declined, with the reason

  <details><summary>Why it matters</summary>Held orders move to paid or declined on their own, without staff checking Authorize.Net.</details>

* Checkout.com — fixed authorisations (to capture later) staying abandoned when the customer passed 3D Secure but didn't return from their bank's page

  <details><summary>Why it matters</summary>Those authorisations are ready to capture, so the order isn't lost.</details>

* Cybersource — fixed payments that fail the address or security code check, or are referred, failing without a reason or staying unresolved. They now show as declined, with Cybersource's reason

  <details><summary>Why it matters</summary>Staff, customers and callers see why a card was refused and can correct it.</details>

* PayU — fixed payments that failed 3D Secure not showing as declined. They now show as declined with PayU's reason, and the PayU order is cancelled

  <details><summary>Why it matters</summary>Merchants can trust the payment status before they fulfil an order.</details>

* QuickBooks Payments — fixed payments on some saved bank accounts being declined with a misleading "phone is invalid" message. The decline now asks the customer to re-enter their bank details, which replaces the saved account

  <details><summary>Why it matters</summary>Customers can sort it out themselves, and staff aren't sent chasing a phone number.</details>

* USAePay — fixed ACH payments showing as declined while the bank was still processing them. They now stay pending until they settle or are returned

  <details><summary>Why it matters</summary>Staff don't chase customers for payments that are still on their way.</details>

General:

* Checkout — fixed checkouts for a particular `legal_entity` offering payment methods set up only for the merchant's other legal entities

  <details><summary>Why it matters</summary>Each payment goes through the right entity's payment providers. If a payment method no longer appears on a checkout, route it for that checkout's legal entity.</details>

* Checkout — fixed payments being rejected when the integration sent an amount with rounding noise, such as `393.9999999999998` for 394.00

  <details><summary>Why it matters</summary>Customers aren't turned away over a difference smaller than a cent.</details>

* Payments — fixed capture and void by `alt_key` failing with `Duplicate alt_key` when an earlier attempt with the same `alt_key` had been declined or abandoned. They now act on the latest open authorisation

  <details><summary>Why it matters</summary>You can capture or void by your own reference after a customer retries a payment.</details>

* Payment Methods — fixed `sub_status` and `sub_status_reason` being ignored when updating a payment method. Setting a failed method back to `ACTIVE` now raises `PAYMENT_METHOD.ACTIVE`

  <details><summary>Why it matters</summary>Your systems get the right event when a payment method comes back into use.</details>

* Developer Portal — fixed CSV import and export, search and switching languages on the Localisation screen. A malformed CSV is now refused instead of partly imported

  <details><summary>Why it matters</summary>Teams can manage translated wording in bulk, knowing an import applies in full or not at all.</details>

<br />

## 31 August 2026
**New Features**

* USAePay — merchants can now take ACH bank payments in USD, and refund them, by turning on the new Enable ACH / Bank Transfer setting

  <details><summary>Why it matters</summary>Merchants on USAePay can take bank payments alongside cards through the same gateway, without adding another processor.</details>

* Transactions — new `target_date` shows the date a bank debit such as SEPA, BACS or ACH is due to leave the customer's account when it's submitted ahead of that date; Merchant View shows it alongside the created and resolved dates

  <details><summary>Why it matters</summary>You can see when money is due to leave the customer's account, not just when the payment was submitted, which makes reconciliation and customer queries easier.</details>

* Merchant View — a new Undo Refund action reverses a refund that was recorded as paid back outside Shuttle; no money moves

  <details><summary>Why it matters</summary>If a refund made outside Shuttle is recorded by mistake, staff can correct it themselves, and the payment can be refunded again later.</details>

<br />

**Improvements**

* Stripe — a new Send Stripe receipt setting, off by default, has Stripe email its own payment receipt to the customer when an email address is known

  <details><summary>Why it matters</summary>Merchants who want customers to get Stripe's receipt can have it sent automatically, with no extra integration work.</details>

* Stripe — when the customer fails their bank's 3D Secure check, they now see a clear message in their own language instead of Stripe's technical one

  <details><summary>Why it matters</summary>Customers understand why the payment didn't go through and can try again or use another card.</details>

* Checkout.com — captures and refunds made in the Checkout.com dashboard now show against the original payment in Shuttle

  <details><summary>Why it matters</summary>Staff can work in either system and Shuttle stays an accurate record for reconciliation and reporting.</details>

* Cybersource — customers can now pay with Google Pay on desktop and on browsers other than Android, using cards saved to their Google account, with a 3D Secure check

  <details><summary>Why it matters</summary>Customers can use Google Pay whatever device or browser they're on.</details>

* Global Payments — a customer who fails their bank's 3D Secure check now returns to the checkout with a decline instead of an error, and payments where the bank recorded a 3D Secure attempt now go on to the card issuer for approval

  <details><summary>Why it matters</summary>Customers who fail the check can simply try another card, and fewer payments are turned away before the card issuer has a chance to approve them.</details>

* Transbank — debit (Redcompra) and prepaid payments can now be refunded after the day they were taken

  <details><summary>Why it matters</summary>Merchants can refund debit and prepaid customers whenever they need to, not only on the day of purchase.</details>

* Trust Payments — a new Enable statement descriptor setting puts the payment description on the cardholder's bank statement (needs a Trust Payments acquiring account)

  <details><summary>Why it matters</summary>Customers recognise the charge on their statement, which helps avoid queries and disputes over unfamiliar payments.</details>

* Trust Payments — each payment's `alt_key`, your own reference, is now sent to Trust Payments, so you can find and match transactions in the Trust Payments portal

  <details><summary>Why it matters</summary>Finance teams can match each payment in the Trust Payments portal to their own reference, which speeds up reconciliation.</details>

* Accounts — a `timezone` set when creating or updating an account is now saved and returned

  <details><summary>Why it matters</summary>You can store each customer's time zone in Shuttle and read it back, keeping it in step with your own records.</details>

* Instances — a new `merchant_country` field, set when updating an instance, tells Google Pay and Click to Pay the merchant's country, so Google Pay works even when the customer gives no billing country

  <details><summary>Why it matters</summary>Merchants whose customers don't give an address can still offer Google Pay.</details>

* Charges — listing the charges on a contract with many charges is now faster

  <details><summary>Why it matters</summary>Integrations and screens that show payment schedules load more quickly, especially for long-running plans.</details>

* Charges — `recurring` is now true for charges on ongoing scheduled contracts, and on one-off contracts `initiated` now shows when the customer paid rather than the charge date

  <details><summary>Why it matters</summary>Reports built on charges classify recurring payments correctly and show when one-off payments were actually made.</details>

* Contracts — `keep_active_until` can now be cleared by sending an empty string when editing or resuming a contract

  <details><summary>Why it matters</summary>You can remove an extension date you no longer need without recreating the contract.</details>

* Contracts — when an ACH payment on a recurring contract is declined after a time pending, the contract now moves to FAILING and is retried on the retry schedule

  <details><summary>Why it matters</summary>Late ACH returns are picked up and retried automatically, so arrears are collected without staff stepping in.</details>

* Checkout — when a customer saves a new payment method on a contract with an amount outstanding, they're now told the amount will be taken straight away and future payments will use the new method

  <details><summary>Why it matters</summary>Customers know exactly what will be charged when they update their details, so there are no surprises on their statement.</details>

* Payment Links — links now accept the `default_save_card` and `hide_save_card_toggle` options, which leave the save-card choice unticked or hide it while keeping payment methods that need a saved mandate, such as GoCardless, on offer (`save_card: false` removes them)

  <details><summary>Why it matters</summary>Merchants can avoid saving cards customers didn't mean to keep on file, while still offering payment methods such as direct debit that need a saved mandate.</details>

<br />

**Bug Fixes**

Gateways:

* Authorize.Net — fixed payments that a Kount fraud check held and then approved being recorded as failed. They now record as paid

  <details><summary>Why it matters</summary>Merchants can see these orders are paid and fulfil them, and their systems receive a paid event.</details>

* Braintree — fixed card payments failing when the customer clicked Pay before the card fields had finished loading

  <details><summary>Why it matters</summary>Customers who click Pay quickly now go straight through.</details>

* Braintree — fixed card payments failing with `Could not initialise payment option` on payment links served from the merchant's own domain

  <details><summary>Why it matters</summary>Merchants can use their own branded domain for payment links and still take Braintree card payments.</details>

* CardConnect — fixed repeat and recurring payments being declined on saved ACH bank accounts, because the account holder's name wasn't kept

  <details><summary>Why it matters</summary>Merchants can collect repeat bank payments from saved accounts without customers re-entering their details.</details>

* Checkout.com — fixed some payments with auto-capture after 3D Secure being recorded incorrectly when the customer's return from their bank and Checkout.com's confirmation arrived at the same time. They now record as captured

  <details><summary>Why it matters</summary>Payment records match what Checkout.com settled, which keeps reconciliation straightforward.</details>

* GoCardless — fixed some payments staying pending after GoCardless had collected them

  <details><summary>Why it matters</summary>Staff can see what has been collected without checking GoCardless.</details>

* GoCardless — fixed Instant Bank Pay failing on checkouts that also take cards through another payment provider, such as Braintree

  <details><summary>Why it matters</summary>Merchants can offer Instant Bank Pay alongside cards from a different provider on the same checkout.</details>

* Google Pay — fixed the Pay button staying greyed out when Google Pay asked for the card's security code on checkouts that also collect name, address, email or phone

  <details><summary>Why it matters</summary>Customers can complete Google Pay payments on those checkouts.</details>

* Square — fixed payments without a description being rejected by Square when order creation is turned on

  <details><summary>Why it matters</summary>Merchants can use Square order creation without adding a description to every payment.</details>

* Stripe — fixed ACH and SEPA refunds, including ones issued in the Stripe dashboard, staying declined in Shuttle after Stripe completed them

  <details><summary>Why it matters</summary>Refunds in Shuttle match Stripe, wherever they were issued.</details>

* Stripe — fixed bank transfer and Multibanco payments being declined when the customer's existing Stripe cash balance already covered them. They now record as paid

  <details><summary>Why it matters</summary>Customers who already hold funds with the merchant see their order confirmed straight away.</details>

* Worldpay — fixed full refunds staying pending when issued before the payment had settled. Worldpay now cancels the payment instead

  <details><summary>Why it matters</summary>Staff can refund a customer in full at any time, without waiting for settlement.</details>

General:

* Automatic retries — fixed contracts that had used all their retries being retried again, and contracts being retried on a payment provider that had been archived. `retry_complete` now stays `true` until a payment succeeds, and each later instalment gets one attempt

  <details><summary>Why it matters</summary>Failed instalments are only retried as the documented rules allow, which keeps within card scheme limits.</details>

* Automatic retries — fixed retries on scheduled-charges contracts not following the retry schedule after a decline. They now happen on the scheduled date, and `next_payment` shows it

  <details><summary>Why it matters</summary>Retries on instalment plans are spaced as documented, giving each attempt a better chance of collecting.</details>

* Charges — fixed saving a charge back unchanged (same `amount` and `due`) moving the contract's `next_payment` back to that charge's due date

  <details><summary>Why it matters</summary>Integrations that read and save a charge don't move the customer's next payment date.</details>

* Contracts — fixed `completed` showing the date a contract was last updated (for example by a refund) instead of the date it finished. It's now set when a contract finishes, including cancelled and failed ones, and empty where that date isn't known

  <details><summary>Why it matters</summary>Reports on when contracts ended are accurate.</details>

* Contracts — fixed a cancelled contract restarting when it was sent only a new `next_charge`. Reactivating it now needs `resume: true` with the `next_charge`

  <details><summary>Why it matters</summary>Billing a customer has cancelled can't restart by accident.</details>

* Contracts — fixed a `keep_active_until` sent with an edit that replaces the contract (such as an amount change) being ignored, with the old date carried over

  <details><summary>Why it matters</summary>An extension date set while amending a contract takes effect.</details>

* Transactions — fixed BACS, SEPA and ACH payments that were still being collected showing a `resolved` time. `resolved` is now set only when a payment succeeds or fails

  <details><summary>Why it matters</summary>`resolved` tells you when a payment has really completed or failed.</details>

* Checkout — fixed an edited routing rule's old version still affecting which payment methods checkout offered

  <details><summary>Why it matters</summary>Checkout offers exactly the payment methods the merchant's current rules allow.</details>

* Checkout — fixed routing rules, such as amount limits, not applying to hosted payment buttons like GoCardless and hosted ACH. They're now also re-checked when the customer changes the amount

  <details><summary>Why it matters</summary>Customers are only offered the payment methods the merchant allows for that payment.</details>

* Payment Links — fixed a link that stopped taking payments, while still showing `ACTIVE`, after a payment attempt was blocked before reaching the payment provider (for example by a routing rule)

  <details><summary>Why it matters</summary>Customers can try again on the same link, so merchants don't need to send a new one.</details>

* Payment Links — fixed the `save_card: false`, `force_add` and `timezone` options being ignored at checkout

  <details><summary>Why it matters</summary>Payment links behave at checkout as they were set up.</details>

* Payment Links — fixed links with the `TOKENISE` action and no amount asking the customer for an amount and refusing 0. They now go straight to saving the payment method

  <details><summary>Why it matters</summary>Merchants can send a link purely to collect payment details for later billing.</details>

* Customised branding — fixed the previous logo still showing on customer-facing pages after a new one was uploaded

  <details><summary>Why it matters</summary>Brand updates show as soon as they're saved.</details>

* Deep links — fixed records opened by your own reference (`alt_key`) showing only their header, without transactions, contracts or saved cards, and links without an `expand` staying on the loading screen in the beta Merchant View

  <details><summary>Why it matters</summary>Staff arriving from your platform see the full customer record.</details>

* Deep links — fixed `menu: banner` not showing the banner menu, and `mode` not applying the same way to the menu and the page

  <details><summary>Why it matters</summary>Merchant View embedded in your platform looks and behaves as configured.</details>

* Deep links — fixed `merchant` and `customer` deep links ignoring `version`, including the application or instance default, so they always opened the standard Merchant View

  <details><summary>Why it matters</summary>Platforms can try the beta Merchant View from any type of deep link.</details>

* Voice demo app — fixed ACH payments from the demo app being rejected by the Pay Connector because the bank account type wasn't sent

  <details><summary>Why it matters</summary>Teams can test bank payments by phone end to end before going live.</details>

<br />

## 7 July 2026
**New Features**

* Contracts — added `keep_active_until`, an optional date that keeps a contract active past its final scheduled payment so mid-term amendments can still be applied

## 17 April 2026
**New Features**

* Xendit — new gateway integration available for merchants in supported regions
* FatZebra — new gateway integration
* AndDone — new integration
* Scheduled Charges — schedule customised multi-instalment payments with configurable amounts and dates per instalment
* Payment Links API — new POST /payment_links endpoint for programmatic creation of links

<br />

**Improvements**

* Cybersource — automatic resolution of pending transactions; AVS mode selector and expanded metadata field mapping
* Stripe — SEPA now supports target date scheduling and pending-until-settled status, keeping transactions in pending until the bank settles (matching the ACH behaviour)
* Authorize.Net — CCD now available as a configurable ACH eCheck type (alongside PPD and WEB)
* Interprose — payment plans now supported via schedule metadata
* Apple Pay / Google Pay — temporary cards now work in sandbox gateway for end-to-end wallet testing
* shuttle.js — 1.4.6 - embedded checkout now propagates allow=payment permission to sub-iframes via wildcard, unblocking nested embed scenarios
* Password reset — session now remains authenticated immediately after reset

<br />

**Bug Fixes**

Gateways:

* Stripe — ACH delayed failures now process correctly; transactions no longer remain locked in SUCCESS
* PayPal — onboarding endpoint restored
* QuickBooks Payments — ValidationFault resolved; delete-card error fixed; ACH now supported on CAD-only accounts; raw card details used in place of cardOnFile where available to improve authorization rates; fixed boltUtilsContext error in processPaymentMade
* GoCardless — gateway message no longer cleared after an automatic retry; fixed IBP payments being routed to Stripe when multiple gateways are configured
* Authorize.Net — ACH nameOnAccount no longer incorrectly populated with the account number
* Authorize.Net — token expiry no longer causes a 20-second outage on the payment processor
* Checkout.com — refunds outside the 1-year window now return a clear, user-friendly error instead of a generic failure
* TrustPayments — fixed null-dereference in capture() when the transaction is not yet indexed
* Sandbox gateway — pending tokenise handling fixed
* Recurring token payments — now correctly respect the gateway ARCHIVE status and are blocked on archived gateways
* update_transaction webhook — now correctly includes gateway_status in the payload
* Generic — fixed token-delete error affecting multiple gateways

Platform & reliability:

* Reporting — format-csv formatter now tolerates ipstack 500s during IP country lookup
* Customised branding logo — Save button no longer disabled on some domain names
* Gift Aid — claim items now include account data when created without an active claim
* Apple Pay — well-known verification now checks both with and without the .txt extension for broader server compatibility

## 4 February 2026
**New Features**

* Apple Pay - Now general availability (See [apple-pay-google-pay](/platforms/embedded-payments/apple-pay-google-pay/))

<br />

**Improvements**

* GoCardless - Enhanced decline event tracking with detailed reason codes for better reconciliation
* GoCardless - Improved refund metadata for clearer transaction history
* GoCardless - Fixed language parameter handling for international customers
* Stripe - Added support for extended card authorization (7 → 30 days)
* Stripe - Improved settlement tracking for auth+capture transactions with currency and fee data
* Authorize.net - Added connect via API Keys (rather than login)
* NMI - Now supports passing cardholder name
* Checkout - Updated security headers and CSP context for new / updated gateways

<br />

**Bug Fixes**

* Various bug fixes and performance improvements