MULTI CHANNEL- DISTRIBUTOR API DOCUMENTATION
Introduction
The following APIs are intended to serve the purpose of creating multiple distribution channels for Signzy products.
For example, say a Mutual Fund financial institution wants to onboard investors, they can use Signzy’s Investor Onboarding product. Now say the financial institute requires to open onboardings into its systems through multiple channels, say channels A, B & C and needs to see the data pushed by the different channels into the same Backend operations system through which they themselves onboard the mutual fund investors, this can be achieved through the Multi-channel distribution system through APIs as detailed in the below API documentation.
Basic Philosophy
The basic philosophy of the distributor channel system exposed through APIs is to treat each channel to be created by a channel only (sub channels) with grants and authority of the child channel controlled by the parent channel.
Distribution channel APIs are exposed in the below two categories.
- APIs for Channel
- APIs for Onboarding
The channels create onboardings and possess one to many relationship to onboardings. Channels also relate to other channels through one belongs to one and one has many relationships. Which can be summed as below:
- A channel can have multiple Channels
- A channel belong to another Channel
- A channel has many onboardings
- An onboarding is created by(and belongs to) a channel
Basic Details
API Endpoint details
Protocol: HTTPS
Preproduction hostname: multi-channel-preproduction.signzy.tech
Production hostname: multi-channel.signzy.tech
Authentication: Token based authentication
Authentication
The authentication is done at the channel level. You can think of channel as an extension of users. It accepts general details like email, password and username and also further details which describe the grants given to a particular channel.
A channel may be created by another channel only.
Authorizing your access
Authentication is done at the channel level. A channel can be thought of an extension of the user model and authentication can be executed using a combination of username and password. The username and password are set by the channel creating another channel. A channel’s username and password can be changed anytime using an older password.
You need to have an access token for making any further API calls, which you can receive by logging in manually or programmatically using these credentials.
Signzy APIs adhere to authentication defined by Swagger 2.0 specifications. Each call to the APIs should include an ‘Authorization’ header or ‘access_token’ query parameter for authentication.
Logging into the API service requires a simple HTTP call. Following section mentions data to be input, expected output and meaning of fields.
URL: /api/channels/login
Hostname and protocol to be applied as described above.
Input data
Two parameters to be passed as JSON payload for logging in
- username -> String
- password -> String
Request:
{
“username”: “…….”,
“password”: “……..”
}
Expected output
Following 4 properties are expected as output from the Login API
- id -> String (This is the access token to be used in the below requests.)
- ttl -> Int (The time, number of seconds, for which the access token described above is valid for.)
- created -> String (ISO timestamp of creation date for this token.)
- userId -> String (Channel’s user ID, the user which created this token.)
{
“id”: “…….”,
“ttl”: 0000,
“created”: “…….”,
“userId”: “……..”
}
The userID returned above is important and is also referred to as the channel ID. The channel ID will further be required to make onboarding API calls.
Sending authenticated requests
Once you have an access token from the login API call, you can send further calls to different endpoints by passing the access-token in Authorization header or in access_token query (GET) parameter.
It is advisable to send Access Token in header since, query parameters are sometimes saved in the log files thereby exposing vulnerabilities until the access_token is deleted from sessions.
Security
Anybody with your API key/password or an Access Token generated using them can access all information you have created and also send requests on your behalf. It is strongly recommended to not send API-key/Password to client side and instead use reverse proxy to call Signzy APIs.
If case you think an access token is compromised, you should delete it using logout. Let us know if your Signzy Password/API-key is compromised as soon as possible, so that we can disable & create new ones and prevent any misuse of your data.
File exchange
You first need to upload the required images before sending for auto reading or forgery or any other Signzy AI APIs. Use the file upload system to upload images of ID Cards & documents to get a direct URL.
Upload
Endpoint
POST :: /api/onboardings/upload
Header
Authorization: “your access token” -> You will receive the access token from the Investor login API.
Request data
multipart-form-data with & ttl property
TTL
ttl accepts the following values:(2 mins, 10 mins, 30 mins, 2 hrs, 12 hrs, 7 days, 15 days, 1 month, 3 month, 6 month, 1 year, 3 years, infinity)
When multiple sides or pages of an ID card are required, you need to upload each of them. For example Aadhaar card has information on both sides whereas PAN has only front side containing useful information.
The urls expire in 30 seconds by default, unless explicitly specified in the inboud request in the ttl parameter.
Expected response
{
“file”: {
“id”: 1388,
“filetype”: “…….”,
“size”: 3181,
“directURL”: “…….”,
“protected”: false
}
}
The upload returns with the following properties.
- id -> Int (The id of the file)
- filetype -> String (Type of file which was passed into Signzy file system API)
- size -> Int (Size in bytes of the uploaded file)
- directURL -> String (Direct URL using which the file can be accessed. This is important and required in other API calls.).
Download
Endpoint
GET :: /api/onboardings/download
Header
Authorization: “your access token” -> You will receive the access token from the Investor login API.
Request Query
Name | Data type | Value |
q | String | Persist URL(Direct URL) |
Expected response.
Raw File
Channel APIs
Channel Login (For existing channel)
Endpoint
/api/channels/login
Request type
POST
Headers
Content-type: “application/json”
JSON payload
{
“username” : “<username>”,
“password” : “<password>”
}
Response
{
“id”: “< access token>”,
“ttl”: “<access token ttl in seconds>”,
“created”: “2018-12-03T20:34:37.455Z”,
“userId”: “< channel Id >”
}
Creating a new channel
For each distributor channel you can create a channel object by providing the required properties.
Endpoint
/api/channels/….your-channel-id…./channels
The channel-id is the userID that you get from the login call as described above.
Request type
POST
Headers
Content-type: “application/json” -> This is constant
Authorization: “your access token” -> You will receive the access token from the login API call as described above.
JSON payload
{
“product_productId”: “………”,
“product_customerId”: “………”,
“product_accessToken”: “………”,
“control_active”: true,
“control_allowedCount”: 20,
“control_updateProductInfo”: true,
“control_selfUpdation”: true,
“control_updateControls”: true,
“control_createChildren”: true,
“control_enableFrontendURLs”: false,
“disableEmailFromAmc”: false,
“username”: “………”,
“password”: “………”,
“email”: “………”,
“callbackOnAction”: {
“accepted”: “…”,
“rejected”: “…”,
“draft”: “…”
},
“pageCallbackUrl”: {
“identity”: “…..”,
“address”: “…..”,
“corraddress”: “…..”,
“bankaccount”: “…..”,
“documents”: “…..”,
“fatca”: “…..”,
“signature”: “…..”,
“photo”: “…..”,
“video”: “…..”,
“contract”: “…..”,
“submit” : “…..”
}
}
The API accepts the following properties as detailed in the table below.
Property | Data type | Example values |
username | String | username |
password | String | password |
String | ||
product_productId | String | investorOnbaording |
product_customerId | String | 5219872648addff |
product_accessToken | String | whr320jrehbfdvipkqwmnh |
control_active | Boolean | true/false |
control_allowedCount | Integer | Integer |
control_updateProductInfo | Boolean | true/false |
control_selfUpdation | Boolean | true/false |
control_updateControls | Boolean | true/false |
control_createChildren | Boolean | true/false |
control_enableFrontendURLs | Boolean | true/false |
disableEmailFromAmc | Boolean | true/false |
callbackOnAction | Object | |
pageCallbackUrl | Object |
Field descriptions
product_productId
This information tells what Signzy’s product does this particular channel allowed to push data into.
value = ‘investorOnboarding’
Currently only the above value is allowed.
product_customerId
The product_customerId is obtained for a particular user by logging into Signzy’s product as defined by the above definition. The userId parameter of login call is where you get the value of this paramenter.
product_accessToken
The product_accessToken is obtained for a particular user by logging into Signzy’s product as defined by the above definition. The id parameter of login call is where you get the value of this paramenter.
control_active
If control_active is set as true, only then the API calls from the channels will be allowed to enter into Signzy system, if this property isn’t set or is set to false, that channel won’t be make the channel API calls or onboarding API calls. Defaults to true if not set.
control_allowedCount
This property defines the number of onboarding objects that this channel can create. Defaults to 500 if not set.
control_selfUpdation
If this property is not set or set to false, then the update calls to their own object. The self updation API mentioned below will not be enabled. This enables the channels to update the username, password and email. For updating product specifications and the control parameters control_updateControls & control_updateProductInfo should also be set. Defaults to true if not set.
control_updateControls
If this property is not set or set to false, then the channel won’t be able to update the properties which have prefixe of control_. Defaults to false if not set.
control_updateProductInfo
If this property is not set or set to false, then the channel won’t be able to update the properties which have prefixe of product_. Defaults to false if not set.
control_createChildren
If this property is not set or set to false, then the channel won’t be able to child channels. Channels won’t be able to call the create channel API if this is not set or set as false. Defaults to false if not set.
control_enableFrontendURLs
Enables showing of frontend Web URLs for onboarding in response of create Onboarding API, in json keys: applicationUrl, autoLoginUrL, mobileLoginUrl, mobileAutoLoginUrl
disableEmailFromAmc
Flag to Disable/Enable Emails which are sent to investors on behalf of AMC. true implies email won’t be sent.Defaults to false if not set.
callbackOnAction
This object contains the list of callback URLs, to which data is to be posted, when any corresponding action is taken on the application. Defaults to empty if not set.
pageCallbackUrl
This object contains the list of callback URLs, to which data is to be posted, when any step is completed by the investor. Defaults to empty if not set.
Expected response
{
“product_productId”: “……..”,
“product_customerId”: “……..”,
“product_accessToken”: “……..”,
“control_active”: false,
“control_allowedCount”: 20,
“control_updateProductInfo”: false,
“control_selfUpdation”: true,
“control_updateControls”: true,
“control_createChildren”: true,
“control_enableFrontendURLs”: false,
“disableEmailFromAmc”: false,
“username”: “……”,
“email”: “……”,
“id”: “……”,
“channelId”: “……”,
“callbackOnAction”: {
“accepted”: “…”,
“rejected”: “…”,
“draft”: “…”
},
“pageCallbackUrl”: {
“identity”: “…..”,
“address”: “…..”,
“corraddress”: “…..”,
“bankaccount”: “…..”,
“documents”: “…..”,
“fatca”: “…..”,
“signature”: “…..”,
“photo”: “…..”,
“video”: “…..”,
“contract”: “…..”,
“submit” : “…..”
}
}
Updating a child channel
A child channel is basically a distributor of a service and controlled by the parent. A child channel can be updated by sending a PUT call to the sub channel endpoint.
Endpoint
/api/channels/….your-channel-id…./channels/….child-channel-id….
The channel-id is the userID that you get from the login call as described above.
Request type
PUT
Headers
Content-type: “application/json” -> This is constant
Authorization: “your access token” -> You will receive the access token from the login API call as described above.
Allowed properties for updation
{
“product_productId”: “………”,
“product_customerId”: “………”,
“product_accessToken”: “………”,
“control_active”: true,
“control_allowedCount”: 20,
“control_updateProductInfo”: true,
“control_selfUpdation”: true,
“control_updateControls”: true,
“control_createChildren”: true,
“control_enableFrontendURLs”: false,
“disableEmailFromAmc”: false,
“username”: “………”,
“password”: “………”,
“email”: “………”,
“callbackOnAction”: {
“accepted”: “…”,
“rejected”: “…”,
“draft”: “…”
},
“pageCallbackUrl”: {
“identity”: “…..”,
“address”: “…..”,
“corraddress”: “…..”,
“bankaccount”: “…..”,
“documents”: “…..”,
“fatca”: “…..”,
“signature”: “…..”,
“photo”: “…..”,
“video”: “…..”,
“contract”: “…..”,
“submit” : “…..”
}
}
The API accepts the following properties as detailed in the table below.
Property | Data type | Example values |
username | String | username |
password | String | password |
String | ||
product_productId | String | investorOnbaording |
product_customerId | String | 5219872648addff |
product_accessToken | String | whr320jrehbfdvipkqwmnh |
control_active | Boolean | true/false |
control_allowedCount | Integer | true/false |
control_updateProductInfo | Boolean | true/false |
control_selfUpdation | Boolean | true/false |
control_updateControls | Boolean | true/false |
control_createChildren | Boolean | true/false |
control_enableFrontendURLs | Boolean | true/false |
disableEmailFromAmc | Boolean | true/false |
callbackOnAction | Object | |
pageCallbackUrl | Object |
Updating a channel (self update)
The self update on the channel is to be used by a channel to update itself. A particular channel can use the self update API to update properties like password, email and other properties not controlled by the parent. Parent controlled properties include properties like active boolean and other allowances granted by the parent.
Endpoint
/api/channels/….your-channel-id….
The channel-id is the userID that you get from the login call as described above.
Request type
PUT
Headers
Content-type: “application/json” -> This is constant
Authorization: “your access token” -> You will receive the access token from the login API call as described above.
Allowed properties for updation
{
“product_productId”: “………”,
“product_customerId”: “………”,
“product_accessToken”: “………”,
“control_active”: true,
“control_allowedCount”: 20,
“control_updateProductInfo”: true,
“control_selfUpdation”: true,
“control_updateControls”: true,
“control_createChildren”: true,
“control_enableFrontendURLs”: false,
“disableEmailFromAmc”: false,
“username”: “………”,
“password”: “………”,
“email”: “………”,
“callbackOnAction”: {
“accepted”: “…”,
“rejected”: “…”,
“draft”: “…”
},
“pageCallbackUrl”: {
“identity”: “…..”,
“address”: “…..”,
“corraddress”: “…..”,
“bankaccount”: “…..”,
“documents”: “…..”,
“fatca”: “…..”,
“signature”: “…..”,
“photo”: “…..”,
“video”: “…..”,
“contract”: “…..”,
“submit” : “…..”
}
}
The API accepts the following properties as detailed in the table below.
Property | Data type | Example values |
username | String | username |
password | String | password |
String | ||
product_productId | String | investorOnbaording |
product_customerId | String | 5219872648addff |
product_accessToken | String | whr320jrehbfdvipkqwmnh |
control_active | Boolean | true/false |
control_allowedCount | Integer | Integer |
control_updateProductInfo | Boolean | true/false |
control_selfUpdation | Boolean | true/false |
control_updateControls | Boolean | true/false |
control_createChildren | Boolean | true/false |
control_enableFrontendURLs | Boolean | true/false |
disableEmailFromAmc | Boolean | true/false |
callbackOnAction | Object | |
pageCallbackUrl | Object |
Get channel details
/api/channels/….your-channel-id….
The channel-id is the userID that you get from the login call as describled above.
Request type
GET
Expected response
{
“product_productId”: “………”,
“product_customerId”: “………”,
“product_accessToken”: “………”,
“control_active”: true,
“control_allowedCount”: 20,
“control_updateProductInfo”: true,
“control_selfUpdation”: true,
“control_updateControls”: true,
“control_createChildren”: true,
“control_enableFrontendURLs”: false,
“disableEmailFromAmc”: false,
“username”: “………”,
“password”: “………”,
“email”: “………”,
“id”: “……”,
“channelId”: “……”,
“callbackOnAction”: {
“accepted”: “…”,
“rejected”: “…”,
“draft”: “…”
},
“pageCallbackUrl”: {
“identity”: “…..”,
“address”: “…..”,
“corraddress”: “…..”,
“bankaccount”: “…..”,
“documents”: “…..”,
“fatca”: “…..”,
“signature”: “…..”,
“photo”: “…..”,
“video”: “…..”,
“contract”: “…..”,
“submit” : “…..”
}
}
List channels
Endpoint
/api/channels/….your-channel-id…./channels
The channel-id is the userID that you get from the login call as described above.
Request type
GET
Expected response
[{
“product_productId”: “………”,
“product_customerId”: “………”,
“product_accessToken”: “………”,
“control_active”: true,
“control_allowedCount”: 20,
“control_updateProductInfo”: true,
“control_selfUpdation”: true,
“control_updateControls”: true,
“control_createChildren”: true,
“control_enableFrontendURLs”: false,
“disableEmailFromAmc”: false,
“username”: “………”,
“password”: “………”,
“email”: “………”,
“id”: “……”,
“channelId”: “……”,
“callbackOnAction”: {
“accepted”: “…”,
“rejected”: “…”,
“draft”: “…”
},
“pageCallbackUrl”: {
“identity”: “…..”,
“address”: “…..”,
“corraddress”: “…..”,
“bankaccount”: “…..”,
“documents”: “…..”,
“fatca”: “…..”,
“signature”: “…..”,
“photo”: “…..”,
“video”: “…..”,
“contract”: “…..”,
“submit” : “…..”
}
}]
List of grants
Endpoint
/api/channels/getAmcGrants
Request type
GET
Headers
Authorization: “channel access token”
Expected response
{
“poi_list”: [“list of Id cards applicable for POI”],
“poa_list”: [“list of Id cards applicable for POA”],
“cpoa_list”: [“list of Id cards applicable for CPOA”],
“allowed_sections”: [“List of sections allowed for the corresponding AMC”],
“form_sections”: {
“placeOfBirthMandatory”: true,
“annualIncomeMandatory”: true,
“bankAddressMandatory”: true,
“aadhaarFieldMandatory”: true
}
}
Onboarding APIs
The onboarding APIs help a channel create onboarding objects. A channel can create onboardings for a parent product.
APIs which are applicable for AMC On-boarding Journey flow will be accessible by the distributor. Distributors won’t be able to access any other API.
Create captcha image
/api/captchas/get
Request type
GET
Expected response
Header
id -> ID of the generated captcha
{
“id”: “502cd6b2aepf021976379802”
}
Body
Raw File
Verify captcha
You can use this endpoint to verify the captcha on the front-end itself before sending into the Signzy login API.
Request type
POST
Endpoint
/api/captchas/verify
Input JSON
- text -> text to be verified.
- id -> id of the generated captcha.
{
“text”:”00000″,
“id”:”502cd6b2aepf021976379802″
}
Expected output
{
“result”: {
“isVerified”: true
}
}
isVerified -> true denotes captcha is verified, false denotes catcha is not verified
Create onboarding object
Endpoint
/api/channels/…channel ID ../onboardings
Request type
POST
Headers
Content-type: “application/json” Authorization: “channel access token”
Input
Property | Data type | Example values |
String (Required) , valid email | Investor’s Email | |
username | String (Required) string of lower case alphabets, digits, ‘.’, ‘_’, ‘-‘ with min length of 3 | Investor’s Username |
phone | String (Required) 10 digit string and first digit is one of ‘6,7,8,9’ | Investor’s Phone Number |
name | String (Required) string of min length of 2 consisting of any character | Investor’s Name |
channelEmail | String (Optional) valid email | email to get notifications at various Events (currently applicaple only for CAMS Response for the Investors Data push to CAMS) |
redirectUrl | String (Optional) valid URL | Investor gets redirected to this URL if onboarding via Signzy Web platform |
languageList | Array (Optional) Keywords that can be passed – [“en”, “hi”, “kn”, “bn”, “mr”] | Select the keywords for the respective languages that should be shown in the Merchant’s page. English – “en”, Hindi – “hi”, Kannada – “kn”, Bengali – “bn”, Marathi – “mr” |
languageSelected | String (Optional) Any one of these (‘en’, ‘hi’, ‘kn’, ‘bn’, ‘mr’) | This field ensures the default language that will appear in the Merchant’s page. English – “en”, Hindi – “hi”, Kannada – “kn”, Bengali – “bn”, Marathi – “mr” |
prefillData | Object (Optional) valid JSON | Some of the data of investor can be prefilled here (For signzy frontend users only) |
{
“email”:”user@mail.com”,
“username”:”username”,
“phone”:”76xxxxxxx3″,
“name”:”name”,
“channelEmail”: “xyz@email.com”,
“redirectUrl”: “https://xyz.com”,
“languageList” : [“…list of langauages…”],
“languageSelected” : “…language selected…”,
“prefillData” : {
“name”: “…name…”,
“fatherName”: “…father name…”,
“motherName”: “…mother name…”,
“dob”: “…dob…”,
“panNumber”: “.. Pan number”,
“dlNumber”: “.. Dl number..”,
“dlIssueDate”: “…Dl IssueDate…”,
“dlExpiryDate”: “…Dl Expiry Date…”,
“passportNumber”: “…Passport number…”,
“passportIssueDate”: “…Passport Issue Date…”,
“passportExpiryDate”: “…Passport Expiry Date…”,
“aadhaarUid”: “…12 digit UID…”,
“voterIdNumber”: “…VoterId number…”,
“otherIdNumber”: “…OtherId number”,
“otherIdIssueDate”: “…OtherId Issue Date…”,
“otherIdExpiryDate”: “…OtherId Expiry Date…”,
“pincode”: “…pincode…”,
“state”: “…state…”,
“district”: “…district…”,
“city”: “…city…”,
“address”: “…address…”,
“corrPincode”: “…corr pincode…”,
“corrState”: “…corr state…”,
“corrDistrict”: “…corr district…”,
“corrCity”: “…corr city…”,
“corrAddress”: “…corr address…”,
“bankAccountNumber”: “…bank account number…”,
“bankIFSC”: “…bank IFSC…”,
“bankAccountHolderName” : “…bank account holder name…”,
“bankAddress”: “…bank address…”,
“gender”: “…gender…”,
“maritalStatus”: “…martial status…”,
“fatherSpouseTitle”: “…father or spouse title…”,
“fatherSpouseName”: “…father or spouse name…”,
“nomineeRelationShip”: “…nominee relationship…”,
“maidenTitle”: “…maiden title…”,
“maidenName”: “…maiden name…”,
“motherTitle”: “…mother title…”,
“emailId”: “…emailId…”,
“mobileNumber”: “..mobile number…”,
“placeOfBirth”: “…place of birth…”
}
}
prefillData(For signzy frontend users only) Object details for Prefilling data
Property | Data type | Example values |
name | String (Optional) , string of min length of 2 consisting of any character | Investor’s name |
fatherName | String (Optional) ,string of min length of 2 consisting of any character | Investor’s father name |
motherName | String (Optional) ,string of min length of 2 consisting of any character | Investor’s mother name |
dob | String (Optional) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | Investor’s dob |
panNumber | String (Optional) ,Valid pan number | Pan number |
dlNumber | String (Optional) ,Valid dl number | dl number |
dlIssueDate | String (Optional) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Dl issue date |
dlExpiryDate | String (Optional) ,Expiry Date as string DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Dl expiry date |
passportNumber | String (Optional) ,Valid passport number | Passport number |
passportIssueDate | String (Optional) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Passport issue date |
passportExpiryDate | String (Optional) ,Expiry Date as string DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Passport expiry date |
aadhaarUid | String (Optional) ,string of 8 zeros followed by 4 digits | Aadhaar number |
voterIdNumber | String (Optional) | VoterId number |
otherIdNumber | String (Optional) | Other document number |
otherIdIssueDate | String (Optional) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Other document issue date |
otherIdExpiryDate | String (Optional) ,Expiry Date as string DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Other document expiry date |
pincode | String (Optional), valid Pincode | Pincode |
state | Enum String (Optional) | State, Refer 1st column of Table 1.7 |
district | String (Optional) | District |
city | Enum String (Optional) | City |
address | String (Optional) | Address |
corrPincode | String (Optional), valid Pincode | Correspondence POA pincode |
corrState | Enum String (Optional) | Correspondence POA state, Refer 1st column of Table 1.7 |
corrDistrict | String (Optional) | Correspondence POA District |
corrCity | Enum String (Optional) | Correspondence POA city |
corrAddress | String (Optional) | Correspondence POA address |
bankAccountNumber | String (Optional) ,string of min length of 9 and max length 18 consisting of any digit | Account number on cancelled cheque document |
bankIFSC | String (Optional), alphanumeric string of length 11 | IFSC code |
banckAccountHolderName | String (Optional),string of min length of 2 consisting of any character | Bank account holder name |
bankAddress | String (Optinal) | Bank address |
gender | Enum String (Optional) | investor’s Gender values: “F” / “M” / “T” for Female, Male, Transgender |
maritalStatus | Enum String (Optional) | investor’s marital status, values: “MARRIED” / “UNMARRIED” / “OTHERS” |
fatherSpouseTitle | Enum String (Optional) | Pass the title of Father or Spouse, possible values “Mr.” / “Mrs.” |
fatherSpouseName | String (Optional), string of min length of 2 consisting of any character | Pass the Father or Spouse name |
nomineeRelationShip | Enum String (Optional) | Pass either “FATHER” or “SPOUSE”, accordingly pass the name in “fatherName” |
maidenTitle | Enum String (Optional) | title for maiden name, values: “Mrs.” / “Ms.” / “Mx.” |
maidenName | String (Optional), string of min length of 2 consisting of any character | maiden name of investor provided investor is a Female |
motherTitle | Enum String (Optional) | Investor mother Title, values: “Mrs.” / “Ms.” / “Mx.” |
emailId | String (Optional) , valid email | Investor’s Email |
mobileNumber | String (Optional) 10 digit string and first digit is one of ‘6,7,8,9’ | Investor’s Phone Number |
placeOfBirth | String(Optional), string of min length of 2 consisting of any character | Place of Birth |
Response
{
“id”: “… Onboarding Id …”,
“createObj”: {
“customerId”: “..customerId..”,
“email”: “user@mail.com”,
“id”: “.. onboarding password ..”,
“name”: “name”,
“phone”: “76xxxxxxx3”,
“username”: “username”
}
}
Execute POI
Extraction API for POI documents
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “individualPan” / “aadhaar” / “passport” / “drivingLicence” / “voterid” |
– task | Enum String (Required) | “autoRecognition” |
– data | Object (Required) | payload |
—- images | Array (Required) array of length 2(incase of ‘aadhaar’, ‘voterid’, ‘passport’), length 1 (incase of PAN) and, length 1 or 2 (incase of DL) with valid URLs. | An array of image URLs of the ID card, front and back in order. In case of PAN, pass URL of front Image and in case of Driving License pass URLs of either front or both sides of images. |
—- proofType | Enum String (Required) | “identity” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “…….”,
“type”: “…….”,
“task”: “…….”,
“data”: {
“images”: [“..direct url of the images of one side(incase of driving licence and PAN ) or two sides (for others) ..”],
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “identity”
}
}
}
Input For Offline Aadhaar
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “aadhaar” |
– task | Enum String (Required) | “offlineAadhaar” |
– data | Object (Required) | payload |
—- images | Array (Required) empty array | In case of Offline Aadhaar pass empty array [] |
—- url | Enum String (Required) | “url of zip or xml file ” |
—- password | Enum String (Required) | “password of the zip file (Required only if the file is zip) ” |
—- proofType | Enum String (Required) | “identity” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “…….”,
“type”: “aadhaar”,
“task”: “offlineAadhaar”,
“data”: {
“images”: [],
“url”:”.. url of zip or xml file (only for offlineAadhaar)…”,
“password”: “.. password of the zip file (only for offlineAadhaar and zip file) ..”,
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “identity”
}
}
}
For Aadhaar, PAN, DL DigiLocker
Must hit the execute API twice,
1) First with task as createUrl.
2) In response, will receive a url to grant permission from DigiLocker to access the documents.
3) After completion of the process, Hit the same API with task as getDetails.
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “aadhaarDigiLocker” / “panDigiLocker” / “dlDigiLocker” |
– task | Enum String (Required) | “createUrl” / “getDetails” |
– data | Object (Required) | payload |
—- images | Array (Required) empty array | In case of DigiLocker pass empty array [] |
—- proofType | Enum String (Required) | “identity” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “…….”,
“type”: “…….”,
“task”: “…creatUrl/getDetails….”,
“data”: {
“images”: [],
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “identity”
}
}
}
Expected output
Incase of PAN Card card
{
“object”: {
“result”: {
“name”: “Name as on card”,
“fatherName”: “Father’s name as on card”,
“dob”: “DOB as on card”,
“number”: “number as on card”
}
}
}
Incase of Aadhar card
{
“object”: {
“result”: {
“uid”: “…00000000XXXX….masked first eight digit…”,
“vid”: “…virtual UID…”,
“name”: “…name on id card…”,
“yob”: “…year of birth…”,
“dob”: “…date of birth…”,
“pincode”: “…pincode…”,
“address”: “…address as on card…”,
“gender”: “male/female”,
“splitAddress”: {
“district”: [],
“state”: [
[]
],
“city”: [],
“pincode”: ” “,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “”
},
“uidHash”: “Secure Cryptographic conversion of UID”
}
}
}
Incase of Driving License
{
“object”: {
“result”: {
“issueDate”: “date-of-issue”,
“dob”: “dob”,
“expiryDate”: “date-of-expiry”,
“name”: “name”,
“number”: “dl number”,
“guardianName”: “name of guardian”,
“address”: “address”,
“splitAddress”: {
“state”: [
[]
],
“district”: [],
“city”: [],
“pincode”: “…pincode…”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “…addressLine…”
},
“dlType”: [“array-of-vehicle-class”]
}
}
}
Incase of Passport
{
“object”: {
“result”: {
“parentsGuardianName”: “..parentsGuardianName…”,
“issueDate”: “..issueDate..”,
“expiryDate”: “..expiryDate..”,
“birthDate”: “..birthDate..”,
“name”: “..name..”,
“country”: [
“..country..”
],
“nationality”: “..nationality..”,
“sex”: “F/M”,
“address”: “..address..”,
“pincode”: “..pincode..”,
“passportNumber”: “..passportNumber..”,
“fileNumber”: “..fileNumber..”,
“placeOfBirth”: “..placeOfBirth..”,
“placeOfIssue”: “..placeOfIssue..”,
“splitAddress”: {
“district”: [
“..district..”
],
“state”: [
[
“..state..”
]
],
“city”: [
“..city..”
],
“pincode”: “..pincode..”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “..addressLine..”
}
}
}
}
Incase of VoterId
{
“object”: {
“result”: {
“epicNumber”: “…epic number…”,
“name”: “…name…”,
“fatherName”: “…father name…”,
“state”: “…state name…”,
“dob”: “…date of birth…”,
“yob”: “…year of birth…”,
“ageAsOn”: “…age in year…”,
“address”: “…address found on card…”,
“splitAddress”: {
“district”: [
“…name of district…”
],
“state”: [
[
“…name of state…”,
“WB”
]
],
“city”: [
“…name of the city…”
],
“pincode”: “…pincode of the city…”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “…address line on the card…”
}
}
}
}
Incase of Offline Aadhaar
{
“object”: {
“result”: {
“name”: “…name on id card…”,
“yob”: “…year of birth…”,
“dob”: “…date of birth…”,
“gender”: “male/female”,
“emailHash”: “…”,
“mobileNoHash”: “…”,
“address”: “..”,
“photo”: “..image url..”,
“generationDate”: “.. date ..”,
“generationTime”: “.. time ..”,
“unixTimeStamp”: 1589445464,
“dateDifference”: 1,
“splitAddress”: {
“district”: [],
“state”: [
[]
],
“city”: [],
“pincode”: ” “,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “”
},
“x509Data”: {
“subjectName”: “……”,
“certificate”: “”,
“details”: { },
“validAadhaarDSC”: “..yes/no…”
}
}
}
}
Incase of DigiLocker(Aadhaar / PAN / DL) 1st Step
{
“result”: {
“url”: ” … url to permit DigiLocker Account …”,
“requestId”: ” .. id ..”
}
}
Incase of DigiLocker(Aadhaar / PAN / DL) 2nd Step, the response will be similar to the respective cards as mentioned above.
Update form POI
Update POI form data of a Merchant.
Only the POI that has been approved for the distributor by the AMC will be accepted and any other ID uploaded will throw an error. So if for a particular distributor, if PAN card is the only approved POI, then uploading Aadhaar as POI will throw an error.
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
save | String (Required) | “formData” |
type | String (Required) | “identityProof” |
data | Object (Required) | payload, see below for details |
data Object details when POI is PAN
Property | Data type | Example values |
type | Enum String (Required) | “individualPan” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
number | String (Required) ,valid PAN number | PAN number on POI document |
fatherName | String (Required) ,string of min length of 2 consisting of any character | PAN number on POI document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “individualPan”,
“name”: “.. name ..”,
“fatherName”: “.. fatherName ..”,
“number”: “.. Pan number ..”,
“dob”: “.. dob ..”
}
}
data Object details when POI is Aadhaar
Property | Data type | Example values |
type | Enum String (Required) | “aadhaar” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “aadhaar”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”
}
}
data Object details when POI is Passport
Property | Data type | Example values |
type | Enum String (Required) | “passport” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
passportNumber | String (Required) | Passport number |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
birthDate | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “passport”,
“name”: “.. name ..”,
“birthDate”: “.. dob ..”,
“issueDate”: “.. issueDate ..”,
“expiryDate”: “.. expiryDate ..”,
“passportNumber”: “.. passport number ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POI is Driving License
Property | Data type | Example values |
type | Enum String (Required) | “drivingLicence” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
number | String (Required) | Driving License number on POI document |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “drivingLicence”,
“name”: “.. name ..”,
“expiryDate”: “… expiryDate ..”,
“number”: “.. DL number ..”,
“dob”: “.. dob .. “,
“issueDate”: “.. issueDate …”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POI is VoterId
Property | Data type | Example values |
type | Enum String (Required) | “voterId” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
epicNumber | String (Required) | VoterId number on POI document |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “voterId”,
“epicNumber”: “.. voterId number ..”,
“name”: “.. name ..”,
“dob”: “.. dob ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POI is Offline Aadhaar
Property | Data type | Example values |
type | Enum String (Required) | “aadhaarXml” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
generationDateTime | String (Required) ,concat the generationDate and generationTime | Generation date and time on POI document |
dateDifference | Number (Required) ,dateDiffence | dateDifference on POI document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “aadhaarXml”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”,
“generationDateTime”: “..generationDate+generationTime..”,
“dateDifference”: ..dateDifference..
}
}
data Object details when POI is Aadhaar DigiLocker
Property | Data type | Example values |
type | Enum String (Required) | “aadhaarDigiLocker” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “aadhaarDigiLocker”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”
}
}
data Object details when POI is PAN DigiLocker
Property | Data type | Example values |
type | Enum String (Required) | “panDigiLocker” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
number | String (Required) ,valid PAN number | PAN number on POI document |
fatherName | String (Required) ,string of min length of 2 consisting of any character | PAN number on POI document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “panDigiLocker”,
“name”: “.. name ..”,
“fatherName”: “.. fatherName ..”,
“number”: “.. Pan number ..”,
“dob”: “.. dob ..”
}
}
data Object details when POI is Driving License DigiLocker
Property | Data type | Example values |
type | Enum String (Required) | “dlDigiLocker” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
number | String (Required) | Driving License number on POI document |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “identityProof”,
“data”: {
“type”: “dlDigiLocker”,
“name”: “.. name ..”,
“expiryDate”: “… expiryDate ..”,
“number”: “.. DL number ..”,
“dob”: “.. dob .. “,
“issueDate”: “.. issueDate …”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
Expected output
{
“object”: “Updated Successfully”
}
Execute POA
Extraction API for POA documents
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “aadhaar” / “passport” / “drivingLicence” / “voterid” |
– task | Enum String (Required) | “autoRecognition” |
– data | Object (Required) | payload |
—- images | Array (Required) array of length 2(incase of ‘aadhaar’, ‘voterid’, ‘passport’), length 1 or 2 (incase of DL) with valid URLs. | An array of image URLs of the ID card, front and back in order. In case of PAN, pass URL of front Image and in case of Driving License pass URLs of either front or both sides of images. |
—- proofType | Enum String (Required) | “address” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “identity”,
“type”: “aadhaar / passport / drivingLicence / voterid”,
“task”: “autoRecognition”,
“data”: {
“images”: [
“…direct url to the images …”,
“…direct url to the images …”
],
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “address”
}
}
}
Input For Offline Aadhaar
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “aadhaar” |
– task | Enum String (Required) | “offlineAadhaar” |
– data | Object (Required) | payload |
—- images | Array (Required) empty array | In case of Offline Aadhaar pass empty array [] |
—- url | Enum String (Required) | “url of zip or xml file ” |
—- password | Enum String (Required) | “password of the zip file (Required only if the file is zip) ” |
—- proofType | Enum String (Required) | “address” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “…….”,
“type”: “aadhaar”,
“task”: “offlineAadhaar”,
“data”: {
“images”: [],
“url”:”.. url of zip or xml file (only for offlineAadhaar)…”,
“password”: “.. password of the zip file (only for offlineAadhaar and zip file) ..”,
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “address”
}
}
}
For Aadhaar, DL DigiLocker
Must hit the execute API twice,
1) First with task as createUrl.
2) In response, will receive a url to grant permission from DigiLocker to access the documents.
3) After completion of the process, Hit the same API with task as getDetails.
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “aadhaarDigiLocker” / “dlDigiLocker” |
– task | Enum String (Required) | “createUrl” / “getDetails” |
– data | Object (Required) | payload |
—- images | Array (Required) empty array | In case of Aadhaar DigiLocker pass empty array [] |
—- proofType | Enum String (Required) | “address” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “…….”,
“type”: “…….”,
“task”: “…creatUrl/getDetails….”,
“data”: {
“images”: [],
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “address”
}
}
}
Expected output
Incase of Aadhar card
{
“object”: {
“result”: {
“uid”: “…00000000XXXX….masked first eight digit…”,
“vid”: “…virtual UID…”,
“name”: “…name on id card…”,
“yob”: “…year of birth…”,
“dob”: “…date of birth…”,
“pincode”: “…pincode…”,
“address”: “…address as on card…”,
“gender”: “male/female”,
“splitAddress”: {
“district”: [],
“state”: [
[]
],
“city”: [],
“pincode”: ” “,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “”
},
“uidHash”: “Secure Cryptographic conversion of UID”
}
}
}
Incase of Driving License
{
“object”: {
“result”: {
“issueDate”: “date-of-issue”,
“dob”: “dob”,
“expiryDate”: “date-of-expiry”,
“name”: “name”,
“number”: “dl number”,
“guardianName”: “name of guardian”,
“address”: “address”,
“splitAddress”: {
“state”: [
[]
],
“district”: [],
“city”: [],
“pincode”: “…pincode…”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “…addressLine…”
},
“dlType”: [“array-of-vehicle-class”]
}
}
}
Incase of Passport
{
“object”: {
“result”: {
“parentsGuardianName”: “..parentsGuardianName…”,
“issueDate”: “..issueDate..”,
“expiryDate”: “..expiryDate..”,
“birthDate”: “..birthDate..”,
“name”: “..name..”,
“country”: [
“..country..”
],
“nationality”: “..nationality..”,
“sex”: “F/M”,
“address”: “..address..”,
“pincode”: “..pincode..”,
“passportNumber”: “..passportNumber..”,
“fileNumber”: “..fileNumber..”,
“placeOfBirth”: “..placeOfBirth..”,
“placeOfIssue”: “..placeOfIssue..”,
“splitAddress”: {
“district”: [
“..district..”
],
“state”: [
[
“..state..”
]
],
“city”: [
“..city..”
],
“pincode”: “..pincode..”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “..addressLine..”
}
}
}
}
Incase of VoterId
{
“object”: {
“result”: {
“epicNumber”: “…epic number…”,
“name”: “…name…”,
“fatherName”: “…father name…”,
“state”: “…state name…”,
“dob”: “…date of birth…”,
“yob”: “…year of birth…”,
“ageAsOn”: “…age in year…”,
“address”: “…address found on card…”,
“splitAddress”: {
“district”: [
“…name of district…”
],
“state”: [
[
“…name of state…”,
“WB”
]
],
“city”: [
“…name of the city…”
],
“pincode”: “…pincode of the city…”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “…address line on the card…”
}
}
}
}
Incase of Offline Aadhaar
{
“object”: {
“result”: {
“name”: “…name on id card…”,
“yob”: “…year of birth…”,
“dob”: “…date of birth…”,
“gender”: “male/female”,
“emailHash”: “…”,
“mobileNoHash”: “…”,
“address”: “..”,
“photo”: “..image url..”,
“generationDate”: “.. date ..”,
“generationTime”: “.. time ..”,
“unixTimeStamp”: 1589445464,
“dateDifference”: 1,
“splitAddress”: {
“district”: [],
“state”: [
[]
],
“city”: [],
“pincode”: ” “,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “”
},
“x509Data”: {
“subjectName”: “……”,
“certificate”: “”,
“details”: { },
“validAadhaarDSC”: “..yes/no…”
}
}
}
}
Incase of DigiLocker(Aadhaar / DL) 1st Step
{
“result”: {
“url”: ” … url to permit DigiLocker Account …”,
“requestId”: ” .. id ..”
}
}
Incase of DigiLocker(Aadhaar / DL) 2nd Step, the response will be similar to the respective cards as mentioned above.
Update form Address proof
Updates Permanent POA form data of a Merchant
Only the POA that has been approved for the distributor by the AMC will be accepted and any other ID uploaded will throw an error. So if for a particular distributor, if DL card is the only approved POA, then uploading Aadhaar as POA will throw an error.
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
save | String (Required) | “formData” |
type | String (Required) | “addressProof” |
data | Object (Required) | payload, see below for details |
data Object details when POA is Aadhaar
Property | Data type | Example values |
type | Enum String (Required) | “aadhaar” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “addressProof”,
“data”: {
“type”: “aadhaar”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“pincode”: “.. pincode ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“dob”: “.. dob ..”
}
}
data Object details when POA is Passport
Property | Data type | Example values |
type | Enum String (Required) | “passport” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
passportNumber | String (Required) | Passport number |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
birthDate | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “addressProof”,
“data”: {
“type”: “passport”,
“name”: “.. name ..”,
“birthDate”: “.. dob ..”,
“issueDate”: “.. issueDate ..”,
“expiryDate”: “.. expiryDate ..”,
“passportNumber”: “.. passport number ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POA is Driving License
Property | Data type | Example values |
type | Enum String (Required) | “drivingLicence” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
number | String (Required) | Driving License number on POA document |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “addressProof”,
“data”: {
“type”: “drivingLicence”,
“name”: “.. name ..”,
“expiryDate”: “… expiryDate ..”,
“number”: “.. DL number ..”,
“dob”: “.. dob .. “,
“issueDate”: “.. issueDate …”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POA is VoterId
Property | Data type | Example values |
type | Enum String (Required) | “voterId” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
epicNumber | String (Required) | VoterId number on POA document |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “addressProof”,
“data”: {
“type”: “voterId”,
“epicNumber”: “.. voterId number ..”,
“name”: “.. name ..”,
“dob”: “.. dob ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POA is Offline Aadhaar
Property | Data type | Example values |
type | Enum String (Required) | “aadhaarXml” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
generationDateTime | String (Required) ,concat the generationDate and generationTime | Generation date and time on POI document |
dateDifference | Number (Required) ,dateDiffence | dateDifference on POA document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “addressProof”,
“data”: {
“type”: “aadhaarXml”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”,
“generationDateTime”: “..generationDate+generationTime..”,
“dateDifference”: ..dateDifference..
}
}
data Object details when POA is Aadhaar DigiLocker
Property | Data type | Example values |
type | Enum String (Required) | “aadhaarDigiLocker” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “addressProof”,
“data”: {
“type”: “aadhaarDigiLocker”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”
}
}
data Object details when POA is Driving License DigiLocker
Property | Data type | Example values |
type | Enum String (Required) | “dlDigiLocker” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
number | String (Required) | Driving License number on POA document |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “addressProof”,
“data”: {
“type”: “dlDigiLocker”,
“name”: “.. name ..”,
“expiryDate”: “… expiryDate ..”,
“number”: “.. DL number ..”,
“dob”: “.. dob .. “,
“issueDate”: “.. issueDate …”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
Expected output
{
“object”: “Updated Successfully”
}
Execute Correspondence POA
Extraction API for POA documents
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “aadhaar” / “passport” / “drivingLicence” / “voterid” |
– task | Enum String (Required) | “autoRecognition” |
– data | Object (Required) | payload |
—- images | Array (Required) array of length 2(incase of ‘aadhaar’, ‘voterid’, ‘passport’), length 1 or 2 (incase of DL) with valid URLs. | An array of image URLs of the ID card, front and back in order. In case of PAN, pass URL of front Image and in case of Driving License pass URLs of either front or both sides of images. |
—- proofType | Enum String (Required) | “corrAddress” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “identity”,
“type”: “aadhaar / passport / drivingLicence / voterid”,
“task”: “autoRecognition”,
“data”: {
“images”: [
“…direct url to the images …”,
“…direct url to the images …”
],
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “corrAddress”
}
}
}
Input For Offline Aadhaar
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “aadhaar” |
– task | Enum String (Required) | “offlineAadhaar” |
– data | Object (Required) | payload |
—- images | Array (Required) empty array | In case of Offline Aadhaar pass empty array [] |
—- url | Enum String (Required) | “url of zip or xml file ” |
—- password | Enum String (Required) | “password of the zip file (Required only if the file is zip) ” |
—- proofType | Enum String (Required) | “corrAddress” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “…….”,
“type”: “aadhaar”,
“task”: “offlineAadhaar”,
“data”: {
“images”: [],
“url”:”.. url of zip or xml file (only for offlineAadhaar)…”,
“password”: “.. password of the zip file (only for offlineAadhaar and zip file) ..”,
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “corrAddress”
}
}
}
For Aadhaar, DL DigiLocker
Must hit the execute API twice,
1) First with task as createUrl.
2) In response, will receive a url to grant permission from DigiLocker to access the documents.
3) After completion of the process, Hit the same API with task as getDetails.
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “aadhaarDigiLocker” / “dlDigiLocker” |
– task | Enum String (Required) | “createUrl” / “getDetails” |
– data | Object (Required) | payload |
—- images | Array (Required) empty array | In case of Aadhaar DigiLocker pass empty array [] |
—- proofType | Enum String (Required) | “corrAddress” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “…….”,
“type”: “……..”,
“task”: “…creatUrl/getDetails….”,
“data”: {
“images”: [],
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “corrAddress”
}
}
}
Expected output
Incase of Aadhar card
{
“object”: {
“result”: {
“uid”: “…00000000XXXX….masked first eight digit…”,
“vid”: “…virtual UID…”,
“name”: “…name on id card…”,
“yob”: “…year of birth…”,
“dob”: “…date of birth…”,
“pincode”: “…pincode…”,
“address”: “…address as on card…”,
“gender”: “male/female”,
“splitAddress”: {
“district”: [],
“state”: [
[]
],
“city”: [],
“pincode”: ” “,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “”
},
“uidHash”: “Secure Cryptographic conversion of UID”
}
}
}
Incase of Driving License
{
“object”: {
“result”: {
“issueDate”: “date-of-issue”,
“dob”: “dob”,
“expiryDate”: “date-of-expiry”,
“name”: “name”,
“number”: “dl number”,
“guardianName”: “name of guardian”,
“address”: “address”,
“splitAddress”: {
“state”: [
[]
],
“district”: [],
“city”: [],
“pincode”: “…pincode…”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “…addressLine…”
},
“dlType”: [“array-of-vehicle-class”]
}
}
}
Incase of Passport
{
“object”: {
“result”: {
“parentsGuardianName”: “..parentsGuardianName…”,
“issueDate”: “..issueDate..”,
“expiryDate”: “..expiryDate..”,
“birthDate”: “..birthDate..”,
“name”: “..name..”,
“country”: [
“..country..”
],
“nationality”: “..nationality..”,
“sex”: “F/M”,
“address”: “..address..”,
“pincode”: “..pincode..”,
“passportNumber”: “..passportNumber..”,
“fileNumber”: “..fileNumber..”,
“placeOfBirth”: “..placeOfBirth..”,
“placeOfIssue”: “..placeOfIssue..”,
“splitAddress”: {
“district”: [
“..district..”
],
“state”: [
[
“..state..”
]
],
“city”: [
“..city..”
],
“pincode”: “..pincode..”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “..addressLine..”
}
}
}
}
Incase of VoterId
{
“object”: {
“result”: {
“epicNumber”: “…epic number…”,
“name”: “…name…”,
“fatherName”: “…father name…”,
“state”: “…state name…”,
“dob”: “…date of birth…”,
“yob”: “…year of birth…”,
“ageAsOn”: “…age in year…”,
“address”: “…address found on card…”,
“splitAddress”: {
“district”: [
“…name of district…”
],
“state”: [
[
“…name of state…”,
“WB”
]
],
“city”: [
“…name of the city…”
],
“pincode”: “…pincode of the city…”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “…address line on the card…”
}
}
}
}
Incase of Offline Aadhaar
{
“object”: {
“result”: {
“name”: “…name on id card…”,
“yob”: “…year of birth…”,
“dob”: “…date of birth…”,
“gender”: “male/female”,
“emailHash”: “…”,
“mobileNoHash”: “…”,
“address”: “..”,
“photo”: “..image url..”,
“generationDate”: “.. date ..”,
“generationTime”: “.. time ..”,
“unixTimeStamp”: 1589445464,
“dateDifference”: 1,
“splitAddress”: {
“district”: [],
“state”: [
[]
],
“city”: [],
“pincode”: ” “,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “”
},
“x509Data”: {
“subjectName”: “……”,
“certificate”: “”,
“details”: { },
“validAadhaarDSC”: “..yes/no…”
}
}
}
}
Incase of Aadhar DigiLocker 1st Step
{
“result”: {
“url”: ” … url to permit DigiLocker Account …”,
“requestId”: ” .. id ..”
}
}
Incase of DigiLocker(Aadhaar / DL) 2nd Step, the response will be similar to the respective cards as mentioned above.
Update form POA correspondence address proof
Updates Correspondence POA form data of a Merchant.
Only the POA that has been approved for the distributor by the AMC will be accepted and any other ID uploaded will throw an error. So if for a particular distributor, if DL is the only approved POA, then uploading Aadhaar as POA will throw an error.
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
save | String (Required) | “formData” |
type | String (Required) | “corrAddressProof” |
data | Object (Required) | payload, see below for details |
Incase Communication address is different from Permanent Address
data Object details when POA is Aadhaar
Property | Data type | Example values |
type | Enum String (Required) | “aadhaar” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “aadhaar”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”
}
}
data Object details when POA is Passport
Property | Data type | Example values |
type | Enum String (Required) | “passport” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
passportNumber | String (Required) | Passport number |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
birthDate | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “passport”,
“name”: “.. name ..”,
“birthDate”: “.. dob ..”,
“issueDate”: “.. issueDate ..”,
“expiryDate”: “.. expiryDate ..”,
“passportNumber”: “.. passport number ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POA is Driving License
Property | Data type | Example values |
type | Enum String (Required) | “drivingLicence” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
number | String (Required) | Driving License number on POA document |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “drivingLicence”,
“name”: “.. name ..”,
“expiryDate”: “… expiryDate ..”,
“number”: “.. DL number ..”,
“dob”: “.. dob .. “,
“issueDate”: “.. issueDate …”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POA is VoterId
Property | Data type | Example values |
type | Enum String (Required) | “voterId” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
epicNumber | String (Required) | VoterId number on POA document |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “voterId”,
“epicNumber”: “.. voterId number ..”,
“name”: “.. name ..”,
“dob”: “.. dob ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POA is Offline Aadhaar
Property | Data type | Example values |
type | Enum String (Required) | “aadhaarXml” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
generationDateTime | String (Required) ,concat the generationDate and generationTime | Generation date and time on POA document |
dateDifference | Number (Required) ,dateDiffence | dateDifference on POA document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “aadhaarXml”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”,
“generationDateTime”: “..generationDate+generationTime..”,
“dateDifference”: ..dateDifference..
}
}
data Object details when POA is Aadhaar DigiLocker
Property | Data type | Example values |
type | Enum String (Required) | “aadhaarDigiLocker” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “aadhaarDigiLocker”,
“name”: “.. person name ..”,
“uid”: “..12 digit UID ..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”
}
}
data Object details when POA is Driving License DigiLocker
Property | Data type | Example values |
type | Enum String (Required) | “dlDigiLocker” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
number | String (Required) | Driving License number on POA document |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “dlDigiLocker”,
“name”: “.. name ..”,
“expiryDate”: “… expiryDate ..”,
“number”: “.. DL number ..”,
“dob”: “.. dob .. “,
“issueDate”: “.. issueDate …”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”
}
}
data Object details when POA is Gas Bill
Property | Data type | Example values |
type | Enum String (Required) | “gasBill” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
number | String (Required) | Gas Bill number |
dob | String (Optional) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Optional) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
images | URL String (Required) | URL of document image |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “gasBill”,
“name”: “.. person name ..”,
“number”: “..document number..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”,
“issueDate”: “.. issue date ..”,
“images”: “.. image url ..”
}
}
data Object details when other POA document
Property | Data type | Example values |
type | Enum String (Required) | ‘passbook’ / ‘bankStatement’ / ‘dematStatement’ / ‘rationCard’ / ‘salesAgreement’ / ‘telephoneBill’ / ‘electricityBill’ / ‘snecCertificate’ / ‘flatMaintenanceBill’ / ‘insuranceCopy’ / ‘selfDeclaration’ / ‘powerOfAttorney’ / ‘commercialBankProof’ / ‘legislativeaddressProof’ / ‘parliamentAddressProof’ / ‘govtAddressProof’ / ‘notaryAddressProof’ / ‘gazettedOfficerAddressProof’ / ‘govtIdCard’ / ‘statutoryIdCard’ / ‘psuIdCard’ / ‘commercialBankIdCard’ / ‘finanicalIdCard’ / ‘collegeIdCard’ / ‘professionalBodyIdCard’ / ‘nregaJobCard’ / ‘others’ |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POA document |
number | String (Required) | Gas Bill number |
dob | String (Optional) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POA document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Optional) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Optional) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
address | String (Required) | Address as on POA document |
city | Enum String (Required) | City as on POA document |
state | Enum String (Required) | State as on POA document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POA document |
images | URL String (Required) | URL of document image |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“type”: “gasBill”,
“name”: “.. person name ..”,
“number”: “..document number..”,
“address”: “.. address ..”,
“city”: “.. city ..”,
“state”: “.. state ..”,
“district”: “.. district ..”,
“pincode”: “.. pincode ..”,
“dob”: “.. dob ..”,
“issueDate”: “.. issue date ..”,
“expiryDate”: “.. expiry date ..”,
“images”: “.. image url ..”
}
}
Incase Communication address Proof is same as Permanent Address Proof
data Object details when Communication Address Proof is same as Permanent Address Proof
Property | Data type | Example values |
sameAsPermanent | Enum String (Required) | “true” |
{
“merchantId”: “.. merchantId ..”,
“save”: “formData”,
“type”: “corrAddressProof”,
“data”: {
“sameAsPermanent”: “true”
}
}
Expected output
{
“object”: “Updated Successfully”
}
Update form Address userForensics
Update forensics of form updation, must be ideally called after every step(identity / bankaccount / address / documents /fatca / signature / photo / video / contract) of the onboarding flow is complete inorder to collect user forensics corresponding the step
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
save | Enum String (*Required) | “formData” |
type | Enum String (*Required) | “userForensics” |
data | Object (*Required) | forensics data payload |
–type | Enum String (*Required) | “usersData” |
–userData | Object (*Required) | contains forensics data grouped by steps (identity / bankaccount / address / documents /fatca / signature / photo / video / contract) in the onboarding flow |
UserForensics object has 3 top level entries i.e geoLocationData, browserData, pageName, the description of userForensics object are as follows:
Property | Data type | Example values |
geoLocationData | Object (Optional) | Object as feteched from https://ipapi.co/jsonp |
pageName | Enum String (Optional) | corresponding page’s name (identity / bankaccount / address / documents /fatca / signature / photo / video / contract) |
browserData | Object (Optional) | Details about browser used |
–browserName | String (Optional) | Name of browser (can be extracted from browser’s global navigator.userAgent Object) |
–cookieEnabled | String (Optional) | whether cookie is enabled (source : navigator.cookieEnabled) |
–browserLanguage | String (Optional) | Language of browser (source : navigator.language) |
–os | String (Optional) | OS, browser is running on (source: navigator.platform) |
–userAgent | String (Optional) | User Agent of browser (source: navigator.userAgent) |
–pluginsInstalled | Array of strings (Optional) | List if plugin names in browser (source: navigator.plugins) |
–browserVersion | String (Optional) | Version of browser (can be extracted from navigator.userAgent) |
–screenWidth | String (Optional) | Screen width of browser (can be extracted from browser’s global screen Object) |
–screenHeight | String (Optional) | Screen height of browser (can be extracted from browser’s global screen Object) |
–screenPixelDepth | String (Optional) | Screen pixel depth of browser (can be extracted from browser’s global screen Object) |
–screenColorDepth | String (Optional) | Screen color depth of browser (can be extracted from browser’s global screen Object) |
–signzyPlatformUsed | Enum String (Optional) | ‘Mobile’ / ‘Desktop’ |
–userLat | Decimal (Optional) | Geolocation lattitude |
–userLong | Decimal (Optional) | Geolocation Logitude |
–deviceInfo | Object (Optional) | Browser Info as fetched from https://wurfl.io/wurfl.js |
{
“merchantId”: “…….”,
“save”: “formData”,
“type”: “userForensics”,
“data”: {
“type”: “usersData”,
“userData”: {
“identity”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…..”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “……”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“address”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“bankaccount”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
}
}
}
}
Expected output
{
“object”: “Updated Successfully”
}
Cancelled cheque execute
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “identity” |
– type | Enum String (Required) | “cheque” |
– task | Enum String (Required) | “autoRecognition” |
– data | Object (Required) | payload |
—- images | Array (Required) array of length 1 containing valid URL | An array of image URLs of the ID card, front and back in order. In case of PAN, pass URL of front Image and in case of Driving License pass URLs of either front or both sides of images. |
—- proofType | Enum String (Required) | “cheque” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “identity”,
“type”: “cheque”,
“task”: “autoRecognition”,
“data”: {
“images”: [“..direct url of the images one side or two sides ..”],
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “cheque”
}
}
}
Expected output
{
“object”: {
“result”: {
“address”: “…….”,
“ifsc”: “…….”,
“accountNumber”: “…….”,
“micrCode”: “…….”,
“contact”: “…….”,
“name”: “…….”,
“splitAddress”: {
“district”: [
“…..”
],
“state”: [
[
“…..”,
“…..”
]
],
“city”: [
“…..”
],
“pincode”: “…….”,
“country”: [
“…..”,
“…..”,
“…..”
],
“addressLine”: “…….”
},
“pincode”: “…….”
}
}
}
Update form cancelled cheque
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
save | String (Required) | “formData” |
type | String (Required) | “bankAccount” |
data | Object (Required) | payload, see below for details |
data Object details
Property | Data type | Example values |
accountNumber | String (Required) ,string of min length of 9 and max length 18 consisting of any digit | Account number on cancelled cheque document |
name | String (Optional), string of min length of 2 consisting of any digit | Name of acc. holder |
ifsc | String (Required), alphanumeric string of length 11 | IFSC code |
contact | String (Optional) ,valid 10 digit mobile number | Mobile number |
micrCode | String (Optional) | Micr code on cancelled cheque |
address | String (Optional) | Address |
{
“merchantId”:”…”,
“save”:”formData”,
“type”:”bankAccount”,
“data”:{
“accountNumber”:”…”,
“ifsc”:”…”,
“micrCode”:”….”,
“contact”:”…”,
“name”:”…”,
“address”: “…”
}
}
Expected output
{
“object”:”Updated successfully”
}
Bank account penny transfer
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “nonRoc” |
– type | Enum String (Required) | “bankaccountverifications” |
– task | Enum String (Required) | “bankTransfer” |
– data | Object (Required) | payload |
—- searchParam | Object (Required) | see below for details |
searchParam Object details
Property | Data type | Example values |
beneficiaryAccount | String (Required) ,string of min length of 9 and max length 18 consisting of any digit | Account number |
beneficiaryIFSC | String (Required), alphanumeric string of length 11 | IFSC code |
beneficiaryMobile | String (Optional) ,valid 10 digit mobile number | Mobile number |
beneficiaryName | String (Optional), string of min length of 2 consisting of any character | Benificiary Name |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “nonRoc”,
“type”: “bankaccountverifications”,
“task”: “bankTransfer”,
“data”: {
“images”: [],
“toVerifyData”: {},
“searchParam”: {
“beneficiaryAccount”: “…….”,
“beneficiaryIFSC”: “…….”,
“beneficiaryName”:”……”,
“beneficiaryMobile”:”……”
}
}
}
}
Expected output
{
“object”: {
“result”: {
“active”: “…….”,
“nameMatch”: “…….”,
“mobileMatch”: “…….”,
“signzyReferenceId”: “…….”,
“auditTrail”: {
“nature”: “…….”,
“value”: “…….”,
“timestamp”: “…….”
}
}
}
}
Execute verify bank account verifyAccount
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “nonRoc” |
– type | Enum String (Required) | “bankaccountverifications” |
– task | Enum String (Required) | “verifyAmount” |
– data | Object (Required) | payload |
—- searchParam | Object (Required) | see below for details |
searchParam Object details
Property | Data type | Example values |
amount | Positive Number (Required) | Amount transferred from previous (Penny transfer) execute API call |
signzyId | String (Required), alphanumeric string of length 51 or 52 | signzyReferenceId from Penny transfer API call’s response |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “nonRoc”,
“type”: “bankaccountverifications”,
“task”: “verifyAmount”,
“data”: {
“images”: [],
“toVerifyData”: {},
“searchParam”: {
“amount”: “…….”,
“signzyId”: “…….”
}
}
}
}
Expected output
{
“object”: {
“result”: {
“amountMatch”: “false | true”,
“ownerName”: “…….”,
“mobile”: “…….”,
“mmid”: “…….”
}
}
}
Update form UserForensics after penny transfer verification
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
All field descriptions and respective validations are same as in the previously documented Userforensics update call
{
“merchantId”: “…….”,
“save”: “formData”,
“type”: “userForensics”,
“data”: {
“type”: “usersData”,
“userData”: {
“identity”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“address”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“bankaccount”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“documents”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
}
}
}
}
Expected output
{
“object”: “Updated Successfully”
}
Update form call for FORMS section
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required), alphanumeric string of length 24 | userId from investor login response field |
save | Enum String (Required) | “formData” |
type | Enum String (Required) | “kycdata” |
data | Object (Required) | payload |
–type | Enum String (Required) | “kycdata” |
–kycData | Object(Required) | KYC data payload |
—-gender | Enum String (Required) | investor’s Gender values: “F” / “M” / “T” for Female, Male, Transgender |
—-maritalStatus | Enum String (Required) | investor’s marital status, values: “MARRIED” / “UNMARRIED” / “OTHERS” |
—-emailId | String (Required) valid Email Id | Email Id of Investor |
—-annualIncome | Enum String (Optional), valid as per code in table 1.8 | Annual Income code (Refer Table 1.8) |
—-nomineeRelationShip | Enum String (Required) | Pass either “FATHER” or “SPOUSE”, accordingly pass the name in “fatherName” |
—-fatherName | String (Required), string of min length of 2 consisting of any character | Pass the Father or Spouse name |
—-fatherTitle | Enum String (Required) | Pass the title of Father or Spouse, possible values “Mr.” / “Mrs.” |
—-maidenName | String (Optional), string of min length of 2 consisting of any character | maiden name of investor provided investor is a Female |
—-maidenTitle | Enum String (Optional) | title for maiden name, values: “Mrs.” / “Ms.” / “Mx.” |
—-motherName | String (Required), string of min length of 2 consisting of any character | Investor mother name |
—-motherTitle | Enum String (Required) | Investor mother Title, values: “Mrs.” / “Ms.” / “Mx.” |
—-panNumber | String (Required), valid Pan Number or incase of PAN EXEMPT cases for CVL KRA, generate an alphanumeric string of 10 characters which should begin with EXPH | Investors PAN number or incase of PAN EXEMPT cases for CVL KRA pass EXPH****** or incase of CAMS KRA pass PANEXEMPT |
—-cvlExemptCode | String (Required incase of PAN EXEMPT cases for CVL KRA), valid as per code in table 1.9 | PAN EXEMPT code (Refer Table 1.9) |
—-cvlExemptDescription | String (Required incase of PAN EXEMPT cases for CVL KRA), valid as per description in table 1.9 | PAN EXEMPT category (Refer Table 1.9) |
—-aadhaarNumber | String (Optional), string of 8 zeros followed by 4 digits | Investor Aadhaar number |
—-citizenshipCountryCode | Enum String (Required) | Citizenship country code (Refer Table 1.1) |
—-citizenshipCountry | String (Required) | Citizenship country (Refer Table 1.1) |
—-residentialStatus | String(Required) | Investor’s residential status, values: “Resident Individual” / “Foreign National” / “Person of Indian Origin” |
—-occupationCode | Enum String(Required) | Occupation Code (Refer Table 1.3) |
—-occupationDescription | String(Required) | Occupation Description (Refer Table 1.3) |
—-occupationOther | String(Required in case of CVL KRA if Occupation Code is 99). | String of 50 characters |
—-countryCode | Number(Required) | Country code of mobile number |
—-mobileNumber | String(Required), valid 10 digit mobile number | Mobile number |
—-permanentAddressCode | Enum String(Required), valid as per code in table 1.6 | Permanent Address code (Refer Table 1.6) |
—-permanentAddressType | String(Required) | Permanent Address Type (Refer Table 1.6) |
—-communicationAddressCode | Enum String(Required), valid as per code in table 1.6 | Communication Address code (Refer Table 1.6) |
—-communicationAddressType | String(Required) | Communication Address Type (Refer Table 1.6) |
—-applicationStatusCode | Enum String(Required), valid as per code in table 1.5 | Application status code, (Refer Table 1.5) |
—-applicationStatusDescription | String (Required) | Application status description, (Refer Table 1.5) |
—-kycAccountCode | Enum String(Required), valid as per code in table 1.4 | KYC account code, (Refer Table 1.4) |
—-kycAccountDescription | String (Required) | KYC account Description, (Refer Table 1.4) |
—-placeOfBirth | String(Optional), string of min length of 2 consisting of any character | Place of Brith |
{
“merchantId”: “…….”,
“save”: “formData”,
“type”: “kycdata”,
“data”: {
“type”: “kycdata”,
“kycData”: {
“gender”: “…….”,
“maritalStatus”: “…….”,
“nomineeRelationShip”: “…….”,
“fatherTitle”: “…….”,
“maidenTitle”: “…….”,
“maidenName”: “…….”,
“panNumber”: “…….”,
“aadhaarNumber”: “…….”,
“motherTitle”: “…….”,
“residentialStatus”: “…….”,
“occupationDescription”: “…….”,
“occupationCode”: “…….”,
“kycAccountCode”: “…….”,
“kycAccountDescription”: “…….”,
“communicationAddressCode”: “…….”,
“communicationAddressType”: “…….”,
“permanentAddressCode”: “…….”,
“permanentAddressType”: “…….”,
“citizenshipCountryCode”: “…….”,
“citizenshipCountry”: “…….”,
“applicationStatusCode”: “…….”,
“applicationStatusDescription”: “…….”,
“mobileNumber”: “…….”,
“countryCode”: 91,
“emailId”: “…….”,
“fatherName”: “…….”,
“motherName”: “…….”,
“placeOfBirth”: “… placeOfBirth ..”,
“annualIncome”: “.. annualIncome ..”
}
}
}
Expected output
{
“object”: “Updated Successfully”
}
Execute Related Person’s POI (incase Related Person is Applicable)
Extraction API for Related Person’s POI documents
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response |
inputData | Object (Required) | Metadata along with actual payload to be executed upon |
– service | Enum String (Required) | “relatedIdentity” |
– type | Enum String (Required) | “individualPan” / “aadhaar” / “passport” / “drivingLicence” / “voterid” |
– task | Enum String (Required) | “autoRecognition” |
– data | Object (Required) | payload |
—- images | Array (Required) array of length 2(incase of ‘aadhaar’, ‘voterid’, ‘passport’), length 1 (incase of PAN) and, length 1 or 2 (incase of DL) with valid URLs. | An array of image URLs of the ID card, front and back in order. In case of PAN, pass URL of front Image and in case of Driving License pass URLs of either front or both sides of images. |
—- proofType | Enum String (Required) | “identity” |
{
“merchantId”: “…….”,
“inputData”: {
“service”: “…….”,
“type”: “…….”,
“task”: “…….”,
“data”: {
“images”: [“..direct url of the images of one side(incase of driving licence and PAN ) or two sides (for others) ..”],
“toVerifyData”: {},
“searchParam”: {},
“proofType”: “identity”
}
}
}
Expected output
Incase of PAN Card card
{
“object”: {
“result”: {
“name”: “Name as on card”,
“fatherName”: “Father’s name as on card”,
“dob”: “DOB as on card”,
“number”: “number as on card”
}
}
}
Incase of Aadhar card
{
“object”: {
“result”: {
“uid”: “…00000000XXXX….masked first eight digit…”,
“vid”: “…virtual UID…”,
“name”: “…name on id card…”,
“yob”: “…year of birth…”,
“dob”: “…date of birth…”,
“pincode”: “…pincode…”,
“address”: “…address as on card…”,
“gender”: “male/female”,
“splitAddress”: {
“district”: [],
“state”: [
[]
],
“city”: [],
“pincode”: ” “,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “”
},
“uidHash”: “Secure Cryptographic conversion of UID”
}
}
}
Incase of Driving License
{
“object”: {
“result”: {
“issueDate”: “date-of-issue”,
“dob”: “dob”,
“expiryDate”: “date-of-expiry”,
“name”: “name”,
“number”: “dl number”,
“guardianName”: “name of guardian”,
“address”: “address”,
“splitAddress”: {
“state”: [
[]
],
“district”: [],
“city”: [],
“pincode”: “…pincode…”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “…addressLine…”
},
“dlType”: [“array-of-vehicle-class”]
}
}
}
Incase of Passport
{
“object”: {
“result”: {
“parentsGuardianName”: “..parentsGuardianName…”,
“issueDate”: “..issueDate..”,
“expiryDate”: “..expiryDate..”,
“birthDate”: “..birthDate..”,
“name”: “..name..”,
“country”: [
“..country..”
],
“nationality”: “..nationality..”,
“sex”: “F/M”,
“address”: “..address..”,
“pincode”: “..pincode..”,
“passportNumber”: “..passportNumber..”,
“fileNumber”: “..fileNumber..”,
“placeOfBirth”: “..placeOfBirth..”,
“placeOfIssue”: “..placeOfIssue..”,
“splitAddress”: {
“district”: [
“..district..”
],
“state”: [
[
“..state..”
]
],
“city”: [
“..city..”
],
“pincode”: “..pincode..”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “..addressLine..”
}
}
}
}
Incase of VoterId
{
“object”: {
“result”: {
“epicNumber”: “…epic number…”,
“name”: “…name…”,
“fatherName”: “…father name…”,
“state”: “…state name…”,
“dob”: “…date of birth…”,
“yob”: “…year of birth…”,
“ageAsOn”: “…age in year…”,
“address”: “…address found on card…”,
“splitAddress”: {
“district”: [
“…name of district…”
],
“state”: [
[
“…name of state…”,
“WB”
]
],
“city”: [
“…name of the city…”
],
“pincode”: “…pincode of the city…”,
“country”: [
“IN”,
“IND”,
“INDIA”
],
“addressLine”: “…address line on the card…”
}
}
}
}
Update Fatca Form
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required), alphanumeric string of length 24 | userId from investor login response field |
save | Enum String (Required) | “formData” |
type | Enum String (Required) | “fatca” |
data | Object (Required) | payload |
–type | Enum String (Required) | “fatca” |
–fatcaData | Object (Required) | fatca data |
—-pep | Enum String (Required) | whether a ‘politically exposed person’ values: “YES” / “NO” |
—-rpep | Enum String (Required) | whether a ‘related to a politically exposed person’ values: “YES” / “NO” |
—-residentForTaxInIndia | Enum String (Required) | whether a ‘resident outside of India’ values: “YES” / “NO” |
—-countryCodeJurisdictionResidence | Enum String (Optional) | Country of Jurisdiction of Residence code (Refer Table 1.1), to be provided given “residentForTaxInIndia” is “YES” |
—-countryJurisdictionResidence | String(Optional) | Country of Jurisdiction of Residence (Refer Table 1.1), to be provided given “residentForTaxInIndia” is “YES” |
—-taxIdentificationNumber | String(Optional) | Tax Identification Number, to be provided given “residentForTaxInIndia” is “YES” |
—-placeOfBirth | String(Optional) | Place of Birth, to be provided given “residentForTaxInIndia” is “YES” |
—-countryCodeOfBirth | Enum String(Optional) | Country code of birth (Refer Table 1.1), to be provided given “residentForTaxInIndia” is “YES” |
—-countryOfBirth | String(Optional) | Country of birth (Refer Table 1.1), to be provided given “residentForTaxInIndia” is “YES” |
—-addressType | String(Optional) | Type of fatca address , values: “correspondence” / “others”, to be provided given “residentForTaxInIndia” is “YES” |
—-addressCity | String(Optional) | Fatca address city, to be provided given “residentForTaxInIndia” is “YES” |
—-addressDistrict | String (Optional) | Fatca address district, to be provided given “residentForTaxInIndia” is “YES” |
—-addressStateCode | Enum String(Optional) | Fatca address state code (Refer Table 1.2), to be provided given “residentForTaxInIndia” is “YES” |
—-addressState | String(Optional) | Fatca address State (Refer Table 1.2), to be provided given “residentForTaxInIndia” is “YES” |
—-addressCountryCode | Enum String(Optional) | Fatca address Country code (Refer Table 1.1), to be provided given “residentForTaxInIndia” is “YES” |
—-addressCountry | String(Optional) | Fatca address country (Refer Table 1.1), to be provided given “residentForTaxInIndia” is “YES” |
—-addressPincode | String(Optional), valid Pincode | Fatca address Pincode, to be provided given “residentForTaxInIndia” is “YES” |
—-address | String(Optional) | Fatca address, to be provided given “residentForTaxInIndia” is “YES” |
—-relatedPerson | Enum String(Optional) | whether a related person to investor or investor themselves, values: “YES” / “NO” |
—-relatedPersonType | Enum String(Optional) | Type of related person, values: “1” / “2” / “3” for “Guardian of a Minor”, “Assignee”, “Authorised Representative” respectively, Required if related person is applicable (relatedPerson is “YES”) |
—-relatedPersonKycNumberExists | Enum String(Optional) | whether related person has a KYC number, values: “YES” / “NO”, Required if related person is applicable (relatedPerson is “YES”) |
—-relatedPersonKycNumber | String (Optional), valid Kyc number | KYC number of related person (Required if relatedPersonKycNumberExists is “YES”) |
—-relatedPersonTitle | String | Related Person Title, values: “Mr.”/ “Mrs.” / “Ms.” / “Mx.”, Required if related person is applicable (relatedPerson is “YES”) |
—-relatedPersonName | String | Name of related person, Required if related person is applicable (relatedPerson is “YES”) |
—-relatedPersonIdentityProof | Object | Required if related person is applicable(relatedPerson is “YES”), see below for details |
—-relatedPersonIdentityProofType | Enum String(Optional) | Type of related persons ID proof, values: “individualPan” / “aadhaar” / “passport” / “drivingLicence” / “voterId”, Required if related person is applicable (relatedPerson is “YES”) |
relatedPersonIdentityProof Object details when Related Person’s POI is PAN
Property | Data type | Example values |
type | Enum String (Required) | “individualPan” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
number | String (Required) ,valid PAN number | PAN number on POI document |
fatherName | String (Required) ,string of min length of 2 consisting of any character | PAN number on POI document |
relatedPersonIdentityProof Object details when Related Person’s POI is Aadhaar
Property | Data type | Example values |
type | Enum String (Required) | “aadhaar” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
uid | String (Required), string of 8 zeros followed by 4 digits | Aadhaar number |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
relatedPersonIdentityProof Object details when Related Person’s POI is Passport
Property | Data type | Example values |
type | Enum String (Required) | “passport” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
passportNumber | String (Required) | Passport number |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
birthDate | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
relatedPersonIdentityProof Object details when Related Person’s POI is Driving License
Property | Data type | Example values |
type | Enum String (Required) | “drivingLicence” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
number | String (Required) | Driving License number on POI document |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
issueDate | String (Required) ,Issue Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a past Date | Issue date on the document |
expiryDate | String (Required) ,Expiry Date as string in DD/MM/YYYY or DD-MM-YYYY format, should be a future Date | Expiry date on the document |
relatedPersonIdentityProof Object details when Related Person’s POI is VoterId
Property | Data type | Example values |
type | Enum String (Required) | “voterId” |
name | String (Required) ,string of min length of 2 consisting of any character | Name on POI document |
dob | String (Required) ,date of birth as string in DD/MM/YYYY or DD-MM-YYYY format | DOB on POI document |
epicNumber | String (Required) | VoterId number on POI document |
address | String (Required) | Address as on POI document |
city | Enum String (Required) | City as on POI document |
state | Enum String (Required) | State as on POI document, Refer 1st column of Table 1.7 |
district | String (Required) | District as on POI document |
pincode | String (Required), valid Pincode | Pincode |
{
“merchantId”:”…”,
“save”:”formData”,
“type”:”fatca”,
“data”:{
“type”:”fatca”,
“fatcaData”:{
“pep”:”…”,
“rpep”:”…”,
“residentForTaxInIndia”:”…”,
“relatedPerson”:”…”,
“addressType”:”…”,
“countryCodeJurisdictionResidence”:”…”,
“countryJurisdictionResidence”:”…”,
“taxIdentificationNumber”:”…”,
“placeOfBirth”:”…”,
“countryCodeOfBirth”:”…”,
“countryOfBirth”:”…”,
“addressCity”:”…”,
“addressDistrict”:”…”,
“addressStateCode”:”…”,
“addressState”:”… …”,
“addressCountryCode”:”…”,
“addressCountry”:”…”,
“addressPincode”: “543534”,
“address”:”…”,
“relatedPersonType”:”…”,
“relatedPersonKycNumber”:”44354355″,
“relatedPersonKycNumberExists”:”…”,
“relatedPersonTitle”:”….”,
“relatedPersonIdentityProof”:{
“name”:”….”,
“fatherName”:”…”,
“dob”:”…”,
“number”:”…”
},
“relatedPersonName”:”…”,
“relatedPersonIdentityProofType”:”…”
}
}
}
Expected output
{
“object”: “Updated Successfully”
}
Update Form Signature
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
save | String (Required) | “formData” |
type | String (Required) | “signature” |
data | Object (Required) | payload |
–type | Enum String (Required) | “signature” |
–signatureImageUrl | String (Required) ,valid URL | Signature Image URL |
–consent | Enum String(Optional) | Whether the signature to be linked with investor email ID for future purposes. Value : “true” / “false” |
{
“merchantId”:”.. merchantId ..”,
“save”:”formData”,
“type”:”signature”,
“data”:{
“type”:”signature”,
“signatureImageUrl”:”.. signatureImageUrl ..”,
“consent”:”true”
}
}
Output
{
“object”:”Updated successfully”
}
Update Form Photo
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
save | String (Required) | “formData” |
type | String (Required) | “userPhoto” |
data | Object (Required) | payload |
–photoUrl | String (Required) ,valid URL | User Photo URL |
{
“merchantId”:”.. merchantId ..”,
“save”:”formData”,
“type”:”userPhoto”,
“data”:{
“photoUrl”:”.. photo URL ..”
}
}
Output
{
“object”:”Updated successfully”
}
Execute to start video verification
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
inputData | Object (Required) | payload |
–service | Enum String (Required) | “video” |
–type | Enum String (Required) | “video” |
–task | Enum String (Required) | “start” |
{
“merchantId”:”.. merchantId ..”,
“inputData”:{
“service”:”video”,
“type”:”video”,
“task”:”start”,
“data”:{}
}
}
Expected output
{
“object”: [{
“transactionId”: “…….”,
“randNumber”: “…….”
}]
}
Execute recorded video
Note: Acceptable format : .mp4 format with video encoding of H264 and audio encoding of AAC (Advanced Audio Coding)
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
inputData | Object (Required) | payload |
–service | Enum String (Required) | “video” |
–type | Enum String (Required) | “video” |
–task | Enum String (Required) | “verify” |
–data | Object(Required) | payload containing video details |
—-video | URL String (Required) | Video URL |
—-snapshot | URL String (Optional) | Image URL of snapshot from video containing user’s face |
—-transactionId | String (Required), must be an alphanumeric string of length 30 | transaction Id received in start video API call |
—-matchImage | URL String (Required) | URL of POI Image containg user Photo |
—-seconds | Array of moment strings at which face was detected in the video” (Optional), must contain moments in valid format, example : “00:00:08” | Array of moment strings at which face was detected in the video” (Optional), must contain moments in valid format details |
—-type | Enum String (Required) | “video” |
{
“merchantId”:”.. merchantId ..”,
“inputData”:{
“service”:”video”,
“type”:”video”,
“task”:”verify”,
“data”:{
“video”:”.. video URL ..”,
“transactionId”:”.. transactionId ..”,
“matchImage”:”.. URL of POI Image containg user Photo ..”,
“seconds”:[
“00:00:02”,
“00:00:04”,
“00:00:06”,
“00:00:08”
],
“type”:”video”
}
}
}
Expected output
{
“object”: {
“n”: 1,
“nModified”: 1,
“ok”: 1
}
}
Execute user forensics after video verification
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
All field descriptions and respective validations are same as in the previously documented Userforensics update call
{
“merchantId”: “…….”,
“save”: “formData”,
“type”: “userForensics”,
“data”: {
“type”: “usersData”,
“userData”: {
“identity”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“address”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“bankaccount”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“documents”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“contract”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
}
}
}
}
Expected output
{
“object”: “…….”
}
Create Contract PDF URL
Creates a PDF which captures all details filled while onboarding.
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
inputData | Object (Required) | payload |
–service | Enum String (Required) | “esign” |
–task | Enum String (Required) | “createPdf” |
{
“merchantId”:”.. merchant ID ..”,
“inputData”:{
“service”:”esign”,
“type”:””,
“task”:”createPdf”,
“data”:{
}
}
}
Expected output
{
“object”:{
“result”:{
“combinedPdf”:”.. Unsigned PDF contract URL ..”
}
}
}
Generate Aadhaar Esign URL
Generate Aadhaar Esign URL to sign the Contract.
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
inputData | Object (Required) | payload |
–service | Enum String (Required) | “esign” |
–task | Enum String (Required) | “createEsignUrl” |
–data | Object (Required) | payload |
—-inputFile | URL String (Required) | Unsigned PDF contract URL (response from Create Contract PDF URL) |
—-signatureType | ENUM Sting (Required) | “aadhaaresign” |
—-redirectUrl | ENUM Sting (optional) | “redirect URL” |
—-redirectTime | number Integer (optional) | “redirect time in seconds” |
—-eventCallbackUrl | URL String (Optional) | Callback on events of success and failure |
—-eventCallbackHeaders | Object (Optional) | In case of any headers needs to be passed for the eventCallbackUrl |
{
“merchantId”:”.. merchant ID ..”,
“inputData”:{
“service”: “esign”,
“type”: “”,
“task”: “createEsignUrl”,
“data”: {
“inputFile”: “.. Unsigned PDF contract URL ..”,
“signatureType”: “aadhaaresign”,
“redirectUrl”: “.. redirect URL ..”,
“redirectTime”: “.. redirect time in seconds ..”,
“eventCallbackUrl”: “.. event Callback Url ..”,
“eventCallbackHeaders”: {
” ..key.. “:”.. value ..”
}
}
}
}
Expected output
{
“object”: {
“task”: “url”,
“id”: “….”,
“customerId”: “….”,
“inputFile”: “..inputUrl..”,
“signatureType”: “aadhaaresign”,
“multiPages”: “true”,
“name”: “..name..”,
“showSignatureConsent”: “…”,
“email”: “…emailId…”,
“redirectUrl”: “… redirect Url …”,
“createSignatureOptions”: [],
“result”: {
“token”: “..token..”,
“isUsed”: 1,
“url”: “..Aadhaar Esign Url…”,
“uid”: “”,
“inputFile”: “..inputUrl..”,
“email”: “…emailId…”,
“redirectUrl”: “… redirect Url …”,
“createSignatureOptions”: [],
“signatureType”: “aadhaaresign”,
“name”: “..name..”,
“showSignatureConsent”: “…”,
“scaleSignature”: “…”,
“selectPage”: 1,
“signaturePosition”: “Bottom-Right”,
“pageNo”: 1
}
}
}
Save Aadhaar Esign Signed PDF
Save the Aadhaar Esign signed PDF.
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
inputData | Object (Required) | payload |
–service | Enum String (Required) | “esign” |
–task | Enum String (Required) | “getEsignData” |
{
“merchantId”:”.. merchant ID ..”,
“inputData”:{
“service”: “esign”,
“type”: “”,
“task”: “getEsignData”,
“data”:{
}
}
}
Expected output
{
“object”: {
“customerId”: “..”,
“token”: “…”,
“id”: 2341,
“result”: {
“token”: “…”,
“isUsed”: 0,
“url”: “.. Unsigned PDF contract URL ..”,
“uid”: “”,
“inputFile”: “..inputUrl..”,
“email”: “…emailId…”,
“createSignatureOptions”: [],
“signatureType”: “aadhaaresign”,
“name”: “..name..”,
“showSignatureConsent”: “…”,
“scaleSignature”: “…”,
“selectPage”: 1,
“signaturePosition”: “Bottom-Right”,
“pageNo”: 1
“esignedFile”: “.. Signed PDF URL ..”,
“signatureImage”: “”
},
“dscData”: { }
}
}
Save Signed PDF (Normal Esign method only)
Saves Signed Contract PDF.
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
save | Enum String (Required) | “esign” |
data | Object (Required) | payload |
–signedPdf | URL String (Required) | Signed PDF URL |
{
“merchantId”: “.. Merchant ID ..”,
“save”: “esign”,
“data”: {
“signedPdf”: “.. Signed PDF URL ..”
}
}
Expected output
{
“object”: “Updated successfully”
}
Execute user forensics after contract
Endpoint
/api/onboardings/updateForm
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
{
“merchantId”: “…….”,
“save”: “formData”,
“type”: “userForensics”,
“data”: {
“type”: “usersData”,
“userData”: {
“identity”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“address”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“bankaccount”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“documents”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“contract”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
},
“thankyou”: {
“geoLocationData”: {},
“browserData”: {
“browserName”: “…….”,
“cookieEnabled”: “…….”,
“browserLanguage”: “…….”,
“os”: “…….”,
“userAgent”: “…….”,
“pluginsInstalled”: [“….”],
“browserVersion”: “…….”,
“screenWidth”: “…….”,
“screenHeight”: “…….”,
“screenPixelDepth”: “…….”,
“screenColorDepth”: “…….”,
“deviceInfo”: {
“complete_device_name”: “…….”,
“form_factor”: “…….”,
“is_mobile”: false
},
“signzyPlatformUsed”: “…….”,
“userLat”: 12.9833,
“userLong”: 77.5833
},
“pageName”: “…….”
}
}
}
}
Expected output
{
“object”: “…….”
}
Execute verification engine
Executes verification on existing Onboarding information and updates it with results from verification insights.
Data which is required as per the AMC will be validated in this API. Distributor will get the error if the complete and the correct data is not passed to the AMC.
Endpoint
/api/onboardings/execute
Headers
Property | Value |
Content-type | application/json |
Authorization | …access token… (alphanumeric string of length 64) |
Input
Property | Data type | Example values |
merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
inputData | Object (Required) | payload |
–service | Enum String (Required) | “verificationEngine” |
–merchantId | String (Required) alphanumeric string of length 24 | userId from investor login response field |
{
“merchantId”: “.. merchantId ..”,
“inputData”: {
“service”: “verificationEngine”,
“merchantId”: “…….”
}
}
Expected output
{
“object”: “…….”
}
Pull onboarding detail
Endpoint
POST /api/onboardings/pullonboardings
Headers
Property | Value |
Content-type | application/json |
Authorization | …channel’s access token… |
Input (for fetch by Onboarding status)
Property | Data type | Example values |
channelId | String | Channel Id |
limitLength | Integer | Limit to number of onboardings that are returned (helpful in pagination) |
skipLength | Integer | Skip these many onboardings before generating the list of onboardings |
status | String | Status of onboarding wanted to be pulled (all/pending/accepted/rejected) |
{
“channelId”: “…channelId…”,
“limitLength”: 10,
“skipLength”: 0,
“status” : “accepted”
}
Input (for fetch by Onboarding Id)
Property | Data type | Example values |
channelId | String | Channel Id |
onboardingId | String | Onboarding Id |
extraFields | Array(optional) | ExtraFields required to be appended in response (Possible values : ‘CAMS’) |
{
“channelId”: “…channelId…”,
“onboardingId”: “…onboardingId…”,
“extraFields” : [“..cams..”]
}
Expected output
{
“customerId”: “….”,
“status”: “….”,
“limitLength”: “….”,
“skipLength”: “….”,
“id”: 4,
“instanceId”: “….”,
“result”: [{
“email”: “….”,
“phone”: “….”,
“name”: “….”,
“username”: “….”,
“customerId”: “….”,
“merchantId”: “….”,
“status”: “….”,
“reason”: “….”,
“verificationData”: {
“idCards”: [{
“type”: “….”,
“purpose”: [
“POI”
],
“name”: “….”,
“idNo”: “….”,
“dob”: “….”,
“address”: “….”,
“state”: “….”,
“issueDate”: “….”,
“images”: [
“….”
],
“verificationStatus”: {
“verification”: true,
“message”: “….”,
“isSet”: 1
},
“faceExtraction”: {
“isSet”: 1
}
}, {
“purpose”: [
“POA”
],
“name”: “….”,
“idNo”: “….”,
“dob”: “….”,
“address”: “….”,
“state”: “….”,
“issueDate”: “….”,
“images”: [
“….”,
“….”
],
“pincode”: “….”,
“type”: “….”,
“verificationStatus”: {
“isSet”: 1
},
“faceExtraction”: {
“cropped”: “….”,
“isSet”: 1
}
}],
“documents”: [{
“type”: “….”,
“beneficiaryMobile”: “….”,
“beneficiaryAccount”: “….”,
“beneficiaryName”: “….”,
“beneficiaryIFSC”: “….”,
“images”: [
“….”
]
}, {
“type”: “….”,
“beneficiaryMobile”: “….”,
“beneficiaryAccount”: “….”,
“beneficiaryName”: “….”,
“beneficiaryIFSC”: “….”,
“images”: [],
“bankTransferOutput”: {
“active”: “….”,
“nameMatch”: “….”,
“mobileMatch”: “….”,
“signzyReferenceId”: “….”,
“auditTrail”: {
“nature”: “….”,
“value”: “….”,
“timestamp”: “….Z”
},
“bankTransfer”: {
“response”: “….”,
“bankRRN”: “….”,
“beneName”: “….”,
“beneMMID”: “….”,
“beneMobile”: “….”,
“beneIFSC”: “….9”
}
},
“verifyAmountOutput”: {
“amountMatch”: “….”,
“owerName”: “….”,
“mobile”: “….”,
“mmid”: “….1”
}
}],
“video”: {
“url”: “….”,
“matchImage”: “….”,
“signzyVerifiableString”: “….”,
“seconds”: [
“00:00:02”,
“00:00:03”,
“00:00:04”
],
“videoMatch”: {
“matchAudioScore”: “….”,
“isSet”: 1
},
“matchImageEla”: {
“task”: “….”,
“essentials”: {
“url”: “….”
},
“id”: “….”,
“patronId”: “….”,
“result”: “….”,
“isSet”: 1
},
“forensics”: {
“staticRisk”: {
“staticPhoto”: false,
“ageGroup”: “….”,
“isSet”: 1
},
“videoLandMarks”: {
“result”: “….”,
“isSet”: 1
},
“videoFaceMatch”: {
“videoImages”: [
“https://preproduction-persist.signzy.tech/api/files/64344/download/r2jhdPYWwVt3qgrEW6bbQA8EFML2QSyP7UNxzhlsnJbM2VC5kj.jpg”,
“https://preproduction-persist.signzy.tech/api/files/64345/download/BkENcX31h0HeVPqtPHUV7prEGOmSYjlznOI5sAlKrBy2ZGJgqn.jpg”,
“https://preproduction-persist.signzy.tech/api/files/64347/download/12KWSe9eJhh1Q517RaB4oz2SRXv3heFoaai9BM0ZzFPbAkOx4M.jpg”
],
“finalMatchImage”: “….”,
“matchStatistics”: {
“coVariance”: “….”,
“matchPercentage”: “….%”
},
“isSet”: 1
},
“exif”: {
“metadataFound”: “….”,
“message”: “….”,
“image”: {},
“gps”: {},
“isSet”: 1
}
},
“faceLandmarks”: {
“result”: “….”,
“isSet”: 1
}
},
“contract”: {
“signedContract”: “….f”
},
“photo”: {},
“fatca”: {
“pep”: “….”,
“rpep”: “….”,
“residentForTaxInIndia”: “….”,
“relatedPerson”: “….O”
},
“signature”: {
“signatureImageUrl”: “….”
},
“formData”: {
“gender”: “….”,
“maritalStatus”: “….”,
“nomineeRelationShip”: “….”,
“maidenTitle”: “….”,
“motherTitle”: “….”,
“occupationType”: “….”,
“maidenName”: “….”,
“motherName”: “….”,
“applicationStatus”: “….”,
“countryCode”: 91,
“emailId”: “….”,
“pincode”: 560078,
“kycAccountType”: “….”,
“mobileNumber”: “….”,
“communicationAddress”: “….”,
“nomineeTitle”: “….”,
“nomineeName”: “….A”,
“annualIncome”: “… refer Table 1.8”,
“placeOfBirth”: “….”
},
“info”: {
“name”: “….”,
“dob”: “….”,
“emailId”: “….”,
“phone”: “….”,
“communicationAddress”: “….”,
“permanentAddress”: “….”
}
},
“formFilledData”: {
“identityProof”: {
“type”: “….”,
“purpose”: [
“POI”
],
“name”: “….”,
“idNo”: “….”,
“dob”: “….”,
“expiryDate”: “….”,
“verify”: “….”,
“address”: “….”,
“state”: “….”,
“issueDate”: “….”,
“images”: [
“….”
],
“proofType”: “….f”
},
“addressProof”: [{
“purpose”: [
“POA”
],
“name”: “….”,
“idNo”: “….”,
“dob”: “….”,
“verify”: “….”,
“address”: “….”,
“expiryDate”: “….”,
“state”: “….”,
“issueDate”: “….”,
“addressType”: “….”,
“proofType”: “….”,
“images”: [
“….”,
“….”
],
“pincode”: “….”,
“type”: “….t”
}],
“bankAccount”: {
“type”: “….”,
“images”: [
“….”
]
},
“formFields”: {
“gender”: “….”,
“maritalStatus”: “….”,
“nomineeRelationShip”: “….”,
“maidenTitle”: “….”,
“motherTitle”: “….”,
“occupationType”: “….”,
“maidenName”: “….”,
“motherName”: “….”,
“applicationStatus”: “….”,
“countryCode”: 91,
“emailId”: “….”,
“pincode”: 560078,
“kycAccountType”: “….”,
“mobileNumber”: “….”,
“communicationAddress”: “….”,
“nomineeTitle”: “….”,
“nomineeName”: “….A”,
“annualIncome”: “.. refer Table 1.8”,
“placeOfBirth”: “….”
},
“fatca”: {
“pep”: “….”,
“rpep”: “….”,
“residentForTaxInIndia”: “….”,
“relatedPerson”: “….O”
},
“signature”: {
“signatureImageUrl”: “….”
},
“photo”: {},
“video”: {
“url”: “….”,
“matchImage”: “….”,
“signzyVerifiableString”: “….”,
“seconds”: [
“00:00:02”,
“00:00:03”,
“00:00:04”
]
},
“contract”: {
“signedContract”: “….f”
}
},
“verificationResult”: {
“idCards”: [{
“status”: “….”,
“type”: “….”,
“purpose”: “….”,
“number”: “….”,
“businessFlag”: 0
}, {
“status”: “….”,
“type”: “….”,
“purpose”: “….”,
“number”: “….”,
“businessFlag”: 0
}],
“bankAccount”: “….”,
“video”: “….”,
“amlStatus”: “….”,
“overalStatus”: “….y”
}
}, {
“email”: “….”,
“phone”: “….”,
“name”: “….”,
“username”: “….”,
“customerId”: “….”,
“merchantId”: “….”,
“status”: “….”,
“reason”: “….”,
“verificationData”: {
“idCards”: [],
“documents”: [],
“video”: {},
“contract”: {},
“photo”: {},
“fatca”: {},
“signature”: {},
“formData”: {}
},
“formFilledData”: {
“identityProof”: {},
“addressProof”: [],
“bankAccount”: {
“type”: “….n”
},
“formFields”: {},
“fatca”: {},
“signature”: {},
“photo”: {},
“video”: {
“url”: “….”,
“matchImage”: “….”,
“signzyVerifiableString”: “….”,
“seconds”: “….”
},
“contract”: {}
},
“verificationResult”: {}
}, {
“email”: “….”,
“phone”: “….”,
“name”: “….”,
“username”: “….”,
“customerId”: “….”,
“merchantId”: “….”,
“status”: “….”,
“reason”: “….”,
“verificationData”: {
“idCards”: [{
“type”: “….”,
“purpose”: [
“POI”
],
“name”: “….”,
“idNo”: “….”,
“dob”: “….”,
“address”: “….”,
“state”: “….”,
“issueDate”: “….”,
“images”: [
“….”
],
“verificationStatus”: {
“verified”: true,
“message”: “….”,
“upstreamName”: “….”,
“isSet”: 1
},
“faceExtraction”: {
“cropped”: “….”,
“isSet”: 1
}
}, {
“purpose”: [
“POA”
],
“name”: “….”,
“idNo”: “….”,
“dob”: “….”,
“address”: “….”,
“state”: “….”,
“issueDate”: “….”,
“images”: [
“….”
],
“pincode”: “….”,
“type”: “….”,
“verificationStatus”: {
“message”: “….”,
“verified”: true,
“moreInfo”: {
“issueDate”: “….”,
“expiryDate”: “….”,
“vehicleClass”: [
“LMV”
]
},
“instance”: {},
“isSet”: 1
},
“faceExtraction”: {
“cropped”: “….”,
“isSet”: 1
}
}],
“documents”: [],
“video”: {
“url”: “….”,
“matchImage”: “….”,
“signzyVerifiableString”: “….”,
“seconds”: [
“00:00:02”,
“00:00:04”,
“00:00:06”,
“00:00:08”
],
“videoMatch”: {
“matchAudioScore”: “….”,
“isSet”: 1
},
“matchImageEla”: {
“task”: “….”,
“essentials”: {
“url”: “….”
},
“id”: “….”,
“patronId”: “….”,
“result”: “….”,
“isSet”: 1
},
“forensics”: {
“staticRisk”: {
“staticPhoto”: false,
“ageGroup”: “….”,
“isSet”: 1
},
“videoLandMarks”: {
“result”: “….”,
“isSet”: 1
},
“videoFaceMatch”: {
“videoImages”: [
“https://preproduction-persist.signzy.tech/api/files/89577/download/qtH4V9fyZz2m2P4SxOyaNoVAo9FXKn7d3YE0nW5Pw3cS50T7yj.jpg”,
“https://preproduction-persist.signzy.tech/api/files/89578/download/yQb2EgzJzr1JUpN27hBAtngQsic1v2NlLCCGJVLGWcLVHfyEXe.jpg”,
“https://preproduction-persist.signzy.tech/api/files/89579/download/nnLz1AL5iJlezeSxVe3jINYZTwMScWZnmVDX6ozWNQDn0FsTIk.jpg”,
“https://preproduction-persist.signzy.tech/api/files/89580/download/fDvl5Cbn6V3RIDNV2BGhQAYn3CwV15O1Nn7caBXL0BxTSnhSzo.jpg”
],
“finalMatchImage”: “….”,
“matchStatistics”: {
“coVariance”: “….”,
“matchPercentage”: “….%”
},
“isSet”: 1
},
“exif”: {
“metadataFound”: “….”,
“message”: “….”,
“image”: {},
“gps”: {},
“isSet”: 1
}
},
“faceLandmarks”: {
“result”: “….”,
“isSet”: 1
}
},
“contract”: {},
“photo”: {},
“fatca”: {
“pep”: “….”,
“rpep”: “….”,
“residentForTaxInIndia”: “….”,
“relatedPerson”: “….O”
},
“signature”: {
“signatureImageUrl”: “….”
},
“formData”: {
“gender”: “….”,
“maritalStatus”: “….”,
“nomineeRelationShip”: “….”,
“maidenTitle”: “….”,
“panNumber”: “….”,
“aadhaarNumber”: “….”,
“motherTitle”: “….”,
“occupationDescription”: “….”,
“occupationCode”: “….”,
“kycAccountCode”: “….”,
“kycAccountDescription”: “….”,
“communicationAddressCode”: “….”,
“communicationAddressType”: “….”,
“applicationStatusCode”: “….”,
“applicationStatusDescription”: “….”,
“countryCode”: “….”,
“mobileNumber”: “….”,
“emailId”: “….”,
“communicationAddress”: “….”,
“pincode”: “….”,
“motherName”: “….”,
“nomineeTitle”: “….”,
“nomineeName”: “….a”
},
“info”: {
“name”: “….”,
“dob”: “….”,
“emailId”: “….”,
“phone”: “….”,
“communicationAddress”: “….”,
“permanentAddress”: “….”
}
},
“formFilledData”: {
“identityProof”: {
“type”: “….”,
“purpose”: [
“POI”
],
“name”: “….”,
“idNo”: “….”,
“dob”: “….”,
“expiryDate”: “….”,
“verify”: “….”,
“address”: “….”,
“state”: “….”,
“issueDate”: “….”,
“images”: [
“….”
],
“proofType”: “….f”
},
“addressProof”: [{
“purpose”: [
“POA”
],
“name”: “….”,
“idNo”: “….”,
“dob”: “….”,
“verify”: “….”,
“address”: “….”,
“expiryDate”: “….”,
“state”: “….”,
“issueDate”: “….”,
“addressType”: “….”,
“proofType”: “….”,
“images”: [
“….”
],
“pincode”: “….”,
“type”: “….l”
}],
“bankAccount”: {
“type”: “….n”
},
“formFields”: {
“gender”: “….”,
“maritalStatus”: “….”,
“nomineeRelationShip”: “….”,
“maidenTitle”: “….”,
“panNumber”: “….”,
“aadhaarNumber”: “….”,
“motherTitle”: “….”,
“occupationDescription”: “….”,
“occupationCode”: “….”,
“kycAccountCode”: “….”,
“kycAccountDescription”: “….”,
“communicationAddressCode”: “….”,
“communicationAddressType”: “….”,
“applicationStatusCode”: “….”,
“applicationStatusDescription”: “….”,
“countryCode”: “….”,
“mobileNumber”: “….”,
“emailId”: “….”,
“communicationAddress”: “….”,
“pincode”: “….”,
“motherName”: “….”,
“nomineeTitle”: “….”,
“nomineeName”: “….a”
},
“fatca”: {
“pep”: “….”,
“rpep”: “….”,
“residentForTaxInIndia”: “….”,
“relatedPerson”: “….O”
},
“signature”: {
“signatureImageUrl”: “….”
},
“photo”: {},
“video”: {
“url”: “….”,
“matchImage”: “….”,
“signzyVerifiableString”: “….”,
“seconds”: [
“00:00:02”,
“00:00:04”,
“00:00:06”,
“00:00:08”
]
},
“contract”: {}
},
“verificationResult”: {
“idCards”: [{
“status”: “….”,
“type”: “….”,
“purpose”: “….”,
“number”: “….”,
“businessFlag”: 0
}, {
“status”: “….”,
“type”: “….”,
“purpose”: “….”,
“number”: “….”,
“businessFlag”: 0
}],
“bankAccount”: “….”,
“video”: “….”,
“amlStatus”: “….”,
“overalStatus”: “….y”
}
}]
}
Pull CAMS responses for an Onboarding
Endpoint
POST /api/onboardings/pullCamsResponse
Headers
Property | Value |
Content-type | application/json |
Authorization | …channel’s access token… |
Input
Property | Data type | Example values |
onboardingId | String | Onboarding Id whose CAMS responses needs to be pulled |
{
“onboardingId”: “5ca78ca795c92f759d54c621”
}
Expected output
Property | Data type | Example values |
onboardingId | String | Onboarding Id |
camsResponse | Array of CAMS response Objects | pushResponse is the exact response from CAMS , timeStamp is time of CAMS push |
{
“onboardingId”: ” … “,
“id”: ” .. “,
“camsResponse”: [
{
“_id”: ” .. “,
“onboardingId”: ” … “,
“pushResponse”: ” … “,
“timeStamp”: “Fri Apr 05 2019 22:31:50 GMT+0530 (IST)”
}
]
}
Pull Karvy data for manual trigger purpose
Endpoint
POST /api/onboardings/pullKarvyData
Headers
Property | Value |
Content-type | application/json |
Authorization | …channel’s access token… |
Input
Property | Data type | Example values |
onboardingId | String | Onboarding Id whose Karvy data needs to be pulled |
{
“onboardingId”: “….”
}
Expected output
Property | Data type |
karvyXml | String |
{
“karvyXml”: “<Contains the XMl srting>”
}
Pull Karvy responses for an Onboarding
Endpoint
POST /api/onboardings/pullkarvyresponse
Headers
Property | Value |
Content-type | application/json |
Authorization | …channel’s access token… |
Input
Property | Data type | Example values |
onboardingId | String | Onboarding Id for which Karvy is to be called |
{
“onboardingId”: “….”
}
Expected output
Property | Data type | Example values |
merchantId | String | merchant Id |
karvyResponse | Array of Karvy response Objects | pushResponse is the exact response from Karvy , result is the status from karvy response , timeStamp is time of karvy push |
{
“merchantId”: ” … “,
“status”: ” .. “,
“karvyResponse”: [
{
“pushResponse”: ” … “,
“result”: ” … “,
“timeStamp”: ” … “
}
]
}
Pull CVL data
Endpoint
POST /api/onboardings/pullCvlData
Headers
Property | Value |
Content-type | application/json |
Authorization | …channel’s access token… |
Input
Property | Data type | Example values |
onboardingId | String | Onboarding Id whose CVL data needs to be pulled |
{
“onboardingId”: “….”
}
Expected output
Property | Data type |
cvlXml | String |
{
“cvlXml”: “<Contains the XMl srting>”
}
Pull CVL responses for an Onboarding
Endpoint
POST /api/onboardings/pullCvlResponse
Headers
Property | Value |
Content-type | application/json |
Authorization | …channel’s access token… |
Input
Property | Data type | Example values |
onboardingId | String | Onboarding Id for which cvl is to be called |
{
“onboardingId”: “….”
}
Expected output
Property | Data type | Example values |
merchantId | String | merchant Id |
cvlResponse | Array of CVL response Objects | pushResponse is the exact response from CVL , result is the status from cvl response , timeStamp is time of cvl push |
{
“merchantId”: ” … “,
“status”: ” .. “,
“cvlResponse”: [
{
“pushResponse”: ” … “,
“result”: ” … “,
“timeStamp”: ” … “
}
]
}
Distributor Dashboard
Basic details
API endpoint details
Protocol: HTTPS
Preproduction hostname: investor-onboarding-preproduction.signzy.tech
Production hostname: investor-onboarding.signzy.tech
Distributor Login
Login API for Distributor Dashboard
Input
Post request to :: /api/distributorAdmins/login
{
“username”: “enter your valid username”,
“password”: “enter your valid password”
}
Expected Login response
{
“id”: “..id..”,
“ttl”: “..ttl..”,
“created”: “..created..”,
“userId”: “..userId..”
}
Property | Accepted values/format | Description |
id | String | This is your access token to be passed into other endpoints as Authorization header |
ttl | Integer | Time to live (ttl for the access token that is generated) |
created | String | Time and Date of creation of access-token |
userId | String | ID of the distributor |
Add AMC
Adding Channel to the Distributor Dashboard. This will be one time activity and the channel will be added to the Dashboard.
Headers
Property | Value |
Content-type | application/json |
Authorization | … access token… |
Input
Post request to :: /api/distributorAdmins/addChannel
Property | Data type | Description |
task | String | task type |
id | String | Distributor ID |
credentials | Object | Object |
username | String | Channel Username |
password | String | Channel Password |
{
“task” : “addAmc”,
“id” : “..distributorId..”,
“credentials” : {
“username”:”..username..”,
“password”:”..password..”
}
}
Expected output
Property | Data type | Description |
message | String | Message |
addStatus | Boolean | Boolean value |
{
“result”: {
“message”: “Added Successfully”,
“addStatus”: true
}
}
Reference Tables
Table 1.1 (Country and Code)
Country | Code |
India | 101 |
Albania | 003 |
Aland Islands | 002 |
Afghanistan | 001 |
Algeria | 004 |
American Samoa | 005 |
Andorra | 006 |
Angola | 007 |
Anguilla | 008 |
Antarctica | 009 |
Antigua And Barbuda | 010 |
Argentina | 011 |
Armenia | 012 |
Aruba | 013 |
Australia | 014 |
Austria | 015 |
Azerbaijan | 016 |
Bahamas | 017 |
Bahrain | 018 |
Bangladesh | 019 |
Barbados | 020 |
Belarus | 021 |
Belgium | 022 |
Belize | 023 |
Benin | 024 |
Bermuda | 025 |
Bhutan | 026 |
Bolivia | 027 |
Bosnia And Herzegovina | 028 |
Botswana | 029 |
Bouvet Island | 030 |
Brazil | 031 |
British Indian Ocean Territory | 032 |
Brunei Darussalam | 033 |
Bulgaria | 034 |
Burkina Faso | 035 |
Burundi | 036 |
Cambodia | 037 |
Cameroon | 038 |
Canada | 039 |
Cape Verde | 040 |
Cayman Islands | 041 |
Central African Republic | 042 |
Chad | 043 |
Chile | 044 |
China | 045 |
Christmas Island | 046 |
Cocos (Keeling) Islands | 047 |
Colombia | 048 |
Comoros | 049 |
Congo | 050 |
Congo, The Democratic Republic Of The | 051 |
Cook Islands | 052 |
Costa Rica | 053 |
Cote D’Ivoire | 054 |
Croatia | 055 |
Cuba | 056 |
Cyprus | 057 |
Czech Republic | 058 |
Denmark | 059 |
Djibouti | 060 |
Dominica | 061 |
Dominican Republic | 062 |
Ecuador | 063 |
Egypt | 064 |
El Salvador | 065 |
Equatorial Guinea | 066 |
Eritrea | 067 |
Estonia | 068 |
Ethiopia | 069 |
Falkland Islands (Malvinas) | 070 |
Faroe Islands | 071 |
Fiji | 072 |
Finland | 073 |
France | 074 |
French Guiana | 075 |
French Polynesia | 076 |
French Southern Territories | 077 |
Gabon | 078 |
Gambia | 079 |
Georgia | 080 |
Germany | 081 |
Ghana | 082 |
Gibraltar | 083 |
Greece | 084 |
Greenland | 085 |
Grenada | 086 |
Guadeloupe | 087 |
Guam | 088 |
Guatemala | 089 |
Guernsey | 090 |
Guinea | 091 |
Guinea-Bissau | 092 |
Guyana | 093 |
Haiti | 094 |
Heard Island And Mcdonald Islands | 095 |
Holy See (Vatican City State) | 096 |
Honduras | 097 |
Hong Kong | 098 |
Hungary | 099 |
Iceland | 100 |
Indonesia | 102 |
Iran, Islamic Republic Of | 103 |
Iraq | 104 |
Ireland | 105 |
Isle Of Man | 106 |
Israel | 107 |
Italy | 108 |
Jamaica | 109 |
Japan | 110 |
Jersey | 111 |
Jordan | 112 |
Kazakhstan | 113 |
Kenya | 114 |
Kiribati | 115 |
Korea, Democratic People’s Republic Of | 116 |
Korea, Republic Of | 117 |
Kuwait | 118 |
Kyrgyzstan | 119 |
Lao People’s Democratic Republic | 120 |
Latvia | 121 |
Lebanon | 122 |
Lesotho | 123 |
Liberia | 124 |
Libyan Arab Jamahiriya | 125 |
Liechtenstein | 126 |
Lithuania | 127 |
Luxembourg | 128 |
Macao | 129 |
Macedonia, The Former Yugoslav Republic Of | 130 |
Madagascar | 131 |
Malawi | 132 |
Malaysia | 133 |
Maldives | 134 |
Mali | 135 |
Malta | 136 |
Marshall Islands | 137 |
Martinique | 138 |
Mauritania | 139 |
Mauritius | 140 |
Mayotte | 141 |
Mexico | 142 |
Micronesia, Federated States Of | 143 |
Moldova, Republic Of | 144 |
Monaco | 145 |
Mongolia | 146 |
Montserrat | 147 |
Morocco | 148 |
Mozambique | 149 |
Myanmar | 150 |
Namibia | 151 |
Nauru | 152 |
Nepal | 153 |
Netherlands | 154 |
Netherlands Antilles | 155 |
New Caledonia | 156 |
New Zealand | 157 |
Nicaragua | 158 |
Niger | 159 |
Nigeria | 160 |
Niue | 161 |
Norfolk Island | 162 |
Northern Mariana Islands | 163 |
Norway | 164 |
Oman | 165 |
Pakistan | 166 |
Palau | 167 |
Palestinian Territory, Occupied | 168 |
Panama | 169 |
Papua New Guinea | 170 |
Paraguay | 171 |
Peru | 172 |
Philippines | 173 |
Pitcairn | 174 |
Poland | 175 |
Portugal | 176 |
Puerto Rico | 177 |
Qatar | 178 |
Reunion | 179 |
Romania | 180 |
Russian Federation | 181 |
Rwanda | 182 |
Saint Helena | 183 |
Saint Kitts And Nevis | 184 |
Saint Lucia | 185 |
Saint Pierre And Miquelon | 186 |
Saint Vincent And The Grenadines | 187 |
Samoa | 188 |
San Marino | 189 |
Sao Tome And Principe | 190 |
Saudi Arabia | 191 |
Senegal | 192 |
Serbia And Montenegro | 193 |
Seychelles | 194 |
Sierra Leone | 195 |
Singapore | 196 |
Slovakia | 197 |
Slovenia | 198 |
Solomon Islands | 199 |
Somalia | 200 |
South Africa | 201 |
South Georgia And The South Sandwich Islands | 202 |
Spain | 203 |
Sri Lanka | 204 |
Sudan | 205 |
Suriname | 206 |
Svalbard And Jan Mayen | 207 |
Swaziland | 208 |
Sweden | 209 |
Switzerland | 210 |
Syrian Arab Republic | 211 |
Taiwan, Province Of China | 212 |
Tajikistan | 213 |
Tanzania, United Republic Of | 214 |
Thailand | 215 |
Timor-Leste | 216 |
Togo | 217 |
Tokelau | 218 |
Tonga | 219 |
Trinidad And Tobago | 220 |
Tunisia | 221 |
Turkey | 222 |
Turkmenistan | 223 |
Turks And Caicos Islands | 224 |
Tuvalu | 225 |
Uganda | 226 |
Ukraine | 227 |
United Arab Emirates | 228 |
United Kingdom | 229 |
United States | 230 |
United States Minor Outlying Islands | 231 |
Uruguay | 232 |
Uzbekistan | 233 |
Vanuatu | 234 |
Venezuela | 235 |
Viet Nam | 236 |
Virgin Islands, British | 237 |
Virgin Islands, U.S. | 238 |
Wallis And Futuna | 239 |
Western Sahara | 240 |
Yemen | 241 |
Zambia | 242 |
Zimbabwe | 243 |
Côte D’ivoire | CI |
Korea,Democratic People’sRepublicOf | KP |
Lao People’s Democratic Republic | 120 |
Table 1.2 (Cams State and code)
State | Code |
Andaman & Nicobar | AN |
Andhra Pradesh | AP |
Arunachal Pradesh | AR |
Assam | AS |
Bihar | BR |
Chandigarh | CH |
Chattisgarh | CG |
Dadra and Nagar Haveli | DN |
Daman & Diu | DD |
Delhi | DL |
Goa | GA |
Gujarat | GJ |
Haryana | HR |
Himachal Pradesh | HP |
Jammu & Kashmir | JK |
Jharkhand | JH |
Karnataka | KA |
Kerala | KL |
Lakshadweep | LD |
Madhya Pradesh | MP |
Maharashtra | MH |
Manipur | MN |
Meghalaya | ML |
Mizoram | MZ |
Nagaland | NL |
Odisha | OR |
Pondicherry | PY |
Punjab | PB |
Rajasthan | RJ |
Sikkim | SK |
Tamil Nadu | TN |
Telangana | TS |
Tripura | TR |
Uttar Pradesh | UP |
Uttarakhand | UA |
West Bengal | WB |
Other | XX |
Table 1.3 (Occupation and codes)
Code | Occupation Description |
01 | Private Sector |
02 | Public Sector |
03 | Business |
04 | Professional |
06 | Retired |
07 | Housewife |
08 | Student |
10 | Government Sector |
99 | Others |
11 | Self Employed |
12 | Not Categorized |
Table 1.4 (KYC account description and codes)
KYC Acc. Code | KYC Acc. Description |
01 | New |
02 | Modify with documents |
03 | Modify without documents |
04 | Dump |
05 | Suspended |
06 | Deceased |
Table 1.5 (Application status code and description)
Application status Code | Application status Description |
R | Resident Indian |
N | Non-Resident Indian |
P | Foreign National |
I | Person of Indian Origin |
Table 1.6 (Address Types and code)
Code | Communication Address Type |
01 | Residential/Business |
02 | Residential |
03 | Business |
04 | Registered office |
05 | Unspecified |
Table 1.7 (State and code to be used for update form for “voterID”)
Code | State |
Andaman and Nicobar Islands | Andaman and Nicobar Islands |
Andhra Pradesh | Andhra Pradesh |
ArunachalPradesh | Arunachal Pradesh |
Assam | Assam |
Bihar | Bihar |
Chandigarh | Chandigarh |
Chhattisgarh | Chhattisgarh |
DadraandNagar | Dadra and Nagar |
Diu-Daman | Daman and Diu |
Delhi | Delhi |
Goa | Goa |
Gujarat | Gujarat |
Haryana | Haryana |
HimachalPradesh | Himachal Pradesh |
JammuKashmir | Jammu & Kashmir |
Jharkhand | Jharkhand |
Karnataka | Karnataka |
Kerala | Kerala |
Lakshadweep | Lakshadweep |
Madhya Pradesh | Madhya Pradesh |
Maharashtra | Maharashtra |
Manipur | Manipur |
Meghalaya | Meghalaya |
Mizoram | Mizoram |
Nagaland | Nagaland |
Odisha | Odisha |
Puducherry | Puducherry |
Punjab | Punjab |
Rajasthan | Rajasthan |
Sikkim | Sikkim |
TamilNadu | Tamil Nadu |
Telangana | Telangana |
Tripura | Tripura |
Uttar Pradesh | Uttar Pradesh |
Uttarakhand | Uttarakhand |
West Bengal | West Bengal |
Table 1.8 (Income Range and Code)
Income Range | Code |
Below 1 Lac | 31 |
1-5 Lacs | 32 |
5-10 Lacs | 33 |
10-25 Lacs | 34 |
25 Lacs-1 crore | 35 |
1 crore | 36 |
Table 1.9 (PAN EXEMPT Categories for CVL KRA)
Category | Code |
Sikkim Resident | 01 |
Transactions carried out on behalf of State Government | 02 |
Transactions carried out on behalf of Central Government | 03 |
Court Appointed Officials | 04 |
UN Entity/Multilateral agency exempt from paying tax in India | 05 |
Official Liquidator | 06 |
Court Receiver | 07 |
SIP of Mutual Funds upto Rs. 50,000/- p.a. | 08 |
Other Documents | 11 |
Concepts and meanings of terms
Preproduction environment
The preproduction environment acts like a sandbox environment for the client and the subcontractors (channel distributors) in order to try and play with the Signzy APIs.
Production environment
Once the client & any sub-contractors have integrated into Signzy API system in the preproduction environment, they will be moved into production environment. At production there is no limit on the number of API calls that can be made and the requests are billed post-facto.
Channel
A channel can be though of as an extension of the user model. A channel can be created by another channel and the child channels are controlled by the parent in terms of grants and allocations.
Onboarding
An onboarding object is the main object which holds the data about an particular onboarding. A channel can create onboarding and push data to a parent system (like investor onboarding) according to grant provided by the parent channel. Exact details on how to create onboarding object and pushing data into the parent system can be found above.
Distributor
A distributor is also an instance of the channel object created by another channel. A distributor can have different rights and grants as detailed during creation or updated by the parent channel creating the channel onbect.
Support & Disclaimer
This documentation is currently a work in progress and certain details properties, objects and in rare cases endpoints might change as the product evolves. This documentation can be taken as reference of information about the APIs and integration must be started but care must be taken to accomodate minimal changes in the API and the data properties from payload.
Update on docs
These docs are currently a work in progress and updates can be expected in properties. After the API endpoints stabilize, the docs can still be updated with new features added into the product with extreme care being taken to not hamper existing integrations.
The docs will be updated further from time to time in order to provide more clarity to the integration & development teams on usage of the products.
Product downtimes
Clients will be notified of any planned downtimes due to patch deployments, software updates and other maintenance activity one week prior to execution.
Support, errors and corrections
If you find any problems with the documentation or the product, feel free to reach out to us at support@signzy.com for help.
For any support queries reach out to support@signzy.com. If you are subcontracted to use the product, please reach out to your contractor to connect with Signzy Support.
Device Compatibility
Desktop
Operating System | Browser | POI | POA | CPOA | Cheque | Photo | Video Verification | Contract |
Windows, Linux Ubuntu, macOS | Chrome | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Windows, Linux Ubuntu 16.04+, macOS | Firefox | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Windows | Opera | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Windows 10 | UC browser | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Windows 10 | IE | Yes | Yes | Yes | Yes | No | Yes | No |
Mac | Safari | Yes | Yes | Yes | Yes | Yes | No | Yes |
Windows 10 | Microsoft Edge | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Mobile
Operating System | Browser | POI | POA | CPOA | Cheque | Photo | Video Verification | Contract |
Android 6+, iOS | Chrome | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Android 7+ | Samsung internet | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
iOS | Safari | Yes | Yes | Yes | Yes | NO | Yes | Yes |
Android 7+ | UC browser | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Android 7+ | Opera | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Android 7+ | FireFox | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Advanced Features
Integration with Mobile Application
Use Chrome Custom Tab for opening Investor Onboarding in the mobile application. Integrate Mobile Auto-Login/Login URL with the Chrome Custom Tab, since it is compatible with both android and IOS.