Desarrolladores
Valida tus pagos con una sola petición.
Síncrono o asíncrono. Haz una sola llamada y recibe el veredicto al instante o con Webhooks
curl -X POST https://api.veriko.mx/v1/validate \
-H "Authorization: Bearer veriko_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fecha": "2025-03-15",
"monto": 15000.50,
"clave_rastreo": "MXBA20250315001234",
"cuenta_beneficiaria": "012180004412345678"
}'
const res = await fetch("https://api.veriko.mx/v1/validate", {
method: "POST",
headers: {
"Authorization": "Bearer veriko_TU_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
fecha: "2025-03-15",
monto: 15000.50,
clave_rastreo: "MXBA20250315001234",
cuenta_beneficiaria: "012180004412345678",
}),
});
const { data } = await res.json();
console.log(data.attributes.status); // "valid"
import requests
res = requests.post(
"https://api.veriko.mx/v1/validate",
headers={"Authorization": "Bearer veriko_TU_API_KEY"},
json={
"fecha": "2025-03-15",
"monto": 15000.50,
"clave_rastreo": "MXBA20250315001234",
"cuenta_beneficiaria": "012180004412345678",
},
)
print(res.json()["data"]["attributes"]["status"]) # "valid"
$ch = curl_init("https://api.veriko.mx/v1/validate");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer veriko_TU_API_KEY",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"fecha" => "2025-03-15",
"monto" => 15000.50,
"clave_rastreo" => "MXBA20250315001234",
"cuenta_beneficiaria" => "012180004412345678",
]),
]);
$data = json_decode(curl_exec($ch), true)["data"];
echo $data["attributes"]["status"]; // "valid"
body, _ := json.Marshal(map[string]any{
"fecha": "2025-03-15",
"monto": 15000.50,
"clave_rastreo": "MXBA20250315001234",
"cuenta_beneficiaria": "012180004412345678",
})
req, _ := http.NewRequest("POST", "https://api.veriko.mx/v1/validate", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer veriko_TU_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
// res → { "data": { "attributes": { "status": "valid" } } }
"status": "valid"
Confirmado
Pruébalo
De la imagen al veredicto.
Un pago real. Extraemos los datos de la imagen y lo confirmamos en Banxico. Observa la respuesta que devuelve la API, campo por campo.
curl -X POST https://api.veriko.mx/v1/validate-ocr \
-H "Authorization: Bearer veriko_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "image_url": "https://tu-sistema.com/comprobante.jpg" }'
const res = await fetch("https://api.veriko.mx/v1/validate-ocr", {
method: "POST",
headers: {
"Authorization": "Bearer veriko_TU_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
image_url: "https://tu-sistema.com/comprobante.jpg",
}),
});
const { data } = await res.json();
console.log(data.attributes.status); // "valid"
import requests
res = requests.post(
"https://api.veriko.mx/v1/validate-ocr",
headers={"Authorization": "Bearer veriko_TU_API_KEY"},
json={"image_url": "https://tu-sistema.com/comprobante.jpg"},
)
print(res.json()["data"]["attributes"]["status"]) # "valid"
$ch = curl_init("https://api.veriko.mx/v1/validate-ocr");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer veriko_TU_API_KEY",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"image_url" => "https://tu-sistema.com/comprobante.jpg",
]),
]);
$data = json_decode(curl_exec($ch), true)["data"];
echo $data["attributes"]["status"]; // "valid"
body, _ := json.Marshal(map[string]any{
"image_url": "https://tu-sistema.com/comprobante.jpg",
})
req, _ := http.NewRequest("POST", "https://api.veriko.mx/v1/validate-ocr", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer veriko_TU_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
// res → { "data": { "attributes": { "status": "valid" } } }
"status": "valid"
Confirmado
{
"data": {
"type": "validation",
"id": "c3d4e5f6-a7b8-4012-8def-123456789012",
"attributes": {
"validation_type": "ocr",
"is_playground": false,
"status": "valid",
"banxico_status": "valid",
"processing_time_ms": 11700,
"created_at": "2026-09-08T19:28:06Z",
"completed_at": "2026-09-08T19:28:18Z",
"request_data": {
"image_url": "https://tu-sistema.com/comprobante.jpg"
},
"image_path": "ocr/2026/09/c3d4e5f6-a7b8-4012-8def-123456789012.jpg",
"ocr_result": {
"tipo_comprobante": "spei",
"clave_rastreo": "MBAN01002609080051771699",
"referencia_numerica": "0509260",
"fecha": "2026-09-08",
"hora": "13:10:00",
"monto": 250.0,
"banco_emisor": "BBVA",
"banco_receptor": "Banorte",
"nombre_ordenante": null,
"nombre_beneficiario": "Jesus M.",
"cuenta_beneficiaria": "•6546",
"cuenta_beneficiaria_es_parcial": true,
"cuenta_beneficiaria_is_masked": true,
"cuenta_beneficiaria_visible_last": "6546",
"concepto": "Pago de producto",
"confianza": 0.9,
"confianza_por_campo": {
"banco_emisor": 0.8,
"banco_receptor": 1,
"cuenta_beneficiaria": 0.8,
"monto": 1,
"clave_rastreo": 1,
"fecha": 1
}
},
"ocr_confidence": 0.9,
"normalized_data": {
"tipo_comprobante": "spei",
"clave_rastreo": "MBAN01002609080051771699",
"referencia_numerica": "0509260",
"fecha": "2026-09-08",
"hora": "13:10:00",
"monto": 250.0,
"emisor_code": "40012",
"emisor_name": "BBVA MEXICO",
"receptor_code": "40072",
"receptor_name": "BANORTE",
"cuenta_beneficiaria": "072580012706676546",
"cuenta_beneficiaria_type": "clabe",
"nombre_beneficiario": "Jesus M.",
"concepto": "Pago de producto",
"confianza": 0.9
},
"banxico_result": {
"operationDate": "2026-09-08",
"processingTime": "13:10:57",
"speiKey": "40072",
"trackingKey": "MBAN01002609080051771699",
"certificateNumber": "00001000000710905384",
"senderBank": "BBVA MEXICO",
"senderName": "JORGE A.",
"senderAccountType": "40",
"senderAccount": "012180••••••••4195",
"senderRfc": "XAXX010101000",
"receiverBank": "BANORTE",
"beneficiaryName": "JESUS M.",
"beneficiaryAccountType": "40",
"beneficiaryAccount": "072580012706676546",
"beneficiaryRfc": "XAXX010101000",
"amount": 250.0,
"iva": 0.0,
"paymentConcept": "Pago de producto"
},
"retry_state": {
"enabled": false,
"max_retries": null,
"interval_seconds": null,
"outcomes": null,
"attempts_completed": 0,
"next_attempt_at": null,
"resolved_at": null,
"exhausted_at": null,
"cancelled_at": null,
"terminal_state": null
}
},
"links": {
"self": "/v1/validations/c3d4e5f6-a7b8-4012-8def-123456789012",
"cep_xml": "/v1/validations/c3d4e5f6-a7b8-4012-8def-123456789012/cep?format=xml",
"cep_pdf": "/v1/validations/c3d4e5f6-a7b8-4012-8def-123456789012/cep?format=pdf"
}
},
"meta": {
"version": "1.75.0",
"api_version": "v1",
"request_id": "e6f7a8b9c0d1",
"datetime": {
"timezone": "UTC",
"format": "ISO 8601"
}
}
}
Hecho para producción
Todo lo que esperas de una API.
Asíncrono y carga masiva
No esperes el proceso. Te notificamos cuando haya resultados. Además puedes validar pagos en masa.
Idempotencia
Usa idempotencia y reintenta sin miedo a duplicar datos.
Reintentos automáticos
Reintenta la validación si el pago no fue encontrado. Útil cuando hay retrasos en el sistema bancario.
Webhooks firmados
Cada veredicto llega a ti como un evento firmado con HMAC-SHA256.
Integración
SDK oficiales en Python y JavaScript.
Instala y valida en unas líneas.
Python
from veriko import Veriko
client = Veriko() # lee VERIKO_API_KEY del entorno
validation = client.validate_transfer(
fecha="2025-03-15",
monto=15000.50,
clave_rastreo="MXBA20250315001234",
cuenta_beneficiaria="012180004412345678",
)
print(validation.status) # 'valid'
JavaScript
import { Veriko } from '@veriko-mx/sdk';
const client = new Veriko(); // lee VERIKO_API_KEY del entorno
const validation = await client.validateTransfer({
fecha: '2025-03-15',
monto: 15000.5,
claveRastreo: 'MXBA20250315001234',
cuentaBeneficiaria: '012180004412345678',
});
console.log(validation.attributes.status); // 'valid'
Herramientas
Recursos para integradores.
-
Colección de Postman
Prueba la API antes de programar.
-
Spec de OpenAPI
La definición descargable de la API.
-
Ejemplos
Ejemplos ejecutables en cURL, Node.js, Python y PHP.
-
Servidor MCP
Para usar la API desde tu editor o agente.
Quickstart
Tu primera validación, en tres pasos.
Crea tu API key
Desde el panel, en la sección de API. Esta se envía en cada solicitud.
Llamada a la API
Manda el comprobante en imagen o PDF, o los datos de la transferencia.
Recibe el resultado
En la misma respuesta, o vía Webhook seguro.
Compara antes de integrar.
Antes de decidir, revisa la Comparativa de APIs CEP de Banxico.
Construye con certeza.
Crea tu cuenta y haz tu primera validación hoy.