Added

15 October 2026

🌐 New Routes

  1. Pay out to a Mexican debit card — save a card as an MXN Payout Method with type mxnDebitCard (the 16-digit card number and the issuing bank's bankId), or pay it inline with fiatAndRailDetails.type mxn-debit-card. See MXN Debit Card.

⭐ Enhancements

Payouts API

  1. MXN CLABE Payout Methods no longer need a bankId — the bank is read from the CLABE's first 3 digits. See MXN CLABE.
  2. Cross-chain payouts accept the newer amount format — a payout request that bridges across blockchains (e.g., sending USDC on polygon to an ethereum wallet) now accepts the amount via amountV2
  3. USD to USD Payouts — USD payout requests, when your counterparty and payout method are to Portage bank, are free

Compliance API

  1. New attestation type supported. Upload documents showing where a business's funds come from with the businessSourceOfFundsDocuments attestation, during review or in response to an RFI.
  2. Automatic document checks. When you submit a compliance review, proof of address, formation, UBO ownership and flow of funds documents are checked against your submitted attestations. Any mismatch names the field to fix.
  3. Submission validation improvements. When you submit a compliance review, identity document checks now flag a tax ID type that doesn't match the government ID's issuing country.
  4. Businesses without a website can now complete verification. The business website is now optional in the businessDetails attestation. Leave it out or send it empty, and the review proceeds instead of failing validation at upload. See Business KYC Requirements for more information.

Authentication

  1. Transfer API keys - new transfer keys start with mural_transfer_test_ or mural_transfer_live_

Sandbox

  1. Accounts — Accounts in staging now support the hold in fiat settlement strategy. See Simulated Payments.

🐛 Bug Fixes

Payouts API

  1. A payout returned by the bank after completion now reports as failed — it previously stayed complete indefinitely, with nothing to tell you the money had come back. It now moves to failed with a returned-by-bank reason and fires the payout_status_changed webhook. The principal returns to your deposit account and the fee stays collected.