OCR

4 endpoints · Core API

OCR Document Extract & Verify

Extract and verify details from documents by uploading PDF files. OCR provides the following APIs:

1.OCR - Form 16 :

Extract employee details, employer details, PAN, assessment year, and salary details from Form 16 PDF.

2.OCR - GST Certificate :

Extract GSTIN, legal name, trade name, business address, registration date, and status from GST Certificate PDF.

3.OCR - Certificate of incorporation (COI) :

Extract company name, CIN, incorporation date, and registered office address from Certificate of Incorporation (COI).

POST

/api/v1/ocr/form-16/pdf

#

OCR – Form-16 details

docs.signcare.io/core/api/ocr-pages/ocr/#post-api-v1-ocr-form-16-pdf

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
  • file_name
    stringrequired
    Required. Name of the Form 16 file, for example form16.pdf.
    minLength 1default form16.pdf
  • file_base64
    stringrequired
    Required. Base64-encoded content of the Form 16 PDF. Must be standard base64 with padding and no line breaks.
    minLength 1pattern ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2…default JVBERi0xLjQK
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "file_name": "form16.pdf", "file_base64": "JVBERi0xLjQK" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Response model containing extracted Form 16 data with Part A and Part B sections.
    2 fields
    • Part A
      objectoptional
      Represents Part A of Form 16, containing TDS details and employer/employee information.
      4 fields
      • tds
        array<array>optional
        Gets or sets the TDS (Tax Deducted at Source) details as a list of records.
        nullable
      • assessment_year
        stringoptional
        Gets or sets the assessment year for the Form 16.
        nullable
      • employer
        objectoptional
        Represents employer details extracted from Form 16.
        4 fields
        • tan
          stringoptional
          Gets or sets the Tax Deduction and Collection Account Number (TAN) of the employer.
          nullable
        • address
          objectoptional
          Represents an address extracted from Form 16.
          3 fields
          • area
            stringoptional
            Gets or sets the area or locality name.
            nullable
          • street
            stringoptional
            Gets or sets the street name.
            nullable
          • postal_code
            stringoptional
            Gets or sets the postal code or PIN code.
            nullable
        • name
          stringoptional
          Gets or sets the name of the employer.
          nullable
        • pan
          stringoptional
          Gets or sets the Permanent Account Number (PAN) of the employer.
          nullable
      • employee
        objectoptional
        Represents employee details extracted from Form 16.
        5 fields
        • address
          objectoptional
          Represents an address extracted from Form 16.
          3 fields
          • area
            stringoptional
            Gets or sets the area or locality name.
            nullable
          • street
            stringoptional
            Gets or sets the street name.
            nullable
          • postal_code
            stringoptional
            Gets or sets the postal code or PIN code.
            nullable
        • first_name
          stringoptional
          Gets or sets the first name of the employee.
          nullable
        • middle_name
          stringoptional
          Gets or sets the middle name of the employee.
          nullable
        • last_name
          stringoptional
          Gets or sets the last name of the employee.
          nullable
        • pan
          stringoptional
          Gets or sets the Permanent Account Number (PAN) of the employee.
          nullable
    • Part B
      objectoptional
      Represents Part B of Form 16, containing salary, deduction, and tax computation details.
      4 fields
      • assessment_year
        stringoptional
        Gets or sets the assessment year for Part B.
        nullable
      • employer
        objectoptional
        Represents employer details extracted from Form 16.
        4 fields
        • tan
          stringoptional
          Gets or sets the Tax Deduction and Collection Account Number (TAN) of the employer.
          nullable
        • address
          objectoptional
          Represents an address extracted from Form 16.
          3 fields
          • area
            stringoptional
            Gets or sets the area or locality name.
            nullable
          • street
            stringoptional
            Gets or sets the street name.
            nullable
          • postal_code
            stringoptional
            Gets or sets the postal code or PIN code.
            nullable
        • name
          stringoptional
          Gets or sets the name of the employer.
          nullable
        • pan
          stringoptional
          Gets or sets the Permanent Account Number (PAN) of the employer.
          nullable
      • employee
        objectoptional
        Represents employee details extracted from Form 16.
        5 fields
        • address
          objectoptional
          Represents an address extracted from Form 16.
          3 fields
          • area
            stringoptional
            Gets or sets the area or locality name.
            nullable
          • street
            stringoptional
            Gets or sets the street name.
            nullable
          • postal_code
            stringoptional
            Gets or sets the postal code or PIN code.
            nullable
        • first_name
          stringoptional
          Gets or sets the first name of the employee.
          nullable
        • middle_name
          stringoptional
          Gets or sets the middle name of the employee.
          nullable
        • last_name
          stringoptional
          Gets or sets the last name of the employee.
          nullable
        • pan
          stringoptional
          Gets or sets the Permanent Account Number (PAN) of the employee.
          nullable
      • details_of_salary_paid
        objectoptional
        Represents the detailed salary, deductions, and tax computation from Form 16 Part B.
        20 fields
        • surcharge
          integer (int64)optional
          Gets or sets the surcharge amount.
        • gross_salary
          objectoptional
          Represents the gross salary breakdown including salary, perquisites, and profits in lieu of salary.
          4 fields
          • reported_total_amount_of_salary_received_from_other_employer
            integer (int64)optional
            Gets or sets the total salary received from other employer(s) as reported.
          • profits_in_lieu_of_salary_us_17_3
            integer (int64)optional
            Gets or sets the profits in lieu of salary under Section 17(3).
          • value_of_perquisites_us_17_2
            integer (int64)optional
            Gets or sets the value of perquisites under Section 17(2).
          • salary_as_per_provisions_contained_in_section_17_1
            integer (int64)optional
            Gets or sets the salary as per provisions contained in Section 17(1).
        • gross_total_income
          integer (int64)optional
          Gets or sets the gross total income amount.
        • tax_payable
          integer (int64)optional
          Gets or sets the total tax payable amount.
        • allowances_us_10
          objectoptional
          Represents allowances exempt under Section 10 of the Income Tax Act.
          8 fields
          • other_special_allowances_us_10_14
            integer (int64)optional
            Gets or sets other special allowances under Section 10(14).
          • house_rent_allowance_us_10_13_a
            integer (int64)optional
            Gets or sets the house rent allowance exempt under Section 10(13A).
          • commuted_value_of_pension_us_10_10_a
            integer (int64)optional
            Gets or sets the commuted value of pension under Section 10(10A).
          • death_cum_retirement_gratuity_us_10_10
            integer (int64)optional
            Gets or sets the death-cum-retirement gratuity under Section 10(10).
          • total_amount_of_any_other_exemption_us_10
            integer (int64)optional
            Gets or sets the total amount of any other exemption under Section 10.
          • total_amount_of_exemption_claimed_us_10
            integer (int64)optional
            Gets or sets the total exemption amount claimed under Section 10.
          • travel_concession_or_assistance_us_10_5
            integer (int64)optional
            Gets or sets the travel concession or assistance under Section 10(5).
          • cash_equivalent_of_leave_salary_encashment_us_10_10_aa
            integer (int64)optional
            Gets or sets the cash equivalent of leave salary encashment under Section 10(10AA).
        • total_amount_of_deductions_us_16
          integer (int64)optional
          Gets or sets the total deductions under Section 16.
        • health_and_eduction_cess
          integer (int64)optional
          Gets or sets the health and education cess amount.
        • deduction_under_chapter_vi_a
          objectoptional
          Represents deductions under Chapter VI-A of the Income Tax Act.
          11 fields
          • deduction_us_80_ccc
            objectoptional
            Gets or sets the deduction under Section 80CCC (pension fund contributions).
            nullable
          • deduction_us_80_tta
            objectoptional
            Gets or sets the deduction under Section 80TTA (interest on savings account).
            nullable
          • total_deduction_us_80_cce
            objectoptional
            Gets or sets the total deduction under Section 80CCE (aggregate limit).
            nullable
          • deduction_us_80_ccd_2
            objectoptional
            Represents a deduction amount with gross and deductible components.
            2 fields
            • gross_amount
              integer (int64)optional
              Gets or sets the gross amount of the deduction.
            • deductible_amount
              integer (int64)optional
              Gets or sets the deductible amount eligible for tax benefit.
          • deduction_us_80_ccd_1
            objectoptional
            Gets or sets the deduction under Section 80CCD(1) (employee's NPS contribution).
            nullable
          • deduction_us_80_d
            objectoptional
            Gets or sets the deduction under Section 80D (medical insurance premium).
            nullable
          • deduction_us_80_ccd_1_b
            objectoptional
            Gets or sets the deduction under Section 80CCD(1B) (additional NPS contribution).
            nullable
          • deduction_us_80_e
            objectoptional
            Gets or sets the deduction under Section 80E (education loan interest).
            nullable
          • deduction_us_80_cch
            objectoptional
            Gets or sets the deduction under Section 80CCH.
            nullable
          • deduction_us_80_g
            objectoptional
            Gets or sets the deduction under Section 80G (donations to charitable institutions).
            nullable
          • deduction_us_80_c
            objectoptional
            Gets or sets the deduction under Section 80C (investments and specified payments).
            nullable
        • rebate_us_87_a
          integer (int64)optional
          Gets or sets the rebate amount under Section 87A.
        • relief_us_89
          integer (int64)optional
          Gets or sets the relief amount under Section 89.
        • aggregate_deductible_amount_under_chapter_vi_a
          integer (int64)optional
          Gets or sets the aggregate deductible amount under Chapter VI-A.
        • tax_on_total_income
          integer (int64)optional
          Gets or sets the tax computed on total income.
        • total_amount_of_other_income_reported_by_employee
          integer (int64)optional
          Gets or sets the total amount of other income reported by the employee.
        • other_income_reported_by_employee_us_192_2_b
          objectoptional
          Represents other income reported by the employee under Section 192(2B).
          2 fields
          • income_under_the_head_other_sources_offered_for_tds
            integer (int64)optional
            Gets or sets the income under the head "Other Sources" offered for TDS.
          • income_from_house_property_reported_by_employee_offered_for_tds
            integer (int64)optional
            Gets or sets the income from house property reported by employee for TDS.
        • tax_deducted_or_collected_at_source_as_per_form_12_baa
          integer (int64)optional
          Gets or sets the tax deducted or collected at source as per Form 12BAA.
        • income_chargeable_under_the_head_salaries
          integer (int64)optional
          Gets or sets the income chargeable under the head "Salaries".
        • total_amount_of_salary_received_from_current_employer
          integer (int64)optional
          Gets or sets the total salary received from the current employer.
        • opting_out_of_taxation_us_115_bac_1a
          stringoptional
          Gets or sets the status of opting out of new tax regime under Section 115BAC(1A).
          nullable
        • deduction_us_16
          objectoptional
          Represents deductions under Section 16 of the Income Tax Act.
          3 fields
          • entertainment_allowance_us_16_ii
            integer (int64)optional
            Gets or sets the entertainment allowance under Section 16(ii).
          • standard_deduction_us_16_ia
            integer (int64)optional
            Gets or sets the standard deduction under Section 16(ia).
          • tax_on_employment_us_16_iii
            integer (int64)optional
            Gets or sets the tax on employment (professional tax) under Section 16(iii).
        • total_taxable_income
          integer (int64)optional
          Gets or sets the total taxable income after all deductions.
  • 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": { "Part A": { "tds": [ [] ], "assessment_year": "string", "employer": { "tan": "string", "address": { "area": "string", "street": "string", "postal_code": "string" }, "name": "string", "pan": "string" }, "employee": { "address": { "area": "string", "street": "string", "postal_code": "string" }, "first_name": "string", "middle_name": "string", "last_name": "string", "pan": "string" } }, "Part B": { "assessment_year": "string", "employer": { "tan": "string", "address": { "area": "string", "street": "string", "postal_code": "string" }, "name": "string", "pan": "string" }, "employee": { "address": { "area": "string", "street": "string", "postal_code": "string" }, "first_name": "string", "middle_name": "string", "last_name": "string", "pan": "string" }, "details_of_salary_paid": { "surcharge": 0, "gross_salary": { "reported_total_amount_of_salary_received_from_other_employer": 0, "profits_in_lieu_of_salary_us_17_3": 0, "value_of_perquisites_us_17_2": 0, "salary_as_per_provisions_contained_in_section_17_1": 0 }, "gross_total_income": 0, "tax_payable": 0, "allowances_us_10": { "other_special_allowances_us_10_14": 0, "house_rent_allowance_us_10_13_a": 0, "commuted_value_of_pension_us_10_10_a": 0, "death_cum_retirement_gratuity_us_10_10": 0, "total_amount_of_any_other_exemption_us_10": 0, "total_amount_of_exemption_claimed_us_10": 0, "travel_concession_or_assistance_us_10_5": 0, "cash_equivalent_of_leave_salary_encashment_us_10_10_aa": 0 }, "total_amount_of_deductions_us_16": 0, "health_and_eduction_cess": 0, "deduction_under_chapter_vi_a": { "deduction_us_80_ccc": {}, "deduction_us_80_tta": {}, "total_deduction_us_80_cce": {}, "deduction_us_80_ccd_2": { "gross_amount": 0, "deductible_amount": 0 }, "deduction_us_80_ccd_1": {}, "deduction_us_80_d": {}, "deduction_us_80_ccd_1_b": {}, "deduction_us_80_e": {}, "deduction_us_80_cch": {}, "deduction_us_80_g": {}, "deduction_us_80_c": {} }, "rebate_us_87_a": 0, "relief_us_89": 0, "aggregate_deductible_amount_under_chapter_vi_a": 0, "tax_on_total_income": 0, "total_amount_of_other_income_reported_by_employee": 0, "other_income_reported_by_employee_us_192_2_b": { "income_under_the_head_other_sources_offered_for_tds": 0, "income_from_house_property_reported_by_employee_offered_for_tds": 0 }, "tax_deducted_or_collected_at_source_as_per_form_12_baa": 0, "income_chargeable_under_the_head_salaries": 0, "total_amount_of_salary_received_from_current_employer": 0, "opting_out_of_taxation_us_115_bac_1a": "string", "deduction_us_16": { "entertainment_allowance_us_16_ii": 0, "standard_deduction_us_16_ia": 0, "tax_on_employment_us_16_iii": 0 }, "total_taxable_income": 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 }
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/ocr/form-16/pdf' \ -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", "file_name": "form16.pdf", "file_base64": "JVBERi0xLjQK" }'
POST

/api/v1/ocr/gst/pdf

#

OCR – GST Certificate details

docs.signcare.io/core/api/ocr-pages/ocr/#post-api-v1-ocr-gst-pdf

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
  • file_name
    stringrequired
    Required. Name of the file to be processed, for example file.pdf.
    minLength 1default file.pdf
  • file_base64
    stringrequired
    Required. Base64-encoded content of the file (PDF, or an image when input_type is image on gst/advance/pdf). Must be standard base64 with padding and no line breaks.
    minLength 1pattern ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2…default JVBERi0xLjQK
  • page_number
    integer (int32)optional
    Optional. 1-based page number of a PDF to analyze. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf. When omitted, all pages are analyzed.
    nullable
  • text_only
    booleanoptional
    Optional. Defaults to false. When true and page_number is set, runs a faster text-only extraction that returns limited fields: GSTIN, LegalName, TradeName, Directors. Has no effect without page_number. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf.
    default false
  • input_type
    stringoptional
    Optional. Allowed values: pdf (default) for multi-page PDF processing, or image for a single-page image (for example a PNG or JPEG of the Annexure B page with directors). Any value other than image is treated as pdf. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf.
    nullabledefault pdf
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "file_name": "file.pdf", "file_base64": "JVBERi0xLjQK", "text_only": false, "input_type": "pdf" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Response model containing OCR-extracted data from a GST certificate.
    9 fields
    • id_type
      stringoptional
      Type of the identified document.
      nullable
    • id_gstin
      stringoptional
      GSTIN extracted from the certificate.
      nullable
    • id_legal_name
      stringoptional
      Legal name extracted from the GST certificate.
      nullable
    • id_registration_type
      stringoptional
      Type of GST registration extracted from the certificate.
      nullable
    • id_registration_date
      stringoptional
      Registration date extracted from the GST certificate.
      nullable
    • id_liability_date
      stringoptional
      Date of liability to register under GST.
      nullable
    • id_trade_name
      stringoptional
      Trade name extracted from the GST certificate.
      nullable
    • id_business_constitution
      stringoptional
      Business constitution type extracted from the certificate.
      nullable
    • id_address
      stringoptional
      Registered address extracted from the GST certificate.
      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": { "id_type": "string", "id_gstin": "string", "id_legal_name": "string", "id_registration_type": "string", "id_registration_date": "string", "id_liability_date": "string", "id_trade_name": "string", "id_business_constitution": "string", "id_address": "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/ocr/gst/pdf' \ -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", "file_name": "file.pdf", "file_base64": "JVBERi0xLjQK", "text_only": false, "input_type": "pdf" }'
POST

/api/v1/ocr/gst/advance/pdf

#

OCR – GST Certificate Advanced - includes directors from Annexure B

docs.signcare.io/core/api/ocr-pages/ocr/#post-api-v1-ocr-gst-advance-pdf

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
  • file_name
    stringrequired
    Required. Name of the file to be processed, for example file.pdf.
    minLength 1default file.pdf
  • file_base64
    stringrequired
    Required. Base64-encoded content of the file (PDF, or an image when input_type is image on gst/advance/pdf). Must be standard base64 with padding and no line breaks.
    minLength 1pattern ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2…default JVBERi0xLjQK
  • page_number
    integer (int32)optional
    Optional. 1-based page number of a PDF to analyze. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf. When omitted, all pages are analyzed.
    nullable
  • text_only
    booleanoptional
    Optional. Defaults to false. When true and page_number is set, runs a faster text-only extraction that returns limited fields: GSTIN, LegalName, TradeName, Directors. Has no effect without page_number. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf.
    default false
  • input_type
    stringoptional
    Optional. Allowed values: pdf (default) for multi-page PDF processing, or image for a single-page image (for example a PNG or JPEG of the Annexure B page with directors). Any value other than image is treated as pdf. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf.
    nullabledefault pdf
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "file_name": "file.pdf", "file_base64": "JVBERi0xLjQK", "text_only": false, "input_type": "pdf" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Response model for advanced GST Certificate OCR. Field names match the GST Advance verification response, so both can be read the same way. OCR-only fields (directors) are appended at the end.
    11 fields
    • gstin
      stringoptional
      No description.
      nullable
    • legal_name
      stringoptional
      No description.
      nullable
    • trade_name
      stringoptional
      No description.
      nullable
    • business_constitution
      stringoptional
      Same as GST Advance business_constitution (was constitution_of_business).
      nullable
    • registered_address
      stringoptional
      No description.
      nullable
    • register_date
      stringoptional
      Same as GST Advance register_date (was date_of_registration).
      nullable
    • current_registration_status
      stringoptional
      No description.
      nullable
    • tax_payer_type
      stringoptional
      No description.
      nullable
    • state_jurisdiction
      stringoptional
      No description.
      nullable
    • authorized_signatory
      array<string>optional
      No description.
      nullable
    • directors
      array<object>optional
      OCR-specific: directors from Annexure B (not available in GST Advance).
      nullable
      Each item: 3 fields
      • name
        stringoptional
        No description.
        nullable
      • designation
        stringoptional
        No description.
        nullable
      • state
        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": { "gstin": "string", "legal_name": "string", "trade_name": "string", "business_constitution": "string", "registered_address": "string", "register_date": "string", "current_registration_status": "string", "tax_payer_type": "string", "state_jurisdiction": "string", "authorized_signatory": [ "string" ], "directors": [ { "name": "string", "designation": "string", "state": "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/ocr/gst/advance/pdf' \ -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", "file_name": "file.pdf", "file_base64": "JVBERi0xLjQK", "text_only": false, "input_type": "pdf" }'
POST

/api/v1/ocr/coi/pdf

#

OCR – GST Certificate Incorporation details

docs.signcare.io/core/api/ocr-pages/ocr/#post-api-v1-ocr-coi-pdf

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
  • file_name
    stringrequired
    Required. Name of the file to be processed, for example file.pdf.
    minLength 1default file.pdf
  • file_base64
    stringrequired
    Required. Base64-encoded content of the file (PDF, or an image when input_type is image on gst/advance/pdf). Must be standard base64 with padding and no line breaks.
    minLength 1pattern ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2…default JVBERi0xLjQK
  • page_number
    integer (int32)optional
    Optional. 1-based page number of a PDF to analyze. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf. When omitted, all pages are analyzed.
    nullable
  • text_only
    booleanoptional
    Optional. Defaults to false. When true and page_number is set, runs a faster text-only extraction that returns limited fields: GSTIN, LegalName, TradeName, Directors. Has no effect without page_number. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf.
    default false
  • input_type
    stringoptional
    Optional. Allowed values: pdf (default) for multi-page PDF processing, or image for a single-page image (for example a PNG or JPEG of the Annexure B page with directors). Any value other than image is treated as pdf. Used only by gst/advance/pdf; ignored by gst/pdf and coi/pdf.
    nullabledefault pdf
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "file_name": "file.pdf", "file_base64": "JVBERi0xLjQK", "text_only": false, "input_type": "pdf" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Response model containing OCR-extracted data from a certificate of incorporation.
    7 fields
    • id_type
      stringoptional
      Type of the identified document.
      nullable
    • id_tan
      stringoptional
      Tax Account Number (TAN) extracted from the certificate.
      nullable
    • id_company_name
      stringoptional
      Company name extracted from the certificate.
      nullable
    • id_pan
      stringoptional
      Permanent Account Number (PAN) extracted from the certificate.
      nullable
    • id_cin
      stringoptional
      Corporate Identity Number (CIN) extracted from the certificate.
      nullable
    • id_incorporation_date
      string (date-time)optional
      Date of incorporation extracted from the certificate.
      nullable
    • id_address
      stringoptional
      Registered address extracted from the certificate.
      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": { "id_type": "string", "id_tan": "string", "id_company_name": "string", "id_pan": "string", "id_cin": "string", "id_incorporation_date": "2026-01-01T00:00:00Z", "id_address": "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/ocr/coi/pdf' \ -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", "file_name": "file.pdf", "file_base64": "JVBERi0xLjQK", "text_only": false, "input_type": "pdf" }'