Fetch and Get All Files API
Company All Files API
Retrieve every public filing for an Indian company or LLP from the Ministry of Corporate Affairs (MCA) registry: incorporation documents, certificates, annual returns, financial statements, charge documents. Each document is returned as a downloadable link.
Overview
The API is asynchronous. You start a request, receive a requestId immediately, and collect the documents once they are ready, by polling or through a callback.
Item | Detail |
|---|---|
Base URL | Provided with your onboarding credentials |
Content type | application/json for requests and responses |
Authentication | API key in the Authorization header |
Identifiers accepted | CIN (companies) or LLPIN (limited liability partnerships) |
Typical turnaround | 30 mins to 60 mins; older or large companies can take longer |
Document categories returned: Certificates, Incorporation Documents, Annual Returns, Financial Statements, Charge Documents, and other public filings held by the registry.
Authentication
Every request must carry your API key in the Authorization header.
Authorization: <YOUR_API_KEY>
Content-Type: application/jsonNote: Your API key is issued during onboarding. Keep it server-side. Never expose it in client apps or browsers.
Quickstart
Two calls take you from an identifier to downloadable files.
Initiate retrieval
curl --location 'https://api-preproduction.signzy.app/api/v3/roc/fetchAllFilesByCin' \
--header 'Authorization: ****' \
--header 'content-type: application/json' \
--data-raw '{
"cin": "L17110MH1973PLC019786",
"llpin": "AAA-0000",
"callbackUrl":"https://sample.callback.com"
}'Either cin or llpin can be passed in the API. Passing both values at same time would result in validation error
Check status (Get All Files API)
curl --location 'https://api-preproduction.signzy.app/api/v3/roc/getAllFilesByCin' \
--header 'Authorization: **********' \
--header 'x-client-unique-id: *******' \
--header 'Content-type: application/json' \
--data-raw '{
"requestId": "6ab645eea241f90012c18312"
}'Download files
Once status is completed (or partially_completed), download each file from its documentUrl.
- Polling: call Get with the requestId until the status leaves REQUESTED.
- Callback: pass callbackUrl in the Fetch call. We POST the result when retrieval finishes.
Fetch Company Documents
POST /api/fetchCompanyAllDocuments
Starts document retrieval for one company or LLP. Returns within a second, regardless of registry speed.
Request body
Field | Type | Required | Description |
|---|---|---|---|
cin | string | One of cin / llpin | 21-character Corporate Identification Number. Leading and trailing spaces are ignored. |
llpin | string | One of cin / llpin | LLP Identification Number, for example AAB-1234. Case-insensitive. |
callbackUrl | string | No | HTTP or HTTPS URL we POST the result to when retrieval finishes. |
Warning: Send exactly one of cin or llpin. Sending both, or neither, returns 400.
Sample request
{
"cin": "U01460TN2025PTC185280",
"callbackUrl": "https://client.example.com/mca/callback"
}Response 200
{
"result": {
"cin": "U01460TN2025PTC185280",
"llpin": "",
"requestId": "66f0a1b2c3d4e5f60718293a",
"callbackUrl": "https://client.example.com/mca/callback"
}
}Response Table
Field | Description |
|---|---|
cin / llpin | The identifier sent, normalised. The unused key is an empty string. |
requestId | 24-character id. Store it; it is the only key for retrieving results. |
callbackUrl | Echoed only when supplied. |
Note: A registry outage at request time does not fail this call. Retrieval is retried in the background and the requestId stays valid.
Errors
HTTP | reason | message | Cause | Retry? |
|---|---|---|---|---|
400 | BAD_REQUEST | Either cin or llpin must be provided | Neither identifier sent, or both empty | No, fix request |
400 | BAD_REQUEST | Both CIN and LLPIN cannot be passed together | Both identifiers sent | No, fix request |
400 | BAD_REQUEST | Invalid CIN passed | CIN fails format validation | No, fix request |
400 | BAD_REQUEST | Invalid LLPIN passed | LLPIN fails format validation | No, fix request |
400 | BAD_REQUEST | Invalid URL passed in callbackUrl | Callback URL is invalid | No, fix request |
409 | CONFLICT | There were some internal conflict retrieving information from appropriate resources | Unexpected internal failure | Yes |
Get Company Documents
POST /api/getCompanyAllDocument
Returns the current status of a request and, once retrieval finishes, the document list with download links. Each call also issues fresh download links.
Request body
Field | Type | Required | Description |
|---|---|---|---|
requestId | string | Yes | The id returned by Fetch. |
Response 200: retrieval in progress
//Sample 200 response (fetch status in pending)
{
"result": {
"companyDocuments": {
"cin": "U01460TN2025PTC185280",
"llpin": "",
"callbackUrl": "https://client.example.com/mca/callback",
"requestId": "66f0a1b2c3d4e5f60718293a",
"files": [],
"status": "REQUESTED",
"updatedTimestamp": 1789977815,
"isComplete": 0
}
}
}Response 200: Partial retrieval
// Sample 200 response (fetch status is partial)
{
"result": {
"companyDocuments": {
"cin": "U01460TN2025PTC185280",
"llpin": "",
"callbackUrl": "https://client.example.com/mca/callback",
"requestId": "66f0a1b2c3d4e5f60718293a",
"files": [
{
"documentType": "Certificates",
"documentUrl": "https://.../8293a-1789977840-41235.pdf?...",
"documentName": "Certificate of Incorporation",
"documentFilingDate": "30/09/2025",
"documentStatus": "completed"
}
],
"status": "partially_completed",
"updatedTimestamp": 1789977874,
"isComplete": 1
}
}
}Response 200: retrieval finished
//Sample 200 response (fetch status is complete)
{
"result": {
"companyDocuments": {
"cin": "U01460TN2025PTC185280",
"llpin": "",
"callbackUrl": "https://client.example.com/mca/callback",
"requestId": "66f0a1b2c3d4e5f60718293a",
"files": [
{
"documentType": "Certificates",
"documentUrl": "https://.../8293a-1789977840-41235.pdf?...",
"documentName": "Certificate of Incorporation",
"documentFilingDate": "30/09/2025",
"documentStatus": "completed"
},
{
"documentType": "Incorporation Documents",
"documentUrl": "https://.../8293a-1789977841-77120.pdf?...",
"documentName": "INC-33 eMOA",
"documentFilingDate": "10/10/2025",
"documentStatus": "completed"
},
{
"documentType": "Annual Returns",
"documentUrl": "https://.../8293a-1789977842-09876.pdf?...",
"documentName": "MGT-7A",
"documentFilingDate": "12/01/2026",
"documentStatus": "completed"
}
],
"status": "completed",
"updatedTimestamp": 1789977874,
"isComplete": 1
}
}
}companyDocuments fields
Field | Type | Description |
|---|---|---|
cin / llpin | string | Entity identifier. The unused key is an empty string. |
callbackUrl | string | Callback URL registered at Fetch, or empty. |
requestId | string | Echo of the request id. |
status | string | REQUESTED, completed, partially_completed or failed. See Statuses and Lifecycle. |
isComplete | number | 1 only when status is completed; otherwise 0. |
updatedTimestamp | number | Unix time (seconds) of the last state change. |
files | array | Empty until retrieval finishes. One entry per document. |
files[] fields
Field | Type | Description |
|---|---|---|
documentType | string | Registry category, for example Certificates, Incorporation Documents, Annual Returns, Financial Statements, Charge Documents. |
documentName | string | Registry form or document name, for example Certificate of Incorporation, INC-33 eMOA, MGT-7A, AOC-4, AOA, MOA, COI etc. |
documentFilingDate | string | Filing date as dd/mm/yyyy. - when the registry reports none. |
documentUrl | string or null | Download link. null only while the registry is still producing the document. |
documentStatus | string | completed when downloadable; pending or awaiting_retry while the registry is still producing it. |
Note: The same document can appear more than once when the registry holds several versions, for example an amended Articles of Association. Use documentFilingDate to pick the latest.
Errors
HTTP | reason | message | Cause | Retry? |
|---|---|---|---|---|
400 | BAD_REQUEST | Invalid RequestId | Missing, malformed or unknown requestId | No, fix request |
409 | CONFLICT | There were some internal conflict retrieving information from appropriate resources | Retrieval retired after the maximum wait, or internal failure | Place a new Fetch |
410 | EXPIRED | document link expired - please re-fetch | Validity window for this requestId has passed | Place a new Fetch |
Statuses and Lifecycle
Request status
status | isComplete | Meaning | Client action |
|---|---|---|---|
REQUESTED | 0 | Retrieval in progress. files is empty. | Keep polling or wait for the callback. |
completed | 1 | Every document is downloadable. | Download company documents available |
partially_completed | 0 | Most documents are ready; some documents are failed to upload leading to partial completion | Download company documents available |
failed | 0 | The registry reported failure for this entity. | Verify the identifier. If correct, place a new Fetch later. |
Document status
documentStatus | documentUrl | Meaning |
|---|---|---|
completed | Link | Ready to download. |
pending | null | Registry is producing the document. |
awaiting_retry | null | Registry production failed once; a retry is scheduled. |
Lifecycle limits
- Partial results: If the registry never delivers the remaining documents, the status stops changing and those entries stay as they are.

