Skip to content

Manual Verifications

Integrating Manual Verification is less complex than integrating Biometric Verification; your integration will involve a POST request containing a client’s details to be verified. Our response will describe whether the client’s details have been verified. Please be prepared for this request to take a few seconds while we query the numerous data sources needed to verify your client.

After creating a Manual Verification you may also perform an additional PUT request to export a PDF report and archive the verification from our server.

POST Create a Manual Verification


API

Description: Create a new manual verification

Endpoint: POST /api/v2/manual_eidv

Properties:

PropertySub-propertyRequiredTypeNotes
metadatayesobjectAn object of properties used to identify your verification
referenceyesstringVerification reference. A name to recognise the verification
external_idnostringYour system’s object id. This can be used to make the link between your system’s entity and our verification
individualyesobjectAn object of personal details of the person being verified
first_nameyesstringFirst name of the person being verified
middle_namenostringMiddle name of the person being verified
last_nameyesstringLast name of the person being verified
date_of_birthyesstringDate of birth of the person being verified. Must be in format YYYY-MM-DD
sexnostringSex of the person being verified. Possible values are M, F, or U (unknown)
identity_documentSee notesobjectNot required for individuals residing in the United Kingdom. Required for individuals residing in New Zealand and Australia. An object describing the identity document held by the individual.
typeyesstringType of identity document. Possible values are driver_licence or passport
country_of_issueyesstringCountry where the identity document was issued, in ISO-3166 Alpha3 format E.g. NZL, AUS, GBR
state_of_issueSee notesstringRequired only for Australian driver licences. Australian state/territory where the identity document was issued, in abbreviated form. E.g. NSW, QLD, SA, TAS, VIC, WA, ACT, NT
primary_numberyesstringDriver licence number or passport number
secondary_numbersee notesstringRequired only for NZL/AUS driver licences. For NZL use the licence version number. For AUS use the licence card number.
date_of_expirysee notesstringRequired only for NZL/AUS passports. Date of expiry of the identity document Must be in format YYYY-MM-DD
addressyesobjectAn object describing the address where the individual resides
line_1yesstringAddress line 1
line_2see notesstringAddress line 2
suburbsee notesstringRequired for NZL and AUS
citysee notesstringRequired for NZL and GBR
statesee notesstringRequired for AUS
postcodeyesstring
countryyesstringCountry of the address, in ISO-3166 Alpha3 format . E.g. NZL, AUS, GBR

Response body:

PropertySub-propertyTypeNotes
metadataobjectAn object of properties used to identify your verification
referencestringThe same reference provided in your request
external_idstringThe same external_id provided in your request
transaction_idstringOur unique identifier for the verification
timestampstringUTC time, in RFC3339 format
api_versionstring
request_idstringOur unique identifier for your request
resultsobjectAn object containing the results of the Manual EIDV
overallboolean
namebooleanTrue if the individual’s name has been verified
date_of_birthbooleanTrue if the individu al’s date of birth has been verified
addressbooleanTrue if the individual’s address has been verified
pep_clearbooleanTrue if the individual was not found in PEP, sanction or adverse media watchlists
documentbooleanTrue if the individual’s identity document was verified (if provided). Not applicable to individuals residing in GBR.
reportstringAPI Path to /export_and_archive endpoint for this verification
assetsobjectAdditional assets (if any)
pep_watchliststringAPI Path to PDF document containing PEP Watchlist report (if pep_clear is false, and doc is available)
error_typestringType of error (if any)
messagestringExplanation of error (if any)
validation_errorsobject(Advanced) Erroneous values from your request body, with values replaced by validation errors. Useful for implementing form validation.

Sample Response

