Skip to content
API DocsDocs

PayID Identity Verification

The identity data PayID requires, with request and response examples

6 min readUpdated Oct 5, 2026

Payment Method Identifier: PAY_ID | Payment Type: BANK_TRANSFER

A PayID payment or payout may require the customer's identity data before it can continue. The transaction then returns apmResponseData.actionType: KYC_REQUIRED with an iframeUrl, and the data is submitted to the KYC endpoint of that transaction.

This page lists the data PayID requires and the examples for it. The flow itself, the two form options and the result handling are the same for every payment method and are documented on Identity Verification.

#Required Data

The data is submitted as kycData. Every constraint below is checked before the data reaches the provider; a value that fails returns an input error against the field named in the table, and the transaction stays open for a corrected submission.

Person (kycData.person)

FieldTypeRequiredDescription
firstNameStringYesNon-blank. Sent to the provider together with lastName as the customer's legal name
lastNameStringYesNon-blank
dateOfBirthStringYesYYYY-MM-DD. The customer must be at least 18 years old
genderEnumYesMALE, FEMALE or OTHER
middleNameStringNoAccepted but not sent to the provider
nationalityStringNoAccepted but not sent to the provider

Address (kycData.address)

FieldTypeRequiredDescription
line1StringYesNon-blank
cityStringYesNon-blank
stateStringYesNon-blank
postcodeStringYesNon-blank
countryStringYesISO 3166-1 alpha-2. Any country is accepted, not only AU
line2StringNo

Document (kycData.documents)

Exactly one document is accepted. A request with none, or with more than one, returns an error against documents.

FieldTypeRequiredDescription
typeEnumYesPASSPORT, DRIVING_LICENCE or NATIONAL_ID
countryStringYesISO 3166-1 alpha-2 of the issuing country, independent of the address country
numberStringYesMust contain at least one letter or digit
imagesArrayYesExactly one FRONT image and at most one BACK image. No other side is accepted
customTypeStringNoNot supported: a request carrying it is rejected

Image (kycData.documents[0].images[])

FieldTypeRequiredDescription
sideEnumYesFRONT or BACK
dataStringYesBase64-encoded image, up to 5 MB decoded. The format is detected from the content and must be JPEG, PNG, GIF, WEBP or BMP
contentTypeStringNoInformational: the format is taken from the image content, not from this field

kycData.additionalFields is not supported for PayID; a request carrying any entry is rejected.

#Request Example

{
  "kycData": {
    "person": {
      "firstName": "Alex",
      "lastName": "Example",
      "dateOfBirth": "1990-05-01",
      "gender": "FEMALE"
    },
    "address": {
      "line1": "1 Example Street",
      "line2": "Unit 3",
      "city": "Sydney",
      "state": "NSW",
      "postcode": "2000",
      "country": "AU"
    },
    "documents": [
      {
        "type": "DRIVING_LICENCE",
        "country": "AU",
        "number": "EXAMPLE123",
        "images": [
          { "side": "FRONT", "contentType": "image/png", "data": "iVBORw0KGgo..." },
          { "side": "BACK", "contentType": "image/png", "data": "iVBORw0KGgo..." }
        ]
      }
    ]
  }
}

Submit it to Complete APM Payment KYC for a payment, or Complete APM Payout KYC for a payout, with the transactionId of the waiting transaction.

#Input Error Example

Each error names the field it belongs to and carries a customer-facing message in messagesByLanguage. Display it next to that field and submit the corrected data for the same transaction.

{
  "requestId": "original-payment-request",
  "transactionId": "123456789",
  "transactionStatus": "CUSTOMER_VERIFICATION",
  "paymentType": "APM",
  "kycResponseData": {
    "errors": [
      {
        "code": "KYC_INVALID_FIELD",
        "field": "person.dateOfBirth",
        "messagesByLanguage": {
          "en": "Enter a valid date of birth. You must be at least 18 years old.",
          "es": "Introduce una fecha de nacimiento válida. Debes tener al menos 18 años.",
          "pt": "Informe uma data de nascimento válida. Você deve ter pelo menos 18 anos."
        }
      },
      {
        "code": "KYC_INVALID_IMAGE",
        "field": "documents[0].images[0].data",
        "messagesByLanguage": {
          "en": "Upload a valid JPEG, PNG, GIF, WEBP or BMP image.",
          "es": "Sube una imagen JPEG, PNG, GIF, WEBP o BMP válida.",
          "pt": "Envie uma imagem JPEG, PNG, GIF, WEBP ou BMP válida."
        }
      }
    ]
  }
}
Error codeRaised for
KYC_INVALID_FIELDA missing or invalid value in person, address or the document, an unsupported document type, a document count other than one, or an entry in additionalFields
KYC_INVALID_IMAGEAn image that is not JPEG, PNG, GIF, WEBP or BMP, or a set of images other than one FRONT and at most one BACK
KYC_IMAGE_TOO_LARGEAn image above 5 MB decoded
KYC_VALIDATION_FAILEDThe submission was rejected as a whole rather than at one field

#Verification Form

The form behind iframeUrl collects exactly the data above, in two steps:

  1. Legal details — first name, last name, date of birth, gender, address line, optional second line, city, state, postcode and country. Australia is listed first.
  2. ID document — document type, issuing country, document number and a photo of the front. The issuing country follows the address country whenever that changes, and the customer can pick another one. A photo of the back is offered, optionally, for a driving licence and a national ID.

Before submitting, the form checks the required fields and the image formats. A photo larger than 1200 pixels on a side, or larger than 5 MB, is converted in the browser to a JPEG of at most 1200 pixels.

#See Also

Was this helpful?