Confirmation of Payee reason codes
When a Confirmation of Payee (CoP) check runs on a GBP outgoing wire transferWire Transfer A transaction that moves funds between accounts. An incoming wire transfer moves funds from a third-party bank account to a Weavr managed account, while an outgoing wire transfer moves funds from a Weavr managed account to a third-party bank account. Wire transfers require the managed account to have an assigned IBAN (for EUR) or sort code and account number (for GBP). (OWTOWT Outgoing Wire Transfer - a transaction that moves funds from a Weavr managed account to a bank account held at a third-party financial institution. OWTs require the managed account to have an assigned IBAN and the user to complete Strong Customer Authentication.), the response includes a validationOutcomes array describing the result. A reason code is a short identifier in validationOutcomes[].categoryResult.reasonCode that explains why the check returned a CLOSE_MATCH or NO_MATCH. No reason code is returned when the match is EXACT_MATCH.
Use the reason code to drive your app's response — for example, prompt the end user to accept the registered name on a close match, ask them to correct the account number on AC01, or block the payment when the account doesn't exist.
The full response payload, including validationOutcomes, is documented in the API reference for Create an Outgoing Wire Transfer. The reason code values come from the underlying CoP scheme operated by Pay.UK.
Reason codes
The table below lists every possible reason code, the match value it appears alongside, and whether the registered name is returned in categoryResult.accountName so you can display it to the end user.
| Reason code | match | accountName returned | Description |
|---|---|---|---|
| none | EXACT_MATCH | No | The submitted name and account type match the responder's records. |
ANNM | NO_MATCH | No | The CoP responder confirms that the account name does not match. |
MBAM | CLOSE_MATCH | Yes | The submitted name closely matches the registered name. The registered name is returned in accountName so the end user can accept it and re-run. |
BANM | CLOSE_MATCH | No | The name matches, but the submitted account type was PERSONAL while the actual account is BUSINESS. |
PANM | CLOSE_MATCH | No | The name matches, but the submitted account type was BUSINESS while the actual account is PERSONAL. |
BAMM | CLOSE_MATCH | Yes | A close-matching account exists but as BUSINESS, while the submitted type was PERSONAL. The registered name is returned in accountName. |
PAMM | CLOSE_MATCH | Yes | A close-matching account exists but as PERSONAL, while the submitted type was BUSINESS. The registered name is returned in accountName. |
AC01 | NO_MATCH | No | The account does not exist at the responder. The submitted accountNumber is likely incorrect. |
IVCR | NO_MATCH | No | The responder could not locate an account from the secondaryReference field. |
ACNS | NO_MATCH | No | The destination account type is not supported for CoP by the responder. |
OPTO | NO_MATCH | No | The account holder has opted out of the CoP scheme. |
CASS | NO_MATCH | No | The account has been switched using the UK Current Account Switch Service. |
SCNS | NO_MATCH | No | The submitted sortCode is not supported at the responder's endpoint. |
Reason codes are not intended to be shown verbatim to end users. For recommended phrasing for each outcome, see the Confirmation of Payee guide for embedders.