πCallback URL Integration
A guide to specify the requirements to implement a callback URL which will be invoked by the eNROLL after client enrollment to sync his/her enrollment data with the target organization.
Success callback: will be invoked by the eNROLL to sync Approved enrollments.
Fail callback: will be invoked by the eNROLL to sync Rejected enrollments.
1. In your organization admin panel You Can Set The Settings of callback url :
Success CallBack url: the url of the callback api will be invoked by the eNROLL to sync Approved enrollments.
Faild CallBack url: the url of the callback api will be invoked by the eNROLL to sync Rejected enrollments.
Token url: will be invoked by the eNROLL to obtain an access token.
Client Id: string will be send in the header of request for authentication
Client Secret: string will be send in the header of request for authentication

There are two separate callback URLs and an authorization token endpoint that must be implemented by the organization wishing to integrate with eNROLL:
a. Authorization Token Endpoints
will be invoked by the eNROLL to obtain an access token.
POST
{{Your Token url}}
Headers
Content-Type
Set to application/x-www-form-urlencoded
Request Body
client_id
String
Provided by the organization.
Must be registered in callback URLs screen in the eKYC Org Admin Panel.
client_secret
String
Provided by the organization.
Must be registered in callback URLs screen in the eKYC Org Admin Panel.
grant_type
String
Set to client_credentials
{
"access_token": "string",
"expires_in": βintβ,
"token_type": "Bearer",
}
b. Callback EndPoints
Callback Invoke
POST
{{Your Provided Callback URL}}
Headers
Callback-Test
String
This header will be sent only when a Test attempt is performed to verify that the callback URL is up.
The org should ignore the request payload when this header is present.
Request Body
applicants
List of applicants
If Callback-Test header is present, then return 200 Ok
Request body json example :
[
{
"isUpdate":"boolean" , // true if the callback for update request
"AMLBlackList" : "boolean" , // true if user is blacklisted
"correlationId" : "string" , // ex : " 1256398"
"applicantId": "string", //unique identifier for each application
"fullNameAr": "string",
"fullNameEn": "string",
"birthdate": "1997-03-01T00:00:00",
"gender": "string", // ex: "M" or "F"
"phoneNumbers": "List<string>", //ex:["+201068282888","+201068282882"]
"emails": "List<string>", //ex:["a@b.c","x@y.z"]
"LivePhotoPath":"string", // Live Photo Path Captured in Face Matching Step
"nationalIdInfo": {
"firstName": "string",
"familyName": "string",
"address": "string",
"addressNormalized":"string",
"state": "string",
"idNumber": "string", //ex: "29703012357788"
"documentNumber": "string",
"documentTypeId": "string", //ex: "identity-card"
"documentTypeCode": "string", //ex: "EGY"
"issueDate": "2020-01-01T00:00:00",
"profession": "string",
"maritalStatus": "string",
"religion": "string",
"nationality": "string", //ex: "EGY"
"expirationDate": "2027-09-22T00:00:00",
"idFrontScanPath": "string", //file name to be get using new api
"idBackScanPath": "string", //file name to be get using new api
"photo": "string", //file name to be get using new api
},
"locationInfo": {
"latitude": "string", //ex:"29.996407"
"longitude": "string" //ex: "31.148291"
},
"passportInfo": {
"firstNameEn": "string",
"familyNameEn": "string",
"firstNameAr": "string",
"familyNameAr": "string",
"expirationDate": "2030-05-27T00:00:00",
"passportScanPath": "string", //file name to be get using new api
"photo": "string", //file name to be get using new api
"documentNumber": "string",
"documentCode": "string",
"issuingAuthority": "string", //ex: "EGY"
"nationality": "string" //ex: "EGY"
},
"status": "int"
// Accepted = 1,
//ManuallyAccepted = 4,
//ManuallyRejected = 5
}
]
isUpdate
true if the callback for update request
applicantId
unique identifier for each application
gender
ex: "M" or "F"
phoneNumbers
ex:["+201068282888","+201068282882"]
emails
ex:["a@b.c","x@y.z"]
livePhotoPath
Live Photo Path Captured in Face Matching Step
firstName
first line of name in national id
familyName
second line of name in national id
address
first line of address in national id
state
second line in address in national id
idNumber
ex: "29703012357788"
documentNumber
Factory Naumber
documentTypeCode
ex: "EGY"
issueDate
issue date for document
nationality
ex: "EGY"
idFrontScanPath
file name to be get using images api
idBackScanPath
file name to be get using images api
photo
fetched from id document. file name to be get using new api
passportScanPath
file name to be get using images api
issuingAuthority
ex: "EGY"
status
ex :
Accepted = 1,
ManuallyAccepted = 4,
ManuallyRejected = 5
REVERSE INTEGRATION DETAILS
There are also an optional end points that organization could use to get specific applications during a period of time
Token generation:
this is an Api to generate token using tenantId, tenantSecret.
POST /api/v1/Auth/GenerateAuthToken HTTP/1.1
Host:
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 41
{
"tenantId": "text",
"tenantSecret": "text"
}
{
"token": "text",
"expirationDate": "2025-06-30T21:29:05.381Z"
}
Get Applicant Id By Request Id :
Get applicants By Request ID OR Correlation Id:
Get applicants during specific date
POST /api/v1/Applicant/GetApplicationsByDatePaged HTTP/1.1
Host:
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 82
{
"from": "2025-06-30T21:29:05.381Z",
"to": "2025-06-30T21:29:05.381Z",
"pageNumber": 1
}
Success
{
"totalCount": 1,
"pageNumber": 1,
"pageSize": 1,
"entities": [
{
"applicantId": "text",
"fullNameAr": "text",
"fullNameEn": "text",
"birthdate": "2025-06-30T21:29:05.381Z",
"gender": "text",
"phoneNumber": "text",
"email": "text",
"nationalIdInfo": {
"firstName": "text",
"familyName": "text",
"address": "text",
"state": "text",
"idNumber": "text",
"documentNumber": "text",
"documentTypeId": "text",
"documentTypeCode": "text",
"issueDate": "2025-06-30T21:29:05.381Z",
"profession": "text",
"maritalStatus": "text",
"religion": "text",
"nationality": "text",
"expirationDate": "2025-06-30T21:29:05.381Z",
"idFrontScanPath": "text",
"idBackScanPath": "text",
"photo": "text"
},
"locationInfo": {
"latitude": "text",
"longitude": "text"
},
"passportInfo": {
"firstNameEn": "text",
"familyNameEn": "text",
"firstNameAr": "text",
"familyNameAr": "text",
"expirationDate": "2025-06-30T21:29:05.381Z",
"passportScanPath": "text",
"photo": "text",
"documentNumber": "text",
"documentCode": "text",
"issuingAuthority": "text",
"nationality": "text"
},
"livePhotoPath": "text",
"status": 1
}
]
}
Get applicants by list of applicantId:
POST /api/v1/Applicant/GetApplicationsByIdsPaged HTTP/1.1
Host:
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 42
{
"applicationIds": [
"text"
],
"pageNumber": 1
}
Success
{
"totalCount": 1,
"pageNumber": 1,
"pageSize": 1,
"entities": [
{
"applicantId": "text",
"fullNameAr": "text",
"fullNameEn": "text",
"birthdate": "2025-06-30T21:29:05.381Z",
"gender": "text",
"phoneNumber": "text",
"email": "text",
"nationalIdInfo": {
"firstName": "text",
"familyName": "text",
"address": "text",
"state": "text",
"idNumber": "text",
"documentNumber": "text",
"documentTypeId": "text",
"documentTypeCode": "text",
"issueDate": "2025-06-30T21:29:05.381Z",
"profession": "text",
"maritalStatus": "text",
"religion": "text",
"nationality": "text",
"expirationDate": "2025-06-30T21:29:05.381Z",
"idFrontScanPath": "text",
"idBackScanPath": "text",
"photo": "text"
},
"locationInfo": {
"latitude": "text",
"longitude": "text"
},
"passportInfo": {
"firstNameEn": "text",
"familyNameEn": "text",
"firstNameAr": "text",
"familyNameAr": "text",
"expirationDate": "2025-06-30T21:29:05.381Z",
"passportScanPath": "text",
"photo": "text",
"documentNumber": "text",
"documentCode": "text",
"issuingAuthority": "text",
"nationality": "text"
},
"livePhotoPath": "text",
"status": 1
}
]
}
Get image as base64 by ImagePath:
ex: Bearer
GET /api/v1/Applicant/GetImageByPath HTTP/1.1
Host:
Authorization: YOUR_API_KEY
Accept: */*
text
Get list of images by list of ImagePaths:
ex: Bearer
POST /api/v1/Applicant/GetImagesByPaths HTTP/1.1
Host:
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 8
[
"text"
]
[
{
"path": "text",
"image": "text"
}
]
Last updated