@hablala/api-contract 0.8.0 → 0.9.0

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.
Files changed (3) hide show
  1. package/dist/index.d.ts +1435 -131
  2. package/openapi.json +7787 -5878
  3. package/package.json +3 -3
package/dist/index.d.ts CHANGED
@@ -1355,6 +1355,46 @@ interface paths {
1355
1355
  patch?: never;
1356
1356
  trace?: never;
1357
1357
  };
1358
+ "/v1/organization": {
1359
+ parameters: {
1360
+ query?: never;
1361
+ header?: never;
1362
+ path?: never;
1363
+ cookie?: never;
1364
+ };
1365
+ /**
1366
+ * Ver la organización del token (estado de propiedad)
1367
+ * @description La organización a la que pertenece la credencial de máquina, con su `status` (`active`/`unclaimed`/`claimed`) y sus relojes. Es el endpoint de polling del agente que provisionó una claimable org: mientras responda `unclaimed`, nadie la reclamó; un `401` posterior significa que se reclamó (los tokens del agente se rotaron) o venció.
1368
+ */
1369
+ get: operations["HablalaApiWeb.Machine.OrganizationController.show"];
1370
+ put?: never;
1371
+ post?: never;
1372
+ delete?: never;
1373
+ options?: never;
1374
+ head?: never;
1375
+ patch?: never;
1376
+ trace?: never;
1377
+ };
1378
+ "/v1/organization/refresh-claim-url": {
1379
+ parameters: {
1380
+ query?: never;
1381
+ header?: never;
1382
+ path?: never;
1383
+ cookie?: never;
1384
+ };
1385
+ get?: never;
1386
+ put?: never;
1387
+ /**
1388
+ * Renovar el claim URL de una claimable organization
1389
+ * @description Emite un claim link nuevo (el anterior deja de canjear al instante) con su TTL corto, SIN extender el TTL del recurso. Falla si la org ya fue reclamada (`409`) o si el recurso venció (`410`).
1390
+ */
1391
+ post: operations["HablalaApiWeb.Machine.OrganizationController.refresh_claim_url"];
1392
+ delete?: never;
1393
+ options?: never;
1394
+ head?: never;
1395
+ patch?: never;
1396
+ trace?: never;
1397
+ };
1358
1398
  "/v1/organizations": {
1359
1399
  parameters: {
1360
1400
  query?: never;
@@ -1373,6 +1413,66 @@ interface paths {
1373
1413
  patch?: never;
1374
1414
  trace?: never;
1375
1415
  };
1416
+ "/v1/organizations/claim": {
1417
+ parameters: {
1418
+ query?: never;
1419
+ header?: never;
1420
+ path?: never;
1421
+ cookie?: never;
1422
+ };
1423
+ get?: never;
1424
+ put?: never;
1425
+ /**
1426
+ * Reclamar una claimable organization
1427
+ * @description Consuma la **transferencia**: el usuario autenticado se vuelve `owner` de la org del claim token, la org pasa a `claimed` y los secretos del agente se ROTAN (todos los `mat_` y API keys activos se revocan; se emite un par nuevo que se revela aquí una única vez). Registra el evento `organization.claimed`.
1428
+ */
1429
+ post: operations["HablalaApiWeb.Orgs.ClaimableOrganizationController.claim"];
1430
+ delete?: never;
1431
+ options?: never;
1432
+ head?: never;
1433
+ patch?: never;
1434
+ trace?: never;
1435
+ };
1436
+ "/v1/organizations/claimable": {
1437
+ parameters: {
1438
+ query?: never;
1439
+ header?: never;
1440
+ path?: never;
1441
+ cookie?: never;
1442
+ };
1443
+ get?: never;
1444
+ put?: never;
1445
+ /**
1446
+ * Provisionar una claimable organization (sin cuenta)
1447
+ * @description El **signup invertido** para agentes: crea una organización real `unclaimed` (sin dueño) y devuelve — UNA sola vez — el par de API keys (`pk_`/`sk_`), el machine access token (`mat_`, preset `account_as_code`) y el `claimUrl` con el que un humano la reclama. La org caduca (`expiresAt`, 72 h) si nadie la reclama; el claim link tiene su propio TTL renovable. Al reclamarse, los secretos del agente se ROTAN. Sin autenticación; rate limit estricto por IP.
1448
+ */
1449
+ post: operations["HablalaApiWeb.Orgs.ClaimableOrganizationController.create"];
1450
+ delete?: never;
1451
+ options?: never;
1452
+ head?: never;
1453
+ patch?: never;
1454
+ trace?: never;
1455
+ };
1456
+ "/v1/organizations/claimable/preview": {
1457
+ parameters: {
1458
+ query?: never;
1459
+ header?: never;
1460
+ path?: never;
1461
+ cookie?: never;
1462
+ };
1463
+ /**
1464
+ * Previsualizar un claim token
1465
+ * @description A qué organización lleva un claim token, sin consumirlo ni requerir sesión (la pantalla de claim lo muestra antes de pedir login). Siempre `200`: `status` distingue un token válido de uno inválido/vencido/ya reclamado (sin filtrar el motivo).
1466
+ */
1467
+ get: operations["HablalaApiWeb.Orgs.ClaimableOrganizationController.preview"];
1468
+ put?: never;
1469
+ post?: never;
1470
+ delete?: never;
1471
+ options?: never;
1472
+ head?: never;
1473
+ patch?: never;
1474
+ trace?: never;
1475
+ };
1376
1476
  "/v1/organizations/{id}": {
1377
1477
  parameters: {
1378
1478
  query?: never;
@@ -3398,6 +3498,119 @@ interface paths {
3398
3498
  patch?: never;
3399
3499
  trace?: never;
3400
3500
  };
3501
+ "/v1/organizations/{organization_id}/webhooks": {
3502
+ parameters: {
3503
+ query?: never;
3504
+ header?: never;
3505
+ path?: never;
3506
+ cookie?: never;
3507
+ };
3508
+ /**
3509
+ * Listar webhook endpoints
3510
+ * @description Los webhook endpoints de la organización (solo metadatos; el signing secret se obtiene con `GET .../:id/secret`).
3511
+ */
3512
+ get: operations["HablalaApiWeb.Webhooks.WebhookController.index"];
3513
+ put?: never;
3514
+ /**
3515
+ * Crear un webhook endpoint
3516
+ * @description Suscribe una URL a eventos del event store. La plataforma genera el **signing secret** (`whsec_…`) y lo incluye en esta respuesta (`secret`); con él el receptor verifica la firma de cada entrega (spec Standard Webhooks). También puede recuperarse después con `GET .../:id/secret`.
3517
+ */
3518
+ post: operations["HablalaApiWeb.Webhooks.WebhookController.create"];
3519
+ delete?: never;
3520
+ options?: never;
3521
+ head?: never;
3522
+ patch?: never;
3523
+ trace?: never;
3524
+ };
3525
+ "/v1/organizations/{organization_id}/webhooks/{id}": {
3526
+ parameters: {
3527
+ query?: never;
3528
+ header?: never;
3529
+ path?: never;
3530
+ cookie?: never;
3531
+ };
3532
+ /** Ver un webhook endpoint */
3533
+ get: operations["HablalaApiWeb.Webhooks.WebhookController.show"];
3534
+ /**
3535
+ * Actualizar un webhook endpoint
3536
+ * @description Cambia `url`/`enabledEvents`/`status`. Reactivar (`status: "enabled"`) un endpoint auto-deshabilitado limpia el motivo del disable. El slug y el secret no se tocan aquí.
3537
+ */
3538
+ put: operations["HablalaApiWeb.Webhooks.WebhookController.update"];
3539
+ post?: never;
3540
+ /**
3541
+ * Borrar un webhook endpoint
3542
+ * @description Elimina el endpoint y su historial de deliveries. Deja de recibir entregas.
3543
+ */
3544
+ delete: operations["HablalaApiWeb.Webhooks.WebhookController.delete"];
3545
+ options?: never;
3546
+ head?: never;
3547
+ /**
3548
+ * Actualizar un webhook endpoint
3549
+ * @description Cambia `url`/`enabledEvents`/`status`. Reactivar (`status: "enabled"`) un endpoint auto-deshabilitado limpia el motivo del disable. El slug y el secret no se tocan aquí.
3550
+ */
3551
+ patch: operations["HablalaApiWeb.Webhooks.WebhookController.update (2)"];
3552
+ trace?: never;
3553
+ };
3554
+ "/v1/organizations/{organization_id}/webhooks/{id}/deliveries": {
3555
+ parameters: {
3556
+ query?: never;
3557
+ header?: never;
3558
+ path?: never;
3559
+ cookie?: never;
3560
+ };
3561
+ /**
3562
+ * Listar deliveries de un endpoint
3563
+ * @description La bitácora de entregas (canónico GitHub): qué eventos se entregaron, cuántos intentos costaron y con qué respondió el receptor. Más recientes primero (máx. 50).
3564
+ */
3565
+ get: operations["HablalaApiWeb.Webhooks.WebhookController.deliveries"];
3566
+ put?: never;
3567
+ post?: never;
3568
+ delete?: never;
3569
+ options?: never;
3570
+ head?: never;
3571
+ patch?: never;
3572
+ trace?: never;
3573
+ };
3574
+ "/v1/organizations/{organization_id}/webhooks/{id}/rotate": {
3575
+ parameters: {
3576
+ query?: never;
3577
+ header?: never;
3578
+ path?: never;
3579
+ cookie?: never;
3580
+ };
3581
+ get?: never;
3582
+ put?: never;
3583
+ /**
3584
+ * Rotar el signing secret
3585
+ * @description Genera un `whsec_…` nuevo para el MISMO endpoint (el historial no cambia). El secret viejo deja de firmar de inmediato: actualiza la copia del receptor. La respuesta incluye el nuevo secret.
3586
+ */
3587
+ post: operations["HablalaApiWeb.Webhooks.WebhookController.rotate"];
3588
+ delete?: never;
3589
+ options?: never;
3590
+ head?: never;
3591
+ patch?: never;
3592
+ trace?: never;
3593
+ };
3594
+ "/v1/organizations/{organization_id}/webhooks/{id}/secret": {
3595
+ parameters: {
3596
+ query?: never;
3597
+ header?: never;
3598
+ path?: never;
3599
+ cookie?: never;
3600
+ };
3601
+ /**
3602
+ * Revelar el signing secret
3603
+ * @description El `whsec_…` del endpoint, para configurarlo en el receptor (modelo Svix `GET .../secret` / Stripe dashboard "Reveal"). Es una llave de firma compartida, no una credencial de autenticación entrante: por eso es recuperable, a diferencia de `sk_`/`mat_`.
3604
+ */
3605
+ get: operations["HablalaApiWeb.Webhooks.WebhookController.secret"];
3606
+ put?: never;
3607
+ post?: never;
3608
+ delete?: never;
3609
+ options?: never;
3610
+ head?: never;
3611
+ patch?: never;
3612
+ trace?: never;
3613
+ };
3401
3614
  "/v1/organizations/{organization_id}/workflow-executions": {
3402
3615
  parameters: {
3403
3616
  query?: never;
@@ -4307,6 +4520,119 @@ interface paths {
4307
4520
  patch: operations["HablalaApiWeb.Accounts.UserSettingsController.update_username"];
4308
4521
  trace?: never;
4309
4522
  };
4523
+ "/v1/webhooks": {
4524
+ parameters: {
4525
+ query?: never;
4526
+ header?: never;
4527
+ path?: never;
4528
+ cookie?: never;
4529
+ };
4530
+ /**
4531
+ * Listar webhook endpoints
4532
+ * @description Los webhook endpoints de la organización (solo metadatos; el signing secret se obtiene con `GET .../:id/secret`).
4533
+ */
4534
+ get: operations["HablalaApiWeb.Machine.WebhookController.index"];
4535
+ put?: never;
4536
+ /**
4537
+ * Crear un webhook endpoint
4538
+ * @description Suscribe una URL a eventos del event store. La plataforma genera el **signing secret** (`whsec_…`) y lo incluye en esta respuesta (`secret`); con él el receptor verifica la firma de cada entrega (spec Standard Webhooks). También puede recuperarse después con `GET .../:id/secret`.
4539
+ */
4540
+ post: operations["HablalaApiWeb.Machine.WebhookController.create"];
4541
+ delete?: never;
4542
+ options?: never;
4543
+ head?: never;
4544
+ patch?: never;
4545
+ trace?: never;
4546
+ };
4547
+ "/v1/webhooks/{id}": {
4548
+ parameters: {
4549
+ query?: never;
4550
+ header?: never;
4551
+ path?: never;
4552
+ cookie?: never;
4553
+ };
4554
+ /** Ver un webhook endpoint */
4555
+ get: operations["HablalaApiWeb.Machine.WebhookController.show"];
4556
+ /**
4557
+ * Actualizar un webhook endpoint
4558
+ * @description Cambia `url`/`enabledEvents`/`status`. Reactivar (`status: "enabled"`) un endpoint auto-deshabilitado limpia el motivo del disable. El slug y el secret no se tocan aquí.
4559
+ */
4560
+ put: operations["HablalaApiWeb.Machine.WebhookController.update"];
4561
+ post?: never;
4562
+ /**
4563
+ * Borrar un webhook endpoint
4564
+ * @description Elimina el endpoint y su historial de deliveries. Deja de recibir entregas.
4565
+ */
4566
+ delete: operations["HablalaApiWeb.Machine.WebhookController.delete"];
4567
+ options?: never;
4568
+ head?: never;
4569
+ /**
4570
+ * Actualizar un webhook endpoint
4571
+ * @description Cambia `url`/`enabledEvents`/`status`. Reactivar (`status: "enabled"`) un endpoint auto-deshabilitado limpia el motivo del disable. El slug y el secret no se tocan aquí.
4572
+ */
4573
+ patch: operations["HablalaApiWeb.Machine.WebhookController.update (2)"];
4574
+ trace?: never;
4575
+ };
4576
+ "/v1/webhooks/{id}/deliveries": {
4577
+ parameters: {
4578
+ query?: never;
4579
+ header?: never;
4580
+ path?: never;
4581
+ cookie?: never;
4582
+ };
4583
+ /**
4584
+ * Listar deliveries de un endpoint
4585
+ * @description La bitácora de entregas (canónico GitHub): qué eventos se entregaron, cuántos intentos costaron y con qué respondió el receptor. Más recientes primero (máx. 50).
4586
+ */
4587
+ get: operations["HablalaApiWeb.Machine.WebhookController.deliveries"];
4588
+ put?: never;
4589
+ post?: never;
4590
+ delete?: never;
4591
+ options?: never;
4592
+ head?: never;
4593
+ patch?: never;
4594
+ trace?: never;
4595
+ };
4596
+ "/v1/webhooks/{id}/rotate": {
4597
+ parameters: {
4598
+ query?: never;
4599
+ header?: never;
4600
+ path?: never;
4601
+ cookie?: never;
4602
+ };
4603
+ get?: never;
4604
+ put?: never;
4605
+ /**
4606
+ * Rotar el signing secret
4607
+ * @description Genera un `whsec_…` nuevo para el MISMO endpoint (el historial no cambia). El secret viejo deja de firmar de inmediato: actualiza la copia del receptor. La respuesta incluye el nuevo secret.
4608
+ */
4609
+ post: operations["HablalaApiWeb.Machine.WebhookController.rotate"];
4610
+ delete?: never;
4611
+ options?: never;
4612
+ head?: never;
4613
+ patch?: never;
4614
+ trace?: never;
4615
+ };
4616
+ "/v1/webhooks/{id}/secret": {
4617
+ parameters: {
4618
+ query?: never;
4619
+ header?: never;
4620
+ path?: never;
4621
+ cookie?: never;
4622
+ };
4623
+ /**
4624
+ * Revelar el signing secret
4625
+ * @description El `whsec_…` del endpoint, para configurarlo en el receptor (modelo Svix `GET .../secret` / Stripe dashboard "Reveal"). Es una llave de firma compartida, no una credencial de autenticación entrante: por eso es recuperable, a diferencia de `sk_`/`mat_`.
4626
+ */
4627
+ get: operations["HablalaApiWeb.Machine.WebhookController.secret"];
4628
+ put?: never;
4629
+ post?: never;
4630
+ delete?: never;
4631
+ options?: never;
4632
+ head?: never;
4633
+ patch?: never;
4634
+ trace?: never;
4635
+ };
4310
4636
  "/v1/whoami": {
4311
4637
  parameters: {
4312
4638
  query?: never;
@@ -4676,6 +5002,14 @@ interface components {
4676
5002
  };
4677
5003
  /** @description ETag del estado declarable (optimistic locking). El `export`/`pull` lo emite; el CLI lo guarda y lo reenvía en el header `If-Match` al aplicar. Si la cuenta cambió desde el `pull` (UI, MCP, otro apply), el `apply` devuelve 412 en vez de pisar lo no visto. Read-only: en el cuerpo del PUT se ignora (la precondición viaja por el header). */
4678
5004
  readonly version?: string;
5005
+ webhooks?: components["schemas"]["ManifestWebhookEndpoint"][] | {
5006
+ items: components["schemas"]["ManifestWebhookEndpoint"][];
5007
+ /**
5008
+ * @description `authoritative` (default): lo no declarado se archiva/borra. `additive`: solo crea/actualiza lo declarado, sin expulsar lo demás (least astonishment).
5009
+ * @enum {string}
5010
+ */
5011
+ mode?: "authoritative" | "additive";
5012
+ };
4679
5013
  workflows?: components["schemas"]["ManifestWorkflow"][] | {
4680
5014
  items: components["schemas"]["ManifestWorkflow"][];
4681
5015
  /**
@@ -5294,13 +5628,112 @@ interface components {
5294
5628
  items: components["schemas"]["CheckoutItem"][];
5295
5629
  };
5296
5630
  /**
5297
- * ContactContent
5298
- * @description Payload de un mensaje `contact` (compartir contacto, estilo WhatsApp). El cliente pinta una tarjeta con acción 'Agregar a contactos'. `vcard` es el vCard crudo opcional (fuente de verdad para importar); `name`/`phones` son la vista renderizable.
5631
+ * ClaimPreviewResponse
5632
+ * @description Preview de un claim token: a qué organización lleva, antes de confirmar. Siempre `200`; `status` distingue un token válido de uno inválido/vencido/ya reclamado.
5299
5633
  */
5300
- ContactContent: {
5301
- /** @description Nombre a mostrar del contacto. */
5302
- name: string;
5303
- /** @description Teléfonos del contacto. */
5634
+ ClaimPreviewResponse: {
5635
+ data: {
5636
+ /** @description Presente solo si `status` = valid. */
5637
+ organization?: {
5638
+ avatarUrl?: string | null;
5639
+ name: string;
5640
+ } | null;
5641
+ /** @enum {string} */
5642
+ status: "valid" | "invalid";
5643
+ };
5644
+ };
5645
+ /** ClaimRequest */
5646
+ ClaimRequest: {
5647
+ /** @description El claim token (`clm_…`) del `claimUrl`. */
5648
+ token: string;
5649
+ };
5650
+ /**
5651
+ * ClaimResponse
5652
+ * @description La transferencia consumada: el usuario autenticado es ahora **owner** y los secretos del agente se ROTARON — este par de API keys nuevo se revela UNA sola vez.
5653
+ */
5654
+ ClaimResponse: {
5655
+ data: {
5656
+ /** @description El par NUEVO emitido al reclamar (el del agente quedó revocado). */
5657
+ apiKeys: {
5658
+ publishableKey: string;
5659
+ secretKey: string;
5660
+ };
5661
+ organization: components["schemas"]["ClaimableOrganization"];
5662
+ };
5663
+ };
5664
+ /**
5665
+ * ClaimableOrganization
5666
+ * @description Una organización con su ciclo de vida de propiedad: `unclaimed` (provisionada por un agente, sin dueño; caduca en `expiresAt`) → `claimed` (reclamada por un humano).
5667
+ */
5668
+ ClaimableOrganization: {
5669
+ /**
5670
+ * Format: date-time
5671
+ * @description TTL del RECURSO: cuándo caduca la org si nadie la reclama (`null` = no caduca).
5672
+ */
5673
+ expiresAt?: string | null;
5674
+ /** @description Id público (`org_…`). */
5675
+ id: string;
5676
+ /** Format: date-time */
5677
+ insertedAt?: string;
5678
+ name: string;
5679
+ slug: string;
5680
+ /**
5681
+ * @description Estado de propiedad de la org.
5682
+ * @enum {string}
5683
+ */
5684
+ status: "active" | "unclaimed" | "claimed";
5685
+ /** Format: date-time */
5686
+ updatedAt?: string;
5687
+ };
5688
+ /**
5689
+ * ClaimableOrganizationCreateResponse
5690
+ * @description La claimable organization recién provisionada, con TODAS sus credenciales en claro — la ÚNICA vez que se pueden leer (patrón Stripe: las keys no vuelven en lecturas posteriores). Guárdalas de inmediato (p. ej. en el `.env`).
5691
+ */
5692
+ ClaimableOrganizationCreateResponse: {
5693
+ data: {
5694
+ /** @description Machine access token (`mat_…`, preset `account_as_code`): la autoridad del agente sobre la org hasta el claim (se ROTA al reclamarse). */
5695
+ accessToken: string;
5696
+ /** @description El par de API keys del canal público. */
5697
+ apiKeys: {
5698
+ /** @description `pk_…` (browser-safe). */
5699
+ publishableKey: string;
5700
+ /** @description `sk_…` (solo servidor). */
5701
+ secretKey: string;
5702
+ };
5703
+ /**
5704
+ * Format: date-time
5705
+ * @description TTL del claim LINK (reloj distinto del `expiresAt` del recurso).
5706
+ */
5707
+ claimExpiresAt: string;
5708
+ /** @description El link (panel) con el que un humano reclama la org. Un solo uso; caduca en `claimExpiresAt` y se renueva con `POST /v1/organization/refresh-claim-url`. */
5709
+ claimUrl: string;
5710
+ organization: components["schemas"]["ClaimableOrganization"];
5711
+ };
5712
+ };
5713
+ /**
5714
+ * ClaimableOrganizationRequest
5715
+ * @description Provisión de una **claimable organization** (el signup invertido): un agente crea la org SIN cuenta humana y un humano la reclama después abriendo el `claimUrl`.
5716
+ */
5717
+ ClaimableOrganizationRequest: {
5718
+ /** @description Nombre visible de la organización. */
5719
+ name: string;
5720
+ /** @description Datos para precargar el claim (patrón Stripe `prefill`). Se guardan cifrados. */
5721
+ prefill?: {
5722
+ /**
5723
+ * Format: email
5724
+ * @description Email del humano que reclamará la org.
5725
+ */
5726
+ email?: string;
5727
+ } | null;
5728
+ };
5729
+ /**
5730
+ * ContactContent
5731
+ * @description Payload de un mensaje `contact` (compartir contacto, estilo WhatsApp). El cliente pinta una tarjeta con acción 'Agregar a contactos'. `vcard` es el vCard crudo opcional (fuente de verdad para importar); `name`/`phones` son la vista renderizable.
5732
+ */
5733
+ ContactContent: {
5734
+ /** @description Nombre a mostrar del contacto. */
5735
+ name: string;
5736
+ /** @description Teléfonos del contacto. */
5304
5737
  phones?: components["schemas"]["ContactPhone"][] | null;
5305
5738
  /** @description vCard (RFC 6350) crudo, para importar el contacto tal cual (opcional). */
5306
5739
  vcard?: string | null;
@@ -6289,6 +6722,20 @@ interface components {
6289
6722
  LoginRequest: {
6290
6723
  user: components["schemas"]["LoginCredentials"];
6291
6724
  };
6725
+ /**
6726
+ * MachineOrganizationResponse
6727
+ * @description La organización del token de máquina, con su estado de propiedad. Es el endpoint de polling del agente tras provisionar una claimable org: cuando el humano reclama, los tokens del agente se rotan, así que el `401` posterior significa "reclamada (o vencida)".
6728
+ */
6729
+ MachineOrganizationResponse: {
6730
+ data: {
6731
+ /**
6732
+ * Format: date-time
6733
+ * @description Cuándo caduca el claim link vigente (`null` si no hay).
6734
+ */
6735
+ claimExpiresAt?: string | null;
6736
+ organization: components["schemas"]["ClaimableOrganization"];
6737
+ };
6738
+ };
6292
6739
  /**
6293
6740
  * ManifestAgent
6294
6741
  * @description Un agente de IA declarado, identificado por `handle`. Archivar (no declararlo) lo revoca. `ownerUserId` (id público `user_…`) es obligatorio al crear con un access token de máquina; con un usuario, el creador es el dueño por defecto.
@@ -6557,6 +7004,23 @@ interface components {
6557
7004
  */
6558
7005
  protocol: "saml" | "oidc";
6559
7006
  };
7007
+ /**
7008
+ * ManifestWebhookEndpoint
7009
+ * @description Un webhook endpoint declarado (webhooks salientes): la URL de un sistema externo suscrita a eventos del event store, identificada por `slug`. Estructura AUTORITATIVA: un endpoint no declarado se BORRA (deja de recibir entregas). El **signing secret (`whsec_…`) NO se declara** — un secreto no vive en YAML versionado: lo genera la plataforma al crear el endpoint y se recupera con `GET /v1/webhooks/:id/secret`.
7010
+ */
7011
+ ManifestWebhookEndpoint: {
7012
+ /** @description Event types a suscribir (al menos uno): `record.created`, `record.updated`, `record.deleted`, `record.restored`, `edge.created`, `edge.deleted`. */
7013
+ enabledEvents: string[];
7014
+ /** @description Identidad estable, única por organización (match key). */
7015
+ slug: string;
7016
+ /**
7017
+ * @description Omitido = `enabled`. `disabled` pausa las entregas sin borrar el endpoint.
7018
+ * @enum {string}
7019
+ */
7020
+ status?: "enabled" | "disabled";
7021
+ /** @description URL https del receptor del POST firmado (http solo se admite hacia localhost). */
7022
+ url: string;
7023
+ };
6560
7024
  /**
6561
7025
  * ManifestWorkflow
6562
7026
  * @description Una definición de workflow declarada: la máquina de estados como dato (trigger + states). El grafo `states` se valida ESTRUCTURALMENTE en el `plan` (como un linter de state machine): cada `activity` debe pertenecer al catálogo declarable y su `config` solo acepta claves conocidas; toda transición `on` debe apuntar a un estado existente (MISSING_TRANSITION_TARGET); no puede haber estados inalcanzables desde `initialState`; y debe existir al menos un estado terminal (`type: final`, MISSING_END_STATE). Esos errores bloquean el apply — no llegan a runtime. Descubre el espacio declarable completo en `GET /v1/account-config/capabilities`.
@@ -7059,6 +7523,11 @@ interface components {
7059
7523
  myRole?: string | null;
7060
7524
  name: string;
7061
7525
  slug: string;
7526
+ /**
7527
+ * @description Propiedad de la org: `active` (creada por un humano), `unclaimed` (provisionada por un agente, sin dueño), `claimed` (reclamada).
7528
+ * @enum {string}
7529
+ */
7530
+ status?: "active" | "unclaimed" | "claimed";
7062
7531
  /** @description Identificador fiscal (RFC/EIN/VAT). */
7063
7532
  taxId?: string | null;
7064
7533
  /** Format: date-time */
@@ -7100,6 +7569,11 @@ interface components {
7100
7569
  insertedAt?: string;
7101
7570
  name: string;
7102
7571
  slug: string;
7572
+ /**
7573
+ * @description Propiedad de la org: `active` (creada por un humano), `unclaimed` (provisionada por un agente, sin dueño), `claimed` (reclamada).
7574
+ * @enum {string}
7575
+ */
7576
+ status?: "active" | "unclaimed" | "claimed";
7103
7577
  /** Format: date-time */
7104
7578
  updatedAt?: string;
7105
7579
  /**
@@ -7597,6 +8071,17 @@ interface components {
7597
8071
  /** @description Destino del `PUT` del blob (URL prefirmada, expira). */
7598
8072
  uploadUrl: string;
7599
8073
  };
8074
+ /**
8075
+ * RefreshClaimUrlResponse
8076
+ * @description El claim link renovado (el anterior deja de canjear al instante).
8077
+ */
8078
+ RefreshClaimUrlResponse: {
8079
+ data: {
8080
+ /** Format: date-time */
8081
+ claimExpiresAt: string;
8082
+ claimUrl: string;
8083
+ };
8084
+ };
7600
8085
  /** RegisterCredentials */
7601
8086
  RegisterCredentials: {
7602
8087
  /** Format: email */
@@ -8050,6 +8535,117 @@ interface components {
8050
8535
  taxId: string;
8051
8536
  };
8052
8537
  };
8538
+ /** WebhookDeliveriesResponse */
8539
+ WebhookDeliveriesResponse: {
8540
+ data: components["schemas"]["WebhookDelivery"][];
8541
+ };
8542
+ /**
8543
+ * WebhookDelivery
8544
+ * @description Una **delivery**: un evento entregado (o en camino) a un webhook endpoint, con su bitácora de intentos. La entrega es at-least-once: el receptor deduplica por el header `webhook-id` (= `eventId`, estable entre reintentos).
8545
+ */
8546
+ WebhookDelivery: {
8547
+ attemptCount: number;
8548
+ /** Format: date-time */
8549
+ deliveredAt?: string | null;
8550
+ /** @description Detalle del último fallo. */
8551
+ error?: string | null;
8552
+ /** @description El evento entregado (`evt_…`). */
8553
+ eventId: string;
8554
+ /** @description P. ej. `record.created`. */
8555
+ eventType: string;
8556
+ /** @description Id de la delivery (`whd_…`). */
8557
+ id: string;
8558
+ /** Format: date-time */
8559
+ insertedAt?: string;
8560
+ /** @description HTTP status del último intento (si el receptor respondió). */
8561
+ responseStatus?: number | null;
8562
+ /**
8563
+ * @description `pending` (encolada/reintentando), `succeeded` (el receptor respondió 2xx), `failed` (agotó los reintentos).
8564
+ * @enum {string}
8565
+ */
8566
+ status: "pending" | "succeeded" | "failed";
8567
+ };
8568
+ /**
8569
+ * WebhookEndpoint
8570
+ * @description Un **webhook endpoint**: la URL de un sistema externo suscrita a eventos del event store. Cuando ocurre un evento de `enabledEvents`, la plataforma le hace un POST firmado (spec Standard Webhooks: headers `webhook-id`/`webhook-timestamp`/`webhook-signature`). El signing secret NO se incluye aquí — se revela al crear, en `GET .../secret` y al rotar.
8571
+ */
8572
+ WebhookEndpoint: {
8573
+ /** Format: date-time */
8574
+ disabledAt?: string | null;
8575
+ /** @description `delivery_failures` (auto-disable, modelo Stripe) o `manual`. */
8576
+ disabledReason?: string | null;
8577
+ /** @description Event types suscritos: `record.created`, `record.updated`, `record.deleted`, `record.restored`, `edge.created`, `edge.deleted`. */
8578
+ enabledEvents: string[];
8579
+ /** @description Id del endpoint (`we_…`). */
8580
+ id: string;
8581
+ /** Format: date-time */
8582
+ insertedAt?: string;
8583
+ /** Format: date-time */
8584
+ lastFailureAt?: string | null;
8585
+ /** Format: date-time */
8586
+ lastSuccessAt?: string | null;
8587
+ /** @description Primeros caracteres del signing secret (no secretos), p. ej. `whsec_A1B2`. */
8588
+ prefix?: string;
8589
+ /** @description Identificador declarable, único por organización. */
8590
+ slug: string;
8591
+ /**
8592
+ * @description `enabled` recibe entregas; `disabled` (manual o auto-disable por fallos) no.
8593
+ * @enum {string}
8594
+ */
8595
+ status: "enabled" | "disabled";
8596
+ /** Format: date-time */
8597
+ updatedAt?: string;
8598
+ /** @description URL https destino del POST firmado. */
8599
+ url: string;
8600
+ };
8601
+ /**
8602
+ * WebhookEndpointRequest
8603
+ * @description Datos de un webhook endpoint. El signing secret no se manda: lo genera la plataforma y se devuelve en la respuesta del create (y en `GET .../secret`).
8604
+ */
8605
+ WebhookEndpointRequest: {
8606
+ /** @description Event types a suscribir (al menos uno): `record.created`, `record.updated`, `record.deleted`, `record.restored`, `edge.created`, `edge.deleted`. */
8607
+ enabledEvents: string[];
8608
+ /** @description Identificador único por organización (minúsculas, dígitos, `-`/`_`), p. ej. `erp-sync`. */
8609
+ slug: string;
8610
+ /**
8611
+ * @description Omitir = `enabled`. `disabled` pausa las entregas sin borrar el endpoint.
8612
+ * @enum {string}
8613
+ */
8614
+ status?: "enabled" | "disabled";
8615
+ /** @description URL https del receptor (http solo se admite hacia localhost, para desarrollo). */
8616
+ url: string;
8617
+ };
8618
+ /** WebhookEndpointResponse */
8619
+ WebhookEndpointResponse: {
8620
+ data: components["schemas"]["WebhookEndpoint"];
8621
+ };
8622
+ /**
8623
+ * WebhookEndpointWithSecret
8624
+ * @description El endpoint con su **signing secret** en claro (`whsec_…`): la respuesta del create, del reveal (`GET .../secret`) y del rotate. Con él el receptor verifica la firma de cada entrega (librerías de Standard Webhooks).
8625
+ */
8626
+ WebhookEndpointWithSecret: {
8627
+ enabledEvents: string[];
8628
+ id: string;
8629
+ /** Format: date-time */
8630
+ insertedAt?: string;
8631
+ prefix?: string;
8632
+ /** @description El signing secret en claro (`whsec_…`). Guárdalo en el receptor. */
8633
+ secret: string;
8634
+ slug: string;
8635
+ /** @enum {string} */
8636
+ status: "enabled" | "disabled";
8637
+ /** Format: date-time */
8638
+ updatedAt?: string;
8639
+ url: string;
8640
+ };
8641
+ /** WebhookEndpointWithSecretResponse */
8642
+ WebhookEndpointWithSecretResponse: {
8643
+ data: components["schemas"]["WebhookEndpointWithSecret"];
8644
+ };
8645
+ /** WebhookEndpointsResponse */
8646
+ WebhookEndpointsResponse: {
8647
+ data: components["schemas"]["WebhookEndpoint"][];
8648
+ };
8053
8649
  /**
8054
8650
  * Whoami
8055
8651
  * @description Identidad de una credencial de máquina: la organización que resuelve del token y sus permisos efectivos. Deja que una herramienta externa infiera la org sin que el desarrollador la configure.
@@ -11147,7 +11743,7 @@ interface operations {
11147
11743
  };
11148
11744
  };
11149
11745
  };
11150
- "HablalaApiWeb.Orgs.OrganizationController.index": {
11746
+ "HablalaApiWeb.Machine.OrganizationController.show": {
11151
11747
  parameters: {
11152
11748
  query?: never;
11153
11749
  header?: never;
@@ -11156,42 +11752,17 @@ interface operations {
11156
11752
  };
11157
11753
  requestBody?: never;
11158
11754
  responses: {
11159
- /** @description Organizaciones */
11755
+ /** @description La organización del token */
11160
11756
  200: {
11161
11757
  headers: {
11162
11758
  [name: string]: unknown;
11163
11759
  };
11164
11760
  content: {
11165
- "application/json": components["schemas"]["OrganizationsResponse"];
11166
- };
11167
- };
11168
- };
11169
- };
11170
- "HablalaApiWeb.Orgs.OrganizationController.create": {
11171
- parameters: {
11172
- query?: never;
11173
- header?: never;
11174
- path?: never;
11175
- cookie?: never;
11176
- };
11177
- /** @description Datos de la organización */
11178
- requestBody?: {
11179
- content: {
11180
- "application/json": components["schemas"]["OrganizationRequest"];
11181
- };
11182
- };
11183
- responses: {
11184
- /** @description Organización creada */
11185
- 201: {
11186
- headers: {
11187
- [name: string]: unknown;
11188
- };
11189
- content: {
11190
- "application/json": components["schemas"]["OrganizationResponse"];
11761
+ "application/json": components["schemas"]["MachineOrganizationResponse"];
11191
11762
  };
11192
11763
  };
11193
- /** @description Error de validación */
11194
- 422: {
11764
+ /** @description Token inválido (o la org fue reclamada/venció) */
11765
+ 401: {
11195
11766
  headers: {
11196
11767
  [name: string]: unknown;
11197
11768
  };
@@ -11201,28 +11772,26 @@ interface operations {
11201
11772
  };
11202
11773
  };
11203
11774
  };
11204
- "HablalaApiWeb.Orgs.OrganizationController.show": {
11775
+ "HablalaApiWeb.Machine.OrganizationController.refresh_claim_url": {
11205
11776
  parameters: {
11206
11777
  query?: never;
11207
11778
  header?: never;
11208
- path: {
11209
- id: string;
11210
- };
11779
+ path?: never;
11211
11780
  cookie?: never;
11212
11781
  };
11213
11782
  requestBody?: never;
11214
11783
  responses: {
11215
- /** @description Organización */
11784
+ /** @description Claim link renovado */
11216
11785
  200: {
11217
11786
  headers: {
11218
11787
  [name: string]: unknown;
11219
11788
  };
11220
11789
  content: {
11221
- "application/json": components["schemas"]["OrganizationResponse"];
11790
+ "application/json": components["schemas"]["RefreshClaimUrlResponse"];
11222
11791
  };
11223
11792
  };
11224
- /** @description No encontrada */
11225
- 404: {
11793
+ /** @description La org ya no es unclaimed */
11794
+ 409: {
11226
11795
  headers: {
11227
11796
  [name: string]: unknown;
11228
11797
  };
@@ -11230,35 +11799,8 @@ interface operations {
11230
11799
  "application/json": components["schemas"]["Error"];
11231
11800
  };
11232
11801
  };
11233
- };
11234
- };
11235
- "HablalaApiWeb.Orgs.OrganizationController.update": {
11236
- parameters: {
11237
- query?: never;
11238
- header?: never;
11239
- path: {
11240
- id: string;
11241
- };
11242
- cookie?: never;
11243
- };
11244
- /** @description Datos de la organización (el slug es inmutable, no se acepta aquí) */
11245
- requestBody?: {
11246
- content: {
11247
- "application/json": components["schemas"]["OrganizationUpdateRequest"];
11248
- };
11249
- };
11250
- responses: {
11251
- /** @description Organización actualizada */
11252
- 200: {
11253
- headers: {
11254
- [name: string]: unknown;
11255
- };
11256
- content: {
11257
- "application/json": components["schemas"]["OrganizationResponse"];
11258
- };
11259
- };
11260
- /** @description Error de validación */
11261
- 422: {
11802
+ /** @description El recurso venció */
11803
+ 410: {
11262
11804
  headers: {
11263
11805
  [name: string]: unknown;
11264
11806
  };
@@ -11268,44 +11810,42 @@ interface operations {
11268
11810
  };
11269
11811
  };
11270
11812
  };
11271
- "HablalaApiWeb.Orgs.OrganizationController.delete": {
11813
+ "HablalaApiWeb.Orgs.OrganizationController.index": {
11272
11814
  parameters: {
11273
11815
  query?: never;
11274
11816
  header?: never;
11275
- path: {
11276
- id: string;
11277
- };
11817
+ path?: never;
11278
11818
  cookie?: never;
11279
11819
  };
11280
11820
  requestBody?: never;
11281
11821
  responses: {
11282
- /** @description Borrada */
11283
- 204: {
11822
+ /** @description Organizaciones */
11823
+ 200: {
11284
11824
  headers: {
11285
11825
  [name: string]: unknown;
11286
11826
  };
11287
- content?: never;
11827
+ content: {
11828
+ "application/json": components["schemas"]["OrganizationsResponse"];
11829
+ };
11288
11830
  };
11289
11831
  };
11290
11832
  };
11291
- "HablalaApiWeb.Orgs.OrganizationController.update (2)": {
11833
+ "HablalaApiWeb.Orgs.OrganizationController.create": {
11292
11834
  parameters: {
11293
11835
  query?: never;
11294
11836
  header?: never;
11295
- path: {
11296
- id: string;
11297
- };
11837
+ path?: never;
11298
11838
  cookie?: never;
11299
11839
  };
11300
- /** @description Datos de la organización (el slug es inmutable, no se acepta aquí) */
11840
+ /** @description Datos de la organización */
11301
11841
  requestBody?: {
11302
11842
  content: {
11303
- "application/json": components["schemas"]["OrganizationUpdateRequest"];
11843
+ "application/json": components["schemas"]["OrganizationRequest"];
11304
11844
  };
11305
11845
  };
11306
11846
  responses: {
11307
- /** @description Organización actualizada */
11308
- 200: {
11847
+ /** @description Organización creada */
11848
+ 201: {
11309
11849
  headers: {
11310
11850
  [name: string]: unknown;
11311
11851
  };
@@ -11324,33 +11864,31 @@ interface operations {
11324
11864
  };
11325
11865
  };
11326
11866
  };
11327
- "HablalaApiWeb.Orgs.OrganizationController.request_verification": {
11867
+ "HablalaApiWeb.Orgs.ClaimableOrganizationController.claim": {
11328
11868
  parameters: {
11329
11869
  query?: never;
11330
11870
  header?: never;
11331
- path: {
11332
- id: string;
11333
- };
11871
+ path?: never;
11334
11872
  cookie?: never;
11335
11873
  };
11336
- /** @description Datos legales del negocio */
11874
+ /** @description El claim token */
11337
11875
  requestBody?: {
11338
11876
  content: {
11339
- "application/json": components["schemas"]["VerificationRequest"];
11877
+ "application/json": components["schemas"]["ClaimRequest"];
11340
11878
  };
11341
11879
  };
11342
11880
  responses: {
11343
- /** @description Organización (pending) */
11881
+ /** @description Transferencia consumada */
11344
11882
  200: {
11345
11883
  headers: {
11346
11884
  [name: string]: unknown;
11347
11885
  };
11348
11886
  content: {
11349
- "application/json": components["schemas"]["OrganizationResponse"];
11887
+ "application/json": components["schemas"]["ClaimResponse"];
11350
11888
  };
11351
11889
  };
11352
- /** @description Sin permiso */
11353
- 403: {
11890
+ /** @description Sin sesión */
11891
+ 401: {
11354
11892
  headers: {
11355
11893
  [name: string]: unknown;
11356
11894
  };
@@ -11358,8 +11896,8 @@ interface operations {
11358
11896
  "application/json": components["schemas"]["Error"];
11359
11897
  };
11360
11898
  };
11361
- /** @description Error de validación o transición */
11362
- 422: {
11899
+ /** @description Token inválido, vencido o ya reclamado */
11900
+ 404: {
11363
11901
  headers: {
11364
11902
  [name: string]: unknown;
11365
11903
  };
@@ -11369,20 +11907,253 @@ interface operations {
11369
11907
  };
11370
11908
  };
11371
11909
  };
11372
- "HablalaApiWeb.Orgs.OrganizationController.approve_verification": {
11910
+ "HablalaApiWeb.Orgs.ClaimableOrganizationController.create": {
11373
11911
  parameters: {
11374
11912
  query?: never;
11375
11913
  header?: never;
11376
- path: {
11377
- id: string;
11378
- };
11914
+ path?: never;
11379
11915
  cookie?: never;
11380
11916
  };
11381
- requestBody?: never;
11382
- responses: {
11383
- /** @description Organización (verified) */
11384
- 200: {
11385
- headers: {
11917
+ /** @description Datos de la organización */
11918
+ requestBody?: {
11919
+ content: {
11920
+ "application/json": components["schemas"]["ClaimableOrganizationRequest"];
11921
+ };
11922
+ };
11923
+ responses: {
11924
+ /** @description Organización provisionada (credenciales reveladas una única vez) */
11925
+ 201: {
11926
+ headers: {
11927
+ [name: string]: unknown;
11928
+ };
11929
+ content: {
11930
+ "application/json": components["schemas"]["ClaimableOrganizationCreateResponse"];
11931
+ };
11932
+ };
11933
+ /** @description Error de validación */
11934
+ 422: {
11935
+ headers: {
11936
+ [name: string]: unknown;
11937
+ };
11938
+ content: {
11939
+ "application/json": components["schemas"]["Error"];
11940
+ };
11941
+ };
11942
+ /** @description Cuota excedida */
11943
+ 429: {
11944
+ headers: {
11945
+ [name: string]: unknown;
11946
+ };
11947
+ content: {
11948
+ "application/json": components["schemas"]["Error"];
11949
+ };
11950
+ };
11951
+ };
11952
+ };
11953
+ "HablalaApiWeb.Orgs.ClaimableOrganizationController.preview": {
11954
+ parameters: {
11955
+ query: {
11956
+ token: string;
11957
+ };
11958
+ header?: never;
11959
+ path?: never;
11960
+ cookie?: never;
11961
+ };
11962
+ requestBody?: never;
11963
+ responses: {
11964
+ /** @description Preview del claim */
11965
+ 200: {
11966
+ headers: {
11967
+ [name: string]: unknown;
11968
+ };
11969
+ content: {
11970
+ "application/json": components["schemas"]["ClaimPreviewResponse"];
11971
+ };
11972
+ };
11973
+ };
11974
+ };
11975
+ "HablalaApiWeb.Orgs.OrganizationController.show": {
11976
+ parameters: {
11977
+ query?: never;
11978
+ header?: never;
11979
+ path: {
11980
+ id: string;
11981
+ };
11982
+ cookie?: never;
11983
+ };
11984
+ requestBody?: never;
11985
+ responses: {
11986
+ /** @description Organización */
11987
+ 200: {
11988
+ headers: {
11989
+ [name: string]: unknown;
11990
+ };
11991
+ content: {
11992
+ "application/json": components["schemas"]["OrganizationResponse"];
11993
+ };
11994
+ };
11995
+ /** @description No encontrada */
11996
+ 404: {
11997
+ headers: {
11998
+ [name: string]: unknown;
11999
+ };
12000
+ content: {
12001
+ "application/json": components["schemas"]["Error"];
12002
+ };
12003
+ };
12004
+ };
12005
+ };
12006
+ "HablalaApiWeb.Orgs.OrganizationController.update": {
12007
+ parameters: {
12008
+ query?: never;
12009
+ header?: never;
12010
+ path: {
12011
+ id: string;
12012
+ };
12013
+ cookie?: never;
12014
+ };
12015
+ /** @description Datos de la organización (el slug es inmutable, no se acepta aquí) */
12016
+ requestBody?: {
12017
+ content: {
12018
+ "application/json": components["schemas"]["OrganizationUpdateRequest"];
12019
+ };
12020
+ };
12021
+ responses: {
12022
+ /** @description Organización actualizada */
12023
+ 200: {
12024
+ headers: {
12025
+ [name: string]: unknown;
12026
+ };
12027
+ content: {
12028
+ "application/json": components["schemas"]["OrganizationResponse"];
12029
+ };
12030
+ };
12031
+ /** @description Error de validación */
12032
+ 422: {
12033
+ headers: {
12034
+ [name: string]: unknown;
12035
+ };
12036
+ content: {
12037
+ "application/json": components["schemas"]["Error"];
12038
+ };
12039
+ };
12040
+ };
12041
+ };
12042
+ "HablalaApiWeb.Orgs.OrganizationController.delete": {
12043
+ parameters: {
12044
+ query?: never;
12045
+ header?: never;
12046
+ path: {
12047
+ id: string;
12048
+ };
12049
+ cookie?: never;
12050
+ };
12051
+ requestBody?: never;
12052
+ responses: {
12053
+ /** @description Borrada */
12054
+ 204: {
12055
+ headers: {
12056
+ [name: string]: unknown;
12057
+ };
12058
+ content?: never;
12059
+ };
12060
+ };
12061
+ };
12062
+ "HablalaApiWeb.Orgs.OrganizationController.update (2)": {
12063
+ parameters: {
12064
+ query?: never;
12065
+ header?: never;
12066
+ path: {
12067
+ id: string;
12068
+ };
12069
+ cookie?: never;
12070
+ };
12071
+ /** @description Datos de la organización (el slug es inmutable, no se acepta aquí) */
12072
+ requestBody?: {
12073
+ content: {
12074
+ "application/json": components["schemas"]["OrganizationUpdateRequest"];
12075
+ };
12076
+ };
12077
+ responses: {
12078
+ /** @description Organización actualizada */
12079
+ 200: {
12080
+ headers: {
12081
+ [name: string]: unknown;
12082
+ };
12083
+ content: {
12084
+ "application/json": components["schemas"]["OrganizationResponse"];
12085
+ };
12086
+ };
12087
+ /** @description Error de validación */
12088
+ 422: {
12089
+ headers: {
12090
+ [name: string]: unknown;
12091
+ };
12092
+ content: {
12093
+ "application/json": components["schemas"]["Error"];
12094
+ };
12095
+ };
12096
+ };
12097
+ };
12098
+ "HablalaApiWeb.Orgs.OrganizationController.request_verification": {
12099
+ parameters: {
12100
+ query?: never;
12101
+ header?: never;
12102
+ path: {
12103
+ id: string;
12104
+ };
12105
+ cookie?: never;
12106
+ };
12107
+ /** @description Datos legales del negocio */
12108
+ requestBody?: {
12109
+ content: {
12110
+ "application/json": components["schemas"]["VerificationRequest"];
12111
+ };
12112
+ };
12113
+ responses: {
12114
+ /** @description Organización (pending) */
12115
+ 200: {
12116
+ headers: {
12117
+ [name: string]: unknown;
12118
+ };
12119
+ content: {
12120
+ "application/json": components["schemas"]["OrganizationResponse"];
12121
+ };
12122
+ };
12123
+ /** @description Sin permiso */
12124
+ 403: {
12125
+ headers: {
12126
+ [name: string]: unknown;
12127
+ };
12128
+ content: {
12129
+ "application/json": components["schemas"]["Error"];
12130
+ };
12131
+ };
12132
+ /** @description Error de validación o transición */
12133
+ 422: {
12134
+ headers: {
12135
+ [name: string]: unknown;
12136
+ };
12137
+ content: {
12138
+ "application/json": components["schemas"]["Error"];
12139
+ };
12140
+ };
12141
+ };
12142
+ };
12143
+ "HablalaApiWeb.Orgs.OrganizationController.approve_verification": {
12144
+ parameters: {
12145
+ query?: never;
12146
+ header?: never;
12147
+ path: {
12148
+ id: string;
12149
+ };
12150
+ cookie?: never;
12151
+ };
12152
+ requestBody?: never;
12153
+ responses: {
12154
+ /** @description Organización (verified) */
12155
+ 200: {
12156
+ headers: {
11386
12157
  [name: string]: unknown;
11387
12158
  };
11388
12159
  content: {
@@ -16992,14 +17763,9 @@ interface operations {
16992
17763
  };
16993
17764
  };
16994
17765
  };
16995
- "HablalaApiWeb.Workflows.WorkflowExecutionController.index": {
17766
+ "HablalaApiWeb.Webhooks.WebhookController.index": {
16996
17767
  parameters: {
16997
- query?: {
16998
- /** @description Filtrar por definición (wfd_…). */
16999
- workflowDefinitionId?: string;
17000
- /** @description Filtrar por estado: running | completed | failed. */
17001
- status?: string;
17002
- };
17768
+ query?: never;
17003
17769
  header?: never;
17004
17770
  path: {
17005
17771
  organization_id: string;
@@ -17008,38 +17774,315 @@ interface operations {
17008
17774
  };
17009
17775
  requestBody?: never;
17010
17776
  responses: {
17011
- /** @description Ejecuciones */
17777
+ /** @description Endpoints */
17012
17778
  200: {
17013
17779
  headers: {
17014
17780
  [name: string]: unknown;
17015
17781
  };
17016
17782
  content: {
17017
- "application/json": components["schemas"]["WorkflowExecutionsResponse"];
17018
- };
17019
- };
17020
- /** @description Sin permiso */
17021
- 403: {
17022
- headers: {
17023
- [name: string]: unknown;
17024
- };
17025
- content: {
17026
- "application/json": components["schemas"]["Error"];
17783
+ "application/json": components["schemas"]["WebhookEndpointsResponse"];
17027
17784
  };
17028
17785
  };
17029
17786
  };
17030
17787
  };
17031
- "HablalaApiWeb.Workflows.WorkflowExecutionController.show": {
17788
+ "HablalaApiWeb.Webhooks.WebhookController.create": {
17032
17789
  parameters: {
17033
17790
  query?: never;
17034
17791
  header?: never;
17035
17792
  path: {
17036
17793
  organization_id: string;
17037
- id: string;
17038
17794
  };
17039
17795
  cookie?: never;
17040
17796
  };
17041
- requestBody?: never;
17042
- responses: {
17797
+ /** @description Datos del endpoint */
17798
+ requestBody?: {
17799
+ content: {
17800
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
17801
+ };
17802
+ };
17803
+ responses: {
17804
+ /** @description Endpoint creado (con secret) */
17805
+ 201: {
17806
+ headers: {
17807
+ [name: string]: unknown;
17808
+ };
17809
+ content: {
17810
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
17811
+ };
17812
+ };
17813
+ /** @description Sin permiso */
17814
+ 403: {
17815
+ headers: {
17816
+ [name: string]: unknown;
17817
+ };
17818
+ content: {
17819
+ "application/json": components["schemas"]["Error"];
17820
+ };
17821
+ };
17822
+ /** @description Error de validación */
17823
+ 422: {
17824
+ headers: {
17825
+ [name: string]: unknown;
17826
+ };
17827
+ content: {
17828
+ "application/json": components["schemas"]["Error"];
17829
+ };
17830
+ };
17831
+ };
17832
+ };
17833
+ "HablalaApiWeb.Webhooks.WebhookController.show": {
17834
+ parameters: {
17835
+ query?: never;
17836
+ header?: never;
17837
+ path: {
17838
+ organization_id: string;
17839
+ id: string;
17840
+ };
17841
+ cookie?: never;
17842
+ };
17843
+ requestBody?: never;
17844
+ responses: {
17845
+ /** @description Endpoint */
17846
+ 200: {
17847
+ headers: {
17848
+ [name: string]: unknown;
17849
+ };
17850
+ content: {
17851
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
17852
+ };
17853
+ };
17854
+ /** @description No existe */
17855
+ 404: {
17856
+ headers: {
17857
+ [name: string]: unknown;
17858
+ };
17859
+ content: {
17860
+ "application/json": components["schemas"]["Error"];
17861
+ };
17862
+ };
17863
+ };
17864
+ };
17865
+ "HablalaApiWeb.Webhooks.WebhookController.update": {
17866
+ parameters: {
17867
+ query?: never;
17868
+ header?: never;
17869
+ path: {
17870
+ organization_id: string;
17871
+ id: string;
17872
+ };
17873
+ cookie?: never;
17874
+ };
17875
+ /** @description Cambios */
17876
+ requestBody?: {
17877
+ content: {
17878
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
17879
+ };
17880
+ };
17881
+ responses: {
17882
+ /** @description Endpoint actualizado */
17883
+ 200: {
17884
+ headers: {
17885
+ [name: string]: unknown;
17886
+ };
17887
+ content: {
17888
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
17889
+ };
17890
+ };
17891
+ /** @description Error de validación */
17892
+ 422: {
17893
+ headers: {
17894
+ [name: string]: unknown;
17895
+ };
17896
+ content: {
17897
+ "application/json": components["schemas"]["Error"];
17898
+ };
17899
+ };
17900
+ };
17901
+ };
17902
+ "HablalaApiWeb.Webhooks.WebhookController.delete": {
17903
+ parameters: {
17904
+ query?: never;
17905
+ header?: never;
17906
+ path: {
17907
+ organization_id: string;
17908
+ id: string;
17909
+ };
17910
+ cookie?: never;
17911
+ };
17912
+ requestBody?: never;
17913
+ responses: {
17914
+ /** @description Borrado */
17915
+ 204: {
17916
+ headers: {
17917
+ [name: string]: unknown;
17918
+ };
17919
+ content?: never;
17920
+ };
17921
+ /** @description Sin permiso */
17922
+ 403: {
17923
+ headers: {
17924
+ [name: string]: unknown;
17925
+ };
17926
+ content: {
17927
+ "application/json": components["schemas"]["Error"];
17928
+ };
17929
+ };
17930
+ };
17931
+ };
17932
+ "HablalaApiWeb.Webhooks.WebhookController.update (2)": {
17933
+ parameters: {
17934
+ query?: never;
17935
+ header?: never;
17936
+ path: {
17937
+ organization_id: string;
17938
+ id: string;
17939
+ };
17940
+ cookie?: never;
17941
+ };
17942
+ /** @description Cambios */
17943
+ requestBody?: {
17944
+ content: {
17945
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
17946
+ };
17947
+ };
17948
+ responses: {
17949
+ /** @description Endpoint actualizado */
17950
+ 200: {
17951
+ headers: {
17952
+ [name: string]: unknown;
17953
+ };
17954
+ content: {
17955
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
17956
+ };
17957
+ };
17958
+ /** @description Error de validación */
17959
+ 422: {
17960
+ headers: {
17961
+ [name: string]: unknown;
17962
+ };
17963
+ content: {
17964
+ "application/json": components["schemas"]["Error"];
17965
+ };
17966
+ };
17967
+ };
17968
+ };
17969
+ "HablalaApiWeb.Webhooks.WebhookController.deliveries": {
17970
+ parameters: {
17971
+ query?: never;
17972
+ header?: never;
17973
+ path: {
17974
+ organization_id: string;
17975
+ id: string;
17976
+ };
17977
+ cookie?: never;
17978
+ };
17979
+ requestBody?: never;
17980
+ responses: {
17981
+ /** @description Deliveries */
17982
+ 200: {
17983
+ headers: {
17984
+ [name: string]: unknown;
17985
+ };
17986
+ content: {
17987
+ "application/json": components["schemas"]["WebhookDeliveriesResponse"];
17988
+ };
17989
+ };
17990
+ };
17991
+ };
17992
+ "HablalaApiWeb.Webhooks.WebhookController.rotate": {
17993
+ parameters: {
17994
+ query?: never;
17995
+ header?: never;
17996
+ path: {
17997
+ organization_id: string;
17998
+ id: string;
17999
+ };
18000
+ cookie?: never;
18001
+ };
18002
+ requestBody?: never;
18003
+ responses: {
18004
+ /** @description Secret rotado */
18005
+ 201: {
18006
+ headers: {
18007
+ [name: string]: unknown;
18008
+ };
18009
+ content: {
18010
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
18011
+ };
18012
+ };
18013
+ };
18014
+ };
18015
+ "HablalaApiWeb.Webhooks.WebhookController.secret": {
18016
+ parameters: {
18017
+ query?: never;
18018
+ header?: never;
18019
+ path: {
18020
+ organization_id: string;
18021
+ id: string;
18022
+ };
18023
+ cookie?: never;
18024
+ };
18025
+ requestBody?: never;
18026
+ responses: {
18027
+ /** @description Endpoint con secret */
18028
+ 200: {
18029
+ headers: {
18030
+ [name: string]: unknown;
18031
+ };
18032
+ content: {
18033
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
18034
+ };
18035
+ };
18036
+ };
18037
+ };
18038
+ "HablalaApiWeb.Workflows.WorkflowExecutionController.index": {
18039
+ parameters: {
18040
+ query?: {
18041
+ /** @description Filtrar por definición (wfd_…). */
18042
+ workflowDefinitionId?: string;
18043
+ /** @description Filtrar por estado: running | completed | failed. */
18044
+ status?: string;
18045
+ };
18046
+ header?: never;
18047
+ path: {
18048
+ organization_id: string;
18049
+ };
18050
+ cookie?: never;
18051
+ };
18052
+ requestBody?: never;
18053
+ responses: {
18054
+ /** @description Ejecuciones */
18055
+ 200: {
18056
+ headers: {
18057
+ [name: string]: unknown;
18058
+ };
18059
+ content: {
18060
+ "application/json": components["schemas"]["WorkflowExecutionsResponse"];
18061
+ };
18062
+ };
18063
+ /** @description Sin permiso */
18064
+ 403: {
18065
+ headers: {
18066
+ [name: string]: unknown;
18067
+ };
18068
+ content: {
18069
+ "application/json": components["schemas"]["Error"];
18070
+ };
18071
+ };
18072
+ };
18073
+ };
18074
+ "HablalaApiWeb.Workflows.WorkflowExecutionController.show": {
18075
+ parameters: {
18076
+ query?: never;
18077
+ header?: never;
18078
+ path: {
18079
+ organization_id: string;
18080
+ id: string;
18081
+ };
18082
+ cookie?: never;
18083
+ };
18084
+ requestBody?: never;
18085
+ responses: {
17043
18086
  /** @description Ejecución */
17044
18087
  200: {
17045
18088
  headers: {
@@ -19304,6 +20347,267 @@ interface operations {
19304
20347
  };
19305
20348
  };
19306
20349
  };
20350
+ "HablalaApiWeb.Machine.WebhookController.index": {
20351
+ parameters: {
20352
+ query?: never;
20353
+ header?: never;
20354
+ path?: never;
20355
+ cookie?: never;
20356
+ };
20357
+ requestBody?: never;
20358
+ responses: {
20359
+ /** @description Endpoints */
20360
+ 200: {
20361
+ headers: {
20362
+ [name: string]: unknown;
20363
+ };
20364
+ content: {
20365
+ "application/json": components["schemas"]["WebhookEndpointsResponse"];
20366
+ };
20367
+ };
20368
+ };
20369
+ };
20370
+ "HablalaApiWeb.Machine.WebhookController.create": {
20371
+ parameters: {
20372
+ query?: never;
20373
+ header?: never;
20374
+ path?: never;
20375
+ cookie?: never;
20376
+ };
20377
+ /** @description Datos del endpoint */
20378
+ requestBody?: {
20379
+ content: {
20380
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
20381
+ };
20382
+ };
20383
+ responses: {
20384
+ /** @description Endpoint creado (con secret) */
20385
+ 201: {
20386
+ headers: {
20387
+ [name: string]: unknown;
20388
+ };
20389
+ content: {
20390
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
20391
+ };
20392
+ };
20393
+ /** @description Sin permiso */
20394
+ 403: {
20395
+ headers: {
20396
+ [name: string]: unknown;
20397
+ };
20398
+ content: {
20399
+ "application/json": components["schemas"]["Error"];
20400
+ };
20401
+ };
20402
+ /** @description Error de validación */
20403
+ 422: {
20404
+ headers: {
20405
+ [name: string]: unknown;
20406
+ };
20407
+ content: {
20408
+ "application/json": components["schemas"]["Error"];
20409
+ };
20410
+ };
20411
+ };
20412
+ };
20413
+ "HablalaApiWeb.Machine.WebhookController.show": {
20414
+ parameters: {
20415
+ query?: never;
20416
+ header?: never;
20417
+ path: {
20418
+ id: string;
20419
+ };
20420
+ cookie?: never;
20421
+ };
20422
+ requestBody?: never;
20423
+ responses: {
20424
+ /** @description Endpoint */
20425
+ 200: {
20426
+ headers: {
20427
+ [name: string]: unknown;
20428
+ };
20429
+ content: {
20430
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
20431
+ };
20432
+ };
20433
+ /** @description No existe */
20434
+ 404: {
20435
+ headers: {
20436
+ [name: string]: unknown;
20437
+ };
20438
+ content: {
20439
+ "application/json": components["schemas"]["Error"];
20440
+ };
20441
+ };
20442
+ };
20443
+ };
20444
+ "HablalaApiWeb.Machine.WebhookController.update": {
20445
+ parameters: {
20446
+ query?: never;
20447
+ header?: never;
20448
+ path: {
20449
+ id: string;
20450
+ };
20451
+ cookie?: never;
20452
+ };
20453
+ /** @description Cambios */
20454
+ requestBody?: {
20455
+ content: {
20456
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
20457
+ };
20458
+ };
20459
+ responses: {
20460
+ /** @description Endpoint actualizado */
20461
+ 200: {
20462
+ headers: {
20463
+ [name: string]: unknown;
20464
+ };
20465
+ content: {
20466
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
20467
+ };
20468
+ };
20469
+ /** @description Error de validación */
20470
+ 422: {
20471
+ headers: {
20472
+ [name: string]: unknown;
20473
+ };
20474
+ content: {
20475
+ "application/json": components["schemas"]["Error"];
20476
+ };
20477
+ };
20478
+ };
20479
+ };
20480
+ "HablalaApiWeb.Machine.WebhookController.delete": {
20481
+ parameters: {
20482
+ query?: never;
20483
+ header?: never;
20484
+ path: {
20485
+ id: string;
20486
+ };
20487
+ cookie?: never;
20488
+ };
20489
+ requestBody?: never;
20490
+ responses: {
20491
+ /** @description Borrado */
20492
+ 204: {
20493
+ headers: {
20494
+ [name: string]: unknown;
20495
+ };
20496
+ content?: never;
20497
+ };
20498
+ /** @description Sin permiso */
20499
+ 403: {
20500
+ headers: {
20501
+ [name: string]: unknown;
20502
+ };
20503
+ content: {
20504
+ "application/json": components["schemas"]["Error"];
20505
+ };
20506
+ };
20507
+ };
20508
+ };
20509
+ "HablalaApiWeb.Machine.WebhookController.update (2)": {
20510
+ parameters: {
20511
+ query?: never;
20512
+ header?: never;
20513
+ path: {
20514
+ id: string;
20515
+ };
20516
+ cookie?: never;
20517
+ };
20518
+ /** @description Cambios */
20519
+ requestBody?: {
20520
+ content: {
20521
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
20522
+ };
20523
+ };
20524
+ responses: {
20525
+ /** @description Endpoint actualizado */
20526
+ 200: {
20527
+ headers: {
20528
+ [name: string]: unknown;
20529
+ };
20530
+ content: {
20531
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
20532
+ };
20533
+ };
20534
+ /** @description Error de validación */
20535
+ 422: {
20536
+ headers: {
20537
+ [name: string]: unknown;
20538
+ };
20539
+ content: {
20540
+ "application/json": components["schemas"]["Error"];
20541
+ };
20542
+ };
20543
+ };
20544
+ };
20545
+ "HablalaApiWeb.Machine.WebhookController.deliveries": {
20546
+ parameters: {
20547
+ query?: never;
20548
+ header?: never;
20549
+ path: {
20550
+ id: string;
20551
+ };
20552
+ cookie?: never;
20553
+ };
20554
+ requestBody?: never;
20555
+ responses: {
20556
+ /** @description Deliveries */
20557
+ 200: {
20558
+ headers: {
20559
+ [name: string]: unknown;
20560
+ };
20561
+ content: {
20562
+ "application/json": components["schemas"]["WebhookDeliveriesResponse"];
20563
+ };
20564
+ };
20565
+ };
20566
+ };
20567
+ "HablalaApiWeb.Machine.WebhookController.rotate": {
20568
+ parameters: {
20569
+ query?: never;
20570
+ header?: never;
20571
+ path: {
20572
+ id: string;
20573
+ };
20574
+ cookie?: never;
20575
+ };
20576
+ requestBody?: never;
20577
+ responses: {
20578
+ /** @description Secret rotado */
20579
+ 201: {
20580
+ headers: {
20581
+ [name: string]: unknown;
20582
+ };
20583
+ content: {
20584
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
20585
+ };
20586
+ };
20587
+ };
20588
+ };
20589
+ "HablalaApiWeb.Machine.WebhookController.secret": {
20590
+ parameters: {
20591
+ query?: never;
20592
+ header?: never;
20593
+ path: {
20594
+ id: string;
20595
+ };
20596
+ cookie?: never;
20597
+ };
20598
+ requestBody?: never;
20599
+ responses: {
20600
+ /** @description Endpoint con secret */
20601
+ 200: {
20602
+ headers: {
20603
+ [name: string]: unknown;
20604
+ };
20605
+ content: {
20606
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
20607
+ };
20608
+ };
20609
+ };
20610
+ };
19307
20611
  "HablalaApiWeb.Machine.WhoamiController.show": {
19308
20612
  parameters: {
19309
20613
  query?: never;