Skip to main content

Customer Session Creation API

This API initiates a new VKYC session for a customer. Once it is triggered successfully, the response carries a unique VKYC URL that the customer is redirected to in order to complete the verification.

POSThttps://sandbox/api/v1/vkyc/create/customer/

Content-Type: application/json

Headers​

HeaderTypeRequiredDescription
AuthorizationstringYesBearer <access_token> from the Auth Token API.
Content-TypestringYesapplication/json.

Request payload​

The body has four objects: customer_details, aadhaar_details, time_details and document_details.

{
"customer_details": {
"customer_identifier": "<value>",
"cif_type": "<Individual or Non-Individual>",
"consent_to_open_account": true,
"business_name": "<value (if cif_type is Non-Individual)>",
"name": "<value>",
"email": "<value>",
"mobile_number": "<value>",
"aadhar_number": "<value>",
"pan_card_number": "<value>",
"aadhaar_ref_number": "<value>",
"latitude": "<value>",
"longitude": "<value>",
"system_ip": "<value>",
"gender": "<value>",
"dob": "<dd-mm-yyyy>",
"permanent_addressline1": "<value>",
"permanent_addressline2": "<value>",
"permanent_addressline3": "<value>",
"permanent_city": "<value>",
"permanent_state": "<value>",
"permanent_district": "<value>",
"permanent_country": "<value>",
"permanent_pincode": "<value>",
"father_name": "<value>",
"mother_name": "<value>",
"spouse_name": "<value>",
"maritial_status": "<value>",
"place_of_birth": "<value>",
"occupation": "<value>",
"annual_income": "<value>",
"nationality": "<value>",
"communication_addressline1": "<value>",
"communication_addressline2": "<value>",
"communication_addressline3": "<value>",
"communication_city": "<value>",
"communication_district": "<value>",
"communication_state": "<value>",
"communication_country": "<value>",
"communication_pincode": "<value>",
"branch_sol_id": "<value>",
"branch_name": "<value>",
"company_name": "<value>",
"title": "<value>",
"religion": "<value>",
"is_ex_service_man": "<boolean>",
"is_manual_scavenger": "<boolean>",
"is_politically_exposed_person": "<boolean>",
"is_person_with_disability": "<boolean>",
"is_communication_same_permanent": "<boolean>",
"communication_address_proof": "<value>",
"opt_in_home_loan": "<boolean>",
"opt_in_vehicle_loan": "<boolean>",
"opt_in_education_loan": "<boolean>",
"opt_in_business_loan": "<boolean>",
"opt_in_personal_loan": "<boolean>",
"agriculture_land_area": "<value>",
"is_general_ews": "<boolean>",
"employer_name": "<value>",
"employer_type": "<value>",
"employee_code": "<value>"
},
"aadhaar_details": {
"aadhar_name": "<value>",
"aadhar_image": "<value>",
"aadhar_yob": "<value>",
"aadhar_sex": "<value>",
"aadhar_address": "<value>",
"aadhar_num": "<value>"
},
"time_details": {
"adhar_verified_time": "<value>",
"pan_verified_time": "<value>",
"otpsend_time": "<value>",
"otp_resend_time": "<value>",
"validated_time": "<value>"
},
"document_details": {
"signature_image": "<value>",
"pan_image": "<value>",
"poa_communication_image": "<value>",
"gst_or_udhyam_image": "<value>"
}
}

:::info Changes in this version

  • The document object key was renamed from doc_details to document_details.
  • aadhar_yob now carries a full date in YYYY-MM-DD format.
  • pan_card_number must be unique for each customer. :::

Parameter specification​

customer_details​

