Create KYC identifications
/kyc-identificationsPut a person through an identity check. Which person is decided by the credential you present.
KycidCmdConsumerKycidCmdDelegateKycidCmdManualKycidCmdSelfPermissions
merchantCustomers:updateRequires the `update` action on `merchantCustomers` for the supplied runtime context
Request body
This body is a typed union. Pick a variant to see its fields and a matching example.
typetype = "KycidCmdConsumer"merchantIdMchtIdrequiredThe merchant whose consumer this is. The check and the customer both belong to it.
Example mcht_9f2Kd8QpLzXw
emailAddressstringrequiredExample ada@example.com
phoneNumberstringrequiredE.164 format, e.g. +61400000000.
Example +61400000000
referenceCustomerIdstringYour own identifier for this customer, carried through to the customer record.
Example your-own-reference
customerVerifiedbooleanrequiredtrue where you have already verified the email address and phone number yourself, so the platform does not send codes.
Example true
Who a person says they are, and the documents that prove it.
typeenumrequiredKycidIdentificationAttributesA person's name, as it appears on their identity documents.
typeenumrequiredKycidNameAttributesgivenNamestringExample Ada Lovelace
middleNamestringExample Ada Lovelace
familyNamestringrequiredExample Ada Lovelace
dateOfBirthstring (date)Example 2026-08-19
Where the person lives. Send the componentised form where you have it, the bureaus match better on it.
typeenumrequiredKycidAddressAttributesaddressstringrequiredThe whole address on one line.
The same address in parts.
typeenumrequiredMchtAddressAttributesunitNumberstringUnit, shop or level, as written on the building. Free text, 12, Shop 4, Level 3. Omit where there is none.
streetNumberstringrequiredStreet number, including any range or letter, 34, 34A, 34-36.
streetNamestringrequiredStreet name, without the type, Smith, not Smith Street.
Example Ada Lovelace
streetTypestringStreet, Road, Avenue. Optional because not every address has one.
suburbstringSuburb. This is where Australia and South Africa keep what other countries call the city.
citystringCity. Required in New Zealand. In Australia and South Africa send suburb instead, the platform moves whichever you send to where that country keeps it.
statestringState, province or territory. Required in Australia.
postalCodestringrequiredExample 3000
countrystringrequiredISO 3166-1 alpha-2.
Example AU
addressIdentifierstringAn address identifier from a lookup service, where one was used.
The identity documents being presented. At most one of each kind; an empty list asks whether one is needed.
typeAn Australian driver's licence.
numberstringrequiredstatestringrequiredThe state's own abbreviation, VIC, NSW, QLD.
documentNumberstringrequiredThe card number printed on licences issued from 2022. Mandatory in every state now.
A New Zealand driver's licence.
numberstringrequiredversionNumberstringrequiredThe version number printed on the card.
A passport, identified by its issuing country.
numberstringrequiredcountrystringrequiredISO 3166-1 alpha-3 of the issuing nation, AUS, NZL, USA.
Example AU
A passport identified by its expiry date, which is how New Zealand checks are made.
numberstringrequiredexpiryDatestringrequiredAs printed on the passport.
Example 2026-08-19
curl -X POST https://api.tst.au.apgpay.dev/kyc-identifications \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "KycidCmdConsumer",
"merchantId": "mcht_9f2Kd8QpLzXw",
"emailAddress": "ada@example.com",
"phoneNumber": "+61400000000",
"referenceCustomerId": "your-own-reference",
"customerVerified": true,
"identification": {
"type": "KycidIdentificationAttributes",
"name": {
"type": "KycidNameAttributes",
"givenName": "Ada Lovelace",
"middleName": "Ada Lovelace",
"familyName": "Ada Lovelace"
},
"dateOfBirth": "2026-08-19",
"address": {
"type": "KycidAddressAttributes",
"address": "string",
"componentised": {
"type": "MchtAddressAttributes",
"unitNumber": "string",
"streetNumber": "string",
"streetName": "Ada Lovelace",
"streetType": "string",
"suburb": "string",
"city": "string",
"state": "string",
"postalCode": "3000",
"country": "AU"
},
"addressIdentifier": "string"
},
"documents": [
{
"type": "KycidDocAustralianLicence",
"number": "string",
"state": "string",
"documentNumber": "string"
}
]
}
}'Responses
The response is a tagged shape: type is always "KycidResultAttributes". Switch on it; subtypes can be added, and a client that already reads it will not break.
typetype = "KycidResultAttributes"typeNot yet identified, send more of the person's details and try again. No document is needed.
messagestringWhat is missing, where the platform can say.
Not yet identified, a document is needed. Any one of the combinations below would do.
Each entry is one acceptable combination. Every document within an entry must be sent together.
typeenumrequiredKycidDocOptionAttributesdocumentsarray of KycidDocKindEvery document in this combination must be supplied together.
AustralianLicenceNewZealandLicencePassportPassportWithExpiryUnknownremainingAttemptsinteger (int32)requiredAttempts left with this combination before the platform stops accepting it.
Example 1250
messagestringIdentified. Nothing further is needed.
Identified. Nothing further is needed.
Refused. The person cannot be identified and further attempts will not change that.
messagestringWhy, where the platform can say.
What the platform already holds about this person, present on the delegate arm, where the business check named them as a beneficial owner. Prefill from it rather than asking again.
typeenumrequiredPersonAttributesgivenNamestringExample Ada Lovelace
middleNamestringExample Ada Lovelace
familyNamestringrequiredExample Ada Lovelace
dateOfBirthstring (date)requiredExample 2026-08-19
A postal address. Supplying one on a patch replaces the whole address, you cannot patch half of one.
typeenumrequiredMchtAddressAttributesunitNumberstringUnit, shop or level, as written on the building. Free text, 12, Shop 4, Level 3. Omit where there is none.
streetNumberstringrequiredStreet number, including any range or letter, 34, 34A, 34-36.
streetNamestringrequiredStreet name, without the type, Smith, not Smith Street.
Example Ada Lovelace
streetTypestringStreet, Road, Avenue. Optional because not every address has one.
suburbstringSuburb. This is where Australia and South Africa keep what other countries call the city.
citystringCity. Required in New Zealand. In Australia and South Africa send suburb instead, the platform moves whichever you send to where that country keeps it.
statestringState, province or territory. Required in Australia.
postalCodestringrequiredExample 3000
countrystringrequiredISO 3166-1 alpha-2.
Example AU
{
"type": "KycidResultAttributes",
"outcome": {
"type": "KycidOutcomeDetailsRequired",
"message": "string"
},
"knownDetails": {
"type": "PersonAttributes",
"givenName": "Ada Lovelace",
"middleName": "Ada Lovelace",
"familyName": "Ada Lovelace",
"dateOfBirth": "2026-08-19",
"address": {
"type": "MchtAddressAttributes",
"unitNumber": "string",
"streetNumber": "string",
"streetName": "Ada Lovelace",
"streetType": "string",
"suburb": "string",
"city": "string",
"state": "string",
"postalCode": "3000",
"country": "AU"
}
}
}Error responses
statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}statusCodeinteger (int32)requiredHTTP status code for this error
errorCodestringrequiredAn APG Pay code providing a brief explanation of the underlying error. Use this if you wish to provide custom behaviour based on the error type.
messagestringrequiredHuman readable description of the error
tracerstringAn unique identifier for the request. Provide this to the support team if you wish to query a particular error.
detailstringOptional additional details for the error.
errorTypeDescriptionstringA description of the category of errors for the given statusCode.
metadataobjectOptional key value list of metadata
{
"statusCode": 100,
"errorCode": "string",
"message": "string",
"tracer": "string",
"detail": "string",
"errorTypeDescription": "string"
}