Mandas CURP y NSS. Recibes si tiene empleo vigente, quién es el patrón que la tiene dada de alta, su salario base de cotización y los días cotizados del periodo — en JSON, listo para tu decisión. Sin PDF que leer ni captura manual.
¿Dudas técnicas? Habla con un ingeniero por WhatsApp — 0% bots.
Elige un escenario y mira qué recibe tu sistema:
Datos ficticios con la misma estructura que regresa el API. Ninguno corresponde a una persona real.
La persona te dice dónde trabaja y cuánto gana. Esta consulta te dice qué reportó su patrón al IMSS. La diferencia entre ambas cosas es justo donde vive el riesgo.
No es una constancia en PDF que alguien tenga que abrir y capturar. Cada dato llega en su propio campo, con el mismo nombre siempre.
| Qué recibes | Campo | Para qué te sirve |
|---|---|---|
| Si tiene empleo vigente | type | La decisión principal: hay alta vigente ante el IMSS o no la hay. |
| Quién es el patrón | employerName · employerRfc · employerRegistration · state | Razón social, RFC, registro patronal y estado. Contrasta contra la empresa que la persona declaró. |
| Salario base de cotización | baseSalary.amount | El salario diario que el patrón reporta al IMSS, en pesos. Señal de ingreso contrastable con lo declarado. |
| Días cotizados | contributedDays | Días del periodo con cotización. Señal de continuidad: un mes completo no es lo mismo que unos días sueltos. |
| Modalidad de aseguramiento | modality | El tipo de afiliación según el catálogo del IMSS: trabajador de la ciudad, del campo, doméstico, independiente, del gobierno… |
| Identidad confirmada | personalInfo · nss | Nombre completo, CURP y NSS tal como los tiene el IMSS. Cruza contra el nombre que capturó la persona. |
| Vigencia del reporte | reportDetails | Periodo que cubre el reporte y fecha de emisión, para saber qué tan actual es el dato que estás usando. |
Si cotiza con más de un patrón, vienen todos. employmentInformation es una lista: cada empleo con su propio salario base de cotización y sus días. Así ves el ingreso completo y detectas empleos simultáneos.
Una precisión sobre el salario: el salario base de cotización es el que el patrón reporta al IMSS para calcular cuotas y tiene topes legales. Es una señal verificable de ingreso — no un recibo de nómina, y no incluye bonos ni comisiones.
El campo type nombra el caso con un código estable. Tu backend hace un switch, no interpreta textos.
| type | Qué pasó | Qué hacer |
|---|---|---|
SUCCESS | Tiene empleo vigente. Vienen patrón, salario base de cotización y días cotizados. | Avanza. Usa el salario y los días en tu modelo de decisión. |
INACTIVE_EMPLOYMENT | La persona existe en el IMSS, pero hoy no tiene un alta vigente. | Analiza. No es un rechazo: puede ser independiente o estar entre empleos. Pide otra evidencia de ingreso. |
MISMATCH_CURP_NSS | La CURP y el NSS no corresponden a la misma persona. | Analiza. Lo más común es un error de captura; también puede ser un NSS ajeno. |
CURP_NOT_FOUND | El IMSS no localizó esa CURP. | Analiza. Verifica la CURP en RENAPO antes de concluir. |
IMSS_INCONSISTENT_DATA | La CURP existe, pero sus datos están inconsistentes del lado del IMSS. | Analiza. El dato no es utilizable; la persona tendría que corregirlo ante el IMSS. |
IMSS_OPERATION_LIMIT | Se alcanzó el límite diario de operaciones del IMSS. | Reintenta más tarde. No es un problema del dato de tu usuario. |
SERVICE_UNAVAILABLE | El IMSS no está respondiendo en este momento. | Reintenta. Llega con billable: false: no se te cobra. |
INVALID_REQUEST | La CURP o el NSS vienen mal formados. | Corrige la captura. También llega con billable: false. |
Ningún caso te deja adivinando: cuando no hay un dato utilizable, la respuesta dice exactamente por qué. Ese es el contrato de todos los servicios de OrigoID.
Consultamos al IMSS en cada llamada, sin cache: el estatus es el de este momento. Mismo envelope que todos los servicios de OrigoID — aprendes el contrato una vez y te sirve para IMSS, CURP, INE, RFC y más.
INVALID_REQUEST y billable: false.const res = await fetch("https://api.origoid.com/mex/social-security/v1/imss-employment-status", { method: "POST", headers: { "x-api-key": process.env.ORIGOID_API_KEY, "content-type": "application/json", }, body: JSON.stringify({ curp: "XEXX010101HNEXXXA4", nss: "00000000000", }), }); const result = await res.json();
import os, requests res = requests.post( "https://api.origoid.com/mex/social-security/v1/imss-employment-status", headers={"x-api-key": os.environ["ORIGOID_API_KEY"]}, json={"curp": "XEXX010101HNEXXXA4", "nss": "00000000000"}, timeout=60, ) result = res.json()
curl -X POST https://api.origoid.com/mex/social-security/v1/imss-employment-status \ -H "x-api-key: $ORIGOID_API_KEY" \ -H "content-type: application/json" \ -d '{"curp": "XEXX010101HNEXXXA4", "nss": "00000000000"}'
{
"status": "OK",
"type": "SUCCESS",
"data": {
"personalInfo": { "givenNames": "NOMBRE EJEMPLO", "firstSurname": "APELLIDO" },
"employmentInformation": [{
"employerName": "EMPRESA EJEMPLO S.A. DE C.V.",
"employerRfc": "XAXX010101000",
"state": "CIUDAD DE MEXICO",
"baseSalary": { "amount": "500.00", "currency": "MXN" },
"contributedDays": 28
}],
"reportDetails": { "reportPeriod": "2026-02" }
},
"billable": true
}
Hay un servicio aparte que lo obtiene a partir de la CURP y lo encadenas con esta consulta: dos llamadas síncronas, una tras otra, sin salir del mismo flujo. Pedir una CURP es mucho más fácil que pedir la tarjeta del Seguro Social. Es una llamada distinta y consume su propio crédito.
Lo que cambia entre proveedores: si el dato llega listo para decidir o hay que leerlo a mano, si se te dice con claridad cuando no hay dato, y qué pasa con la información de tu usuario después.
OrigoID no es el IMSS ni actúa en su nombre: es un medio técnico de consulta y cotejo respecto de esa fuente. La exactitud y la vigencia de la información dependen del propio instituto.
La CURP y el NSS, los dos. El IMSS verifica que correspondan entre sí, por eso no basta con uno. Si no tienes el NSS, hay un servicio aparte que lo obtiene desde la CURP: es otra llamada y consume su propio crédito.
No exactamente. Es el salario diario que el patrón reporta al IMSS para calcular cuotas, y tiene topes legales. Sirve como señal verificable de ingreso, contrastable con lo que la persona declaró, pero no sustituye un recibo de nómina ni incluye bonos o comisiones.
Vienen todos. employmentInformation es una lista, cada empleo con su salario base de cotización y sus días cotizados. Así ves el ingreso completo y detectas empleos simultáneos.
No. INACTIVE_EMPLOYMENT significa que hoy no hay un alta vigente ante el IMSS. Puede ser una persona independiente, con ingreso informal o recién salida de un empleo. Es señal para pedir otra evidencia, no un rechazo automático.
No. Cada consulta se valida, se responde y se descarta, sin guardar los datos. Cero retención en todas nuestras regiones.
1 crédito por consulta, igual que la mayoría de los servicios. Empiezas con créditos de cortesía y el precio por crédito baja con tu volumen; todos los planes están publicados.
Créditos de cortesía para consultar en producción, contra el IMSS. El acceso se habilita tras una breve validación de tu empresa.