πŸ”„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

  1. 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

Name
Type
Description

Content-Type

Set to application/x-www-form-urlencoded

Request Body

Name
Type
Description

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

Name
Type
Description

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

Name
Type
Description

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 
    } 
]
Field
Description

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
Authorizations
Header parameters
Accept-LanguageStringOptional
Body
tenantIdstring | nullableOptional
tenantSecretstring | nullableOptional
Responses
200
Success
post
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
Authorizations
Header parameters
Accept-LanguageStringOptional
Body
fromstring Β· date-time | nullableOptional
tostring Β· date-time | nullableOptional
pageNumberinteger Β· int32Optional
Responses
200
Success
application/json
post
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
}
200

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
Authorizations
Header parameters
Accept-LanguageStringOptional
Body
applicationIdsstring[] | nullableOptional
pageNumberinteger Β· int32Optional
Responses
200
Success
application/json
post
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
}
200

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:

get
Authorizations
Query parameters
imagePathstringOptional
Header parameters
Accept-LanguageStringOptional
AuthorizationstringOptional

ex: Bearer

Responses
200
Success
Responsestring
get
GET /api/v1/Applicant/GetImageByPath HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Accept: */*
text

Get list of images by list of ImagePaths:

post
Authorizations
Header parameters
Accept-LanguageStringOptional
AuthorizationstringOptional

ex: Bearer

Body
string[]Optional
Responses
200
Success
post
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