CKYC Verification

3 endpoints · Core API

CKYC (Central Know Your Customer) Verification is a centralized KYC process managed by the Central Registry of Securitisation Asset Reconstruction and Security Interest (CERSAI). It allows financial institutions to verify a customer's identity using a unique CKYC number (CKYC ID) without requiring the customer to submit KYC documents repeatedly.

Benefits

  • 1. Centralized KYC repository: CKYC stores customer KYC records in a single, secure registry accessible by authorized institutions.
  • 2. Reduced duplication: Eliminates the need for customers to submit KYC documents multiple times across different financial entities.
  • 3. Faster onboarding: Speeds up customer verification and account opening processes.
  • 4. Regulatory compliance: Ensures adherence to KYC norms defined by regulatory authorities.
  • 5. Secure and reliable: Maintains standardized and verified customer data, reducing fraud risk.

What you can do

This API allows you to fetch and verify customer KYC details using a CKYC number or input data such as PAN or Aadhaar (as permitted). It helps in retrieving identity details, address information, and KYC status, enabling seamless onboarding and compliance for financial applications.

POST

/api/v1/ckyc/search/individual

#

Search for an individual's CKYC record by identifier type and value (e.g., PAN, Voter ID, CKYC number).

docs.signcare.io/core/api/identity-ckyc/ckyc-verification/#post-api-v1-ckyc-search-individual

This API is used to search the CKYC registry for individual records using a specific identifier. It returns a client_id, a list of matched records, and the total record count.

The API automatically normalizes the id_type, validates the identifier, and returns results in an array-based structure.

Request Body Parameters:

→ id_type (required): Identifier type used for CKYC search. Send one of the lowercase values listed below exactly as shown; any other value, including a different letter case, is rejected with 400.

→ id_number (required): The identifier value for the selected id_type. Its format is checked against the id_type (see the format listed against each value below); a mismatch is rejected with 400.

Supported id_type Values:

→ passport: Passport number, 1 letter followed by 7 digits (A1234567)

→ voter_id: Voter ID (EPIC), 3 letters followed by 7 digits

→ pan: PAN, 10 characters in the format AAAAA9999A (e.g., ABCDE1234F)

→ driving_license: Driving licence number, 2-letter state code followed by 13 digits (15 characters)

→ aadhaar_proof: Aadhaar number, exactly 12 digits

→ nrega_job_card: NREGA job card number, 5 to 30 characters (letters, digits, hyphen, slash)

→ npr_letter: NPR letter number, 5 to 20 letters or digits

→ ckyc_number: CKYC number, exactly 14 digits

→ ckyc_reference_id: CKYC reference ID, exactly 14 letters or digits (usually starts with IN)

→ mobile_number: Registered mobile number, exactly 10 digits

Important Notes:

→ id_type is case-sensitive. Values such as "PAN" or "Driving License" are not accepted; use "pan" or "driving_license".

→ consent and consent_text are also required (send "Y" and the standard consent text); request_id is optional.