Timing and Polling
Stage | Typical | Maximum |
|---|---|---|
Fetch response | Under 1 s |  |
Get response | Under 200 ms |  |
Registry retrieval | 1 to 5 minutes | 4 days, then retired (409) |
Callback delivery | Seconds after completion | See Callbacks |
Recommended polling
- First 10 minutes: every 30 seconds.
- After 10 minutes: every 5 minutes.
- Stop when: status is anything other than REQUESTED, or Get returns 409 or 410.
Tip: For partially_completed, continue polling at a low rate (for example, hourly) for up to 2 days to collect remaining documents.
Link Validity and Expiry
Item | Validity | On expiry | Recovery |
|---|---|---|---|
documentUrl | 7 days from first delivery | Download returns 410 EXPIRED | Call Get again for fresh links |
Links in callbacks follow the same 7-day rule.
Warning: Do not store documentUrl values for later use. Store the requestId and fetch fresh links when needed, or download and store the files themselves.
Callbacks
When callbackUrl is supplied, we POST the result to it when the request reaches completed, partially_completed or failed.
Payload
The body is the companyDocuments object from the Get response, without the outer result wrapper.
{
"cin": "U01460TN2025PTC185280",
"llpin": "",
"callbackUrl": "https://client.example.com/mca/callback",
"requestId": "66f0a1b2c3d4e5f60718293a",
"files": [
"... same entries as Get ..."
],
"status": "completed",
"updatedTimestamp": 1789977874,
"isComplete": 1
}Delivery rules
- Response: your endpoint must return any 2xx within 5 seconds.
- Retries: a connection failure or non-2xx response is retried twice with short backoff.
- Timeouts: not retried.
- Failed delivery: the result remains available through Get.
- Multiple callbacks: a partially_completed result that later becomes completed triggers a second callback with the full file list. Accept more than one POST per requestId
Errors
Error format
Every API error uses the same shape. The HTTP status matches statusCode.
{
"error": {
"name": "error",
"message": "Invalid RequestId",
"status": 400,
"reason": "BAD_REQUEST",
"type": "Bad Request",
"statusCode": 400
}
}- reason: use for programmatic handling.
- message: use for logs.
Error reference
HTTP | reason | Source | Cause | Action |
|---|---|---|---|---|
400 | BAD_REQUEST | Fetch, Get | Invalid or missing input | Fix the request |
409 | CONFLICT | Fetch | Internal failure | Retry |
409 | CONFLICT | Get | Retrieval retired after 4 days, or internal failure | Place a new Fetch |
410 | EXPIRED | Get | requestId validity window passed | Place a new Fetch |
Integration Best Practices
- Store requestId against your own reference. It is the only way to retrieve results.
- Parse filing dates. documentFilingDate is a dd/mm/yyyy string; do not compare as text.
- Pick the latest version of duplicate documents using documentFilingDate.
- Expect format-only validation. A well-formed CIN that does not exist ends as failed, or completed with empty files, not as a Fetch error.
- Handle XFA PDFs. Older MCA e-forms (MGT-7, eMOA, e-AOA and some certificates) are XFA PDFs that render only in Adobe Acrobat.
- Download promptly or renew links through Get; do not rely on stored links.
Support
Contact [email protected]. Please include:
- requestId
- CIN or LLPIN
- Request timestamp
- Full error response, if any