Docs
API referenceComplianceSupportHomeLog inSign up
  • Introduction
  • Guides
    • API Quick Guide
      • Perform AML Screening
      • Perform Document Check
      • Perform Identity Check
      • Perform Proof of Address Check
      • Perform Multi-Bureau Check
    • Web Portal Quick Guide
      • Perform AML Screening
      • Perform Document Check
      • Perform Multi-Bureau Check
      • Send verification link to client
    • Web SDK Guide
      • Web SDK integration guide
      • Web SDK customizations
    • Mobile SDK Guide
      • Mobile SDK integration guide
      • Mobile SDK stages
      • Mobile SDK tracked events
      • Mobile SDK error codes
    • Hosted Solution Guide
      • Integration guide
    • Postman Guide
    • Webhooks Guide
    • Integration Checklist
  • Check Types
    • AML Screening Check
      • Lists coverage
    • Document Check
      • ID coverage
      • RFID authentication
      • Redaction
      • Expected sides per type
    • Identity Check
    • Enhanced Identity Check
    • Proof of Address Check
    • Multi-Bureau Check
      • Service coverage
    • Face Authentication Check
    • Age Estimation Check
    • Automation
  • Other Services
    • AML Risk Profile
    • Bulk Processing
    • Autofill
    • Company Search
    • Address Search
    • Custom Lists
    • Advanced Case Management
  • Access Management
    • Teams and User Roles
    • Single Sign On (SSO)
      • SSO with Okta
      • SSO with Microsoft Entra ID
  • Useful Resources
    • Testing Data
  • API Reference
Powered by GitBook
On this page
  • Overview of flow
  • 1. Create a client
  • 2. Create an address
  • 3. Create a document
  • 4. Upload front side image of an ID
  • 5. Create a check
  • 6. Retrieve outcome

Was this helpful?

  1. Guides
  2. API Quick Guide

Perform Proof of Address Check

PreviousPerform Identity CheckNextPerform Multi-Bureau Check

Last updated 1 year ago

Was this helpful?

You can run this check immediately via our . 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 -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"
          }
        }'
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"
  }
});
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)
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'
    ]
]);
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.

{
    "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 -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"
        }'
const address = await complycube.address.create("5eb04fcd0f3e360008035eb1", {
  line: "Flat 323",
  city: "Aldgate",
  state: "London",
  country: "GB"
});
new_address = {    
    'line': 'Flat 323',
    'city': 'Aldgate',
    'state': 'London',
    'country': 'GB'
}

address = cc_api.addresses.create('5eb04fcd0f3e360008035eb1',**new_address)
$address = $ccapi->address()->create(
    '5eb04fcd0f3e360008035eb1',
    [
        'line' => 'Flat 323',
        'city' => 'ManhAldgateattan',
        'state' => 'London',
        'country' => 'GB'
    ]
);
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.

{
    "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 -X POST https://api.complycube.com/v1/documents \
     -H 'Authorization: <YOUR_API_KEY>' \
     -H 'Content-Type: application/json' \
     -d '{
          "clientId":"5eb04fcd0f3e360008035eb1",
          "type": "bank_statement"
        }'
const document = await complycube.document.create("5eb04fcd0f3e360008035eb1", {
  type: "bank_statement"
});
document = cc_api.documents.create(
    '5eb04fcd0f3e360008035eb1',
    type='bank_statement'
)
$doc = $ccapi->documents()->create(
    '5eb04fcd0f3e360008035eb1',
    ['type' => 'bank_statement']
);
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.

{
    "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 -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>"
        }'
const frontImage = await complycube.document.upload("5ebd40714f23960008c81527", {
    fileName: "bank-statement-sample.pdf",
    data: "<BASE64_DATA_CONTENT>"
}, "front");
front_image = cc_api.documents.upload(
    '5ebd40714f23960008c81527', 
    'front',
    fileName='bank-statement-sample.pdf',
    data='<BASE64_DATA_CONTENT>'
)
$up = $ccapi->documents()->upload(
    '5ebd40714f23960008c81527', 
    'front', 
    [
        'fileName' => 'bank-statement-sample.pdf',
        'data' => '<BASE64_DATA_CONTENT>'
    ]
);
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.

{
    "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 -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"
        }'
const check = await complycube.check.create("5eb1276d96be4a0008713af5", {
    documentId: "5ebd40714f23960008c81527",
    type: "proof_of_address_check"
});
check = cc_api.checks.create(
    '5eb1276d96be4a0008713af5',
    'proof_of_address_check',
    documentId='5ebd40714f23960008c81527'
)
$result = $ccapi->checks()->create(
    '5eb1276d96be4a0008713af5',
    [
        'type' => 'proof_of_address_check',
        'documentId' => '5ebd40714f23960008c81527'
    ]
);
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.

{
    "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.

Example request for retrieving the check outcome

curl -X GET https://api.complycube.com/v1/checks/5ebd40714f23960008c81527 \
     -H 'Authorization: <YOUR_API_KEY>'
const check = await complycube.check.get("5ebd40714f23960008c81527");
check = cc_api.checks.get('5ebd40714f23960008c81527')
$check = $ccapi->checks()->get('5ebd40714f23960008c81527');
var check = await checkApi.GetAsync("5ebd40714f23960008c81527");

Example response

{
   "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"
}

If you have a notification is sent upon completion of the check.

set up webhooks,
Learn more about result outcome and breakdown ➔
Demo Postman collection
203KB
base64-encoded-bank-statement-sample.txt
Sample - BASE64 encoded bank statement
Proof of Address check API flow