ValidationQueued
202 response for the asynchronous validation flow (`POST /v1/validate?async=1` and `POST /v1/validate-ocr?async=1`). Indicates the validation was queued; poll `GET /v1/validations/{id}` for the final result.
Properties
| Field | Type | Description |
|---|---|---|
data | object | JSON:API wrapper for the queued resource. |
type | string | JSON:API resource type (always `validation`). |
id | string (uuid) | UUID of the created validation, usable in `GET /v1/validations/{id}`. |
attributes | object | Fields of the queued resource. |
validation_id | string (uuid) | UUID of the validation (identical to `data.id`). |
status | string | Immediate status after queuing (always `queued`). |
etag_version | integer | Initial resource version for conditional polling with `If-None-Match`. Passing this as an ETag avoids unnecessary responses when the status has not changed. |
enqueued_at | string (date-time) | ISO 8601 timestamp in UTC with explicit `Z` suffix. Example: `"2026-05-01T05:14:38Z"`. Every datetime field uses this shape. The descriptor at `meta.datetime` makes the contract runtime-assertable. |
expires_at | string (date-time) | ISO 8601 timestamp in UTC with explicit `Z` suffix. Example: `"2026-05-01T05:14:38Z"`. Every datetime field uses this shape. The descriptor at `meta.datetime` makes the contract runtime-assertable. |
retry_state | object | Automatic retry cycle state at queue time. Always present; if neither a body `retry_policy` nor a user default policy was provided, `enabled=false` and policy fields are `null`. |
enabled | boolean | Whether the retry cycle is active for this validation. |
max_retries | integer | null | Configured maximum number of retries. The upper bound depends on the plan (`retry_max_retries`) or the global default `max_retries_cap` (typically 5–10). `null` if `enabled=false`. |
interval_seconds | integer | null | Interval between retries in seconds (300–86400). `null` if `enabled=false`. |
outcomes | array | null | Validation outcomes that trigger a retry (`not_found`, `cep_unavailable`, `error`). `null` if `enabled=false`. |
attempts_completed | integer | Number of retries completed so far. |
next_attempt_at | union | Timestamp of the next scheduled retry. `null` if the cycle is in a terminal state or if no retries are active. |
resolved_at | union | Timestamp when a retry resolved the validation to `valid`. `null` if the cycle has not ended by resolution. |
exhausted_at | union | Timestamp when retries were exhausted without resolution. `null` if the cycle has not ended by exhaustion. |
cancelled_at | union | Timestamp when the cycle was explicitly cancelled. `null` if not cancelled. |
terminal_state | string | null | Terminal state of the cycle: `pending` — active, no final result yet; `resolved` — a retry obtained `valid`; `exhausted` — all attempts used; `cancelled` — cancelled by the user. |
meta | object | Control metadata for the polling flow. |
next_poll_after_seconds | integer | Recommended seconds to wait before the first poll to `GET /v1/validations/{id}`. Clients should respect this value to avoid rate-limiting on the polling endpoint. |
playground | boolean | Whether the validation was queued in playground mode. The execution still queries Banxico like normal validations but does not consume quota, emit webhooks, or fire notifications. |