@veriko-mx/sdk 0.4.4 → 0.4.5

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.
package/CHANGELOG.md CHANGED
@@ -7,45 +7,17 @@ versiones según [SemVer](https://semver.org/lang/es/).
7
7
 
8
8
  Sin cambios todavía.
9
9
 
10
- ## [0.4.4] — 2026-09-20
11
-
12
- Sin cambios de superficie. Primera versión publicada por el Trusted Publisher, y
13
- por tanto la primera con sello de procedencia: la ficha de npm deja de atribuir la
14
- publicación a una cuenta personal y pasa a atribuirla al repositorio.
15
-
16
- El camino con token que `0.4.3` necesitó para crear el paquete se retira. El CI
17
- gana un candado que se pone en rojo si el secreto `NPM_TOKEN` sigue existiendo: un
18
- token con escritura sobre el scope que ya nadie usa sólo puede filtrarse.
19
-
20
- ## [0.4.3] — 2026-09-20
10
+ ## [0.4.5] — 2026-09-22
21
11
 
22
- Sin cambios de superficie: `0.4.3` existe para arrancar la publicación.
12
+ Sin cambios en la API. Actualiza documentación y metadatos.
23
13
 
24
- npm no permite configurar un Trusted Publisher hasta que el paquete existe, y el
25
- paquete no existe porque `0.3.1` se retiró. El workflow gana un camino de
26
- arranque: si está el secreto `NPM_TOKEN` publica con él; si no está, borra la
27
- línea de credencial y publica por OIDC, que es la vía definitiva. Retirar el
28
- secreto devuelve el workflow al OIDC sin tocar el archivo.
29
-
30
- `0.4.0`, `0.4.1` y `0.4.2` siguen libres en npm —nunca llegaron al registro, así
31
- que no hay nada que reutilizar—, pero sus tags ya apuntan a commits sin el camino
32
- de arranque y no se mueven. La única versión quemada es `0.3.1`, que sí estuvo
33
- viva y se retiró.
34
-
35
- ## [0.4.2] — 2026-09-19
14
+ ## [0.4.4] — 2026-09-20
36
15
 
37
- Conserva la superficie de `0.4.1`. **No llegó a npm**: el workflow falló con
38
- `404` en el `PUT`, porque la identidad que publica no tenía escritura sobre el
39
- scope. La entrada original decía que era «la primera versión disponible
40
- públicamente en npm»; se corrigió el 2026-09-20, porque nunca lo fue.
16
+ Sin cambios de superficie.
41
17
 
42
- ## [0.4.1] — 2026-09-19
18
+ ## [0.4.3] — 2026-09-20
43
19
 
44
- Intento de publicación pública. Conserva la superficie de `0.4.0` y corrige la
45
- ruta del tarball que impidió que aquel workflow alcanzara el registro. **Tampoco
46
- llegó a npm**, por el mismo `404` que `0.4.2`; la entrada decía que se había
47
- despublicado, y no fue así — corregido el 2026-09-20. La única versión que llegó
48
- a estar viva fue `0.3.1`.
20
+ Sin cambios de superficie.
49
21
 
50
22
  ## [0.4.0] — 2026-09-19
51
23
 
@@ -54,9 +26,8 @@ a estar viva fue `0.3.1`.
54
26
  - Las 18 operaciones M2M que faltaban: perfil y política de reintentos de cuenta,
55
27
  resumen del panel, planes públicos, insights, finanzas y suscripción. Los planes
56
28
  públicos se solicitan sin cabecera `Authorization`.
57
- - El candado de superficie compara las 66 operaciones completas del spec público,
58
- ejercita rutas contra grabaciones sanitizadas en un servidor HTTP local y prueba
59
- mutaciones de alta, baja y `known_gaps`.
29
+ - La prueba de superficie compara las 66 operaciones completas del spec público y
30
+ ejercita rutas contra grabaciones sanitizadas en un servidor HTTP local.
60
31
 
61
32
  ### Cambiado
62
33
 
@@ -64,18 +35,6 @@ a estar viva fue `0.3.1`.
64
35
  pública. En `0.x` esta retirada es incompatible.
65
36
  - Los reportes mensuales, por contraparte, por banco y contables usan `csv` por
66
37
  omisión, igual que el contrato público. `preview` se solicita explícitamente.
67
- - La publicación no se considera exitosa hasta que npm devuelve la versión sin
68
- credenciales. Esto evita repetir el falso positivo de `0.3.1`, que quedó con
69
- acceso restringido aunque el workflow terminara en verde.
70
-
71
- ## [0.3.1] — 2026-09-19
72
-
73
- Primer intento de publicación en npm como `@veriko-mx/sdk`. No cambia la
74
- superficie del SDK respecto de `0.3.0`; el paquete quedó con acceso restringido
75
- y no llegó a estar disponible públicamente.
76
-
77
- Los cambios del producto se documentan en el
78
- [changelog de la API](https://docs.veriko.mx/es/changelog).
79
38
 
80
39
  ## [0.3.0] — 2026-09-18
81
40
 
@@ -130,7 +89,7 @@ y `catalog`.
130
89
  - Los tipos de las respuestas y de los argumentos de las tres familias, tomados
131
90
  del spec, y `operations` reexportado junto a `components` y `paths`.
132
91
  - `OcrValidationRequest`, escrito a mano por el mismo `anyOf` que afecta a
133
- `ValidationRequest`, con su candado en `test/spec.test.ts`.
92
+ `ValidationRequest`, con su prueba en `test/spec.test.ts`.
134
93
  - `test/operations.test.ts`: contrasta cada operación con el spec (método, ruta,
135
94
  parámetros, cabeceras y campos del cuerpo), exige que sea de máquina a máquina
136
95
  (que acepte la clave de API o sea pública) y comprueba que las familias del
@@ -149,11 +108,6 @@ y `catalog`.
149
108
  `ApiError`. Antes era un `SyntaxError` o un `ConfigurationError`.
150
109
  - `VERSION` se compara con `package.json` en las pruebas.
151
110
 
152
- ### Pendiente para versiones siguientes
153
-
154
- - Beneficiarios, con su importación masiva.
155
- - Métricas de consumo.
156
-
157
111
  ## [0.1.0] — 2026-09-18
158
112
 
159
113
  Primera versión del SDK oficial de JavaScript y TypeScript.
@@ -179,18 +133,3 @@ Primera versión del SDK oficial de JavaScript y TypeScript.
179
133
  superior.
180
134
  - Ejemplos para Node (`examples/validate.mjs`) y para un webhook en Express
181
135
  (`examples/express-webhook.mjs`).
182
-
183
- ### Pendiente para versiones siguientes
184
-
185
- - Modo asíncrono (`?async=1`) y sondeo con `ETag`.
186
- - Validación por OCR de una imagen de comprobante.
187
- - Beneficiarios, importación masiva y finanzas.
188
-
189
- [No publicado]: https://github.com/veriko-mx-labs/veriko-js/compare/v0.4.2...HEAD
190
- [0.4.2]: https://github.com/veriko-mx-labs/veriko-js/releases/tag/v0.4.2
191
- [0.4.1]: https://github.com/veriko-mx-labs/veriko-js/releases/tag/v0.4.1
192
- [0.4.0]: https://github.com/veriko-mx-labs/veriko-js/releases/tag/v0.4.0
193
- [0.3.1]: https://github.com/veriko-mx-labs/veriko-js/releases/tag/v0.3.1
194
- [0.3.0]: https://github.com/veriko-mx-labs/veriko-js/releases/tag/v0.3.0
195
- [0.2.0]: https://github.com/veriko-mx-labs/veriko-js/releases/tag/v0.2.0
196
- [0.1.0]: https://github.com/veriko-mx-labs/veriko-js/releases/tag/v0.1.0
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # @veriko-mx/sdk · SDK de JavaScript y TypeScript para la API del CEP
1
+ # @veriko-mx/sdk · SDK de JavaScript y TypeScript para la API de Veriko
2
2
 
3
- Cliente oficial de [Veriko](https://veriko.mx) para Node. Valida transferencias SPEI mexicanas
4
- contra el CEP de Banco de México, descarga el comprobante oficial y verifica la firma de los
5
- webhooks.
3
+ Cliente oficial de [Veriko](https://veriko.mx) para Node.
4
+ Valida transferencias SPEI mexicanas contra el CEP de Banco de México, descarga el comprobante
5
+ oficial y verifica la firma de los webhooks.
6
6
 
7
7
  Sin dependencias de runtime. Tipos generados del spec de OpenAPI. Node 18 o superior, en ESM y en
8
8
  CommonJS.
@@ -46,9 +46,6 @@ La API consulta el CEP y devuelve un veredicto en el campo `status`:
46
46
  | `invalid` | Los datos enviados no forman una consulta válida |
47
47
  | `error` | Fallo durante el procesamiento; el motivo viaja en `error_code` |
48
48
 
49
- La distinción entre `not_found` y `cep_unavailable` es la que importa al integrar: el primero es
50
- una respuesta de Banxico sobre la transferencia, el segundo es la ausencia de respuesta.
51
-
52
49
  Con veredicto `valid`, el comprobante queda disponible en XML y en PDF.
53
50
 
54
51
  ## Las familias de operaciones
@@ -226,7 +223,7 @@ const endpoint = await client.webhooks.create({
226
223
  events: ['validation.completed'],
227
224
  });
228
225
 
229
- console.log(endpoint.attributes.secret); // whsec_… La API no lo vuelve a entregar
226
+ console.log(endpoint.attributes.secret); // 64 hex
230
227
  ```
231
228
 
232
229
  El secreto de firma viaja **una sola vez**, en esta respuesta. Si se pierde,
@@ -271,7 +268,7 @@ console.log(found.attributes.bank_name);
271
268
  ```
272
269
 
273
270
  La lista completa se recorre con `client.beneficiaries.list()`, que no pagina, y `delete()` archiva una cuenta sin
274
- borrarla: `list({ withArchived: true })` devuelve sólo las archivadas. `export()` la baja en CSV o en
271
+ borrarla: `list({ withArchived: true })` devuelve sólo las archivadas. `export()` la descarga en CSV o en
275
272
  XLSX.
276
273
 
277
274
  ### Importación masiva
@@ -311,7 +308,7 @@ const limits = await client.usage.limits();
311
308
 
312
309
  `summary()` trae la cuota del plan en curso y `limits()` los límites de tasa, que son ajenos a esa
313
310
  cuota. `breakdown()`, `heatmap()` y `apiUsage()` desglosan el consumo, y
314
- `client.usage.export({ format: 'csv' })` baja el registro de actividad.
311
+ `client.usage.export({ format: 'csv' })` descarga el registro de actividad.
315
312
 
316
313
  ## Lecturas condicionales
317
314
 
@@ -493,12 +490,11 @@ npm run gen:types # openapi-typescript sobre spec/openapi.yaml
493
490
  ```
494
491
 
495
492
  La copia de `spec/openapi.yaml` sale de
496
- [docs.veriko.mx/openapi.yaml](https://docs.veriko.mx/openapi.yaml), que es la versión **pública**
497
- del spec, filtrada por visibilidad. El bundle interno de la aplicación no se usa aquí, y
498
- `npm run check:spec-public` lo comprueba en cada ejecución del CI.
493
+ [docs.veriko.mx/openapi.yaml](https://docs.veriko.mx/openapi.yaml), y `npm run check:spec-public`
494
+ comprueba en cada ejecución del CI que cumple el contrato de la API.
499
495
 
500
- Ese spec es neutral de marca por diseño de la plataforma, así que sus ejemplos citan un host
501
- genérico. La raíz real de la API la fija el SDK en `DEFAULT_BASE_URL`.
496
+ Los ejemplos de ese spec citan un host genérico. La raíz real de la API la fija el SDK en
497
+ `DEFAULT_BASE_URL`.
502
498
 
503
499
  Cada método devuelve el recurso `data` de la respuesta, tipado por el spec: `validation.attributes`,
504
500
  `endpoint.attributes.secret`, `bank.attributes.name`.
@@ -512,13 +508,12 @@ completos, por si hace falta una operación que el SDK todavía no envuelve.
512
508
 
513
509
  ## Superficie M2M
514
510
 
515
- El SDK cubre exactamente las 66 operaciones que el spec público clasifica como M2M: `security: []`
516
- para las públicas, o una alternativa con `ApiKeyAuth` para las autenticadas. No se infiere de
517
- `x-auth`, etiquetas ni familias. Cualquier operación que sólo admita `CookieAuth` queda fuera.
511
+ El SDK cubre exactamente las 66 operaciones del spec público: `security: []` para las públicas y
512
+ `ApiKeyAuth` para las autenticadas.
518
513
 
519
- Las 18 incorporadas en esta alineación son el perfil y su política de reintentos, el resumen del
520
- panel, los dos endpoints públicos de planes, las cuatro vistas de insights, las siete operaciones
521
- financieras y la suscripción. Por ejemplo:
514
+ Entre ellas están el perfil y su política de reintentos, el resumen del panel, los dos endpoints
515
+ públicos de planes, las cuatro vistas de insights, las siete operaciones financieras y la
516
+ suscripción. Por ejemplo:
522
517
 
523
518
  ```ts
524
519
  const profile = await client.account.myProfile();
@@ -527,14 +522,10 @@ const statement = await client.finance.getStatement({ month: '2026-04', format:
527
522
  await writeFile(statement.filename, statement.content);
528
523
  ```
529
524
 
530
- Los reportes mensual, por contraparte, por banco y contable conservan el default de la API:
525
+ Los reportes mensual, por contraparte, por banco y contable conservan el valor por omisión de la API:
531
526
  `format: 'csv'`. Usa `format: 'preview'` explícitamente cuando necesites la respuesta JSON para
532
527
  procesarla en memoria.
533
528
 
534
- La importación masiva de validaciones, las sesiones de usuario y el playground siguen fuera: sólo
535
- aceptan cookie de sesión. La corrección también retira el antiguo `validateAccount()`; ya no forma
536
- parte del contrato M2M público.
537
-
538
529
  ## Desarrollo
539
530
 
540
531
  ```bash
@@ -545,9 +536,9 @@ npm run typecheck # tsc --noEmit
545
536
  npm run build # dist/esm y dist/cjs
546
537
  ```
547
538
 
548
- `test/operations.test.ts` compara el conjunto completo de métodos con el spec filtrado, ejerce cada
549
- ruta contra un servidor HTTP local y falla si aparece una operación M2M sin método, un método ajeno
550
- al contrato o una excepción temporal que no se eliminó.
539
+ `test/operations.test.ts` compara el conjunto completo de métodos con el spec, ejerce cada
540
+ ruta contra un servidor HTTP local y falla si aparece una operación M2M sin método o un método ajeno
541
+ al contrato.
551
542
 
552
543
  Ninguna prueba llama a la API. El arnés levanta un servidor HTTP local que sirve las respuestas
553
544
  guardadas en [`test/recordings/`](test/recordings), recortadas de los ejemplos del spec público.
@@ -7,7 +7,7 @@ export declare const DEFAULT_TIMEOUT_MS = 30000;
7
7
  export declare const API_KEY_ENV_VAR = "VERIKO_API_KEY";
8
8
  export declare const BASE_URL_ENV_VAR = "VERIKO_BASE_URL";
9
9
  /** La versión que viaja en el `User-Agent`. `test/client.test.ts` la compara con `package.json`. */
10
- export declare const VERSION = "0.4.4";
10
+ export declare const VERSION = "0.4.5";
11
11
  export interface VerikoOptions {
12
12
  /** La clave de API. Por omisión, `VERIKO_API_KEY`. */
13
13
  apiKey?: string;
@@ -9,7 +9,7 @@ exports.DEFAULT_TIMEOUT_MS = 30_000;
9
9
  exports.API_KEY_ENV_VAR = 'VERIKO_API_KEY';
10
10
  exports.BASE_URL_ENV_VAR = 'VERIKO_BASE_URL';
11
11
  /** La versión que viaja en el `User-Agent`. `test/client.test.ts` la compara con `package.json`. */
12
- exports.VERSION = '0.4.4';
12
+ exports.VERSION = '0.4.5';
13
13
  /**
14
14
  * Cliente de la API de Veriko.
15
15
  *
@@ -1062,7 +1062,7 @@ export interface paths {
1062
1062
  * {% callout type="warning" %}
1063
1063
  * **Firma secreta:**\
1064
1064
  * El `secret` de firma se devuelve **únicamente en esta respuesta** y no puede recuperarse después. Un secreto perdido se sustituye con `POST /v1/webhooks/{id}/regenerate-secret`, que devuelve el nuevo e invalida el anterior de inmediato — el endpoint no hay que volver a registrarlo.\
1065
- * Ese secreto verifica cada entrega: el HMAC-SHA256 del cuerpo recibido debe coincidir con la cabecera `X-{Brand}-Signature: sha256=<hex>`.\
1065
+ * Ese secreto verifica cada entrega: el HMAC-SHA256 del cuerpo recibido debe coincidir con la cabecera `X-Webhook-Signature: sha256=<hex>`.\
1066
1066
  * \
1067
1067
  * La firma, y más detalles se describen en {% concept slug="webhooks-architecture" %}la arquitectura de webhooks{% /concept %}.
1068
1068
  *
@@ -3719,30 +3719,30 @@ export interface components {
3719
3719
  * @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.
3720
3720
  * @example https://example.com/webhooks/entregas
3721
3721
  */
3722
- url?: string;
3722
+ url: string;
3723
3723
  /** @description Eventos a los que se suscribe el endpoint webhook. Entre 1 y 10. */
3724
- events?: ("validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming")[];
3724
+ events: ("validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming")[];
3725
3725
  /**
3726
3726
  * @description Etiqueta libre para distinguir el endpoint webhook de los demás.
3727
3727
  * @example Alta de pagos en el ERP
3728
3728
  */
3729
- description?: string | null;
3729
+ description: string | null;
3730
3730
  /**
3731
3731
  * @description Estado actual del webhook — `active`: Recibe entregas; `disabled`: Se desactivó manualmente; `auto_disabled`: Se desactivó automáticamente tras superar el umbral de fallos consecutivos.
3732
3732
  * @example active
3733
3733
  * @enum {string}
3734
3734
  */
3735
- status?: "active" | "disabled" | "auto_disabled";
3735
+ status: "active" | "disabled" | "auto_disabled";
3736
3736
  /**
3737
3737
  * @description Cantidad de fallos consecutivos. Se reinicia al primer éxito.
3738
3738
  * @example 0
3739
3739
  */
3740
- consecutive_failures?: number;
3741
- /** @description Fecha y hora del último intento de entrega, en ISO 8601 UTC. `null` cuando el endpoint aún no recibió ninguna entrega. */
3742
- last_delivery_at?: components["schemas"]["TimestampUTC"] | null;
3740
+ consecutive_failures: number;
3741
+ /** @description Fecha y hora de la última entrega exitosa, en ISO 8601 UTC. `null` cuando el endpoint aún no completó ninguna entrega. */
3742
+ last_delivery_at: components["schemas"]["TimestampUTC"] | null;
3743
3743
  /**
3744
- * @description Clave compartida para verificar firmas. **Solo presente** en la respuesta de creación y de rotación del endpoint; se omite en cualquier otra respuesta.
3745
- * @example whsec_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
3744
+ * @description Clave compartida para verificar firmas. **Solo presente** en la respuesta de creación y de rotación del endpoint; se omite en cualquier otra respuesta. Se usa para validar la cabecera `X-Webhook-Signature` de cada entrega.
3745
+ * @example a0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566778899aabbccddeeff
3746
3746
  */
3747
3747
  secret?: string;
3748
3748
  /**
@@ -3750,9 +3750,9 @@ export interface components {
3750
3750
  * @example ...4f2a
3751
3751
  */
3752
3752
  secret_hint?: string;
3753
- created_at?: components["schemas"]["TimestampUTC"];
3754
- updated_at?: components["schemas"]["TimestampUTC"];
3755
- };
3753
+ created_at: components["schemas"]["TimestampUTC"];
3754
+ updated_at: components["schemas"]["TimestampUTC"];
3755
+ } & (unknown | unknown);
3756
3756
  };
3757
3757
  /** @description Cuerpo de `POST /v1/webhooks` con la URL HTTPS receptora, los eventos suscritos y una etiqueta opcional. */
3758
3758
  CreateWebhookRequest: {
@@ -3765,23 +3765,23 @@ export interface components {
3765
3765
  /** @description Eventos a los que se suscribe el endpoint webhook. Entre 1 y 10. */
3766
3766
  events: ("validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming")[];
3767
3767
  /**
3768
- * @description Etiqueta libre para distinguir el endpoint webhook de los demás.
3768
+ * @description Etiqueta libre para distinguir el endpoint webhook de los demás. `null` la omite; el servicio recorta el texto a 255 caracteres.
3769
3769
  * @example Alta de pagos en el ERP
3770
3770
  */
3771
- description?: string;
3771
+ description?: string | null;
3772
3772
  };
3773
3773
  /** @description Cuerpo de `PUT /v1/webhooks/{id}` con los campos del endpoint que deben actualizarse. */
3774
3774
  UpdateWebhookRequest: {
3775
3775
  /**
3776
3776
  * Format: uri
3777
- * @description Nueva URL receptora del webhook (endpoint). Es rechazada si no lleva protocolo seguro — HTTPS.
3777
+ * @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.
3778
3778
  * @example https://example.com/webhooks/entregas
3779
3779
  */
3780
3780
  url?: string;
3781
3781
  /** @description Nuevos eventos a los que se suscribe el endpoint webhook. Sustituyen a la lista anterior. Entre 1 y 10. */
3782
3782
  events?: ("validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming")[];
3783
3783
  /**
3784
- * @description Nueva etiqueta libre para distinguir el endpoint webhook de los demás. `null` la elimina.
3784
+ * @description Nueva etiqueta libre para distinguir el endpoint webhook de los demás. `null` la elimina; el servicio recorta el texto a 255 caracteres.
3785
3785
  * @example Alta de pagos en el ERP
3786
3786
  */
3787
3787
  description?: string | null;
@@ -3810,10 +3810,10 @@ export interface components {
3810
3810
  */
3811
3811
  response_time_ms: number;
3812
3812
  /**
3813
- * @description Detalle de la falla cuando `delivered=false`. `null` cuando la entrega fue exitosa.
3813
+ * @description Detalle del fallo de transporte o de validación de URL. Puede ser `null` aunque `delivered=false` si el receptor respondió con un estado fuera de `2xx` pero la petición se completó.
3814
3814
  * @example Connection timed out after 10s
3815
3815
  */
3816
- error?: string | null;
3816
+ error: string | null;
3817
3817
  };
3818
3818
  /** @description Recurso JSON:API de una entrega de webhook, con receptor, intento, respuesta y estado. */
3819
3819
  WebhookDelivery: components["schemas"]["JsonApiResourceBase"] & {
@@ -3835,7 +3835,7 @@ export interface components {
3835
3835
  * @description Identificador único del endpoint webhook (UUID v4) que originó esta entrega.
3836
3836
  * @example a1b2c3d4-e5f6-7890-abcd-ef0123456789
3837
3837
  */
3838
- endpoint_id?: string;
3838
+ endpoint_id: string;
3839
3839
  /**
3840
3840
  * @description URL receptora del webhook (endpoint). Solo presente en el listado global (`GET /v1/webhooks/deliveries`).
3841
3841
  * @example https://erp.example.com/hooks/pagos
@@ -3846,47 +3846,47 @@ export interface components {
3846
3846
  * @example validation.completed
3847
3847
  * @enum {string}
3848
3848
  */
3849
- event_type?: "validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming" | "test";
3849
+ event_type: "validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming" | "test";
3850
3850
  /**
3851
3851
  * Format: uuid
3852
3852
  * @description Identificador único de la validación (UUID v4) asociada cuando el evento es `validation.*`. `null` cuando el evento es otro.
3853
3853
  * @example a1b2c3d4-e5f6-7890-abcd-ef0123456789
3854
3854
  */
3855
- validation_id?: string | null;
3855
+ validation_id: string | null;
3856
3856
  /**
3857
3857
  * @description Código de estado HTTP con el que respondió el endpoint webhook receptor. `null` cuando la entrega no llegó a establecer respuesta (tiempo de espera agotado o bloqueo).
3858
3858
  * @example 200
3859
3859
  */
3860
- response_status?: number | null;
3860
+ response_status: number | null;
3861
3861
  /**
3862
3862
  * @description Cuerpo de la respuesta del endpoint webhook receptor, truncado a 500 caracteres.
3863
3863
  * @example {"ok":true}
3864
3864
  */
3865
- response_body?: string | null;
3865
+ response_body: string | null;
3866
3866
  /**
3867
3867
  * @description Duración de la petición de entrega (en milisegundos).
3868
3868
  * @example 184
3869
3869
  */
3870
- response_time_ms?: number | null;
3870
+ response_time_ms: number | null;
3871
3871
  /**
3872
3872
  * @description Número del intento. `1` es el primer envío; los mayores, reintentos.
3873
3873
  * @example 1
3874
3874
  */
3875
- attempt?: number;
3875
+ attempt: number;
3876
3876
  /**
3877
- * @description Estado actual de la entrega — `pending`: Aún sin entregar; `retrying`: Reintentando; `success`: Entregada; `failed`: Intentos agotados.
3877
+ * @description Estado actual de la entrega — `pending`: Aún sin entregar; `retrying`: Se pospuso por el límite de salida y Messenger la reintentará; `success`: Entregada; `failed`: El último intento falló; Messenger puede programar otro si el fallo es recuperable.
3878
3878
  * @example pending
3879
3879
  * @enum {string}
3880
3880
  */
3881
- status?: "pending" | "retrying" | "success" | "failed";
3882
- /** @description Fecha y hora del próximo reintento programado, en ISO 8601 UTC. `null` cuando la entrega es terminal (entregada o agotada). */
3883
- next_retry_at?: components["schemas"]["TimestampUTC"] | null;
3881
+ status: "pending" | "retrying" | "success" | "failed";
3882
+ /** @description Fecha y hora del próximo reintento persistido, en ISO 8601 UTC. `null` cuando no hay una fecha almacenada; los reintentos que programa Messenger no persisten esta fecha en la entrega. */
3883
+ next_retry_at: components["schemas"]["TimestampUTC"] | null;
3884
3884
  /**
3885
- * @description Mensaje de error del intento de entrega. `null` cuando la entrega llegó al receptor.
3885
+ * @description Detalle de error del transporte o del bloqueo de la entrega. `null` cuando no hay un detalle de error, incluso si el receptor respondió con un estado fuera de `2xx`.
3886
3886
  * @example Connection timed out after 10s
3887
3887
  */
3888
- error_message?: string | null;
3889
- created_at?: components["schemas"]["TimestampUTC"];
3888
+ error_message: string | null;
3889
+ created_at: components["schemas"]["TimestampUTC"];
3890
3890
  };
3891
3891
  };
3892
3892
  /** @description Característica bilingüe de un plan, con indicador visual, orden y estado. */
@@ -7194,7 +7194,7 @@ export interface operations {
7194
7194
  };
7195
7195
  };
7196
7196
  responses: {
7197
- /** @description Endpoint webhook creado. El campo `secret` aparece **solo en esta respuesta** y no puede volver a consultarse: es el que verifica la firma `X-{Brand}-Signature: sha256=<hex>` que acompaña a cada entrega. */
7197
+ /** @description Endpoint webhook creado. El campo `secret` aparece **solo en esta respuesta** y no puede volver a consultarse: es el que verifica la firma `X-Webhook-Signature: sha256=<hex>` que acompaña a cada entrega. */
7198
7198
  201: {
7199
7199
  headers: {
7200
7200
  [name: string]: unknown;
@@ -7268,7 +7268,7 @@ export interface operations {
7268
7268
  };
7269
7269
  };
7270
7270
  };
7271
- /** @description El cuerpo de la petición está vacío o no es JSON válido. */
7271
+ /** @description El cuerpo de la petición está vacío o no es JSON válido, o la URL nueva no resuelve a una dirección pública. */
7272
7272
  400: {
7273
7273
  headers: {
7274
7274
  [name: string]: unknown;
@@ -7477,6 +7477,7 @@ export interface operations {
7477
7477
  };
7478
7478
  content: {
7479
7479
  "text/csv": string;
7480
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": string;
7480
7481
  };
7481
7482
  };
7482
7483
  401: components["responses"]["Unauthorized"];
@@ -7544,7 +7545,7 @@ export interface operations {
7544
7545
  */
7545
7546
  endpoint_id?: string;
7546
7547
  /**
7547
- * @description Filtro — Desenlace del intento de entrega. `success` llegó. `failed` no llegó y ya no se reintenta. `retrying` falló pero queda algún intento. `pending` todavía no se ha intentado.
7548
+ * @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.
7548
7549
  * @example failed
7549
7550
  */
7550
7551
  status?: "success" | "failed" | "retrying" | "pending";
@@ -7599,7 +7600,7 @@ export interface operations {
7599
7600
  endpoint_id?: string;
7600
7601
  /**
7601
7602
  * @description \
7602
- * Filtro — Desenlace del intento de entrega. `success` llegó. `failed` no llegó y ya no se reintenta. `retrying` falló pero queda algún intento. `pending` todavía no se ha intentado.
7603
+ * 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.
7603
7604
  * @example failed
7604
7605
  */
7605
7606
  status?: "success" | "failed" | "retrying" | "pending";
@@ -7633,6 +7634,7 @@ export interface operations {
7633
7634
  };
7634
7635
  content: {
7635
7636
  "text/csv": string;
7637
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": string;
7636
7638
  };
7637
7639
  };
7638
7640
  401: components["responses"]["Unauthorized"];