---
title: Create Account Validation
slug: api/create-account-validation
docTags: 
createdAt: 2026-09-24T03:48:25.702Z
---

{
  "id": "KgY0J7vLP_lxkJNhBkFya",
  "type": "api-oas-v2",
  "data": {
    "method": "POST",
    "url": "https://sand-api.monoova.com/au/cop/payman-v2/AccountValidation",
    "servers": [
      {
        "url": "https://sand-api.monoova.com/au/cop/payman-v2/AccountValidation",
        "description": "Sandbox URL"
      },
      {
        "url": "https://api.monoova.com/au/cop/payman-v2/AccountValidation",
        "description": "Production URL"
      }
    ],
    "name": "Create Account Validation",
    "description": "<p>Creates a Confirmation of Payee account validation.</p>\n<p>Submit the BSB, account number and the account name you hold for the payee. The service compares the supplied name against the name registered with the recipient's financial institution and returns a match result, a customer-facing message and an icon code you can surface in your own UI.</p>\n<p>Keep the <code>accountValidationUniqueId</code> you send — it is the key used to retrieve this validation later through <strong>Get Account Validation by Id</strong>.</p>",
    "contentType": "application/json",
    "request": {
      "pathParameters": [],
      "headerParameters": [],
      "queryParameters": [],
      "bodyDataParameters": [
        {
          "kind": "required",
          "name": "body",
          "type": "object",
          "example": "{\"accountValidationUniqueId\":\"AV-2026-0923-000185\",\"subMerchantId\":\"SUBM-0001234\",\"bsb\":\"032-002\",\"accountNumber\":\"123456789\",\"accountName\":\"Monoova Payments Pty Ltd\",\"requestPurposeCode\":\"VADR\"}",
          "description": "The account details to validate.",
          "customType": "CreateAccountValidationRequest",
          "schema": [
            {
              "name": "accountValidationUniqueId",
              "kind": "required",
              "type": "string",
              "description": "<p><strong>Required</strong> — Your own identifier for this Confirmation of Payee validation, unique across your account. It is echoed back in the response and is the value used to retrieve the validation through <strong>Get Account Validation by Id</strong>. Up to 40 characters: letters, digits, hyphen and underscore.</p>",
              "example": "AV-2026-0923-000185",
              "default": "AV-2026-0923-000185",
              "maxLength": 40,
              "pattern": "^[a-zA-Z0-9_-]{1,40}$"
            },
            {
              "name": "subMerchantId",
              "kind": "optional",
              "type": "string",
              "nullable": true,
              "description": "<p><strong>Conditional</strong> — Monoova submerchant Id the validation is recorded against — supply it in Production when your account is configured with submerchants, as it is the value the filter search and reporting group by. Not required in Sandbox. Up to 36 characters: letters, digits, hyphen and underscore.</p>",
              "example": "SUBM-0001234",
              "default": "SUBM-0001234",
              "maxLength": 36,
              "pattern": "^[a-zA-Z0-9_-]{1,36}$"
            },
            {
              "name": "bsb",
              "kind": "required",
              "type": "string",
              "description": "<p><strong>Required</strong> — BSB of the account being validated, written as six digits with a hyphen after the third (<code>NNN-NNN</code>). Send it exactly in that format — an unhyphenated BSB is rejected with <code>PAY_BSB_INVALID</code>.</p>",
              "example": "032-002",
              "default": "032-002",
              "maxLength": 7,
              "pattern": "^[0-9]{3}-[0-9]{3}$"
            },
            {
              "name": "accountNumber",
              "kind": "required",
              "type": "string",
              "description": "<p><strong>Required</strong> — Account number for the COP validation, as held for the payee and paired with the BSB above. Up to 28 characters: letters, digits, hyphen and underscore. Keep any leading zeros — send it as text, not as a number.</p>",
              "example": "123456789",
              "default": "123456789",
              "maxLength": 28,
              "pattern": "^[a-zA-Z0-9_-]{1,28}$"
            },
            {
              "name": "accountName",
              "kind": "required",
              "type": "string",
              "description": "<p><strong>Required</strong> — Account name for the COP validation — the payee name you hold, which is compared against the name registered with the recipient's financial institution. 2 to 140 printable characters, and it cannot begin or end with a space.</p>",
              "example": "Monoova Payments Pty Ltd",
              "default": "Monoova Payments Pty Ltd",
              "minLength": 2,
              "maxLength": 140,
              "pattern": "^[!-~][ -~]{0,138}[!-~]$"
            },
            {
              "name": "requestPurposeCode",
              "kind": "required",
              "type": "string",
              "description": "<p><strong>Required</strong> — Purpose of the COP validation, as a four-letter code. Accepted values are <code>PAYE</code>, <code>VADR</code>, <code>PYMT</code>, <code>MAND</code>, <code>PIRQ</code> and <code>INVN</code>. Use <code>VADR</code> for the Verify Address Book feature. Omitting the field returns <code>PAY_PURPOSE_CODE_REQUIRED</code>; a value outside the accepted list returns <code>PAY_PURPOSE_CODE_INVALID</code>.</p>",
              "example": "VADR",
              "default": "VADR",
              "minLength": 4,
              "maxLength": 4,
              "pattern": "^(PAYE|VADR|PYMT|MAND|PIRQ|INVN)$"
            }
          ],
          "modelRef": "#/components/schemas/CreateAccountValidationRequest",
          "isExpanded": true
        }
      ],
      "formDataParameters": [],
      "oAuthParameters": [
        {
          "id": "BearerAuth",
          "name": "BearerAuth",
          "kind": "optional",
          "type": "http",
          "description": "<p>Bearer token authentication for API endpoints. Send the token in the <code>Authorization</code> header as <code>Bearer &#x3C;token></code>. To generate the token: <a href=\"https://developer.monoova.com/api/generate-a-bearer-token\" target=\"_blank\">https://developer.monoova.com/api/generate-a-bearer-token</a></p>",
          "scheme": "bearer"
        }
      ],
      "cookieParameters": []
    },
    "responses": [
      {
        "statusCode": "200",
        "description": "<p><strong>200 OK.</strong> The validation was processed. Read <code>resultData.resultCode</code> for the machine outcome and <code>resultData.cxResultMessage</code> for the wording to show the payer. A 200 confirms the request was accepted and answered — it does not by itself mean the name matched.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"traceId\":\"0HN7GQ2L4K9AB-00000001\",\"resultData\":{\"cxResultIconCode\":\"TICK\",\"cxResultMessage\":\"The account name matches the account details provided.\",\"cxResultDisplayAccountName\":\"Monoova Payments Pty Ltd\",\"resultCode\":\"MTCH\",\"accountValidationUniqueId\":\"AV-2026-0923-000185\",\"subMerchantId\":\"SUBM-0001234\"}}",
            "description": "A single Confirmation of Payee validation result.",
            "customType": "AccountValidationResponse",
            "schema": [
              {
                "name": "traceId",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — Unique id for logging, generated per request. Store it against your own record and quote it when raising a support ticket — it is how Monoova locates this exact call.</p>",
                "example": "0HN7GQ2L4K9AB-00000001",
                "default": "0HN7GQ2L4K9AB-00000001",
                "maxLength": 100,
                "pattern": "^[a-zA-Z0-9_.:-]{1,100}$"
              },
              {
                "name": "resultData",
                "kind": "optional",
                "type": "object",
                "description": "<p><strong>Optional</strong> — The validation outcome. Present on a successful call; absent or null when the request could not be processed, in which case read the <code>errors</code> array of the error response instead.</p>",
                "modelRef": "#/components/schemas/AccountValidationResultData",
                "customType": "AccountValidationResultData",
                "schema": [
                  {
                    "name": "cxResultIconCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — The CX icon result of the name validation matching process, for display alongside <code>cxResultMessage</code> in your own UI. One of <code>TICK</code>, <code>EXCM</code>, <code>CROS</code> or <code>DASH</code>.</p>",
                    "example": "TICK",
                    "default": "TICK",
                    "maxLength": 4,
                    "pattern": "^(TICK|EXCM|CROS|DASH)$"
                  },
                  {
                    "name": "cxResultMessage",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Message for the result, already worded for the payer. Show it as supplied rather than composing your own text from <code>resultCode</code>.</p>",
                    "example": "The account name matches the account details provided.",
                    "default": "The account name matches the account details provided.",
                    "maxLength": 255,
                    "pattern": "^[ -~]{1,255}$"
                  },
                  {
                    "name": "cxResultDisplayAccountName",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Display account name for the result — the name safe to show the payer, which may differ from the <code>accountName</code> that was submitted. Returned only where the recipient's institution permits the registered name to be displayed.</p>",
                    "example": "Monoova Payments Pty Ltd",
                    "default": "Monoova Payments Pty Ltd",
                    "minLength": 2,
                    "maxLength": 140,
                    "pattern": "^[!-~][ -~]{0,138}[!-~]$"
                  },
                  {
                    "name": "resultCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — The result code of the name validation matching process — the value to branch your own logic on. One of <code>MTCH</code> (match), <code>CMTC</code> (close match), <code>NMTC</code> (no match), <code>NFND</code> (account not found) or <code>CLSD</code> (account closed).</p>",
                    "example": "MTCH",
                    "default": "MTCH",
                    "maxLength": 4,
                    "pattern": "^(MTCH|CMTC|NMTC|NFND|CLSD)$"
                  },
                  {
                    "name": "accountValidationUniqueId",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Account Validation Unique Id supplied in the request, echoed back so the result can be matched to your own record.</p>",
                    "example": "AV-2026-0923-000185",
                    "default": "AV-2026-0923-000185",
                    "maxLength": 40,
                    "pattern": "^[a-zA-Z0-9_-]{1,40}$"
                  },
                  {
                    "name": "subMerchantId",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Sub Merchant Id for the result. Returned when a submerchant was supplied on the create request, or when the validation was recorded against one.</p>",
                    "example": "SUBM-0001234",
                    "default": "SUBM-0001234",
                    "maxLength": 36,
                    "pattern": "^[a-zA-Z0-9_-]{1,36}$"
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/AccountValidationResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "400",
        "description": "<p><strong>400 Bad Request.</strong> The request failed validation before it reached the name-matching service. The <code>errors</code> array names each failing field through <code>errorCode</code>, with a human-readable <code>errorMessage</code>. Correct the values and resend — retrying the identical request returns the same 400.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"traceId\":\"0HN7GQ2L4K9AB-00000003\",\"errors\":[{\"errorCode\":\"PAY_BSB_INVALID\",\"errorMessage\":\"The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.\"},{\"errorCode\":\"PAY_ACCOUNT_NAME_REQUIRED\",\"errorMessage\":\"The field accountName is required.\"}]}",
            "description": "<p>The body returned with a 400, 401 or 500 response.</p>",
            "customType": "ErrorResponse",
            "schema": [
              {
                "name": "traceId",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — Unique id for logging, generated per request. Always log it on a failure — it is the fastest way for Monoova support to find the failing call.</p>",
                "example": "0HN7GQ2L4K9AB-00000003",
                "default": "0HN7GQ2L4K9AB-00000003",
                "maxLength": 100,
                "pattern": "^[a-zA-Z0-9_.:-]{1,100}$"
              },
              {
                "name": "errors",
                "kind": "optional",
                "type": "array",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — One entry per problem found with the request. A single call can fail several validations at once, so handle the array rather than only its first entry.</p>",
                "modelRef": "#/components/schemas/ErrorDetail",
                "customType": "ErrorDetail[]",
                "schema": [
                  {
                    "name": "errorCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Monoova error code — a stable, uppercase, <code>PAY_</code>-prefixed token to branch your error handling on. Do not parse <code>errorMessage</code> instead; its wording can change.</p>\n<p>Request and format errors: <code>PAY_REQ_BODY_INVALID</code>, <code>PAY_REQUEST_EMPTY</code>, <code>PAY_VERSION_INVALID</code>, <code>PAY_VERSION_UNSUPPORTED</code>, <code>PAY_VALIDATION_ERROR</code>, <code>PAY_INPUT_INJECTION_DETECTED</code>.</p>\n<p>Field errors: <code>PAY_BSB_REQUIRED</code>, <code>PAY_BSB_INVALID</code>, <code>PAY_ACCOUNT_NUMBER_REQUIRED</code>, <code>PAY_ACCOUNT_NUMBER_INVALID</code>, <code>PAY_ACCOUNT_NAME_REQUIRED</code>, <code>PAY_ACCOUNT_NAME_INVALID</code>, <code>PAY_BSB_AND_ACCOUNT_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_INVALID</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_IN_USE</code>, <code>PAY_ACCOUNT_LOOKUP_ID_INVALID</code>, <code>PAY_SUBMERCHANT_ID_INVALID</code>, <code>PAY_ACCTID_REQUIRED</code>, <code>PAY_ACCTID_INVALID</code>, <code>PAY_PURPOSE_CODE_REQUIRED</code>, <code>PAY_PURPOSE_CODE_INVALID</code>, <code>PAY_ALIAS_TYPE_REQUIRED</code>, <code>PAY_ALIAS_TYPE_INVALID</code>, <code>PAY_ALIAS_VALUE_REQUIRED</code>, <code>PAY_ALIAS_VALUE_INVALID</code>, <code>PAY_PAYID_TYPE_REQUIRED</code>, <code>PAY_PAYID_TYPE_INVALID</code>, <code>PAY_PAYID_VALUE_REQUIRED</code>, <code>PAY_PAYID_VALUE_INVALID</code>, <code>PAY_PAYID_NOT_FOUND</code>.</p>\n<p>Filter and paging errors: <code>PAY_CRTD_STARTDATE_INVALID</code>, <code>PAY_CRTD_ENDDATE_INVALID</code>, <code>PAY_MDFD_STARTDATE_INVALID</code>, <code>PAY_MDFD_ENDDATE_INVALID</code>, <code>PAY_PG_SZ_INVALID</code>, <code>PAY_PG_NUM_INVALID</code>, <code>PAY_ORDER_BY_INVALID</code>.</p>\n<p>Configuration and limit errors: <code>PAY_ACCOUNT_VALIDATION_NOT_ENABLED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_CONFIGURED</code>, <code>PAY_ACCOUNT_VALIDATION_SUBMERCHANT_NOT_ASSOCIATED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_FOUND_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_SUCCESSFUL_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS_FOR_PAYEE</code>, <code>PAY_ACCOUNT_VALIDATION_NO_MATCH_THRESHOLD_EXCEEDED</code>, <code>PAY_ENUM_DAILY_LIMIT_PURPOSE_CODE_INVALID</code>, <code>PAY_ENUM_DAILY_LIMIT_PER_PAYEE_INVALID</code>, <code>PAY_ENUM_NO_MATCH_THRESHOLD_INVALID</code>, <code>PAY_ENUM_CHECK_NO_MATCH_THRESHOLD_AFTER_INVALID</code>, <code>PAY_BACKFILL_MAX_RECORD_COUNT_EXCEEDED</code>.</p>\n<p>System errors: <code>PAY_NPP_GATEWAY_ERROR</code>, <code>PAY_NPP_GATEWAY_TIMEOUT</code>, <code>PAY_CPL_GATEWAY_TIMEOUT</code>, <code>PAY_OBJ_CREATE_ERROR</code>, <code>PAY_UNEXPECTED_ERROR</code>.</p>",
                    "example": "PAY_BSB_INVALID",
                    "default": "PAY_BSB_INVALID",
                    "maxLength": 80,
                    "pattern": "^PAY_[A-Z0-9_]{1,76}$"
                  },
                  {
                    "name": "errorMessage",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — More detailed description of the specific error which may include information from the specific request. Intended for logs and developer troubleshooting — show <code>cxResultMessage</code> to end users, not this text.</p>",
                    "example": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "default": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "maxLength": 500,
                    "pattern": "^[ -~]{1,500}$"
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ErrorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "401",
        "description": "<p><strong>401 Unauthorized.</strong> The bearer token is missing, malformed, or has expired. Generate a new token from the Monoova developer portal and send it in the <code>Authorization</code> header as <code>Bearer &#x3C;token></code>. Do not retry with the same token.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"traceId\":\"0HN7GQ2L4K9AB-00000004\",\"errors\":[{\"errorCode\":\"PAY_UNAUTHORIZED\",\"errorMessage\":\"Authorization has been denied for this request.\"}]}",
            "description": "<p>The body returned with a 400, 401 or 500 response.</p>",
            "customType": "ErrorResponse",
            "schema": [
              {
                "name": "traceId",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — Unique id for logging, generated per request. Always log it on a failure — it is the fastest way for Monoova support to find the failing call.</p>",
                "example": "0HN7GQ2L4K9AB-00000003",
                "default": "0HN7GQ2L4K9AB-00000003",
                "maxLength": 100,
                "pattern": "^[a-zA-Z0-9_.:-]{1,100}$"
              },
              {
                "name": "errors",
                "kind": "optional",
                "type": "array",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — One entry per problem found with the request. A single call can fail several validations at once, so handle the array rather than only its first entry.</p>",
                "modelRef": "#/components/schemas/ErrorDetail",
                "customType": "ErrorDetail[]",
                "schema": [
                  {
                    "name": "errorCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Monoova error code — a stable, uppercase, <code>PAY_</code>-prefixed token to branch your error handling on. Do not parse <code>errorMessage</code> instead; its wording can change.</p>\n<p>Request and format errors: <code>PAY_REQ_BODY_INVALID</code>, <code>PAY_REQUEST_EMPTY</code>, <code>PAY_VERSION_INVALID</code>, <code>PAY_VERSION_UNSUPPORTED</code>, <code>PAY_VALIDATION_ERROR</code>, <code>PAY_INPUT_INJECTION_DETECTED</code>.</p>\n<p>Field errors: <code>PAY_BSB_REQUIRED</code>, <code>PAY_BSB_INVALID</code>, <code>PAY_ACCOUNT_NUMBER_REQUIRED</code>, <code>PAY_ACCOUNT_NUMBER_INVALID</code>, <code>PAY_ACCOUNT_NAME_REQUIRED</code>, <code>PAY_ACCOUNT_NAME_INVALID</code>, <code>PAY_BSB_AND_ACCOUNT_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_INVALID</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_IN_USE</code>, <code>PAY_ACCOUNT_LOOKUP_ID_INVALID</code>, <code>PAY_SUBMERCHANT_ID_INVALID</code>, <code>PAY_ACCTID_REQUIRED</code>, <code>PAY_ACCTID_INVALID</code>, <code>PAY_PURPOSE_CODE_REQUIRED</code>, <code>PAY_PURPOSE_CODE_INVALID</code>, <code>PAY_ALIAS_TYPE_REQUIRED</code>, <code>PAY_ALIAS_TYPE_INVALID</code>, <code>PAY_ALIAS_VALUE_REQUIRED</code>, <code>PAY_ALIAS_VALUE_INVALID</code>, <code>PAY_PAYID_TYPE_REQUIRED</code>, <code>PAY_PAYID_TYPE_INVALID</code>, <code>PAY_PAYID_VALUE_REQUIRED</code>, <code>PAY_PAYID_VALUE_INVALID</code>, <code>PAY_PAYID_NOT_FOUND</code>.</p>\n<p>Filter and paging errors: <code>PAY_CRTD_STARTDATE_INVALID</code>, <code>PAY_CRTD_ENDDATE_INVALID</code>, <code>PAY_MDFD_STARTDATE_INVALID</code>, <code>PAY_MDFD_ENDDATE_INVALID</code>, <code>PAY_PG_SZ_INVALID</code>, <code>PAY_PG_NUM_INVALID</code>, <code>PAY_ORDER_BY_INVALID</code>.</p>\n<p>Configuration and limit errors: <code>PAY_ACCOUNT_VALIDATION_NOT_ENABLED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_CONFIGURED</code>, <code>PAY_ACCOUNT_VALIDATION_SUBMERCHANT_NOT_ASSOCIATED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_FOUND_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_SUCCESSFUL_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS_FOR_PAYEE</code>, <code>PAY_ACCOUNT_VALIDATION_NO_MATCH_THRESHOLD_EXCEEDED</code>, <code>PAY_ENUM_DAILY_LIMIT_PURPOSE_CODE_INVALID</code>, <code>PAY_ENUM_DAILY_LIMIT_PER_PAYEE_INVALID</code>, <code>PAY_ENUM_NO_MATCH_THRESHOLD_INVALID</code>, <code>PAY_ENUM_CHECK_NO_MATCH_THRESHOLD_AFTER_INVALID</code>, <code>PAY_BACKFILL_MAX_RECORD_COUNT_EXCEEDED</code>.</p>\n<p>System errors: <code>PAY_NPP_GATEWAY_ERROR</code>, <code>PAY_NPP_GATEWAY_TIMEOUT</code>, <code>PAY_CPL_GATEWAY_TIMEOUT</code>, <code>PAY_OBJ_CREATE_ERROR</code>, <code>PAY_UNEXPECTED_ERROR</code>.</p>",
                    "example": "PAY_BSB_INVALID",
                    "default": "PAY_BSB_INVALID",
                    "maxLength": 80,
                    "pattern": "^PAY_[A-Z0-9_]{1,76}$"
                  },
                  {
                    "name": "errorMessage",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — More detailed description of the specific error which may include information from the specific request. Intended for logs and developer troubleshooting — show <code>cxResultMessage</code> to end users, not this text.</p>",
                    "example": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "default": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "maxLength": 500,
                    "pattern": "^[ -~]{1,500}$"
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ErrorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "403",
        "description": "<p><strong>403 Forbidden.</strong> The token was accepted, but the account behind it is not permitted to perform this call — Confirmation of Payee is not enabled on the account, is not yet configured, or the <code>subMerchantId</code> supplied is not associated with it. This is an entitlement problem, not a data problem: the same request will keep returning 403 until Monoova updates the account configuration. Do not retry automatically.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"traceId\":\"0HN7GQ2L4K9AB-00000006\",\"errors\":[{\"errorCode\":\"PAY_ACCOUNT_VALIDATION_NOT_ENABLED\",\"errorMessage\":\"Account validation is not enabled for this account.\"}]}",
            "description": "<p>The body returned with a 400, 401 or 500 response.</p>",
            "customType": "ErrorResponse",
            "schema": [
              {
                "name": "traceId",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — Unique id for logging, generated per request. Always log it on a failure — it is the fastest way for Monoova support to find the failing call.</p>",
                "example": "0HN7GQ2L4K9AB-00000003",
                "default": "0HN7GQ2L4K9AB-00000003",
                "maxLength": 100,
                "pattern": "^[a-zA-Z0-9_.:-]{1,100}$"
              },
              {
                "name": "errors",
                "kind": "optional",
                "type": "array",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — One entry per problem found with the request. A single call can fail several validations at once, so handle the array rather than only its first entry.</p>",
                "modelRef": "#/components/schemas/ErrorDetail",
                "customType": "ErrorDetail[]",
                "schema": [
                  {
                    "name": "errorCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Monoova error code — a stable, uppercase, <code>PAY_</code>-prefixed token to branch your error handling on. Do not parse <code>errorMessage</code> instead; its wording can change.</p>\n<p>Request and format errors: <code>PAY_REQ_BODY_INVALID</code>, <code>PAY_REQUEST_EMPTY</code>, <code>PAY_VERSION_INVALID</code>, <code>PAY_VERSION_UNSUPPORTED</code>, <code>PAY_VALIDATION_ERROR</code>, <code>PAY_INPUT_INJECTION_DETECTED</code>.</p>\n<p>Field errors: <code>PAY_BSB_REQUIRED</code>, <code>PAY_BSB_INVALID</code>, <code>PAY_ACCOUNT_NUMBER_REQUIRED</code>, <code>PAY_ACCOUNT_NUMBER_INVALID</code>, <code>PAY_ACCOUNT_NAME_REQUIRED</code>, <code>PAY_ACCOUNT_NAME_INVALID</code>, <code>PAY_BSB_AND_ACCOUNT_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_INVALID</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_IN_USE</code>, <code>PAY_ACCOUNT_LOOKUP_ID_INVALID</code>, <code>PAY_SUBMERCHANT_ID_INVALID</code>, <code>PAY_ACCTID_REQUIRED</code>, <code>PAY_ACCTID_INVALID</code>, <code>PAY_PURPOSE_CODE_REQUIRED</code>, <code>PAY_PURPOSE_CODE_INVALID</code>, <code>PAY_ALIAS_TYPE_REQUIRED</code>, <code>PAY_ALIAS_TYPE_INVALID</code>, <code>PAY_ALIAS_VALUE_REQUIRED</code>, <code>PAY_ALIAS_VALUE_INVALID</code>, <code>PAY_PAYID_TYPE_REQUIRED</code>, <code>PAY_PAYID_TYPE_INVALID</code>, <code>PAY_PAYID_VALUE_REQUIRED</code>, <code>PAY_PAYID_VALUE_INVALID</code>, <code>PAY_PAYID_NOT_FOUND</code>.</p>\n<p>Filter and paging errors: <code>PAY_CRTD_STARTDATE_INVALID</code>, <code>PAY_CRTD_ENDDATE_INVALID</code>, <code>PAY_MDFD_STARTDATE_INVALID</code>, <code>PAY_MDFD_ENDDATE_INVALID</code>, <code>PAY_PG_SZ_INVALID</code>, <code>PAY_PG_NUM_INVALID</code>, <code>PAY_ORDER_BY_INVALID</code>.</p>\n<p>Configuration and limit errors: <code>PAY_ACCOUNT_VALIDATION_NOT_ENABLED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_CONFIGURED</code>, <code>PAY_ACCOUNT_VALIDATION_SUBMERCHANT_NOT_ASSOCIATED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_FOUND_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_SUCCESSFUL_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS_FOR_PAYEE</code>, <code>PAY_ACCOUNT_VALIDATION_NO_MATCH_THRESHOLD_EXCEEDED</code>, <code>PAY_ENUM_DAILY_LIMIT_PURPOSE_CODE_INVALID</code>, <code>PAY_ENUM_DAILY_LIMIT_PER_PAYEE_INVALID</code>, <code>PAY_ENUM_NO_MATCH_THRESHOLD_INVALID</code>, <code>PAY_ENUM_CHECK_NO_MATCH_THRESHOLD_AFTER_INVALID</code>, <code>PAY_BACKFILL_MAX_RECORD_COUNT_EXCEEDED</code>.</p>\n<p>System errors: <code>PAY_NPP_GATEWAY_ERROR</code>, <code>PAY_NPP_GATEWAY_TIMEOUT</code>, <code>PAY_CPL_GATEWAY_TIMEOUT</code>, <code>PAY_OBJ_CREATE_ERROR</code>, <code>PAY_UNEXPECTED_ERROR</code>.</p>",
                    "example": "PAY_BSB_INVALID",
                    "default": "PAY_BSB_INVALID",
                    "maxLength": 80,
                    "pattern": "^PAY_[A-Z0-9_]{1,76}$"
                  },
                  {
                    "name": "errorMessage",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — More detailed description of the specific error which may include information from the specific request. Intended for logs and developer troubleshooting — show <code>cxResultMessage</code> to end users, not this text.</p>",
                    "example": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "default": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "maxLength": 500,
                    "pattern": "^[ -~]{1,500}$"
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ErrorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "404",
        "description": "<p><strong>404 Not Found.</strong> No validation matches the <code>id</code> in the path — either it was never created, or it belongs to a different account. Check the value against the <code>accountValidationUniqueId</code> sent on the create request. A filter search that matches nothing returns 200 with an empty <code>resultData</code> array instead of a 404.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"traceId\":\"0HN7GQ2L4K9AB-00000007\",\"errors\":[{\"errorCode\":\"PAY_ACCOUNT_VALIDATION_NOT_FOUND_ERROR\",\"errorMessage\":\"No account validation was found for the supplied id.\"}]}",
            "description": "<p>The body returned with a 400, 401 or 500 response.</p>",
            "customType": "ErrorResponse",
            "schema": [
              {
                "name": "traceId",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — Unique id for logging, generated per request. Always log it on a failure — it is the fastest way for Monoova support to find the failing call.</p>",
                "example": "0HN7GQ2L4K9AB-00000003",
                "default": "0HN7GQ2L4K9AB-00000003",
                "maxLength": 100,
                "pattern": "^[a-zA-Z0-9_.:-]{1,100}$"
              },
              {
                "name": "errors",
                "kind": "optional",
                "type": "array",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — One entry per problem found with the request. A single call can fail several validations at once, so handle the array rather than only its first entry.</p>",
                "modelRef": "#/components/schemas/ErrorDetail",
                "customType": "ErrorDetail[]",
                "schema": [
                  {
                    "name": "errorCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Monoova error code — a stable, uppercase, <code>PAY_</code>-prefixed token to branch your error handling on. Do not parse <code>errorMessage</code> instead; its wording can change.</p>\n<p>Request and format errors: <code>PAY_REQ_BODY_INVALID</code>, <code>PAY_REQUEST_EMPTY</code>, <code>PAY_VERSION_INVALID</code>, <code>PAY_VERSION_UNSUPPORTED</code>, <code>PAY_VALIDATION_ERROR</code>, <code>PAY_INPUT_INJECTION_DETECTED</code>.</p>\n<p>Field errors: <code>PAY_BSB_REQUIRED</code>, <code>PAY_BSB_INVALID</code>, <code>PAY_ACCOUNT_NUMBER_REQUIRED</code>, <code>PAY_ACCOUNT_NUMBER_INVALID</code>, <code>PAY_ACCOUNT_NAME_REQUIRED</code>, <code>PAY_ACCOUNT_NAME_INVALID</code>, <code>PAY_BSB_AND_ACCOUNT_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_INVALID</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_IN_USE</code>, <code>PAY_ACCOUNT_LOOKUP_ID_INVALID</code>, <code>PAY_SUBMERCHANT_ID_INVALID</code>, <code>PAY_ACCTID_REQUIRED</code>, <code>PAY_ACCTID_INVALID</code>, <code>PAY_PURPOSE_CODE_REQUIRED</code>, <code>PAY_PURPOSE_CODE_INVALID</code>, <code>PAY_ALIAS_TYPE_REQUIRED</code>, <code>PAY_ALIAS_TYPE_INVALID</code>, <code>PAY_ALIAS_VALUE_REQUIRED</code>, <code>PAY_ALIAS_VALUE_INVALID</code>, <code>PAY_PAYID_TYPE_REQUIRED</code>, <code>PAY_PAYID_TYPE_INVALID</code>, <code>PAY_PAYID_VALUE_REQUIRED</code>, <code>PAY_PAYID_VALUE_INVALID</code>, <code>PAY_PAYID_NOT_FOUND</code>.</p>\n<p>Filter and paging errors: <code>PAY_CRTD_STARTDATE_INVALID</code>, <code>PAY_CRTD_ENDDATE_INVALID</code>, <code>PAY_MDFD_STARTDATE_INVALID</code>, <code>PAY_MDFD_ENDDATE_INVALID</code>, <code>PAY_PG_SZ_INVALID</code>, <code>PAY_PG_NUM_INVALID</code>, <code>PAY_ORDER_BY_INVALID</code>.</p>\n<p>Configuration and limit errors: <code>PAY_ACCOUNT_VALIDATION_NOT_ENABLED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_CONFIGURED</code>, <code>PAY_ACCOUNT_VALIDATION_SUBMERCHANT_NOT_ASSOCIATED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_FOUND_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_SUCCESSFUL_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS_FOR_PAYEE</code>, <code>PAY_ACCOUNT_VALIDATION_NO_MATCH_THRESHOLD_EXCEEDED</code>, <code>PAY_ENUM_DAILY_LIMIT_PURPOSE_CODE_INVALID</code>, <code>PAY_ENUM_DAILY_LIMIT_PER_PAYEE_INVALID</code>, <code>PAY_ENUM_NO_MATCH_THRESHOLD_INVALID</code>, <code>PAY_ENUM_CHECK_NO_MATCH_THRESHOLD_AFTER_INVALID</code>, <code>PAY_BACKFILL_MAX_RECORD_COUNT_EXCEEDED</code>.</p>\n<p>System errors: <code>PAY_NPP_GATEWAY_ERROR</code>, <code>PAY_NPP_GATEWAY_TIMEOUT</code>, <code>PAY_CPL_GATEWAY_TIMEOUT</code>, <code>PAY_OBJ_CREATE_ERROR</code>, <code>PAY_UNEXPECTED_ERROR</code>.</p>",
                    "example": "PAY_BSB_INVALID",
                    "default": "PAY_BSB_INVALID",
                    "maxLength": 80,
                    "pattern": "^PAY_[A-Z0-9_]{1,76}$"
                  },
                  {
                    "name": "errorMessage",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — More detailed description of the specific error which may include information from the specific request. Intended for logs and developer troubleshooting — show <code>cxResultMessage</code> to end users, not this text.</p>",
                    "example": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "default": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "maxLength": 500,
                    "pattern": "^[ -~]{1,500}$"
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ErrorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "500",
        "description": "<p><strong>500 Internal Server Error.</strong> An unexpected error occurred while processing an otherwise valid request. The request may or may not have been recorded, so re-send it with the same <code>accountValidationUniqueId</code> rather than a new one. Quote the <code>traceId</code> when contacting Monoova support.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"traceId\":\"0HN7GQ2L4K9AB-00000005\",\"errors\":[{\"errorCode\":\"PAY_UNEXPECTED_ERROR\",\"errorMessage\":\"An unexpected error occurred while processing the request.\"}]}",
            "description": "<p>The body returned with a 400, 401 or 500 response.</p>",
            "customType": "ErrorResponse",
            "schema": [
              {
                "name": "traceId",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — Unique id for logging, generated per request. Always log it on a failure — it is the fastest way for Monoova support to find the failing call.</p>",
                "example": "0HN7GQ2L4K9AB-00000003",
                "default": "0HN7GQ2L4K9AB-00000003",
                "maxLength": 100,
                "pattern": "^[a-zA-Z0-9_.:-]{1,100}$"
              },
              {
                "name": "errors",
                "kind": "optional",
                "type": "array",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — One entry per problem found with the request. A single call can fail several validations at once, so handle the array rather than only its first entry.</p>",
                "modelRef": "#/components/schemas/ErrorDetail",
                "customType": "ErrorDetail[]",
                "schema": [
                  {
                    "name": "errorCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Monoova error code — a stable, uppercase, <code>PAY_</code>-prefixed token to branch your error handling on. Do not parse <code>errorMessage</code> instead; its wording can change.</p>\n<p>Request and format errors: <code>PAY_REQ_BODY_INVALID</code>, <code>PAY_REQUEST_EMPTY</code>, <code>PAY_VERSION_INVALID</code>, <code>PAY_VERSION_UNSUPPORTED</code>, <code>PAY_VALIDATION_ERROR</code>, <code>PAY_INPUT_INJECTION_DETECTED</code>.</p>\n<p>Field errors: <code>PAY_BSB_REQUIRED</code>, <code>PAY_BSB_INVALID</code>, <code>PAY_ACCOUNT_NUMBER_REQUIRED</code>, <code>PAY_ACCOUNT_NUMBER_INVALID</code>, <code>PAY_ACCOUNT_NAME_REQUIRED</code>, <code>PAY_ACCOUNT_NAME_INVALID</code>, <code>PAY_BSB_AND_ACCOUNT_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_INVALID</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_IN_USE</code>, <code>PAY_ACCOUNT_LOOKUP_ID_INVALID</code>, <code>PAY_SUBMERCHANT_ID_INVALID</code>, <code>PAY_ACCTID_REQUIRED</code>, <code>PAY_ACCTID_INVALID</code>, <code>PAY_PURPOSE_CODE_REQUIRED</code>, <code>PAY_PURPOSE_CODE_INVALID</code>, <code>PAY_ALIAS_TYPE_REQUIRED</code>, <code>PAY_ALIAS_TYPE_INVALID</code>, <code>PAY_ALIAS_VALUE_REQUIRED</code>, <code>PAY_ALIAS_VALUE_INVALID</code>, <code>PAY_PAYID_TYPE_REQUIRED</code>, <code>PAY_PAYID_TYPE_INVALID</code>, <code>PAY_PAYID_VALUE_REQUIRED</code>, <code>PAY_PAYID_VALUE_INVALID</code>, <code>PAY_PAYID_NOT_FOUND</code>.</p>\n<p>Filter and paging errors: <code>PAY_CRTD_STARTDATE_INVALID</code>, <code>PAY_CRTD_ENDDATE_INVALID</code>, <code>PAY_MDFD_STARTDATE_INVALID</code>, <code>PAY_MDFD_ENDDATE_INVALID</code>, <code>PAY_PG_SZ_INVALID</code>, <code>PAY_PG_NUM_INVALID</code>, <code>PAY_ORDER_BY_INVALID</code>.</p>\n<p>Configuration and limit errors: <code>PAY_ACCOUNT_VALIDATION_NOT_ENABLED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_CONFIGURED</code>, <code>PAY_ACCOUNT_VALIDATION_SUBMERCHANT_NOT_ASSOCIATED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_FOUND_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_SUCCESSFUL_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS_FOR_PAYEE</code>, <code>PAY_ACCOUNT_VALIDATION_NO_MATCH_THRESHOLD_EXCEEDED</code>, <code>PAY_ENUM_DAILY_LIMIT_PURPOSE_CODE_INVALID</code>, <code>PAY_ENUM_DAILY_LIMIT_PER_PAYEE_INVALID</code>, <code>PAY_ENUM_NO_MATCH_THRESHOLD_INVALID</code>, <code>PAY_ENUM_CHECK_NO_MATCH_THRESHOLD_AFTER_INVALID</code>, <code>PAY_BACKFILL_MAX_RECORD_COUNT_EXCEEDED</code>.</p>\n<p>System errors: <code>PAY_NPP_GATEWAY_ERROR</code>, <code>PAY_NPP_GATEWAY_TIMEOUT</code>, <code>PAY_CPL_GATEWAY_TIMEOUT</code>, <code>PAY_OBJ_CREATE_ERROR</code>, <code>PAY_UNEXPECTED_ERROR</code>.</p>",
                    "example": "PAY_BSB_INVALID",
                    "default": "PAY_BSB_INVALID",
                    "maxLength": 80,
                    "pattern": "^PAY_[A-Z0-9_]{1,76}$"
                  },
                  {
                    "name": "errorMessage",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — More detailed description of the specific error which may include information from the specific request. Intended for logs and developer troubleshooting — show <code>cxResultMessage</code> to end users, not this text.</p>",
                    "example": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "default": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "maxLength": 500,
                    "pattern": "^[ -~]{1,500}$"
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ErrorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "502",
        "description": "<p><strong>502 Bad Gateway.</strong> The request was valid, but an upstream service — the NPP gateway that performs the name match — returned an error, so no result could be produced. The validation was not completed. Retry with the same <code>accountValidationUniqueId</code> after a short delay, and escalate with the <code>traceId</code> if it persists.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"traceId\":\"0HN7GQ2L4K9AB-00000008\",\"errors\":[{\"errorCode\":\"PAY_NPP_GATEWAY_ERROR\",\"errorMessage\":\"The upstream gateway returned an error while processing the validation.\"}]}",
            "description": "<p>The body returned with a 400, 401 or 500 response.</p>",
            "customType": "ErrorResponse",
            "schema": [
              {
                "name": "traceId",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — Unique id for logging, generated per request. Always log it on a failure — it is the fastest way for Monoova support to find the failing call.</p>",
                "example": "0HN7GQ2L4K9AB-00000003",
                "default": "0HN7GQ2L4K9AB-00000003",
                "maxLength": 100,
                "pattern": "^[a-zA-Z0-9_.:-]{1,100}$"
              },
              {
                "name": "errors",
                "kind": "optional",
                "type": "array",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — One entry per problem found with the request. A single call can fail several validations at once, so handle the array rather than only its first entry.</p>",
                "modelRef": "#/components/schemas/ErrorDetail",
                "customType": "ErrorDetail[]",
                "schema": [
                  {
                    "name": "errorCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Monoova error code — a stable, uppercase, <code>PAY_</code>-prefixed token to branch your error handling on. Do not parse <code>errorMessage</code> instead; its wording can change.</p>\n<p>Request and format errors: <code>PAY_REQ_BODY_INVALID</code>, <code>PAY_REQUEST_EMPTY</code>, <code>PAY_VERSION_INVALID</code>, <code>PAY_VERSION_UNSUPPORTED</code>, <code>PAY_VALIDATION_ERROR</code>, <code>PAY_INPUT_INJECTION_DETECTED</code>.</p>\n<p>Field errors: <code>PAY_BSB_REQUIRED</code>, <code>PAY_BSB_INVALID</code>, <code>PAY_ACCOUNT_NUMBER_REQUIRED</code>, <code>PAY_ACCOUNT_NUMBER_INVALID</code>, <code>PAY_ACCOUNT_NAME_REQUIRED</code>, <code>PAY_ACCOUNT_NAME_INVALID</code>, <code>PAY_BSB_AND_ACCOUNT_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_INVALID</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_IN_USE</code>, <code>PAY_ACCOUNT_LOOKUP_ID_INVALID</code>, <code>PAY_SUBMERCHANT_ID_INVALID</code>, <code>PAY_ACCTID_REQUIRED</code>, <code>PAY_ACCTID_INVALID</code>, <code>PAY_PURPOSE_CODE_REQUIRED</code>, <code>PAY_PURPOSE_CODE_INVALID</code>, <code>PAY_ALIAS_TYPE_REQUIRED</code>, <code>PAY_ALIAS_TYPE_INVALID</code>, <code>PAY_ALIAS_VALUE_REQUIRED</code>, <code>PAY_ALIAS_VALUE_INVALID</code>, <code>PAY_PAYID_TYPE_REQUIRED</code>, <code>PAY_PAYID_TYPE_INVALID</code>, <code>PAY_PAYID_VALUE_REQUIRED</code>, <code>PAY_PAYID_VALUE_INVALID</code>, <code>PAY_PAYID_NOT_FOUND</code>.</p>\n<p>Filter and paging errors: <code>PAY_CRTD_STARTDATE_INVALID</code>, <code>PAY_CRTD_ENDDATE_INVALID</code>, <code>PAY_MDFD_STARTDATE_INVALID</code>, <code>PAY_MDFD_ENDDATE_INVALID</code>, <code>PAY_PG_SZ_INVALID</code>, <code>PAY_PG_NUM_INVALID</code>, <code>PAY_ORDER_BY_INVALID</code>.</p>\n<p>Configuration and limit errors: <code>PAY_ACCOUNT_VALIDATION_NOT_ENABLED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_CONFIGURED</code>, <code>PAY_ACCOUNT_VALIDATION_SUBMERCHANT_NOT_ASSOCIATED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_FOUND_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_SUCCESSFUL_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS_FOR_PAYEE</code>, <code>PAY_ACCOUNT_VALIDATION_NO_MATCH_THRESHOLD_EXCEEDED</code>, <code>PAY_ENUM_DAILY_LIMIT_PURPOSE_CODE_INVALID</code>, <code>PAY_ENUM_DAILY_LIMIT_PER_PAYEE_INVALID</code>, <code>PAY_ENUM_NO_MATCH_THRESHOLD_INVALID</code>, <code>PAY_ENUM_CHECK_NO_MATCH_THRESHOLD_AFTER_INVALID</code>, <code>PAY_BACKFILL_MAX_RECORD_COUNT_EXCEEDED</code>.</p>\n<p>System errors: <code>PAY_NPP_GATEWAY_ERROR</code>, <code>PAY_NPP_GATEWAY_TIMEOUT</code>, <code>PAY_CPL_GATEWAY_TIMEOUT</code>, <code>PAY_OBJ_CREATE_ERROR</code>, <code>PAY_UNEXPECTED_ERROR</code>.</p>",
                    "example": "PAY_BSB_INVALID",
                    "default": "PAY_BSB_INVALID",
                    "maxLength": 80,
                    "pattern": "^PAY_[A-Z0-9_]{1,76}$"
                  },
                  {
                    "name": "errorMessage",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — More detailed description of the specific error which may include information from the specific request. Intended for logs and developer troubleshooting — show <code>cxResultMessage</code> to end users, not this text.</p>",
                    "example": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "default": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "maxLength": 500,
                    "pattern": "^[ -~]{1,500}$"
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ErrorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "504",
        "description": "<p><strong>504 Gateway Timeout.</strong> An upstream service did not respond in time. Unlike a 502, the outcome is genuinely unknown — the validation may still have been recorded. Re-send with the same <code>accountValidationUniqueId</code> rather than a new one so the original record is reused, or call <strong>Get Account Validation by Id</strong> first to see whether a result already exists.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"traceId\":\"0HN7GQ2L4K9AB-00000009\",\"errors\":[{\"errorCode\":\"PAY_NPP_GATEWAY_TIMEOUT\",\"errorMessage\":\"The upstream gateway did not respond within the expected time.\"}]}",
            "description": "<p>The body returned with a 400, 401 or 500 response.</p>",
            "customType": "ErrorResponse",
            "schema": [
              {
                "name": "traceId",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — Unique id for logging, generated per request. Always log it on a failure — it is the fastest way for Monoova support to find the failing call.</p>",
                "example": "0HN7GQ2L4K9AB-00000003",
                "default": "0HN7GQ2L4K9AB-00000003",
                "maxLength": 100,
                "pattern": "^[a-zA-Z0-9_.:-]{1,100}$"
              },
              {
                "name": "errors",
                "kind": "optional",
                "type": "array",
                "nullable": true,
                "description": "<p><strong>Optional</strong> — One entry per problem found with the request. A single call can fail several validations at once, so handle the array rather than only its first entry.</p>",
                "modelRef": "#/components/schemas/ErrorDetail",
                "customType": "ErrorDetail[]",
                "schema": [
                  {
                    "name": "errorCode",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — Monoova error code — a stable, uppercase, <code>PAY_</code>-prefixed token to branch your error handling on. Do not parse <code>errorMessage</code> instead; its wording can change.</p>\n<p>Request and format errors: <code>PAY_REQ_BODY_INVALID</code>, <code>PAY_REQUEST_EMPTY</code>, <code>PAY_VERSION_INVALID</code>, <code>PAY_VERSION_UNSUPPORTED</code>, <code>PAY_VALIDATION_ERROR</code>, <code>PAY_INPUT_INJECTION_DETECTED</code>.</p>\n<p>Field errors: <code>PAY_BSB_REQUIRED</code>, <code>PAY_BSB_INVALID</code>, <code>PAY_ACCOUNT_NUMBER_REQUIRED</code>, <code>PAY_ACCOUNT_NUMBER_INVALID</code>, <code>PAY_ACCOUNT_NAME_REQUIRED</code>, <code>PAY_ACCOUNT_NAME_INVALID</code>, <code>PAY_BSB_AND_ACCOUNT_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_REQUIRED</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_INVALID</code>, <code>PAY_ACCOUNT_VALIDATION_UNIQUE_ID_IN_USE</code>, <code>PAY_ACCOUNT_LOOKUP_ID_INVALID</code>, <code>PAY_SUBMERCHANT_ID_INVALID</code>, <code>PAY_ACCTID_REQUIRED</code>, <code>PAY_ACCTID_INVALID</code>, <code>PAY_PURPOSE_CODE_REQUIRED</code>, <code>PAY_PURPOSE_CODE_INVALID</code>, <code>PAY_ALIAS_TYPE_REQUIRED</code>, <code>PAY_ALIAS_TYPE_INVALID</code>, <code>PAY_ALIAS_VALUE_REQUIRED</code>, <code>PAY_ALIAS_VALUE_INVALID</code>, <code>PAY_PAYID_TYPE_REQUIRED</code>, <code>PAY_PAYID_TYPE_INVALID</code>, <code>PAY_PAYID_VALUE_REQUIRED</code>, <code>PAY_PAYID_VALUE_INVALID</code>, <code>PAY_PAYID_NOT_FOUND</code>.</p>\n<p>Filter and paging errors: <code>PAY_CRTD_STARTDATE_INVALID</code>, <code>PAY_CRTD_ENDDATE_INVALID</code>, <code>PAY_MDFD_STARTDATE_INVALID</code>, <code>PAY_MDFD_ENDDATE_INVALID</code>, <code>PAY_PG_SZ_INVALID</code>, <code>PAY_PG_NUM_INVALID</code>, <code>PAY_ORDER_BY_INVALID</code>.</p>\n<p>Configuration and limit errors: <code>PAY_ACCOUNT_VALIDATION_NOT_ENABLED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_CONFIGURED</code>, <code>PAY_ACCOUNT_VALIDATION_SUBMERCHANT_NOT_ASSOCIATED</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_FOUND_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_NOT_SUCCESSFUL_ERROR</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS</code>, <code>PAY_ACCOUNT_VALIDATION_TOO_MANY_REQUESTS_FOR_PAYEE</code>, <code>PAY_ACCOUNT_VALIDATION_NO_MATCH_THRESHOLD_EXCEEDED</code>, <code>PAY_ENUM_DAILY_LIMIT_PURPOSE_CODE_INVALID</code>, <code>PAY_ENUM_DAILY_LIMIT_PER_PAYEE_INVALID</code>, <code>PAY_ENUM_NO_MATCH_THRESHOLD_INVALID</code>, <code>PAY_ENUM_CHECK_NO_MATCH_THRESHOLD_AFTER_INVALID</code>, <code>PAY_BACKFILL_MAX_RECORD_COUNT_EXCEEDED</code>.</p>\n<p>System errors: <code>PAY_NPP_GATEWAY_ERROR</code>, <code>PAY_NPP_GATEWAY_TIMEOUT</code>, <code>PAY_CPL_GATEWAY_TIMEOUT</code>, <code>PAY_OBJ_CREATE_ERROR</code>, <code>PAY_UNEXPECTED_ERROR</code>.</p>",
                    "example": "PAY_BSB_INVALID",
                    "default": "PAY_BSB_INVALID",
                    "maxLength": 80,
                    "pattern": "^PAY_[A-Z0-9_]{1,76}$"
                  },
                  {
                    "name": "errorMessage",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p><strong>Optional</strong> — More detailed description of the specific error which may include information from the specific request. Intended for logs and developer troubleshooting — show <code>cxResultMessage</code> to end users, not this text.</p>",
                    "example": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "default": "The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.",
                    "maxLength": 500,
                    "pattern": "^[ -~]{1,500}$"
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ErrorResponse",
            "isExpanded": true
          }
        ]
      }
    ],
    "hasXCodeSamples": false,
    "examples": {
      "languages": [
        {
          "id": "iFHoGC8uRYyBwGbMtfAmt",
          "language": "curl",
          "label": "cURL",
          "code": "curl --request POST \\\n     --url https://sand-api.monoova.com/au/cop/payman-v2/AccountValidation \\\n     --header 'accept: application/json' \\\n     --header 'content-type: application/json' \\\n     --data '{\n     \"accountValidationUniqueId\": \"AV-2026-0923-000185\",\n     \"subMerchantId\": \"SUBM-0001234\",\n     \"bsb\": \"032-002\",\n     \"accountNumber\": \"123456789\",\n     \"accountName\": \"Monoova Payments Pty Ltd\",\n     \"requestPurposeCode\": \"VADR\"\n     }'"
        },
        {
          "id": "VZOXnc0mtkzFIn0QdCczB",
          "language": "javascript",
          "label": "javascript",
          "code": "var myHeaders = new Headers();\nmyHeaders.append(\"accept\", \"application/json\");\nmyHeaders.append(\"content-type\", \"application/json\");\n\nvar raw = JSON.stringify({\n   \"accountValidationUniqueId\": \"AV-2026-0923-000185\",\n   \"subMerchantId\": \"SUBM-0001234\",\n   \"bsb\": \"032-002\",\n   \"accountNumber\": \"123456789\",\n   \"accountName\": \"Monoova Payments Pty Ltd\",\n   \"requestPurposeCode\": \"VADR\"\n});\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   body: raw,\n   redirect: 'follow'\n};\n\nfetch(\"https://sand-api.monoova.com/au/cop/payman-v2/AccountValidation\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));"
        },
        {
          "id": "NxA3X29ytTcugAw-q_N0G",
          "language": "ruby",
          "label": "Ruby",
          "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://sand-api.monoova.com/au/cop/payman-v2/AccountValidation\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"accept\"] = \"application/json\"\nrequest[\"content-type\"] = \"application/json\"\nrequest.body = JSON.dump({\n   \"accountValidationUniqueId\": \"AV-2026-0923-000185\",\n   \"subMerchantId\": \"SUBM-0001234\",\n   \"bsb\": \"032-002\",\n   \"accountNumber\": \"123456789\",\n   \"accountName\": \"Monoova Payments Pty Ltd\",\n   \"requestPurposeCode\": \"VADR\"\n})\n\nresponse = https.request(request)\nputs response.read_body\n"
        },
        {
          "id": "Gd_QUp2jhBj2MMmMrgs7E",
          "language": "python",
          "label": "Python",
          "code": "import requests\nimport json\n\nurl = \"https://sand-api.monoova.com/au/cop/payman-v2/AccountValidation\"\n\npayload = json.dumps({\n   \"accountValidationUniqueId\": \"AV-2026-0923-000185\",\n   \"subMerchantId\": \"SUBM-0001234\",\n   \"bsb\": \"032-002\",\n   \"accountNumber\": \"123456789\",\n   \"accountName\": \"Monoova Payments Pty Ltd\",\n   \"requestPurposeCode\": \"VADR\"\n})\nheaders = {\n   'accept': 'application/json',\n   'content-type': 'application/json'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n"
        }
      ],
      "selectedLanguageId": "iFHoGC8uRYyBwGbMtfAmt"
    },
    "results": {
      "languages": [
        {
          "id": "response-0-200",
          "language": "200",
          "code": "// 200 OK. The validation was processed. Read resultData.resultCode for the machine outcome and resultData.cxResultMessage for the wording to show the payer. A 200 confirms the request was accepted and answered — it does not by itself mean the name matched.\n{\n  \"traceId\": \"0HN7GQ2L4K9AB-00000001\",\n  \"resultData\": {\n    \"cxResultIconCode\": \"TICK\",\n    \"cxResultMessage\": \"The account name matches the account details provided.\",\n    \"cxResultDisplayAccountName\": \"Monoova Payments Pty Ltd\",\n    \"resultCode\": \"MTCH\",\n    \"accountValidationUniqueId\": \"AV-2026-0923-000185\",\n    \"subMerchantId\": \"SUBM-0001234\"\n  }\n}"
        },
        {
          "id": "response-1-400",
          "language": "400",
          "code": "// 400 Bad Request. The request failed validation before it reached the name-matching service. The errors array names each failing field through errorCode, with a human-readable errorMessage. Correct the values and resend — retrying the identical request returns the same 400.\n{\n  \"traceId\": \"0HN7GQ2L4K9AB-00000003\",\n  \"errors\": [\n    {\n      \"errorCode\": \"PAY_BSB_INVALID\",\n      \"errorMessage\": \"The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.\"\n    }\n  ]\n}"
        },
        {
          "id": "response-2-401",
          "language": "401",
          "code": "// 401 Unauthorized. The bearer token is missing, malformed, or has expired. Generate a new token from the Monoova developer portal and send it in the Authorization header as Bearer &#x3C;token>. Do not retry with the same token.\n{\n  \"traceId\": \"0HN7GQ2L4K9AB-00000003\",\n  \"errors\": [\n    {\n      \"errorCode\": \"PAY_BSB_INVALID\",\n      \"errorMessage\": \"The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.\"\n    }\n  ]\n}"
        },
        {
          "id": "response-3-403",
          "language": "403",
          "code": "// 403 Forbidden. The token was accepted, but the account behind it is not permitted to perform this call — Confirmation of Payee is not enabled on the account, is not yet configured, or the subMerchantId supplied is not associated with it. This is an entitlement problem, not a data problem: the same request will keep returning 403 until Monoova updates the account configuration. Do not retry automatically.\n{\n  \"traceId\": \"0HN7GQ2L4K9AB-00000003\",\n  \"errors\": [\n    {\n      \"errorCode\": \"PAY_BSB_INVALID\",\n      \"errorMessage\": \"The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.\"\n    }\n  ]\n}"
        },
        {
          "id": "response-4-404",
          "language": "404",
          "code": "// 404 Not Found. No validation matches the id in the path — either it was never created, or it belongs to a different account. Check the value against the accountValidationUniqueId sent on the create request. A filter search that matches nothing returns 200 with an empty resultData array instead of a 404.\n{\n  \"traceId\": \"0HN7GQ2L4K9AB-00000003\",\n  \"errors\": [\n    {\n      \"errorCode\": \"PAY_BSB_INVALID\",\n      \"errorMessage\": \"The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.\"\n    }\n  ]\n}"
        },
        {
          "id": "response-5-500",
          "language": "500",
          "code": "// 500 Internal Server Error. An unexpected error occurred while processing an otherwise valid request. The request may or may not have been recorded, so re-send it with the same accountValidationUniqueId rather than a new one. Quote the traceId when contacting Monoova support.\n{\n  \"traceId\": \"0HN7GQ2L4K9AB-00000003\",\n  \"errors\": [\n    {\n      \"errorCode\": \"PAY_BSB_INVALID\",\n      \"errorMessage\": \"The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.\"\n    }\n  ]\n}"
        },
        {
          "id": "response-6-502",
          "language": "502",
          "code": "// 502 Bad Gateway. The request was valid, but an upstream service — the NPP gateway that performs the name match — returned an error, so no result could be produced. The validation was not completed. Retry with the same accountValidationUniqueId after a short delay, and escalate with the traceId if it persists.\n{\n  \"traceId\": \"0HN7GQ2L4K9AB-00000003\",\n  \"errors\": [\n    {\n      \"errorCode\": \"PAY_BSB_INVALID\",\n      \"errorMessage\": \"The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.\"\n    }\n  ]\n}"
        },
        {
          "id": "response-7-504",
          "language": "504",
          "code": "// 504 Gateway Timeout. An upstream service did not respond in time. Unlike a 502, the outcome is genuinely unknown — the validation may still have been recorded. Re-send with the same accountValidationUniqueId rather than a new one so the original record is reused, or call Get Account Validation by Id first to see whether a result already exists.\n{\n  \"traceId\": \"0HN7GQ2L4K9AB-00000003\",\n  \"errors\": [\n    {\n      \"errorCode\": \"PAY_BSB_INVALID\",\n      \"errorMessage\": \"The field bsb must match the pattern ^[0-9]{3}-[0-9]{3}$.\"\n    }\n  ]\n}"
        }
      ],
      "selectedLanguageId": "response-0-200"
    }
  },
  "children": [
    {
      "text": ""
    }
  ]
}