@veriko-mx/sdk 0.4.12 → 0.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,7 +69,7 @@ export interface paths {
69
69
  *
70
70
  * La cuenta beneficiaria (`cuenta_beneficiaria`) es obligatoria en esta operación, salvo que se envíe `cuentas_candidatas`. Si faltan las dos, la petición se rechaza con `422 preflight_failed` y el error de campo `cuenta_required`: el servicio no la busca entre los beneficiarios guardados.
71
71
  *
72
- * Cuando no se sabe a cuál de varias cuentas se hizo el pago, `cuentas_candidatas` sustituye a `cuenta_beneficiaria`: de 2 a 3 cuentas en una sola validación y con una sola unidad de cuota. La consulta recorre las candidatas en el orden enviado y adopta la primera que coincide con la transferencia; esa cuenta vuelve completa en `normalized_data.cuenta_beneficiaria` y su posición en `candidate_match`. Si ninguna coincide, la respuesta es un estado HTTP `422` con el motivo en `code`. Las dos formas no pueden enviarse juntas (`422 cuenta_y_candidatas_excluyentes`) y una lista que no cumple se rechaza con `422 cuentas_candidatas_invalidas`, las dos antes de consumir cuota.
72
+ * Cuando no se sabe a cuál de varias cuentas se hizo el pago, `cuentas_candidatas` sustituye a `cuenta_beneficiaria`: de 2 cuentas al máximo que admite el servicio (3 de forma predeterminada) en una sola validación y con una sola unidad de cuota. La consulta recorre las candidatas en el orden enviado y adopta la primera que coincide con la transferencia; esa cuenta vuelve completa en `normalized_data.cuenta_beneficiaria` y su posición en `candidate_match`. Si ninguna coincide, la respuesta es un estado HTTP `422` con el motivo en `code`. Las dos formas no pueden enviarse juntas (`422 cuenta_y_candidatas_excluyentes`) y una lista que no cumple se rechaza con `422 cuentas_candidatas_invalidas`, las dos antes de consumir cuota.
73
73
  *
74
74
  * El veredicto final (estado terminal) de una validación puede ser alguno de estos:
75
75
  *
@@ -139,7 +139,7 @@ export interface paths {
139
139
  * El campo `cuenta_beneficiaria` permite enviar explícitamente la cuenta receptora de la transferencia, enviarlo es especialmente útil cuando la imagen no lleva este dato o lo lleva incompleto.\
140
140
  * Un beneficiario guardado (con `POST /v1/beneficiaries`) no sustituye a este campo: solo sirve para completar los dígitos de la cuenta que la imagen sí muestra. Si la imagen no trae dígitos suficientes, la validación se rechaza con `cuenta_unresolvable`, porque las cuentas guardadas no se prueban una por una.\
141
141
  * \
142
- * Cuando no se sabe cuál de varias cuentas recibió el pago, `cuentas_candidatas` las prueba en una sola validación (de 2 a 3 cuentas, una sola unidad de cuota, también con `?async=1`) y sustituye a `cuenta_beneficiaria`: enviar las dos se rechaza con `422 cuenta_y_candidatas_excluyentes`, y una lista que no cumple, con `422 cuentas_candidatas_invalidas`, las dos antes de consumir cuota. La lista tiene prioridad sobre la cuenta que se lea en la imagen; la ganadora vuelve completa en `normalized_data.cuenta_beneficiaria` y su posición en `candidate_match`. Si ninguna coincide, la respuesta es un estado HTTP `422` con el motivo en `code`.
142
+ * Cuando no se sabe cuál de varias cuentas recibió el pago, `cuentas_candidatas` las prueba en una sola validación (de 2 cuentas al máximo que admite el servicio, 3 de forma predeterminada; una sola unidad de cuota, también con `?async=1`) y sustituye a `cuenta_beneficiaria`: enviar las dos se rechaza con `422 cuenta_y_candidatas_excluyentes`, y una lista que no cumple, con `422 cuentas_candidatas_invalidas`, las dos antes de consumir cuota. La lista tiene prioridad sobre la cuenta que se lea en la imagen; la ganadora vuelve completa en `normalized_data.cuenta_beneficiaria` y su posición en `candidate_match`. Si ninguna coincide, la respuesta es un estado HTTP `422` con el motivo en `code`.
143
143
  *
144
144
  * {% /callout %}
145
145
  *
@@ -326,7 +326,7 @@ export interface paths {
326
326
  };
327
327
  /**
328
328
  * Descargar el CEP oficial
329
- * @description Descarga el {% concept slug="cep-concept" %}Comprobante Electrónico de Pago (CEP){% /concept %} emitido por Banxico de una validación con veredicto `valid`.
329
+ * @description Descarga el {% concept slug="cep-concept" %}Comprobante Electrónico de Pago (CEP){% /concept %} emitido por Banxico de una validación con veredicto `valid`, o `returned` cuando el CEP se descargó antes de conocerse la devolución.
330
330
  *
331
331
  * El formato predeterminado es `xml`; con `format=pdf` se solicita el documento en PDF.
332
332
  *
@@ -438,13 +438,13 @@ export interface paths {
438
438
  * **No se admite en tres casos:**\
439
439
  * — Validaciones que llegaron por importación masiva.\
440
440
  * — Validaciones ya resueltas.\
441
- * — Validaciones fuera de la antigüedad que permite el plan.
441
+ * — Validaciones con más de siete días de antigüedad.
442
442
  *
443
443
  * {% /callout %}
444
444
  *
445
445
  * Un ciclo de reintentos puede devolver `terminal_state="exhausted"` cuando se alcanzan el máximo de reintentos configurado. También puede devolver `terminal_state="cancelled"` cuando el usuario cancela manualmente los reintentos de la validación.
446
446
  *
447
- * En ambos casos, el ciclo puede reactivarse mientras conserve reintentos disponibles.
447
+ * En ambos casos, el ciclo puede reactivarse hasta tres veces; pasado ese tope, la petición se rechaza con `422 reactivation_cap_exceeded`.
448
448
  *
449
449
  * El estado completo de una validación se obtiene con `GET /v1/validations/{id}`, y los límites están descritos en {% concept slug="retry-policy" %}la política de reintentos{% /concept %}.
450
450
  */
@@ -668,6 +668,41 @@ export interface paths {
668
668
  patch?: never;
669
669
  trace?: never;
670
670
  };
671
+ "/public/spei-calendar/{year}": {
672
+ parameters: {
673
+ query?: never;
674
+ header?: never;
675
+ path?: never;
676
+ cookie?: never;
677
+ };
678
+ /**
679
+ * Obtener el calendario de días inhábiles SPEI de un año
680
+ * @description Devuelve el calendario de días inhábiles SPEI de un año, con la disposición oficial de la que sale.
681
+ *
682
+ * La respuesta incluye:
683
+ *
684
+ * - `non_business_days`: Los días inhábiles que caen de lunes a viernes, en orden y con formato `YYYY-MM-DD`.
685
+ * - `source`: La disposición de la **Comisión Nacional Bancaria y de Valores (CNBV)** publicada en el **Diario Oficial de la Federación (DOF)**, con su título y su fecha de publicación.
686
+ *
687
+ * Los sábados y los domingos también son inhábiles, siempre, y no se repiten en `non_business_days`.
688
+ *
689
+ * El calendario determina el día de operación de una transferencia. El SPEI opera todos los días, pero el día hábil cambia a las 18:00 (hora del centro de México): lo enviado a partir de esa hora, en sábado, en domingo o en un día inhábil opera el siguiente día hábil. Ese día es el `operationDate` de `banxico_result`, y puede diferir de la fecha de envío.
690
+ *
691
+ * La consulta no consume cuota de validaciones. Un año sin calendario responde un estado HTTP `404` (con `spei_calendar_year_not_covered` en el cuerpo), y `meta.covered_years` lista los años disponibles. El calendario de cada año se añade cuando la CNBV publica su disposición, normalmente en diciembre del año anterior.
692
+ *
693
+ * La respuesta es cacheable: incluye la cabecera `ETag`, que puede enviarse en otra petición como `If-None-Match`; si el calendario no ha cambiado, responde con un estado HTTP `304` (sin cuerpo).
694
+ *
695
+ * La diferencia entre la fecha de envío y la de operación está en {% concept slug="timezone-handling" %}fechas y zona horaria{% /concept %}.
696
+ */
697
+ get: operations["getSpeiCalendar"];
698
+ put?: never;
699
+ post?: never;
700
+ delete?: never;
701
+ options?: never;
702
+ head?: never;
703
+ patch?: never;
704
+ trace?: never;
705
+ };
671
706
  "/beneficiaries/export": {
672
707
  parameters: {
673
708
  query?: never;
@@ -677,7 +712,7 @@ export interface paths {
677
712
  };
678
713
  /**
679
714
  * Exportar los beneficiarios de la cuenta de usuario
680
- * @description Descarga las cuentas beneficiarias del usuario autenticado como archivo, usa el mismo filtro `with_archived` que `GET /v1/beneficiaries/list-beneficiaries`.
715
+ * @description Descarga las cuentas beneficiarias del usuario autenticado como archivo, usa el mismo filtro `with_archived` que `GET /v1/beneficiaries`.
681
716
  *
682
717
  * El formato de descarga se elige con `?format` (`csv` por defecto, `xlsx` como alternativa). El tope de filas es de 100 000, y `?limit` sirve para pedir menos, nunca más.
683
718
  *
@@ -719,11 +754,11 @@ export interface paths {
719
754
  * - Tarjeta (16 dígitos): `bank_code` es opcional, se deriva del BIN.
720
755
  * - Celular/DiMo (10 dígitos): `bank_code` es **obligatorio** en el cuerpo, ya que el número por sí solo no identifica a la institución bancaria.
721
756
  *
722
- * Si la cuenta a registrar no existe previamente, se registra y responde con un estado HTTP `200`.
757
+ * Si la cuenta a registrar no existe previamente, se registra y responde con un estado HTTP `201`.
723
758
  *
724
759
  * Si se intenta registrar una cuenta activa, responde con un estado HTTP `422` (con `beneficiary_already_registered` en el cuerpo).
725
760
  *
726
- * Si existe pero está archivada, el alta la **reactiva** y responde con un estado HTTP `200` (con `meta.reactivated=true` en el cuerpo).
761
+ * Si existe pero está archivada, el alta la **reactiva** y responde con un estado HTTP `200` (con `meta.reactivated=true` en el cuerpo). Si la petición no trae `label`, la reactivación conserva el alias que la cuenta ya tenía; si lo trae, lo reemplaza.
727
762
  */
728
763
  post: operations["createBeneficiary"];
729
764
  delete?: never;
@@ -745,10 +780,12 @@ export interface paths {
745
780
  * @description Actualiza un beneficiario ya registrado. El cuerpo admite la envoltura JSON:API o un objeto plano, y lo que se envíe determina el alcance del cambio:
746
781
  *
747
782
  * - Solo `label`: Se guarda, sin tocar la cuenta.
748
- * - Un `account_number` nuevo, o el alias antiguo: vuelven a derivarse `account_type`, `bank_code` y `bank_name`. Si el nuevo número es un celular (phone), el cuerpo debe llevar `bank_code`.
749
- * - Solo `bank_code`: se aplica únicamente sobre un beneficiario de tipo celular. En una CLABE o una tarjeta el banco se deriva del número, así que el valor enviado se descarta sin error.
783
+ * - Un `account_number` nuevo: vuelven a derivarse `account_type`, `bank_code` y `bank_name`. Si el nuevo número es un celular (phone), el cuerpo debe llevar `bank_code`.
784
+ * - Solo `bank_code`: se aplica únicamente sobre un beneficiario de tipo celular. En una CLABE o una tarjeta el banco se deriva del número, así que el valor enviado se descarta sin error; si era el único campo, responde con `no_valid_fields`.
750
785
  *
751
786
  * Un cuerpo sin ningún campo editable responde con un estado HTTP `422` (con `no_valid_fields` en el cuerpo).
787
+ *
788
+ * Si el `account_number` nuevo ya está registrado para la misma cuenta de usuario, activo o archivado, responde con un estado HTTP `422` (con `beneficiary_already_registered` en el cuerpo) y el beneficiario no cambia.
752
789
  */
753
790
  put: operations["updateBeneficiary"];
754
791
  post?: never;
@@ -797,9 +834,9 @@ export interface paths {
797
834
  };
798
835
  /**
799
836
  * Descargar la plantilla de importación de beneficiarios
800
- * @description Devuelve un **archivo plantilla para la importación de beneficiarios** en el formato solicitado, con encabezados en español o inglés y filas de ejemplo para CLABE, tarjeta y celular/DiMo. Sirve de punto de partida para {% concept slug="bulk-imports" %}la importación masiva{% /concept %}.
837
+ * @description Devuelve un **archivo plantilla para la importación de beneficiarios** en el formato solicitado, con los encabezados fijos `alias`, `cuenta` y `banco` y filas de ejemplo para CLABE, tarjeta y celular/DiMo. Sirve de punto de partida para {% concept slug="bulk-imports" %}la importación masiva{% /concept %}.
801
838
  *
802
- * El idioma de los encabezados se negocia con la cabecera `Accept-Language`; de forma predeterminada se entregan en español, acepta después encabezados en ambos idiomas de forma insensible a acentos.
839
+ * Los encabezados no cambian con el idioma: la cabecera `Accept-Language` sólo elige el idioma de las filas de ejemplo y del nombre de la hoja; de forma predeterminada se entregan en español. La importación acepta después encabezados en ambos idiomas de forma insensible a acentos.
803
840
  */
804
841
  get: operations["downloadBeneficiaryImportTemplate"];
805
842
  put?: never;
@@ -821,7 +858,7 @@ export interface paths {
821
858
  put?: never;
822
859
  /**
823
860
  * Iniciar importación masiva de beneficiarios
824
- * @description Sube un archivo (CSV, XLS, XLSX, TXT o PDF) de hasta 20 MB y abre con él un trabajo de importación.
861
+ * @description Sube un archivo (CSV, XLS, XLSX, TXT, JSON o PDF) de hasta 20 MB y abre con él un trabajo de importación.
825
862
  * Las hojas XLSX/XLS admiten hasta 10 000 filas y 64 columnas. Las fórmulas XLSX se leen como texto, sin ejecutarlas. Los PDF admiten hasta 50 páginas y limitan a 8 MiB la descompresión de cada flujo.
826
863
  *
827
864
  * El modo de lectura decide cuánto trabajo hace el archivo y cuánto el servidor:
@@ -891,7 +928,7 @@ export interface paths {
891
928
  * Previsualizar las filas extraídas de la importación
892
929
  * @description Devuelve las filas extraídas del archivo en un trabajo de importación (paginadas y filtrables por grupo).
893
930
  *
894
- * Disponible solo cuando la importación está en `preview_ready` o estados posteriores con `total_rows>0`.
931
+ * Responde en cualquier estado del trabajo; antes de `preview_ready` la lista sale vacía.
895
932
  *
896
933
  * {% callout type="warning" %}
897
934
  * En este endpoint los datos de CLABEs, tarjetas o celulares NO son enmascarados. Se presume que el usuario solicitante de la importación ya tiene en su poder dichos datos, por lo que no hay motivos para tratarlos bajo nuestra política de {% concept slug="pii-masking" %}enmascarado de datos{% /concept %}
@@ -972,8 +1009,8 @@ export interface paths {
972
1009
  *
973
1010
  * Reglas de la confirmación:
974
1011
  *
975
- * - Filas `valid` y `correctable`: Se persisten (con sufijo de alias si hubo colisión de alias).
976
- * - Filas `fatal` y `duplicate_account`: Se omiten.
1012
+ * - Filas `valid` y `correctable`: Se persisten (con sufijo de alias si hubo colisión de alias). La excepción es un celular sin banco válido (`bank_code_required_for_phone` o `invalid_bank_code`): se corrige eligiendo el banco en la vista previa, y si al confirmar sigue sin banco no se guarda, queda como `fatal` con ese mismo código y cuenta en `skipped_count`.
1013
+ * - Filas `fatal` y `duplicate_account`: Se omiten, salvo una `duplicate_account` cuya cuenta está archivada, que se reactiva.
977
1014
  * - Cuentas previamente archivadas con el mismo número: Se reactivan en lugar de duplicarse.
978
1015
  */
979
1016
  post: operations["commitBeneficiaryImport"];
@@ -1022,9 +1059,9 @@ export interface paths {
1022
1059
  * Obtener métricas de uso de la API
1023
1060
  * @description Devuelve las métricas de uso de la API del usuario autenticado:
1024
1061
  *
1025
- * - Peticiones a la API hoy y en el mes.
1062
+ * - Peticiones con clave de API hoy y en el mes.
1026
1063
  * - Cuota del plan vigente.
1027
- * - Últimas peticiones a la API.
1064
+ * - Últimas 15 peticiones con clave de API.
1028
1065
  * - Validaciones consumidas por mes.
1029
1066
  * - Estado actual del servicio Banxico CEP.
1030
1067
  */
@@ -1048,7 +1085,7 @@ export interface paths {
1048
1085
  * Obtener el resumen del panel
1049
1086
  * @description Devuelve los contadores agregados del usuario: el total histórico, el total
1050
1087
  * del mes UTC en curso, las validaciones con veredicto `valid`, el contador
1051
- * mensual de los estados `pending` y `processing`, el monto promedio y la
1088
+ * mensual de los estados `queued` y `processing`, el monto promedio y la
1052
1089
  * tasa de éxito. Incluye también la cantidad de beneficiarios activos.
1053
1090
  *
1054
1091
  * `relationships.recent_validations` contiene las validaciones no retiradas
@@ -1136,7 +1173,10 @@ export interface paths {
1136
1173
  * - `degraded`: Problemas parciales — latencia elevada o errores
1137
1174
  * intermitentes.
1138
1175
  * - `down`: El servicio es por el momento inaccesible.
1139
- * - `unknown`: Aún no hay datos de chequeos de salud disponibles.
1176
+ * - `unknown`: No hay datos de salud vigentes: aún no se ha ejecutado ningún
1177
+ * chequeo, o el último es más viejo que tres veces `check_interval_seconds`
1178
+ * porque el chequeo automático dejó de correr. En ese caso `last_verified_at`
1179
+ * conserva la fecha de ese último chequeo.
1140
1180
  *
1141
1181
  * La respuesta se cachea 60 segundos en el cliente con `Cache-Control`, y ese
1142
1182
  * plazo se configura en el despliegue. Cualquier usuario autenticado puede
@@ -1229,7 +1269,7 @@ export interface paths {
1229
1269
  *
1230
1270
  * Cada endpoint puede suscribirse a diferentes eventos, entre ellos:
1231
1271
  *
1232
- * - Eventos `validation.*`: Esperan cualquier estado terminal de una validación para notificar ese estado mediante el webhook (p. ej: `validation.completed`, `validation.error`, etc).
1272
+ * - Eventos `validation.*`: Avisan de cada veredicto de una validación y de cada paso de sus reintentos automáticos (p. ej: `validation.completed`, `validation.error`, etc).
1233
1273
  * - Evento `validation.returned`: avisa cuando una validación que ya había salido `valid` pasa después a `returned` porque Banxico reportó la devolución; no se emite al crear la validación, donde el evento es `validation.completed`. Para recibirlo hay que suscribirse a él además de a `validation.completed`.
1234
1274
  * - Eventos `billing.*`: No producen entregas hasta que haya algún movimiento en la suscripción del usuario (p. ej: `billing.subscription_canceled`, `billing.payment_succeeded`, cuotas de uso, etc).
1235
1275
  *
@@ -1403,7 +1443,7 @@ export interface paths {
1403
1443
  * Listar entregas de todos los endpoints webhook
1404
1444
  * @description Devuelve una vista consolidada de las entregas hechas a los endpoints webhook del usuario autenticado.
1405
1445
  *
1406
- * Se puede filtrar por endpoint, estado y tipo de evento.
1446
+ * Se puede buscar por texto con `q` y filtrar por endpoint, estado, tipo de evento, validación, código HTTP, rango de fechas, número de intento y tiempo de respuesta.
1407
1447
  */
1408
1448
  get: operations["listAllDeliveries"];
1409
1449
  put?: never;
@@ -1424,8 +1464,7 @@ export interface paths {
1424
1464
  /**
1425
1465
  * Exportar todas las entregas webhook como CSV o XLSX
1426
1466
  * @description Descarga el historial de entregas de **todos** los endpoints de la cuenta de usuario en
1427
- * un archivo, con los mismos filtros que el listado: endpoint, estado y tipo de
1428
- * evento.
1467
+ * un archivo, con los mismos filtros y la misma búsqueda (`q`) que el listado.
1429
1468
  *
1430
1469
  * {% concept slug="exports-and-formats" %}El formato se elige{% /concept %} con `?format` —`csv` por defecto, `xlsx` como
1431
1470
  * alternativa— y el tope es de 100 000 filas, que `?limit` puede bajar.
@@ -1556,8 +1595,9 @@ export interface paths {
1556
1595
  };
1557
1596
  /**
1558
1597
  * Consultar índices de consumo mes a mes
1559
- * @description Devuelve el consumo mensual de validaciones del usuario autenticado en los
1560
- * últimos `months` meses, de más reciente a más antiguo.
1598
+ * @description Devuelve el consumo mensual de validaciones del usuario autenticado en hasta
1599
+ * `months` meses con consumo, de más reciente a más antiguo. Los meses sin
1600
+ * consumo no aparecen.
1561
1601
  *
1562
1602
  * {% callout type="warning" %}
1563
1603
  * El límite que acompaña a cada fila es el de hoy, no el que regía aquel mes:
@@ -1582,7 +1622,7 @@ export interface paths {
1582
1622
  };
1583
1623
  /**
1584
1624
  * Desglosar consumo por operación
1585
- * @description Desglosa el consumo del periodo indicado por tipo de operación contabilizada (`validation`, `validation_ocr`, etc.).
1625
+ * @description Desglosa el consumo del periodo indicado por tipo de operación contabilizada (`validation` y `sms_2fa`).
1586
1626
  *
1587
1627
  * El parámetro `period` acepta `current` para el mes en curso o una cadena `YYYY-MM` para un mes específico.
1588
1628
  */
@@ -2090,7 +2130,7 @@ export interface components {
2090
2130
  api_version?: string;
2091
2131
  /**
2092
2132
  * @description Identificador único de la petición (hex).
2093
- * @example a1b2c3d4e5f6
2133
+ * @example a1b2c3d4e5f66f5e4d3c2b1a
2094
2134
  */
2095
2135
  request_id?: string;
2096
2136
  datetime?: components["schemas"]["DatetimeMeta"];
@@ -2114,8 +2154,8 @@ export interface components {
2114
2154
  */
2115
2155
  version?: string;
2116
2156
  /**
2117
- * @description Identificador único de la petición (UUID hex).
2118
- * @example a1b2c3d4e5f6
2157
+ * @description Identificador único de la petición (24 caracteres hex).
2158
+ * @example a1b2c3d4e5f66f5e4d3c2b1a
2119
2159
  */
2120
2160
  request_id?: string;
2121
2161
  };
@@ -2138,7 +2178,7 @@ export interface components {
2138
2178
  api_version?: string;
2139
2179
  /**
2140
2180
  * @description Identificador único de la petición (hex).
2141
- * @example a1b2c3d4e5f6
2181
+ * @example a1b2c3d4e5f66f5e4d3c2b1a
2142
2182
  */
2143
2183
  request_id?: string;
2144
2184
  datetime?: components["schemas"]["DatetimeMeta"];
@@ -2186,17 +2226,17 @@ export interface components {
2186
2226
  */
2187
2227
  name?: string;
2188
2228
  /**
2189
- * @description Rol de la cuenta de usuario en la organización. Decide qué permisos tienen sus sesiones — `owner`: Es la titular; `admin`: La administra; `user`: La usa; `viewer`: Solo lee.
2229
+ * @description Rol de la cuenta de usuario en la organización. Decide qué permisos tienen sus sesiones — `owner`: Es la titular; `admin`: La administra; `user`: La usa.
2190
2230
  * @example user
2191
2231
  * @enum {string}
2192
2232
  */
2193
- role?: "owner" | "admin" | "user" | "viewer";
2233
+ role?: "owner" | "admin" | "user";
2194
2234
  /**
2195
- * @description Estado de la cuenta de usuario — `active`: Permite operar con normalidad; `suspended`: Cuenta suspendida; `pending_verification`: Falta verificación de correo electrónico.
2235
+ * @description Estado de la cuenta de usuario — `active`: Permite operar con normalidad; `suspended`: Cuenta suspendida; `revoked`: Eliminada por el usuario.
2196
2236
  * @example active
2197
2237
  * @enum {string}
2198
2238
  */
2199
- status?: "active" | "suspended" | "pending_verification";
2239
+ status?: "active" | "suspended" | "revoked";
2200
2240
  /**
2201
2241
  * @description Zona horaria IANA con la que se presentan las fechas al usuario.
2202
2242
  * @example America/Mexico_City
@@ -2224,7 +2264,7 @@ export interface components {
2224
2264
  api_key?: {
2225
2265
  /**
2226
2266
  * @description Primeros 8 caracteres de la clave de API.
2227
- * @example veriko_a1b2
2267
+ * @example veriko_
2228
2268
  */
2229
2269
  prefix?: string;
2230
2270
  /**
@@ -2278,7 +2318,7 @@ export interface components {
2278
2318
  */
2279
2319
  enabled?: boolean;
2280
2320
  /**
2281
- * @description Canal por el que se entrega el código de autenticación (OTP) — `sms`: Por mensaje de texto; `email`: Por correo electrónico; `null`: La autenticación de 2 factores (2FA) está desactivada.
2321
+ * @description Canal por el que se entrega el código de autenticación (OTP) — `sms`: Por mensaje de texto; `email`: Por correo electrónico; `null`: La cuenta de usuario nunca lo ha configurado. Al desactivar la 2FA se conserva el último canal usado.
2282
2322
  * @example sms
2283
2323
  * @enum {string|null}
2284
2324
  */
@@ -2311,7 +2351,7 @@ export interface components {
2311
2351
  telegram_linked?: boolean;
2312
2352
  };
2313
2353
  /**
2314
- * @description `true` cuando hay una aceptación vigente de los Términos de Servicio y el Aviso de Privacidad (ambos documentos). `false` cuando falta cualquiera de los dos, o cuando quedó antes de `LEGAL_REACCEPT_SINCE` (vacía por defecto). Gatea el modal de consentimiento post-login.
2354
+ * @description `true` cuando no queda pendiente la aceptación de ningún documento: ni los Términos de Servicio ni el Aviso de Privacidad. `false` cuando falta la aceptación de cualquiera de los dos, o cuando el equipo exigió aceptar una versión que la cuenta todavía no ha aceptado. Gatea el modal de consentimiento post-login, que lista lo pendiente en `GET /users/me/legal/pending`.
2315
2355
  * @example true
2316
2356
  */
2317
2357
  legal_accepted?: boolean;
@@ -2354,7 +2394,7 @@ export interface components {
2354
2394
  ValidationRequest: ({
2355
2395
  /**
2356
2396
  * Format: date
2357
- * @description Fecha de la transferencia en formato ISO 8601 (YYYY-MM-DD).
2397
+ * @description Fecha de envío de la transferencia en formato ISO 8601 (YYYY-MM-DD). Con ella Banxico localiza el CEP, y puede diferir del día de operación que el CEP imprime (`banxico_result.operationDate`).
2358
2398
  * @example 2025-03-15
2359
2399
  */
2360
2400
  fecha: string;
@@ -2365,12 +2405,12 @@ export interface components {
2365
2405
  */
2366
2406
  monto: number;
2367
2407
  /**
2368
- * @description Clave de rastreo de la transferencia (entre 1 a 30 caracteres). Acepta letras, números, guiones, diagonales y espacios. Se recorta y se le quitan caracteres invisibles de ancho cero antes de validarse, para que la misma clave copiada y pegada compare igual en toda la plataforma. Requerida si `referencia_numerica` no es enviada; ambas pueden incluirse simultáneamente para mayor precisión de búsqueda.
2408
+ * @description Clave de rastreo de la transferencia (entre 1 a 30 caracteres). Acepta letras, números, espacios y los signos de puntuación que admite Banxico (como guiones, diagonales, puntos, comas, `#`, `@` o `_`), pero no `<`, `>` ni la barra invertida. Se recorta y se le quitan caracteres invisibles de ancho cero antes de validarse, para que la misma clave copiada y pegada compare igual en toda la plataforma. Requerida si `referencia_numerica` no es enviada. Si vienen las dos, la consulta a Banxico se hace sólo por la clave.
2369
2409
  * @example MXBA20250315001234
2370
2410
  */
2371
2411
  clave_rastreo?: string;
2372
2412
  /**
2373
- * @description Referencia numérica de la transferencia (entre 1 y 7 dígitos). Acepta solo números y espacios. Requerida si `clave_rastreo` no es enviada; ambas pueden incluirse simultáneamente para mayor precisión de búsqueda.
2413
+ * @description Referencia numérica de la transferencia (entre 1 y 7 dígitos). Acepta solo números y espacios. Requerida si `clave_rastreo` no es enviada. Si viene `clave_rastreo`, la consulta se hace sólo por la clave, y una referencia mal formada no se rechaza: se ignora y se deja un aviso.
2374
2414
  * @example 1234567
2375
2415
  */
2376
2416
  referencia_numerica?: string;
@@ -2416,15 +2456,12 @@ export interface components {
2416
2456
  */
2417
2457
  client_ref?: string;
2418
2458
  } & (unknown | unknown)) | unknown | unknown;
2419
- /**
2420
- * @description Código estable del fallo de una validación.
2421
- * @enum {string}
2422
- */
2423
- ValidationErrorCode: "network" | "captcha" | "max_retries_exceeded" | "ttl_expired" | "preflight_failed" | "rate_limit_exhausted" | "dispatch_failed" | "bank_code_unresolvable_for_phone" | "intra_bank_no_cep" | "not_found_identity" | "not_found_account" | "not_found_amount" | "not_found_account_and_amount" | "not_found_account_or_amount";
2459
+ /** @description Código estable del fallo de una validación. La lista no es cerrada: un fallo inesperado trae `internal_error` y otros fallos pueden traer el código de su causa, así que trata un valor desconocido como un fallo genérico. */
2460
+ ValidationErrorCode: string | ("network" | "captcha" | "max_retries_exceeded" | "ttl_expired" | "preflight_failed" | "rate_limit_exhausted" | "dispatch_failed" | "bank_code_unresolvable_for_phone" | "intra_bank_no_cep" | "not_found_identity" | "not_found_account" | "not_found_amount" | "not_found_account_and_amount" | "not_found_account_or_amount" | "internal_error");
2424
2461
  /** @description Estado completo del ciclo de reintentos, con configuración, avance y situación actual. */
2425
2462
  RetryStateFull: {
2426
2463
  /**
2427
- * @description `true` cuando existe un ciclo de reintentos activo.
2464
+ * @description `true` cuando la validación tiene reintentos configurados, aunque su ciclo ya haya terminado (`terminal_state`).
2428
2465
  * @example true
2429
2466
  */
2430
2467
  enabled?: boolean;
@@ -2510,7 +2547,7 @@ export interface components {
2510
2547
  * @example 1320
2511
2548
  */
2512
2549
  processing_time_ms?: number | null;
2513
- /** @description Copia de los campos de la petición original. */
2550
+ /** @description Copia de los campos de la petición original. `fecha` conserva la fecha de envío tal como se envió, aunque Banxico haya encontrado el pago con otra (`banxico_result._fecha`). */
2514
2551
  request_data?: {
2515
2552
  [key: string]: unknown;
2516
2553
  };
@@ -2545,7 +2582,7 @@ export interface components {
2545
2582
  processing_started_at?: string | null;
2546
2583
  /**
2547
2584
  * Format: date-time
2548
- * @description Fecha y hora, en ISO 8601 UTC, de expiración para validaciones en cola. Tras esta marca, la validación pasa a `failed`.
2585
+ * @description Fecha y hora, en ISO 8601 UTC, de expiración para validaciones en cola. Tras esta marca, la validación pasa a `error` con `error_code` `ttl_expired`.
2549
2586
  * @example 2026-04-30T10:15:00Z
2550
2587
  */
2551
2588
  expires_at?: string | null;
@@ -2556,7 +2593,7 @@ export interface components {
2556
2593
  etag_version?: number | null;
2557
2594
  /**
2558
2595
  * @description Referencia relativa del comprobante, imagen o PDF (solo si `validation_type` es del tipo `ocr`). No se publica cuando el archivo no se conserva: ver `image_retained`.
2559
- * @example ocr/2026/04/a1b2c3d4.jpg
2596
+ * @example comprobantes/3fa85f64-5717-4562-b3fc-2c963f66afa6.jpg
2560
2597
  */
2561
2598
  image_path?: string | null;
2562
2599
  /**
@@ -2589,7 +2626,7 @@ export interface components {
2589
2626
  * @example 0.94
2590
2627
  */
2591
2628
  ocr_confidence?: number | null;
2592
- /** @description Campos normalizados después de la extracción OCR (solo si `validation_type` es del tipo `ocr`). */
2629
+ /** @description Campos normalizados después de la extracción OCR (si `validation_type` es del tipo `ocr`), o la cuenta ganadora en `cuenta_beneficiaria` cuando una validación directa envió `cuentas_candidatas`. Una lápida conserva aquí solo el monto. */
2593
2630
  normalized_data?: {
2594
2631
  [key: string]: unknown;
2595
2632
  } | null;
@@ -2615,9 +2652,9 @@ export interface components {
2615
2652
  created_at: string;
2616
2653
  };
2617
2654
  /**
2618
- * @description Conflicto entre la cuenta enviada y la que muestra la imagen. Solo aparece en validaciones de tipo `ocr`, cuando se envió `cuenta_beneficiaria` y la imagen muestra otra cuenta completa de la misma longitud, válida y con confianza suficiente.
2655
+ * @description Conflicto entre la cuenta enviada y la que muestra la imagen. Solo aparece en validaciones de tipo `ocr`, cuando se envió `cuenta_beneficiaria` y la imagen muestra otra cuenta completa de la misma longitud, válida y con confianza suficiente, o una cuenta enmascarada cuyos dígitos finales visibles (3 o más) no son el final de la cuenta enviada.
2619
2656
  *
2620
- * Prevalece la cuenta enviada, que es la que se consulta en Banxico: el campo no cambia el veredicto. Si el pago fue a la cuenta de la imagen, lo esperable es un `not_found`. Solo trae los últimos 4 dígitos de cada cuenta, y el conflicto también se añade a `normalization_warnings`.
2657
+ * Prevalece la cuenta enviada, que es la que se consulta en Banxico: el campo no cambia el veredicto. Si el pago fue a la cuenta de la imagen, lo esperable es un `not_found`. Solo trae los últimos 4 dígitos de cada cuenta, y el conflicto también se añade a `normalization_warnings`. Con una cuenta enmascarada, `read_last4` trae los dígitos finales que el propio comprobante muestra (3 o 4), nunca más.
2621
2658
  */
2622
2659
  account_conflict?: {
2623
2660
  /**
@@ -2626,7 +2663,7 @@ export interface components {
2626
2663
  */
2627
2664
  sent_last4: string;
2628
2665
  /**
2629
- * @description Últimos 4 dígitos de la cuenta completa que muestra la imagen.
2666
+ * @description Últimos 4 dígitos de la cuenta que muestra la imagen (los visibles, 3 o 4, si está enmascarada).
2630
2667
  * @example 9012
2631
2668
  */
2632
2669
  read_last4: string;
@@ -2665,15 +2702,26 @@ export interface components {
2665
2702
  * `label`, `settled`, `reversed` y `checked_at` (ISO 8601 UTC).
2666
2703
  * Su ausencia significa que no se pudo saber, nunca que el pago esté liquidado.
2667
2704
  * Se actualiza en cada revisión posterior, y con `devuelto` o `en_proceso_devolucion` la validación pasa a `returned`.
2705
+ *
2706
+ * `_fecha` aparece cuando Banxico no encontró el pago con la fecha enviada y sí con otra.
2707
+ * `used` es la fecha con la que se encontró, `requested` es la fecha con la que se consultó primero
2708
+ * y `reason` es el motivo por el que se probó `used`.
2709
+ * Valores de `reason`:
2710
+ * `clave_embedded_date`: La clave de rastreo incrusta otra fecha, a un día hábil SPEI o menos de la enviada;
2711
+ * `cutoff_18h`: La clave no incrusta fecha y el comprobante indica una hora cercana al corte de las 18:00,
2712
+ * así que se probó el día siguiente;
2713
+ * `dia_operacion`: La clave incrusta la fecha enviada, porque el comprobante trae la de operación,
2714
+ * y se probó un día anterior hasta el día hábil previo.
2715
+ * El veredicto sigue siendo el de Banxico, y `request_data.fecha` conserva la fecha enviada.
2668
2716
  */
2669
2717
  banxico_result?: ({
2670
2718
  /**
2671
- * @description Fecha de la operación tal como la reporta el CEP de Banxico (`AAAA-MM-DD`).
2719
+ * @description Día hábil SPEI que Banxico asignó a la operación, tal como lo reporta el CEP (`YYYY-MM-DD`), en hora del centro de México. Puede diferir de la fecha de envío: lo enviado a partir de las 18:00, en sábado, en domingo o en un día inhábil opera el siguiente día hábil.
2672
2720
  * @example 2025-03-15
2673
2721
  */
2674
2722
  operationDate?: string;
2675
2723
  /**
2676
- * @description Hora de la operación tal como la reporta el CEP de Banxico (`HH:MM:SS`).
2724
+ * @description Hora de la operación tal como la reporta el CEP (`HH:MM:SS`), en hora del centro de México y no en UTC.
2677
2725
  * @example 14:22:10
2678
2726
  */
2679
2727
  processingTime?: string;
@@ -2764,13 +2812,13 @@ export interface components {
2764
2812
  */
2765
2813
  self?: string;
2766
2814
  /**
2767
- * @description URL del CEP en formato XML. `null` cuando `status` no es `valid`, o es `returned` sin comprobante (la operación se devolvió antes de emitirse un CEP).
2768
- * @example /v1/validations/a1b2c3d4-e5f6-7890-abcd-ef0123456789/cep.xml
2815
+ * @description URL del CEP en formato XML. Solo aparece cuando `banxico_status` es `valid`, o es `returned` con comprobante, y la validación no se purgó; si no, se omite el objeto `links`.
2816
+ * @example /v1/validations/a1b2c3d4-e5f6-4890-abcd-ef0123456789/cep?format=xml
2769
2817
  */
2770
2818
  cep_xml?: string | null;
2771
2819
  /**
2772
- * @description URL del CEP en formato PDF. `null` cuando `status` no es `valid`, o es `returned` sin comprobante (la operación se devolvió antes de emitirse un CEP).
2773
- * @example /v1/validations/a1b2c3d4-e5f6-7890-abcd-ef0123456789/cep.pdf
2820
+ * @description URL del CEP en formato PDF. Solo aparece cuando `banxico_status` es `valid`, o es `returned` con comprobante, y la validación no se purgó; si no, se omite el objeto `links`.
2821
+ * @example /v1/validations/a1b2c3d4-e5f6-4890-abcd-ef0123456789/cep?format=pdf
2774
2822
  */
2775
2823
  cep_pdf?: string | null;
2776
2824
  };
@@ -2839,13 +2887,13 @@ export interface components {
2839
2887
  OcrValidationRequest: {
2840
2888
  /**
2841
2889
  * Format: byte
2842
- * @description Comprobante codificado en base64, en imagen o en PDF. Si también se proporciona `image_url`, solo se considera `image`. Formatos aceptados: JPEG, PNG, WebP o PDF de 1 a 3 páginas. Tamaño máximo: `12 MB`. Dimensiones máximas de una imagen: `12000px` por lado. Admite el prefijo `data:image/...;base64,` o `data:application/pdf;base64,`.
2890
+ * @description Comprobante codificado en base64, en imagen o en PDF. Si también se proporciona `image_url`, solo se considera `image_url`. Formatos aceptados: JPEG, PNG, WebP o PDF de 1 a 3 páginas. Tamaño máximo: `12 MB`. Dimensiones máximas de una imagen: `12000px` por lado. Admite el prefijo `data:image/...;base64,` o `data:application/pdf;base64,`.
2843
2891
  * @example iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==
2844
2892
  */
2845
2893
  image?: string;
2846
2894
  /**
2847
2895
  * Format: uri
2848
- * @description URL pública (HTTPS) del comprobante. Sigue los mismos límites de formato y tamaño que `image`: JPEG, PNG, WebP o PDF de 1 a 3 páginas, con un máximo de `12 MB`.
2896
+ * @description URL pública (HTTPS) del comprobante. Sigue los mismos límites de formato y tamaño que `image`: JPEG, PNG, WebP o PDF de 1 a 3 páginas, con un máximo de `12 MB`. Una URL `http` responde un estado HTTP `422` (con `invalid_url_scheme` en el cuerpo), y una redirección hacia `http` no se sigue.
2849
2897
  * @example https://storage.example.com/receipts/comprobante-2025-03.jpg
2850
2898
  */
2851
2899
  image_url?: string;
@@ -2866,6 +2914,16 @@ export interface components {
2866
2914
  * ]
2867
2915
  */
2868
2916
  cuentas_candidatas?: string[];
2917
+ /**
2918
+ * @description **Código SPEI** del banco emisor (4 o 5 dígitos, p. ej. `40012`), para corregir el que se leyó del comprobante. Sustituye al leído antes de consultar Banxico. Un valor que no son 4 o 5 dígitos (un nombre, por ejemplo) se ignora y se conserva el leído.
2919
+ * @example 40012
2920
+ */
2921
+ banco_emisor?: string;
2922
+ /**
2923
+ * @description **Código SPEI** del banco receptor (4 o 5 dígitos, p. ej. `40002`), para corregir el que se leyó del comprobante. Sustituye al leído antes de consultar Banxico. Un valor que no son 4 o 5 dígitos (un nombre, por ejemplo) se ignora y se conserva el leído.
2924
+ * @example 40002
2925
+ */
2926
+ banco_receptor?: string;
2869
2927
  /** @description Política de reintentos automáticos para esta validación. Si se omite, se aplica la política general del usuario, configurada en `PUT /v1/users/me/retry-policy`. **Los reintentos no consumen cuota de validaciones**. */
2870
2928
  retry_policy?: components["schemas"]["RetryPolicy"];
2871
2929
  /**
@@ -2887,7 +2945,7 @@ export interface components {
2887
2945
  /** @description Estado resumido del ciclo de reintentos, con la configuración representada como `null`. */
2888
2946
  RetryStateCompact: {
2889
2947
  /**
2890
- * @description `true` cuando existe un ciclo de reintentos activo.
2948
+ * @description `true` cuando la validación tiene reintentos configurados, aunque su ciclo ya haya terminado (`terminal_state`).
2891
2949
  * @example true
2892
2950
  */
2893
2951
  enabled?: boolean;
@@ -2934,7 +2992,7 @@ export interface components {
2934
2992
  id: string;
2935
2993
  /** @description Datos mostrados en el historial de validaciones. */
2936
2994
  attributes: {
2937
- /** @description Nombre del banco de la contraparte. Prioriza `receptor_name` o `emisor_name` guardado; si falta, intenta resolver el código de receptor o emisor. Si tampoco puede resolverlo, devuelve ese código o `Banco no identificado`. */
2995
+ /** @description Nombre del banco de la contraparte. Prioriza `receptor_name` o `emisor_name` guardado; si falta, intenta resolver el código de receptor o emisor. Si tampoco puede resolverlo, devuelve el valor guardado cuando no es una clave numérica, o `Banco no identificado` (en inglés, `Unidentified bank`). */
2938
2996
  bank_name?: string;
2939
2997
  /** @description Clave Banxico canónica (3-5 dígitos) del banco de la contraparte, resuelta por la autoridad del dominio. `null` cuando el banco no pudo resolverse. Es aditiva respecto de `bank_name`: sirve para resolver recursos/avatares por clave, nunca por el nombre visible. */
2940
2998
  bank_code?: string | null;
@@ -3425,7 +3483,7 @@ export interface components {
3425
3483
  */
3426
3484
  bin: string;
3427
3485
  /**
3428
- * @description Nombre oficial del banco, resuelto a partir de su `bank_code`.
3486
+ * @description Nombre del banco registrado para ese BIN.
3429
3487
  * @example BBVA MEXICO
3430
3488
  */
3431
3489
  bank_name: string;
@@ -3460,6 +3518,84 @@ export interface components {
3460
3518
  BinLookupResponse: components["schemas"]["SuccessEnvelope"] & {
3461
3519
  data: components["schemas"]["BinResource"];
3462
3520
  };
3521
+ /** @description Calendario de días inhábiles SPEI de un año, en formato JSON:API. `id` y `attributes.year` son siempre iguales: el año del calendario. */
3522
+ SpeiCalendarResource: components["schemas"]["JsonApiResourceBase"] & {
3523
+ /**
3524
+ * @description Tipo de recurso JSON:API. Siempre `spei_calendar`.
3525
+ * @example spei_calendar
3526
+ * @enum {string}
3527
+ */
3528
+ type: "spei_calendar";
3529
+ /**
3530
+ * @description Año del calendario (cuatro dígitos).
3531
+ * @example 2026
3532
+ */
3533
+ id: string;
3534
+ /** @description Datos del calendario del año. */
3535
+ attributes: {
3536
+ /**
3537
+ * @description Año del calendario (cuatro dígitos). Mismo valor que `id`.
3538
+ * @example 2026
3539
+ */
3540
+ year: number;
3541
+ /**
3542
+ * @description Días inhábiles que caen de lunes a viernes (`YYYY-MM-DD`), de menor a mayor. Los sábados y los domingos también son inhábiles y no se repiten aquí.
3543
+ * @example [
3544
+ * "2026-01-01",
3545
+ * "2026-02-02",
3546
+ * "2026-03-16",
3547
+ * "2026-04-02",
3548
+ * "2026-04-03",
3549
+ * "2026-05-01",
3550
+ * "2026-09-16",
3551
+ * "2026-11-02",
3552
+ * "2026-11-16",
3553
+ * "2026-12-25"
3554
+ * ]
3555
+ */
3556
+ non_business_days: string[];
3557
+ /** @description Disposición oficial de la que sale el calendario. */
3558
+ source: {
3559
+ /**
3560
+ * @description Siglas de la autoridad que emite la disposición, por ejemplo `CNBV`.
3561
+ * @example CNBV
3562
+ */
3563
+ issuer: string;
3564
+ /**
3565
+ * @description Siglas del medio oficial en el que se publicó la disposición, por ejemplo `DOF`.
3566
+ * @example DOF
3567
+ */
3568
+ published_in: string;
3569
+ /**
3570
+ * Format: date
3571
+ * @description Fecha de publicación de la disposición (`YYYY-MM-DD`).
3572
+ * @example 2025-12-10
3573
+ */
3574
+ published_on: string;
3575
+ /**
3576
+ * @description Título oficial de la disposición, en español.
3577
+ * @example Disposiciones de carácter general que señalan los días del año 2026 en que las entidades financieras sujetas a la supervisión de la Comisión Nacional Bancaria y de Valores deberán cerrar sus puertas y suspender operaciones
3578
+ */
3579
+ title: string;
3580
+ };
3581
+ };
3582
+ };
3583
+ /** @description Respuesta de `GET /v1/public/spei-calendar/{year}`. Un único recurso con los días inhábiles SPEI del año y su fuente, y en `meta.covered_years` los años que tienen calendario. Un año sin calendario responde `404`, no este cuerpo. */
3584
+ SpeiCalendarResponse: components["schemas"]["SuccessEnvelope"] & {
3585
+ data: components["schemas"]["SpeiCalendarResource"];
3586
+ /** @description Metadatos de la respuesta. */
3587
+ meta?: {
3588
+ /**
3589
+ * @description Años con calendario publicado, de menor a mayor.
3590
+ * @example [
3591
+ * 2024,
3592
+ * 2025,
3593
+ * 2026
3594
+ * ]
3595
+ */
3596
+ covered_years?: number[];
3597
+ };
3598
+ };
3463
3599
  /** @description Cupo de beneficiarios activos del plan y ocupación actual de la cuenta autenticada. */
3464
3600
  BeneficiaryCapacity: {
3465
3601
  /** @description Tope de beneficiarios activos. `-1` significa sin tope. */
@@ -3498,12 +3634,12 @@ export interface components {
3498
3634
  */
3499
3635
  account_type: "clabe" | "card" | "phone";
3500
3636
  /**
3501
- * @description Código SPEI (5 dígitos) del banco resuelto.
3637
+ * @description Código SPEI (5 dígitos) del banco resuelto. Es la cadena vacía (`""`) cuando la cuenta no tiene un banco conocido: una tarjeta cuyo BIN no está en el directorio. En ese caso `bank_name` trae un texto de relleno en el idioma de la petición.
3502
3638
  * @example 40012
3503
3639
  */
3504
3640
  bank_code: string;
3505
3641
  /**
3506
- * @description Nombre oficial del banco, resuelto a partir de su `bank_code`.
3642
+ * @description Nombre oficial del banco, resuelto a partir de su `bank_code`. Con un `bank_code` vacío es un texto de relleno («BIN no reconocido (411111)»), que se traduce al idioma de la petición.
3507
3643
  * @example BBVA MEXICO
3508
3644
  */
3509
3645
  bank_name: string;
@@ -3601,7 +3737,7 @@ export interface components {
3601
3737
  */
3602
3738
  account_type: "clabe" | "card" | "phone";
3603
3739
  /**
3604
- * @description Código SPEI (5 dígitos) del banco resuelto.
3740
+ * @description Código SPEI (5 dígitos) del banco resuelto. Es la cadena vacía (`""`) para una tarjeta cuyo BIN no está en el directorio.
3605
3741
  * @example 40012
3606
3742
  */
3607
3743
  bank_code: string;
@@ -3625,12 +3761,13 @@ export interface components {
3625
3761
  CreateBeneficiaryImportRequest: {
3626
3762
  /**
3627
3763
  * Format: binary
3628
- * @description Archivo a importar. Formatos aceptados: CSV, XLS, XLSX, TXT o PDF. Tamaño máximo: 20 MB.
3764
+ * @description Archivo a importar. Formatos aceptados: CSV, XLS, XLSX, TXT, JSON o PDF. Tamaño máximo: 20 MB.
3629
3765
  * @example beneficiarios-marzo.csv
3630
3766
  */
3631
3767
  file: string;
3632
3768
  /**
3633
3769
  * @description Modo de lectura del archivo — `template`: Respeta los encabezados canónicos; `free`: Formato libre, el sistema deduce la estructura.
3770
+ * @default template
3634
3771
  * @example template
3635
3772
  * @enum {string}
3636
3773
  */
@@ -3686,11 +3823,11 @@ export interface components {
3686
3823
  */
3687
3824
  status?: "pending" | "parsing" | "preview_ready" | "committing" | "completed" | "failed" | "cancelled";
3688
3825
  /**
3689
- * @description Formato del archivo subido. Aceptados: `csv`, `xls`, `xlsx`, `txt` o `pdf`.
3826
+ * @description Formato del archivo subido. Aceptados: `csv`, `xls`, `xlsx`, `txt`, `json` o `pdf`.
3690
3827
  * @example csv
3691
3828
  * @enum {string}
3692
3829
  */
3693
- file_format?: "csv" | "xls" | "xlsx" | "txt" | "pdf";
3830
+ file_format?: "csv" | "xls" | "xlsx" | "txt" | "json" | "pdf";
3694
3831
  /**
3695
3832
  * @description Modo de lectura del archivo — `template`: Respeta los encabezados canónicos; `free`: Formato libre, el sistema deduce la estructura.
3696
3833
  * @example template
@@ -3738,7 +3875,7 @@ export interface components {
3738
3875
  */
3739
3876
  llm_invoked?: boolean;
3740
3877
  /**
3741
- * @description Código estable del fallo del trabajo. `null` cuando no terminó en `failed`. Por ejemplo, `file_corrupt` o `plan_cap_exceeded`.
3878
+ * @description Código estable del fallo del trabajo. `null` cuando no terminó en `failed`. Por ejemplo, `file_corrupt` o `empty_file`.
3742
3879
  * @example null
3743
3880
  */
3744
3881
  error_code?: string | null;
@@ -3844,7 +3981,7 @@ export interface components {
3844
3981
  [key: string]: unknown;
3845
3982
  };
3846
3983
  /**
3847
- * @description Fragmento del archivo original para diagnóstico. Los dígitos de 6 o más caracteres consecutivos aparecen enmascarados (`••••`) para evitar exposición de números de tarjeta en los cuerpos de depuración.
3984
+ * @description Fragmento del archivo original para diagnóstico. Las series de 13 a 19 dígitos que no son una CLABE (18 dígitos) aparecen enmascaradas (`••••` y los últimos cuatro), igual que un número de celular de 10 dígitos cuando lo precede una etiqueta como «cuenta» o «celular», para evitar exposición de números de tarjeta en los cuerpos de depuración.
3848
3985
  * @example {}
3849
3986
  */
3850
3987
  raw_preview?: {
@@ -3981,17 +4118,17 @@ export interface components {
3981
4118
  /** @description Estadísticas de uso de la API, cuota de validaciones y estado de Banxico para la cuenta. */
3982
4119
  ApiUsage: {
3983
4120
  /**
3984
- * @description Cantidad de peticiones a la API del usuario en el día calendario actual (UTC).
4121
+ * @description Cantidad de peticiones del usuario con clave de API en el día calendario actual (UTC).
3985
4122
  * @example 42
3986
4123
  */
3987
4124
  requests_today?: number;
3988
4125
  /**
3989
- * @description Cantidad de peticiones a la API del usuario en el mes calendario actual (UTC).
4126
+ * @description Cantidad de peticiones del usuario con clave de API en el mes calendario actual (UTC).
3990
4127
  * @example 580
3991
4128
  */
3992
4129
  requests_month?: number;
3993
4130
  quota?: components["schemas"]["PlanQuotaState"];
3994
- /** @description Últimas peticiones a la API del usuario, de la más reciente a la más antigua. */
4131
+ /** @description Últimas 15 peticiones del usuario con clave de API, de la más reciente a la más antigua. */
3995
4132
  recent_requests?: {
3996
4133
  /**
3997
4134
  * @description Verbo HTTP de la petición. Uno de `GET`, `POST`, `PUT`, `PATCH` o `DELETE`.
@@ -4062,7 +4199,7 @@ export interface components {
4062
4199
  */
4063
4200
  monthly_validations?: number;
4064
4201
  /**
4065
- * @description Cantidad de validaciones no retiradas del mes UTC en curso cuyo estado almacenado es `pending` o `processing`.
4202
+ * @description Cantidad de validaciones no retiradas del mes UTC en curso cuyo estado almacenado es `queued` o `processing`.
4066
4203
  * @example 3
4067
4204
  */
4068
4205
  pending_month?: number;
@@ -4078,7 +4215,7 @@ export interface components {
4078
4215
  avg_ticket?: number;
4079
4216
  /**
4080
4217
  * @description Tasa de éxito, expresada de `0` a `100`: `valid_validations` entre `total_validations`, redondeada a un decimal. La población histórica es la misma e incluye las validaciones retiradas y las del banco de pruebas (Playground); devuelve `0` cuando el total es `0`.
4081
- * @example 0
4218
+ * @example 90.3
4082
4219
  */
4083
4220
  success_rate_percent?: number;
4084
4221
  /**
@@ -4107,11 +4244,16 @@ export interface components {
4107
4244
  /**
4108
4245
  * Format: uuid
4109
4246
  * @description Identificador único de la validación (UUID v4).
4110
- * @example a1b2c3d4-e5f6-7890-abcd-ef0123456789
4247
+ * @example a1b2c3d4-e5f6-4890-abcd-ef0123456789
4111
4248
  */
4112
4249
  id?: string;
4113
4250
  /** @description Datos resumidos de la validación reciente mostrados en el panel. */
4114
4251
  attributes?: {
4252
+ /**
4253
+ * @description Clave Banxico canónica del banco, si se puede resolver.
4254
+ * @example 40012
4255
+ */
4256
+ bank_code?: string | null;
4115
4257
  /**
4116
4258
  * @description Nombre del banco de la contraparte. Prioriza `receptor_name` o `emisor_name` guardado; si falta, intenta resolver el código de receptor o emisor. Si tampoco puede resolverlo, devuelve ese código o `Banco no identificado`.
4117
4259
  * @example BBVA MEXICO
@@ -4185,6 +4327,33 @@ export interface components {
4185
4327
  /** @description Veredictos que admiten reintentos automáticos. */
4186
4328
  eligible_outcomes?: string[];
4187
4329
  };
4330
+ /** @description Política de reintentos guardada de la cuenta: activación, límite, intervalo y resultados elegibles. Desactivada o sin configurar, trae `enabled=false`, `max_retries=0`, `interval_seconds=0` y `outcomes` vacío. */
4331
+ SavedRetryPolicy: {
4332
+ /**
4333
+ * @description `true` cuando el ciclo de reintentos está activo. Si es `false`, los demás campos pueden ser ignorados.
4334
+ * @example true
4335
+ */
4336
+ enabled?: boolean;
4337
+ /**
4338
+ * @description Número máximo de reintentos automáticos. Una vez alcanzado, el ciclo pasa al estado terminal `exhausted`.
4339
+ * @example 3
4340
+ */
4341
+ max_retries?: number;
4342
+ /**
4343
+ * @description Segundos de espera entre cada reintento. Valores válidos: 300–86400 (5 min a 24h).
4344
+ * @example 600
4345
+ */
4346
+ interval_seconds?: number;
4347
+ /**
4348
+ * @description Resultados que originan un reintento. De forma predeterminada son `not_found`, `cep_unavailable` y `error`; la combinación `["not_found", "cep_unavailable"]` excluye `error`.
4349
+ * @example [
4350
+ * "not_found",
4351
+ * "cep_unavailable",
4352
+ * "error"
4353
+ * ]
4354
+ */
4355
+ outcomes?: ("not_found" | "cep_unavailable" | "error")[];
4356
+ };
4188
4357
  UserRetryPolicyResponse: components["schemas"]["SuccessEnvelope"] & {
4189
4358
  /** @description Metadatos de la respuesta y límites efectivos de reintentos. */
4190
4359
  meta?: {
@@ -4194,7 +4363,7 @@ export interface components {
4194
4363
  data?: {
4195
4364
  /** @enum {string} */
4196
4365
  type?: "retry_policy";
4197
- attributes?: components["schemas"]["RetryPolicy"];
4366
+ attributes?: components["schemas"]["SavedRetryPolicy"];
4198
4367
  };
4199
4368
  };
4200
4369
  /** @description Cuerpo de la petición para actualizar la política de reintentos por defecto del usuario (aplica a futuras validaciones). */
@@ -4204,7 +4373,7 @@ export interface components {
4204
4373
  /** @description Estado público del servicio de verificación de Banxico, tal como lo devuelve `GET /v1/status/banxico`. Muestra el estado operativo actual y una explicación legible. */
4205
4374
  BanxicoPublicStatus: {
4206
4375
  /**
4207
- * @description Estado agregado del servicio de verificación de Banxico — `operational`: Todas las pruebas pasan y la latencia es normal; `degraded`: Problemas parciales (latencia elevada o errores intermitentes); `down`: Servicio inaccesible; `unknown`: Aún no hay datos de salud disponibles.
4376
+ * @description Estado agregado del servicio de verificación de Banxico — `operational`: Todas las pruebas pasan y la latencia es normal; `degraded`: Problemas parciales (latencia elevada o errores intermitentes); `down`: Servicio inaccesible; `unknown`: no hay datos de salud vigentes, porque aún no se ha ejecutado ningún chequeo o porque el último tiene más de tres veces `check_interval_seconds` de antigüedad (el chequeo automático dejó de correr).
4208
4377
  * @example operational
4209
4378
  * @enum {string}
4210
4379
  */
@@ -4220,7 +4389,7 @@ export interface components {
4220
4389
  */
4221
4390
  message: string;
4222
4391
  /**
4223
- * @description Timestamp del último chequeo de salud ejecutado. `null` cuando aún no se ha ejecutado ningún chequeo.
4392
+ * @description Timestamp del último chequeo de salud ejecutado. `null` cuando aún no se ha ejecutado ningún chequeo. Cuando `status` es `unknown` por un chequeo demasiado viejo, conserva la fecha de ese chequeo: dice desde cuándo no hay dato.
4224
4393
  * @example 2026-04-11T15:30:00Z
4225
4394
  */
4226
4395
  last_verified_at: components["schemas"]["TimestampUTC"] | null;
@@ -4368,7 +4537,7 @@ export interface components {
4368
4537
  CreateWebhookRequest: {
4369
4538
  /**
4370
4539
  * Format: uri
4371
- * @description URL receptora del webhook. En producción se rechaza si no usa HTTPS, si resuelve a una dirección privada o si pasa de 2048 caracteres.
4540
+ * @description URL receptora del webhook. Se rechaza si resuelve a una dirección privada o si pasa de 2048 caracteres y, en producción, también si no usa HTTPS.
4372
4541
  * @example https://example.com/webhooks/entregas
4373
4542
  */
4374
4543
  url: string;
@@ -4384,7 +4553,7 @@ export interface components {
4384
4553
  UpdateWebhookRequest: {
4385
4554
  /**
4386
4555
  * Format: uri
4387
- * @description Nueva URL receptora del webhook. En producción se rechaza si no usa HTTPS, si no resuelve a una dirección pública o si supera 2048 caracteres.
4556
+ * @description Nueva URL receptora del webhook. Se rechaza si no resuelve a una dirección pública o si supera 2048 caracteres y, en producción, también si no usa HTTPS.
4388
4557
  * @example https://example.com/webhooks/entregas
4389
4558
  */
4390
4559
  url?: string;
@@ -4721,13 +4890,13 @@ export interface components {
4721
4890
  */
4722
4891
  remaining: number;
4723
4892
  /**
4724
- * @description Porcentaje del límite consumido en el ciclo actual, redondeado a 2 decimales.
4893
+ * @description Porcentaje del límite consumido en el ciclo actual, redondeado a 2 decimales. Puede pasar de 100 si hay excedente.
4725
4894
  * @example 70.5
4726
4895
  */
4727
4896
  used_percent: number;
4728
4897
  /**
4729
4898
  * @description Nivel de alerta según el consumo: `ok` (<70 %), `warn` (70–89 %), `danger` (≥90 % o cuota agotada).
4730
- * @example ok
4899
+ * @example warn
4731
4900
  * @enum {string}
4732
4901
  */
4733
4902
  tone: "ok" | "warn" | "danger";
@@ -4901,12 +5070,12 @@ export interface components {
4901
5070
  /** @description Lista de celdas del mapa; cada entrada es una combinación de `day_of_week` y `hour_of_day` con su conteo. */
4902
5071
  buckets?: {
4903
5072
  /**
4904
- * @description Día de la semana (0 = domingo … 6 = sábado).
5073
+ * @description Día de la semana en UTC (0 = domingo … 6 = sábado).
4905
5074
  * @example 0
4906
5075
  */
4907
5076
  day_of_week?: number;
4908
5077
  /**
4909
- * @description Hora del día (0–23), hora del servidor.
5078
+ * @description Hora del día (0–23), en UTC.
4910
5079
  * @example 0
4911
5080
  */
4912
5081
  hour_of_day?: number;
@@ -5101,22 +5270,20 @@ export interface components {
5101
5270
  */
5102
5271
  month?: string;
5103
5272
  /**
5104
- * Format: date-time
5105
- * @description Inicio del mes en UTC (ISO 8601).
5106
- * @example 2026-04-01T06:00:00Z
5273
+ * @description Inicio del mes en UTC, con formato `YYYY-MM-DD HH:MM:SS`.
5274
+ * @example 2026-04-01 06:00:00
5107
5275
  */
5108
5276
  from_utc?: string;
5109
5277
  /**
5110
- * Format: date-time
5111
- * @description Fin del mes en UTC (ISO 8601, exclusivo).
5112
- * @example 2026-05-01T06:00:00Z
5278
+ * @description Fin del mes en UTC (exclusivo), con formato `YYYY-MM-DD HH:MM:SS`.
5279
+ * @example 2026-05-01 06:00:00
5113
5280
  */
5114
5281
  to_utc?: string;
5115
5282
  };
5116
5283
  /** @description Conteos de validaciones por veredicto, más retiros mediante borrado lógico del periodo (informativo). */
5117
5284
  counts?: {
5118
5285
  /**
5119
- * @description Cantidad de validaciones completadas en el periodo (excluyendo las validaciones con estado `pending`).
5286
+ * @description Cantidad de validaciones del periodo, incluidas las que tienen estado `pending`.
5120
5287
  * @example 287
5121
5288
  */
5122
5289
  total?: number;
@@ -5205,7 +5372,7 @@ export interface components {
5205
5372
  verified_share_pct?: number;
5206
5373
  };
5207
5374
  /**
5208
- * @description Tasa de éxito: porcentaje de validaciones con resultado `valid` sobre el total completado, expresado de 0 a 100.
5375
+ * @description Tasa de éxito: porcentaje de validaciones con resultado `valid` sobre `counts.total`, expresado de 0 a 100.
5209
5376
  * @example 79.4
5210
5377
  */
5211
5378
  success_rate?: number;
@@ -5360,9 +5527,20 @@ export interface components {
5360
5527
  * @description Nombres de las columnas para formato CSV (en el mismo orden que las filas en `rows`).
5361
5528
  * @example [
5362
5529
  * "Fecha",
5363
- * "Monto",
5530
+ * "Folio plataforma",
5531
+ * "Tipo",
5364
5532
  * "Clave de rastreo",
5365
- * "Estado"
5533
+ * "Fecha operación",
5534
+ * "Monto",
5535
+ * "Banco emisor",
5536
+ * "CLABE emisora",
5537
+ * "Banco receptor",
5538
+ * "CLABE receptora",
5539
+ * "Beneficiario",
5540
+ * "Veredicto Banxico",
5541
+ * "CEP disponible",
5542
+ * "Folio CEP",
5543
+ * "Tiempo (ms)"
5366
5544
  * ]
5367
5545
  */
5368
5546
  headers?: string[];
@@ -5370,10 +5548,21 @@ export interface components {
5370
5548
  * @description Primeras 20 filas (máximo) de datos del reporte.
5371
5549
  * @example [
5372
5550
  * [
5551
+ * "2026-04-15 10:32:00",
5552
+ * "c3d4e5f6-a7b8-9012-cdef-123456789012",
5553
+ * "direct",
5554
+ * "MXBA20260415001234",
5373
5555
  * "2026-04-15",
5374
5556
  * "15000.50",
5375
- * "MXBA20260415001234",
5376
- * "valid"
5557
+ * "BBVA MEXICO",
5558
+ * "012180001234567891",
5559
+ * "BANORTE",
5560
+ * "072180009876543210",
5561
+ * "Comercializadora Ejemplo SA de CV",
5562
+ * "valid",
5563
+ * "Sí",
5564
+ * "",
5565
+ * "412"
5377
5566
  * ]
5378
5567
  * ]
5379
5568
  */
@@ -5393,7 +5582,7 @@ export interface components {
5393
5582
  plan_slug?: string;
5394
5583
  /**
5395
5584
  * @description Nombre del plan que muestran las interfaces.
5396
- * @example Pro
5585
+ * @example Personal
5397
5586
  */
5398
5587
  plan_name?: string;
5399
5588
  /**
@@ -5520,17 +5709,59 @@ export interface components {
5520
5709
  BillingSubscriptionQuotaMeta: {
5521
5710
  /**
5522
5711
  * @description Identificador único y legible del plan. Coincide con `data.attributes.plan_slug`.
5523
- * @example pro
5712
+ * @example personal
5713
+ */
5714
+ plan_slug?: string;
5715
+ /**
5716
+ * @description Nombre del plan que muestran las interfaces.
5717
+ * @example Personal
5718
+ */
5719
+ plan_name?: string;
5720
+ /**
5721
+ * @description Modelo de facturación del plan — `free`: Sin cobro; `tiered`: Cuota fija; `metered`: Cobro por consumo; `hybrid`: Cuota fija más consumo.
5722
+ * @example hybrid
5723
+ * @enum {string}
5724
+ */
5725
+ billing_model?: "free" | "tiered" | "metered" | "hybrid";
5726
+ /**
5727
+ * @description Origen de la suscripción — `stripe`: Pago mediante Stripe; `admin_granted`: Concesión administrativa; `system_default`: Plan asignado por el sistema.
5728
+ * @example stripe
5729
+ * @enum {string}
5524
5730
  */
5525
- plan?: string;
5731
+ source?: "stripe" | "admin_granted" | "system_default";
5732
+ /**
5733
+ * @description `true` cuando el usuario aceptó cobro por excedente en un plan `hybrid`. En ese caso, `effective_limit` salta de `included_validations` a `monthly_validation_limit`.
5734
+ * @example false
5735
+ */
5736
+ overage_enabled?: boolean;
5737
+ /**
5738
+ * @description `true` cuando el plan es `hybrid` y el cobro por excedente todavía no está activo: el usuario puede activarlo.
5739
+ * @example false
5740
+ */
5741
+ overage_available?: boolean;
5742
+ /**
5743
+ * @description Límite del ciclo fijado por un administrador para esta suscripción. Cuando existe, manda sobre el del plan. `null` sin ajuste.
5744
+ * @example null
5745
+ */
5746
+ monthly_limit_override?: number | null;
5747
+ /**
5748
+ * @description Validaciones incluidas en la cuota base antes del cobro por excedentes. `null` cuando el plan no tiene cuota base.
5749
+ * @example 500
5750
+ */
5751
+ included_validations?: number | null;
5752
+ /**
5753
+ * @description Tope de validaciones por ciclo de la suscripción. `0` no permite validaciones. En planes `hybrid`, es el tope duro cuando `overage_enabled` es `true`; cuando es `false`, `effective_limit` usa `included_validations`. En los demás modelos, es el límite efectivo salvo que exista un ajuste administrativo.
5754
+ * @example 10000
5755
+ */
5756
+ monthly_validation_limit?: number;
5526
5757
  /**
5527
5758
  * @description Validaciones consumidas en el ciclo actual.
5528
- * @example 420
5759
+ * @example 220
5529
5760
  */
5530
5761
  used?: number;
5531
5762
  /**
5532
- * @description Límite efectivo de validaciones para el ciclo actual. Tiene el mismo valor que `data.attributes.effective_limit`.
5533
- * @example 500
5763
+ * @description Límite efectivo de validaciones para el ciclo actual. Tiene el mismo valor que `data.attributes.effective_limit`, salvo con `quota_kind=trial`: entonces es la asignación de prueba.
5764
+ * @example 300
5534
5765
  */
5535
5766
  limit?: number;
5536
5767
  /**
@@ -5588,7 +5819,7 @@ export interface components {
5588
5819
  * ],
5589
5820
  * "meta": {
5590
5821
  * "version": "1.51.0",
5591
- * "request_id": "1a2b3c4d5e6f"
5822
+ * "request_id": "1a2b3c4d5e6ff6e5d4c3b2a1"
5592
5823
  * }
5593
5824
  * }
5594
5825
  */
@@ -5612,7 +5843,7 @@ export interface components {
5612
5843
  * ],
5613
5844
  * "meta": {
5614
5845
  * "version": "1.51.0",
5615
- * "request_id": "2b3c4d5e6f7a"
5846
+ * "request_id": "2b3c4d5e6f7aa7f6e5d4c3b2"
5616
5847
  * }
5617
5848
  * }
5618
5849
  */
@@ -5636,7 +5867,7 @@ export interface components {
5636
5867
  * ],
5637
5868
  * "meta": {
5638
5869
  * "version": "1.51.0",
5639
- * "request_id": "c4d5e6f7a8b9"
5870
+ * "request_id": "c4d5e6f7a8b99b8a7f6e5d4c"
5640
5871
  * }
5641
5872
  * }
5642
5873
  */
@@ -5668,7 +5899,7 @@ export interface components {
5668
5899
  * ],
5669
5900
  * "meta": {
5670
5901
  * "version": "1.51.0",
5671
- * "request_id": "f7a8b9c0d1e2",
5902
+ * "request_id": "f7a8b9c0d1e22e1d0c9b8a7f",
5672
5903
  * "retry_after": 45
5673
5904
  * }
5674
5905
  * }
@@ -5714,7 +5945,7 @@ export interface components {
5714
5945
  * ],
5715
5946
  * "meta": {
5716
5947
  * "version": "1.51.0",
5717
- * "request_id": "3c4d5e6f7a8b"
5948
+ * "request_id": "3c4d5e6f7a8bb8a7f6e5d4c3"
5718
5949
  * }
5719
5950
  * }
5720
5951
  */
@@ -5740,7 +5971,7 @@ export interface components {
5740
5971
  * ],
5741
5972
  * "meta": {
5742
5973
  * "version": "1.51.0",
5743
- * "request_id": "2b3c4d5e6f7a"
5974
+ * "request_id": "2b3c4d5e6f7aa7f6e5d4c3b2"
5744
5975
  * }
5745
5976
  * }
5746
5977
  */
@@ -5767,13 +5998,13 @@ export interface components {
5767
5998
  * "errors": [
5768
5999
  * {
5769
6000
  * "status": "403",
5770
- * "code": "forbidden",
6001
+ * "code": "permission_denied",
5771
6002
  * "detail": "No tienes permiso para acceder a este recurso."
5772
6003
  * }
5773
6004
  * ],
5774
6005
  * "meta": {
5775
6006
  * "version": "1.51.0",
5776
- * "request_id": "d5e6f7a8b9c0"
6007
+ * "request_id": "d5e6f7a8b9c00c9b8a7f6e5d"
5777
6008
  * }
5778
6009
  * }
5779
6010
  */
@@ -5797,7 +6028,7 @@ export interface components {
5797
6028
  * ],
5798
6029
  * "meta": {
5799
6030
  * "version": "1.61.0",
5800
- * "request_id": "1a2b3c4d5e6f"
6031
+ * "request_id": "1a2b3c4d5e6ff6e5d4c3b2a1"
5801
6032
  * }
5802
6033
  * }
5803
6034
  */
@@ -5833,7 +6064,7 @@ export interface components {
5833
6064
  * ],
5834
6065
  * "meta": {
5835
6066
  * "version": "1.51.0",
5836
- * "request_id": "e6f7a8b9c0d1"
6067
+ * "request_id": "e6f7a8b9c0d11d0c9b8a7f6e"
5837
6068
  * }
5838
6069
  * }
5839
6070
  */
@@ -5857,7 +6088,7 @@ export interface components {
5857
6088
  * ],
5858
6089
  * "meta": {
5859
6090
  * "version": "1.51.0",
5860
- * "request_id": "d5e6f7a8b9c1"
6091
+ * "request_id": "d5e6f7a8b9c11c9b8a7f6e5d"
5861
6092
  * }
5862
6093
  * }
5863
6094
  */
@@ -5872,7 +6103,7 @@ export interface components {
5872
6103
  AsyncQueryParam: "0" | "1" | "true" | "false" | "yes";
5873
6104
  /** @description Identificador (UUID) de la validación */
5874
6105
  ValidationId: string;
5875
- /** @description **ETag** recibido en peticiones anteriores. Si los datos no han cambiado y el `etag_version` sigue igual, el server responde `304 Not Modified` (sin cuerpo) — evita recibir los datos de nuevo cuando el estado del recurso NO ha cambiado. */
6106
+ /** @description **ETag** recibido en una respuesta anterior, tal cual (débil `W/"…"` en una validación, fuerte en los catálogos públicos). Si el recurso no ha cambiado, el server responde `304 Not Modified` (sin cuerpo) y evita mandar los datos de nuevo. */
5876
6107
  IfNoneMatchHeader: string;
5877
6108
  };
5878
6109
  requestBodies: never;
@@ -6089,6 +6320,11 @@ export interface operations {
6089
6320
  * @example 012
6090
6321
  */
6091
6322
  bank?: string;
6323
+ /**
6324
+ * @description Filtro — Varias claves SPEI separadas por coma (hasta 50); devuelve las validaciones cuyo banco emisor o receptor sea cualquiera de ellas. Si un elemento no tiene de 1 a 5 dígitos, responde con estado HTTP `422` e `invalid_filter`. Se combina con `bank`: si mandas los dos, se cumplen ambos.
6325
+ * @example 40012,40014,40072
6326
+ */
6327
+ banks?: string;
6092
6328
  /**
6093
6329
  * @description Filtro — Importe mínimo inclusivo, como número. El servidor también tolera enviarlo como texto con separador de miles o símbolo de moneda ("1,000.50", "$500") y lo normaliza con el mismo algoritmo que el resto de la plataforma, pero el contrato es un número: un cliente tipado debe mandarlo así. Un valor no vacío que no se reconozca como número devuelve un estado HTTP `422` con `invalid_filter`, en vez de ignorarse en silencio. Se aplica de forma independiente de `amount_max`.
6094
6330
  * @example 1000.5
@@ -6194,6 +6430,11 @@ export interface operations {
6194
6430
  * @example 012
6195
6431
  */
6196
6432
  bank?: string;
6433
+ /**
6434
+ * @description Filtro — Varias claves SPEI separadas por coma (hasta 50); devuelve las validaciones cuyo banco emisor o receptor sea cualquiera de ellas. Si un elemento no tiene de 1 a 5 dígitos, responde con estado HTTP `422` e `invalid_filter`. Se combina con `bank`: si mandas los dos, se cumplen ambos.
6435
+ * @example 40012,40014,40072
6436
+ */
6437
+ banks?: string;
6197
6438
  /**
6198
6439
  * @description Filtro — Importe mínimo inclusivo de las validaciones contadas.
6199
6440
  * @example 1000.5
@@ -6307,6 +6548,11 @@ export interface operations {
6307
6548
  * @example 012
6308
6549
  */
6309
6550
  bank?: string;
6551
+ /**
6552
+ * @description Filtro — Varias claves SPEI separadas por coma (hasta 50); devuelve las validaciones cuyo banco emisor o receptor sea cualquiera de ellas. Si un elemento no tiene de 1 a 5 dígitos, responde con estado HTTP `422` e `invalid_filter`. Se combina con `bank`: si mandas los dos, se cumplen ambos.
6553
+ * @example 40012,40014,40072
6554
+ */
6555
+ banks?: string;
6310
6556
  /**
6311
6557
  * @description Filtro — Importe mínimo inclusivo. Se aplica de forma independiente de `amount_max`.
6312
6558
  * @example 1000.5
@@ -6357,7 +6603,7 @@ export interface operations {
6357
6603
  parameters: {
6358
6604
  query?: never;
6359
6605
  header?: {
6360
- /** @description **ETag** recibido en peticiones anteriores. Si los datos no han cambiado y el `etag_version` sigue igual, el server responde `304 Not Modified` (sin cuerpo) — evita recibir los datos de nuevo cuando el estado del recurso NO ha cambiado. */
6606
+ /** @description **ETag** recibido en una respuesta anterior, tal cual (débil `W/"…"` en una validación, fuerte en los catálogos públicos). Si el recurso no ha cambiado, el server responde `304 Not Modified` (sin cuerpo) y evita mandar los datos de nuevo. */
6361
6607
  "If-None-Match"?: components["parameters"]["IfNoneMatchHeader"];
6362
6608
  };
6363
6609
  path: {
@@ -6488,7 +6734,7 @@ export interface operations {
6488
6734
  };
6489
6735
  401: components["responses"]["Unauthorized"];
6490
6736
  403: components["responses"]["Forbidden"];
6491
- /** @description Validación no encontrada (`not_found`) o el CEP no está disponible para esta validación (`cep_not_available`). Este último código se devuelve cuando `banxico_status` no es `valid` o falta el archivo solicitado. */
6737
+ /** @description Validación no encontrada (`not_found`) o el CEP no está disponible para esta validación (`cep_not_available`). Este último código se devuelve cuando `banxico_status` no es `valid` ni `returned` o falta el archivo solicitado. */
6492
6738
  404: {
6493
6739
  headers: {
6494
6740
  [name: string]: unknown;
@@ -7023,7 +7269,7 @@ export interface operations {
7023
7269
  parameters: {
7024
7270
  query?: never;
7025
7271
  header?: {
7026
- /** @description **ETag** recibido en peticiones anteriores. Si los datos no han cambiado y el `etag_version` sigue igual, el server responde `304 Not Modified` (sin cuerpo) — evita recibir los datos de nuevo cuando el estado del recurso NO ha cambiado. */
7272
+ /** @description **ETag** recibido en una respuesta anterior, tal cual (débil `W/"…"` en una validación, fuerte en los catálogos públicos). Si el recurso no ha cambiado, el server responde `304 Not Modified` (sin cuerpo) y evita mandar los datos de nuevo. */
7027
7273
  "If-None-Match"?: components["parameters"]["IfNoneMatchHeader"];
7028
7274
  };
7029
7275
  path?: never;
@@ -7086,6 +7332,109 @@ export interface operations {
7086
7332
  429: components["responses"]["RateLimited"];
7087
7333
  };
7088
7334
  };
7335
+ getSpeiCalendar: {
7336
+ parameters: {
7337
+ query?: never;
7338
+ header?: {
7339
+ /** @description **ETag** recibido en una respuesta anterior, tal cual (débil `W/"…"` en una validación, fuerte en los catálogos públicos). Si el recurso no ha cambiado, el server responde `304 Not Modified` (sin cuerpo) y evita mandar los datos de nuevo. */
7340
+ "If-None-Match"?: components["parameters"]["IfNoneMatchHeader"];
7341
+ };
7342
+ path: {
7343
+ /**
7344
+ * @description Año del calendario, de cuatro dígitos.
7345
+ * @example 2026
7346
+ */
7347
+ year: number;
7348
+ };
7349
+ cookie?: never;
7350
+ };
7351
+ requestBody?: never;
7352
+ responses: {
7353
+ /** @description Calendario de días inhábiles SPEI del año, con su fuente. */
7354
+ 200: {
7355
+ headers: {
7356
+ /** @description Firma del calendario actual. Pasar como `If-None-Match` en peticiones posteriores. */
7357
+ ETag?: string;
7358
+ /** @description TTL de caché en el cliente (1 h). */
7359
+ "Cache-Control"?: string;
7360
+ [name: string]: unknown;
7361
+ };
7362
+ content: {
7363
+ "application/json": components["schemas"]["SpeiCalendarResponse"];
7364
+ };
7365
+ };
7366
+ /** @description No modificado: el calendario no ha cambiado según el ETag enviado. */
7367
+ 304: {
7368
+ headers: {
7369
+ /** @description ETag actual del calendario. */
7370
+ ETag?: string;
7371
+ /** @description TTL de caché en el cliente (1 h). */
7372
+ "Cache-Control"?: string;
7373
+ [name: string]: unknown;
7374
+ };
7375
+ content?: never;
7376
+ };
7377
+ /** @description El año no tiene calendario (código `spei_calendar_year_not_covered`). `meta.covered_years` lista los años disponibles. */
7378
+ 404: {
7379
+ headers: {
7380
+ [name: string]: unknown;
7381
+ };
7382
+ content: {
7383
+ /**
7384
+ * @example {
7385
+ * "errors": [
7386
+ * {
7387
+ * "status": "404",
7388
+ * "code": "spei_calendar_year_not_covered",
7389
+ * "detail": "No tenemos el calendario de 2030. Los años disponibles van de 2024 a 2026."
7390
+ * }
7391
+ * ],
7392
+ * "meta": {
7393
+ * "version": "1.63.0",
7394
+ * "request_id": "c1d2e3f4a5b66b5a4f3e2d1c",
7395
+ * "covered_years": [
7396
+ * 2024,
7397
+ * 2025,
7398
+ * 2026
7399
+ * ]
7400
+ * }
7401
+ * }
7402
+ */
7403
+ "application/json": components["schemas"]["ErrorResponse"] & {
7404
+ meta?: {
7405
+ /** @description Años con calendario publicado, de menor a mayor. */
7406
+ covered_years?: number[];
7407
+ };
7408
+ };
7409
+ };
7410
+ };
7411
+ /** @description El año no tiene cuatro dígitos (código `spei_calendar_year_invalid`). */
7412
+ 422: {
7413
+ headers: {
7414
+ [name: string]: unknown;
7415
+ };
7416
+ content: {
7417
+ /**
7418
+ * @example {
7419
+ * "errors": [
7420
+ * {
7421
+ * "status": "422",
7422
+ * "code": "spei_calendar_year_invalid",
7423
+ * "detail": "El año debe tener cuatro dígitos, por ejemplo 2026."
7424
+ * }
7425
+ * ],
7426
+ * "meta": {
7427
+ * "version": "1.63.0",
7428
+ * "request_id": "d2e3f4a5b6c77c6b5a4f3e2d"
7429
+ * }
7430
+ * }
7431
+ */
7432
+ "application/json": components["schemas"]["ErrorResponse"];
7433
+ };
7434
+ };
7435
+ 429: components["responses"]["RateLimited"];
7436
+ };
7437
+ };
7089
7438
  exportBeneficiaries: {
7090
7439
  parameters: {
7091
7440
  query?: {
@@ -7184,7 +7533,6 @@ export interface operations {
7184
7533
  * "attributes": {
7185
7534
  * "account_number": "012180004412345678",
7186
7535
  * "account_type": "clabe",
7187
- * "clabe": "012180004412345678",
7188
7536
  * "bank_code": "40012",
7189
7537
  * "bank_name": "BBVA MEXICO",
7190
7538
  * "label": "Proveedor ABC",
@@ -7224,7 +7572,7 @@ export interface operations {
7224
7572
  401: components["responses"]["Unauthorized"];
7225
7573
  403: components["responses"]["Forbidden"];
7226
7574
  413: components["responses"]["PayloadTooLarge"];
7227
- /** @description La cuenta no pasó la validación, o el alta chocó con un tope. Los códigos posibles son `account_number_required`, `account_number_invalid_type`, `label_invalid_type`, `invalid_account_length`, `clabe_prefix_not_recognized`, `bank_code_required_for_phone`, `beneficiary_already_registered` y `plan_cap_exceeded`. `account_number_invalid_type` y `label_invalid_type` aparecen cuando el campo llega con un tipo distinto de cadena de texto. Todo error de campo trae `source.pointer`. */
7575
+ /** @description La cuenta no pasó la validación, o el alta chocó con un tope. Los códigos posibles son `account_number_required`, `account_number_invalid_type`, `label_invalid_type`, `invalid_account_format`, `invalid_account_length`, `invalid_clabe_checksum`, `invalid_card_luhn`, `clabe_prefix_not_recognized`, `bank_code_required_for_phone`, `invalid_bank_code`, `max_length_exceeded`, `beneficiary_already_registered` y `plan_cap_exceeded`. `account_number_invalid_type` y `label_invalid_type` aparecen cuando el campo llega con un tipo distinto de cadena de texto. Todo error de campo trae `source.pointer`. */
7228
7576
  422: {
7229
7577
  headers: {
7230
7578
  [name: string]: unknown;
@@ -7268,7 +7616,6 @@ export interface operations {
7268
7616
  * "attributes": {
7269
7617
  * "account_number": "5512345678",
7270
7618
  * "account_type": "phone",
7271
- * "clabe": "5512345678",
7272
7619
  * "bank_code": "40021",
7273
7620
  * "bank_name": "HSBC",
7274
7621
  * "label": "Cuenta DiMo HSBC",
@@ -7299,7 +7646,7 @@ export interface operations {
7299
7646
  403: components["responses"]["Forbidden"];
7300
7647
  404: components["responses"]["NotFound"];
7301
7648
  413: components["responses"]["PayloadTooLarge"];
7302
- /** @description El cuerpo no pasó la validación. Los códigos posibles son `no_valid_fields`, `invalid_account_length`, `clabe_prefix_not_recognized`, `bank_code_required_for_phone`, `account_number_invalid_type` y `label_invalid_type`. Las dos últimas aparecen cuando `account_number` o `label` llegan con un tipo distinto de cadena de texto (por ejemplo, un número o un arreglo). Todo error de campo trae `source.pointer`. */
7649
+ /** @description El cuerpo no pasó la validación. Los códigos posibles son `no_valid_fields`, `invalid_account_format`, `invalid_account_length`, `invalid_clabe_checksum`, `invalid_card_luhn`, `clabe_prefix_not_recognized`, `bank_code_required_for_phone`, `invalid_bank_code`, `max_length_exceeded`, `beneficiary_already_registered`, `account_number_invalid_type` y `label_invalid_type`. Las dos últimas aparecen cuando `account_number` o `label` llegan con un tipo distinto de cadena de texto (por ejemplo, un número o un arreglo). Todo error de campo trae `source.pointer`. */
7303
7650
  422: {
7304
7651
  headers: {
7305
7652
  [name: string]: unknown;
@@ -7390,7 +7737,7 @@ export interface operations {
7390
7737
  * "meta": {
7391
7738
  * "version": "1.47.0",
7392
7739
  * "api_version": "v1",
7393
- * "request_id": "b2c3d4e5f6a7"
7740
+ * "request_id": "b2c3d4e5f6a77a6f5e4d3c2b"
7394
7741
  * }
7395
7742
  * }
7396
7743
  */
@@ -7447,7 +7794,7 @@ export interface operations {
7447
7794
  * "meta": {
7448
7795
  * "version": "1.47.0",
7449
7796
  * "api_version": "v1",
7450
- * "request_id": "c5d6e7f8a9b0"
7797
+ * "request_id": "c5d6e7f8a9b00b9a8f7e6d5c"
7451
7798
  * }
7452
7799
  * }
7453
7800
  */
@@ -7487,7 +7834,7 @@ export interface operations {
7487
7834
  * "meta": {
7488
7835
  * "version": "1.47.0",
7489
7836
  * "api_version": "v1",
7490
- * "request_id": "e1f2a3b4c5d6"
7837
+ * "request_id": "e1f2a3b4c5d66d5c4b3a2f1e"
7491
7838
  * }
7492
7839
  * }
7493
7840
  */
@@ -7496,7 +7843,7 @@ export interface operations {
7496
7843
  };
7497
7844
  401: components["responses"]["Unauthorized"];
7498
7845
  403: components["responses"]["Forbidden"];
7499
- /** @description Falló la validación o la pre-condición. Códigos posibles: `file_required`, `file_too_large`, `unsupported_format` e `import_already_in_flight`. */
7846
+ /** @description Falló la validación o la pre-condición. Códigos posibles: `file_required`, `upload_error`, `file_too_large`, `invalid_parse_mode`, `unsupported_format`, `import_already_in_flight` y `persist_failed`. */
7500
7847
  422: {
7501
7848
  headers: {
7502
7849
  [name: string]: unknown;
@@ -7514,7 +7861,7 @@ export interface operations {
7514
7861
  * "meta": {
7515
7862
  * "version": "1.47.0",
7516
7863
  * "api_version": "v1",
7517
- * "request_id": "f2a3b4c5d6e7"
7864
+ * "request_id": "f2a3b4c5d6e77e6d5c4b3a2f"
7518
7865
  * }
7519
7866
  * }
7520
7867
  */
@@ -7594,7 +7941,7 @@ export interface operations {
7594
7941
  * "meta": {
7595
7942
  * "version": "1.47.0",
7596
7943
  * "api_version": "v1",
7597
- * "request_id": "f8a9b0c1d2e3"
7944
+ * "request_id": "f8a9b0c1d2e33e2d1c0b9a8f"
7598
7945
  * }
7599
7946
  * }
7600
7947
  */
@@ -7734,10 +8081,10 @@ export interface operations {
7734
8081
  * "parsed_account_type": "phone",
7735
8082
  * "parsed_bank_code": "40012",
7736
8083
  * "parsed_bank_name": "BBVA MEXICO",
7737
- * "parsed_label": null,
8084
+ * "parsed_label": "Cuenta",
7738
8085
  * "error_codes": [],
7739
8086
  * "corrections_applied": {
7740
- * "alias_auto_assigned": "Beneficiario 002"
8087
+ * "alias_auto_assigned": "Cuenta"
7741
8088
  * },
7742
8089
  * "user_overrides": {
7743
8090
  * "parsed_account_type": "phone",
@@ -7754,7 +8101,7 @@ export interface operations {
7754
8101
  * "meta": {
7755
8102
  * "version": "1.47.0",
7756
8103
  * "api_version": "v1",
7757
- * "request_id": "c1d2e3f4a5b6"
8104
+ * "request_id": "c1d2e3f4a5b66b5a4f3e2d1c"
7758
8105
  * }
7759
8106
  * }
7760
8107
  */
@@ -7818,7 +8165,7 @@ export interface operations {
7818
8165
  * "meta": {
7819
8166
  * "version": "1.47.0",
7820
8167
  * "api_version": "v1",
7821
- * "request_id": "f4a5b6c7d8e9"
8168
+ * "request_id": "f4a5b6c7d8e99e8d7c6b5a4f"
7822
8169
  * }
7823
8170
  * }
7824
8171
  */
@@ -7846,7 +8193,7 @@ export interface operations {
7846
8193
  * "meta": {
7847
8194
  * "version": "1.47.0",
7848
8195
  * "api_version": "v1",
7849
- * "request_id": "a5b6c7d8e9f0"
8196
+ * "request_id": "a5b6c7d8e9f00f9e8d7c6b5a"
7850
8197
  * }
7851
8198
  * }
7852
8199
  */
@@ -8473,21 +8820,65 @@ export interface operations {
8473
8820
  */
8474
8821
  per_page?: number;
8475
8822
  /**
8476
- * @description Filtro — Identificador único del endpoint webhook (UUID v4).
8477
- * @example 7c9e6679-7425-40de-944b-e07fc1f90ae7
8823
+ * @description Filtro — Identificador único del endpoint webhook (UUID v4). Hasta 20, separados por comas.
8824
+ * @example [
8825
+ * "7c9e6679-7425-40de-944b-e07fc1f90ae7"
8826
+ * ]
8478
8827
  */
8479
- endpoint_id?: string;
8828
+ endpoint_id?: string[];
8480
8829
  /**
8481
- * @description Filtro — Estado de la entrega. `success` llegó. `failed` es el resultado del último intento; Messenger puede programar otro si el fallo es recuperable. `retrying` se pospuso por el límite de salida y Messenger la reintentará. `pending` todavía no se ha intentado.
8482
- * @example failed
8830
+ * @description Filtro — Estado de la entrega. `success` llegó. `failed` es el resultado del último intento; Messenger puede programar otro si el fallo es recuperable. `retrying` se pospuso por el límite de salida y Messenger la reintentará. `pending` todavía no se ha intentado. Varios estados, separados por comas.
8831
+ * @example [
8832
+ * "failed"
8833
+ * ]
8483
8834
  */
8484
- status?: "success" | "failed" | "retrying" | "pending";
8835
+ status?: ("success" | "failed" | "retrying" | "pending")[];
8485
8836
  /**
8486
- * @description Filtro — Tipo de evento que originó la entrega. **De validaciones**: `validation.completed` cuando termina bien, `validation.failed` cuando termina mal y `validation.error` cuando hay un error del servicio. **De los reintentos automáticos:** `validation.retry.scheduled` al programar un reintento automático, `validation.retry.resolved` cuando un reintento automático encuentra el CEP, y `validation.retry.exhausted` cuando los reintentos se agotan sin encontrar el CEP. **De la revisión posterior de un `valid`:** `validation.returned` cuando una validación que había salido `valid` pasa a `returned` porque Banxico reportó la devolución.\
8487
- * **De la suscripción:** `billing.payment_succeeded` y `billing.payment_failed` por cada cobro, `billing.invoice_upcoming` antes de la siguiente factura, `billing.trial_will_end` antes de que acabe la prueba gratuita, y `billing.subscription_canceled` al cancelar la suscripción. Las entregas sintéticas (envío de prueba) se marcan como `test`.
8488
- * @example validation.completed
8837
+ * @description Filtro — Tipo de evento que originó la entrega. **De validaciones**: `validation.completed` cuando hay veredicto de Banxico, sea cual sea (también inválida o no encontrada, y aunque se abran reintentos), `validation.failed` cuando la entrada se rechaza y `validation.error` ante cualquier otro fallo. **De los reintentos automáticos:** `validation.retry.scheduled` al programar un reintento automático, `validation.retry.resolved` cuando un reintento automático encuentra el CEP, y `validation.retry.exhausted` cuando los reintentos se agotan sin encontrar el CEP. **De la revisión posterior de un `valid`:** `validation.returned` cuando una validación que había salido `valid` pasa a `returned` porque Banxico reportó la devolución.\
8838
+ * **De la suscripción:** `billing.payment_succeeded` y `billing.payment_failed` por cada cobro, `billing.invoice_upcoming` antes de la siguiente factura, `billing.trial_will_end` antes de que acabe la prueba gratuita, y `billing.subscription_canceled` al cancelar la suscripción. Las entregas sintéticas (envío de prueba) se marcan como `test`. Varios tipos, separados por comas.
8839
+ * @example [
8840
+ * "validation.completed"
8841
+ * ]
8842
+ */
8843
+ event_type?: ("validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "validation.returned" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming" | "test")[];
8844
+ /**
8845
+ * @description Filtro — Busca en el identificador de la entrega, el identificador, la URL y la descripción del endpoint, el tipo de evento, el identificador de la validación y el código HTTP de la respuesta. No distingue mayúsculas; `%` y `_` se buscan tal cual. Más de 100 caracteres se recortan.
8846
+ * @example webhook.example.com
8847
+ */
8848
+ q?: string;
8849
+ /**
8850
+ * @description Filtro — Sólo las entregas de esta validación (UUID v4).
8851
+ * @example 3fa85f64-5717-4562-b3fc-2c963f66afa6
8852
+ */
8853
+ validation_id?: string;
8854
+ /**
8855
+ * @description Filtro — Código HTTP con que respondió el receptor, separados por comas. Vale un código exacto (`404`), una familia (`2xx`, `4xx`, `5xx`) o `none` para las que no tuvieron respuesta (tiempo agotado, conexión rechazada o todavía sin intentar). Varios valores suman resultados.
8856
+ * @example [
8857
+ * "5xx",
8858
+ * "none"
8859
+ * ]
8860
+ */
8861
+ response_status?: string[];
8862
+ /**
8863
+ * @description Filtro — Entregas creadas desde este momento, incluido. Acepta fecha (`2026-10-01`, medianoche UTC) o fecha y hora ISO 8601 con zona.
8864
+ * @example 2026-10-01T00:00:00Z
8865
+ */
8866
+ from?: string;
8867
+ /**
8868
+ * @description Filtro — Entregas creadas hasta este momento, incluido. Una fecha sola llega al final de ese día en UTC.
8869
+ * @example 2026-10-15T23:59:59Z
8870
+ */
8871
+ to?: string;
8872
+ /**
8873
+ * @description Filtro — Sólo las entregas cuyo número de intento es al menos este. Con `2` quedan las que se reintentaron.
8874
+ * @example 2
8489
8875
  */
8490
- event_type?: "validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "validation.returned" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming" | "test";
8876
+ min_attempt?: number;
8877
+ /**
8878
+ * @description Filtro — Sólo las entregas cuyo receptor tardó al menos estos milisegundos en responder.
8879
+ * @example 3000
8880
+ */
8881
+ min_response_time_ms?: number;
8491
8882
  };
8492
8883
  header?: never;
8493
8884
  path?: never;
@@ -8527,22 +8918,66 @@ export interface operations {
8527
8918
  parameters: {
8528
8919
  query?: {
8529
8920
  /**
8530
- * @description Filtro — Identificador único del endpoint webhook (UUID v4).
8531
- * @example 7c9e6679-7425-40de-944b-e07fc1f90ae7
8921
+ * @description Filtro — Identificador único del endpoint webhook (UUID v4). Hasta 20, separados por comas.
8922
+ * @example [
8923
+ * "7c9e6679-7425-40de-944b-e07fc1f90ae7"
8924
+ * ]
8532
8925
  */
8533
- endpoint_id?: string;
8926
+ endpoint_id?: string[];
8534
8927
  /**
8535
8928
  * @description \
8536
- * Filtro — Estado de la entrega. `success` llegó. `failed` es el resultado del último intento; Messenger puede programar otro si el fallo es recuperable. `retrying` se pospuso por el límite de salida y Messenger la reintentará. `pending` todavía no se ha intentado.
8537
- * @example failed
8929
+ * Filtro — Estado de la entrega. `success` llegó. `failed` es el resultado del último intento; Messenger puede programar otro si el fallo es recuperable. `retrying` se pospuso por el límite de salida y Messenger la reintentará. `pending` todavía no se ha intentado. Varios estados, separados por comas.
8930
+ * @example [
8931
+ * "failed"
8932
+ * ]
8538
8933
  */
8539
- status?: "success" | "failed" | "retrying" | "pending";
8934
+ status?: ("success" | "failed" | "retrying" | "pending")[];
8540
8935
  /**
8541
- * @description Filtro — Tipo de evento que originó la entrega. **De validaciones**: `validation.completed` cuando termina bien, `validation.failed` cuando termina mal y `validation.error` cuando hay un error del servicio. **De los reintentos automáticos:** `validation.retry.scheduled` al programar un reintento automático, `validation.retry.resolved` cuando un reintento automático encuentra el CEP, y `validation.retry.exhausted` cuando los reintentos se agotan sin encontrar el CEP. **De la revisión posterior de un `valid`:** `validation.returned` cuando una validación que había salido `valid` pasa a `returned` porque Banxico reportó la devolución.\
8542
- * **De la suscripción:** `billing.payment_succeeded` y `billing.payment_failed` por cada cobro, `billing.invoice_upcoming` antes de la siguiente factura, `billing.trial_will_end` antes de que acabe la prueba gratuita, y `billing.subscription_canceled` al cancelar la suscripción. Las entregas sintéticas (envío de prueba) se marcan como `test`.
8543
- * @example validation.completed
8936
+ * @description Filtro — Tipo de evento que originó la entrega. **De validaciones**: `validation.completed` cuando hay veredicto de Banxico, sea cual sea (también inválida o no encontrada, y aunque se abran reintentos), `validation.failed` cuando la entrada se rechaza y `validation.error` ante cualquier otro fallo. **De los reintentos automáticos:** `validation.retry.scheduled` al programar un reintento automático, `validation.retry.resolved` cuando un reintento automático encuentra el CEP, y `validation.retry.exhausted` cuando los reintentos se agotan sin encontrar el CEP. **De la revisión posterior de un `valid`:** `validation.returned` cuando una validación que había salido `valid` pasa a `returned` porque Banxico reportó la devolución.\
8937
+ * **De la suscripción:** `billing.payment_succeeded` y `billing.payment_failed` por cada cobro, `billing.invoice_upcoming` antes de la siguiente factura, `billing.trial_will_end` antes de que acabe la prueba gratuita, y `billing.subscription_canceled` al cancelar la suscripción. Las entregas sintéticas (envío de prueba) se marcan como `test`. Varios tipos, separados por comas.
8938
+ * @example [
8939
+ * "validation.completed"
8940
+ * ]
8941
+ */
8942
+ event_type?: ("validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "validation.returned" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming" | "test")[];
8943
+ /**
8944
+ * @description Filtro — Busca en el identificador de la entrega, el identificador, la URL y la descripción del endpoint, el tipo de evento, el identificador de la validación y el código HTTP de la respuesta. No distingue mayúsculas; `%` y `_` se buscan tal cual. Más de 100 caracteres se recortan.
8945
+ * @example webhook.example.com
8946
+ */
8947
+ q?: string;
8948
+ /**
8949
+ * @description Filtro — Sólo las entregas de esta validación (UUID v4).
8950
+ * @example 3fa85f64-5717-4562-b3fc-2c963f66afa6
8951
+ */
8952
+ validation_id?: string;
8953
+ /**
8954
+ * @description Filtro — Código HTTP con que respondió el receptor, separados por comas. Vale un código exacto (`404`), una familia (`2xx`, `4xx`, `5xx`) o `none` para las que no tuvieron respuesta (tiempo agotado, conexión rechazada o todavía sin intentar). Varios valores suman resultados.
8955
+ * @example [
8956
+ * "5xx",
8957
+ * "none"
8958
+ * ]
8959
+ */
8960
+ response_status?: string[];
8961
+ /**
8962
+ * @description Filtro — Entregas creadas desde este momento, incluido. Acepta fecha (`2026-10-01`, medianoche UTC) o fecha y hora ISO 8601 con zona.
8963
+ * @example 2026-10-01T00:00:00Z
8964
+ */
8965
+ from?: string;
8966
+ /**
8967
+ * @description Filtro — Entregas creadas hasta este momento, incluido. Una fecha sola llega al final de ese día en UTC.
8968
+ * @example 2026-10-15T23:59:59Z
8969
+ */
8970
+ to?: string;
8971
+ /**
8972
+ * @description Filtro — Sólo las entregas cuyo número de intento es al menos este. Con `2` quedan las que se reintentaron.
8973
+ * @example 2
8974
+ */
8975
+ min_attempt?: number;
8976
+ /**
8977
+ * @description Filtro — Sólo las entregas cuyo receptor tardó al menos estos milisegundos en responder.
8978
+ * @example 3000
8544
8979
  */
8545
- event_type?: "validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "validation.returned" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming" | "test";
8980
+ min_response_time_ms?: number;
8546
8981
  /**
8547
8982
  * @description Formato del archivo a descargar. Valores aceptados: `csv` y `xlsx`. Cualquier otro valor se sirve como `csv`.
8548
8983
  * @example csv