Feel free to reach techsupport@surepass.io for any technical support or guidance.
pending status, this endpoint is polled to determine whether the verification has completed and to fetch the full, structured Udyam registration data.data.status field reflects the complete lifecycle of OTP verification, with seven possible states: not_started, pending, completed, failed, update_required, otp_expired, and invalid_otp. The update_required status specifically indicates that the Udyam registration has information that must be updated directly on the Udyam portal before verification can be completed. When verification reaches completed, the response returns a comprehensive payload sourced directly from the Udyam registration database — including enterprise identity details, financial investment and turnover figures, employment breakdown, bank details, official and unit addresses, NIC classification codes, portal interest flags, and a pre-signed, time-limited certificate link.update_required, otp_expired, and invalid_otp — give your application precise, actionable signals at every stage of the verification process, enabling tailored responses for each outcome.completed status, the API returns the entire Udyam registration profile — enterprise, financial, employment, address, and NIC classification data — eliminating the need for separate lookup calls.otp_expired and invalid_otp allow your application to surface specific, user-friendly error messages rather than generic failures, improving verification completion rates.completed status during MSME loan onboarding to retrieve verified investment, turnover, and enterprise classification data that powers automated credit underwriting decisions.update_required status by surfacing a targeted message to borrowers explaining that their Udyam registration needs to be updated on the Udyam portal before KYC verification can proceed, preventing silent drop-offs.Authorization header as Bearer TOKEN.https://sandbox.surepass.apphttps://kyc-api.surepass.app| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer token for authentication. Format: Bearer <JWT_TOKEN> |
Content-Type | Yes | Must be set to application/json |
| Parameter | Type | Required | Description |
|---|---|---|---|
client_id | String | Yes | The unique client identifier returned by the Udyam OTP Async Send OTP API. Used to retrieve the final verification result for a specific OTP session. |
{
"client_id": "udyam_otp_async_SBsIvDUxXlwhskcsAjlF"
}| Parameter | Type | Description |
|---|---|---|
status_code | Integer | HTTP status code of the response (e.g., 200 for success) |
success | Boolean | Indicates whether the API call was successful (true) or not (false) |
message | String | A human-readable message describing the result (e.g., "Success") |
message_code | String | A machine-readable code corresponding to the message (e.g., "success") |
data | Object | Contains the full Udyam verification result and registration data |
data Object Fields| Parameter | Type | Description |
|---|---|---|
status | String | The current status of the OTP verification. Allowed values: not_started, pending, completed, failed, update_required, otp_expired, invalid_otp. Udyam registration data fields are only populated when status is completed. |
client_id | String | The unique client identifier corresponding to the original OTP session |
type_of_enterprise | String | Classification of the enterprise size (e.g., SMALL, MICRO, MEDIUM) |
major_activity | String | Primary business activity of the enterprise (e.g., Manufacturing, Services) |
type_of_organisation | String | Legal form of the enterprise (e.g., Partnership Firm, Proprietorship) |
enterprise_name | String | Registered name of the Udyam enterprise |
owner_name | String | Full name of the enterprise owner or authorized signatory |
pan_number | String | Permanent Account Number (PAN) associated with the enterprise |
do_you_have_gstin | String | Indicates whether the enterprise has a GSTIN registration (Yes / No) |
user_email_id | String | Email address of the registered user associated with the Udyam account |
social_category | String | Social category of the owner (e.g., General, SC, ST, OBC) |
gender | String | Gender of the enterprise owner (e.g., Male, Female, Other) |
specially_abled | String | Indicates whether the owner is specially abled (Yes / No) |
date_of_incorporation | String | Date the enterprise was legally incorporated (format: YYYY-MM-DD) |
date_commencement_of_production_business | String | Date the enterprise commenced operations or production (format: YYYY-MM-DD) |
bank_details | Array | List of bank accounts associated with the enterprise. Each entry contains bank_name, ifs_code, and bank_account_number |
employment_details | Array | Employment breakdown. Each entry contains male, female, other, and total employee counts |
investment_details | Array | Year-wise financial data. See investment_details fields below |
official_address | Object | Official registered address of the enterprise. See official_address fields below |
national_industry_classification_code | Array | NIC codes linked to the enterprise's business activities. See NIC fields below |
are_you_interested_to_get_registered_on_government_e_market_gem_portal | String | Indicates interest in GeM portal registration (Yes / No) |
are_you_interested_to_get_registered_on_treds_portals_one_or_more | String | Indicates interest in TREDS portal registration (Yes / No) |
are_you_interested_to_get_registered_on_national_career_Service_ncs_portal | String | Indicates interest in NCS portal registration (Yes / No) |
are_you_interested_to_get_registered_on_nsic_b2b_portal | String | Indicates interest in NSIC B2B portal registration (Yes / No) |
registration_date | String | Date the Udyam registration was originally created (format: YYYY-MM-DD) |
last_updated_date | String | Date the Udyam registration record was last updated (format: YYYY-MM-DD) |
unit_details | Array | List of operational units associated with the enterprise. See unit_details fields below |
type_of_enterprise_details | Array | Year-wise enterprise classification history. Each entry contains s_no, classification_year, enterprise_type, and classification_date |
certificate_link | String | Pre-signed, time-limited URL to the official Udyam registration certificate in HTML format |
data.status Allowed Values| Status | Description | Recommended Action |
|---|---|---|
not_started | The OTP verification process has not yet been initiated for this session | Verify that the Submit OTP call was made correctly with the same client_id |
pending | OTP verification is being processed asynchronously | Continue polling after a short interval; registration data will not be populated yet |
completed | OTP verification succeeded and Udyam registration data is available | Proceed with downstream workflows using the returned registration data |
failed | OTP verification was unsuccessful due to a system or processing error | Surface a generic error to the user and offer an option to restart the OTP flow |
update_required | The Udyam registration has information that must be updated on the Udyam portal before verification can be completed | Inform the user that their Udyam registration requires an update at the Udyam portal and guide them to complete that update before retrying |
otp_expired | The OTP was not submitted within the valid time window and has expired | Prompt the user to request a new OTP via the Send OTP endpoint and re-enter the fresh code |
invalid_otp | The submitted OTP does not match the one sent to the user | Ask the user to re-check the OTP and resubmit; offer a resend option if retries are exhausted |
investment_details Array Item Fields| Field | Type | Description |
|---|---|---|
s_no | String | Serial number of the investment record |
financial_year | String | Financial year of the record (e.g., 2023-24) |
enterprise_type | String | Enterprise classification for that financial year |
wdv | String | Written Down Value of assets |
cost_of_research_development_industrial_safety_devices | String | Expenditure on R&D and industrial safety devices |
investment_plant_machinery_equipment | String | Total investment in plant, machinery, and equipment |
total_turnover | String | Total turnover for the financial year |
export_turnover | String | Export component of the total turnover |
net_turnover | String | Net domestic turnover (total minus export) |
is_itr_filled | String | Whether ITR was filed for the year (Yes / No) |
itr_type | String | Type of ITR filed (e.g., ITR - 5) |
official_address Object Fields| Field | Type | Description |
|---|---|---|
flat_or_door_or_block | String | Flat, door, or block number |
name_of_premises_or_building | String | Name of the building or premises |
village_or_town | String | Village or town name |
block | String | Block identifier |
road_or_street_or_lane | String | Road, street, or lane name |
city | String | City name |
state | String | State name |
district | String | District name |
pin_code | String | Postal PIN code |
mobile_number | String | Contact mobile number for the official address |
email_id | String | Contact email address for the official address |
national_industry_classification_code Array Item Fields| Field | Type | Description |
|---|---|---|
s_no | String | Serial number of the NIC entry |
nic_2_digit | String | 2-digit NIC code with description |
nic_4_digit | String | 4-digit NIC code with description |
nic_5_digit | String | 5-digit NIC code with description |
activity | String | Nature of the activity (e.g., Manufacturing, Trading) |
added_on | String | Date the NIC code was added (format: YYYY-MM-DD) |
unit_details Array Item Fields| Field | Type | Description |
|---|---|---|
s_no | String | Serial number of the unit |
unit_name | String | Name of the operational unit |
flat | String | Flat or plot number of the unit |
building | String | Building or estate name |
village_town | String | Village or town of the unit |
block | String | Block identifier |
road | String | Road or street name |
city | String | City of the unit |
pin | String | Postal PIN code of the unit |
state | String | State of the unit |
district | String | District of the unit |
added_on | String | Date the unit was added to the registration (format: YYYY-MM-DD) |
{
"status_code": 200,
"success": true,
"message": "Success",
"message_code": "success",
"data": {
"status": "completed",
"client_id": "udyam_otp_async_XYZ987654321",
"type_of_enterprise": "SMALL",
"major_activity": "Manufacturing",
"type_of_organisation": "Partnership Firm",
"enterprise_name": "M/S AARAV INDUSTRIES LLP",
"owner_name": "RAJESH KUMAR SHARMA",
"pan_number": "AAEFA1234K",
"do_you_have_gstin": "No",
"user_email_id": "user123@gmail.com",
"social_category": "General",
"gender": "Female",
"specially_abled": "Yes",
"date_of_incorporation": "2019-06-10",
"date_commencement_of_production_business": "2021-01-05",
"bank_details": [
{
"bank_name": "HDFC Bank",
"ifs_code": "HDFC0001234",
"bank_account_number": "12345678901234"
}
],
"employment_details": [
{
"male": "10",
"female": "8",
"other": "1",
"total": "19"
}
],
"investment_details": [
{
"s_no": "1",
"financial_year": "2023-24",
"enterprise_type": "Small",
"wdv": "1500000.00",
"cost_of_research_development_industrial_safety_devices": "250000.00",
"investment_plant_machinery_equipment": "1200000.00",
"total_turnover": "12500000.00",
"export_turnover": "2500000.00",
"net_turnover": "10000000.00",
"is_itr_filled": "Yes",
"itr_type": "ITR - 5"
},
{
"s_no": "2",
"financial_year": "2022-23",
"enterprise_type": "Small",
"wdv": "1200000.00",
"cost_of_research_development_industrial_safety_devices": "150000.00",
"investment_plant_machinery_equipment": "900000.00",
"total_turnover": "9000000.00",
"export_turnover": "1000000.00",
"net_turnover": "8000000.00",
"is_itr_filled": "Yes",
"itr_type": "ITR - 5"
}
],
"official_address": {
"flat_or_door_or_block": "Flat No. 402",
"name_of_premises_or_building": "Sunshine Residency",
"village_or_town": "Sector 45",
"block": "Block B",
"road_or_street_or_lane": "MG Road",
"city": "Gurugram",
"state": "HARYANA",
"district": "GURUGRAM",
"pin_code": "122003",
"mobile_number": "9876543210",
"email_id": "contact@aaravindustries.com"
},
"national_industry_classification_code": [
{
"s_no": "1",
"nic_2_digit": "10 - Manufacture of food products",
"nic_4_digit": "1079 - Manufacture of other food products n.e.c.",
"nic_5_digit": "10799 - Manufacture of other food products n.e.c.",
"activity": "Manufacturing",
"added_on": "2023-05-12"
},
{
"s_no": "2",
"nic_2_digit": "46 - Wholesale trade",
"nic_4_digit": "4630 - Wholesale of food, beverages and tobacco",
"nic_5_digit": "46309 - Wholesale of other food products",
"activity": "Trading",
"added_on": "2023-05-12"
}
],
"are_you_interested_to_get_registered_on_government_e_market_gem_portal": "Yes",
"are_you_interested_to_get_registered_on_treds_portals_one_or_more": "Yes",
"are_you_interested_to_get_registered_on_national_career_Service_ncs_portal": "No",
"are_you_interested_to_get_registered_on_nsic_b2b_portal": "No",
"registration_date": "2023-05-12",
"last_updated_date": "2026-01-15",
"unit_details": [
{
"s_no": "1",
"unit_name": "Aarav Industries Unit 1",
"flat": "Plot No. 21",
"building": "Industrial Estate Phase II",
"village_town": "Manesar",
"block": "IMT",
"road": "Sector Road",
"city": "Gurugram",
"pin": "122050",
"state": "HARYANA",
"district": "GURUGRAM",
"added_on": "2023-05-12"
},
{
"s_no": "2",
"unit_name": "Aarav Industries Unit 2",
"flat": "Shed No. 14",
"building": "Logistics Park",
"village_town": "Bhiwandi",
"block": "Warehouse Zone",
"road": "NH-3",
"city": "Thane",
"pin": "421302",
"state": "MAHARASHTRA",
"district": "THANE",
"added_on": "2024-03-01"
}
],
"type_of_enterprise_details": [
{
"s_no": "1",
"classification_year": "2025-26",
"enterprise_type": "Small",
"classification_date": "2025-04-01"
},
{
"s_no": "2",
"classification_year": "2024-25",
"enterprise_type": "Small",
"classification_date": "2024-04-01"
}
],
"certificate_link": "https://aadhaar-kyc-docs.s3.amazonaws.com/UDYAM-RJ-30-0066275/udyam_certificate-2026-02-20-132953898261.html?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAY5K3QRM5KVPBYKKE%2F20260220%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20260220T132954Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=74650dbb09ef4ea19f0971d4c6a981eec10eb5363e06599a50f125ffa4d6bf71"
}
}{
"status_code": 401,
"success": false,
"message": "Authentication credentials were not provided or are invalid.",
"message_code": "unauthorized"
}certificate_link: The pre-signed URL in certificate_link is time-limited. Fetch and display or archive it immediately after receiving a completed response; do not store the URL itself for later reuse.pending, a success screen for completed, an OTP re-entry prompt for invalid_otp, a resend prompt for otp_expired, a Udyam portal redirect guidance for update_required, and a generic error with retry for failed.update_required with clear guidance: When this status is returned, inform the user that their Udyam registration has information requiring an update directly on the Udyam portal (udyam.gov.in) and that they should return to retry verification after completing the update. Do not leave them guessing about the next step.invalid_otp from otp_expired in user messaging: Show "Incorrect OTP — please re-enter" for invalid_otp and "Your OTP has expired — please request a new one" for otp_expired. Using distinct messages reduces user confusion and unnecessary resend requests.completed only: Never proceed with onboarding, credit decisions, or data ingestion based on any non-completed status. Only act on verified data returned alongside a completed status.client_id that flows through the entire verification chain.otp_sent, pending, or failed). Should confirm otp_sent before the user proceeds to enter the OTP.client_id to initiate asynchronous Udyam verification. Must be called before polling this Submit OTP Status endpoint.completed response includes bank account numbers, PAN, mobile numbers, and email addresses — all classified as sensitive personal and financial data under India's Digital Personal Data Protection Act (DPDPA). Ensure this data is encrypted at rest, transmitted only over HTTPS, and accessed on a strict need-to-know basis within your systems.certificate_link Expiry: The pre-signed S3 URL in certificate_link is time-limited (as indicated by the X-Amz-Expires parameter). Archive the certificate document to your own secure storage immediately after retrieval if long-term access is required; do not rely on the URL remaining valid beyond its expiry window.update_required Handling: When this status is returned, the Udyam portal itself requires the MSME entity to update their registration information. Your application must not attempt to modify or bypass this requirement. Direct users to the official Udyam portal to complete the mandatory update before retrying verification.client_id, final status, and submission timestamp of each verification session — without sensitive field values such as PAN or bank account numbers — as part of your KYC audit records for regulatory review purposes.curl --location --request POST 'https://kyc-api.surepass.app/api/v1/udyam-otp/async/submit-otp-status' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"client_id": "udyam_otp_async_bgKqddCbbfhmJGqouVIK"
}'{
"data": {
"status": "pending",
"client_id": "udyam_otp_async_vODQxfCUBuFfdwwqjwBw",
"type_of_enterprise": null,
"major_activity": null,
"type_of_organisation": null,
"enterprise_name": null,
"owner_name": null,
"pan_number": null,
"do_you_have_gstin": null,
"user_email_id": null,
"social_category": null,
"gender": null,
"specially_abled": null,
"date_of_incorporation": null,
"date_commencement_of_production_business": null,
"bank_details": [],
"employment_details": [],
"investment_details": [],
"official_address": {
"flat_or_door_or_block": null,
"name_of_premises_or_building": null,
"village_or_town": null,
"block": null,
"road_or_street_or_lane": null,
"city": null,
"state": null,
"district": null,
"pin_code": null,
"mobile_number": null,
"email_id": null
},
"national_industry_classification_code": [],
"are_you_interested_to_get_registered_on_government_e_market_gem_portal": null,
"are_you_interested_to_get_registered_on_treds_portals_one_or_more": null,
"are_you_interested_to_get_registered_on_national_career_Service_ncs_portal": null,
"are_you_interested_to_get_registered_on_nsic_b2b_portal": null,
"registration_date": null,
"last_updated_date": null,
"unit_details": [],
"type_of_enterprise_details": [],
"certificate_link": null
},
"status_code": 200,
"success": true,
"message": "Success",
"message_code": "success"
}