Referencia de la API

# Encuentra una CURP por datos personales

Encuentra una CURP por datos personales y obtén la identidad registrada, el estado de certificación y las CURP asociadas por corrección.

POST

`/v1/curp/search`

Encuentra la CURP de una persona a partir de sus datos personales: la misma búsqueda que el formulario "Datos personales" de gob.mx. RENAPO compara los nombres, la fecha de nacimiento, el sexo y el estado de nacimiento tal como están registrados. Tarda alrededor de 5 segundos y cuesta 10 créditos.

Úsalo cuando alguien no conoce su CURP, para llenarla durante el onboarding o para revisar que la CURP que te dieron coincida con sus datos.

## Cuerpo de la solicitud


| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `names` | string | Sí | Nombre o nombres, como están registrados. |
| `paternal_surname` | string | Sí | Primer apellido. |
| `mothers_maiden_name` | string | No | Segundo apellido. Omítelo si la persona solo tiene uno. |
| `birthdate` | string | Sí | Fecha de nacimiento como AAAA-MM-DD. |
| `sex` | string | Sí | `H` (hombre), `M` (mujer), o `X` (no binario). |
| `state` | string | Sí | Clave de dos letras del estado de nacimiento, las mismas que usa la CURP (p. ej. DF, JC, NL), o NE para personas nacidas en el extranjero. |
| `include_pdf` | boolean | No | Usa true para incluir el PDF oficial de la CURP en pdf_base64. El valor predeterminado es false. |


Los nombres no distinguen mayúsculas de minúsculas. Los acentos se quitan igual que en gob.mx (la Ñ y la Ü se conservan) y los espacios extra se eliminan. Los nombres pueden contener letras, espacios, puntos y guiones.

## Solicitud de ejemplo

curl

```bash
curl -X POST https://curpcheck.com/v1/curp/search \
  -H "x-api-key: rfc_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"names": "Juan", "paternal_surname": "Pérez", "mothers_maiden_name": "Martínez",
       "birthdate": "1980-01-01", "sex": "H", "state": "DF"}'
```

## Respuesta (200)

200 OK

```json
{
  "curp": "PEMJ800101HDFRRN07",
  "found": true,
  "message": "Identity retrieved from RENAPO",
  "person": {
    "curp": "PEMJ800101HDFRRN07",
    "renapo_valid": true,
    "names": "JUAN",
    "paternal_surname": "PEREZ",
    "mothers_maiden_name": "MARTINEZ",
    "sex": "HOMBRE",
    "birthdate": "01/01/1980",
    "nationality": "MEXICO",
    "entity_birth": "DF",
    "status_curp": "RCN",
    "certified": true,
    "certification": "CURP Certificada: verificada con el Registro Civil",
    "associated_curps": [],
    "probation_document": "ACTA DE NACIMIENTO",
    "probation_document_data": {},
    "homonimo": false
  }
}
```

found es true (curp y person contienen la coincidencia), false (RENAPO no devolvió un registro único; curp es null y person.homonimo es true cuando RENAPO reporta un problema con la clave), o null (no se pudo consultar RENAPO; inténtalo más tarde). Una respuesta false cuesta 10 créditos. Una respuesta null no se cobra.

person.certified es true cuando el PDF incluye una leyenda de certificación, false cuando se pudo leer el PDF y no aparece la leyenda, o null cuando no se pudo leer. La certificación puede ser del Registro Civil, la SRE o el INM. Este campo no determina la nacionalidad ni el derecho a obtener un pasaporte o una credencial del INE.

Cada consulta y búsqueda lee el PDF oficial para incluir person.certification (la leyenda de certificación tal como aparece) y person.associated_curps (CURP asociadas por corrección). Una lista vacía indica que no aparecen CURP asociadas. Si no se puede leer el documento, ambos campos son null y se devuelve la identidad registrada. include_pdf solo controla si se devuelve el archivo en base64.

Con include_pdf en true, una respuesta exitosa también incluye pdf_base64, el PDF oficial de RENAPO codificado en base64. No se cobran créditos adicionales. Si no se puede descargar el PDF solicitado, found es null y no se cobra la solicitud; inténtalo más tarde.

## Errores

- `422 invalid_fields`: falta uno o más campos o están mal formados. fields los lista todos, para que los corrijas de una vez. No se cobra.

422 Unprocessable Entity

```json
{
  "error": "invalid_fields",
  "fields": ["birthdate", "state"]
}
```