ParameterTypeMandatoryLengthDescription / Examples
customer_identifierstringYes50Unique identifier for each customer.
cif_typestringYes20Type of customer entity: Individual, Non-Individual.
consent_to_open_accountbooleanYes—Whether the customer consented to open the account.
business_namestringConditional100Name of the business. Mandatory when cif_type is Non-Individual.
namestringYes80Full name of the customer.
emailstringYes65Customer's email address, e.g. user@example.com.
mobile_numberstringYes15Customer's registered mobile number.
aadhar_numberstringYes1212-digit Aadhaar number, masked — e.g. XXXXXXXX1234.
pan_card_numberstringYes1010-character alphanumeric PAN, e.g. ABCDE1234F. Unique per customer.
aadhaar_ref_numberstringYes32Reference number generated during Aadhaar offline KYC.
latitudestringYes22Live latitude captured during onboarding.
longitudestringYes22Live longitude captured during onboarding.
system_ipstringYes20System IP address.
genderstringYes25Customer's gender — M / F / T.
dobstringYes10Date of birth in dd-mm-yyyy.
permanent_addressline1stringYes100First line of the permanent address.
permanent_addressline2stringNo100Second line of the permanent address. May be null.
permanent_addressline3stringNo100Third line of the permanent address. May be null.
permanent_citystringYes50City of the permanent address.
permanent_statestringYes50State of the permanent address.
permanent_districtstringYes50District of the permanent address.
permanent_countrystringYes50Country of the permanent address.
permanent_pincodestringYes10Postal code of the permanent address.
father_namestringYes80Customer's father's full name.
mother_namestringYes80Customer's mother's full name.
spouse_namestringConditional80Customer's spouse's full name.
maritial_statusstringYes20Marital status, e.g. MARRIED, UNMARRIED, SINGLE.
place_of_birthstringYes50City or town of birth.
occupationstringYes50Line of work or job title.
annual_incomestringYes20Income bracket or exact amount.
nationalitystringYes50Nationality of the customer.
communication_addressline1stringConditional100First line of the communication address. Required when is_communication_same_permanent is false.
communication_addressline2stringConditional100Second line of the communication address.
communication_addressline3stringConditional100Third line of the communication address.
communication_citystringConditional50City of the communication address.
communication_districtstringConditional50District of the communication address.
communication_statestringConditional50State of the communication address.
communication_countrystringConditional50Country of the communication address.
communication_pincodestringConditional10Postal code of the communication address.
branch_sol_idstringYes20SOL ID of the selected branch.
company_namestringNo100Employer's company name. May be null.
titlestringYes10Salutation, e.g. Mr., Mrs., Dr..
religionstringYes50Religion of the customer, e.g. HINDU ST.
is_ex_service_manbooleanYes—Whether the customer is an ex-serviceman.
is_manual_scavengerbooleanYes—Manual scavenger status.
is_politically_exposed_personbooleanYes—Whether the customer is a politically exposed person (PEP).
is_person_with_disabilitybooleanYes—Physical disability flag.
is_communication_same_permanentbooleanYes—true when the communication and permanent addresses are the same.
communication_address_proofstringNo50Document submitted as communication address proof, e.g. Voter ID.
opt_in_home_loanbooleanNo—Customer opted for the home loan cross-sell.
opt_in_vehicle_loanbooleanNo—Customer opted for the vehicle loan cross-sell.
opt_in_education_loanbooleanNo—Customer opted for the education loan cross-sell.
opt_in_business_loanbooleanNo—Customer opted for the business loan cross-sell.
opt_in_personal_loanbooleanNo—Customer opted for the personal loan cross-sell.
agriculture_land_areastringNo50Size of agricultural land owned, e.g. 2. May be null.
is_general_ewsbooleanNo—Economically Weaker Section status.
employer_namestringNo100Name of the candidate's employer. May be null.
employer_typestringNo50Type of employer, e.g. Govt, Private, MNC. May be null.
employee_codestringNo50Employee ID or code. May be null.

aadhaar_details​

ParameterTypeMandatoryLengthDescription / Examples
aadhar_namestringYes100Full name of the customer as printed on the Aadhaar card.
aadhar_imagestringYes—Base64-encoded string or URL of the Aadhaar photo.
aadhar_yobstringYes10Date of birth in YYYY-MM-DD.
aadhar_sexstringYes10Gender as per Aadhaar, e.g. Male, Female.
aadhar_addressstringYes255Full address string fetched from Aadhaar XML / verification.
aadhar_numstringYes1212-digit Aadhaar number, or the masked form XXXXXXXX1234.

time_details​

ParameterTypeMandatoryLengthDescription / Examples
adhar_verified_timestringYes30Timestamp of Aadhaar verification, e.g. 2024-02-27T10:15:30Z.
pan_verified_timestringNo30Timestamp of PAN verification. May be null.
otpsend_timestringNo30Timestamp the mobile OTP was first sent. May be null.
otp_resend_timestringNo30Timestamp of the OTP resend request, if any. May be null.
validated_timestringNo30Timestamp the OTP was successfully validated. May be null.

document_details​

ParameterTypeMandatoryLengthDescription / Examples
signature_imagestringNo—Base64 string or URL of the customer's wet signature. May be null.
pan_imagestringNo—Base64 string or URL of the physical PAN card photo. May be null.
poa_communication_imagestringConditional—Base64 string or URL of the submitted Proof of Address document.
gst_or_udhyam_imagestringNo—Base64 string or URL of the business proof (GST / Udyam certificate). May be null.

Sample payload​

