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:
-
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.
-
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.
Retrieve importer/exporter details by IEC (Import Export Code).
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-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- iecNumberstringrequiredRequired. 10-digit Import Export Code (IEC), for example 0515920797. The format is not checked by SignCare; an unknown IEC returns 404.nullable
- request_idstringoptionalOptional. Your own unique ID to track this request. A UUID is generated if omitted.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResponse for DGFT/01 IEC lookup. Returns null when IEC is not found.
12 fields
- exporterTypeinteger (int32)optionalNo description.nullable
- entityNamestringoptionalNo description.nullable
- panstringoptionalNo description.nullable
- iecNumberstringoptionalNo description.nullable
- iecStatusinteger (int32)optionalNo description.nullable
- iecIssueDatestringoptionalNo description.nullable
- natureOfConcerninteger (int64)optionalNo description.nullable
- address1stringoptionalNo description.nullable
- address2stringoptionalNo description.nullable
- citystringoptionalNo description.nullable
- statestringoptionalNo description.nullable
- pinCodeinteger (int32)optionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether 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.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
404Not Found
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataanyoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether 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.
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl · Node.js · Python
Retrieve import policy and restrictions for an ITC(HS) harmonized code.
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-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- itchsstringrequiredRequired. 8-digit ITC(HS) harmonized code, for example 29035100. The format is not checked by SignCare; an unknown code returns 404.nullable
- request_idstringoptionalOptional. Your own unique ID to track this request. A UUID is generated if omitted.nullable
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResponse for DGFT/02 ITC(HS) policy lookup. Returns null when HS code is not found.
5 fields
- chapterstringoptionalNo description.nullable
- descriptionstringoptionalNo description.nullable
- productDescriptionImportPolicyarray<object>optionalNo description.nullable
Each item: 3 fields
- hsCodestringoptionalNo description.nullable
- descriptionstringoptionalNo description.nullable
- notificationNumberstringoptionalNo description.nullable
- mainarray<object>optionalNo description.nullable
Each item: 4 fields
- slNostringoptionalNo description.nullable
- notesstringoptionalNo description.nullable
- notificationNumberstringoptionalNo description.nullable
- notificationDatestringoptionalNo description.nullable
- policyConditionarray<object>optionalNo description.nullable
Each item: 4 fields
- slNostringoptionalNo description.nullable
- notesstringoptionalNo description.nullable
- notificationNumberstringoptionalNo description.nullable
- notificationDatestringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether 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.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
404Not Found
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataanyoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether 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.
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500