Developers

Validate your payments with our powerful API.

Sync or async. Make a single call and get the verdict instantly or via webhooks.

POST /v1/validate
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"
  }'
200 OK "status": "valid" Confirmed

Try it

This is what a validated payment looks like.

A real payment, read by OCR and confirmed in the Banxico CEP. Run the validation and review the response the API returns, field by field.

POST /v1/validate-ocr
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" }'
200 OK "status": "valid" Confirmed
Response
{
    "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.59.1",
        "api_version": "v1",
        "request_id": "e6f7a8b9c0d1",
        "datetime": {
            "timezone": "UTC",
            "format": "ISO 8601"
        }
    }
}

Quickstart

Your first validation, in three steps.

Create your API key

From the dashboard, in the API section. It's sent with every request.

Call the API

Send a receipt image or the transfer details.

Get the result

In the same response, or via a secure webhook.

Complete, precise documentation.

Everything you need to integrate Veriko, with examples and explanations.

Read the docs

Built for production

Everything you expect from an API.

Async and bulk uploads

Don't wait on the process. We notify you when results are ready. Plus you can validate payments in bulk.

Idempotency

Use idempotency and retry without fear of duplicating data.

Automatic retries

Retry the validation if the payment wasn't found. Useful when there are delays in the banking system.

Signed webhooks

Each verdict reaches you as an event signed with HMAC-SHA256.

Build with certainty.

Create your account and run your first validation today.