Flow:

  1. Call this API with id_type and id_number.

  2. Review the returned records array.

  3. Select the correct record.

  4. Use its ckyc_identifier to initiate the download API.

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • consent
    stringrequired
    Required. The end user's consent to this verification. Send `Y`.
    minLength 1default Y
  • consent_text
    stringrequired
    Required. The consent statement shown to the end user. Send the default text from the sample.
    minLength 1default I hear by declare my consent agreeme…
  • request_id
    stringoptional
    Optional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.
    nullable
  • id_type
    stringrequired
    Required. Identifier type. Lowercase only; one of "pan", "passport", "voter_id", "driving_license", "aadhaar_proof", "nrega_job_card", "npr_letter", "ckyc_number", "ckyc_reference_id", "mobile_number".
    minLength 1pattern ^(pan|passport|voter_id|driving_license|…default pan
  • id_number
    stringrequired
    Required. Identifier value to search for. Its format must match id_type (for example 10-character PAN AAAAA9999A, 12-digit Aadhaar, 14-digit CKYC number, 10-digit mobile number).
    minLength 1default ABCDE1234F
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "id_type": "pan", "id_number": "ABCDE1234F" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Data payload returned from a successful CKYC individual search.
    3 fields
    • client_id
      stringoptional
      No description.
      nullable
    • records
      array<object>optional
      No description.
      nullable
      Each item: 15 fields
      • ckyc_identifier
        stringoptional
        No description.
        nullable
      • ckyc_no
        stringoptional
        No description.
        nullable
      • ckyc_reference_id
        stringoptional
        No description.
        nullable
      • name
        stringoptional
        No description.
        nullable
      • fathers_name
        stringoptional
        No description.
        nullable
      • constitution_type
        stringoptional
        No description.
        nullable
      • age
        stringoptional
        No description.
        nullable
      • mob_code
        integer (int32)optional
        No description.
        nullable
      • mob_num
        stringoptional
        No description.
        nullable
      • image_type
        stringoptional
        No description.
        nullable
      • photo
        stringoptional
        No description.
        nullable
      • kyc_date
        stringoptional
        No description.
        nullable
      • updated_date
        stringoptional
        No description.
        nullable
      • id_list
        array<object>optional
        No description.
        nullable
        Each item: 5 fields
        • type
          stringoptional
          No description.
          nullable
        • type_code
          stringoptional
          No description.
          nullable
        • type_value
          stringoptional
          No description.
          nullable
        • status
          stringoptional
          No description.
          nullable
        • status_value
          stringoptional
          No description.
          nullable
      • remarks
        stringoptional
        No description.
        nullable
    • record_count
      integer (int32)optional
      No description.
      nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "client_id": "string", "records": [ { "ckyc_identifier": "string", "ckyc_no": "string", "ckyc_reference_id": "string", "name": "string", "fathers_name": "string", "constitution_type": "string", "age": "string", "mob_code": 0, "mob_num": "string", "image_type": "string", "photo": "string", "kyc_date": "string", "updated_date": "string", "id_list": [ { "type": "string", "type_code": "string", "type_value": "string", "status": "string", "status_value": "string" } ], "remarks": "string" } ], "record_count": 0 }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
429Too Many Requests
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    anyoptional
    No description.
    nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": null, "messages": [ "string" ], "request_id": "string", "isBillable": false }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/ckyc/search/individual' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "id_type": "pan", "id_number": "ABCDE1234F" }'
POST

/api/v1/ckyc/download/individual/initiate

#

Initiate individual CKYC download.

docs.signcare.io/core/api/identity-ckyc/ckyc-verification/#post-api-v1-ckyc-download-individual-initiate

Initiate an individual CKYC download. This endpoint validates the selected ckyc_identifier and registered mobile_number, then asks CKYC to send an OTP to the registered mobile number.

Use this endpoint after POST api/v1/ckyc/search/individual. The search response gives you records[].ckyc_identifier; pass that value here.

The important continuation value is data.request_id. Store it and use it with POST api/v1/ckyc/download/individual to submit the OTP or request an OTP resend. The client_id is a transaction identifier.

Request Body Parameters:

→ ckyc_identifier (required): CKYC identifier from search. Exactly 14 letters or digits: a CKYC reference ID such as INRMFE49270123 or a 14-digit CKYC number, depending on what search returned.

