Referencia de Validate API
El módulo Validate valida tax IDs, documentos de identidad e identificadores financieros en mercados sudamericanos más estándares globales con un único endpoint.
El módulo Validate valida tax IDs, documentos de identidad e identificadores financieros en mercados sudamericanos más estándares globales con un único endpoint.
URL base para todos los requests:
Todos los requests requieren una API key en el header X-API-Key. Consultá la referencia principal de la API para detalles de autenticación.
Autenticación
Cada request debe incluir tu API key en el header X-API-Key. Las keys siguen el formato nd_ seguido de 30 caracteres (33 chars en total).
HeaderX-API-Key: nd_a8f3b2c1d4e5f6g7h8i9j0k1l2m3n4
Las keys se provisionan manualmente durante el acceso anticipado. Sumate a la lista para solicitar acceso.
Validación de identificadores
Endpoints para validar y normalizar identificadores en distintos dominios. Todos devuelven un booleano valid y la forma normalizada.
Todos los endpoints son batch: mandás un array items y recibís un results por item, correlacionado por el id que vos proveés. El mismo endpoint sirve para 1 o N (hasta 1.000 ítems; 500 en /records).
POST /v1/validate/tax-ids — Tax IDs
Valida y normaliza tax IDs (CUIT, CPF, RFC, RUT, NIT, RUC y más). Devuelve type (persona o empresa) cuando el ID lo codifica. Hasta 1.000 por request.
cURLcurl -X POST https://api.normadata.io/v1/validate/tax-ids \
-H "X-API-Key: nd_a8f3b2c1d4e5f6g7h8i9j0k1l2m3n4" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "id": "a", "value": "20-12345678-6", "country": "AR", "type": "cuit" },
{ "id": "b", "value": "123.456.789-09", "country": "BR" }
]
}'Respuesta de ejemplo 200
JSON{
"results": [
{
"id": "a",
"country": "AR",
"type": "cuit",
"valid": true,
"normalized": "20123456786",
"formatted": "20-12345678-6"
},
{
"id": "b",
"country": "BR",
"type": "cpf",
"valid": true,
"normalized": "12345678909",
"formatted": "123.456.789-09"
}
]
}POST /v1/validate/accounts — Cuentas (CBU, CVU, CLABE, CCI, IBAN)
Valida cuentas bancarias: CBU/CVU (Mod-10), CLABE (Banxico), CCI (Perú), IBAN (Mod-97). Devuelve checksum_valid y bank_name cuando se resuelve. Hasta 1.000 por request.
cURLcurl -X POST https://api.normadata.io/v1/validate/accounts \
-H "X-API-Key: nd_a8f3b2c1d4e5f6g7h8i9j0k1l2m3n4" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "id": "1", "value": "0170010600000123456780", "country": "AR", "type": "cbu" },
{ "id": "2", "value": "DE89370400440532013000", "country": "DE", "type": "iban" }
]
}'Respuesta de ejemplo 200
JSON{
"results": [
{
"id": "1",
"country": "AR",
"type": "cbu",
"valid": true,
"checksum_valid": true,
"bank_name": "Galicia"
},
{
"id": "2",
"country": "DE",
"type": "iban",
"valid": true,
"checksum_valid": true
}
]
}POST /v1/validate/emails — Emails
Valida sintaxis RFC, normaliza (lowercase, trim) y detecta typos de dominio. Cada item del lote devuelve valid y normalized. Hasta 1.000 emails por request.
cURLcurl -X POST https://api.normadata.io/v1/validate/emails \
-H "X-API-Key: nd_a8f3b2c1d4e5f6g7h8i9j0k1l2m3n4" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "id": "1", "value": " ROGER@Normadata.IO " },
{ "id": "2", "value": "juan@gmial.com" }
]
}'Respuesta de ejemplo 200
JSON{
"results": [
{
"id": "1",
"value": " ROGER@Normadata.IO ",
"valid": true,
"normalized": "roger@normadata.io"
},
{
"id": "2",
"value": "juan@gmial.com",
"valid": false,
"error": "typo in domain: did you mean gmail.com?"
}
]
}POST /v1/validate/phones — Teléfonos
Normaliza teléfonos a E.164 y devuelve el tipo de línea (mobile, landline, mobile_or_landline, other). El país es la región de parseo. Hasta 1.000 por request.
cURLcurl -X POST https://api.normadata.io/v1/validate/phones \
-H "X-API-Key: nd_a8f3b2c1d4e5f6g7h8i9j0k1l2m3n4" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "id": "1", "value": "+54 (11) 4555-2233", "country": "AR" },
{ "id": "2", "value": "11987654321", "country": "BR" }
]
}'Respuesta de ejemplo 200
JSON{
"results": [
{
"id": "1",
"valid": true,
"normalized": "+541145552233",
"type": "landline"
},
{
"id": "2",
"valid": true,
"normalized": "+5511987654321",
"type": "mobile"
}
]
}POST /v1/validate/records — Records
Valida una entidad completa (tax_id, account, email, phone, name, address), chequea consistencia entre campos y resume readiness (payment, billing). Hasta 500 records por request.
cURLcurl -X POST https://api.normadata.io/v1/validate/records \
-H "X-API-Key: nd_a8f3b2c1d4e5f6g7h8i9j0k1l2m3n4" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"reference_id": "prov-001",
"country": "AR",
"tax_id": "20-12345678-6",
"account": "0170010600000123456780",
"account_type": "cbu",
"name": "Juan Pérez",
"email": "juan@empresa.com"
}
]
}'Respuesta de ejemplo 200
JSON{
"results": [
{
"reference_id": "prov-001",
"country": "AR",
"fields": {
"tax_id": {
"valid": true,
"normalized": "20123456786"
},
"account": {
"valid": true,
"checksum_valid": true,
"bank_name": "Galicia",
"country": "AR"
},
"name": {
"full": "Juan Pérez",
"first": "Juan",
"paternal": "Pérez"
},
"email": {
"valid": true,
"normalized": "juan@empresa.com"
}
},
"consistency": [
{
"check": "country_matches_tax_id",
"ok": true
},
{
"check": "country_matches_account",
"ok": true
}
],
"readiness": {
"payment": {
"status": "ready"
},
"billing": {
"status": "ready"
}
}
}
]
}Códigos de error
Todos los endpoints de Validate comparten el mismo schema de error. HTTP 200 solo se devuelve ante una normalización exitosa.
| Código | Estado | Descripción |
|---|---|---|
| empty_batch | 400 | El array items llegó vacío. Mandá al menos un ítem por request. |
| batch_too_large | 400 | El lote excede el máximo permitido (1.000 ítems; 500 en /records). Paginá en lotes más chicos. |
| invalid_api_key | 401 | La API key falta, es inválida o fue revocada |
| quota_exceeded | 429 | Se agotó la cuota de la cuenta. El conteo es por ítem o registro procesado. |
Límites de velocidad
Durante el acceso anticipado, el uso se monitorea por cuenta. No hay números de rate limit públicos aún.