ClearBank

Onboard new Retail Customers

Retail customer onboarding

Every retail customer needs a CustomerId before they can be given access to our products, such as accounts. How you get one depends on who carries out the customer's due diligence checks:

Once a retail customer exists, you can retrieve and manage their details using the endpoints on our Manage existing Retail Customers page.

Onboard with ClearBank's due diligence

Our retail customer onboarding endpoint lets you onboard new individuals as retail customers in a single request. Share key information about the customer, and we'll handle the rest. When onboarding is complete, you'll receive a CustomerId for them.

Every onboarding application includes our KYC due diligence checks. These checks can pass or fail, and we'll tell you the outcome by webhook. If the checks pass, we'll create the retail customer for you. If they fail, no customer is created. We may also need more information from the customer before we can complete our checks.

If you'd like access to this product, please speak to your Client Director.

Message flow diagrams

A message flow diagram demonstrating a successful retail customer onboarding application. The client submits an application using the POST /customer-due-diligence/v1/retail/onboard endpoint, which is acknowledged by ClearBank with a 202 Accepted response. ClearBank performs its due diligence checks, which pass, and creates a new retail customer. ClearBank then emits a Retail Customer Application Successful webhook to the client, which includes a customer ID and an application ID. A message flow diagram demonstrating a retail customer onboarding application that required additional information before succeeding or failing. The client submits an application using the POST /customer-due-diligence/v1/retail/onboard endpoint, which is acknowledged with a 202 Accepted response. ClearBank identifies further information is required to complete its due diligence checks, and emits one or two Retail Customer Additional Info Required webhooks containing the required actions of the client's customer. The retail customer uploads the information, which is received by ClearBank. Due diligence checks then proceed, and an application declined or application successful webhook is sent - depending on the outcome of the checks. A message flow diagram demonstrating a declined retail customer onboarding application. The client submits an application using the POST /customer-due-diligence/v1/retail/onboard endpoint, which is acknowledged by ClearBank with a 202 Accepted response. ClearBank performs its due diligence checks, which fail. ClearBank then emits a Retail Customer Application Declined webhook to the client, which includes the original application ID.

Onboard a new retail customer

post/customer-due-diligence/v1/retail/onboard

Use this endpoint to onboard a new retail customer. Onboarding includes our due diligence checks, and we'll send you the outcome by webhook. If onboarding is successful, we'll create the retail customer and send you their customer ID.

Parameters

  • Authorization string, header, Required

    Your API token, retrieved from the web portal.

  • DigitalSignature string, header, Required

    Signed hash of the body of the request. The hash is signed by your private key.

  • X-Request-Id string, header, Required

    A unique identifier for the request.

Request Payload (application/json)

  • customerData object, Required

request

{
"customerData": {
"name": {
"firstName": "Adrien",
"middleName": "Edin",
"surname": "Reed-Myers"
},
"dateOfBirth": "1976-01-26",
"nationality": [
"GBR",
"IRL"
],
"taxResidency": [
"GBR"
],
"nationalInsuranceNumber": "AB112233C",
"email": "example@emailprovider.co.uk",
"mobile": "+447725666777",
"currentAddress": {
"buildingName": null,
"buildingNumber": "270",
"subBuilding": null,
"streetName": "Long Road",
"city": "York",
"county": "Yorkshire",
"postalCode": "YO31 7UH",
"countryCode": "GBR"
},
"idvEmailsEnabled": true
}
}
Code copied

Response (application/json)

  • 202 Accepted
  • 400 Bad Request

Accepted

{
"applicationId": "aac7c700-1ea6-5664-8804-ceeb066d3cf5"
}
Code copied

Bad Request

{
"type": "https://httpstatuses.io/400",
"title": "Bad Request",
"status": 400,
"detail": "Descriptive error detail.",
"instance": "",
"property1": null,
"property2": null
}
Code copied

Associated Webhooks

Webhooks

Simulating onboarding webhooks

You can simulate successful, declined and additional information onboarding outcomes - as well as additional information emails - in our simulation environment.
To do this, call the POST /customer-due-diligence/v1/retail/onboard endpoint with the customerData.name.surname property set to:

  • "pass" to simulate checks passing, and receive a Retail Customer Application Successful webhook.
  • "fail" to simulate checks failing, and receive a Retail Customer Application Declined webhook.
  • "info" to simulate checks requiring additional information. To receive a Retail Customer Additional Info Required webhook instead of an email, ensure the customerData.idvEmailsEnabled property is set to false.

