DGFT Information

2 endpoints · Core API

What is it?

The DGFT API provides direct access to the Directorate General of Foreign Trade (DGFT) database for import/export trade verification. It covers two distinct lookups:

  1. IEC Lookup — Retrieve importer/exporter details by Import Export Code (IEC). Returns entity name, PAN, registered address, IEC status, issue date, exporter type, and nature of concern. Use this to verify the identity and registration status of an import/export business.

  2. ITC(HS) Policy Lookup — Retrieve import policy details for any 8-digit ITC(HS) harmonized code. Returns the product description, chapter classification, applicable trade notifications, and policy conditions (Free/Restricted/Prohibited status and license requirements).

Benefits

  • Verify importers and exporters by their IEC before onboarding or trade transactions
  • Confirm IEC status and registration with government-authoritative DGFT data
  • Look up import restrictions and license requirements for any HS code
  • Automate trade compliance checks in ERP, customs, and logistics workflows

What you can do

Use for vendor due diligence, importer/exporter KYC, pre-shipment compliance checks, customs classification, trade license verification, and regulatory compliance automation.

POST

/api/v1/dgft/iec-lookup

#

Retrieve importer/exporter details by IEC (Import Export Code).

docs.signcare.io/core/api/trade/dgft-information/#post-api-v1-dgft-iec-lookup

Fetches Import Export Code (IEC) holder details from the Directorate General of Foreign Trade (DGFT) database. Returns entity name, PAN, address, IEC status, and issue date for the given IEC number.

Key Benefits:

→ Verify the identity and registration status of an importer or exporter by their IEC number.

→ Confirm entity name, PAN, and registered address against DGFT records.

→ Government-authoritative source — data from the DGFT official registry.

Use Cases:

→ Vendor due diligence and trade counterparty verification.

→ KYC for import/export businesses during onboarding.

→ Customs compliance — confirm IEC status before shipment processing.

Request Body Parameters:

→ iecNumber (required): 10-digit numeric Import Export Code (e.g. "0515920797"). The format is not validated by SignCare; an unknown IEC returns 404.

→ request_id (optional): Your own unique ID to track this request. A UUID is generated if omitted.

Response Details:

→ Returns entityName, pan, iecNumber, iecStatus (0=Active), iecIssueDate, exporterType, natureOfConcern, address1, address2, city, state, pinCode.

→ Returns 404 when the IEC number is not found in DGFT records.

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
  • iecNumber
    stringrequired
    Required. 10-digit Import Export Code (IEC), for example 0515920797. The format is not checked by SignCare; an unknown IEC returns 404.
    nullable
  • request_id
    stringoptional
    Optional. Your own unique ID to track this request. A UUID is generated if omitted.
    nullable
Sample request body
{ "iecNumber": "string", "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
    Response for DGFT/01 IEC lookup. Returns null when IEC is not found.
    12 fields
    • exporterType
      integer (int32)optional
      No description.
      nullable
    • entityName
      stringoptional
      No description.
      nullable
    • pan
      stringoptional
      No description.
      nullable
    • iecNumber
      stringoptional
      No description.
      nullable
    • iecStatus
      integer (int32)optional
      No description.
      nullable
    • iecIssueDate
      stringoptional
      No description.
      nullable
    • natureOfConcern
      integer (int64)optional
      No description.
      nullable
    • address1
      stringoptional
      No description.
      nullable
    • address2
      stringoptional
      No description.
      nullable
    • city
      stringoptional
      No description.
      nullable
    • state
      stringoptional
      No description.
      nullable
    • pinCode
      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": { "exporterType": 0, "entityName": "string", "pan": "string", "iecNumber": "string", "iecStatus": 0, "iecIssueDate": "string", "natureOfConcern": 0, "address1": "string", "address2": "string", "city": "string", "state": "string", "pinCode": 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 }
404Not Found
  • 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/dgft/iec-lookup' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "iecNumber": "string", "request_id": "string" }'
POST

/api/v1/dgft/itchs-policy

#

Retrieve import policy and restrictions for an ITC(HS) harmonized code.

docs.signcare.io/core/api/trade/dgft-information/#post-api-v1-dgft-itchs-policy

Fetches ITC(HS) (Indian Trade Classification based on Harmonized System) import policy details from the Directorate General of Foreign Trade (DGFT) database. Returns product description, chapter classification, applicable notifications, and policy conditions.

Key Benefits:

→ Look up import restrictions, Free/Restricted/Prohibited classifications for a specific HS code.

→ Retrieve applicable trade notifications and policy conditions from DGFT.

→ Government-authoritative source — data from the DGFT ITC(HS) schedule of imports.

Use Cases:

→ Pre-shipment compliance checks — verify whether a product requires a license to import.

→ Customs classification — confirm HS code chapter and product description.

→ Trade compliance automation — integrate import policy checks into ERP/logistics systems.

Request Body Parameters:

→ itchs (required): 8-digit ITC(HS) harmonized code (e.g. "29035100"). The format is not validated by SignCare; an unknown code returns 404.

→ request_id (optional): Your own unique ID to track this request. A UUID is generated if omitted.

Response Details:

→ Returns chapter, description, productDescriptionImportPolicy (list of matching HS codes with descriptions and notification numbers), main (policy items with notes and notification dates), and policyCondition (additional conditions with notes and notification dates).

→ Returns 404 when the HS code is not found in DGFT records.

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
  • itchs
    stringrequired
    Required. 8-digit ITC(HS) harmonized code, for example 29035100. The format is not checked by SignCare; an unknown code returns 404.
    nullable
  • request_id
    stringoptional
    Optional. Your own unique ID to track this request. A UUID is generated if omitted.
    nullable
Sample request body
{ "itchs": "string", "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
    Response for DGFT/02 ITC(HS) policy lookup. Returns null when HS code is not found.
    5 fields
    • chapter
      stringoptional
      No description.
      nullable
    • description
      stringoptional
      No description.
      nullable
    • productDescriptionImportPolicy
      array<object>optional
      No description.
      nullable
      Each item: 3 fields
      • hsCode
        stringoptional
        No description.
        nullable
      • description
        stringoptional
        No description.
        nullable
      • notificationNumber
        stringoptional
        No description.
        nullable
    • main
      array<object>optional
      No description.
      nullable
      Each item: 4 fields
      • slNo
        stringoptional
        No description.
        nullable
      • notes
        stringoptional
        No description.
        nullable
      • notificationNumber
        stringoptional
        No description.
        nullable
      • notificationDate
        stringoptional
        No description.
        nullable
    • policyCondition
      array<object>optional
      No description.
      nullable
      Each item: 4 fields
      • slNo
        stringoptional
        No description.
        nullable
      • notes
        stringoptional
        No description.
        nullable
      • notificationNumber
        stringoptional
        No description.
        nullable
      • notificationDate
        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": { "chapter": "string", "description": "string", "productDescriptionImportPolicy": [ { "hsCode": "string", "description": "string", "notificationNumber": "string" } ], "main": [ { "slNo": "string", "notes": "string", "notificationNumber": "string", "notificationDate": "string" } ], "policyCondition": [ { "slNo": "string", "notes": "string", "notificationNumber": "string", "notificationDate": "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 }
404Not Found
  • 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/dgft/itchs-policy' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "itchs": "string", "request_id": "string" }'