---
title: Initiate NPP Verification Transaction
slug: api/initiate-npp-verification-transaction
docTags: 
createdAt: 2026-09-15T06:22:27.331Z
---

{
  "id": "g9NxCzVIchyysa_DejIR1",
  "type": "api-oas-v2",
  "data": {
    "method": "POST",
    "url": "https://api.mpay.com.au/verify/v2/aba/initiate",
    "servers": [
      {
        "url": "https://api.mpay.com.au/verify/v2/aba/initiate",
        "description": "Production URL"
      },
      {
        "url": "https://api.m-pay.com.au/verify/v2/aba/initiate",
        "description": "Sandbox URL"
      }
    ],
    "name": "Initiate NPP Verification Transaction",
    "description": "<p>The purpose of this API is to verify access to a bank account or PayID details, which has several compliance and risk-mitigation applications.</p>\n<p>If the NppCreditPayID method is used, the API response will include the PayID name. In scenarios where the PayID is either unidentified or not configured, you can verify if the payer/payee has access to the account using a secret code.</p>\n<p>By passing the BSB and account number, the account verification API will credit a target bank account with a secret code in the remitter name and lodgement reference. This code can only be viewed by someone who has access to the target bank account by accessing and viewing their bank statement. The code can then be submitted against our records, and if it matches, Monoova will persist a verification token against that specific account.</p>\n<p><strong>How it works</strong></p>\n<ul>\n<li>1: Initiate a verification transaction on the target bank account.</li>\n<li>2: Monoova will credit the target bank account with a 1c amount and a secret remitter code (may take up to 48 hours for the code to show on the target bank account).</li>\n</ul>\n<p> </p>\n<p>For NPP verification transactions, the secret code can also be found in the lodgement reference.</p>\n<ul>\n<li>1: Owner of the target bank account views the statement to obtain the secret code.</li>\n<li>2: Submit the secret code to Monoova via POST verify/v1/aba/validate. In the sandbox, use code \"555555\" to test successful validation of an account verification.</li>\n<li>3: If the submitted code and amount are correct, the target bank account is designated as verified.</li>\n</ul>\n<p> </p>\n<p>Initiates a verification transaction against a designated bank account or PayID via NPP rail using the v2 endpoint.</p>",
    "contentType": "application/json",
    "request": {
      "pathParameters": [],
      "headerParameters": [
        {
          "name": "accept",
          "type": "string",
          "kind": "optional",
          "description": "Generated from available response content types",
          "enum": [
            "application/json"
          ],
          "default": "application/json"
        }
      ],
      "queryParameters": [],
      "bodyDataParameters": [
        {
          "kind": "required",
          "name": "body",
          "type": "object",
          "description": "Request payload used to initiate an NPP verification transaction.",
          "customType": "verifyInitiateBody_V2",
          "schema": [
            {
              "name": "creditMethod",
              "kind": "required",
              "type": "string<NppCreditBankAccount | NppCreditPayId>",
              "description": "<p><strong>Required.</strong> Credit method. Possible values: 'NppCreditBankAccount' or 'NppCreditPayId'. This value determines which of the account fields below are <strong>Conditional</strong> and must be supplied.</p>",
              "example": "NppCreditBankAccount",
              "default": "NppCreditBankAccount",
              "enum": [
                "NppCreditBankAccount",
                "NppCreditPayId"
              ],
              "pattern": "^(NppCreditBankAccount|NppCreditPayId)$"
            },
            {
              "name": "bsb",
              "kind": "optional",
              "type": "string",
              "description": "<p><strong>Conditional.</strong> BSB number of associated bank account. BSB format is '999-999'. Required when creditMethod is 'NppCreditBankAccount'.</p>",
              "example": "032-001",
              "default": "032-001",
              "pattern": "^\\d{3}-\\d{3}$"
            },
            {
              "name": "bankAccountNumber",
              "kind": "optional",
              "type": "string",
              "description": "<p><strong>Conditional.</strong> Bank account number of associated bank account. Required when creditMethod is 'NppCreditBankAccount'.</p>",
              "example": "123456789",
              "default": "123456789",
              "pattern": "^\\d{5,10}$"
            },
            {
              "name": "accountName",
              "kind": "optional",
              "type": "string",
              "description": "<p><strong>Optional.</strong> Bank account title or name of associated bank account.</p>",
              "example": "Acme Pty Ltd",
              "default": "Acme Pty Ltd",
              "maxLength": 32,
              "pattern": "^[A-Za-z0-9 .,'&\\-\\/]{1,32}$"
            },
            {
              "name": "payId",
              "kind": "optional",
              "type": "string",
              "description": "<p><strong>Conditional.</strong> PayId Identifier of the Payee. Required when creditMethod is 'NppCreditPayId'.</p>",
              "example": "accounts@acme.com.au",
              "default": "accounts@acme.com.au",
              "maxLength": 256,
              "pattern": "^.{1,256}$"
            },
            {
              "name": "payIdType",
              "kind": "optional",
              "type": "string<ABN | Email | PhoneNumber | OrganisationId | ACN>",
              "description": "<p><strong>Conditional.</strong> PayId Type. Possible values: ABN, Email, PhoneNumber, OrganisationId, ACN. Required when creditMethod is 'NppCreditPayId'.</p>",
              "example": "Email",
              "default": "Email",
              "enum": [
                "ABN",
                "Email",
                "PhoneNumber",
                "OrganisationId",
                "ACN"
              ],
              "pattern": "^(ABN|Email|PhoneNumber|OrganisationId|ACN)$"
            },
            {
              "name": "remitter",
              "kind": "optional",
              "type": "string",
              "description": "<p><strong>Optional.</strong> The code contained in the remitter name field.</p>",
              "example": "ACME PTY LTD",
              "default": "ACME PTY LTD",
              "maxLength": 16,
              "pattern": "^[A-Za-z0-9 .,'&\\-]{1,16}$"
            },
            {
              "name": "verificationIdentifier",
              "kind": "optional",
              "type": "string",
              "description": "<p><strong>Optional.</strong> A description supplied by the VerificationSigninMerchant to distinguish this entry from others in a listing. This could be an encoded string from the signon merchant.</p>",
              "example": "SUPPLIER-ONBOARD-4821",
              "default": "SUPPLIER-ONBOARD-4821",
              "maxLength": 128,
              "pattern": "^.{1,128}$"
            },
            {
              "name": "accountValidationUniqueId",
              "kind": "optional",
              "type": "string",
              "description": "<p><strong>Optional.</strong> Unique identifier that you supply to correlate this account validation request with your own records.</p>",
              "example": "AVU-2026-0001547",
              "default": "AVU-2026-0001547",
              "maxLength": 64,
              "pattern": "^[A-Za-z0-9\\-]{1,64}$"
            }
          ],
          "modelRef": "#/components/schemas/verifyInitiateBody_V2",
          "isExpanded": true
        }
      ],
      "formDataParameters": [],
      "oAuthParameters": [
        {
          "id": "basicAuth",
          "name": "basicAuth",
          "kind": "optional",
          "type": "http",
          "description": "<p>To authenticate using basic authentication, generate an API key and pass it as the username. No password is required.</p>",
          "scheme": "basic"
        }
      ],
      "cookieParameters": []
    },
    "responses": [
      {
        "statusCode": "200",
        "description": "Success. The verification transaction was initiated successfully.",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "description": "Response returned when an NPP verification transaction is initiated.",
            "customType": "verifyAccountInitiateResponse_V2",
            "schema": [
              {
                "name": "token",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> The text(GUID) that identifies the token. Supply this value to verify/v1/aba/validate and verify/v1/aba/get/{token}.</p>",
                "example": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
                "default": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
                "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
              },
              {
                "name": "feeAmountExGst",
                "kind": "optional",
                "type": "number<double>",
                "description": "<p><strong>Required.</strong> The fee amount excluding GST.</p>",
                "example": 0.3,
                "default": 0.3,
                "format": "double",
                "minimum": 0,
                "pattern": "^\\d+(\\.\\d{1,2})?$",
                "multipleOf": 0.01
              },
              {
                "name": "feeAmountIncGst",
                "kind": "optional",
                "type": "number<double>",
                "description": "<p><strong>Required.</strong> The fee amount including GST.</p>",
                "example": 0.33,
                "default": 0.33,
                "format": "double",
                "minimum": 0,
                "pattern": "^\\d+(\\.\\d{1,2})?$",
                "multipleOf": 0.01
              },
              {
                "name": "feeAmountGstComp",
                "kind": "optional",
                "type": "number<double>",
                "description": "<p><strong>Required.</strong> The GST Component of the fee amount.</p>",
                "example": 0.03,
                "default": 0.03,
                "format": "double",
                "minimum": 0,
                "pattern": "^\\d+(\\.\\d{1,2})?$",
                "multipleOf": 0.01
              },
              {
                "name": "ownerName",
                "kind": "optional",
                "type": "string",
                "nullable": true,
                "description": "<p><strong>Conditional.</strong> This is the PayId Name set up by account holder. When creditMethod is 'NppCreditBankAccount' this field is always Null.</p>",
                "example": "Acme Pty Ltd",
                "default": "Acme Pty Ltd",
                "pattern": "^.{0,140}$"
              },
              {
                "name": "durationMs",
                "kind": "optional",
                "type": "integer<int32>",
                "description": "<p><strong>Required.</strong> This value represents the total time in milliseconds that the Platform took to process the request.</p>",
                "example": 128,
                "default": 128,
                "format": "int32",
                "minimum": 0,
                "pattern": "^[0-9]{1,10}$"
              },
              {
                "name": "status",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> This is the status of the request. A code of 'Ok' indicates no errors.</p>",
                "example": "Ok",
                "default": "Ok",
                "pattern": "^[A-Za-z0-9]{1,32}$"
              },
              {
                "name": "statusDescription",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> This is a description of the status. If an 'Ok' status is returned, then this will be 'Operation completed successfully'.</p>",
                "example": "Operation completed successfully",
                "default": "Operation completed successfully",
                "pattern": "^.{0,512}$"
              }
            ],
            "modelRef": "#/components/schemas/verifyAccountInitiateResponse_V2",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "400",
        "description": "<p>Bad Request. The request could not be processed because one or more fields are missing, malformed, or failed validation. Check <code>statusDescription</code> for the specific field or rule that failed.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"durationMs\":12,\"status\":\"Error\",\"statusDescription\":\"Validation failed: 'bsb' must be in the format '000-000'.\"}",
            "description": "Standard error envelope returned by every Account Verification endpoint.",
            "customType": "errorResponse",
            "schema": [
              {
                "name": "durationMs",
                "kind": "optional",
                "type": "integer<int32>",
                "description": "<p><strong>Required.</strong> This value represents the total time in milliseconds that the Platform took to process the request.</p>",
                "example": 12,
                "default": 12,
                "format": "int32",
                "minimum": 0,
                "pattern": "^[0-9]{1,10}$"
              },
              {
                "name": "status",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> This is the status of the request. A code of 'Ok' indicates no errors. Any other code indicates that the request failed.</p>",
                "example": "Error",
                "default": "Error",
                "pattern": "^[A-Za-z0-9]{1,32}$"
              },
              {
                "name": "statusDescription",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> This is a description of the status. When the request fails, this explains which field or rule caused the failure.</p>",
                "example": "Validation failed: 'bsb' must be in the format '000-000'.",
                "default": "Validation failed: 'bsb' must be in the format '000-000'.",
                "pattern": "^.{0,512}$"
              }
            ],
            "modelRef": "#/components/schemas/errorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "401",
        "description": "<p>Unauthorized. The API key was missing, malformed, or is not valid for this environment. Pass your API key as the basic authentication username with no password.</p>",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"durationMs\":4,\"status\":\"Unauthorized\",\"statusDescription\":\"Authentication failed. Supply a valid API key as the basic authentication username.\"}",
            "description": "Standard error envelope returned by every Account Verification endpoint.",
            "customType": "errorResponse",
            "schema": [
              {
                "name": "durationMs",
                "kind": "optional",
                "type": "integer<int32>",
                "description": "<p><strong>Required.</strong> This value represents the total time in milliseconds that the Platform took to process the request.</p>",
                "example": 12,
                "default": 12,
                "format": "int32",
                "minimum": 0,
                "pattern": "^[0-9]{1,10}$"
              },
              {
                "name": "status",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> This is the status of the request. A code of 'Ok' indicates no errors. Any other code indicates that the request failed.</p>",
                "example": "Error",
                "default": "Error",
                "pattern": "^[A-Za-z0-9]{1,32}$"
              },
              {
                "name": "statusDescription",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> This is a description of the status. When the request fails, this explains which field or rule caused the failure.</p>",
                "example": "Validation failed: 'bsb' must be in the format '000-000'.",
                "default": "Validation failed: 'bsb' must be in the format '000-000'.",
                "pattern": "^.{0,512}$"
              }
            ],
            "modelRef": "#/components/schemas/errorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "500",
        "description": "Internal Server Error. An unexpected error occurred while processing the request. The request was not completed and can be safely retried.",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"durationMs\":1503,\"status\":\"Error\",\"statusDescription\":\"An unexpected error occurred while processing the request. Please try again later.\"}",
            "description": "Standard error envelope returned by every Account Verification endpoint.",
            "customType": "errorResponse",
            "schema": [
              {
                "name": "durationMs",
                "kind": "optional",
                "type": "integer<int32>",
                "description": "<p><strong>Required.</strong> This value represents the total time in milliseconds that the Platform took to process the request.</p>",
                "example": 12,
                "default": 12,
                "format": "int32",
                "minimum": 0,
                "pattern": "^[0-9]{1,10}$"
              },
              {
                "name": "status",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> This is the status of the request. A code of 'Ok' indicates no errors. Any other code indicates that the request failed.</p>",
                "example": "Error",
                "default": "Error",
                "pattern": "^[A-Za-z0-9]{1,32}$"
              },
              {
                "name": "statusDescription",
                "kind": "optional",
                "type": "string",
                "description": "<p><strong>Required.</strong> This is a description of the status. When the request fails, this explains which field or rule caused the failure.</p>",
                "example": "Validation failed: 'bsb' must be in the format '000-000'.",
                "default": "Validation failed: 'bsb' must be in the format '000-000'.",
                "pattern": "^.{0,512}$"
              }
            ],
            "modelRef": "#/components/schemas/errorResponse",
            "isExpanded": true
          }
        ]
      }
    ],
    "hasXCodeSamples": false,
    "examples": {
      "languages": [
        {
          "id": "EYZxhwRH29t4MyUEhcTsP",
          "language": "curl",
          "label": "cURL",
          "code": "curl --request POST \\\n     --url https://api.mpay.com.au/verify/v2/aba/initiate \\\n     --header 'accept: application/json' \\\n     --header 'content-type: application/json' \\\n     --data-raw '{\n     \"creditMethod\": \"NppCreditBankAccount\",\n     \"bsb\": \"032-001\",\n     \"bankAccountNumber\": \"123456789\",\n     \"accountName\": \"Acme Pty Ltd\",\n     \"payId\": \"accounts@acme.com.au\",\n     \"payIdType\": \"Email\",\n     \"remitter\": \"ACME PTY LTD\",\n     \"verificationIdentifier\": \"SUPPLIER-ONBOARD-4821\",\n     \"accountValidationUniqueId\": \"AVU-2026-0001547\"\n     }'"
        },
        {
          "id": "VnQFhlbXNWPqyObsDu3ET",
          "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   \"creditMethod\": \"NppCreditBankAccount\",\n   \"bsb\": \"032-001\",\n   \"bankAccountNumber\": \"123456789\",\n   \"accountName\": \"Acme Pty Ltd\",\n   \"payId\": \"accounts@acme.com.au\",\n   \"payIdType\": \"Email\",\n   \"remitter\": \"ACME PTY LTD\",\n   \"verificationIdentifier\": \"SUPPLIER-ONBOARD-4821\",\n   \"accountValidationUniqueId\": \"AVU-2026-0001547\"\n});\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   body: raw,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.mpay.com.au/verify/v2/aba/initiate\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));"
        },
        {
          "id": "0s4T-gALzi_zTrIBKoAqB",
          "language": "ruby",
          "label": "Ruby",
          "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.mpay.com.au/verify/v2/aba/initiate\")\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   \"creditMethod\": \"NppCreditBankAccount\",\n   \"bsb\": \"032-001\",\n   \"bankAccountNumber\": \"123456789\",\n   \"accountName\": \"Acme Pty Ltd\",\n   \"payId\": \"accounts@acme.com.au\",\n   \"payIdType\": \"Email\",\n   \"remitter\": \"ACME PTY LTD\",\n   \"verificationIdentifier\": \"SUPPLIER-ONBOARD-4821\",\n   \"accountValidationUniqueId\": \"AVU-2026-0001547\"\n})\n\nresponse = https.request(request)\nputs response.read_body\n"
        },
        {
          "id": "nKy0WIlp2xhYAxB5H5W-V",
          "language": "python",
          "label": "Python",
          "code": "import requests\nimport json\n\nurl = \"https://api.mpay.com.au/verify/v2/aba/initiate\"\n\npayload = json.dumps({\n   \"creditMethod\": \"NppCreditBankAccount\",\n   \"bsb\": \"032-001\",\n   \"bankAccountNumber\": \"123456789\",\n   \"accountName\": \"Acme Pty Ltd\",\n   \"payId\": \"accounts@acme.com.au\",\n   \"payIdType\": \"Email\",\n   \"remitter\": \"ACME PTY LTD\",\n   \"verificationIdentifier\": \"SUPPLIER-ONBOARD-4821\",\n   \"accountValidationUniqueId\": \"AVU-2026-0001547\"\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": "EYZxhwRH29t4MyUEhcTsP"
    },
    "results": {
      "languages": [
        {
          "id": "TprsG1CB1oOINmJPc6UTh",
          "language": "200",
          "code": "// Success. The verification transaction was initiated successfully.\n{\n  \"token\": \"3f2504e0-4f89-11d3-9a0c-0305e82c3301\",\n  \"feeAmountExGst\": 0.3,\n  \"feeAmountIncGst\": 0.33,\n  \"feeAmountGstComp\": 0.03,\n  \"ownerName\": \"Acme Pty Ltd\",\n  \"durationMs\": 128,\n  \"status\": \"Ok\",\n  \"statusDescription\": \"Operation completed successfully\"\n}"
        },
        {
          "id": "uIlo_DPnvPZxQok9zZlro",
          "language": "400",
          "code": "// Bad Request. The request could not be processed because one or more fields are missing, malformed, or failed validation. Check statusDescription for the specific field or rule that failed.\n{\n  \"durationMs\": 12,\n  \"status\": \"Error\",\n  \"statusDescription\": \"Validation failed: 'bsb' must be in the format '000-000'.\"\n}"
        },
        {
          "id": "Q7SZpDoZZagg1wB2Md16R",
          "language": "401",
          "code": "// Unauthorized. The API key was missing, malformed, or is not valid for this environment. Pass your API key as the basic authentication username with no password.\n{\n  \"durationMs\": 12,\n  \"status\": \"Error\",\n  \"statusDescription\": \"Validation failed: 'bsb' must be in the format '000-000'.\"\n}"
        },
        {
          "id": "Nn7wmGBinkWiO-xKRMAUq",
          "language": "500",
          "code": "// Internal Server Error. An unexpected error occurred while processing the request. The request was not completed and can be safely retried.\n{\n  \"durationMs\": 12,\n  \"status\": \"Error\",\n  \"statusDescription\": \"Validation failed: 'bsb' must be in the format '000-000'.\"\n}"
        }
      ],
      "selectedLanguageId": "TprsG1CB1oOINmJPc6UTh"
    }
  },
  "children": [
    {
      "text": ""
    }
  ]
}