@veriko-mx/sdk 0.4.12 → 0.4.14

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;
@@ -3556,6 +3692,14 @@ export interface components {
3556
3692
  /** @description Respuesta de `POST /v1/beneficiaries` con el beneficiario en `data`. Devuelve `201` al crear un registro nuevo, y `200` cuando reactiva una cuenta archivada con el mismo `account_number`: Ahí `meta.reactivated` viene en `true`. */
3557
3693
  CreateBeneficiaryResponse: components["schemas"]["SuccessEnvelope"] & {
3558
3694
  data: components["schemas"]["Beneficiary"];
3695
+ /** @description Metadatos del alta. */
3696
+ meta?: {
3697
+ /**
3698
+ * @description `true` cuando el alta reactivó una cuenta archivada con el mismo `account_number` y la respuesta es `200`. Un alta nueva (`201`) no lo incluye.
3699
+ * @example true
3700
+ */
3701
+ reactivated?: boolean;
3702
+ };
3559
3703
  };
3560
3704
  /** @description Cuerpo de `PUT /v1/beneficiaries/{id}`. Acepta envoltorio JSON:API `{ data: { attributes: {...} } }` o un objeto plano. Todos los campos son opcionales — solo se actualizan los presentes. Si el cuerpo no contiene ningún campo editable, el servidor responde `422 no_valid_fields`. Hay tres rutas de actualización. Con solo `label`, se sanea y se guarda. Con un `account_number` nuevo, se vuelven a derivar `account_type`, `bank_code` y `bank_name` con las mismas reglas que `POST /v1/beneficiaries`. Con solo `bank_code`, el cambio vale únicamente si el beneficiario es de tipo `phone`: En CLABE y tarjeta se ignora sin avisar—, y deja el evento de auditoría `beneficiary.phone_bank_updated` cuando el código cambia. */
3561
3705
  UpdateBeneficiaryRequest: {
@@ -3601,7 +3745,7 @@ export interface components {
3601
3745
  */
3602
3746
  account_type: "clabe" | "card" | "phone";
3603
3747
  /**
3604
- * @description Código SPEI (5 dígitos) del banco resuelto.
3748
+ * @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
3749
  * @example 40012
3606
3750
  */
3607
3751
  bank_code: string;
@@ -3625,12 +3769,13 @@ export interface components {
3625
3769
  CreateBeneficiaryImportRequest: {
3626
3770
  /**
3627
3771
  * Format: binary
3628
- * @description Archivo a importar. Formatos aceptados: CSV, XLS, XLSX, TXT o PDF. Tamaño máximo: 20 MB.
3772
+ * @description Archivo a importar. Formatos aceptados: CSV, XLS, XLSX, TXT, JSON o PDF. Tamaño máximo: 20 MB.
3629
3773
  * @example beneficiarios-marzo.csv
3630
3774
  */
3631
3775
  file: string;
3632
3776
  /**
3633
3777
  * @description Modo de lectura del archivo — `template`: Respeta los encabezados canónicos; `free`: Formato libre, el sistema deduce la estructura.
3778
+ * @default template
3634
3779
  * @example template
3635
3780
  * @enum {string}
3636
3781
  */
@@ -3686,11 +3831,11 @@ export interface components {
3686
3831
  */
3687
3832
  status?: "pending" | "parsing" | "preview_ready" | "committing" | "completed" | "failed" | "cancelled";
3688
3833
  /**
3689
- * @description Formato del archivo subido. Aceptados: `csv`, `xls`, `xlsx`, `txt` o `pdf`.
3834
+ * @description Formato del archivo subido. Aceptados: `csv`, `xls`, `xlsx`, `txt`, `json` o `pdf`.
3690
3835
  * @example csv
3691
3836
  * @enum {string}
3692
3837
  */
3693
- file_format?: "csv" | "xls" | "xlsx" | "txt" | "pdf";
3838
+ file_format?: "csv" | "xls" | "xlsx" | "txt" | "json" | "pdf";
3694
3839
  /**
3695
3840
  * @description Modo de lectura del archivo — `template`: Respeta los encabezados canónicos; `free`: Formato libre, el sistema deduce la estructura.
3696
3841
  * @example template
@@ -3738,7 +3883,7 @@ export interface components {
3738
3883
  */
3739
3884
  llm_invoked?: boolean;
3740
3885
  /**
3741
- * @description Código estable del fallo del trabajo. `null` cuando no terminó en `failed`. Por ejemplo, `file_corrupt` o `plan_cap_exceeded`.
3886
+ * @description Código estable del fallo del trabajo. `null` cuando no terminó en `failed`. Por ejemplo, `file_corrupt` o `empty_file`.
3742
3887
  * @example null
3743
3888
  */
3744
3889
  error_code?: string | null;
@@ -3844,7 +3989,7 @@ export interface components {
3844
3989
  [key: string]: unknown;
3845
3990
  };
3846
3991
  /**
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.
3992
+ * @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
3993
  * @example {}
3849
3994
  */
3850
3995
  raw_preview?: {
@@ -3981,17 +4126,17 @@ export interface components {
3981
4126
  /** @description Estadísticas de uso de la API, cuota de validaciones y estado de Banxico para la cuenta. */
3982
4127
  ApiUsage: {
3983
4128
  /**
3984
- * @description Cantidad de peticiones a la API del usuario en el día calendario actual (UTC).
4129
+ * @description Cantidad de peticiones del usuario con clave de API en el día calendario actual (UTC).
3985
4130
  * @example 42
3986
4131
  */
3987
4132
  requests_today?: number;
3988
4133
  /**
3989
- * @description Cantidad de peticiones a la API del usuario en el mes calendario actual (UTC).
4134
+ * @description Cantidad de peticiones del usuario con clave de API en el mes calendario actual (UTC).
3990
4135
  * @example 580
3991
4136
  */
3992
4137
  requests_month?: number;
3993
4138
  quota?: components["schemas"]["PlanQuotaState"];
3994
- /** @description Últimas peticiones a la API del usuario, de la más reciente a la más antigua. */
4139
+ /** @description Últimas 15 peticiones del usuario con clave de API, de la más reciente a la más antigua. */
3995
4140
  recent_requests?: {
3996
4141
  /**
3997
4142
  * @description Verbo HTTP de la petición. Uno de `GET`, `POST`, `PUT`, `PATCH` o `DELETE`.
@@ -4062,7 +4207,7 @@ export interface components {
4062
4207
  */
4063
4208
  monthly_validations?: number;
4064
4209
  /**
4065
- * @description Cantidad de validaciones no retiradas del mes UTC en curso cuyo estado almacenado es `pending` o `processing`.
4210
+ * @description Cantidad de validaciones no retiradas del mes UTC en curso cuyo estado almacenado es `queued` o `processing`.
4066
4211
  * @example 3
4067
4212
  */
4068
4213
  pending_month?: number;
@@ -4078,7 +4223,7 @@ export interface components {
4078
4223
  avg_ticket?: number;
4079
4224
  /**
4080
4225
  * @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
4226
+ * @example 90.3
4082
4227
  */
4083
4228
  success_rate_percent?: number;
4084
4229
  /**
@@ -4107,11 +4252,16 @@ export interface components {
4107
4252
  /**
4108
4253
  * Format: uuid
4109
4254
  * @description Identificador único de la validación (UUID v4).
4110
- * @example a1b2c3d4-e5f6-7890-abcd-ef0123456789
4255
+ * @example a1b2c3d4-e5f6-4890-abcd-ef0123456789
4111
4256
  */
4112
4257
  id?: string;
4113
4258
  /** @description Datos resumidos de la validación reciente mostrados en el panel. */
4114
4259
  attributes?: {
4260
+ /**
4261
+ * @description Clave Banxico canónica del banco, si se puede resolver.
4262
+ * @example 40012
4263
+ */
4264
+ bank_code?: string | null;
4115
4265
  /**
4116
4266
  * @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
4267
  * @example BBVA MEXICO
@@ -4185,6 +4335,33 @@ export interface components {
4185
4335
  /** @description Veredictos que admiten reintentos automáticos. */
4186
4336
  eligible_outcomes?: string[];
4187
4337
  };
4338
+ /** @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. */
4339
+ SavedRetryPolicy: {
4340
+ /**
4341
+ * @description `true` cuando el ciclo de reintentos está activo. Si es `false`, los demás campos pueden ser ignorados.
4342
+ * @example true
4343
+ */
4344
+ enabled?: boolean;
4345
+ /**
4346
+ * @description Número máximo de reintentos automáticos. Una vez alcanzado, el ciclo pasa al estado terminal `exhausted`.
4347
+ * @example 3
4348
+ */
4349
+ max_retries?: number;
4350
+ /**
4351
+ * @description Segundos de espera entre cada reintento. Valores válidos: 300–86400 (5 min a 24h).
4352
+ * @example 600
4353
+ */
4354
+ interval_seconds?: number;
4355
+ /**
4356
+ * @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`.
4357
+ * @example [
4358
+ * "not_found",
4359
+ * "cep_unavailable",
4360
+ * "error"
4361
+ * ]
4362
+ */
4363
+ outcomes?: ("not_found" | "cep_unavailable" | "error")[];
4364
+ };
4188
4365
  UserRetryPolicyResponse: components["schemas"]["SuccessEnvelope"] & {
4189
4366
  /** @description Metadatos de la respuesta y límites efectivos de reintentos. */
4190
4367
  meta?: {
@@ -4194,7 +4371,7 @@ export interface components {
4194
4371
  data?: {
4195
4372
  /** @enum {string} */
4196
4373
  type?: "retry_policy";
4197
- attributes?: components["schemas"]["RetryPolicy"];
4374
+ attributes?: components["schemas"]["SavedRetryPolicy"];
4198
4375
  };
4199
4376
  };
4200
4377
  /** @description Cuerpo de la petición para actualizar la política de reintentos por defecto del usuario (aplica a futuras validaciones). */
@@ -4204,7 +4381,7 @@ export interface components {
4204
4381
  /** @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
4382
  BanxicoPublicStatus: {
4206
4383
  /**
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.
4384
+ * @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
4385
  * @example operational
4209
4386
  * @enum {string}
4210
4387
  */
@@ -4220,7 +4397,7 @@ export interface components {
4220
4397
  */
4221
4398
  message: string;
4222
4399
  /**
4223
- * @description Timestamp del último chequeo de salud ejecutado. `null` cuando aún no se ha ejecutado ningún chequeo.
4400
+ * @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
4401
  * @example 2026-04-11T15:30:00Z
4225
4402
  */
4226
4403
  last_verified_at: components["schemas"]["TimestampUTC"] | null;
@@ -4368,7 +4545,7 @@ export interface components {
4368
4545
  CreateWebhookRequest: {
4369
4546
  /**
4370
4547
  * 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.
4548
+ * @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
4549
  * @example https://example.com/webhooks/entregas
4373
4550
  */
4374
4551
  url: string;
@@ -4384,7 +4561,7 @@ export interface components {
4384
4561
  UpdateWebhookRequest: {
4385
4562
  /**
4386
4563
  * 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.
4564
+ * @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
4565
  * @example https://example.com/webhooks/entregas
4389
4566
  */
4390
4567
  url?: string;
@@ -4721,13 +4898,13 @@ export interface components {
4721
4898
  */
4722
4899
  remaining: number;
4723
4900
  /**
4724
- * @description Porcentaje del límite consumido en el ciclo actual, redondeado a 2 decimales.
4901
+ * @description Porcentaje del límite consumido en el ciclo actual, redondeado a 2 decimales. Puede pasar de 100 si hay excedente.
4725
4902
  * @example 70.5
4726
4903
  */
4727
4904
  used_percent: number;
4728
4905
  /**
4729
4906
  * @description Nivel de alerta según el consumo: `ok` (<70 %), `warn` (70–89 %), `danger` (≥90 % o cuota agotada).
4730
- * @example ok
4907
+ * @example warn
4731
4908
  * @enum {string}
4732
4909
  */
4733
4910
  tone: "ok" | "warn" | "danger";
@@ -4901,12 +5078,12 @@ export interface components {
4901
5078
  /** @description Lista de celdas del mapa; cada entrada es una combinación de `day_of_week` y `hour_of_day` con su conteo. */
4902
5079
  buckets?: {
4903
5080
  /**
4904
- * @description Día de la semana (0 = domingo … 6 = sábado).
5081
+ * @description Día de la semana en UTC (0 = domingo … 6 = sábado).
4905
5082
  * @example 0
4906
5083
  */
4907
5084
  day_of_week?: number;
4908
5085
  /**
4909
- * @description Hora del día (0–23), hora del servidor.
5086
+ * @description Hora del día (0–23), en UTC.
4910
5087
  * @example 0
4911
5088
  */
4912
5089
  hour_of_day?: number;
@@ -5101,22 +5278,20 @@ export interface components {
5101
5278
  */
5102
5279
  month?: string;
5103
5280
  /**
5104
- * Format: date-time
5105
- * @description Inicio del mes en UTC (ISO 8601).
5106
- * @example 2026-04-01T06:00:00Z
5281
+ * @description Inicio del mes en UTC, con formato `YYYY-MM-DD HH:MM:SS`.
5282
+ * @example 2026-04-01 06:00:00
5107
5283
  */
5108
5284
  from_utc?: string;
5109
5285
  /**
5110
- * Format: date-time
5111
- * @description Fin del mes en UTC (ISO 8601, exclusivo).
5112
- * @example 2026-05-01T06:00:00Z
5286
+ * @description Fin del mes en UTC (exclusivo), con formato `YYYY-MM-DD HH:MM:SS`.
5287
+ * @example 2026-05-01 06:00:00
5113
5288
  */
5114
5289
  to_utc?: string;
5115
5290
  };
5116
5291
  /** @description Conteos de validaciones por veredicto, más retiros mediante borrado lógico del periodo (informativo). */
5117
5292
  counts?: {
5118
5293
  /**
5119
- * @description Cantidad de validaciones completadas en el periodo (excluyendo las validaciones con estado `pending`).
5294
+ * @description Cantidad de validaciones del periodo, incluidas las que tienen estado `pending`.
5120
5295
  * @example 287
5121
5296
  */
5122
5297
  total?: number;
@@ -5205,7 +5380,7 @@ export interface components {
5205
5380
  verified_share_pct?: number;
5206
5381
  };
5207
5382
  /**
5208
- * @description Tasa de éxito: porcentaje de validaciones con resultado `valid` sobre el total completado, expresado de 0 a 100.
5383
+ * @description Tasa de éxito: porcentaje de validaciones con resultado `valid` sobre `counts.total`, expresado de 0 a 100.
5209
5384
  * @example 79.4
5210
5385
  */
5211
5386
  success_rate?: number;
@@ -5360,9 +5535,20 @@ export interface components {
5360
5535
  * @description Nombres de las columnas para formato CSV (en el mismo orden que las filas en `rows`).
5361
5536
  * @example [
5362
5537
  * "Fecha",
5363
- * "Monto",
5538
+ * "Folio plataforma",
5539
+ * "Tipo",
5364
5540
  * "Clave de rastreo",
5365
- * "Estado"
5541
+ * "Fecha operación",
5542
+ * "Monto",
5543
+ * "Banco emisor",
5544
+ * "CLABE emisora",
5545
+ * "Banco receptor",
5546
+ * "CLABE receptora",
5547
+ * "Beneficiario",
5548
+ * "Veredicto Banxico",
5549
+ * "CEP disponible",
5550
+ * "Folio CEP",
5551
+ * "Tiempo (ms)"
5366
5552
  * ]
5367
5553
  */
5368
5554
  headers?: string[];
@@ -5370,10 +5556,21 @@ export interface components {
5370
5556
  * @description Primeras 20 filas (máximo) de datos del reporte.
5371
5557
  * @example [
5372
5558
  * [
5559
+ * "2026-04-15 10:32:00",
5560
+ * "c3d4e5f6-a7b8-9012-cdef-123456789012",
5561
+ * "direct",
5562
+ * "MXBA20260415001234",
5373
5563
  * "2026-04-15",
5374
5564
  * "15000.50",
5375
- * "MXBA20260415001234",
5376
- * "valid"
5565
+ * "BBVA MEXICO",
5566
+ * "012180001234567891",
5567
+ * "BANORTE",
5568
+ * "072180009876543210",
5569
+ * "Comercializadora Ejemplo SA de CV",
5570
+ * "valid",
5571
+ * "Sí",
5572
+ * "",
5573
+ * "412"
5377
5574
  * ]
5378
5575
  * ]
5379
5576
  */
@@ -5393,7 +5590,7 @@ export interface components {
5393
5590
  plan_slug?: string;
5394
5591
  /**
5395
5592
  * @description Nombre del plan que muestran las interfaces.
5396
- * @example Pro
5593
+ * @example Personal
5397
5594
  */
5398
5595
  plan_name?: string;
5399
5596
  /**
@@ -5520,17 +5717,59 @@ export interface components {
5520
5717
  BillingSubscriptionQuotaMeta: {
5521
5718
  /**
5522
5719
  * @description Identificador único y legible del plan. Coincide con `data.attributes.plan_slug`.
5523
- * @example pro
5720
+ * @example personal
5721
+ */
5722
+ plan_slug?: string;
5723
+ /**
5724
+ * @description Nombre del plan que muestran las interfaces.
5725
+ * @example Personal
5726
+ */
5727
+ plan_name?: string;
5728
+ /**
5729
+ * @description Modelo de facturación del plan — `free`: Sin cobro; `tiered`: Cuota fija; `metered`: Cobro por consumo; `hybrid`: Cuota fija más consumo.
5730
+ * @example hybrid
5731
+ * @enum {string}
5732
+ */
5733
+ billing_model?: "free" | "tiered" | "metered" | "hybrid";
5734
+ /**
5735
+ * @description Origen de la suscripción — `stripe`: Pago mediante Stripe; `admin_granted`: Concesión administrativa; `system_default`: Plan asignado por el sistema.
5736
+ * @example stripe
5737
+ * @enum {string}
5738
+ */
5739
+ source?: "stripe" | "admin_granted" | "system_default";
5740
+ /**
5741
+ * @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`.
5742
+ * @example false
5743
+ */
5744
+ overage_enabled?: boolean;
5745
+ /**
5746
+ * @description `true` cuando el plan es `hybrid` y el cobro por excedente todavía no está activo: el usuario puede activarlo.
5747
+ * @example false
5748
+ */
5749
+ overage_available?: boolean;
5750
+ /**
5751
+ * @description Límite del ciclo fijado por un administrador para esta suscripción. Cuando existe, manda sobre el del plan. `null` sin ajuste.
5752
+ * @example null
5753
+ */
5754
+ monthly_limit_override?: number | null;
5755
+ /**
5756
+ * @description Validaciones incluidas en la cuota base antes del cobro por excedentes. `null` cuando el plan no tiene cuota base.
5757
+ * @example 500
5758
+ */
5759
+ included_validations?: number | null;
5760
+ /**
5761
+ * @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.
5762
+ * @example 10000
5524
5763
  */
5525
- plan?: string;
5764
+ monthly_validation_limit?: number;
5526
5765
  /**
5527
5766
  * @description Validaciones consumidas en el ciclo actual.
5528
- * @example 420
5767
+ * @example 220
5529
5768
  */
5530
5769
  used?: number;
5531
5770
  /**
5532
- * @description Límite efectivo de validaciones para el ciclo actual. Tiene el mismo valor que `data.attributes.effective_limit`.
5533
- * @example 500
5771
+ * @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.
5772
+ * @example 300
5534
5773
  */
5535
5774
  limit?: number;
5536
5775
  /**
@@ -5588,7 +5827,7 @@ export interface components {
5588
5827
  * ],
5589
5828
  * "meta": {
5590
5829
  * "version": "1.51.0",
5591
- * "request_id": "1a2b3c4d5e6f"
5830
+ * "request_id": "1a2b3c4d5e6ff6e5d4c3b2a1"
5592
5831
  * }
5593
5832
  * }
5594
5833
  */
@@ -5612,7 +5851,7 @@ export interface components {
5612
5851
  * ],
5613
5852
  * "meta": {
5614
5853
  * "version": "1.51.0",
5615
- * "request_id": "2b3c4d5e6f7a"
5854
+ * "request_id": "2b3c4d5e6f7aa7f6e5d4c3b2"
5616
5855
  * }
5617
5856
  * }
5618
5857
  */
@@ -5636,7 +5875,7 @@ export interface components {
5636
5875
  * ],
5637
5876
  * "meta": {
5638
5877
  * "version": "1.51.0",
5639
- * "request_id": "c4d5e6f7a8b9"
5878
+ * "request_id": "c4d5e6f7a8b99b8a7f6e5d4c"
5640
5879
  * }
5641
5880
  * }
5642
5881
  */
@@ -5668,7 +5907,7 @@ export interface components {
5668
5907
  * ],
5669
5908
  * "meta": {
5670
5909
  * "version": "1.51.0",
5671
- * "request_id": "f7a8b9c0d1e2",
5910
+ * "request_id": "f7a8b9c0d1e22e1d0c9b8a7f",
5672
5911
  * "retry_after": 45
5673
5912
  * }
5674
5913
  * }
@@ -5714,7 +5953,7 @@ export interface components {
5714
5953
  * ],
5715
5954
  * "meta": {
5716
5955
  * "version": "1.51.0",
5717
- * "request_id": "3c4d5e6f7a8b"
5956
+ * "request_id": "3c4d5e6f7a8bb8a7f6e5d4c3"
5718
5957
  * }
5719
5958
  * }
5720
5959
  */
@@ -5740,7 +5979,7 @@ export interface components {
5740
5979
  * ],
5741
5980
  * "meta": {
5742
5981
  * "version": "1.51.0",
5743
- * "request_id": "2b3c4d5e6f7a"
5982
+ * "request_id": "2b3c4d5e6f7aa7f6e5d4c3b2"
5744
5983
  * }
5745
5984
  * }
5746
5985
  */
@@ -5767,13 +6006,13 @@ export interface components {
5767
6006
  * "errors": [
5768
6007
  * {
5769
6008
  * "status": "403",
5770
- * "code": "forbidden",
6009
+ * "code": "permission_denied",
5771
6010
  * "detail": "No tienes permiso para acceder a este recurso."
5772
6011
  * }
5773
6012
  * ],
5774
6013
  * "meta": {
5775
6014
  * "version": "1.51.0",
5776
- * "request_id": "d5e6f7a8b9c0"
6015
+ * "request_id": "d5e6f7a8b9c00c9b8a7f6e5d"
5777
6016
  * }
5778
6017
  * }
5779
6018
  */
@@ -5797,7 +6036,7 @@ export interface components {
5797
6036
  * ],
5798
6037
  * "meta": {
5799
6038
  * "version": "1.61.0",
5800
- * "request_id": "1a2b3c4d5e6f"
6039
+ * "request_id": "1a2b3c4d5e6ff6e5d4c3b2a1"
5801
6040
  * }
5802
6041
  * }
5803
6042
  */
@@ -5833,7 +6072,7 @@ export interface components {
5833
6072
  * ],
5834
6073
  * "meta": {
5835
6074
  * "version": "1.51.0",
5836
- * "request_id": "e6f7a8b9c0d1"
6075
+ * "request_id": "e6f7a8b9c0d11d0c9b8a7f6e"
5837
6076
  * }
5838
6077
  * }
5839
6078
  */
@@ -5857,7 +6096,7 @@ export interface components {
5857
6096
  * ],
5858
6097
  * "meta": {
5859
6098
  * "version": "1.51.0",
5860
- * "request_id": "d5e6f7a8b9c1"
6099
+ * "request_id": "d5e6f7a8b9c11c9b8a7f6e5d"
5861
6100
  * }
5862
6101
  * }
5863
6102
  */
@@ -5872,7 +6111,7 @@ export interface components {
5872
6111
  AsyncQueryParam: "0" | "1" | "true" | "false" | "yes";
5873
6112
  /** @description Identificador (UUID) de la validación */
5874
6113
  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. */
6114
+ /** @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
6115
  IfNoneMatchHeader: string;
5877
6116
  };
5878
6117
  requestBodies: never;
@@ -6089,6 +6328,11 @@ export interface operations {
6089
6328
  * @example 012
6090
6329
  */
6091
6330
  bank?: string;
6331
+ /**
6332
+ * @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.
6333
+ * @example 40012,40014,40072
6334
+ */
6335
+ banks?: string;
6092
6336
  /**
6093
6337
  * @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
6338
  * @example 1000.5
@@ -6194,6 +6438,11 @@ export interface operations {
6194
6438
  * @example 012
6195
6439
  */
6196
6440
  bank?: string;
6441
+ /**
6442
+ * @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.
6443
+ * @example 40012,40014,40072
6444
+ */
6445
+ banks?: string;
6197
6446
  /**
6198
6447
  * @description Filtro — Importe mínimo inclusivo de las validaciones contadas.
6199
6448
  * @example 1000.5
@@ -6307,6 +6556,11 @@ export interface operations {
6307
6556
  * @example 012
6308
6557
  */
6309
6558
  bank?: string;
6559
+ /**
6560
+ * @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.
6561
+ * @example 40012,40014,40072
6562
+ */
6563
+ banks?: string;
6310
6564
  /**
6311
6565
  * @description Filtro — Importe mínimo inclusivo. Se aplica de forma independiente de `amount_max`.
6312
6566
  * @example 1000.5
@@ -6357,7 +6611,7 @@ export interface operations {
6357
6611
  parameters: {
6358
6612
  query?: never;
6359
6613
  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. */
6614
+ /** @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
6615
  "If-None-Match"?: components["parameters"]["IfNoneMatchHeader"];
6362
6616
  };
6363
6617
  path: {
@@ -6488,7 +6742,7 @@ export interface operations {
6488
6742
  };
6489
6743
  401: components["responses"]["Unauthorized"];
6490
6744
  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. */
6745
+ /** @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
6746
  404: {
6493
6747
  headers: {
6494
6748
  [name: string]: unknown;
@@ -7023,7 +7277,7 @@ export interface operations {
7023
7277
  parameters: {
7024
7278
  query?: never;
7025
7279
  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. */
7280
+ /** @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
7281
  "If-None-Match"?: components["parameters"]["IfNoneMatchHeader"];
7028
7282
  };
7029
7283
  path?: never;
@@ -7086,6 +7340,109 @@ export interface operations {
7086
7340
  429: components["responses"]["RateLimited"];
7087
7341
  };
7088
7342
  };
7343
+ getSpeiCalendar: {
7344
+ parameters: {
7345
+ query?: never;
7346
+ header?: {
7347
+ /** @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. */
7348
+ "If-None-Match"?: components["parameters"]["IfNoneMatchHeader"];
7349
+ };
7350
+ path: {
7351
+ /**
7352
+ * @description Año del calendario, de cuatro dígitos.
7353
+ * @example 2026
7354
+ */
7355
+ year: number;
7356
+ };
7357
+ cookie?: never;
7358
+ };
7359
+ requestBody?: never;
7360
+ responses: {
7361
+ /** @description Calendario de días inhábiles SPEI del año, con su fuente. */
7362
+ 200: {
7363
+ headers: {
7364
+ /** @description Firma del calendario actual. Pasar como `If-None-Match` en peticiones posteriores. */
7365
+ ETag?: string;
7366
+ /** @description TTL de caché en el cliente (1 h). */
7367
+ "Cache-Control"?: string;
7368
+ [name: string]: unknown;
7369
+ };
7370
+ content: {
7371
+ "application/json": components["schemas"]["SpeiCalendarResponse"];
7372
+ };
7373
+ };
7374
+ /** @description No modificado: el calendario no ha cambiado según el ETag enviado. */
7375
+ 304: {
7376
+ headers: {
7377
+ /** @description ETag actual del calendario. */
7378
+ ETag?: string;
7379
+ /** @description TTL de caché en el cliente (1 h). */
7380
+ "Cache-Control"?: string;
7381
+ [name: string]: unknown;
7382
+ };
7383
+ content?: never;
7384
+ };
7385
+ /** @description El año no tiene calendario (código `spei_calendar_year_not_covered`). `meta.covered_years` lista los años disponibles. */
7386
+ 404: {
7387
+ headers: {
7388
+ [name: string]: unknown;
7389
+ };
7390
+ content: {
7391
+ /**
7392
+ * @example {
7393
+ * "errors": [
7394
+ * {
7395
+ * "status": "404",
7396
+ * "code": "spei_calendar_year_not_covered",
7397
+ * "detail": "No tenemos el calendario de 2030. Los años disponibles van de 2024 a 2026."
7398
+ * }
7399
+ * ],
7400
+ * "meta": {
7401
+ * "version": "1.63.0",
7402
+ * "request_id": "c1d2e3f4a5b66b5a4f3e2d1c",
7403
+ * "covered_years": [
7404
+ * 2024,
7405
+ * 2025,
7406
+ * 2026
7407
+ * ]
7408
+ * }
7409
+ * }
7410
+ */
7411
+ "application/json": components["schemas"]["ErrorResponse"] & {
7412
+ meta?: {
7413
+ /** @description Años con calendario publicado, de menor a mayor. */
7414
+ covered_years?: number[];
7415
+ };
7416
+ };
7417
+ };
7418
+ };
7419
+ /** @description El año no tiene cuatro dígitos (código `spei_calendar_year_invalid`). */
7420
+ 422: {
7421
+ headers: {
7422
+ [name: string]: unknown;
7423
+ };
7424
+ content: {
7425
+ /**
7426
+ * @example {
7427
+ * "errors": [
7428
+ * {
7429
+ * "status": "422",
7430
+ * "code": "spei_calendar_year_invalid",
7431
+ * "detail": "El año debe tener cuatro dígitos, por ejemplo 2026."
7432
+ * }
7433
+ * ],
7434
+ * "meta": {
7435
+ * "version": "1.63.0",
7436
+ * "request_id": "d2e3f4a5b6c77c6b5a4f3e2d"
7437
+ * }
7438
+ * }
7439
+ */
7440
+ "application/json": components["schemas"]["ErrorResponse"];
7441
+ };
7442
+ };
7443
+ 429: components["responses"]["RateLimited"];
7444
+ };
7445
+ };
7089
7446
  exportBeneficiaries: {
7090
7447
  parameters: {
7091
7448
  query?: {
@@ -7184,7 +7541,6 @@ export interface operations {
7184
7541
  * "attributes": {
7185
7542
  * "account_number": "012180004412345678",
7186
7543
  * "account_type": "clabe",
7187
- * "clabe": "012180004412345678",
7188
7544
  * "bank_code": "40012",
7189
7545
  * "bank_name": "BBVA MEXICO",
7190
7546
  * "label": "Proveedor ABC",
@@ -7224,7 +7580,7 @@ export interface operations {
7224
7580
  401: components["responses"]["Unauthorized"];
7225
7581
  403: components["responses"]["Forbidden"];
7226
7582
  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`. */
7583
+ /** @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
7584
  422: {
7229
7585
  headers: {
7230
7586
  [name: string]: unknown;
@@ -7268,7 +7624,6 @@ export interface operations {
7268
7624
  * "attributes": {
7269
7625
  * "account_number": "5512345678",
7270
7626
  * "account_type": "phone",
7271
- * "clabe": "5512345678",
7272
7627
  * "bank_code": "40021",
7273
7628
  * "bank_name": "HSBC",
7274
7629
  * "label": "Cuenta DiMo HSBC",
@@ -7299,7 +7654,7 @@ export interface operations {
7299
7654
  403: components["responses"]["Forbidden"];
7300
7655
  404: components["responses"]["NotFound"];
7301
7656
  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`. */
7657
+ /** @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
7658
  422: {
7304
7659
  headers: {
7305
7660
  [name: string]: unknown;
@@ -7390,7 +7745,7 @@ export interface operations {
7390
7745
  * "meta": {
7391
7746
  * "version": "1.47.0",
7392
7747
  * "api_version": "v1",
7393
- * "request_id": "b2c3d4e5f6a7"
7748
+ * "request_id": "b2c3d4e5f6a77a6f5e4d3c2b"
7394
7749
  * }
7395
7750
  * }
7396
7751
  */
@@ -7447,7 +7802,7 @@ export interface operations {
7447
7802
  * "meta": {
7448
7803
  * "version": "1.47.0",
7449
7804
  * "api_version": "v1",
7450
- * "request_id": "c5d6e7f8a9b0"
7805
+ * "request_id": "c5d6e7f8a9b00b9a8f7e6d5c"
7451
7806
  * }
7452
7807
  * }
7453
7808
  */
@@ -7487,7 +7842,7 @@ export interface operations {
7487
7842
  * "meta": {
7488
7843
  * "version": "1.47.0",
7489
7844
  * "api_version": "v1",
7490
- * "request_id": "e1f2a3b4c5d6"
7845
+ * "request_id": "e1f2a3b4c5d66d5c4b3a2f1e"
7491
7846
  * }
7492
7847
  * }
7493
7848
  */
@@ -7496,7 +7851,7 @@ export interface operations {
7496
7851
  };
7497
7852
  401: components["responses"]["Unauthorized"];
7498
7853
  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`. */
7854
+ /** @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
7855
  422: {
7501
7856
  headers: {
7502
7857
  [name: string]: unknown;
@@ -7514,7 +7869,7 @@ export interface operations {
7514
7869
  * "meta": {
7515
7870
  * "version": "1.47.0",
7516
7871
  * "api_version": "v1",
7517
- * "request_id": "f2a3b4c5d6e7"
7872
+ * "request_id": "f2a3b4c5d6e77e6d5c4b3a2f"
7518
7873
  * }
7519
7874
  * }
7520
7875
  */
@@ -7594,7 +7949,7 @@ export interface operations {
7594
7949
  * "meta": {
7595
7950
  * "version": "1.47.0",
7596
7951
  * "api_version": "v1",
7597
- * "request_id": "f8a9b0c1d2e3"
7952
+ * "request_id": "f8a9b0c1d2e33e2d1c0b9a8f"
7598
7953
  * }
7599
7954
  * }
7600
7955
  */
@@ -7734,10 +8089,10 @@ export interface operations {
7734
8089
  * "parsed_account_type": "phone",
7735
8090
  * "parsed_bank_code": "40012",
7736
8091
  * "parsed_bank_name": "BBVA MEXICO",
7737
- * "parsed_label": null,
8092
+ * "parsed_label": "Cuenta",
7738
8093
  * "error_codes": [],
7739
8094
  * "corrections_applied": {
7740
- * "alias_auto_assigned": "Beneficiario 002"
8095
+ * "alias_auto_assigned": "Cuenta"
7741
8096
  * },
7742
8097
  * "user_overrides": {
7743
8098
  * "parsed_account_type": "phone",
@@ -7754,7 +8109,7 @@ export interface operations {
7754
8109
  * "meta": {
7755
8110
  * "version": "1.47.0",
7756
8111
  * "api_version": "v1",
7757
- * "request_id": "c1d2e3f4a5b6"
8112
+ * "request_id": "c1d2e3f4a5b66b5a4f3e2d1c"
7758
8113
  * }
7759
8114
  * }
7760
8115
  */
@@ -7818,7 +8173,7 @@ export interface operations {
7818
8173
  * "meta": {
7819
8174
  * "version": "1.47.0",
7820
8175
  * "api_version": "v1",
7821
- * "request_id": "f4a5b6c7d8e9"
8176
+ * "request_id": "f4a5b6c7d8e99e8d7c6b5a4f"
7822
8177
  * }
7823
8178
  * }
7824
8179
  */
@@ -7846,7 +8201,7 @@ export interface operations {
7846
8201
  * "meta": {
7847
8202
  * "version": "1.47.0",
7848
8203
  * "api_version": "v1",
7849
- * "request_id": "a5b6c7d8e9f0"
8204
+ * "request_id": "a5b6c7d8e9f00f9e8d7c6b5a"
7850
8205
  * }
7851
8206
  * }
7852
8207
  */
@@ -8473,21 +8828,65 @@ export interface operations {
8473
8828
  */
8474
8829
  per_page?: number;
8475
8830
  /**
8476
- * @description Filtro — Identificador único del endpoint webhook (UUID v4).
8477
- * @example 7c9e6679-7425-40de-944b-e07fc1f90ae7
8831
+ * @description Filtro — Identificador único del endpoint webhook (UUID v4). Hasta 20, separados por comas.
8832
+ * @example [
8833
+ * "7c9e6679-7425-40de-944b-e07fc1f90ae7"
8834
+ * ]
8835
+ */
8836
+ endpoint_id?: string[];
8837
+ /**
8838
+ * @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.
8839
+ * @example [
8840
+ * "failed"
8841
+ * ]
8478
8842
  */
8479
- endpoint_id?: string;
8843
+ status?: ("success" | "failed" | "retrying" | "pending")[];
8480
8844
  /**
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
8845
+ * @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.\
8846
+ * **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.
8847
+ * @example [
8848
+ * "validation.completed"
8849
+ * ]
8483
8850
  */
8484
- status?: "success" | "failed" | "retrying" | "pending";
8851
+ 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")[];
8485
8852
  /**
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
8853
+ * @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.
8854
+ * @example webhook.example.com
8855
+ */
8856
+ q?: string;
8857
+ /**
8858
+ * @description Filtro — Sólo las entregas de esta validación (UUID v4).
8859
+ * @example 3fa85f64-5717-4562-b3fc-2c963f66afa6
8489
8860
  */
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";
8861
+ validation_id?: string;
8862
+ /**
8863
+ * @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.
8864
+ * @example [
8865
+ * "5xx",
8866
+ * "none"
8867
+ * ]
8868
+ */
8869
+ response_status?: string[];
8870
+ /**
8871
+ * @description Filtro — Entregas creadas desde este momento, incluido. Acepta fecha (`2026-10-01`, medianoche UTC) o fecha y hora ISO 8601 con zona.
8872
+ * @example 2026-10-01T00:00:00Z
8873
+ */
8874
+ from?: string;
8875
+ /**
8876
+ * @description Filtro — Entregas creadas hasta este momento, incluido. Una fecha sola llega al final de ese día en UTC.
8877
+ * @example 2026-10-15T23:59:59Z
8878
+ */
8879
+ to?: string;
8880
+ /**
8881
+ * @description Filtro — Sólo las entregas cuyo número de intento es al menos este. Con `2` quedan las que se reintentaron.
8882
+ * @example 2
8883
+ */
8884
+ min_attempt?: number;
8885
+ /**
8886
+ * @description Filtro — Sólo las entregas cuyo receptor tardó al menos estos milisegundos en responder.
8887
+ * @example 3000
8888
+ */
8889
+ min_response_time_ms?: number;
8491
8890
  };
8492
8891
  header?: never;
8493
8892
  path?: never;
@@ -8527,22 +8926,66 @@ export interface operations {
8527
8926
  parameters: {
8528
8927
  query?: {
8529
8928
  /**
8530
- * @description Filtro — Identificador único del endpoint webhook (UUID v4).
8531
- * @example 7c9e6679-7425-40de-944b-e07fc1f90ae7
8929
+ * @description Filtro — Identificador único del endpoint webhook (UUID v4). Hasta 20, separados por comas.
8930
+ * @example [
8931
+ * "7c9e6679-7425-40de-944b-e07fc1f90ae7"
8932
+ * ]
8532
8933
  */
8533
- endpoint_id?: string;
8934
+ endpoint_id?: string[];
8534
8935
  /**
8535
8936
  * @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
8937
+ * 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.
8938
+ * @example [
8939
+ * "failed"
8940
+ * ]
8538
8941
  */
8539
- status?: "success" | "failed" | "retrying" | "pending";
8942
+ status?: ("success" | "failed" | "retrying" | "pending")[];
8540
8943
  /**
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
8944
+ * @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.\
8945
+ * **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.
8946
+ * @example [
8947
+ * "validation.completed"
8948
+ * ]
8949
+ */
8950
+ 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")[];
8951
+ /**
8952
+ * @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.
8953
+ * @example webhook.example.com
8954
+ */
8955
+ q?: string;
8956
+ /**
8957
+ * @description Filtro — Sólo las entregas de esta validación (UUID v4).
8958
+ * @example 3fa85f64-5717-4562-b3fc-2c963f66afa6
8959
+ */
8960
+ validation_id?: string;
8961
+ /**
8962
+ * @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.
8963
+ * @example [
8964
+ * "5xx",
8965
+ * "none"
8966
+ * ]
8967
+ */
8968
+ response_status?: string[];
8969
+ /**
8970
+ * @description Filtro — Entregas creadas desde este momento, incluido. Acepta fecha (`2026-10-01`, medianoche UTC) o fecha y hora ISO 8601 con zona.
8971
+ * @example 2026-10-01T00:00:00Z
8972
+ */
8973
+ from?: string;
8974
+ /**
8975
+ * @description Filtro — Entregas creadas hasta este momento, incluido. Una fecha sola llega al final de ese día en UTC.
8976
+ * @example 2026-10-15T23:59:59Z
8977
+ */
8978
+ to?: string;
8979
+ /**
8980
+ * @description Filtro — Sólo las entregas cuyo número de intento es al menos este. Con `2` quedan las que se reintentaron.
8981
+ * @example 2
8982
+ */
8983
+ min_attempt?: number;
8984
+ /**
8985
+ * @description Filtro — Sólo las entregas cuyo receptor tardó al menos estos milisegundos en responder.
8986
+ * @example 3000
8544
8987
  */
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";
8988
+ min_response_time_ms?: number;
8546
8989
  /**
8547
8990
  * @description Formato del archivo a descargar. Valores aceptados: `csv` y `xlsx`. Cualquier otro valor se sirve como `csv`.
8548
8991
  * @example csv