→ mobile_number (required): 10-digit mobile number registered with the individual CKYC record.

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • consent
    stringrequired
    Required. The end user's consent to this verification. Send `Y`.
    minLength 1default Y
  • consent_text
    stringrequired
    Required. The consent statement shown to the end user. Send the default text from the sample.
    minLength 1default I hear by declare my consent agreeme…
  • request_id
    stringoptional
    Optional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.
    nullable
  • ckyc_identifier
    stringrequired
    Required. CKYC identifier from search: exactly 14 letters or digits (a CKYC reference ID or a 14-digit CKYC number).
    minLength 1pattern ^[A-Za-z0-9]{14}$default 12345678901234
  • mobile_number
    stringrequired
    Required. 10-digit mobile number registered with the CKYC record. The OTP is sent to this number.
    minLength 1pattern ^\d{10}$default 9876543210
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "ckyc_identifier": "12345678901234", "mobile_number": "9876543210" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Data returned after a successful CKYC download initiate.
    4 fields
    • client_id
      stringoptional
      Transaction ID for this initiate call.
      nullable
    • request_id
      stringoptional
      CKYC request ID. Pass this in the OTP submit/resend endpoint.
      nullable
    • status
      stringoptional
      Workflow status: "otp_sent", "otp_resent", or "downloaded".
      nullable
    • ckyc_download_data
      objectoptional
      A single CKYC record returned from search or download.
      15 fields
      • ckyc_identifier
        stringoptional
        No description.
        nullable
      • ckyc_no
        stringoptional
        No description.
        nullable
      • ckyc_reference_id
        stringoptional
        No description.
        nullable
      • name
        stringoptional
        No description.
        nullable
      • fathers_name
        stringoptional
        No description.
        nullable
      • constitution_type
        stringoptional
        No description.
        nullable
      • age
        stringoptional
        No description.
        nullable
      • mob_code
        integer (int32)optional
        No description.
        nullable
      • mob_num
        stringoptional
        No description.
        nullable
      • image_type
        stringoptional
        No description.
        nullable
      • photo
        stringoptional
        No description.
        nullable
      • kyc_date
        stringoptional
        No description.
        nullable
      • updated_date
        stringoptional
        No description.
        nullable
      • id_list
        array<object>optional
        No description.
        nullable
        Each item: 5 fields
        • type
          stringoptional
          No description.
          nullable
        • type_code
          stringoptional
          No description.
          nullable
        • type_value
          stringoptional
          No description.
          nullable
        • status
          stringoptional
          No description.
          nullable
        • status_value
          stringoptional
          No description.
          nullable
      • remarks
        stringoptional
        No description.
        nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "client_id": "string", "request_id": "string", "status": "string", "ckyc_download_data": { "ckyc_identifier": "string", "ckyc_no": "string", "ckyc_reference_id": "string", "name": "string", "fathers_name": "string", "constitution_type": "string", "age": "string", "mob_code": 0, "mob_num": "string", "image_type": "string", "photo": "string", "kyc_date": "string", "updated_date": "string", "id_list": [ { "type": "string", "type_code": "string", "type_value": "string", "status": "string", "status_value": "string" } ], "remarks": "string" } }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
429Too Many Requests
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    anyoptional
    No description.
    nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": null, "messages": [ "string" ], "request_id": "string", "isBillable": false }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/ckyc/download/individual/initiate' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "ckyc_identifier": "12345678901234", "mobile_number": "9876543210" }'
POST

/api/v1/ckyc/download/individual

#

Complete individual CKYC download.

docs.signcare.io/core/api/identity-ckyc/ckyc-verification/#post-api-v1-ckyc-download-individual

Complete an individual CKYC download after OTP initiation. Use this endpoint in one of two modes:

→ Submit the OTP with request_id and otp.

→ Request another OTP with request_id and resend: true.

The request_id comes from POST api/v1/ckyc/download/individual/initiate. Do not use client_id for OTP submission.

When OTP validation succeeds, the response status is downloaded and data.ckyc_download_data contains the CKYC record.

Request Body Parameters:

→ request_id (required): CKYC request ID returned by the initiate endpoint (data.request_id). Digits only.

→ otp (conditional): Required when you are submitting an OTP (omit when resend is true). Exactly 6 digits, received on the registered mobile number.

→ resend (conditional): Required (as true) when you are requesting another OTP instead of submitting one. Boolean.

Provide either otp or resend: true, not both. A request with neither value is rejected.

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • otp
    stringconditional
    Conditional: required when submitting an OTP (omit when resend is true). Exactly 6 digits, received on the registered mobile number.
    nullablepattern ^\d{6}$default 968284
  • resend
    booleanconditional
    Conditional: required (as true) when requesting a fresh OTP instead of submitting one. Do not send otp together with resend.
    nullable
  • request_id
    stringrequired
    Required. CKYC request ID returned by the initiate endpoint (data.request_id). Digits only.
    minLength 1pattern ^\d+$
