Skip to main content

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.

StepEndpointDescription
1POST /mex-identity/siger/reportCreates the report and returns a reportId
2GET /mex-identity/siger/report/{reportId}Polls the report status until it stops being PENDING
info

These endpoints require Bearer Token authentication. Contact IT support to get credentials.

Search criteria​

Each report is created with exactly one search criterion:

CriterionFormatResult
documentNumber8 to 40 letters, digits or hyphensThe document data and a link to its PDF (data)
fmeN- followed by 5 to 20 digits, for example N-2023093108The company and its registry documents (result)
companyNameAt least 4 charactersThe companies that match the name and their registry documents (result)
tip

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.

StatusMeaning
PENDINGThe search is still being processed
READYThe result is available (data for a document number, result for a FME or a company name)
SELECTION_REQUIREDThe 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​

NAMEREQUIREDTYPEDESCRIPTION
Authorization✅stringBearer JWT token

Request body parameters​

Send exactly one of the following parameters.

NAMEREQUIREDTYPEDESCRIPTION
documentNumber⚠️stringUnique document number, 8 to 40 letters, digits or hyphens. The result includes the PDF
fme⚠️stringElectronic Commercial Folio, N- followed by 5 to 20 digits
companyName⚠️stringCompany 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​

CodeDescription
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"
}
}
FIELDTYPEDESCRIPTION
reportIdstringUUID of the report; use it in the polling GET
statusstringPENDING — processing. READY or SELECTION_REQUIRED — result already available (existing report).

Response 400 status code​

The code identifies the cause:

CODEMESSAGECAUSE
IDV-6001SIGER: One of documentNumber, fme or companyName must be providedEmpty body, or a blank value
IDV-6008SIGER: Only one search criterion can be providedMore than one criterion in the same request
IDV-6009SIGER: Invalid format for the search criterionfme 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​

NAMEREQUIREDTYPEDESCRIPTION
Authorization✅stringBearer JWT token

Path parameter​

NAMEREQUIREDTYPEDESCRIPTION
reportId✅stringUUID returned by the POST

Request example​

GET /mex-identity/siger/report/550e8400-e29b-41d4-a716-446655440000

Status code responses​

CodeDescription
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=..."
}
}
}
note

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
}
]
}
}
]
}
]
}
}
}
FIELDTYPEDESCRIPTION
result.totalintegerNumber of companies found
result.shownintegerNumber of companies returned (maximum 100)
result.hasMorebooleantrue if the registry found more companies than the ones shown
result.selectionRequiredarrayField to send in the new report when status = SELECTION_REQUIRED, for example ["companyName"]
companies[].fmestringFME of the company
companies[].companyNamestringCompany name exactly as it appears in the registry (it can include registry spelling errors)
companies[].registryOfficestringRegistry office
companies[].queryStatusstringAVAILABLE, PAYMENT_REQUIRED or PENDING_SELECTION
companies[].documentsarrayRegistry 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)
note

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:

  1. Create a report with the companyName you have (for example EMPRESA EJEMPLO) and poll it until it returns SELECTION_REQUIRED with the list.
  2. Choose one company from result.companies and copy its companyName exactly as it came in the list.
  3. Create a new report with that exact companyName and poll it until it returns READY with 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": []
}
]
}
}
}
caution

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.

CODEMESSAGE
IDV-6003SIGER: Invalid input data
IDV-6005SIGER: 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​

CODEMESSAGECAUSE
IDV-6007SIGER: Report not found or has expiredThe reportId does not exist or is no longer available
IDV-6002SIGER: No registry record found for the provided searchThe 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​

CODEMESSAGECAUSE
IDV-6006SIGER: Data error in registryError in the registry data
IDV-1008Error 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
}