json
{
    "metadata": {
        "reference": "MORTGAGE-1234567",
        "external_id": "593d9f00-aa93-4f19-8669-53801ac26a0d",
        "transaction_id": "fYcvgm2QiHqMpn2t",
        "timestamp": "2022-12-16T10:26:11+00:00",
        "api_version": "v2",
        "request_id": "75482a27-5149-4bfa-b30a-60c5a2de30ef"
    },
    "results": {
        "Page": 28,
        "overall": true,
        "name": true,
        "date_of_birth": true,
        "address": true,
        "pep_clear": false,
        "mortality_list_clear": true, // Only for customers in GB
        "document": true, // always false for individuals residing in GBR
    },
    "report": "/api/v2/manual_eidv/fYcvgm2QiHqMpn2t/export_and_archive",
    "assets": {
        "pep_watchlist": "/api/v2/manual_eidv/fYcvgm2QiHqMpn2t/assets/pep_watchlist.pdf"
    },
    "data_sources": {
        "config": [
            {
                "field": "summary_of_data_sources_searched",
                "label": "Summary of data sources searched"
            },
            {
                "field": "name",
                "label": "Name"
            },
            {
                "field": "date_of_birth",
                "label": "Date of Birth"
            },
            {
                "field": "address",
                "label": "Address"
            }
        ],
        "rows": [
            {
                "summary_of_data_sources_searched": "Comprehensive Account",
                "name": "NotPresent",
                "date_of_birth": "NotPresent",
                "address": "NotPresent"
            },
            {
                "summary_of_data_sources_searched": "Retail Energy Account",
                "name": "NotPresent",
                "date_of_birth": "NotPresent",
                "address": "NotPresent"
            },
            {
                "summary_of_data_sources_searched": "NZ Property Owner",
                "name": "NotPresent",
                "date_of_birth": "NA",
                "address": "NotPresent"
            },
            {
                "summary_of_data_sources_searched": "NZTA Driver Licence",
                "name": "NoMatch",
                "date_of_birth": "NoMatch",
                "address": "NA"
            },
            {
                "summary_of_data_sources_searched": "Bureau File",
                "name": "NotSearched",
                "date_of_birth": "NotSearched",
                "address": "NotSearched"
            }
        ]
    }
}

PUT Export created verification to PDF report (and archive from our server)


API

Description: Download PDF Report of created Manual Verification, and archive from our server

Endpoint: PUT /api/v2/manual_eidv/{transaction_id}/export_and_archive

GET Fetch PEP Watchlist result for a verification (if applicable)


API

Description: Download PDF Report of PEP Watchlist results (if the individual’s PEP check was not clear, and a report is available)

Endpoint: GET /api/v2/manual_eidv/{transaction_id}/assets/pep_watchlist

Examples

js
const axios = require('axios')
const contentDisposition = require('content-disposition') const fs = require('fs')
axios.put('https://staging.aplyid.co.uk/api/v2/manual_eidv/fYcvgm2QiHqMpn2t/assets/pep_watchlist’, {}, {
	headers: {
		'Aply-API-Key': 'zHb4LM9dSBAwiVECjKSoG6Fy',
		'Aply-Secret': 'Uds32eU6hG2MFSMioEdXVGWNVkSnR1A7'
	},
	responseType: 'stream'
})
.then(response => {
	// Using contentDisposition to retrieve generated filename from headers
	const content = contentDisposition.parse(response.headers['content-disposition']) 
	// Writing downloaded PDF to our server's file system response.data.pipe(fs.createWriteStream(content.parameters.filename))
})
.catch(error => {
	console.log("Something went wrong downloading pdf")
})
js
// Create Manual Verification example (NZL driver licence)
axios.post('https://integration.aplyid.com/api/v2/manual_eidv', {
metadata: {
    reference: 'MORTGAGE-1234567',
    external_id: '593d9f00-aa93-4f19-8669-53801ac26a0d'
}, individual: {
    first_name: 'John',
    middle_name: 'O.',
    last_name: 'Doe',
    date_of_birth: '1990-01-01'
}, identity_document: {
    type: 'driver_licence',
    country_of_issue: 'NZL',
    primary_number: 'DO12345678',
    secondary_number: '123'
}, address: {
    line_1: '22 Pollen Street',
    suburb: 'Grey Lynn',
    city: 'Auckland',
    postcode: '1021',
    country: 'NZL'
}
}, {
headers: {
    'Aply-API-Key': 'zHb4LM9dSBAwiVECjKSoG6Fy',
    'Aply-Secret': 'Uds32eU6hG2MFSMioEdXVGWNVkSnR1A7'
}
})
.then(response => {
        // Do some stuff
    })
    .catch(error => {
        console.log(error.response.data.message)
    })