Sample request body
{ "otp": "968284", "request_id": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Top-level data returned from the CKYC individual download endpoint.
    4 fields
    • client_id
      stringoptional
      No description.
      nullable
    • request_id
      stringoptional
      No description.
      nullable
    • status
      stringoptional
      otp_resent or downloaded.
      nullable
    • ckyc_download_data
      objectoptional
      No description.
      2 fields
      • record_count_details
        objectoptional
        No description.
        2 fields
        • download_count
          stringoptional
          No description.
          nullable
        • update_count
          stringoptional
          No description.
          nullable
      • personal_identifiable_data
        objectoptional
        No description.
        4 fields
        • personal_details
          objectoptional
          No description.
          54 fields
          • constitution_type
            stringoptional
            No description.
            nullable
          • account_type
            stringoptional
            No description.
            nullable
          • prefix
            stringoptional
            No description.
            nullable
          • first_name
            stringoptional
            No description.
            nullable
          • mname
            stringoptional
            No description.
            nullable
          • last_name
            stringoptional
            No description.
            nullable
          • full_name
            stringoptional
            No description.
            nullable
          • father_or_spouse
            stringoptional
            No description.
            nullable
          • father_fullname
            stringoptional
            No description.
            nullable
          • mother_fullname
            stringoptional
            No description.
            nullable
          • gender
            stringoptional
            No description.
            nullable
          • dob
            stringoptional
            No description.
            nullable
          • pan
            stringoptional
            No description.
            nullable
          • perm_line1
            stringoptional
            No description.
            nullable
          • perm_line2
            stringoptional
            No description.
            nullable
          • perm_line3
            stringoptional
            No description.
            nullable
          • perm_city
            stringoptional
            No description.
            nullable
          • perm_dist
            stringoptional
            No description.
            nullable
          • perm_state
            stringoptional
            No description.
            nullable
          • perm_pin
            stringoptional
            No description.
            nullable
          • perm_country
            stringoptional
            No description.
            nullable
          • corres_line1
            stringoptional
            No description.
            nullable
          • corres_line2
            stringoptional
            No description.
            nullable
          • corres_line3
            stringoptional
            No description.
            nullable
          • corres_city
            stringoptional
            No description.
            nullable
          • corres_dist
            stringoptional
            No description.
            nullable
          • corres_state
            stringoptional
            No description.
            nullable
          • corres_pin
            stringoptional
            No description.
            nullable
          • corres_country
            stringoptional
            No description.
            nullable
          • perm_corres_sameflag
            stringoptional
            No description.
            nullable
          • perm_poa
            stringoptional
            No description.
            nullable
          • corres_poa
            stringoptional
            No description.
            nullable
          • mob_code
            stringoptional
            No description.
            nullable
          • mob_num
            stringoptional
            No description.
            nullable
          • email
            stringoptional
            No description.
            nullable
          • dec_date
            stringoptional
            No description.
            nullable
          • dec_place
            stringoptional
            No description.
            nullable
          • kyc_date
            stringoptional
            No description.
            nullable
          • kyc_name
            stringoptional
            No description.
            nullable
          • kyc_designation
            stringoptional
            No description.
            nullable
          • kyc_branch
            stringoptional
            No description.
            nullable
          • kyc_empcode
            stringoptional
            No description.
            nullable
          • num_identity
            integer (int32)optional
            No description.
          • num_related
            integer (int32)optional
            No description.
          • num_images
            integer (int32)optional
            No description.
          • ckyc_no
            stringoptional
            No description.
            nullable
          • ckyc_reference_id
            stringoptional
            No description.
            nullable
          • doc_sub
            stringoptional
            No description.
            nullable
          • doc_sub_value
            stringoptional
            No description.
            nullable
          • resi_status
            stringoptional
            No description.
            nullable
          • resi_status_value
            stringoptional
            No description.
            nullable
          • dis_flag
            stringoptional
            No description.
            nullable
          • dis_type
            stringoptional
            No description.
            nullable
          • dis_type_value
            stringoptional
            No description.
            nullable
        • identity_details
          objectoptional
          No description.
          1 field
          • identity
            array<object>optional
            No description.
            nullable
            Each item: 5 fields
            • identity_number
              stringoptional
              No description.
              nullable
            • identity_type
              stringoptional
              App-facing enum value, e.g. PAN, AADHAAR, PASSPORT.
              nullable
            • identity_type_code
              stringoptional
              Raw CERSAI type code, e.g. C for PAN, E for Aadhaar proof.
              nullable
            • identity_type_value
              stringoptional
              Human-readable document label. Use for display.
              nullable
            • id_verification_status
              stringoptional
              YES when CKYC status code is 01, otherwise NO.
              nullable
        • related_person_details
          objectoptional
          No description.
          1 field
          • related_person
            array<object>optional
            No description.
            nullable
            Each item: 12 fields
            • rel_type
              stringoptional
              No description.
              nullable
            • rel_type_value
              stringoptional
              No description.
              nullable
            • gender
              stringoptional
              No description.
              nullable
            • gender_value
              stringoptional
              No description.
              nullable
            • perm_poi_type
              stringoptional
              No description.
              nullable
            • perm_poi_type_value
              stringoptional
              No description.
              nullable
            • corres_poi_type
              stringoptional
              No description.
              nullable
            • corres_poi_type_value
              stringoptional
              No description.
              nullable
            • resi_status
              stringoptional
              No description.
              nullable
            • resi_status_value
              stringoptional
              No description.
              nullable
            • dis_type
              stringoptional
              No description.
              nullable
            • dis_type_value
              stringoptional
              No description.
              nullable
        • image_details
          objectoptional
          No description.
          1 field
          • image
            array<object>optional
            No description.
            nullable
            Each item: 5 fields
            • image_code
              stringoptional
              Display label, e.g. Photograph, PAN, NREGA Job Card.
              nullable
            • image_type
              stringoptional
              File type, e.g. jpg or pdf.
              nullable
            • image_data
              stringoptional
              Base64-encoded image or document data.
              nullable
            • global_flag
              stringoptional
              No description.
              nullable
            • global_flag_value
              stringoptional
              No description.
              nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "client_id": "string", "request_id": "string", "status": "string", "ckyc_download_data": { "record_count_details": { "download_count": "string", "update_count": "string" }, "personal_identifiable_data": { "personal_details": { "constitution_type": "string", "account_type": "string", "prefix": "string", "first_name": "string", "mname": "string", "last_name": "string", "full_name": "string", "father_or_spouse": "string", "father_fullname": "string", "mother_fullname": "string", "gender": "string", "dob": "string", "pan": "string", "perm_line1": "string", "perm_line2": "string", "perm_line3": "string", "perm_city": "string", "perm_dist": "string", "perm_state": "string", "perm_pin": "string", "perm_country": "string", "corres_line1": "string", "corres_line2": "string", "corres_line3": "string", "corres_city": "string", "corres_dist": "string", "corres_state": "string", "corres_pin": "string", "corres_country": "string", "perm_corres_sameflag": "string", "perm_poa": "string", "corres_poa": "string", "mob_code": "string", "mob_num": "string", "email": "string", "dec_date": "string", "dec_place": "string", "kyc_date": "string", "kyc_name": "string", "kyc_designation": "string", "kyc_branch": "string", "kyc_empcode": "string", "num_identity": 0, "num_related": 0, "num_images": 0, "ckyc_no": "string", "ckyc_reference_id": "string", "doc_sub": "string", "doc_sub_value": "string", "resi_status": "string", "resi_status_value": "string", "dis_flag": "string", "dis_type": "string", "dis_type_value": "string" }, "identity_details": { "identity": [ { "identity_number": null, "identity_type": null, "identity_type_code": null, "identity_type_value": null, "id_verification_status": null } ] }, "related_person_details": { "related_person": [ { "rel_type": null, "rel_type_value": null, "gender": null, "gender_value": null, "perm_poi_type": null, "perm_poi_type_value": null, "corres_poi_type": null, "corres_poi_type_value": null, "resi_status": null, "resi_status_value": null, "dis_type": null, "dis_type_value": null } ] }, "image_details": { "image": [ { "image_code": null, "image_type": null, "image_data": null, "global_flag": null, "global_flag_value": null } ] } } } }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
429Too Many Requests
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    anyoptional
    No description.
    nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": null, "messages": [ "string" ], "request_id": "string", "isBillable": false }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/ckyc/download/individual' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "otp": "968284", "request_id": "string" }'