Added

July 29th 2026

Added

[Deposit returns]
You can now return (reverse) a single deposit received toward a pay-in, without closing the pay-in itself.

  • Added POST /payin/{'{user_token}'}/{'{payin_token}'}/deposit/{'{deposit_token}'}/return
    A pay-in funded through a temporary bank account can receive multiple ACH or wire deposits over its lifetime, each with its own deposit_token. This endpoint sends a single settled deposit back to the sender through the originating network, while POST /payin/{'{user_token}'}/{'{payin_token}'}/reverse closes the deposit account and stops future deposits.
  • The request requires a normalized reason_code (e.g. UNEXPECTED_PAYMENT, DUPLICATE_DEPOSIT, SUSPECTED_FRAUD, SENDER_RECALL_REQUEST — 14 values in total); MassPay translates it to the network-specific code (NACHA Rxx for ACH, ISO 20022 for wires), surfaced on the deposit as network_return_code
  • A free-text reason can be supplied for audit purposes, and is required when reason_code is OTHER
  • fee_payer controls who absorbs the return fee: CLIENT (default) debits the wallet for the deposit amount plus the fee and returns the full deposit; DEPOSITOR (wire deposits only) withholds the fee from the returned funds
  • Only deposits in COMPLETED status can be returned; on success the updated deposit is returned with status RETURNED

Added

[Standalone bank account validation]
You can now validate a bank account against MassPay's verification providers independently of any payout.

  • Added POST /payout/account/validate/{'{user_token}'}
    Submit the account attributes to validate (BankAccountNumber is required; routing number, SWIFT, account type, and identification are also supported). The account holder name on record for the user is used for name matching.
  • If a finalized result is available within ~5 seconds (including cached results), it is returned synchronously with HTTP 200
  • Otherwise HTTP 202 is returned with status PROCESSING, and the finalized result arrives via the new avs.completed webhook event
  • Results include a status of MATCH, CLOSE_MATCH, NO_MATCH, or UNSUPPORTED, plus ownership_verified, first/last name match outcomes, a 0–100 match_score, and provider risk scoring (score_value, score_rag, score_description) when available
    Validations are charged per validation based on your pricing configuration; UNSUPPORTED results are not charged.

Added

[avs.completed webhook event]
Added the avs.completed event type to the webhook catalog on GET /payout/account/webhooks and webhook registration.
Subscribe to receive finalized bank account validation results when a validation completes asynchronously.

Improved

[Deposit model]
Deposits now carry full return details, visible on pay-in status and history responses.

  • New deposit status: RETURNED
  • New fields: return_reason_code, return_reason, network_return_code, return_fee, fee_payer, and returned_at (all null unless the deposit was returned)
  • New fee field reporting the fee applied to the deposit in fiat currency