Public Registry of Commerce - SIGER
Description
A solution that allows information queries from the Public Registry of Commerce of Mexico (SIGER). You can search by document number, by FME (Folio Mercantil Electrónico) or by company name. Depending on the search, the result may include the companies found with their registry documents, document data, registry background, registered acts, entry data and a link to the PDF of the registry document.
| Step | Endpoint | Description |
|---|---|---|
| 1 | POST /mex-identity/siger/report | Creates the report and returns a reportId |
| 2 | GET /mex-identity/siger/report/{reportId} | Polls the report status until it stops being PENDING |
These endpoints require Bearer Token authentication. Contact IT support to get credentials.
Search criteria
Each report is created with exactly one search criterion:
| Criterion | Format | Result |
|---|---|---|
documentNumber | 8 to 40 letters, digits or hyphens | The document data and a link to its PDF (data) |
fme | N- followed by 5 to 20 digits, for example N-2023093108 | The company and its registry documents (result) |
companyName | At least 4 characters | The companies that match the name and their registry documents (result) |
A FME without the N- prefix is a historic one and cannot be used in the fme criterion. Search for that company by companyName instead.
Report statuses
The result is asynchronous: the report is created in PENDING and the registry answer arrives afterwards, usually between a few seconds and about 4 minutes. Poll the report (for example every 10 seconds) until it stops being PENDING.
| Status | Meaning |
|---|---|
PENDING | The search is still being processed |
READY | The result is available (data for a document number, result for a FME or a company name) |
SELECTION_REQUIRED | The company name matches more than 3 companies. result.companies lists the candidates; choose one and create a new report (see Search by company name returns a list) |
If the same search already has an active report, the POST returns the reportId of that report (and its current status) instead of creating a new one.
1. Create SIGER report
HTTP method POST
Endpoint
https://apidev.msla-id.com/experience-company-ubos-api-v1/api/idv-govcheck/v1/mex-identity/siger/report
Request header parameter
| NAME | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| Authorization | ✅ | string | Bearer JWT token |
Request body parameters
Send exactly one of the following parameters.
| NAME | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| documentNumber | ⚠️ | string | Unique document number, 8 to 40 letters, digits or hyphens. The result includes the PDF |
| fme | ⚠️ | string | Electronic Commercial Folio, N- followed by 5 to 20 digits |
| companyName | ⚠️ | string | Company name, at least 4 characters. To choose among candidates, send the exact name returned in the list |
Request examples
POST /mex-identity/siger/report
Search by document number:
{
"documentNumber": "202300308295006I"
}
Search by FME:
{
"fme": "N-2023093108"
}
Search by company name:
{
"companyName": "EMPRESA EJEMPLO"
}
Status code responses
| Code | Description |
|---|---|
| 202 | Report created, processing in background |
| 400 | Invalid or missing search criteria |
| 401 | Invalid or expired token |
| 403 | No permissions for the resource |
| 500 | Internal server error |
| 504 | Gateway timeout |
The full documentation error codes can be found here.
Response 202 status code
{
"traceId": "542fc743fffda052",
"timestamp": "2026-10-08 10:30:12",
"data": {
"reportId": "550e8400-e29b-41d4-a716-446655440000",
"status": "PENDING"
}
}
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
| reportId | string | UUID of the report; use it in the polling GET |
| status | string | PENDING — processing. READY or SELECTION_REQUIRED — result already available (existing report). |
Response 400 status code
The code identifies the cause:
| CODE | MESSAGE | CAUSE |
|---|---|---|
IDV-6001 | SIGER: One of documentNumber, fme or companyName must be provided | Empty body, or a blank value |
IDV-6008 | SIGER: Only one search criterion can be provided | More than one criterion in the same request |
IDV-6009 | SIGER: Invalid format for the search criterion | fme without N- or with fewer than 5 digits, companyName shorter than 4 characters, or an invalid documentNumber |
{
"traceId": "542fc743fffda052",
"timestamp": "2026-10-08 10:30:12",
"code": "IDV-6009",
"message": "SIGER: Invalid format for the search criterion",
"data": null
}
Response 401 status code
{
"timestamp": "2026-10-08T10:30:12.000Z",
"status": 401,
"error": "Unauthorized",
"message": "Bearer token is missing or invalid",
"path": "/api/idv-govcheck/v1/mex-identity/siger/report"
}
Response 500 status code
{
"traceId": "86c6eda02b615604",
"timestamp": "2026-10-08 10:32:20",
"code": "IDV-1008",
"message": "Error in the source of origin, please contact an administrator!",
"data": null
}
2. Get SIGER report status (polling)
HTTP method GET
Endpoint
https://apidev.msla-id.com/experience-company-ubos-api-v1/api/idv-govcheck/v1/mex-identity/siger/report/{reportId}
Request header parameter
| NAME | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| Authorization | ✅ | string | Bearer JWT token |
Path parameter
| NAME | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| reportId | ✅ | string | UUID returned by the POST |
Request example
GET /mex-identity/siger/report/550e8400-e29b-41d4-a716-446655440000
Status code responses
| Code | Description |
|---|---|
| 200 | OK |
| 400 | The registry rejected the search input |
| 401 | Unauthorized |
| 403 | No permissions for the resource |
| 404 | Report not found or expired, or no registry record found for the search |
| 500 | Internal server error or error in the registry data |
| 504 | The registry is unavailable or did not answer in time |
Response 200 status code
The response always includes reportId, status and searchType (DOCUMENT_NUMBER, FME or COMPANY_NAME). The result goes in data for a document number, and in result for a FME or a company name.
When status = PENDING:
{
"traceId": "a1b2c3d4e5f60002",
"timestamp": "2026-10-08 10:30:20",
"data": {
"reportId": "550e8400-e29b-41d4-a716-446655440000",
"status": "PENDING",
"searchType": "COMPANY_NAME"
}
}
When status = READY and searchType = DOCUMENT_NUMBER:
{
"traceId": "a1b2c3d4e5f60003",
"timestamp": "2026-10-08 10:31:02",
"data": {
"reportId": "550e8400-e29b-41d4-a716-446655440000",
"status": "READY",
"searchType": "DOCUMENT_NUMBER",
"data": {
"uniqueDocumentNumber": "202300308295006I",
"registeredActs": {
"act": "CONSTITUCION",
"entryDate": "2020-01-15",
"fme": "N-2020012345",
"precodedForm": "F-01"
},
"registryBackground": {
"fme": "N-2020012345",
"name": "EMPRESA EJEMPLO SA DE CV"
},
"documentData": {
"notary": "Notario 123",
"number": "456",
"type": "ESCRITURA"
},
"entryData": {
"dateTime": "2020-01-15T10:30:00",
"nci": "NCI-789",
"requester": "MSLA"
},
"relatedPayment": {
"date": "2020-01-15",
"amount": 1500.00,
"reference": "PAY-001"
},
"document": "https://bucket-name.s3.us-west-2.amazonaws.com/siger/document.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=604799&X-Amz-Signature=..."
}
}
}
The document field contains an AWS S3 pre-signed URL pointing to the PDF of the registry document. It is valid for 7 days (168 hours). The value is shown as a placeholder; the actual URL will be different.
When status = READY and searchType is FME or COMPANY_NAME:
{
"traceId": "a1b2c3d4e5f60004",
"timestamp": "2026-10-08 10:31:40",
"data": {
"reportId": "550e8400-e29b-41d4-a716-446655440000",
"status": "READY",
"searchType": "COMPANY_NAME",
"result": {
"total": 1,
"shown": 1,
"hasMore": false,
"selectionRequired": [],
"companies": [
{
"fme": "N-2020012345",
"companyName": "EMPRESA EJEMPLO, SOCIEDAD ANONIMA DE CAPITAL VARIABLE",
"registryOffice": "Puebla",
"queryStatus": "AVAILABLE",
"payment": null,
"documents": [
{
"type": "M4 - Constitución de Sociedad",
"act": "Constitución de sociedad mercantil",
"nci": "202000100001",
"entryDate": "15/01/2020 12:02:00 T.CENTRO",
"registrationDate": "15/01/2020 12:02:00 T.CENTRO",
"documentNumber": "56058",
"modality": "Inscripción vía web inmediata",
"uniqueDocumentNumber": "202000100001000X",
"pdfBytes": 1691958,
"details": {
"notary": {
"name": "Nombre del Notario",
"number": 180,
"state": "Ciudad de México",
"municipality": "Benito Juárez"
},
"instrumentNumber": "56,058",
"book": 1323,
"instrumentDate": "2020-01-10",
"companyName": "EMPRESA EJEMPLO, SOCIEDAD ANONIMA DE CAPITAL VARIABLE",
"companyData": {
"companyType": "Sociedad Anónima",
"variableCapital": true,
"duration": "INDEFINIDA",
"minimumShareCapital": 50000.0
},
"partners": [
{
"fullName": "NOMBRE SOCIO EJEMPLO",
"nationality": "Mexicana",
"shares": 100
}
]
}
}
]
}
]
}
}
}
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
| result.total | integer | Number of companies found |
| result.shown | integer | Number of companies returned (maximum 100) |
| result.hasMore | boolean | true if the registry found more companies than the ones shown |
| result.selectionRequired | array | Field to send in the new report when status = SELECTION_REQUIRED, for example ["companyName"] |
| companies[].fme | string | FME of the company |
| companies[].companyName | string | Company name exactly as it appears in the registry (it can include registry spelling errors) |
| companies[].registryOffice | string | Registry office |
| companies[].queryStatus | string | AVAILABLE, PAYMENT_REQUIRED or PENDING_SELECTION |
| companies[].documents | array | Registry documents of the company: type, act, NCI, dates, document number, modality, size of the PDF in bytes (pdfBytes) and the details of the document (notary, company data, partners, administration, among others, depending on the act) |
In a search by FME or by company name the PDF is not delivered. To get the PDF of a document, create a report with its uniqueDocumentNumber (8 to 40 characters) using the documentNumber criterion.
Search by company name returns a list
When the company name matches more than 3 companies, the report ends in SELECTION_REQUIRED and result.companies lists the candidates (up to 100) without documents, each with queryStatus = PENDING_SELECTION. Getting the result of a specific company takes two searches:
- Create a report with the
companyNameyou have (for exampleEMPRESA EJEMPLO) and poll it until it returnsSELECTION_REQUIREDwith the list. - Choose one company from
result.companiesand copy itscompanyNameexactly as it came in the list. - Create a new report with that exact
companyNameand poll it until it returnsREADYwith the company and its documents.
When status = SELECTION_REQUIRED:
{
"traceId": "a1b2c3d4e5f60005",
"timestamp": "2026-10-08 10:32:10",
"data": {
"reportId": "550e8400-e29b-41d4-a716-446655440000",
"status": "SELECTION_REQUIRED",
"searchType": "COMPANY_NAME",
"result": {
"total": 127,
"shown": 100,
"hasMore": true,
"selectionRequired": ["companyName"],
"companies": [
{
"fme": "N-2020012345",
"companyName": "EMPRESA EJEMPLO, SOCIEDAD ANONIMA DE CAPITAL VARIABLE",
"registryOffice": "Puebla",
"queryStatus": "PENDING_SELECTION",
"payment": null,
"documents": []
},
{
"fme": "N-2021067890",
"companyName": "EMPRESA EJEMPLO SERVICIOS, S.A. DE C.V.",
"registryOffice": "Ciudad de México",
"queryStatus": "PENDING_SELECTION",
"payment": null,
"documents": []
}
]
}
}
}
Use the companyName of the candidate to make the second search. Do not use its fme: the FME of a candidate can be a historic one (without N-) and will not work in the fme criterion.
Response 400 status code
The registry rejected the search input.
| CODE | MESSAGE |
|---|---|
IDV-6003 | SIGER: Invalid input data |
IDV-6005 | SIGER: Invalid input parameter |
{
"traceId": "a1b2c3d4e5f60006",
"timestamp": "2026-10-08 10:33:00",
"code": "IDV-6003",
"message": "SIGER: Invalid input data",
"data": null
}
Response 404 status code
| CODE | MESSAGE | CAUSE |
|---|---|---|
IDV-6007 | SIGER: Report not found or has expired | The reportId does not exist or is no longer available |
IDV-6002 | SIGER: No registry record found for the provided search | The registry has no record that matches the search |
{
"traceId": "a1b2c3d4e5f60001",
"timestamp": "2026-10-08 10:45:00",
"code": "IDV-6007",
"message": "SIGER: Report not found or has expired",
"data": null
}
Response 500 status code
| CODE | MESSAGE | CAUSE |
|---|---|---|
IDV-6006 | SIGER: Data error in registry | Error in the registry data |
IDV-1008 | Error in the source of origin, please contact an administrator! | Internal or origin error |
{
"traceId": "86c6eda02b615604",
"timestamp": "2026-10-08 10:32:20",
"code": "IDV-1008",
"message": "Error in the source of origin, please contact an administrator!",
"data": null
}
Response 504 status code
The registry is unavailable or did not deliver a result in time. A report that stays in PENDING for more than 60 minutes also ends with this error. Create a new report to try again.
{
"traceId": "a1b2c3d4e5f60007",
"timestamp": "2026-10-08 11:35:00",
"code": "IDV-6004",
"message": "SIGER: Service temporarily unavailable, please retry later",
"data": null
}