Partner Onboarding Service (without eKYC flow)
Version History:
Version | Description | Author | Date (dd/mm/yyyy) |
1.0.0 | DRAP Onboarding Service (without eKYC flow) Document | Ajai Antony | 07/06/2024 |
1.0.1 | Customer updation failure response | Ajai Antony | 14/06/2024 |
1.0.2 | AML Alert Closure CallBack API updates | Ajai Antony | 15/10/2024 |
1.0.3 | Customer Onboarding Status details | Ajai Antony | 14/10/2025 |
CLASSIFICATION: PUBLIC
The partner will conduct e-KYC or KYC procedures autonomously and employ the listed APIs to enroll customers onto the Customer Data Platform (CDP). They will supply essential customer details obtained from a trusted data source (such as an e-KYC provider or government database), additional information based on country requirements, along with customer documents, including front and back images of the customer's ID, a facial image, and any e-KYC verification or confirmation reports if applicable using the customer onboard API.
Access Token API
An access token is a key to the gateway to access any other API. The API will return the access token if the user is successfully authenticated and have the authorization to access these services. Every access token is tagged with validity and the expiry duration is echoed in the response for the calling application to manage the state accordingly. Token if used after its validity period restrict access to any services and a new token to be generated in this case.
API | https://{{baseUrl}}/auth/realms/cdp/protocol/openid-connect/token |
Method | POST |
Headers | Content-Type : application/x-www-form-urlencoded |
Access Token Payload | --data-urlencode 'grant_type=password' \
--data-urlencode 'scope=api://3a3f52a1-1b64-4c27-81f0-50a6ca01324d/customer' \
--data-urlencode 'client_id=<<client_id>>' \
--data-urlencode 'client_secret=<<secret>>' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=<<username>>' \
--data-urlencode 'password=<<password>>'
|
Refresh Token Payload | --data-urlencode 'grant_type=password' \
--data-urlencode 'client_id=<<client_id>>' \
--data-urlencode 'client_secret=<<secret>>' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'refresh_token=<<refreshToken>>' \ |
Response | {
"token_type": "bearer",
"access_token": "<<access_token_value>>",
"expires_in": 7199,
"refresh_expires_in": 7199,
"refresh_token": "<<refresh_token_value>>",
"scope": "----",
"not-before-policy": 0,
"session_state": "<<session_state>>"
} |
Header
Name | Data Type | Max Length | Mandatory | Description |
|---|---|---|---|---|
Content-Type | String | 36 | MANDATORY | Content type |
Payload
Name | Data Type | Max Length | Mandatory | Description |
|---|---|---|---|---|
grant_type | String | 10 | MANDATORY | Grant type. Will up provided |
scope | String | 60 | MANDATORY | Scope name. Will be provided |
client_id | String | 60 | MANDATORY | Client Id. Will be provided |
client_secret | String | 60 | MANDATORY | Client secret. Will be provided |
username | String | 60 | MANDATORY | Admin user name |
password | String | 60 | MANDATORY | Admin password |
Response
Name | Data Type | Max Length | Mandatory | Description |
|---|---|---|---|---|
token_type | String | - | MANDATORY | Token type |
scope | String | - | MANDATORY | Scope details |
access_token | String | 600 | MANDATORY | Access token to access the APIs |
refresh_token | String | 600 | MANDATORY | refresh token to refresh the Token. |
expires_in | Integer | - | MANDATORY | Token expiry time in seconds |
refresh_expires_in | Integer | - | MANDATORY | Refresh Token expiry time in seconds |
Customer Lookup API v2
API to be used to look up customer information by ID type and ID number.
API | |
Authorization | Bearer Token |
Method | POST |
Headers | Content-Type:application/json |
Payload | {
"idNumber": "784199554586091",
"idType": "4"
} |
Success Response
HttpStatusCode : 200 | {
"status": "success",
"statusCode": 200,
"data": {
"ecrn": "7841003233051516",
"first_name": "ZAFARBASHIR",
"middle_name": "",
"last_name": "BASHIRMASIH",
"agent_location_id": "784101",
"primary_mobile_number": "+971554747002",
"email_id": "BASHIRMASIH@GMAIL.COM",
"customer_status": "ACTIVE",
"aml_scan_status": "Accepted",
"id_status": "Active",
"id_date_of_expiry": "2030-12-10T00:00:00.000+00:00"
}
} |
Customer Not Found HttpStatusCode : 200 | {
"status": "failure",
"statusCode": 404,
"errorCode": 45001,
"message": "Customer not found"
} |
Subscription Pending Response HttpStatusCode : 200 | {
"status": "failure",
"statusCode": 404,
"errorCode": 45003,
"message": "Customer not Subscribed"
} |
Bad Request HttpStatusCode : 200 | {
"status": "failure",
"statusCode": 400,
"errorCode": 40001,
"message": "Invalid format input"
} |
Internal Server Error HttpStatusCode : 200 | {
"status": "failure",
"statusCode": 500,
"errorCode": 45006,
"message": "Error while searching customer!"
} |
Validation Failure Response - Customer Under Compliance Investigation HttpStatusCode : 200 | {
"status": "failure",
"statusCode": 500,
"errorCode": 45013,
"message": "Customer under Compliance investigation!"
} |
Validation Failure Response - Blocked Customer HttpStatusCode : 200 | {
"status": "failure",
"statusCode": 404,
"errorCode": 45051,
"message": "Customer can not be Accepted"
} |
Authentication Failure Response HttpStatusCode : 401 | {
"timestamp": "2023-12-22T06:04:30.477+00:00",
"status": 401,
"error": "Unauthorized",
"path": "/api/v2/customer/validate"
} |
Header
Name | Data Type | Max Length | Mandatory | Description |
|---|---|---|---|---|
Content-Type | String | 36 | MANDATORY | Content type |
Authorization | String |
| MANDATORY | Authorization Token |
Payload
Name | Data Type | Max Length | Mandatory | Description |
|---|---|---|---|---|
idType | String | 3 | MANDATORY | Customer id type code |
idNumber | String | 30 | MANDATORY | Customer id Number |
Response
Name | Data Type | Max Length | Description |
|---|---|---|---|
status | String | 255 | status description |
statusCode | Integer | - | Status code |
errorCode | Integer | - | Error code if any error encountered. |
message | String | 255 | Message |
data | Object | - | Data object |
ecrn | String | 20 | Customer unique identification number |
first_name | String | 100 | Customer first name |
middle_name | String | 60 | Customer middle name |
last_name | String | 60 | Customer last name |
agent_location_id | String | 10 | Onboarded Agent |
primary_mobile_number | String | 20 | Customer mobile no |
email_id | String | 255 | Customer email |
customer_status | String | 20 | Customer Status ACTIVE / KYC_PENDING / INACTIVE / REJECTED / BLOCKED |
aml_scan_status | String | 20 | AML Scanned Status “Accepted” / “Rejected“ / “Under Investigation”/ “Failed” |
id_status | String | 20 | Possible values : "Active", "Expired",”Inactive” |
id_date_of_expiry | String | 50 | YYYY-MM-DD format |
Individual Onboarding API
API to be used to onboard a customer.
API | https://{{baseUrl}}/caas-lcm/api/v1/CAAS/onBoarding/customer |
Authorization | Bearer Token |
Method | POST |
Headers | Content-Type:application/json |
Payload | {
"channel": "WEB",
"first_name": "IRFAN MANAKKAT THEKKE",
"salutation": "Mr",
"middle_name": "PURAYIL ISMAIL",
"last_name": "NANGARATH MUNDACHI",
"preferred_name": "IRFAN MANAKKAT THEKKE",
"nationality": "IN",
"second_nationality": "GB",
"native_region": 1,
"date_of_birth": "1995-07-28",
"country_of_birth": "IN",
"place_of_birth": "INDIA",
"resident_type_id": 101,
"country_of_residence": "AE",
"gender": "Male",
"mothers_maiden_name": "SAFIYA",
"primary_mobile_number": "+971502106707",
"secondary_mobile_number": "+971502412378",
"email_id": "irfanmtp1@gmail.com",
"phone_number": "+971502106707",
"occupation_id": 2856,
"political_exposed_person": false,
"updated_by": "784irfan",
"additional_docs": [
{
"base64_data": "<<base64Data>>",
"content_type": "image/jpeg",
"document_id": "1"
},
{
"base64_data": "<<base64Data>>",
"content_type": "image/jpeg",
"document_id": "2"
}
],
"address_list": [
{
"address_type_id": "1",
"building_name": "MANKHOOL BUILDING",
"street_name": "Electra Street",
"landmark": "HOT Bread",
"city": "Electra Street",
"district": "Abu Dhabi",
"state": "Abu Dhabi",
"country": "AE",
"zip": 0,
"po_box": null,
"mobile_number": "+971502106707"
},
{
"address_type_id": "2",
"building_name": "ABC House",
"street_name": "Kaikottukadavu",
"landmark": "ABC School",
"city": "Thrikkaripur",
"district": "Kasaragod",
"state": "kerala",
"country": "IN",
"zip": 13345,
"mobile_number": "+971502106707"
}
],
"id_details": [
{
"id_type": 4,
"id_number": "784199554586091",
"name_as_per_id": "Irfan Manakkat Thekke Purayil",
"issued_country": "AE",
"issued_by": "EIDA",
"issued_at": "AE Govt.",
"issued_on": "2020-08-08",
"date_of_expiry": "2023-08-08",
"default_status": true,
"active_status": true,
"id_front": {
"base64_data": "<<base64Data>>",
"content_type": "image/jpeg"
},
"id_back": {
"base64_data": "<<base64Data>>",
"content_type": "image/jpeg"
}
},
{
"id_type": 2,
"id_number": "P4006315",
"visa_number": "VISA123",
"visa_expiry_date": "2024-06-30",
"name_as_per_id": "IRFAN M T P",
"issued_country": "IN",
"issued_by": "India Govt.",
"issued_at": "Kozhikkode",
"issued_on": "2016-04-28",
"date_of_expiry": "2026-04-27",
"default_status": true,
"active_status": true,
"id_front": {
"base64_data": "<<base64Data>>",
"content_type": "image/jpeg"
},
"id_back": {
"base64_data": "<<base64Data>>",
"content_type": "image/jpeg"
}
}
],
"customer_classification": {
"customer_type_id": 2,
"annual_income_range_id": 15,
"annual_income_currency_code": "AED",
"social_security_number": "SSN123",
"tax_registration_number": 123,
"txn_issued_country": "AE",
"employer_name": "EMKE",
"employer_address": "UAE",
"employer_phone": "+971502106101",
"employer_ecrn": "",
"employer_establishment_id": "LULUEXCHANGE123",
"risk_rating_id": 3,
"pep_category": 1,
"personal_mohre_id": "IRFAN786",
"income_type": 1,
"profession_category": "PC1",
"reason_for_acc": "Remittance",
"txn_vol_month": 1,
"txn_count_month": 1,
"show_remarks_on_txn": false,
"customer_remarks": "Test Remarks",
"agent_ref_no": "786000786",
"social_links": [
{
"social_links_id": 2,
"text_field": "insta.com"
},
{
"social_links_id": 1,
"text_field": "fb.com"
}
],
"first_language": "en",
"marital_status": 2,
"dnfbp": false,
"dpms": false,
"profile_category": 1,
"profile_photo": {
"base64_data": "<<bas64data>>",
"content_type": "image/jpeg"
}
}
} |
Success Response
HttpStatusCode : 200 | {
"status": "success",
"data": {
"aml_scan_status": "Accepted",
"ecrn": "7841003247752409",
"customer_status": "ACTIVE",
"pep": false,
"aml_category": 2
},
"status_code": 200,
"request_id": "4138e3038999d41b7534ce12a18a6031"
} |
Validation Failure Response - Customer Under Compliance Investigation HttpStatusCode : 406 | {
"request_id": "9dff05c2a18e6e73964c0c91f75f463b",
"status": "failed",
"status_code": 406,
"error_code": 45013,
"message": "Customer 7841003236577331 Under Compliance Investigation"
} |
Validation Failure Response - Blocked Customer HttpStatusCode : 406 | {
"request_id": "d0f7edcbb91abefa58f3fc9672711e1b",
"status": "failed",
"status_code": 406,
"error_code": 45051,
"message": "Customer 1074023185717024 Cannot be Accepted"
} |
Validation Failure Response - Invalid Master Data HttpStatusCode : 400 | {
"request_id": "cb3bc0a37334c4eacdbea088f926b7ab",
"status": "failed",
"status_code": 406,
"error_code": 45053,
"message": " Invalid Nationality INN!"
} |
Validation Failure Response - Mandatory Field Missing HttpStatusCode : 400 | {
"status": "failure",
"status_code": 400,
"error_code": 40002,
"message": "Invalid format or missing mandatory request",
"details": {
"firstName": "Invalid first name"
},
"request_id": "729d5085e553f3830277d0cb5372f2b2"
} |
Customer Updation Failure Responce | {
"request_id": "6212f1084eb59c5d88b34078c8330a0c",
"status": "failed",
"status_code": 404,
"error_code": 45032,
"message": "Customer update failed"
} |
Authentication Failure Response HttpStatusCode : 401 | {
"timestamp": "2023-03-15T14:26:24.292+00:00",
"status": 401,
"error": "Unauthorized",
"message": "",
"path": "/api/v1/CAAS/onBoarding/customer"
} |
Internal Server Error
HttpStatusCode : 502 | {
"status": "failed",
"message": "Backend Technical Problem",
"status_code": 502,
"error_code": 40001,
"request_id": "a700be42dcbb3c71f36c1bcea42f41fa"
} |
Header
Name | Data Type | Max Length | Mandatory | Description |
|---|---|---|---|---|
Content-Type | String |