Skip to main content

Submit KYC API

The Submit KYC API lets you programmatically submit identity verification details for a customer or entity. Use this API as an alternative to the Pre-built KYC Form.

For corporate customers, the applicant and all individual stakeholders are treated as separate entities. You must call the Submit KYC API separately for each entity to complete their respective KYC process.

note

Initiate KYC only after you receive a webhook with subStatus: awaiting_kyc. See Step 6 of the onboarding flow.

API reference

POST /api/v5/client/{clientHashId}/customer/{customerHashId}/submitKyc

See Submit KYC for the full API reference.

Path parameters

ParameterTypeRequiredDescription
clientHashIdstringYesUnique client identifier generated and shared before API handshake.
customerHashIdstringYesUnique hash ID of the customer received in the response of the Create Customer v5 API.

Request body parameters

FieldRequiredTypeDescription
regionMandatorystringRegulatory region where the customer is being onboarded (for example, US).
entityTypeMandatoryenumType of entity for which KYC is being submitted. Values: individual_stakeholder, applicant, individual_customer.
isResidentMandatorybooleanWhether the entity is a resident of the specified region. Set to false if the entity resides outside the region (for example, if region = US and the entity resides in GB).
entityReferenceIdMandatorystringThe referenceId of the entity returned in the Create Customer v5 API response. You may also pass the externalId provided during customer creation.
kycModeMandatoryenumKYC verification method. Values: e_kyc (electronic, auto-verified), biometric_kyc (liveness check against their government-issued document) ormanual_kyc (requires manual review by Nium compliance).
proofOfIdentityDocumentMandatoryarray of objectIdentity document details for the entity. See fields below.
proofOfIdentityDocument.typeMandatoryenumDocument type. Use national_id if isResident = true. If isResident = false, use national_id, passport, or driver_licence.
proofOfIdentityDocument.identificationNumberMandatorystringIdentification number of the document (for example, nationalID number or passport number).
proofOfIdentityDocument.issuanceCountryMandatorystringTwo-letter ISO country code of the country where the document was issued. Use the Fetch Corporate Constants API with category = countryName for valid values.
proofOfIdentityDocument.expiryDateConditionaldateExpiry date of the document. Required if type is passport or driver_licence.
proofOfIdentityDocument.fileIdsConditionalarray of UUIDRequired if kycMode = manual_kyc. Provide the fileId values from the Upload File API response.
proofOfAddressDocumentOptionalobjectAddress proof details. Acceptable documents are: Utility bill, bank statement, govt issued letter etc.
proofOfAddressDocument.typeOptionalenumType of address document. Value: proof_of_address.
proofOfAddressDocument.fileIdsOptionalarray of stringfileId values from the Upload File API response.
stakeholderDetailsOptionalObjectNew stakeholder data identified by Nium during verification. Applciable in case of AU region.

Sample requests

For US Resident — electronic KYC (isResident=true, kycMode=e_kyc)

{
"region": "US",
"entityType": "applicant",
"isResident": true,
"kycMode": "e_kyc",
"entityReferenceId": "REF123456",
"proofOfIdentityDocument": [
{
"type": "national_id",
"identificationNumber": "1234",
"issuanceCountry": "US"
}
]
}

For US Resident — manual KYC (isResident=true, kycMode=manual_kyc)

{
"region": "US",
"entityType": "individual_stakeholder",
"isResident": true,
"kycMode": "manual_kyc",
"entityReferenceId": "8aaddf0f-a4c9-4c3c-bdd8-2534cb5a4008",
"proofOfIdentityDocument": [
{
"type": "passport",
"identificationNumber": "123456789",
"issuanceCountry": "US",
"expiryDate":"2028-09-01",
"fileIds": [
"6502ff10-86bf-43f9-ade8-3da16374acc2"
]
},{
"type": "national_id",
"identificationNumber": "123456789",
"issuanceCountry": "US"
}
],
"proofOfAddressDocument": {
"type": "proof_of_address",
"fileIds": [
"1218ab50-500e-4c8c-98e8-2dd44068d044"
]
}
}

For US Non-resident — manual KYC (isResident=false, kycMode=manual_kyc)