js
const axios = require('axios')
const contentDisposition = require('content-disposition') const fs = require('fs')
axios.put('https://staging.aplyid.co.uk/api/v2/manual_eidv/fYcvgm2QiHqMpn2t/export_and_archive’, {}, {
        headers: {
            'Aply-API-Key': 'zHb4LM9dSBAwiVECjKSoG6Fy',
            'Aply-Secret': 'Uds32eU6hG2MFSMioEdXVGWNVkSnR1A7'
        },
        responseType: 'stream'
    })

    .then(response => {
        // Using contentDisposition to retrieve generated filename from headers
        const content = contentDisposition.parse(response.headers['content-disposition']) // Writing downloaded PDF to our server's file system response.data.pipe(fs.createWriteStream(content.parameters.filename))
    })
    .catch(error => {
        console.log("Something went wrong downloading pdf")
    })
js
// Create Manual Verification example (GBR without identity document)
axios.post('https://staging.aplyid.co.uk/api/v2/manual_eidv, {
metadata: {
    reference: 'MORTGAGE-1234567',
    external_id: '593d9f00-aa93-4f19-8669-53801ac26a0d'
}, individual: {
    first_name: 'John',
    middle_name: 'O.',
    last_name: 'Doe',
    date_of_birth: '1990-01-01'
}, address: {
    line_1: '18 Brunswick Place',
    city: 'London',
    postcode: 'N1 6DZ',
    country: 'GBR'
}
}, {
headers: {
    'Aply-API-Key': 'zHb4LM9dSBAwiVECjKSoG6Fy',
    'Aply-Secret': 'Uds32eU6hG2MFSMioEdXVGWNVkSnR1A7'
}
})
.then(response => {
        // Do some stuff
    })
    .catch(error => {
        console.log(error.response.data.message)
    })

Error Codes

401 Unauthorized

json
{
	"metadata": {
		"reference": "MORTGAGE-1234567",
		"external_id": "593d9f00-aa93-4f19-8669-53801ac26a0d",
		"timestamp": "2022-09-16T10:26:11+00:00",
		"api_version": "v2",
		"request_id": "75482a27-5149-4bfa-b30a-60c5a2de30ef"
	},
	"message": "Invalid credentials",
	"error_type": "AUTHENTICATION"
}

403 Forbidden

json
{
	"metadata": {
		"reference": "MORTGAGE-1234567",
		"external_id": "593d9f00-aa93-4f19-8669-53801ac26a0d",
		"timestamp": "2022-09-16T10:26:11+00:00",
		"api_version": "v2",
		"request_id": "75482a27-5149-4bfa-b30a-60c5a2de30ef"
	},
	"message": "Not allowed",
	"error_type": "AUTHORIZATION"
}

422 Validation

json
{
  "metadata": {
    "reference": "MORTGAGE-1234567",
    "external_id": "593d9f00-aa93-4f19-8669-53801ac26a0d",
    "timestamp": "2022-09-16T10:26:11+00:00",
    "api_version": "v2",
    "request_id": "75482a27-5149-4bfa-b30a-60c5a2de30ef"
  },
  "message": "First name cannot exceed 64 characters, last name required and identity document is mandatory for individuals in NZL",
  "error_type": "VALIDATION",
  "validation_errors": {
    "individual": {
      "first_name": [
        "cannot exceed 64 characters"
      ],
      "last_name": [
        "required"
   ]
    },
    "identity_document": [
      "mandatory for individuals living in NZL"   ]
 }
}

500 Internal Server Error

json
{
    "metadata": {
        "reference": "MORTGAGE-1234567",
        "external_id": "593d9f00-aa93-4f19-8669-53801ac26a0d",
        "timestamp": "2022-09-16T10:26:11+00:00",
        "api_version": "v2",
        "request_id": "75482a27-5149-4bfa-b30a-60c5a2de30ef"
    },
    "message": "Unexpected error occured. Please contact us on 0800xxx and quote the request_id",
    "error_type": "SYSTEM"
}