https://api.veriko.mx/v1/validations/{id}Get a single validation
How-to guide →Returns the complete record of a validation, with its verdict, the normalized data and the state of its retries.
The path from request to verdict is described in the validation flow.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id* | path | string (uuid) | required | Validation UUID. |
If-None-Match | header | string | optional | ETag received in a previous response, sent as is (weak "9b2d4c7e1f0a3b6d8e5c2a7f4b1d9e0c3a6f8b2d" |
curl -X GET 'https://api.veriko.mx/v1/validations/{id}' \
-H 'Authorization: Bearer veriko_••••'Python example — coming soon.
JavaScript example — coming soon.
PHP example — coming soon.
| Field | Type | Description |
|---|---|---|
type* | string | JSON:API resource type. Always validation |
id* | string (uuid) | Unique identifier of the validation (UUID v4). e.g.3fa85f64-5717-4562-b3fc-2c963f66afa6 |
attributes* | object | Canonical validation data. |
validation_type | string | Validation mode — direct |
is_playground | boolean |
false |
status | string | Lifecycle state — valid |
banxico_status | string | nullnullable | Verdict reported by Banxico. It can be valid |
processing_time_ms | integer | nullnullable | Milliseconds spent processing the validation. e.g.1320 |
request_data | object | Copy of the original request fields. |
client_ref | string | Reference of your own sent in the request ( orden-4812 |
created_at | string (date-time) | Validation creation timestamp in ISO 8601 UTC. e.g.2025-03-15T14:22:10Z |
completed_at | string | nullnullable | Date and time of completion, in ISO 8601 UTC. 2025-03-15T14:22:11Z |
enqueued_at | string | nullnullable | Queue-entry timestamp in ISO 8601 UTC. e.g.2026-04-30T10:15:00Z |
processing_started_at | string | nullnullable | Processing start timestamp in ISO 8601 UTC. e.g.2026-04-30T10:15:00Z |
expires_at | string | nullnullable | Expiration timestamp for queued validations in ISO 8601 UTC. After this, the validation moves to 2026-04-30T10:15:00Z |
etag_version | integer | nullnullable | Incremental version used with 1 |
image_path | string | nullnullable | Relative reference to the receipt, image or PDF, only when comprobantes/3fa85f64-5717-4562-b3fc-2c963f66afa6.jpg |
image_retained | boolean |
true |
purged_at | string (date-time) | Date and time, in ISO 8601 UTC, when the validation was purged with 2026-10-02T09:30:00Z |
ocr_result | object | nullnullable | Fields extracted from the receipt, only when |
ocr_confidence | number | nullnullable | OCR score from 0 to 1, only when 0.94 |
normalized_data | object | nullnullable | Fields normalized after OCR (when |
normalization_warnings | array | nullnullable | Normalization warnings present. They can explain an unexpected |
duplicate_of | object | Earlier validation that had already confirmed this same transfer in the same account. It only appears when a |
id* | string (uuid) | Identifier of the earlier validation. e.g.3fa85f64-5717-4562-b3fc-2c963f66afa6 |
created_at* | string (date-time) | Creation date and time of the earlier validation, in ISO 8601 UTC. e.g.2026-10-01T15:04:05Z |
account_conflict | object | Conflict between the account sent and the one shown in the image. It only appears on |
sent_last4* | string | Last 4 digits of the account sent in 5678 |
read_last4* | string | Last 4 digits of the account shown in the image (the visible ones, 3 or 4, if it is masked). e.g.9012 |
candidate_match | object | Which of the |
index* | integer | Position (from 0) of the winning account in the 1 |
account_last4* | string | Last 4 digits of the winning account. e.g.7771 |
is_masked | boolean | nullnullable | Whether the beneficiary account is masked in the receipt, be it a CLABE, a card or a phone number. It is included only when it is |
banxico_result | object | nullnullable | Data returned by the Banxico CEP. The typed properties below are the 20 declared by the official SPEI complement schema.
|
operationDate | string | SPEI business day that Banxico assigned to the operation, as reported by the CEP ( 2025-03-15 |
processingTime | string | Operation time as reported by the CEP ( 14:22:10 |
speiKey | string | Operation key within the SPEI system (the CEP's |
trackingKey | string | SPEI tracking key of the operation — the same one sent in the validation request. e.g.MBAN01002503151422ABCDEF |
digitalSignature | string | Digital seal of the CEP ( |
certificateNumber | string | Serial number of the digital certificate Banxico used to seal the CEP. |
cadenaCda | string | Original data string of the operation ( |
senderBank | string | Sending bank of the operation, as identified by the CEP. e.g.BBVA |
senderName | string | Name of the operation's sender, as reported by the CEP. |
senderAccountType | string | Sender's account type (e.g. CLABE or card), as reported by the CEP. |
senderAccount | string | Sender's account number, as reported by the CEP — unmasked in this resource (a private lookup, owned by the validation's account). |
senderRfc | string | Sender's RFC (Mexican tax ID), as reported by the CEP. |
receiverBank | string | Receiving bank of the operation, as identified by the CEP. e.g.STP |
beneficiaryName | string | Name of the operation's beneficiary, as reported by the CEP. |
beneficiaryAccountType | string | Beneficiary's account type (e.g. CLABE or card), as reported by the CEP. |
beneficiaryAccount | string | Beneficiary's account number, as reported by the CEP. Unmasked in this resource (a private lookup, owned by the validation's account). Outgoing webhooks DO mask it to the last 4 digits in |
beneficiaryRfc | string | Beneficiary's RFC (Mexican tax ID), as reported by the CEP. |
amount | number (float) | Operation amount Banxico confirmed via the CEP, in pesos. e.g.1500 |
iva | number (float) | VAT (IVA) of the operation reported by the CEP, in pesos. |
paymentConcept | string | Payment concept of the operation, as reported by the CEP. |
error_message | string | nullnullable | Human-readable error message when terminal. e.g.Banxico no respondió tras tres intentos. |
error_code | ValidationErrorCode | null | Stable code of the terminal error, when there is one.
After |
batch_id | integer | nullnullable | Bulk import job identifier, when applicable. e.g.318 |
batch_position | integer | nullnullable | Position within the job, starting at 1. e.g.12 |
retry_state | object | Full retry cycle state. Always present; if retries are not active, |
enabled | boolean |
true |
max_retries | integer | nullnullable | Configured maximum number of retries; 3 |
interval_seconds | integer | nullnullable | Interval between retries in seconds, from 600 |
outcomes | array | nullnullable | Outcomes that trigger a retry: ["not_found","cep_unavailable","error"] |
attempts_completed | integer | Number of retries completed so far. e.g.1 |
next_attempt_at | TimestampUTC | null | Date of the next retry; |
resolved_at | TimestampUTC | null | Date when a retry produced |
exhausted_at | TimestampUTC | null | Date when attempts were exhausted; |
cancelled_at | TimestampUTC | null | Cycle cancellation date; |
terminal_state | string | nullnullable | Cycle state: pending |
links | object | Related links (JSON:API |
self | string | Canonical link to the validation details. e.g./v1/validations/3fa85f64-5717-4562-b3fc-2c963f66afa6 |
cep_xml | string | nullnullable | URL of the CEP in XML format. It only appears when /v1/validations/a1b2c3d4-e5f6-4890-abcd-ef0123456789/cep?format=xml |
cep_pdf | string | nullnullable | URL of the CEP in PDF format. It only appears when /v1/validations/a1b2c3d4-e5f6-4890-abcd-ef0123456789/cep?format=pdf |
| Status | Class | Description | Body |
|---|---|---|---|
| 200 | 2xx | Full validation details. In pre-terminal states (queued, processing) includes Retry-After and meta.next_poll_after_seconds. | Validation |
| 304 | 3xx | The etag_version and status have not changed since the If-None-Match sent. The response has no body.
| No body |
| 401 | 4xx | Authentication is required or the provided credentials are invalid. | ErrorResponse |
| 403 | 4xx | Insufficient permissions. | ErrorResponse |
| 404 | 4xx | Validation not found or not owned by the account (not_found). | ErrorResponse |
| 422 | 4xx | Invalid UUID in path (invalid_uuid). | ErrorResponse |
| Header | Type | Description |
|---|---|---|
ETag | string | Weak ETag that changes on each state transition. It follows the W/"{etag_version}-{status}" format and can be included in If-None-Match to receive HTTP status 304 when nothing has changed. |
Retry-After | integer | Seconds to wait before the next poll. Only present in queued and processing states. |
| Status | Code | Example |
|---|---|---|
| 401 | unauthorized | Invalid or missing authentication credentials. Envelope
|
| 403 | permission_denied | You do not have permission to access this resource. Envelope
|