Prueba gratis la validación estructural aquí mismo. Cuando necesites el estatus real en RENAPO —a quién pertenece, si está vigente o dada de baja— el API responde en 298 ms (mediana medida en producción).
¿Dudas técnicas? Habla con un ingeniero por WhatsApp — 0% bots.
Validación estructural con el algoritmo oficial del dígito verificador — corre en tu navegador, no enviamos tu CURP a ningún servidor. El estatus en RENAPO lo responde el API.
Una validación contra RENAPO regresa el registro del titular y el estatus exacto del documento. Ahí vive la detección de fraude: una CURP puede tener formato perfecto y pertenecer a una persona fallecida.
ANAlta normalVigente y al corriente. El caso feliz.type: "SUCCESS"AHAlta con homonimiaLos primeros 16 caracteres coinciden con otra CURP.type: "CURP_HOMONYMY"RCCRegistro con correcciónUna corrección de datos modificó la clave.type: "SUCCESS"RCNRegistro con notaCorrección menor de datos.type: "SUCCESS"BDBaja por defunciónEl titular falleció — alerta máxima antes de otorgar un crédito.type: "CURP_DECEASED"BAPDocumento apócrifoBaja por documento probatorio falso.type: "CURP_APOCRYPHAL"BJDBaja judicial definitivaDada de baja por orden de un juez.type: "CURP_JUDICIAL_SUSPENSION"BSUSin usoExiste pero nunca se ha usado — inactiva; se reactiva en un módulo RENAPO.type: "CURP_INACTIVE"BDMDefunción (manual)Baja por defunción registrada manualmente.type: "CURP_DECEASED"BDPDefunción presuntaBaja por defunción presunta (sin acta confirmada).type: "CURP_DECEASED"Y no tienes que interpretar códigos: el envelope nombra el caso en el campo type. Las tres variantes de defunción (BD, BDM, BDP) llegan como un solo CURP_DECEASED; los registros vigentes y sus correcciones, como SUCCESS. Tu código es un switch sobre type — no un catálogo de claves de RENAPO que memorizar.
Además del estatus: nombres, sexo, fecha y entidad de nacimiento, datos de registro y —con generateRfc: true— el RFC de 13 caracteres en la misma llamada. ¿Necesitas la constancia oficial? Ese es otro servicio del mismo catálogo: la CURP certificada en PDF, con sus datos ya parseados — misma API, mismo envelope, otro endpoint.
Consultamos la fuente oficial en el 100% de las llamadas, sin cache — y aun así la mediana es 298 ms (p95: 836 ms, medido en producción). Servir un cache sería más rápido; también sería darte el estatus de ayer.
INVALID_REQUEST y billable: false — no gastas crédito en basura.Telemetría de producción de Validar CURP — 8 de julio de 2026, últimos 85 runs: mediana (p50) 298 ms · p95 836 ms, consultando RENAPO en vivo en cada llamada.
import { OrigoidApiClient } from "@origoid/sdk"; const client = new OrigoidApiClient({ apiKey: process.env.ORIGOID_API_KEY }); const result = await client.renapo.validateCurp({ curp: "TEST900101HDFRRN09", generateRfc: true, });
from origoid import OrigoID client = OrigoID(api_key=os.environ["ORIGOID_API_KEY"]) result = client.renapo.validate_curp( curp="TEST900101HDFRRN09", generate_rfc=True, )
import ( sdkgo "github.com/origoid/sdk-go" "github.com/origoid/sdk-go/client" "github.com/origoid/sdk-go/option" ) c := client.NewClient(option.WithAPIKey(os.Getenv("ORIGOID_API_KEY"))) result, err := c.Renapo.ValidateCurp(context.Background(), &sdkgo.ValidateCurpRequest{ Curp: "TEST900101HDFRRN09", GenerateRfc: sdkgo.Bool(true), })
curl -X POST https://api.origoid.com/mex/renapo/v1/curp-validations \ -H "x-api-key: $ORIGOID_API_KEY" \ -H "content-type: application/json" \ -d '{"curp": "TEST900101HDFRRN09", "generateRfc": true}'
{
"status": "OK",
"type": "SUCCESS",
"message": "CURP found and validated",
"data": {
"personalInfo": { "givenNames": "JUAN", "rfc": "PELJ900101AB7", … },
"documentDetails": { "curpStatus": "AN", … }
},
"billable": true
}
Varios proveedores validan CURP. Lo que cambia: cómo de fresco llega el dato, qué pasa con los datos de tu usuario después, y cuánto te cuesta integrarlo.
Dos niveles: la validación estructural (formato, entidad, fecha y dígito verificador) se hace sin conexión — la demo de arriba la hace gratis en tu navegador. La validación real contra RENAPO — si existe, a quién pertenece y su estatus — la responde el API en milisegundos.
Cuatro activos — AN (alta normal), AH (alta con homonimia), RCC y RCN (correcciones de datos) — y seis inactivos: BD (defunción), BAP (documento apócrifo), BJD (baja judicial definitiva), BSU (sin uso — inactiva, reactivable) y BDM/BDP (defunción manual y presunta). El API regresa el estatus exacto y su type — las tres defunciones llegan como un solo CURP_DECEASED — una CURP con formato perfecto puede pertenecer a una persona fallecida, y eso solo lo sabes consultando el registro.
Sí: envía generateRfc: true y la misma respuesta incluye el RFC de 13 caracteres. Una llamada, dos datos.
Es otro servicio del catálogo: la CURP certificada — el PDF oficial de la constancia con sus datos ya parseados. Misma API y mismo envelope que Validar CURP, endpoint distinto: validar te dice el estatus; la constancia te entrega el documento.
No. Cada consulta se valida, se responde y se descarta: sin base de datos de consultas, sin rastro en logs.
Empiezas gratis: créditos de cortesía para validar CURPs reales en producción, sin tarjeta. Después, 1 validación = 1 crédito, y el precio baja con tu volumen — hasta $0.28 por validación. Todos los planes están publicados, sin "contáctanos". Y el formato inválido no se cobra (billable: false).
Créditos de cortesía para validar CURPs reales en producción. El acceso se habilita tras una breve validación de tu empresa.