PayID Identity Verification
The identity data PayID requires, with request and response examples
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)
| Field | Type | Required | Description |
|---|---|---|---|
firstName | String | Yes | Non-blank. Sent to the provider together with lastName as the customer's legal name |
lastName | String | Yes | Non-blank |
dateOfBirth | String | Yes | YYYY-MM-DD. The customer must be at least 18 years old |
gender | Enum | Yes | MALE, FEMALE or OTHER |
middleName | String | No | Accepted but not sent to the provider |
nationality | String | No | Accepted but not sent to the provider |
Address (kycData.address)
| Field | Type | Required | Description |
|---|---|---|---|
line1 | String | Yes | Non-blank |
city | String | Yes | Non-blank |
state | String | Yes | Non-blank |
postcode | String | Yes | Non-blank |
country | String | Yes | ISO 3166-1 alpha-2. Any country is accepted, not only AU |
line2 | String | No |
Document (kycData.documents)
Exactly one document is accepted. A request with none, or with more than one, returns an error against documents.
| Field | Type | Required | Description |
|---|---|---|---|
type | Enum | Yes | PASSPORT, DRIVING_LICENCE or NATIONAL_ID |
country | String | Yes | ISO 3166-1 alpha-2 of the issuing country, independent of the address country |
number | String | Yes | Must contain at least one letter or digit |
images | Array | Yes | Exactly one FRONT image and at most one BACK image. No other side is accepted |
customType | String | No | Not supported: a request carrying it is rejected |
Image (kycData.documents[0].images[])
| Field | Type | Required | Description |
|---|---|---|---|
side | Enum | Yes | FRONT or BACK |
data | String | Yes | Base64-encoded image, up to 5 MB decoded. The format is detected from the content and must be JPEG, PNG, GIF, WEBP or BMP |
contentType | String | No | Informational: 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 code | Raised for |
|---|---|
KYC_INVALID_FIELD | A 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_IMAGE | An 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_LARGE | An image above 5 MB decoded |
KYC_VALIDATION_FAILED | The 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:
- Legal details — first name, last name, date of birth, gender, address line, optional second line, city, state, postcode and country. Australia is listed first.
- 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
- Identity Verification — The flow, the two form options and the result handling
- PayID Payment Payload — PayID payment fields
- PayID Payout Payload — PayID payout fields