You can run this check immediately via our Demo Postman collection . It's publicly available and doesn't require an account.
Overview of flow
1. Create a client
The first step in creating any check is to create a client from your backend server. For this type of check, a client of type person must be created.
Example request for creating a client
cURL Node.js Python PHP .NET
Copy curl -X POST https://api.complycube.com/v1/clients \
-H 'Authorization: <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"type": "person",
"email": "john.doe@example.com",
"personDetails":{
"firstName": "John",
"lastName" :"Doe"
}
}'
Copy const { ComplyCube } = require("@complycube/api");
const complycube = new ComplyCube({ apiKey: "<YOUR_API_KEY>" });
const client = await complycube.client.create({
type: "person",
email: "john.doe@example.com",
personDetails: {
firstName: "John",
lastName: "Doe"
}
});
Copy from complycube import ComplyCubeClient
cc_api = ComplyCubeClient(api_key='<YOUR_API_KEY>')
new_client = {
'type':'person',
'email':'john.doe@example.com',
'personDetails': {
'firstName':'John',
'lastName':'Doe'
}
}
client = cc_api.clients.create(**new_client)
Copy use ComplyCube\ComplyCubeClient;
$ccapi = new ComplyCubeClient('<YOUR_API_KEY>');
$result = $ccapi->clients()->create([
'type' => 'person',
'email' => 'john.doe@example.com',
'personDetails' => [
'firstName' => 'John',
'lastName' => 'Doe'
]
]);
Copy using ComplyCube.Net;
using ComplyCube.Net.Resources.Clients;
var clientApi = new ClientApi(new ComplyCubeClient("<YOUR_API_KEY>"));
var newClient = new ClientRequest {
type = "person",
email = "john.doe@example.com",
personDetails = new PersonDetails {
firstName = "John",
lastName = "Doe"
}
}
var client = await clientApi.CreateAsync(newClient);
Example response
The response will contain an id
(the Client ID). It is required for the next step.
Copy {
"id": "5eb04fcd0f3e360008035eb1",
"type": "person",
"email": "john.doe@example.com",
"personDetails": {
"firstName": "John",
"lastName": "Doe"
},
"createdAt": "2021-01-04T17:24:29.146Z",
"updatedAt": "2021-01-04T17:24:29.146Z"
}
2. Create an address
Create an address by providing the Client ID and address details.
Example request for creating an address
cURL Node.js Python PHP .NET
Copy curl -X POST https://api.complycube.com/v1/addresses \
-H 'Authorization: <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"clientId":"5eb04fcd0f3e360008035eb1",
"line": "Flat 323",
"city": "Aldgate",
"state": "London",
"country": "GB"
}'
Copy const address = await complycube.address.create("5eb04fcd0f3e360008035eb1", {
line: "Flat 323",
city: "Aldgate",
state: "London",
country: "GB"
});
Copy new_address = {
'line': 'Flat 323',
'city': 'Aldgate',
'state': 'London',
'country': 'GB'
}
address = cc_api.addresses.create('5eb04fcd0f3e360008035eb1',**new_address)
Copy $address = $ccapi->address()->create(
'5eb04fcd0f3e360008035eb1',
[
'line' => 'Flat 323',
'city' => 'ManhAldgateattan',
'state' => 'London',
'country' => 'GB'
]
);
Copy var addressRequest = new AddressRequest {
clientId = "5eb04fcd0f3e360008035eb1",
line = "Flat 323",
city = "Aldgate",
state = "London",
country = "GB"
};
var address = await addressApi.CreateAsync(addressRequest);
Example response
The response will contain an id
(the Address ID). It is required for the next step.
Copy {
"id": "5ebd40714f23960008c81528",
"clientId":"5eb04fcd0f3e360008035eb1",
"line": "Flat 323",
"city": "Aldgate",
"state": "London",
"country": "GB",
"createdAt": "2021-01-04T17:25:21.116Z",
"updatedAt": "2021-01-04T17:25:21.116Z"
}
3. Create a document
Create a document by providing the Client ID and document type (e.g. bank statement, utility bill).
Example request for creating a document
cURL Node.js Python PHP .NET
Copy curl -X POST https://api.complycube.com/v1/documents \
-H 'Authorization: <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"clientId":"5eb04fcd0f3e360008035eb1",
"type": "bank_statement"
}'
Copy const document = await complycube.document.create("5eb04fcd0f3e360008035eb1", {
type: "bank_statement"
});
Copy document = cc_api.documents.create(
'5eb04fcd0f3e360008035eb1',
type='bank_statement'
)
Copy $doc = $ccapi->documents()->create(
'5eb04fcd0f3e360008035eb1',
['type' => 'bank_statement']
);
Copy var docRequest = new DocumentRequest {
clientId = "5eb04fcd0f3e360008035eb1",
type = "bank_statement"
};
var document = await docApi.CreateAsync(docRequest);
Example response
The response will contain an id
(the Document ID). It is required for the next step.
Copy {
"id": "5ebd40714f23960008c81527",
"type": "bank_statement",
"createdAt": "2021-01-04T17:25:21.116Z",
"updatedAt": "2021-01-04T17:25:21.116Z"
}
4. Upload front side image of an ID
Upload a BASE64 encoded image of the proof of address document.
Images should be JPG , PNG , or PDF .
Below is a sample BASE64encoded file. Download it, and copy its content. Then paste into the data
attribute when making the request.
Example request for uploading an image of a document
cURL Node.js Python PHP .NET
Copy curl -X POST https://api.complycube.com/v1/documents/5ebd40714f23960008c81527/upload/front \
-H 'Authorization: <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"fileName": "bank-statement-sample.pdf",
"data": "<BASE64_DATA_CONTENT>"
}'
Copy const frontImage = await complycube.document.upload("5ebd40714f23960008c81527", {
fileName: "bank-statement-sample.pdf",
data: "<BASE64_DATA_CONTENT>"
}, "front");
Copy front_image = cc_api.documents.upload(
'5ebd40714f23960008c81527',
'front',
fileName='bank-statement-sample.pdf',
data='<BASE64_DATA_CONTENT>'
)
Copy $up = $ccapi->documents()->upload(
'5ebd40714f23960008c81527',
'front',
[
'fileName' => 'bank-statement-sample.pdf',
'data' => '<BASE64_DATA_CONTENT>'
]
);
Copy var docFront = new ImageRequest {
fileName = "bank-statement-sample.pdf",
data = "<BASE64_DATA_CONTENT>"
};
var img = await docApi.UploadImageAsync(
"5ebd40714f23960008c81527",
"front",
docFront
);
Example response
The response will contain an id
(the Check ID). It is required for the next step.
Copy {
"id": "5eb169302d868c0008828591",
"fileName": "bank-statement-sample.pdf",
"documentSide": "front",
"downloadLink": "/documents/5ebd40714f23960008c81527/images/5eb169302d868c0008828591/download",
"contentType": "application/pdf",
"size": 182716,
"createdAt": "2021-01-04T17:25:21.116Z",
"updatedAt": "2021-01-04T17:25:21.116Z"
}
5. Create a check
Create a check by providing the Client ID, Document ID and check type.
Example request for creating a check
cURL Node.js Python PHP .NET
Copy curl -X POST https://api.complycube.com/v1/checks \
-H 'Authorization: <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"clientId":"5eb04fcd0f3e360008035eb1",
"documentId":"5ebd40714f23960008c81527",
"type": "proof_of_address_check"
}'
Copy const check = await complycube.check.create("5eb1276d96be4a0008713af5", {
documentId: "5ebd40714f23960008c81527",
type: "proof_of_address_check"
});
Copy check = cc_api.checks.create(
'5eb1276d96be4a0008713af5',
'proof_of_address_check',
documentId='5ebd40714f23960008c81527'
)
Copy $result = $ccapi->checks()->create(
'5eb1276d96be4a0008713af5',
[
'type' => 'proof_of_address_check',
'documentId' => '5ebd40714f23960008c81527'
]
);
Copy var checkRequest = new CheckRequest {
clientId = "5eb04fcd0f3e360008035eb1",
documentId = "5ebd40714f23960008c81527",
type = "proof_of_address_check"
};
var check = await checkApi.CreateAsync(checkRequest);
Example response
The response will contain an id
(the Check ID). It is required for the next step.
Copy {
"id": "65c12a6426d2ab000814037e",
"entityName": "John Doe",
"type": "proof_of_address_check",
"clientId": "5eb04fcd0f3e360008035eb1",
"documentId": "5ebd40714f23960008c81527",
"status": "pending",
"createdAt": "2021-01-04T17:25:21.116Z",
"updatedAt": "2021-01-04T17:25:21.116Z"
}
6. Retrieve outcome
ComplyCube will perform the check. You can retrieve a check's outcome and breakdown via the API.
If you have set up webhooks, a notification is sent upon completion of the check.
Example request for retrieving the check outcome
cURL Node.js Python PHP .NET
Copy curl -X GET https://api.complycube.com/v1/checks/5ebd40714f23960008c81527 \
-H 'Authorization: <YOUR_API_KEY>'
Copy const check = await complycube.check.get("5ebd40714f23960008c81527");
Copy check = cc_api.checks.get('5ebd40714f23960008c81527')
Copy $check = $ccapi->checks()->get('5ebd40714f23960008c81527');
Copy var check = await checkApi.GetAsync("5ebd40714f23960008c81527");
Example response
Copy {
"id": "65c12a6426d2ab000814037e",
"entityName": "John Doe",
"type": "document_check",
"clientId": "5eb04fcd0f3e360008035eb1",
"documentId": "5ebd40714f23960008c81527",
"status": "complete",
"result": {
"outcome": "clear",
"breakdown": {
"extractedData": {
"holderDetails": {
"entityName": "John Doe"
},
"documentDetails": {
"documentType": "bank_statement",
"issuer": "Barclays Bank",
"issuingDate": {
"day": 25,
"month": 1,
"year": 2021
}
},
"addressDetails": {
"address": {
"propertyNumber": "323",
"line": "Common street",
"city": "Aldgate",
"state": "London",
"postalCode": "W99 0RD",
"country": "GB",
"latLong": "51.5136,-0.077188"
},
"addressLine": "323 Common Street Aldgate London W99 0RD",
"addressCountry": "GB"
}
},
"clientValidation": {
"firstName": "clear",
"lastName": "clear",
"address": "clear"
},
"contentAnalysis": {
"documentAge": "clear"
},
"geoLocationAnalysis": {
"ipInAddressCountry": "clear",
"ipProximityToAddress": "clear"
}
}
},
"createdAt": "2020-01-04T17:25:21.116Z",
"updatedAt": "2020-01-04T17:25:21.116Z"
}
Learn more about result outcome and breakdown ➔