{
"region": "US",
"entityType": "individual_stakeholder",
"isResident": false,
"kycMode": "manual_kyc",
"entityReferenceId": "REF123456",
"proofOfIdentityDocument": [
{
"type": "passport",
"identificationNumber": "JP10FAKAIV",
"issuanceCountry": "GB",
"fileIds": [
"1218ab50-500e-4c8c-98e8-2dd44068d044"
]
}
],
"proofOfAddressDocument": {
"type": "proof_of_address",
"fileIds": [
"1218ab50-500e-4c8c-98e8-2dd44068d044"
]
}
}

For US Non-resident — biometric KYC (isResident=false, kycMode=biometric_kyc)

{
"region": "US",
"entityType": "individual_stakeholder",
"isResident": false,
"kycMode": "manual_kyc",
"entityReferenceId": "REF123456"
}

Responses

200 — Success (manual_kyc)

{
"customerHashId": "83e9cb73-c8f3-4ada-8371-ac215826461q",
"kycStatus": "initiated",
"externalId": "357244f3-b4f9-4c54-92df-b472123a6067",
"referenceId": "9215203c-8ba5-43e1-b780-70c2d77115ef",
"entityType": "applicant",
"kycMode": "manual_kyc"
}

200 — Success (biometric_kyc)

{
"customerHashId": "83e9cb73-c8f3-4ada-8371-ac215826461q",
"kycStatus": "initiated",
"externalId": "357244f3-b4f9-4c54-92df-b472123a6067",
"referenceId": "9215203c-8ba5-43e1-b780-70c2d77115ef",
"entityType": "applicant",
"kycMode": "biometric_kyc",
"redirectUrl":"https://idv.sandbox.nium.com/sandbox/compliance/callback/load?referenceNumber=4a72c7b1-ca24-4921-a414-470823f8e982"
}

400 — Bad Request

The errors array in the response describes what failed. Correct the data and resubmit.

// Missing mandatory field
{
"errors": [
{
"code": "missing_required_fields",
"description": "entityReferenceId is required",
"field": "entityReferenceId"
}
]
}

// Invalid document type for the region/residency combination
{
"errors": [
{
"code": "invalid_input",
"description": "Invalid value 'passport'. Allowed values: [national_id]",
"field": "proofOfIdentityDocument[0].type"
}
]
}

// Invalid identification number format
{
"errors": [
{
"code": "invalid_input",
"description": "must match \"^\\d{4}$|^\\d{9}$\"",
"field": "proofOfIdentityDocument[0].identificationNumber"
}
]
}

KYC status reference

When a customer is created using the Create Customer v5 API, the response includes a kycStatus for each entity.

kycStatusDescriptionNext action
kyc_requiredKYC is required for this entity.Call the Submit KYC API for this entity.
kyc_not_requiredKYC is not required for this entity.No action required.
initiatedKYC details submitted; verification initiated by Nium.Wait for a CUSTOMER_ENTITY_KYC_STATUS webhook with the final status.
submittedApplicable for manual_kyc. KYC details submitted for review.Terminal status — no further action required.
verifiedApplicable for e_kyc. KYC successfully verified.Terminal status — no further action required.
failedApplicable for e_kyc. KYC verification failed.Reinitiate KYC with kycMode = manual_kyc.

Webhooks

Nium sends a CUSTOMER_ENTITY_KYC_STATUS webhook whenever the kycStatus of an entity changes.

{
"clientHashId": "9f9e58c3-7b48-4cf7-8195-76a8a94f36ed",
"customerHashId": "83e9cb73-c8f3-4ada-8371-ac215826461e",
"template": "CUSTOMER_ENTITY_KYC_STATUS",
"customerType": "corporate",
"kycStatus": "verified",
"kycMode": "e_kyc",
"externalId": "357244f3-b4f9-4c54-92df-b472123a6067",
"referenceId": "9215203c-8ba5-43e1-b780-70c2d77115ef"
}
FieldTypeDescription
clientHashIdUUIDUnique client identifier.
customerHashIdUUIDUnique customer identifier.
templatestringAlways CUSTOMER_ENTITY_KYC_STATUS.
customerTypeenumindividual or corporate.
kycStatusenumKYC status of the entity: submitted, verified, or failed.
kycModeenumVerification mode used: e_kyc or manual_kyc.
externalIdstringClient-provided unique ID of the entity.
referenceIdUUIDNium-generated unique ID of the entity.
redirectUrlstringClient needs to send this link to the applicant/stakehodler to complete the KYC verification on Nium page.

For more information, see Notifications and Webhooks.