Create a retail customer with your own due diligence

If you conduct your own KYC and Anti-Money Laundering (AML) checks, you can create a retail customer directly. No ClearBank due diligence checks are performed, so you must supply the outcomes of your own checks in the request. The kycAml object, taxDetails (including at least one tax residency), personalDetails and addressHistory are all required.

KYC and AML fields

When you create a retail customer, you'll need to provide the outcomes of any KYC and AML checks you conduct on them. You can record these outcomes using the kycAml object. Guidance for each of the object's properties are listed below:

  • sanctions - If your KYC checks identify the customer as sanctioned, set to true.
  • pep - If your checks identify the customer as a Politically Exposed Person (PEP), set to Yes_Domestic or Yes_International accordingly - otherwise set to No.
  • rca - If your checks identify the customer as a Relative or Close Associate (RCA) of a PEP, set to Yes_Domestic or Yes_International accordingly - otherwise set to No.
  • craRating - Use this field to declare a Customer Risk Assessment rating for the customer. There are four tiers of risk: Low, Medium, High, and Very_High.

If you have new KYC or AML outcomes for a customer, you can update these using the PATCH /customers/v2/retail/{customerId} endpoint.

Addresses

When you create a retail customer, you'll also need to provide their current address in the addressHistory.currentAddress object. You can optionally record their previous address history using the addressHistory.previousAddresses array.

Create a retail customer

post/customers/v2/retail

Requests creation of retail customer. On a success, you will receive a customer ID which you can then use to create accounts for this customer.

Parameters

  • Authorization string, header, Required

    Your API token, retrieved from the web portal.

  • DigitalSignature string, header, Required

    Signed hash of the body of the request. The hash is signed by your private key.

  • X-Request-Id string, header, Required

    A unique identifier for the request.

Request Payload (application/json)

  • personalDetails object, Required

    Personal details for the customer.

  • identityDocuments array

    The customer's identity documents.

  • addressHistory object, Required

    The customer's address history.

  • kycAml object, Required

    KYC/AML information for the customer.

  • taxDetails object, Required

    Tax details for a retail customer.

  • specialStatuses array

    The customer's special statuses, if any. Possible values include: 'Vulnerability_Health_VisualImpairmentBraille', 'Vulnerability_Health_VisualImpairmentLargeText', 'Vulnerability_Health_AudioImpairment', 'Vulnerability_Health_Other', 'Vulnerability_LifeEvents', 'Vulnerability_Resilience', and 'Vulnerability_Capability'

request

{
"personalDetails": {
"firstName": "Kirsty",
"middleName": "Jane",
"surname": "Friar",
"dateOfBirth": "1985-12-22",
"email": "kristy.fr@mymail.com",
"telephone": "00441234555666",
"countryOfResidence": "GBR",
"nationalIdentificationNumber": "PC223344D"
},
"identityDocuments": [
{
"idCountryOfIssue": "GBR",
"idType": "Passport",
"idNumber": "855865736946",
"idExpiryDate": "2028-05-18"
}
],
"addressHistory": {
"currentAddress": {
"addressType": "ResidentialAddress",
"buildingNameNumber": "322",
"streetName": "Long Road",
"city": "Cyan City",
"county": "Greenshire",
"postalCode": "PG15 8AB",
"country": "GBR",
"validFrom": "2022-05-22"
},
"previousAddresses": [
{
"addressType": "ResidentialAddress",
"buildingNameNumber": "42",
"streetName": "Flower Road",
"city": "Hyacinth City",
"county": "Mastershire",
"postalCode": "NE7 0PM",
"country": "GBR",
"validFrom": "2016-10-03",
"validTo": "2022-05-22"
}
]
},
"kycAml": {
"sanctions": true,
"pep": "No",
"rca": "No",
"craRating": "LowRisk"
},
"taxDetails": {
"validSelfCertification": true,
"usPerson": "NotAUSPerson",
"taxResidencies": [
{
"countryOfTaxResidence": "GBR",
"taxIdNumber": "PC335577B",
"noTaxIdReason": "CountryDoesNotIssue"
}
]
},
"specialStatuses": [
"Vulnerability_LifeEvents"
]
}
Code copied