{
"customer_details": {
"customer_identifier": "jhhjshdf",
"cif_type": "Individual",
"consent_to_open_account": true,
"business_name": "",
"name": "Mohan Kumar",
"email": "mohan@example.com",
"mobile_number": "7500580045",
"aadhar_number": "********1234",
"pan_card_number": "ZCCDE0060K",
"aadhaar_ref_number": "A123456789",
"latitude": "9.9312",
"longitude": "76.2673",
"gender": "M",
"dob": "15-08-1995",
"permanent_addressline1": "House No 12",
"permanent_addressline2": "MG Road",
"permanent_addressline3": "Near Metro Station",
"permanent_city": "Kollam",
"permanent_state": "Kerala",
"permanent_district": "Ernakulam",
"permanent_country": "India",
"permanent_pincode": "682001",
"father_name": "Ramesh Sharma",
"mother_name": "Sita Sharma",
"maritial_status": "MARRIED",
"spouse_name": "Reefa",
"place_of_birth": "Kochi",
"occupation": "Parking / garages",
"system_ip": "103.168.0.203",
"annual_income": "800000",
"nationality": "Indian",
"communication_addressline1": "House No 12",
"communication_addressline2": "MG Road",
"communication_addressline3": "",
"communication_city": "Kochi",
"communication_district": "Ernakulam",
"communication_state": "Kerala",
"communication_country": "India",
"communication_pincode": "682001",
"account_scheme": "10691101",
"branch_sol_id": "MAHB0000018",
"title": "Mrs.",
"religion": "HINDU ST",
"is_ex_service_man": false,
"is_manual_scavenger": false,
"is_politically_exposed_person": false,
"is_person_with_disability": true,
"is_communication_same_permanent": false,
"communication_address_proof": "ADHAR WITH SAME ADDRESS",
"opt_in_home_loan": false,
"opt_in_vehicle_loan": true,
"opt_in_education_loan": false,
"opt_in_business_loan": false,
"opt_in_personal_loan": true,
"agriculture_land_area": "0",
"is_general_ews": true,
"employer_name": "Tech Solutions Pvt Ltd",
"employer_type": "Private",
"employee_code": "EMP12345"
},
"aadhaar_details": {
"aadhar_name": "Mohan Kumar",
"aadhar_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"aadhar_yob": "1995-12-11",
"aadhar_sex": "Male",
"aadhar_address": "House No 12, MG Road, Kochi, Kerala, 682001",
"aadhar_num": "********1234"
},
"time_details": {
"adhar_verified_time": "2026-04-28T12:00:00Z",
"pan_verified_time": "2026-03-17T10:02:00Z",
"otpsend_time": "2026-03-17T10:05:00Z",
"otp_resend_time": "2026-03-17T10:06:00Z",
"validated_time": "2026-03-17T10:10:00Z"
},
"document_details": {
"signature_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"pan_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"poa_communication_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"gst_or_udhyam_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}
}

Image fields are shown truncated — send the complete base64 data URI or a URL.

Example​

POST/api/v1/vkyc/create/customer/
curl --location 'https://sandbox/api/v1/vkyc/create/customer/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <access_token>' \
--data '{
  "customer_details": {
    "customer_identifier": "jhhjshdf",
    "cif_type": "Individual",
    "name": "Mohan Kumar",
    "email": "mohan@example.com",
    "mobile_number": "7500580045",
    "pan_card_number": "ZCCDE0060K",
    "dob": "15-08-1995"
  },
  "aadhaar_details": { },
  "time_details": { },
  "document_details": { }
}'
200
{
"status": true,
"status_code": 200,
"message": "Success",
"data": {
  "unique_id": "<System-generated unique ID>",
  "customer_identifier": "<Customer id>",
  "customer_redirect_url": "https://redirecturl"
}
}

Success response​

200 application/json

FieldTypeDescription
statusbooleantrue for a successful request.
status_codeintegerHTTP status code echoed in the body.
messagestringHuman-readable message describing the outcome.
data.unique_idstringUnique internal customer ID generated by the VKYC application. Use it for the Status Check API.
data.customer_identifierstringThe customer ID you sent in the request.
data.customer_redirect_urlstringURL the customer must be redirected to in order to begin the VKYC session.

Failure response​

400 application/json — validation error.

{
"status": false,
"status_code": 400,
"message": "Bad Request",
"data": {
"status": false,
"status_code": 400,
"data": {
"customer_details": {
"dob": ["Enter a valid date in DD-MM-YYYY format."]
}
},
"error_code": "invalid"
}
}
FieldTypeDescription
statusbooleanAlways false when validation fails.
status_codeintegerHTTP status code echoed in the body.
messagestringHigh-level description of what failed.
data.dataobjectKey-value pairs showing which fields failed and why, in DRF error style.
data.error_codestringMachine-readable error code, e.g. invalid.

HTTP response codes​

HTTP codeStatusWhen returned
200 OKSuccessThe request succeeded and the customer session was created.
400 Bad RequestClient errorThe request failed validation on the input data.
401 UnauthorizedAuth errorThe API key, merchant code or token is missing or invalid.
403 ForbiddenForbiddenThe client is authenticated but not allowed to access the resource.
406 Not AcceptableFalseThe application is currently under process.
409 ConflictConflictA duplicate session or customer already exists for the identifiers provided.
422 Unprocessable EntityValidation failedInput is syntactically correct but semantically invalid, e.g. a failed format check.
500 Internal Server ErrorServer errorAn unexpected error occurred on the server side.
503 Service UnavailableService downThe VKYC service is temporarily unavailable or under maintenance.