KYC OCR (Plus)

1 endpoint · Core API

This API allows validation of Permanent Account Numbers (PAN) issued by the Income Tax Department of India. It is designed to confirm the identity of individuals or entities by checking their PAN details against authoritative databases. This API plays a vital role in KYC processes, financial onboarding, and fraud prevention.

Benefits

  • Identity Validation
    Confirms the authenticity of PANs submitted by users or businesses.
  • Regulatory Compliance
    Ensures compliance with income tax and financial regulations.
  • Fraud Detection
    Helps detect and prevent use of fake or invalid PANs.
  • Seamless Integration
    Easily integrates into onboarding and KYC workflows.

What you can do

You can verify an individual's or entity's PAN number in real-time, retrieve associated details (like name or status), and ensure the PAN is valid and active.

POST

/api/v1/KycOCR

#

KYC OCR details

docs.signcare.io/core/api/kyc-ocr/kyc-ocr-plus/#post-api-v1-kycocr

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
  • fileBase64
    stringrequired
    Required. Base64-encoded content of the document to read: an image of the card, or a PDF (for example a downloaded eAadhaar). Send the raw Base64 string without a data: prefix.
    minLength 1pattern ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2…default SGVsbG8gV29ybGQ=
  • pdfPassword
    stringrequired
    Required. The field must be present and not empty, so send "N". Password-protected PDFs are not opened: this value is accepted but not used.
    minLength 1default N
  • requiredConfidence
    booleanoptional
    Optional. Accepted but not used. Each extracted field is always returned with a confidence value.
    default true
  • requiredOcr
    booleanrequired
    Required. Boolean. Send true. Accepted but not used: text is always extracted.
    default true
  • returnQualityChecks
    array<string>required
    Required. List with at least one value, for example ["ALL"]. Accepted but not used: the requested checks are not applied.
    default ["ALL"]
  • maskAadhaarImage
    stringoptional
    Optional. Pass "EIGHT_DIGITS" to receive a base64-encoded masked Aadhaar image in additionalDetails.maskAadhaarImage, with the first 8 digits painted over. Omit or leave empty for no image masking.
    nullabledefault EIGHT_DIGITS
  • maskAadhaarText
    stringoptional
    Optional. Pass "EIGHT_DIGITS" to mask the first 8 digits of the extracted Aadhaar number in ocrData.aadhaar.value (e.g. "XXXX XXXX 9012") and set additionalDetails.outputMaskStatus = true. Omit or leave empty for no text masking.
    nullabledefault EIGHT_DIGITS
  • responseFormat
    stringoptional
    Optional. Accepted but not used.
    nullabledefault DOCUMENT
  • responseType
    stringrequired
    Required. The field must be present and not empty, so send "URL". Accepted but not used.
    minLength 1default URL
  • docTypes
    array<string>required
    Required. List with at least one document type: DL, AADHAAR or PAN (not case-sensitive). Only the first value is processed, so send one document type per request. Allowed values: DL, AADHAAR, PAN.
    default ["DL"]
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "fileBase64": "SGVsbG8gV29ybGQ=", "pdfPassword": "N", "requiredConfidence": true, "requiredOcr": true, "returnQualityChecks": [ "ALL" ], "maskAadhaarImage": "EIGHT_DIGITS", "maskAadhaarText": "EIGHT_DIGITS", "responseFormat": "DOCUMENT", "responseType": "URL", "docTypes": [ "DL" ] }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    array<object>optional
    No description.
    nullable
    Each item: 6 fields
    • documentType
      stringoptional
      Gets or sets the type of document detected (e.g., "DL", "AADHAAR").
      nullable
    • subType
      stringoptional
      Gets or sets the sub-type of the document, if applicable.
      nullable
    • pageNo
      integer (int32)optional
      Gets or sets the page number of the document that was processed.
      nullable
    • ocrData
      objectoptional
      Contains all OCR-extracted data fields from a KYC document.
      14 fields
      • aadhaar
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • yob
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • father
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • pan
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • vid
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • phone
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • dlNo
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • name
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • dob
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • doi
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • doe
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • relationName
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • address
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
      • pin
        objectoptional
        Represents an OCR-extracted field with its value and confidence score.
        2 fields
        • value
          stringoptional
          Gets or sets the extracted text value.
          nullable
        • confidence
          number (double)optional
          Gets or sets the confidence score of the OCR extraction.
          nullable
    • additionalDetails
      objectoptional
      Response model containing additional details from the OCR processing.
      9 fields
      • inputMaskStatus
        objectoptional
        No description.
        3 fields
        • isMasked
          booleanoptional
          No description.
          nullable
        • maskedBy
          stringoptional
          No description.
          nullable
        • confidence
          stringoptional
          No description.
          nullable
      • outputMaskStatus
        booleanoptional
        Gets or sets whether the output masking was successfully applied.
        nullable
      • verhoeffCheck
        booleanoptional
        Gets or sets the Verhoeff algorithm check result for Aadhaar number validation.
        nullable
      • qr
        stringoptional
        Gets or sets the QR code data extracted from the document.
        nullable
      • barcode
        stringoptional
        Gets or sets the barcode data extracted from the document.
        nullable
      • addressSplit
        objectoptional
        Represents a split/parsed address with individual components.
        12 fields
        • building
          stringoptional
          Gets or sets the building name.
          nullable
        • city
          stringoptional
          Gets or sets the city name.
          nullable
        • district
          stringoptional
          Gets or sets the district name.
          nullable
        • pin
          stringoptional
          Gets or sets the PIN code.
          nullable
        • floor
          stringoptional
          Gets or sets the floor number or description.
          nullable
        • house
          stringoptional
          Gets or sets the house number.
          nullable
        • locality
          stringoptional
          Gets or sets the locality name.
          nullable
        • state
          stringoptional
          Gets or sets the state name.
          nullable
        • street
          stringoptional
          Gets or sets the street name.
          nullable
        • complex
          stringoptional
          Gets or sets the complex or apartment name.
          nullable
        • landmark
          stringoptional
          Gets or sets the landmark description.
          nullable
        • untagged
          stringoptional
          Gets or sets any untagged or unclassified address text.
          nullable
      • careOfDetails
        objectoptional
        No description.
        2 fields
        • relation
          stringoptional
          No description.
          nullable
        • name
          stringoptional
          No description.
          nullable
      • documentLink
        stringoptional
        Gets or sets the link to the processed document.
        nullable
      • maskAadhaarImage
        stringoptional
        Masked Aadhaar image as a Base64-encoded string, when available. Null for non-Aadhaar documents.
        nullable
    • qualityChecks
      array<object>optional
      Gets or sets the list of quality check results performed on the document.
      nullable
      Each item: 3 fields
      • score
        number (double)optional
        No description.
        nullable
      • flag
        booleanoptional
        No description.
        nullable
      • type
        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": [ { "documentType": "string", "subType": "string", "pageNo": 0, "ocrData": { "aadhaar": { "value": "string", "confidence": 0 }, "yob": { "value": "string", "confidence": 0 }, "father": { "value": "string", "confidence": 0 }, "pan": { "value": "string", "confidence": 0 }, "vid": { "value": "string", "confidence": 0 }, "phone": { "value": "string", "confidence": 0 }, "dlNo": { "value": "string", "confidence": 0 }, "name": { "value": "string", "confidence": 0 }, "dob": { "value": "string", "confidence": 0 }, "doi": { "value": "string", "confidence": 0 }, "doe": { "value": "string", "confidence": 0 }, "relationName": { "value": "string", "confidence": 0 }, "address": { "value": "string", "confidence": 0 }, "pin": { "value": "string", "confidence": 0 } }, "additionalDetails": { "inputMaskStatus": { "isMasked": false, "maskedBy": "string", "confidence": "string" }, "outputMaskStatus": false, "verhoeffCheck": false, "qr": "string", "barcode": "string", "addressSplit": { "building": "string", "city": "string", "district": "string", "pin": "string", "floor": "string", "house": "string", "locality": "string", "state": "string", "street": "string", "complex": "string", "landmark": "string", "untagged": "string" }, "careOfDetails": { "relation": "string", "name": "string" }, "documentLink": "string", "maskAadhaarImage": "string" }, "qualityChecks": [ { "score": 0, "flag": false, "type": "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 }
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/KycOCR' \ -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", "fileBase64": "SGVsbG8gV29ybGQ=", "pdfPassword": "N", "requiredConfidence": true, "requiredOcr": true, "returnQualityChecks": [ "ALL" ], "maskAadhaarImage": "EIGHT_DIGITS", "maskAadhaarText": "EIGHT_DIGITS", "responseFormat": "DOCUMENT", "responseType": "URL", "docTypes": [ "DL" ] }'