Response (application/json)

  • 201 Created
  • 400 Bad Request
  • 403 Forbidden
  • 404 Not Found
  • 409 Conflict
  • 422 Unprocessable Content

Created

{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
Code copied

Bad Request

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"property1": null,
"property2": null
}
Code copied

Not Found

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}
Code copied

Conflict

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}
Code copied

Unprocessable Content

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"property1": null,
"property2": null
}
Code copied

If you're still using our V1 retail customer endpoint, you can create a retail customer with it below. Once you've created a retail customer, you can create a new FSCS-protected embedded banking account using their unique ID.

Create a retail customer V1

post/v1/customers/retail

This endpoint is used to create a new retail customer.

Parameters

  • Authorization string, header, Required

    Your API Token, retrieved from the web portal.

  • DigitalSignature string, header, Required

    Signed hash of the body of the request. The hash is signed by your private key.

  • X-Request-Id string, header, Required

    A unique identifier for the request.

Request Payload (application/json)

  • firstName string, Required

    The first name of the retail customer.

    Maximum length
    255
  • middleName string

    The middle name of the retail customer.

    Maximum length
    255
  • surname string, Required

    The surname name of the retail customer.

    Maximum length
    255
  • dateOfBirth string, Required

    The date of birth of the retail customer in date format.

  • email string, Required

    The primary email address used by the retail customer.

  • idCountryOfIssue string

    ISO 3166 Alpha3 representation of the country where the ID was issued.

    Maximum length
    3
    Enum array
    ABW, AFG, AGO, AIA, ALA, ALB, AND, ARE, ARG, ARM, ASM, ATA, ATF, ATG, AUS, AUT, AZE, BDI, BEL, BEN, BES, BFA, BGD, BGR, BHR, BHS, BIH, BLM, BLR, BLZ, BMU, BOL, BRA, BRB, BRN, BTN, BVT, BWA, CAF, CAN, CCK, CHE, CHL, CHN, CIV, CMR, COD, COG, COK, COL, COM, CPV, CRI, CUB, CUW, CXR, CYM, CYP, CZE, DEU, DJI, DMA, DNK, DOM, DZA, ECU, EGY, ERI, ESH, ESP, EST, ETH, FIN, FJI, FLK, FRA, FRO, FSM, GAB, GBR, GEO, GGY, GHA, GIB, GIN, GLP, GMB, GNB, GNQ, GRC, GRD, GRL, GTM, GUF, GUM, GUY, HKG, HMD, HND, HRV, HTI, HUN, IDN, IMN, IND, IOT, IRL, IRN, IRQ, ISL, ISR, ITA, JAM, JEY, JOR, JPN, KAZ, KEN, KGZ, KHM, KIR, KNA, KOR, KWT, LAO, LBN, LBR, LBY, LCA, LIE, LKA, LSO, LTU, LUX, LVA, MAC, MAF, MAR, MCO, MDA, MDG, MDV, MEX, MHL, MKD, MLI, MLT, MMR, MNE, MNG, MNP, MOZ, MRT, MSR, MTQ, MUS, MWI, MYS, MYT, NAM, NCL, NER, NFK, NGA, NIC, NIU, NLD, NOR, NPL, NRU, NZL, OMN, PAK, PAN, PCN, PER, PHL, PLW, PNG, POL, PRI, PRK, PRT, PRY, PSE, PYF, QAT, REU, ROU, RUS, RWA, SAU, SDN, SEN, SGP, SGS, SHN, SJM, SLB, SLE, SLV, SMR, SOM, SPM, SRB, SSD, STP, SUR, SVK, SVN, SWE, SWZ, SXM, SYC, SYR, TCA, TCD, TGO, THA, TJK, TKL, TKM, TLS, TON, TTO, TUN, TUR, TUV, TWN, TZA, UGA, UKR, UMI, URY, USA, UZB, VAT, VCT, VEN, VGB, VIR, VNM, VUT, WLF, WSM, YEM, ZAF, ZMB, ZWE
  • idType string

    The type of identification document provided by the retail customer for identification purposes. Valid options include: Passport, DrivingLicence, NationalInsurance, NationalId, SocialSecurity. Optional unless information for other ID fields such as idCountryOfIssue, idNumber and/or idExpiryDate is specified.

    Maximum length
    255
    Enum array
    Passport, DrivingLicence, NationalInsurance, NationalId, SocialSecurity
  • idNumber string

    The identification number on the identification document provided by the retail customer. Optional unless information for other ID fields such as idCountryOfIssue, idType, and/or idExpiryDate is specified.

    Maximum length
    255
  • idExpiryDate string

    The expiry date of the identification document provided by the retail customer in date-time format. Optional unless information for other ID fields such as idCountryOfIssue, IdType and/or idNumber is specified.

  • countryOfResidence string

    ISO 3166 alpha-3 country code. This field must be present if you want to make a cash ISA for the customer.

    Maximum length
    3
    Enum array
    ABW, AFG, AGO, AIA, ALA, ALB, AND, ARE, ARG, ARM, ASM, ATA, ATF, ATG, AUS, AUT, AZE, BDI, BEL, BEN, BES, BFA, BGD, BGR, BHR, BHS, BIH, BLM, BLR, BLZ, BMU, BOL, BRA, BRB, BRN, BTN, BVT, BWA, CAF, CAN, CCK, CHE, CHL, CHN, CIV, CMR, COD, COG, COK, COL, COM, CPV, CRI, CUB, CUW, CXR, CYM, CYP, CZE, DEU, DJI, DMA, DNK, DOM, DZA, ECU, EGY, ERI, ESH, ESP, EST, ETH, FIN, FJI, FLK, FRA, FRO, FSM, GAB, GBR, GEO, GGY, GHA, GIB, GIN, GLP, GMB, GNB, GNQ, GRC, GRD, GRL, GTM, GUF, GUM, GUY, HKG, HMD, HND, HRV, HTI, HUN, IDN, IMN, IND, IOT, IRL, IRN, IRQ, ISL, ISR, ITA, JAM, JEY, JOR, JPN, KAZ, KEN, KGZ, KHM, KIR, KNA, KOR, KWT, LAO, LBN, LBR, LBY, LCA, LIE, LKA, LSO, LTU, LUX, LVA, MAC, MAF, MAR, MCO, MDA, MDG, MDV, MEX, MHL, MKD, MLI, MLT, MMR, MNE, MNG, MNP, MOZ, MRT, MSR, MTQ, MUS, MWI, MYS, MYT, NAM, NCL, NER, NFK, NGA, NIC, NIU, NLD, NOR, NPL, NRU, NZL, OMN, PAK, PAN, PCN, PER, PHL, PLW, PNG, POL, PRI, PRK, PRT, PRY, PSE, PYF, QAT, REU, ROU, RUS, RWA, SAU, SDN, SEN, SGP, SGS, SHN, SJM, SLB, SLE, SLV, SMR, SOM, SPM, SRB, SSD, STP, SUR, SVK, SVN, SWE, SWZ, SXM, SYC, SYR, TCA, TCD, TGO, THA, TJK, TKL, TKM, TLS, TON, TTO, TUN, TUR, TUV, TWN, TZA, UGA, UKR, UMI, URY, USA, UZB, VAT, VCT, VEN, VGB, VIR, VNM, VUT, WLF, WSM, YEM, ZAF, ZMB, ZWE
  • currentAddress object, Required

  • previousAddresses array

request

{
"firstName": "John",
"middleName": "Henry",
"surname": "Smith",
"dateOfBirth": "2019-08-24",
"email": "user@example.com",
"idCountryOfIssue": "GBR",
"idType": "Passport",
"idNumber": "123456789",
"idExpiryDate": "2019-08-24T14:15:22Z",
"countryOfResidence": "GBR",
"currentAddress": {},
"previousAddresses": [
{
"addressType": "TradingAddress",
"validFrom": "2019-08-24T14:15:22Z",
"validTo": "2019-08-24T14:15:22Z",
"countryCode": "GBR",
"buildingNameNumber": "Judge House",
"streetName": "High St",
"city": "Northleach",
"county": "Gloucestershire",
"postalCode": "GL55 3NJ"
}
]
}
Code copied

Response (application/json)

  • 201 Created successfully.
  • 400 Invalid or incomplete customer details.
  • 403 Forbidden

Created successfully.

{
"id": "900b30fb-711c-4820-a910-07d31cfe06a5"
}
Code copied