@medalsocial/sdk 1.6.0 → 1.8.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.
@@ -319,32 +319,36 @@ interface paths {
319
319
  patch: operations["updateDeal"];
320
320
  trace?: never;
321
321
  };
322
- "/api/v1/gdpr/export": {
322
+ "/api/v1/bookings": {
323
323
  parameters: {
324
324
  query?: never;
325
325
  header?: never;
326
326
  path?: never;
327
327
  cookie?: never;
328
328
  };
329
- get?: never;
329
+ /** List bookings */
330
+ get: operations["listBookings"];
330
331
  put?: never;
331
- /** Request a GDPR export */
332
- post: operations["requestGdprExport"];
332
+ /**
333
+ * Create a booking or party
334
+ * @description Books every item or none of them. Each created booking carries a `manage_token` returned exactly once — only its hash is stored, and an idempotent replay omits it.
335
+ */
336
+ post: operations["createBooking"];
333
337
  delete?: never;
334
338
  options?: never;
335
339
  head?: never;
336
340
  patch?: never;
337
341
  trace?: never;
338
342
  };
339
- "/api/v1/gdpr/exports": {
343
+ "/api/v1/bookings/services": {
340
344
  parameters: {
341
345
  query?: never;
342
346
  header?: never;
343
347
  path?: never;
344
348
  cookie?: never;
345
349
  };
346
- /** List GDPR exports */
347
- get: operations["listGdprExports"];
350
+ /** List bookable services */
351
+ get: operations["listBookingServices"];
348
352
  put?: never;
349
353
  post?: never;
350
354
  delete?: never;
@@ -353,17 +357,15 @@ interface paths {
353
357
  patch?: never;
354
358
  trace?: never;
355
359
  };
356
- "/api/v1/gdpr/exports/{id}": {
360
+ "/api/v1/bookings/resources": {
357
361
  parameters: {
358
362
  query?: never;
359
363
  header?: never;
360
- path: {
361
- id: components["parameters"]["Id"];
362
- };
364
+ path?: never;
363
365
  cookie?: never;
364
366
  };
365
- /** Get a GDPR export */
366
- get: operations["getGdprExport"];
367
+ /** List bookable resources */
368
+ get: operations["listBookingResources"];
367
369
  put?: never;
368
370
  post?: never;
369
371
  delete?: never;
@@ -372,136 +374,196 @@ interface paths {
372
374
  patch?: never;
373
375
  trace?: never;
374
376
  };
375
- "/api/v1/gdpr/consent": {
377
+ "/api/v1/bookings/availability": {
376
378
  parameters: {
377
379
  query?: never;
378
380
  header?: never;
379
381
  path?: never;
380
382
  cookie?: never;
381
383
  };
382
- get?: never;
384
+ /**
385
+ * List free slots for a service
386
+ * @description Slots reflect opening hours, time off, buffers, and existing bookings at the moment of the call. They are not held.
387
+ */
388
+ get: operations["listBookingAvailability"];
383
389
  put?: never;
384
- /** Record GDPR consent */
385
- post: operations["recordGdprConsent"];
390
+ post?: never;
386
391
  delete?: never;
387
392
  options?: never;
388
393
  head?: never;
389
394
  patch?: never;
390
395
  trace?: never;
391
396
  };
392
- "/api/v1/gdpr/consent/{email}": {
397
+ "/api/v1/bookings/schedule": {
398
+ parameters: {
399
+ query?: never;
400
+ header?: never;
401
+ path?: never;
402
+ cookie?: never;
403
+ };
404
+ /**
405
+ * List the dates a service can be booked on
406
+ * @description The other half of `availability`. Availability returns free slots and nothing else, so a closed day, an evening past closing and a fully booked day all come back as the same empty array. This returns one entry per date the workspace keeps opening hours on; a date ABSENT from the response is closed. `last_start_ts` is the last start this service could occupy on that date (it depends on the service's duration and buffers, not just the closing time) and is `null` for a date with posted hours that is shut outright, such as a public holiday.
407
+ */
408
+ get: operations["listBookingSchedule"];
409
+ put?: never;
410
+ post?: never;
411
+ delete?: never;
412
+ options?: never;
413
+ head?: never;
414
+ patch?: never;
415
+ trace?: never;
416
+ };
417
+ "/api/v1/bookings/{id}": {
393
418
  parameters: {
394
419
  query?: never;
395
420
  header?: never;
396
421
  path: {
397
- email: string;
422
+ id: components["parameters"]["Id"];
398
423
  };
399
424
  cookie?: never;
400
425
  };
401
- /** Get GDPR consent records */
402
- get: operations["getGdprConsent"];
426
+ /** Get a booking */
427
+ get: operations["getBooking"];
403
428
  put?: never;
404
429
  post?: never;
405
430
  delete?: never;
406
431
  options?: never;
407
432
  head?: never;
408
- patch?: never;
433
+ /** Annotate a booking */
434
+ patch: operations["updateBooking"];
409
435
  trace?: never;
410
436
  };
411
- "/api/cookie-consent": {
437
+ "/api/v1/bookings/{id}/cancel": {
412
438
  parameters: {
413
439
  query?: never;
414
440
  header?: never;
415
- path?: never;
441
+ path: {
442
+ id: components["parameters"]["Id"];
443
+ };
416
444
  cookie?: never;
417
445
  };
418
446
  get?: never;
419
447
  put?: never;
420
- /** Record cookie consent */
421
- post: operations["recordCookieConsent"];
448
+ /**
449
+ * Cancel a booking as the business
450
+ * @description Staff semantics — the workspace's cancel window is bypassed and the cancellation is attributed to staff.
451
+ */
452
+ post: operations["cancelBooking"];
422
453
  delete?: never;
423
454
  options?: never;
424
455
  head?: never;
425
456
  patch?: never;
426
457
  trace?: never;
427
458
  };
428
- "/api/v1/me/workspaces": {
459
+ "/api/v1/bookings/{id}/reschedule": {
429
460
  parameters: {
430
461
  query?: never;
431
462
  header?: never;
432
- path?: never;
463
+ path: {
464
+ id: components["parameters"]["Id"];
465
+ };
433
466
  cookie?: never;
434
467
  };
435
- /** List accessible workspaces */
436
- get: operations["listWorkspaces"];
468
+ get?: never;
437
469
  put?: never;
438
- post?: never;
470
+ /**
471
+ * Reschedule a booking as the business
472
+ * @description Staff semantics — the reschedule window is bypassed. The old booking is cancelled and a new one inserted, so the response carries a new booking id and a freshly minted manage token.
473
+ */
474
+ post: operations["rescheduleBooking"];
439
475
  delete?: never;
440
476
  options?: never;
441
477
  head?: never;
442
478
  patch?: never;
443
479
  trace?: never;
444
480
  };
445
- "/api/v1/helpdesk/conversations": {
481
+ "/api/v1/bookings/{id}/no-show": {
446
482
  parameters: {
447
483
  query?: never;
448
484
  header?: never;
449
- path?: never;
485
+ path: {
486
+ id: components["parameters"]["Id"];
487
+ };
450
488
  cookie?: never;
451
489
  };
452
- /** List helpdesk conversations */
453
- get: operations["listHelpdeskConversations"];
490
+ get?: never;
454
491
  put?: never;
455
- post?: never;
492
+ /** Mark a booking as a no-show */
493
+ post: operations["markBookingNoShow"];
456
494
  delete?: never;
457
495
  options?: never;
458
496
  head?: never;
459
497
  patch?: never;
460
498
  trace?: never;
461
499
  };
462
- "/api/v1/helpdesk/conversations/{id}": {
500
+ "/api/v1/bookings/manage/{token}": {
463
501
  parameters: {
464
502
  query?: never;
465
503
  header?: never;
466
504
  path: {
467
- id: components["parameters"]["Id"];
505
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
506
+ token: components["parameters"]["ManageToken"];
468
507
  };
469
508
  cookie?: never;
470
509
  };
471
- /** Get a helpdesk conversation */
472
- get: operations["getHelpdeskConversation"];
510
+ /** Get the customer manage summary for a token */
511
+ get: operations["getManagedBooking"];
473
512
  put?: never;
474
513
  post?: never;
475
514
  delete?: never;
476
515
  options?: never;
477
516
  head?: never;
517
+ patch?: never;
518
+ trace?: never;
519
+ };
520
+ "/api/v1/bookings/manage/{token}/cancel": {
521
+ parameters: {
522
+ query?: never;
523
+ header?: never;
524
+ path: {
525
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
526
+ token: components["parameters"]["ManageToken"];
527
+ };
528
+ cookie?: never;
529
+ };
530
+ get?: never;
531
+ put?: never;
478
532
  /**
479
- * Update a conversation's status or assignee
480
- * @description Set `status` and/or `assignee_user_id` (`null` unassigns). At least one field is required. Capability-scoped tokens must send `Idempotency-Key` and `X-Capability-Confirmation` headers on this route; API keys with legacy scopes may omit them.
533
+ * Cancel on the customer's behalf
534
+ * @description Customer semantics the workspace's cancel window is ENFORCED and the cancellation is attributed to the customer.
481
535
  */
482
- patch: operations["updateHelpdeskConversation"];
536
+ post: operations["cancelManagedBooking"];
537
+ delete?: never;
538
+ options?: never;
539
+ head?: never;
540
+ patch?: never;
483
541
  trace?: never;
484
542
  };
485
- "/api/v1/helpdesk/conversations/{id}/messages": {
543
+ "/api/v1/bookings/manage/{token}/reschedule": {
486
544
  parameters: {
487
545
  query?: never;
488
546
  header?: never;
489
547
  path: {
490
- id: components["parameters"]["Id"];
548
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
549
+ token: components["parameters"]["ManageToken"];
491
550
  };
492
551
  cookie?: never;
493
552
  };
494
- /** List conversation messages */
495
- get: operations["listHelpdeskConversationMessages"];
553
+ get?: never;
496
554
  put?: never;
497
- post?: never;
555
+ /**
556
+ * Reschedule on the customer's behalf
557
+ * @description Customer semantics — the reschedule window is ENFORCED. The response carries a new booking id and a new manage token; the old token stops working.
558
+ */
559
+ post: operations["rescheduleManagedBooking"];
498
560
  delete?: never;
499
561
  options?: never;
500
562
  head?: never;
501
563
  patch?: never;
502
564
  trace?: never;
503
565
  };
504
- "/api/v1/helpdesk/replies": {
566
+ "/api/v1/portal/login/start": {
505
567
  parameters: {
506
568
  query?: never;
507
569
  header?: never;
@@ -511,183 +573,181 @@ interface paths {
511
573
  get?: never;
512
574
  put?: never;
513
575
  /**
514
- * Send an operator reply or internal note
515
- * @description Send an `Idempotency-Key` header so retried requests do not create duplicate messagesit is required for capability-scoped tokens (together with `X-Capability-Confirmation`).
576
+ * E-mail a one-time login code
577
+ * @description Always answers 202 `{ status: "sent" }`, whether or not the address belongs to a contact enumeration-safe by design. Rate-limited per address and per caller (`429 RATE_LIMITED`). Not idempotency-keyed. Errors: `400 VALIDATION_ERROR`, `403 FORBIDDEN` (key lacks `write:portal`), `429 RATE_LIMITED`.
516
578
  */
517
- post: operations["createHelpdeskReply"];
579
+ post: operations["startPortalLogin"];
518
580
  delete?: never;
519
581
  options?: never;
520
582
  head?: never;
521
583
  patch?: never;
522
584
  trace?: never;
523
585
  };
524
- "/api/v1/webhooks": {
586
+ "/api/v1/portal/login/verify": {
525
587
  parameters: {
526
588
  query?: never;
527
589
  header?: never;
528
590
  path?: never;
529
591
  cookie?: never;
530
592
  };
531
- /** List webhook endpoints */
532
- get: operations["listWebhooks"];
593
+ get?: never;
533
594
  put?: never;
534
595
  /**
535
- * Create a webhook endpoint
536
- * @description The response's `data.secret` contains the signing secret EXACTLY ONCEit can never be retrieved again, so store it securely immediately. An idempotent replay (same `Idempotency-Key`) returns the existing endpoint WITHOUT `secret`. Deliveries are HTTP POSTs signed with `X-Medal-Signature: sha256=<base64(HMAC-SHA256("{timestamp}.{rawBody}", secret))>` plus `X-Medal-Timestamp`, `X-Medal-Event`, and `X-Medal-Delivery-Id` / `Idempotency-Key` headers.
596
+ * Exchange the e-mailed code for a session
597
+ * @description A wrong, burned or expired code all answer `401 PORTAL_CODE_INVALID` the three are not distinguished, so the response is not an oracle for which codes exist. The returned `session_token` is a bearer credential for ONE contact: keep it in an HttpOnly cookie on the site's server and never hand it to the browser. Not idempotency-keyed. Errors: `400 VALIDATION_ERROR`, `401 PORTAL_CODE_INVALID`, `403 FORBIDDEN`, `429 RATE_LIMITED`.
537
598
  */
538
- post: operations["createWebhook"];
599
+ post: operations["verifyPortalLogin"];
539
600
  delete?: never;
540
601
  options?: never;
541
602
  head?: never;
542
603
  patch?: never;
543
604
  trace?: never;
544
605
  };
545
- "/api/v1/webhooks/{id}": {
606
+ "/api/v1/portal/logout": {
546
607
  parameters: {
547
608
  query?: never;
548
- header?: never;
549
- path: {
550
- id: components["parameters"]["Id"];
609
+ header: {
610
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
611
+ "X-Portal-Session": components["parameters"]["PortalSession"];
551
612
  };
613
+ path?: never;
552
614
  cookie?: never;
553
615
  };
554
- /** Get a webhook endpoint */
555
- get: operations["getWebhook"];
616
+ get?: never;
556
617
  put?: never;
557
- post?: never;
558
618
  /**
559
- * Delete a webhook endpoint
560
- * @description Permanently deletes the endpoint and stops all outbound deliveries. Capability-scoped tokens must send `Idempotency-Key` and `X-Capability-Confirmation` headers on this route; API keys with legacy scopes may omit them.
619
+ * Revoke the session
620
+ * @description Revoking twice reaches the same state the second call answers `401 PORTAL_SESSION_INVALID`. Not idempotency-keyed. Errors: `401 PORTAL_SESSION_REQUIRED` (header missing), `401 PORTAL_SESSION_INVALID` (unknown, expired or revoked), `403 FORBIDDEN`, `429 RATE_LIMITED`.
561
621
  */
562
- delete: operations["deleteWebhook"];
622
+ post: operations["logoutPortal"];
623
+ delete?: never;
563
624
  options?: never;
564
625
  head?: never;
565
- /**
566
- * Update a webhook endpoint
567
- * @description Only provided fields change. Pass `null` for `channels` or `channel_connection_ids` to clear that filter.
568
- */
569
- patch: operations["updateWebhook"];
626
+ patch?: never;
570
627
  trace?: never;
571
628
  };
572
- "/api/v1/webhooks/{id}/deliveries": {
629
+ "/api/v1/portal/me": {
573
630
  parameters: {
574
631
  query?: never;
575
- header?: never;
576
- path: {
577
- id: components["parameters"]["Id"];
632
+ header: {
633
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
634
+ "X-Portal-Session": components["parameters"]["PortalSession"];
578
635
  };
636
+ path?: never;
579
637
  cookie?: never;
580
638
  };
581
- /** List recent deliveries */
582
- get: operations["listWebhookDeliveries"];
639
+ /**
640
+ * The signed-in contact's profile
641
+ * @description Errors: `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN` (key lacks `read:portal`), `429 RATE_LIMITED`.
642
+ */
643
+ get: operations["getPortalProfile"];
583
644
  put?: never;
584
645
  post?: never;
585
646
  delete?: never;
586
647
  options?: never;
587
648
  head?: never;
588
- patch?: never;
649
+ /**
650
+ * Update the signed-in contact's profile
651
+ * @description Only the supplied fields change. `phone: null` clears the number, `family` replaces the whole list, and `marketing_consent` records a `marketing_email` consent decision with source `portal`. Answers the profile as it is after the change. Errors: `400 VALIDATION_ERROR`, `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN` (key lacks `write:portal`), `429 RATE_LIMITED`.
652
+ */
653
+ patch: operations["updatePortalProfile"];
589
654
  trace?: never;
590
655
  };
591
- "/api/v1/webhooks/{id}/test": {
656
+ "/api/v1/portal/me/bookings": {
592
657
  parameters: {
593
658
  query?: never;
594
- header?: never;
595
- path: {
596
- id: components["parameters"]["Id"];
659
+ header: {
660
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
661
+ "X-Portal-Session": components["parameters"]["PortalSession"];
597
662
  };
663
+ path?: never;
598
664
  cookie?: never;
599
665
  };
600
- get?: never;
601
- put?: never;
602
666
  /**
603
- * Queue a test delivery
604
- * @description Queues a signed `test.ping` delivery to the endpoint.
667
+ * The signed-in contact's bookings
668
+ * @description Split into `upcoming` and `past`. An upcoming booking still inside the workspace's policy windows carries `manage_token` and `can_manage: true`; the token opens the site's manage page. Errors: `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN`, `429 RATE_LIMITED`.
605
669
  */
606
- post: operations["testWebhook"];
670
+ get: operations["listPortalBookings"];
671
+ put?: never;
672
+ post?: never;
607
673
  delete?: never;
608
674
  options?: never;
609
675
  head?: never;
610
676
  patch?: never;
611
677
  trace?: never;
612
678
  };
613
- "/api/v1/capability-confirmations": {
679
+ "/api/v1/portal/me/export": {
614
680
  parameters: {
615
681
  query?: never;
616
- header?: never;
682
+ header: {
683
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
684
+ "X-Portal-Session": components["parameters"]["PortalSession"];
685
+ };
617
686
  path?: never;
618
687
  cookie?: never;
619
688
  };
620
689
  get?: never;
621
690
  put?: never;
622
691
  /**
623
- * Issue a capability confirmation token
624
- * @description Mints a short-lived `X-Capability-Confirmation` token for one pending write. Confirmable write routes require BOTH `Idempotency-Key` and `X-Capability-Confirmation` when the credential holds the capability scope directly; API keys with legacy scopes are exempt. The token is bound to the workspace, auth subject, method, path, required scopes and idempotency key, and expires within 15 minutes. `user_approved: true` asserts that a human on the caller's side approved this exact action.
692
+ * Export everything held about the signed-in contact
693
+ * @description A synchronous GDPR Art. 15 export of the contact's profile, family, consents and bookings, as one JSON document. Read-only, so not idempotency-keyed. Errors: `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN`, `429 RATE_LIMITED`.
625
694
  */
626
- post: operations["issueCapabilityConfirmation"];
695
+ post: operations["exportPortalData"];
627
696
  delete?: never;
628
697
  options?: never;
629
698
  head?: never;
630
699
  patch?: never;
631
700
  trace?: never;
632
701
  };
633
- "/api/v1/channels/connect-links": {
702
+ "/api/v1/portal/me/delete": {
634
703
  parameters: {
635
704
  query?: never;
636
- header?: never;
705
+ header: {
706
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
707
+ "X-Portal-Session": components["parameters"]["PortalSession"];
708
+ };
637
709
  path?: never;
638
710
  cookie?: never;
639
711
  };
640
- /**
641
- * List connect links
642
- * @description Link tokens are never returned. Newest first, cursor-paginated. The `channel_type` / `status` filters are applied within each page, so a page may hold fewer than `limit` items while `pagination.has_more` is still true — page off `has_more`, not the item count.
643
- */
644
- get: operations["listChannelConnectLinks"];
712
+ get?: never;
645
713
  put?: never;
646
714
  /**
647
- * Mint a hosted connect link
648
- * @description Mints a single-use hosted connect link that lets an external person (no Medal account required) attach a channel account (e.g. `telegram_inbox`) to the workspace's helpdesk. The response's `data.url` contains the one-time link token EXACTLY ONCE an idempotent replay (same `Idempotency-Key`) returns the link WITHOUT `url`. Requires the `channel.connect.manage` scope; OAuth callers additionally need the workspace `admin` role.
715
+ * Erase the signed-in contact
716
+ * @description GDPR Art. 17 erasure. The session is revoked as part of the deletion, so a retry answers `401 PORTAL_SESSION_INVALID` rather than deleting anything else. Not idempotency-keyed. Errors: `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN` (key lacks `write:portal`), `429 RATE_LIMITED`.
649
717
  */
650
- post: operations["createChannelConnectLink"];
718
+ post: operations["deletePortalAccount"];
651
719
  delete?: never;
652
720
  options?: never;
653
721
  head?: never;
654
722
  patch?: never;
655
723
  trace?: never;
656
724
  };
657
- "/api/v1/channels/connect-links/{id}": {
725
+ "/api/v1/gdpr/export": {
658
726
  parameters: {
659
727
  query?: never;
660
728
  header?: never;
661
- path: {
662
- id: components["parameters"]["Id"];
663
- };
729
+ path?: never;
664
730
  cookie?: never;
665
731
  };
666
732
  get?: never;
667
733
  put?: never;
668
- post?: never;
669
- /**
670
- * Revoke a connect link
671
- * @description Revokes a pending connect link so it can no longer be consumed. OAuth callers need the workspace `admin` role.
672
- */
673
- delete: operations["revokeChannelConnectLink"];
734
+ /** Request a GDPR export */
735
+ post: operations["requestGdprExport"];
736
+ delete?: never;
674
737
  options?: never;
675
738
  head?: never;
676
739
  patch?: never;
677
740
  trace?: never;
678
741
  };
679
- "/api/v1/channels/connections": {
742
+ "/api/v1/gdpr/exports": {
680
743
  parameters: {
681
744
  query?: never;
682
745
  header?: never;
683
746
  path?: never;
684
747
  cookie?: never;
685
748
  };
686
- /**
687
- * List channel connections
688
- * @description The workspace's channel connections in a generic, channel-agnostic shape. Newest first, cursor-paginated. Rows that are not projectable as connections are dropped within the page, so a page may hold fewer than `limit` items while `pagination.has_more` is still true — page off `has_more`, not the item count.
689
- */
690
- get: operations["listChannelConnections"];
749
+ /** List GDPR exports */
750
+ get: operations["listGdprExports"];
691
751
  put?: never;
692
752
  post?: never;
693
753
  delete?: never;
@@ -696,7 +756,7 @@ interface paths {
696
756
  patch?: never;
697
757
  trace?: never;
698
758
  };
699
- "/api/v1/channels/connections/{id}": {
759
+ "/api/v1/gdpr/exports/{id}": {
700
760
  parameters: {
701
761
  query?: never;
702
762
  header?: never;
@@ -705,20 +765,17 @@ interface paths {
705
765
  };
706
766
  cookie?: never;
707
767
  };
708
- get?: never;
768
+ /** Get a GDPR export */
769
+ get: operations["getGdprExport"];
709
770
  put?: never;
710
771
  post?: never;
711
- /**
712
- * Disconnect a channel connection
713
- * @description Disconnects a connected channel account (best-effort platform logout, then local revoke). Emits a `helpdesk.channel_disconnected` webhook event with `reason: "api_disconnect"` if the account was previously connected. OAuth callers need the workspace `admin` role.
714
- */
715
- delete: operations["disconnectChannelConnection"];
772
+ delete?: never;
716
773
  options?: never;
717
774
  head?: never;
718
775
  patch?: never;
719
776
  trace?: never;
720
777
  };
721
- "/api/v1/scan": {
778
+ "/api/v1/gdpr/consent": {
722
779
  parameters: {
723
780
  query?: never;
724
781
  header?: never;
@@ -727,26 +784,25 @@ interface paths {
727
784
  };
728
785
  get?: never;
729
786
  put?: never;
730
- /**
731
- * Queue a company/site scan
732
- * @description Queues an asynchronous scan. Provide exactly one of `url`, `orgnr`, or `name`; poll the returned id via `GET /api/v1/scan/{id}`.
733
- */
734
- post: operations["createScan"];
787
+ /** Record GDPR consent */
788
+ post: operations["recordGdprConsent"];
735
789
  delete?: never;
736
790
  options?: never;
737
791
  head?: never;
738
792
  patch?: never;
739
793
  trace?: never;
740
794
  };
741
- "/api/v1/scan/companies": {
795
+ "/api/v1/gdpr/consent/{email}": {
742
796
  parameters: {
743
797
  query?: never;
744
798
  header?: never;
745
- path?: never;
799
+ path: {
800
+ email: string;
801
+ };
746
802
  cookie?: never;
747
803
  };
748
- /** Search the Norwegian company registry */
749
- get: operations["searchScanCompanies"];
804
+ /** Get GDPR consent records */
805
+ get: operations["getGdprConsent"];
750
806
  put?: never;
751
807
  post?: never;
752
808
  delete?: never;
@@ -755,38 +811,385 @@ interface paths {
755
811
  patch?: never;
756
812
  trace?: never;
757
813
  };
758
- "/api/v1/scan/{id}": {
814
+ "/api/cookie-consent": {
759
815
  parameters: {
760
816
  query?: never;
761
817
  header?: never;
762
- path: {
763
- id: components["parameters"]["Id"];
764
- };
818
+ path?: never;
765
819
  cookie?: never;
766
820
  };
767
- /** Get a scan job */
768
- get: operations["getScan"];
821
+ get?: never;
769
822
  put?: never;
770
- post?: never;
823
+ /** Record cookie consent */
824
+ post: operations["recordCookieConsent"];
771
825
  delete?: never;
772
826
  options?: never;
773
827
  head?: never;
774
828
  patch?: never;
775
829
  trace?: never;
776
830
  };
777
- }
778
- type webhooks = Record<string, never>;
779
- interface components {
780
- schemas: {
781
- ApiError: {
782
- error: {
783
- code: string;
784
- message: string;
785
- details?: unknown;
786
- };
787
- };
788
- Pagination: {
789
- has_more: boolean;
831
+ "/api/v1/me/workspaces": {
832
+ parameters: {
833
+ query?: never;
834
+ header?: never;
835
+ path?: never;
836
+ cookie?: never;
837
+ };
838
+ /** List accessible workspaces */
839
+ get: operations["listWorkspaces"];
840
+ put?: never;
841
+ post?: never;
842
+ delete?: never;
843
+ options?: never;
844
+ head?: never;
845
+ patch?: never;
846
+ trace?: never;
847
+ };
848
+ "/api/v1/helpdesk/conversations": {
849
+ parameters: {
850
+ query?: never;
851
+ header?: never;
852
+ path?: never;
853
+ cookie?: never;
854
+ };
855
+ /** List helpdesk conversations */
856
+ get: operations["listHelpdeskConversations"];
857
+ put?: never;
858
+ post?: never;
859
+ delete?: never;
860
+ options?: never;
861
+ head?: never;
862
+ patch?: never;
863
+ trace?: never;
864
+ };
865
+ "/api/v1/helpdesk/conversations/{id}": {
866
+ parameters: {
867
+ query?: never;
868
+ header?: never;
869
+ path: {
870
+ id: components["parameters"]["Id"];
871
+ };
872
+ cookie?: never;
873
+ };
874
+ /** Get a helpdesk conversation */
875
+ get: operations["getHelpdeskConversation"];
876
+ put?: never;
877
+ post?: never;
878
+ delete?: never;
879
+ options?: never;
880
+ head?: never;
881
+ /**
882
+ * Update a conversation's status or assignee
883
+ * @description Set `status` and/or `assignee_user_id` (`null` unassigns). At least one field is required. Capability-scoped tokens must send `Idempotency-Key` and `X-Capability-Confirmation` headers on this route; API keys with legacy scopes may omit them.
884
+ */
885
+ patch: operations["updateHelpdeskConversation"];
886
+ trace?: never;
887
+ };
888
+ "/api/v1/helpdesk/conversations/{id}/messages": {
889
+ parameters: {
890
+ query?: never;
891
+ header?: never;
892
+ path: {
893
+ id: components["parameters"]["Id"];
894
+ };
895
+ cookie?: never;
896
+ };
897
+ /** List conversation messages */
898
+ get: operations["listHelpdeskConversationMessages"];
899
+ put?: never;
900
+ post?: never;
901
+ delete?: never;
902
+ options?: never;
903
+ head?: never;
904
+ patch?: never;
905
+ trace?: never;
906
+ };
907
+ "/api/v1/helpdesk/replies": {
908
+ parameters: {
909
+ query?: never;
910
+ header?: never;
911
+ path?: never;
912
+ cookie?: never;
913
+ };
914
+ get?: never;
915
+ put?: never;
916
+ /**
917
+ * Send an operator reply or internal note
918
+ * @description Send an `Idempotency-Key` header so retried requests do not create duplicate messages — it is required for capability-scoped tokens (together with `X-Capability-Confirmation`).
919
+ */
920
+ post: operations["createHelpdeskReply"];
921
+ delete?: never;
922
+ options?: never;
923
+ head?: never;
924
+ patch?: never;
925
+ trace?: never;
926
+ };
927
+ "/api/v1/webhooks": {
928
+ parameters: {
929
+ query?: never;
930
+ header?: never;
931
+ path?: never;
932
+ cookie?: never;
933
+ };
934
+ /** List webhook endpoints */
935
+ get: operations["listWebhooks"];
936
+ put?: never;
937
+ /**
938
+ * Create a webhook endpoint
939
+ * @description The response's `data.secret` contains the signing secret EXACTLY ONCE — it can never be retrieved again, so store it securely immediately. An idempotent replay (same `Idempotency-Key`) returns the existing endpoint WITHOUT `secret`. Deliveries are HTTP POSTs signed with `X-Medal-Signature: sha256=<base64(HMAC-SHA256("{timestamp}.{rawBody}", secret))>` plus `X-Medal-Timestamp`, `X-Medal-Event`, and `X-Medal-Delivery-Id` / `Idempotency-Key` headers.
940
+ */
941
+ post: operations["createWebhook"];
942
+ delete?: never;
943
+ options?: never;
944
+ head?: never;
945
+ patch?: never;
946
+ trace?: never;
947
+ };
948
+ "/api/v1/webhooks/{id}": {
949
+ parameters: {
950
+ query?: never;
951
+ header?: never;
952
+ path: {
953
+ id: components["parameters"]["Id"];
954
+ };
955
+ cookie?: never;
956
+ };
957
+ /** Get a webhook endpoint */
958
+ get: operations["getWebhook"];
959
+ put?: never;
960
+ post?: never;
961
+ /**
962
+ * Delete a webhook endpoint
963
+ * @description Permanently deletes the endpoint and stops all outbound deliveries. Capability-scoped tokens must send `Idempotency-Key` and `X-Capability-Confirmation` headers on this route; API keys with legacy scopes may omit them.
964
+ */
965
+ delete: operations["deleteWebhook"];
966
+ options?: never;
967
+ head?: never;
968
+ /**
969
+ * Update a webhook endpoint
970
+ * @description Only provided fields change. Pass `null` for `channels` or `channel_connection_ids` to clear that filter.
971
+ */
972
+ patch: operations["updateWebhook"];
973
+ trace?: never;
974
+ };
975
+ "/api/v1/webhooks/{id}/deliveries": {
976
+ parameters: {
977
+ query?: never;
978
+ header?: never;
979
+ path: {
980
+ id: components["parameters"]["Id"];
981
+ };
982
+ cookie?: never;
983
+ };
984
+ /** List recent deliveries */
985
+ get: operations["listWebhookDeliveries"];
986
+ put?: never;
987
+ post?: never;
988
+ delete?: never;
989
+ options?: never;
990
+ head?: never;
991
+ patch?: never;
992
+ trace?: never;
993
+ };
994
+ "/api/v1/webhooks/{id}/test": {
995
+ parameters: {
996
+ query?: never;
997
+ header?: never;
998
+ path: {
999
+ id: components["parameters"]["Id"];
1000
+ };
1001
+ cookie?: never;
1002
+ };
1003
+ get?: never;
1004
+ put?: never;
1005
+ /**
1006
+ * Queue a test delivery
1007
+ * @description Queues a signed `test.ping` delivery to the endpoint.
1008
+ */
1009
+ post: operations["testWebhook"];
1010
+ delete?: never;
1011
+ options?: never;
1012
+ head?: never;
1013
+ patch?: never;
1014
+ trace?: never;
1015
+ };
1016
+ "/api/v1/capability-confirmations": {
1017
+ parameters: {
1018
+ query?: never;
1019
+ header?: never;
1020
+ path?: never;
1021
+ cookie?: never;
1022
+ };
1023
+ get?: never;
1024
+ put?: never;
1025
+ /**
1026
+ * Issue a capability confirmation token
1027
+ * @description Mints a short-lived `X-Capability-Confirmation` token for one pending write. Confirmable write routes require BOTH `Idempotency-Key` and `X-Capability-Confirmation` when the credential holds the capability scope directly; API keys with legacy scopes are exempt. The token is bound to the workspace, auth subject, method, path, required scopes and idempotency key, and expires within 15 minutes. `user_approved: true` asserts that a human on the caller's side approved this exact action.
1028
+ */
1029
+ post: operations["issueCapabilityConfirmation"];
1030
+ delete?: never;
1031
+ options?: never;
1032
+ head?: never;
1033
+ patch?: never;
1034
+ trace?: never;
1035
+ };
1036
+ "/api/v1/channels/connect-links": {
1037
+ parameters: {
1038
+ query?: never;
1039
+ header?: never;
1040
+ path?: never;
1041
+ cookie?: never;
1042
+ };
1043
+ /**
1044
+ * List connect links
1045
+ * @description Link tokens are never returned. Newest first, cursor-paginated. The `channel_type` / `status` filters are applied within each page, so a page may hold fewer than `limit` items while `pagination.has_more` is still true — page off `has_more`, not the item count.
1046
+ */
1047
+ get: operations["listChannelConnectLinks"];
1048
+ put?: never;
1049
+ /**
1050
+ * Mint a hosted connect link
1051
+ * @description Mints a single-use hosted connect link that lets an external person (no Medal account required) attach a channel account (e.g. `telegram_inbox`) to the workspace's helpdesk. The response's `data.url` contains the one-time link token EXACTLY ONCE — an idempotent replay (same `Idempotency-Key`) returns the link WITHOUT `url`. Requires the `channel.connect.manage` scope; OAuth callers additionally need the workspace `admin` role.
1052
+ */
1053
+ post: operations["createChannelConnectLink"];
1054
+ delete?: never;
1055
+ options?: never;
1056
+ head?: never;
1057
+ patch?: never;
1058
+ trace?: never;
1059
+ };
1060
+ "/api/v1/channels/connect-links/{id}": {
1061
+ parameters: {
1062
+ query?: never;
1063
+ header?: never;
1064
+ path: {
1065
+ id: components["parameters"]["Id"];
1066
+ };
1067
+ cookie?: never;
1068
+ };
1069
+ get?: never;
1070
+ put?: never;
1071
+ post?: never;
1072
+ /**
1073
+ * Revoke a connect link
1074
+ * @description Revokes a pending connect link so it can no longer be consumed. OAuth callers need the workspace `admin` role.
1075
+ */
1076
+ delete: operations["revokeChannelConnectLink"];
1077
+ options?: never;
1078
+ head?: never;
1079
+ patch?: never;
1080
+ trace?: never;
1081
+ };
1082
+ "/api/v1/channels/connections": {
1083
+ parameters: {
1084
+ query?: never;
1085
+ header?: never;
1086
+ path?: never;
1087
+ cookie?: never;
1088
+ };
1089
+ /**
1090
+ * List channel connections
1091
+ * @description The workspace's channel connections in a generic, channel-agnostic shape. Newest first, cursor-paginated. Rows that are not projectable as connections are dropped within the page, so a page may hold fewer than `limit` items while `pagination.has_more` is still true — page off `has_more`, not the item count.
1092
+ */
1093
+ get: operations["listChannelConnections"];
1094
+ put?: never;
1095
+ post?: never;
1096
+ delete?: never;
1097
+ options?: never;
1098
+ head?: never;
1099
+ patch?: never;
1100
+ trace?: never;
1101
+ };
1102
+ "/api/v1/channels/connections/{id}": {
1103
+ parameters: {
1104
+ query?: never;
1105
+ header?: never;
1106
+ path: {
1107
+ id: components["parameters"]["Id"];
1108
+ };
1109
+ cookie?: never;
1110
+ };
1111
+ get?: never;
1112
+ put?: never;
1113
+ post?: never;
1114
+ /**
1115
+ * Disconnect a channel connection
1116
+ * @description Disconnects a connected channel account (best-effort platform logout, then local revoke). Emits a `helpdesk.channel_disconnected` webhook event with `reason: "api_disconnect"` if the account was previously connected. OAuth callers need the workspace `admin` role.
1117
+ */
1118
+ delete: operations["disconnectChannelConnection"];
1119
+ options?: never;
1120
+ head?: never;
1121
+ patch?: never;
1122
+ trace?: never;
1123
+ };
1124
+ "/api/v1/scan": {
1125
+ parameters: {
1126
+ query?: never;
1127
+ header?: never;
1128
+ path?: never;
1129
+ cookie?: never;
1130
+ };
1131
+ get?: never;
1132
+ put?: never;
1133
+ /**
1134
+ * Queue a company/site scan
1135
+ * @description Queues an asynchronous scan. Provide exactly one of `url`, `orgnr`, or `name`; poll the returned id via `GET /api/v1/scan/{id}`.
1136
+ */
1137
+ post: operations["createScan"];
1138
+ delete?: never;
1139
+ options?: never;
1140
+ head?: never;
1141
+ patch?: never;
1142
+ trace?: never;
1143
+ };
1144
+ "/api/v1/scan/companies": {
1145
+ parameters: {
1146
+ query?: never;
1147
+ header?: never;
1148
+ path?: never;
1149
+ cookie?: never;
1150
+ };
1151
+ /** Search the Norwegian company registry */
1152
+ get: operations["searchScanCompanies"];
1153
+ put?: never;
1154
+ post?: never;
1155
+ delete?: never;
1156
+ options?: never;
1157
+ head?: never;
1158
+ patch?: never;
1159
+ trace?: never;
1160
+ };
1161
+ "/api/v1/scan/{id}": {
1162
+ parameters: {
1163
+ query?: never;
1164
+ header?: never;
1165
+ path: {
1166
+ id: components["parameters"]["Id"];
1167
+ };
1168
+ cookie?: never;
1169
+ };
1170
+ /** Get a scan job */
1171
+ get: operations["getScan"];
1172
+ put?: never;
1173
+ post?: never;
1174
+ delete?: never;
1175
+ options?: never;
1176
+ head?: never;
1177
+ patch?: never;
1178
+ trace?: never;
1179
+ };
1180
+ }
1181
+ type webhooks = Record<string, never>;
1182
+ interface components {
1183
+ schemas: {
1184
+ ApiError: {
1185
+ error: {
1186
+ code: string;
1187
+ message: string;
1188
+ details?: unknown;
1189
+ };
1190
+ };
1191
+ Pagination: {
1192
+ has_more: boolean;
790
1193
  next_cursor: string | null;
791
1194
  };
792
1195
  Success: {
@@ -1154,24 +1557,233 @@ interface components {
1154
1557
  end_date?: string;
1155
1558
  notes?: string;
1156
1559
  };
1157
- UpdateDealInput: {
1158
- title?: string;
1159
- description?: string;
1160
- value?: number;
1161
- currency?: string;
1162
- status?: components["schemas"]["DealStatus"];
1163
- brand_name?: string;
1164
- /** Format: uri */
1165
- brand_website?: string;
1166
- contact_id?: string | null;
1167
- contact_name?: string;
1168
- /** Format: email */
1169
- contact_email?: string;
1170
- /** Format: date */
1171
- start_date?: string;
1172
- /** Format: date */
1173
- end_date?: string;
1174
- notes?: string;
1560
+ UpdateDealInput: {
1561
+ title?: string;
1562
+ description?: string;
1563
+ value?: number;
1564
+ currency?: string;
1565
+ status?: components["schemas"]["DealStatus"];
1566
+ brand_name?: string;
1567
+ /** Format: uri */
1568
+ brand_website?: string;
1569
+ contact_id?: string | null;
1570
+ contact_name?: string;
1571
+ /** Format: email */
1572
+ contact_email?: string;
1573
+ /** Format: date */
1574
+ start_date?: string;
1575
+ /** Format: date */
1576
+ end_date?: string;
1577
+ notes?: string;
1578
+ };
1579
+ /** @description A timestamp on the way in — Unix milliseconds, or an ISO 8601 date-time string. Responses always render timestamps as ISO 8601. */
1580
+ BookingTimestampInput: number | string;
1581
+ /** @enum {string} */
1582
+ BookingStatus: "pending" | "confirmed" | "completed" | "cancelled" | "no_show";
1583
+ /**
1584
+ * @description Who cancelled. `staff` for the id-addressed cancel, `customer` for the manage-token cancel, `system` for an automated one.
1585
+ * @enum {string}
1586
+ */
1587
+ BookingCancelledBy: "customer" | "staff" | "system";
1588
+ /** @enum {string} */
1589
+ BookingPaymentStatus: "none" | "reserved" | "captured" | "refunded";
1590
+ /** @enum {string} */
1591
+ BookingCreatedVia: "web" | "dashboard" | "walk_in" | "api";
1592
+ /** @enum {string} */
1593
+ BookingResourceType: "staff" | "room" | "equipment";
1594
+ Booking: {
1595
+ id: string;
1596
+ contact_id: string | null;
1597
+ service_id: string | null;
1598
+ resource_id: string | null;
1599
+ /** Format: date-time */
1600
+ start_ts: string | null;
1601
+ /** Format: date-time */
1602
+ end_ts: string | null;
1603
+ booked_for_name: string | null;
1604
+ /** @description A birth year, not a birthdate — the age bracket is all that is stored. */
1605
+ booked_for_birth_year: number | null;
1606
+ /** @description Shared by every booking created in the same party request. */
1607
+ party_sequence_id: string | null;
1608
+ status: components["schemas"]["BookingStatus"];
1609
+ cancelled_by: components["schemas"]["BookingCancelledBy"] | null;
1610
+ cancel_reason: string | null;
1611
+ /** @description On a booking created by a reschedule, the booking it replaced. */
1612
+ rescheduled_from_id: string | null;
1613
+ payment_status: components["schemas"]["BookingPaymentStatus"];
1614
+ /** @description Price in integer øre. Never a float and never kroner. */
1615
+ amount_ore: number | null;
1616
+ /** @description Customer-visible note. */
1617
+ notes: string | null;
1618
+ /** @description Staff-only note; never shown to the customer. */
1619
+ internal_notes: string | null;
1620
+ created_via: components["schemas"]["BookingCreatedVia"] | null;
1621
+ /** Format: date-time */
1622
+ created_at: string | null;
1623
+ /** Format: date-time */
1624
+ updated_at: string | null;
1625
+ };
1626
+ BookingService: {
1627
+ id: string;
1628
+ name: string | null;
1629
+ description: string | null;
1630
+ category: string | null;
1631
+ duration_minutes: number | null;
1632
+ buffer_before_minutes: number | null;
1633
+ buffer_after_minutes: number | null;
1634
+ /** @description Price in integer øre. */
1635
+ price_ore: number | null;
1636
+ weekend_surcharge_pct: number | null;
1637
+ /** @description Resource types this service needs, e.g. `["staff"]`. */
1638
+ resource_requirements: string[];
1639
+ bookable_online: boolean;
1640
+ max_per_booking: number | null;
1641
+ color: string | null;
1642
+ sort_order: number | null;
1643
+ active: boolean;
1644
+ /** Format: date-time */
1645
+ created_at: string | null;
1646
+ /** Format: date-time */
1647
+ updated_at: string | null;
1648
+ };
1649
+ BookingResource: {
1650
+ id: string;
1651
+ type: components["schemas"]["BookingResourceType"] | null;
1652
+ name: string | null;
1653
+ /** Format: uri */
1654
+ photo_url: string | null;
1655
+ bio: string | null;
1656
+ /** @description Services this resource can perform. */
1657
+ service_ids: string[];
1658
+ capacity: number | null;
1659
+ sort_order: number | null;
1660
+ active: boolean;
1661
+ /** Format: date-time */
1662
+ created_at: string | null;
1663
+ /** Format: date-time */
1664
+ updated_at: string | null;
1665
+ };
1666
+ BookingSlot: {
1667
+ /** Format: date-time */
1668
+ start_ts: string | null;
1669
+ /** Format: date-time */
1670
+ end_ts: string | null;
1671
+ resource_id: string | null;
1672
+ };
1673
+ /** @description One date a service can be booked on. `date` is the workspace's own calendar date, not a timestamp. */
1674
+ BookingScheduleDay: {
1675
+ /** Format: date */
1676
+ date: string | null;
1677
+ /** Format: date-time */
1678
+ opens_ts: string | null;
1679
+ /** Format: date-time */
1680
+ closes_ts: string | null;
1681
+ /**
1682
+ * Format: date-time
1683
+ * @description Last start this service could occupy on the date; `null` when the date is shut outright.
1684
+ */
1685
+ last_start_ts: string | null;
1686
+ };
1687
+ /** @description The person the booking is made under. Phone is the CRM dedupe key. */
1688
+ BookingContactInput: {
1689
+ phone: string;
1690
+ email?: string;
1691
+ name?: string;
1692
+ };
1693
+ /** @description One line of a party — a single service on a single slot. */
1694
+ CreateBookingItemInput: {
1695
+ service_id: string;
1696
+ /** @description Omit to let the engine pick a free resource. */
1697
+ resource_id?: string;
1698
+ start_ts: components["schemas"]["BookingTimestampInput"];
1699
+ booked_for_name?: string;
1700
+ booked_for_birth_year?: number;
1701
+ };
1702
+ CreateBookingInput: {
1703
+ /** @description A PARTY — one request books a whole family in one all-or-nothing transaction. */
1704
+ items: components["schemas"]["CreateBookingItemInput"][];
1705
+ contact: components["schemas"]["BookingContactInput"];
1706
+ notes?: string;
1707
+ /**
1708
+ * @description Where the booking came from. Defaults to `api`. A workspace's OWN website should send `web`, so its bookings can be told apart from integrations. `dashboard` and `walk_in` are staff-only and are rejected with 400 — a bearer token proves which workspace is calling, not that a member typed the booking in.
1709
+ * @enum {string}
1710
+ */
1711
+ created_via?: "web" | "api";
1712
+ };
1713
+ CreatedBooking: {
1714
+ id: string;
1715
+ /** @description Show-once secret for the customer's manage link. Only its hash is stored, and an idempotent replay omits this field entirely. */
1716
+ manage_token?: string;
1717
+ };
1718
+ BookingCreateResult: {
1719
+ /** @description One entry per created booking, in request order. */
1720
+ bookings: components["schemas"]["CreatedBooking"][];
1721
+ contact_id: string;
1722
+ };
1723
+ BookingActionResult: {
1724
+ /** @constant */
1725
+ success: true;
1726
+ };
1727
+ BookingRescheduleResult: {
1728
+ /** @constant */
1729
+ success: true;
1730
+ /** @description The NEW booking's id — a reschedule cancels the old row and inserts a new one. */
1731
+ booking_id: string;
1732
+ /** @description Freshly minted manage token for the new booking; omitted on an idempotent replay. */
1733
+ manage_token?: string;
1734
+ };
1735
+ /** @description What the holder of a manage token may see and do. `can_cancel` and `can_reschedule` already apply the workspace's policy windows. */
1736
+ ManageSummary: {
1737
+ booking_id: string;
1738
+ contact_id: string | null;
1739
+ status: components["schemas"]["BookingStatus"] | null;
1740
+ cancelled_by: components["schemas"]["BookingCancelledBy"] | null;
1741
+ cancel_reason: string | null;
1742
+ rescheduled_from_id: string | null;
1743
+ /** Format: date-time */
1744
+ start_ts: string | null;
1745
+ /** Format: date-time */
1746
+ end_ts: string | null;
1747
+ service_id: string | null;
1748
+ service_name: string | null;
1749
+ resource_id: string | null;
1750
+ resource_name: string | null;
1751
+ booked_for_name: string | null;
1752
+ party_sequence_id: string | null;
1753
+ /** @description Price in integer øre. */
1754
+ amount_ore: number | null;
1755
+ payment_status: components["schemas"]["BookingPaymentStatus"] | null;
1756
+ /** @description IANA zone the booking's local times should be rendered in. */
1757
+ time_zone: string | null;
1758
+ cancel_window_hours: number | null;
1759
+ reschedule_window_hours: number | null;
1760
+ can_cancel: boolean;
1761
+ can_reschedule: boolean;
1762
+ };
1763
+ /** @description At least one of `notes` or `internal_notes` is required — the API rejects a body carrying neither with a 400. `""` is a meaningful value that clears the field, so the constraint is on presence. */
1764
+ UpdateBookingInput: {
1765
+ /** @description Customer-visible note. */
1766
+ notes: string;
1767
+ /** @description Staff-only note. */
1768
+ internal_notes?: string;
1769
+ } | {
1770
+ /** @description Customer-visible note. */
1771
+ notes?: string;
1772
+ /** @description Staff-only note. */
1773
+ internal_notes: string;
1774
+ };
1775
+ CancelBookingInput: {
1776
+ reason?: string;
1777
+ };
1778
+ RescheduleBookingInput: {
1779
+ new_start_ts: components["schemas"]["BookingTimestampInput"];
1780
+ new_resource_id?: string;
1781
+ };
1782
+ /** @description Pagination for a bookings page. `truncated` is the extra statement: the underlying read is capped, and when the cap binds there are matching bookings no cursor from this call reaches — narrow the window. */
1783
+ BookingsPagination: {
1784
+ has_more: boolean;
1785
+ next_cursor: string | null;
1786
+ truncated: boolean;
1175
1787
  };
1176
1788
  GdprExport: {
1177
1789
  id: string;
@@ -1503,6 +2115,20 @@ interface components {
1503
2115
  ApiResponse_DealCreateResult: components["schemas"]["Envelope_DealCreateResult"];
1504
2116
  ApiResponse_DealUpdateResult: components["schemas"]["Envelope_DealUpdateResult"];
1505
2117
  ApiResponse_DealRemoveResult: components["schemas"]["Envelope_DealRemoveResult"];
2118
+ ApiResponse_Booking: components["schemas"]["Envelope_Booking"];
2119
+ ApiResponse_BookingServiceArray: components["schemas"]["Envelope_BookingServiceArray"];
2120
+ ApiResponse_BookingResourceArray: components["schemas"]["Envelope_BookingResourceArray"];
2121
+ ApiResponse_BookingSlotArray: components["schemas"]["Envelope_BookingSlotArray"];
2122
+ ApiResponse_BookingScheduleDayArray: components["schemas"]["Envelope_BookingScheduleDayArray"];
2123
+ ApiResponse_BookingCreateResult: components["schemas"]["Envelope_BookingCreateResult"];
2124
+ ApiResponse_BookingActionResult: components["schemas"]["Envelope_BookingActionResult"];
2125
+ ApiResponse_BookingRescheduleResult: components["schemas"]["Envelope_BookingRescheduleResult"];
2126
+ ApiResponse_ManageSummary: components["schemas"]["Envelope_ManageSummary"];
2127
+ ApiResponse_PortalLoginStartResult: components["schemas"]["Envelope_PortalLoginStartResult"];
2128
+ ApiResponse_PortalSession: components["schemas"]["Envelope_PortalSession"];
2129
+ ApiResponse_PortalProfile: components["schemas"]["Envelope_PortalProfile"];
2130
+ ApiResponse_PortalBookings: components["schemas"]["Envelope_PortalBookings"];
2131
+ ApiResponse_PortalExport: components["schemas"]["Envelope_PortalExport"];
1506
2132
  ApiResponse_GdprExportRequest: components["schemas"]["Envelope_GdprExportRequest"];
1507
2133
  ApiResponse_GdprExportArray: components["schemas"]["Envelope_GdprExportArray"];
1508
2134
  ApiResponse_GdprExport: components["schemas"]["Envelope_GdprExport"];
@@ -1533,354 +2159,1003 @@ interface components {
1533
2159
  data: components["schemas"]["Contact"][];
1534
2160
  pagination: components["schemas"]["Pagination"];
1535
2161
  };
1536
- PaginatedResponse_Activity: {
1537
- data: components["schemas"]["Activity"][];
1538
- pagination: components["schemas"]["Pagination"];
2162
+ PaginatedResponse_Activity: {
2163
+ data: components["schemas"]["Activity"][];
2164
+ pagination: components["schemas"]["Pagination"];
2165
+ };
2166
+ PaginatedResponse_Deal: {
2167
+ data: components["schemas"]["Deal"][];
2168
+ pagination: components["schemas"]["Pagination"];
2169
+ };
2170
+ PaginatedResponse_Booking: {
2171
+ data: components["schemas"]["Booking"][];
2172
+ pagination: components["schemas"]["BookingsPagination"];
2173
+ };
2174
+ PaginatedResponse_HelpdeskConversation: {
2175
+ data: components["schemas"]["HelpdeskConversation"][];
2176
+ pagination: components["schemas"]["Pagination"];
2177
+ };
2178
+ PaginatedResponse_HelpdeskMessage: {
2179
+ data: components["schemas"]["HelpdeskMessage"][];
2180
+ pagination: components["schemas"]["Pagination"];
2181
+ };
2182
+ PaginatedResponse_ConnectLink: {
2183
+ data: components["schemas"]["ConnectLink"][];
2184
+ pagination: components["schemas"]["Pagination"];
2185
+ };
2186
+ PaginatedResponse_ChannelConnection: {
2187
+ data: components["schemas"]["ChannelConnection"][];
2188
+ pagination: components["schemas"]["Pagination"];
2189
+ };
2190
+ Envelope_PostCreateResult: {
2191
+ data: components["schemas"]["PostCreateResult"];
2192
+ };
2193
+ Envelope_PostDetail: {
2194
+ data: components["schemas"]["PostDetail"];
2195
+ };
2196
+ Envelope_Success: {
2197
+ data: components["schemas"]["Success"];
2198
+ };
2199
+ Envelope_ScheduleResult: {
2200
+ data: components["schemas"]["ScheduleResult"];
2201
+ };
2202
+ Envelope_PublishResult: {
2203
+ data: components["schemas"]["PublishResult"];
2204
+ };
2205
+ Envelope_ChannelArray: {
2206
+ data: components["schemas"]["Channel"][];
2207
+ };
2208
+ Envelope_EmailSendResult: {
2209
+ data: components["schemas"]["EmailSendResult"];
2210
+ };
2211
+ Envelope_EmailSend: {
2212
+ data: components["schemas"]["EmailSend"];
2213
+ };
2214
+ Envelope_BatchSendSummary: {
2215
+ data: components["schemas"]["BatchSendSummary"];
2216
+ };
2217
+ Envelope_EmailTemplateArray: {
2218
+ data: components["schemas"]["EmailTemplate"][];
2219
+ };
2220
+ Envelope_EmailTemplateDetail: {
2221
+ data: components["schemas"]["EmailTemplateDetail"];
2222
+ };
2223
+ Envelope_Contact: {
2224
+ data: components["schemas"]["Contact"];
2225
+ };
2226
+ Envelope_ContactCreateResult: {
2227
+ data: components["schemas"]["ContactCreateResult"];
2228
+ };
2229
+ Envelope_ContactUpdateResult: {
2230
+ data: components["schemas"]["ContactUpdateResult"];
2231
+ };
2232
+ Envelope_ContactRemoveResult: {
2233
+ data: components["schemas"]["ContactRemoveResult"];
2234
+ };
2235
+ Envelope_ContactNoteResult: {
2236
+ data: components["schemas"]["ContactNoteResult"];
2237
+ };
2238
+ Envelope_ImportContactsResult: {
2239
+ data: components["schemas"]["ImportContactsResult"];
2240
+ };
2241
+ Envelope_Deal: {
2242
+ data: components["schemas"]["Deal"];
2243
+ };
2244
+ Envelope_DealCreateResult: {
2245
+ data: components["schemas"]["DealCreateResult"];
2246
+ };
2247
+ Envelope_DealUpdateResult: {
2248
+ data: components["schemas"]["DealUpdateResult"];
2249
+ };
2250
+ Envelope_DealRemoveResult: {
2251
+ data: components["schemas"]["DealRemoveResult"];
2252
+ };
2253
+ Envelope_Booking: {
2254
+ data: components["schemas"]["Booking"];
2255
+ };
2256
+ Envelope_BookingServiceArray: {
2257
+ data: components["schemas"]["BookingService"][];
2258
+ };
2259
+ Envelope_BookingResourceArray: {
2260
+ data: components["schemas"]["BookingResource"][];
2261
+ };
2262
+ Envelope_BookingSlotArray: {
2263
+ data: components["schemas"]["BookingSlot"][];
2264
+ };
2265
+ Envelope_BookingScheduleDayArray: {
2266
+ data: components["schemas"]["BookingScheduleDay"][];
2267
+ };
2268
+ Envelope_BookingCreateResult: {
2269
+ data: components["schemas"]["BookingCreateResult"];
2270
+ };
2271
+ Envelope_BookingActionResult: {
2272
+ data: components["schemas"]["BookingActionResult"];
2273
+ };
2274
+ Envelope_BookingRescheduleResult: {
2275
+ data: components["schemas"]["BookingRescheduleResult"];
2276
+ };
2277
+ Envelope_ManageSummary: {
2278
+ data: components["schemas"]["ManageSummary"];
2279
+ };
2280
+ PortalLoginStartInput: {
2281
+ /**
2282
+ * Format: email
2283
+ * @description The address the code is sent to.
2284
+ */
2285
+ email: string;
2286
+ /** @description Locale for the e-mail (e.g. `nb`, `en`); the workspace default when omitted. */
2287
+ locale?: string;
2288
+ };
2289
+ /** @description Always `sent`, whether or not the address is a known contact — the route is enumeration-safe by design. */
2290
+ PortalLoginStartResult: {
2291
+ /** @constant */
2292
+ status: "sent";
2293
+ };
2294
+ PortalVerifyInput: {
2295
+ /** Format: email */
2296
+ email: string;
2297
+ /** @description The one-time code from the e-mail. */
2298
+ code: string;
2299
+ };
2300
+ PortalContactSummary: {
2301
+ contact_id: string;
2302
+ first_name: string | null;
2303
+ };
2304
+ /** @description A portal session. `session_token` is a bearer credential for ONE contact — keep it in an HttpOnly cookie on the site's server and never hand it to the browser. */
2305
+ PortalSession: {
2306
+ session_token: string;
2307
+ /** @description Unix timestamp in milliseconds. */
2308
+ expires_at: number;
2309
+ contact: components["schemas"]["PortalContactSummary"];
2310
+ };
2311
+ PortalFamilyMember: {
2312
+ name: string;
2313
+ birth_year: number;
2314
+ };
2315
+ PortalProfile: {
2316
+ contact_id: string;
2317
+ email: string;
2318
+ first_name: string | null;
2319
+ last_name: string | null;
2320
+ phone: string | null;
2321
+ family: components["schemas"]["PortalFamilyMember"][];
2322
+ marketing_consent: boolean;
2323
+ /** @description Unix timestamp in milliseconds. */
2324
+ created_at: number;
2325
+ };
2326
+ /** @description Only the supplied fields change. */
2327
+ PortalProfilePatch: {
2328
+ first_name?: string;
2329
+ last_name?: string;
2330
+ /** @description `null` clears the number. */
2331
+ phone?: string | null;
2332
+ /** @description Replaces the whole list. */
2333
+ family?: components["schemas"]["PortalFamilyMember"][];
2334
+ /** @description Records a `marketing_email` consent change with source `portal`. */
2335
+ marketing_consent?: boolean;
2336
+ };
2337
+ PortalBooking: {
2338
+ booking_id: string;
2339
+ status: components["schemas"]["BookingStatus"];
2340
+ /** @description Unix timestamp in milliseconds. */
2341
+ start_ts: number;
2342
+ /** @description Unix timestamp in milliseconds. */
2343
+ end_ts: number;
2344
+ service_id: string | null;
2345
+ service_name: string | null;
2346
+ resource_id: string | null;
2347
+ resource_name: string | null;
2348
+ booked_for_name: string | null;
2349
+ /** @description Integer øre, or `null` when the service has no price. */
2350
+ amount_ore: number | null;
2351
+ notes: string | null;
2352
+ /** @description Present only while the booking is upcoming and manageable; opens the site's manage page. */
2353
+ manage_token: string | null;
2354
+ can_manage: boolean;
2355
+ };
2356
+ PortalBookings: {
2357
+ upcoming: components["schemas"]["PortalBooking"][];
2358
+ past: components["schemas"]["PortalBooking"][];
2359
+ };
2360
+ PortalConsentRecord: {
2361
+ consent_type: string;
2362
+ granted: boolean;
2363
+ /** @description Unix timestamp in milliseconds, or `null`. */
2364
+ granted_at: number | null;
2365
+ /** @description Unix timestamp in milliseconds, or `null`. */
2366
+ revoked_at: number | null;
2367
+ source: string;
2368
+ };
2369
+ /** @description Everything the workspace holds about the signed-in contact (GDPR Art. 15). */
2370
+ PortalExport: {
2371
+ /** @description Unix timestamp in milliseconds. */
2372
+ exported_at: number;
2373
+ contact: components["schemas"]["PortalProfile"];
2374
+ family: components["schemas"]["PortalFamilyMember"][];
2375
+ consents: components["schemas"]["PortalConsentRecord"][];
2376
+ bookings: components["schemas"]["PortalBooking"][];
2377
+ };
2378
+ Envelope_PortalLoginStartResult: {
2379
+ data: components["schemas"]["PortalLoginStartResult"];
2380
+ };
2381
+ Envelope_PortalSession: {
2382
+ data: components["schemas"]["PortalSession"];
2383
+ };
2384
+ Envelope_PortalProfile: {
2385
+ data: components["schemas"]["PortalProfile"];
2386
+ };
2387
+ Envelope_PortalBookings: {
2388
+ data: components["schemas"]["PortalBookings"];
2389
+ };
2390
+ Envelope_PortalExport: {
2391
+ data: components["schemas"]["PortalExport"];
2392
+ };
2393
+ /** @description Provide exactly one of `url`, `orgnr`, or `name`. */
2394
+ ScanCreateInput: {
2395
+ url?: string;
2396
+ orgnr?: string;
2397
+ name?: string;
2398
+ } & (unknown | unknown | unknown);
2399
+ ScanCreateResult: {
2400
+ id: string;
2401
+ status: string;
2402
+ message?: string;
2403
+ };
2404
+ ScanCompany: {
2405
+ orgnr: string;
2406
+ name: string;
2407
+ org_form: string | null;
2408
+ industry: string | null;
2409
+ city: string | null;
2410
+ website: string | null;
2411
+ };
2412
+ ScanJob: {
2413
+ id: string;
2414
+ /** @description pending | running | done | failed */
2415
+ status: string;
2416
+ input: components["schemas"]["ScanCreateInput"];
2417
+ resolved: {
2418
+ orgnr?: string;
2419
+ companyName?: string;
2420
+ websiteUrl?: string;
2421
+ } | null;
2422
+ /** @description Versioned findings payload (see the SDK `ScanResultPayload` type); additive per `version`. The stable core is documented below; further sections (registry, signals, pagespeed, seo, ai, gdpr, mailAuth, httpsOk) evolve additively. */
2423
+ result: ({
2424
+ version: number;
2425
+ /** @description Weighted composite score (0-100); null when unmeasurable. */
2426
+ nettskaar: number | null;
2427
+ /** @description Per-axis 0-100 scores; null axes were unmeasurable. */
2428
+ subScores: {
2429
+ fart: number | null;
2430
+ google: number | null;
2431
+ ai: number | null;
2432
+ trygghet: number | null;
2433
+ omdomme: number | null;
2434
+ };
2435
+ } & {
2436
+ [key: string]: unknown;
2437
+ }) | null;
2438
+ /** @description Public-safe failure code (company_not_found, no_website, …). */
2439
+ error: string | null;
2440
+ /** Format: date-time */
2441
+ created_at: string | null;
2442
+ /** Format: date-time */
2443
+ finished_at: string | null;
2444
+ };
2445
+ Envelope_ScanCreateResult: {
2446
+ data: components["schemas"]["ScanCreateResult"];
2447
+ };
2448
+ Envelope_ScanCompanyArray: {
2449
+ data: components["schemas"]["ScanCompany"][];
2450
+ };
2451
+ Envelope_ScanJob: {
2452
+ data: components["schemas"]["ScanJob"];
2453
+ };
2454
+ Envelope_GdprExportRequest: {
2455
+ data: components["schemas"]["GdprExportRequest"];
2456
+ };
2457
+ Envelope_GdprExportArray: {
2458
+ data: components["schemas"]["GdprExport"][];
2459
+ };
2460
+ Envelope_GdprExport: {
2461
+ data: components["schemas"]["GdprExport"];
2462
+ };
2463
+ Envelope_ConsentResult: {
2464
+ data: components["schemas"]["ConsentResult"];
2465
+ };
2466
+ Envelope_ConsentRecordArray: {
2467
+ data: components["schemas"]["ConsentRecord"][];
2468
+ };
2469
+ Envelope_WorkspaceArray: {
2470
+ data: components["schemas"]["Workspace"][];
2471
+ };
2472
+ Envelope_HelpdeskConversation: {
2473
+ data: components["schemas"]["HelpdeskConversation"];
2474
+ };
2475
+ Envelope_HelpdeskConversationUpdateResult: {
2476
+ data: components["schemas"]["HelpdeskConversationUpdateResult"];
2477
+ };
2478
+ Envelope_HelpdeskReplyCreateResult: {
2479
+ data: components["schemas"]["HelpdeskReplyCreateResult"];
2480
+ };
2481
+ Envelope_WebhookEndpoint: {
2482
+ data: components["schemas"]["WebhookEndpoint"];
2483
+ };
2484
+ Envelope_WebhookEndpointArray: {
2485
+ data: components["schemas"]["WebhookEndpoint"][];
2486
+ };
2487
+ Envelope_WebhookDeleteResult: {
2488
+ data: components["schemas"]["WebhookDeleteResult"];
1539
2489
  };
1540
- PaginatedResponse_Deal: {
1541
- data: components["schemas"]["Deal"][];
1542
- pagination: components["schemas"]["Pagination"];
2490
+ IssueCapabilityConfirmationInput: {
2491
+ /** @description Confirmable capability to mint a token for. */
2492
+ capability_id: string;
2493
+ /** @description Concrete `/api/v1/...` path to bind the token to. Optional when the capability has exactly one API target; required when it has several. */
2494
+ api_path?: string;
2495
+ /** @description Values for the capability path template's parameters. */
2496
+ path_params?: {
2497
+ [key: string]: string | number | boolean;
2498
+ };
2499
+ /** @description The exact `Idempotency-Key` the confirmed write will send. The token is bound to it. */
2500
+ idempotency_key?: string;
2501
+ /** @description Human-readable description of the approved action, retained for audit. */
2502
+ preview_summary: string;
2503
+ /**
2504
+ * @description Asserts that a human on the caller's side approved this specific action.
2505
+ * @constant
2506
+ */
2507
+ user_approved: true;
1543
2508
  };
1544
- PaginatedResponse_HelpdeskConversation: {
1545
- data: components["schemas"]["HelpdeskConversation"][];
1546
- pagination: components["schemas"]["Pagination"];
2509
+ CapabilityConfirmation: {
2510
+ /** @description Send as the `X-Capability-Confirmation` header on the write. */
2511
+ confirmation_token: string;
2512
+ /** @constant */
2513
+ token_type: "medal_capability_confirmation";
2514
+ capability_id: string;
2515
+ method: string;
2516
+ path: string;
2517
+ required_scopes: string[];
2518
+ idempotency_key: string | null;
2519
+ expires_in: number;
2520
+ /** Format: date-time */
2521
+ expires_at: string;
2522
+ preview_summary: string;
1547
2523
  };
1548
- PaginatedResponse_HelpdeskMessage: {
1549
- data: components["schemas"]["HelpdeskMessage"][];
1550
- pagination: components["schemas"]["Pagination"];
2524
+ ApiResponse_CapabilityConfirmation: components["schemas"]["Envelope_CapabilityConfirmation"];
2525
+ Envelope_CapabilityConfirmation: {
2526
+ data: components["schemas"]["CapabilityConfirmation"];
1551
2527
  };
1552
- PaginatedResponse_ConnectLink: {
1553
- data: components["schemas"]["ConnectLink"][];
1554
- pagination: components["schemas"]["Pagination"];
2528
+ Envelope_WebhookDeliveryArray: {
2529
+ data: components["schemas"]["WebhookDelivery"][];
1555
2530
  };
1556
- PaginatedResponse_ChannelConnection: {
1557
- data: components["schemas"]["ChannelConnection"][];
1558
- pagination: components["schemas"]["Pagination"];
2531
+ Envelope_WebhookTestResult: {
2532
+ data: components["schemas"]["WebhookTestResult"];
1559
2533
  };
1560
- Envelope_PostCreateResult: {
1561
- data: components["schemas"]["PostCreateResult"];
2534
+ Envelope_ConnectLinkCreateResult: {
2535
+ data: components["schemas"]["ConnectLinkCreateResult"];
1562
2536
  };
1563
- Envelope_PostDetail: {
1564
- data: components["schemas"]["PostDetail"];
2537
+ /**
2538
+ * @deprecated
2539
+ * @description Deprecated — `listChannelConnectLinks` responds with `PaginatedResponse_ConnectLink`. Retained for backwards compatibility with consumers of the generated contract types.
2540
+ */
2541
+ Envelope_ConnectLinkArray: {
2542
+ data: components["schemas"]["ConnectLink"][];
1565
2543
  };
1566
- Envelope_Success: {
1567
- data: components["schemas"]["Success"];
2544
+ Envelope_ConnectLinkRevokeResult: {
2545
+ data: components["schemas"]["ConnectLinkRevokeResult"];
1568
2546
  };
1569
- Envelope_ScheduleResult: {
1570
- data: components["schemas"]["ScheduleResult"];
2547
+ /**
2548
+ * @deprecated
2549
+ * @description Deprecated — `listChannelConnections` responds with `PaginatedResponse_ChannelConnection`. Retained for backwards compatibility with consumers of the generated contract types.
2550
+ */
2551
+ Envelope_ChannelConnectionArray: {
2552
+ data: components["schemas"]["ChannelConnection"][];
1571
2553
  };
1572
- Envelope_PublishResult: {
1573
- data: components["schemas"]["PublishResult"];
2554
+ Envelope_ChannelConnectionDisconnectResult: {
2555
+ data: components["schemas"]["ChannelConnectionDisconnectResult"];
1574
2556
  };
1575
- Envelope_ChannelArray: {
1576
- data: components["schemas"]["Channel"][];
2557
+ };
2558
+ responses: {
2559
+ /** @description API error. */
2560
+ ApiError: {
2561
+ headers: {
2562
+ [name: string]: unknown;
2563
+ };
2564
+ content: {
2565
+ "application/json": components["schemas"]["ApiError"];
2566
+ };
1577
2567
  };
1578
- Envelope_EmailSendResult: {
1579
- data: components["schemas"]["EmailSendResult"];
2568
+ };
2569
+ parameters: {
2570
+ Id: string;
2571
+ Slug: string;
2572
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
2573
+ ManageToken: string;
2574
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
2575
+ PortalSession: string;
2576
+ Cursor: string;
2577
+ Limit: number;
2578
+ };
2579
+ requestBodies: never;
2580
+ headers: never;
2581
+ pathItems: never;
2582
+ }
2583
+ type $defs = Record<string, never>;
2584
+ interface operations {
2585
+ listPosts: {
2586
+ parameters: {
2587
+ query?: {
2588
+ limit?: components["parameters"]["Limit"];
2589
+ cursor?: components["parameters"]["Cursor"];
2590
+ status?: string;
2591
+ type?: components["schemas"]["PostType"];
2592
+ };
2593
+ header?: never;
2594
+ path?: never;
2595
+ cookie?: never;
1580
2596
  };
1581
- Envelope_EmailSend: {
1582
- data: components["schemas"]["EmailSend"];
2597
+ requestBody?: never;
2598
+ responses: {
2599
+ /** @description Posts page. */
2600
+ 200: {
2601
+ headers: {
2602
+ [name: string]: unknown;
2603
+ };
2604
+ content: {
2605
+ "application/json": components["schemas"]["PaginatedResponse_Post"];
2606
+ };
2607
+ };
2608
+ default: components["responses"]["ApiError"];
1583
2609
  };
1584
- Envelope_BatchSendSummary: {
1585
- data: components["schemas"]["BatchSendSummary"];
2610
+ };
2611
+ createPost: {
2612
+ parameters: {
2613
+ query?: never;
2614
+ header?: never;
2615
+ path?: never;
2616
+ cookie?: never;
1586
2617
  };
1587
- Envelope_EmailTemplateArray: {
1588
- data: components["schemas"]["EmailTemplate"][];
2618
+ requestBody: {
2619
+ content: {
2620
+ "application/json": components["schemas"]["CreatePostInput"];
2621
+ };
1589
2622
  };
1590
- Envelope_EmailTemplateDetail: {
1591
- data: components["schemas"]["EmailTemplateDetail"];
2623
+ responses: {
2624
+ /** @description Created post reference. */
2625
+ 200: {
2626
+ headers: {
2627
+ [name: string]: unknown;
2628
+ };
2629
+ content: {
2630
+ "application/json": components["schemas"]["ApiResponse_PostCreateResult"];
2631
+ };
2632
+ };
2633
+ default: components["responses"]["ApiError"];
1592
2634
  };
1593
- Envelope_Contact: {
1594
- data: components["schemas"]["Contact"];
2635
+ };
2636
+ listPostChannels: {
2637
+ parameters: {
2638
+ query?: never;
2639
+ header?: never;
2640
+ path?: never;
2641
+ cookie?: never;
1595
2642
  };
1596
- Envelope_ContactCreateResult: {
1597
- data: components["schemas"]["ContactCreateResult"];
2643
+ requestBody?: never;
2644
+ responses: {
2645
+ /** @description Connected channels. */
2646
+ 200: {
2647
+ headers: {
2648
+ [name: string]: unknown;
2649
+ };
2650
+ content: {
2651
+ "application/json": components["schemas"]["ApiResponse_ChannelArray"];
2652
+ };
2653
+ };
2654
+ default: components["responses"]["ApiError"];
1598
2655
  };
1599
- Envelope_ContactUpdateResult: {
1600
- data: components["schemas"]["ContactUpdateResult"];
2656
+ };
2657
+ getPost: {
2658
+ parameters: {
2659
+ query?: never;
2660
+ header?: never;
2661
+ path: {
2662
+ id: components["parameters"]["Id"];
2663
+ };
2664
+ cookie?: never;
1601
2665
  };
1602
- Envelope_ContactRemoveResult: {
1603
- data: components["schemas"]["ContactRemoveResult"];
2666
+ requestBody?: never;
2667
+ responses: {
2668
+ /** @description Post detail. */
2669
+ 200: {
2670
+ headers: {
2671
+ [name: string]: unknown;
2672
+ };
2673
+ content: {
2674
+ "application/json": components["schemas"]["ApiResponse_PostDetail"];
2675
+ };
2676
+ };
2677
+ default: components["responses"]["ApiError"];
1604
2678
  };
1605
- Envelope_ContactNoteResult: {
1606
- data: components["schemas"]["ContactNoteResult"];
2679
+ };
2680
+ deletePost: {
2681
+ parameters: {
2682
+ query?: never;
2683
+ header?: never;
2684
+ path: {
2685
+ id: components["parameters"]["Id"];
2686
+ };
2687
+ cookie?: never;
1607
2688
  };
1608
- Envelope_ImportContactsResult: {
1609
- data: components["schemas"]["ImportContactsResult"];
2689
+ requestBody?: never;
2690
+ responses: {
2691
+ /** @description Delete result. */
2692
+ 200: {
2693
+ headers: {
2694
+ [name: string]: unknown;
2695
+ };
2696
+ content: {
2697
+ "application/json": components["schemas"]["ApiResponse_Success"];
2698
+ };
2699
+ };
2700
+ default: components["responses"]["ApiError"];
1610
2701
  };
1611
- Envelope_Deal: {
1612
- data: components["schemas"]["Deal"];
2702
+ };
2703
+ updatePost: {
2704
+ parameters: {
2705
+ query?: never;
2706
+ header?: never;
2707
+ path: {
2708
+ id: components["parameters"]["Id"];
2709
+ };
2710
+ cookie?: never;
2711
+ };
2712
+ requestBody: {
2713
+ content: {
2714
+ "application/json": components["schemas"]["UpdatePostInput"];
2715
+ };
1613
2716
  };
1614
- Envelope_DealCreateResult: {
1615
- data: components["schemas"]["DealCreateResult"];
2717
+ responses: {
2718
+ /** @description Update result. */
2719
+ 200: {
2720
+ headers: {
2721
+ [name: string]: unknown;
2722
+ };
2723
+ content: {
2724
+ "application/json": components["schemas"]["ApiResponse_Success"];
2725
+ };
2726
+ };
2727
+ default: components["responses"]["ApiError"];
1616
2728
  };
1617
- Envelope_DealUpdateResult: {
1618
- data: components["schemas"]["DealUpdateResult"];
2729
+ };
2730
+ schedulePost: {
2731
+ parameters: {
2732
+ query?: never;
2733
+ header?: never;
2734
+ path: {
2735
+ id: components["parameters"]["Id"];
2736
+ };
2737
+ cookie?: never;
1619
2738
  };
1620
- Envelope_DealRemoveResult: {
1621
- data: components["schemas"]["DealRemoveResult"];
2739
+ requestBody: {
2740
+ content: {
2741
+ "application/json": components["schemas"]["SchedulePostInput"];
2742
+ };
1622
2743
  };
1623
- /** @description Provide exactly one of `url`, `orgnr`, or `name`. */
1624
- ScanCreateInput: {
1625
- url?: string;
1626
- orgnr?: string;
1627
- name?: string;
1628
- } & (unknown | unknown | unknown);
1629
- ScanCreateResult: {
1630
- id: string;
1631
- status: string;
1632
- message?: string;
2744
+ responses: {
2745
+ /** @description Schedule result. */
2746
+ 200: {
2747
+ headers: {
2748
+ [name: string]: unknown;
2749
+ };
2750
+ content: {
2751
+ "application/json": components["schemas"]["ApiResponse_ScheduleResult"];
2752
+ };
2753
+ };
2754
+ default: components["responses"]["ApiError"];
1633
2755
  };
1634
- ScanCompany: {
1635
- orgnr: string;
1636
- name: string;
1637
- org_form: string | null;
1638
- industry: string | null;
1639
- city: string | null;
1640
- website: string | null;
2756
+ };
2757
+ publishPost: {
2758
+ parameters: {
2759
+ query?: never;
2760
+ header?: never;
2761
+ path: {
2762
+ id: components["parameters"]["Id"];
2763
+ };
2764
+ cookie?: never;
1641
2765
  };
1642
- ScanJob: {
1643
- id: string;
1644
- /** @description pending | running | done | failed */
1645
- status: string;
1646
- input: components["schemas"]["ScanCreateInput"];
1647
- resolved: {
1648
- orgnr?: string;
1649
- companyName?: string;
1650
- websiteUrl?: string;
1651
- } | null;
1652
- /** @description Versioned findings payload (see the SDK `ScanResultPayload` type); additive per `version`. The stable core is documented below; further sections (registry, signals, pagespeed, seo, ai, gdpr, mailAuth, httpsOk) evolve additively. */
1653
- result: ({
1654
- version: number;
1655
- /** @description Weighted composite score (0-100); null when unmeasurable. */
1656
- nettskaar: number | null;
1657
- /** @description Per-axis 0-100 scores; null axes were unmeasurable. */
1658
- subScores: {
1659
- fart: number | null;
1660
- google: number | null;
1661
- ai: number | null;
1662
- trygghet: number | null;
1663
- omdomme: number | null;
2766
+ requestBody?: never;
2767
+ responses: {
2768
+ /** @description Publish result. */
2769
+ 200: {
2770
+ headers: {
2771
+ [name: string]: unknown;
1664
2772
  };
1665
- } & {
1666
- [key: string]: unknown;
1667
- }) | null;
1668
- /** @description Public-safe failure code (company_not_found, no_website, …). */
1669
- error: string | null;
1670
- /** Format: date-time */
1671
- created_at: string | null;
1672
- /** Format: date-time */
1673
- finished_at: string | null;
2773
+ content: {
2774
+ "application/json": components["schemas"]["ApiResponse_PublishResult"];
2775
+ };
2776
+ };
2777
+ default: components["responses"]["ApiError"];
1674
2778
  };
1675
- Envelope_ScanCreateResult: {
1676
- data: components["schemas"]["ScanCreateResult"];
2779
+ };
2780
+ sendEmail: {
2781
+ parameters: {
2782
+ query?: never;
2783
+ header?: never;
2784
+ path?: never;
2785
+ cookie?: never;
1677
2786
  };
1678
- Envelope_ScanCompanyArray: {
1679
- data: components["schemas"]["ScanCompany"][];
2787
+ requestBody: {
2788
+ content: {
2789
+ "application/json": components["schemas"]["SendEmailInput"];
2790
+ };
1680
2791
  };
1681
- Envelope_ScanJob: {
1682
- data: components["schemas"]["ScanJob"];
2792
+ responses: {
2793
+ /** @description Email queued. */
2794
+ 202: {
2795
+ headers: {
2796
+ [name: string]: unknown;
2797
+ };
2798
+ content: {
2799
+ "application/json": components["schemas"]["ApiResponse_EmailSendResult"];
2800
+ };
2801
+ };
2802
+ default: components["responses"]["ApiError"];
1683
2803
  };
1684
- Envelope_GdprExportRequest: {
1685
- data: components["schemas"]["GdprExportRequest"];
2804
+ };
2805
+ batchSendEmails: {
2806
+ parameters: {
2807
+ query?: never;
2808
+ header?: never;
2809
+ path?: never;
2810
+ cookie?: never;
1686
2811
  };
1687
- Envelope_GdprExportArray: {
1688
- data: components["schemas"]["GdprExport"][];
2812
+ requestBody: {
2813
+ content: {
2814
+ "application/json": components["schemas"]["BatchSendInput"];
2815
+ };
1689
2816
  };
1690
- Envelope_GdprExport: {
1691
- data: components["schemas"]["GdprExport"];
2817
+ responses: {
2818
+ /** @description Batch queued. */
2819
+ 202: {
2820
+ headers: {
2821
+ [name: string]: unknown;
2822
+ };
2823
+ content: {
2824
+ "application/json": components["schemas"]["ApiResponse_BatchSendSummary"];
2825
+ };
2826
+ };
2827
+ default: components["responses"]["ApiError"];
1692
2828
  };
1693
- Envelope_ConsentResult: {
1694
- data: components["schemas"]["ConsentResult"];
2829
+ };
2830
+ listEmailTemplates: {
2831
+ parameters: {
2832
+ query?: never;
2833
+ header?: never;
2834
+ path?: never;
2835
+ cookie?: never;
1695
2836
  };
1696
- Envelope_ConsentRecordArray: {
1697
- data: components["schemas"]["ConsentRecord"][];
2837
+ requestBody?: never;
2838
+ responses: {
2839
+ /** @description Active templates. */
2840
+ 200: {
2841
+ headers: {
2842
+ [name: string]: unknown;
2843
+ };
2844
+ content: {
2845
+ "application/json": components["schemas"]["ApiResponse_EmailTemplateArray"];
2846
+ };
2847
+ };
2848
+ default: components["responses"]["ApiError"];
1698
2849
  };
1699
- Envelope_WorkspaceArray: {
1700
- data: components["schemas"]["Workspace"][];
2850
+ };
2851
+ getEmailTemplate: {
2852
+ parameters: {
2853
+ query?: {
2854
+ locale?: string;
2855
+ fallback_locale?: string;
2856
+ };
2857
+ header?: never;
2858
+ path: {
2859
+ slug: components["parameters"]["Slug"];
2860
+ };
2861
+ cookie?: never;
1701
2862
  };
1702
- Envelope_HelpdeskConversation: {
1703
- data: components["schemas"]["HelpdeskConversation"];
2863
+ requestBody?: never;
2864
+ responses: {
2865
+ /** @description Email template detail. */
2866
+ 200: {
2867
+ headers: {
2868
+ [name: string]: unknown;
2869
+ };
2870
+ content: {
2871
+ "application/json": components["schemas"]["ApiResponse_EmailTemplateDetail"];
2872
+ };
2873
+ };
2874
+ default: components["responses"]["ApiError"];
1704
2875
  };
1705
- Envelope_HelpdeskConversationUpdateResult: {
1706
- data: components["schemas"]["HelpdeskConversationUpdateResult"];
2876
+ };
2877
+ getEmailSend: {
2878
+ parameters: {
2879
+ query?: never;
2880
+ header?: never;
2881
+ path: {
2882
+ id: components["parameters"]["Id"];
2883
+ };
2884
+ cookie?: never;
1707
2885
  };
1708
- Envelope_HelpdeskReplyCreateResult: {
1709
- data: components["schemas"]["HelpdeskReplyCreateResult"];
2886
+ requestBody?: never;
2887
+ responses: {
2888
+ /** @description Sent email status. */
2889
+ 200: {
2890
+ headers: {
2891
+ [name: string]: unknown;
2892
+ };
2893
+ content: {
2894
+ "application/json": components["schemas"]["ApiResponse_EmailSend"];
2895
+ };
2896
+ };
2897
+ default: components["responses"]["ApiError"];
1710
2898
  };
1711
- Envelope_WebhookEndpoint: {
1712
- data: components["schemas"]["WebhookEndpoint"];
2899
+ };
2900
+ listContacts: {
2901
+ parameters: {
2902
+ query?: {
2903
+ limit?: components["parameters"]["Limit"];
2904
+ cursor?: components["parameters"]["Cursor"];
2905
+ status?: components["schemas"]["ContactStatus"];
2906
+ email_status?: components["schemas"]["EmailStatus"];
2907
+ /** @description Comma-separated label IDs. */
2908
+ label_ids?: string;
2909
+ search?: string;
2910
+ };
2911
+ header?: never;
2912
+ path?: never;
2913
+ cookie?: never;
1713
2914
  };
1714
- Envelope_WebhookEndpointArray: {
1715
- data: components["schemas"]["WebhookEndpoint"][];
2915
+ requestBody?: never;
2916
+ responses: {
2917
+ /** @description Contacts page. */
2918
+ 200: {
2919
+ headers: {
2920
+ [name: string]: unknown;
2921
+ };
2922
+ content: {
2923
+ "application/json": components["schemas"]["PaginatedResponse_Contact"];
2924
+ };
2925
+ };
2926
+ default: components["responses"]["ApiError"];
1716
2927
  };
1717
- Envelope_WebhookDeleteResult: {
1718
- data: components["schemas"]["WebhookDeleteResult"];
2928
+ };
2929
+ createContact: {
2930
+ parameters: {
2931
+ query?: never;
2932
+ header?: never;
2933
+ path?: never;
2934
+ cookie?: never;
1719
2935
  };
1720
- IssueCapabilityConfirmationInput: {
1721
- /** @description Confirmable capability to mint a token for. */
1722
- capability_id: string;
1723
- /** @description Concrete `/api/v1/...` path to bind the token to. Optional when the capability has exactly one API target; required when it has several. */
1724
- api_path?: string;
1725
- /** @description Values for the capability path template's parameters. */
1726
- path_params?: {
1727
- [key: string]: string | number | boolean;
2936
+ requestBody: {
2937
+ content: {
2938
+ "application/json": components["schemas"]["CreateContactInput"];
1728
2939
  };
1729
- /** @description The exact `Idempotency-Key` the confirmed write will send. The token is bound to it. */
1730
- idempotency_key?: string;
1731
- /** @description Human-readable description of the approved action, retained for audit. */
1732
- preview_summary: string;
1733
- /**
1734
- * @description Asserts that a human on the caller's side approved this specific action.
1735
- * @constant
1736
- */
1737
- user_approved: true;
1738
- };
1739
- CapabilityConfirmation: {
1740
- /** @description Send as the `X-Capability-Confirmation` header on the write. */
1741
- confirmation_token: string;
1742
- /** @constant */
1743
- token_type: "medal_capability_confirmation";
1744
- capability_id: string;
1745
- method: string;
1746
- path: string;
1747
- required_scopes: string[];
1748
- idempotency_key: string | null;
1749
- expires_in: number;
1750
- /** Format: date-time */
1751
- expires_at: string;
1752
- preview_summary: string;
1753
2940
  };
1754
- ApiResponse_CapabilityConfirmation: components["schemas"]["Envelope_CapabilityConfirmation"];
1755
- Envelope_CapabilityConfirmation: {
1756
- data: components["schemas"]["CapabilityConfirmation"];
2941
+ responses: {
2942
+ /** @description Created contact reference. */
2943
+ 200: {
2944
+ headers: {
2945
+ [name: string]: unknown;
2946
+ };
2947
+ content: {
2948
+ "application/json": components["schemas"]["ApiResponse_ContactCreateResult"];
2949
+ };
2950
+ };
2951
+ default: components["responses"]["ApiError"];
1757
2952
  };
1758
- Envelope_WebhookDeliveryArray: {
1759
- data: components["schemas"]["WebhookDelivery"][];
2953
+ };
2954
+ importContacts: {
2955
+ parameters: {
2956
+ query?: never;
2957
+ header?: never;
2958
+ path?: never;
2959
+ cookie?: never;
1760
2960
  };
1761
- Envelope_WebhookTestResult: {
1762
- data: components["schemas"]["WebhookTestResult"];
2961
+ requestBody: {
2962
+ content: {
2963
+ "application/json": {
2964
+ contacts: components["schemas"]["ImportContactInput"][];
2965
+ };
2966
+ };
1763
2967
  };
1764
- Envelope_ConnectLinkCreateResult: {
1765
- data: components["schemas"]["ConnectLinkCreateResult"];
2968
+ responses: {
2969
+ /** @description Import summary. */
2970
+ 200: {
2971
+ headers: {
2972
+ [name: string]: unknown;
2973
+ };
2974
+ content: {
2975
+ "application/json": components["schemas"]["ApiResponse_ImportContactsResult"];
2976
+ };
2977
+ };
2978
+ default: components["responses"]["ApiError"];
1766
2979
  };
1767
- /**
1768
- * @deprecated
1769
- * @description Deprecated — `listChannelConnectLinks` responds with `PaginatedResponse_ConnectLink`. Retained for backwards compatibility with consumers of the generated contract types.
1770
- */
1771
- Envelope_ConnectLinkArray: {
1772
- data: components["schemas"]["ConnectLink"][];
2980
+ };
2981
+ getContact: {
2982
+ parameters: {
2983
+ query?: never;
2984
+ header?: never;
2985
+ path: {
2986
+ id: components["parameters"]["Id"];
2987
+ };
2988
+ cookie?: never;
1773
2989
  };
1774
- Envelope_ConnectLinkRevokeResult: {
1775
- data: components["schemas"]["ConnectLinkRevokeResult"];
2990
+ requestBody?: never;
2991
+ responses: {
2992
+ /** @description Contact. */
2993
+ 200: {
2994
+ headers: {
2995
+ [name: string]: unknown;
2996
+ };
2997
+ content: {
2998
+ "application/json": components["schemas"]["ApiResponse_Contact"];
2999
+ };
3000
+ };
3001
+ default: components["responses"]["ApiError"];
1776
3002
  };
1777
- /**
1778
- * @deprecated
1779
- * @description Deprecated — `listChannelConnections` responds with `PaginatedResponse_ChannelConnection`. Retained for backwards compatibility with consumers of the generated contract types.
1780
- */
1781
- Envelope_ChannelConnectionArray: {
1782
- data: components["schemas"]["ChannelConnection"][];
3003
+ };
3004
+ deleteContact: {
3005
+ parameters: {
3006
+ query?: never;
3007
+ header?: never;
3008
+ path: {
3009
+ id: components["parameters"]["Id"];
3010
+ };
3011
+ cookie?: never;
1783
3012
  };
1784
- Envelope_ChannelConnectionDisconnectResult: {
1785
- data: components["schemas"]["ChannelConnectionDisconnectResult"];
3013
+ requestBody?: never;
3014
+ responses: {
3015
+ /** @description Delete result. */
3016
+ 200: {
3017
+ headers: {
3018
+ [name: string]: unknown;
3019
+ };
3020
+ content: {
3021
+ "application/json": components["schemas"]["ApiResponse_ContactRemoveResult"];
3022
+ };
3023
+ };
3024
+ default: components["responses"]["ApiError"];
1786
3025
  };
1787
3026
  };
1788
- responses: {
1789
- /** @description API error. */
1790
- ApiError: {
1791
- headers: {
1792
- [name: string]: unknown;
3027
+ updateContact: {
3028
+ parameters: {
3029
+ query?: never;
3030
+ header?: never;
3031
+ path: {
3032
+ id: components["parameters"]["Id"];
1793
3033
  };
3034
+ cookie?: never;
3035
+ };
3036
+ requestBody: {
1794
3037
  content: {
1795
- "application/json": components["schemas"]["ApiError"];
3038
+ "application/json": components["schemas"]["UpdateContactInput"];
1796
3039
  };
1797
3040
  };
3041
+ responses: {
3042
+ /** @description Update result. */
3043
+ 200: {
3044
+ headers: {
3045
+ [name: string]: unknown;
3046
+ };
3047
+ content: {
3048
+ "application/json": components["schemas"]["ApiResponse_ContactUpdateResult"];
3049
+ };
3050
+ };
3051
+ default: components["responses"]["ApiError"];
3052
+ };
1798
3053
  };
1799
- parameters: {
1800
- Id: string;
1801
- Slug: string;
1802
- Cursor: string;
1803
- Limit: number;
1804
- };
1805
- requestBodies: never;
1806
- headers: never;
1807
- pathItems: never;
1808
- }
1809
- type $defs = Record<string, never>;
1810
- interface operations {
1811
- listPosts: {
3054
+ listContactActivities: {
1812
3055
  parameters: {
1813
3056
  query?: {
1814
3057
  limit?: components["parameters"]["Limit"];
1815
3058
  cursor?: components["parameters"]["Cursor"];
1816
- status?: string;
1817
- type?: components["schemas"]["PostType"];
1818
3059
  };
1819
3060
  header?: never;
1820
- path?: never;
3061
+ path: {
3062
+ id: components["parameters"]["Id"];
3063
+ };
1821
3064
  cookie?: never;
1822
3065
  };
1823
3066
  requestBody?: never;
1824
3067
  responses: {
1825
- /** @description Posts page. */
3068
+ /** @description Contact activities page. */
1826
3069
  200: {
1827
3070
  headers: {
1828
3071
  [name: string]: unknown;
1829
3072
  };
1830
3073
  content: {
1831
- "application/json": components["schemas"]["PaginatedResponse_Post"];
3074
+ "application/json": components["schemas"]["PaginatedResponse_Activity"];
1832
3075
  };
1833
3076
  };
1834
3077
  default: components["responses"]["ApiError"];
1835
3078
  };
1836
3079
  };
1837
- createPost: {
3080
+ addContactNote: {
1838
3081
  parameters: {
1839
3082
  query?: never;
1840
3083
  header?: never;
1841
- path?: never;
3084
+ path: {
3085
+ id: components["parameters"]["Id"];
3086
+ };
1842
3087
  cookie?: never;
1843
3088
  };
1844
3089
  requestBody: {
1845
3090
  content: {
1846
- "application/json": components["schemas"]["CreatePostInput"];
3091
+ "application/json": components["schemas"]["AddNoteInput"];
1847
3092
  };
1848
3093
  };
1849
3094
  responses: {
1850
- /** @description Created post reference. */
3095
+ /** @description Created note reference. */
1851
3096
  200: {
1852
3097
  headers: {
1853
3098
  [name: string]: unknown;
1854
3099
  };
1855
3100
  content: {
1856
- "application/json": components["schemas"]["ApiResponse_PostCreateResult"];
3101
+ "application/json": components["schemas"]["ApiResponse_ContactNoteResult"];
1857
3102
  };
1858
3103
  };
1859
3104
  default: components["responses"]["ApiError"];
1860
3105
  };
1861
3106
  };
1862
- listPostChannels: {
3107
+ listDeals: {
3108
+ parameters: {
3109
+ query?: {
3110
+ limit?: components["parameters"]["Limit"];
3111
+ cursor?: components["parameters"]["Cursor"];
3112
+ status?: components["schemas"]["DealStatus"];
3113
+ search?: string;
3114
+ };
3115
+ header?: never;
3116
+ path?: never;
3117
+ cookie?: never;
3118
+ };
3119
+ requestBody?: never;
3120
+ responses: {
3121
+ /** @description Deals page. */
3122
+ 200: {
3123
+ headers: {
3124
+ [name: string]: unknown;
3125
+ };
3126
+ content: {
3127
+ "application/json": components["schemas"]["PaginatedResponse_Deal"];
3128
+ };
3129
+ };
3130
+ default: components["responses"]["ApiError"];
3131
+ };
3132
+ };
3133
+ createDeal: {
1863
3134
  parameters: {
1864
3135
  query?: never;
1865
3136
  header?: never;
1866
3137
  path?: never;
1867
3138
  cookie?: never;
1868
3139
  };
1869
- requestBody?: never;
3140
+ requestBody: {
3141
+ content: {
3142
+ "application/json": components["schemas"]["CreateDealInput"];
3143
+ };
3144
+ };
1870
3145
  responses: {
1871
- /** @description Connected channels. */
3146
+ /** @description Created deal reference. */
1872
3147
  200: {
1873
3148
  headers: {
1874
3149
  [name: string]: unknown;
1875
3150
  };
1876
3151
  content: {
1877
- "application/json": components["schemas"]["ApiResponse_ChannelArray"];
3152
+ "application/json": components["schemas"]["ApiResponse_DealCreateResult"];
1878
3153
  };
1879
3154
  };
1880
3155
  default: components["responses"]["ApiError"];
1881
3156
  };
1882
3157
  };
1883
- getPost: {
3158
+ getDeal: {
1884
3159
  parameters: {
1885
3160
  query?: never;
1886
3161
  header?: never;
@@ -1891,19 +3166,19 @@ interface operations {
1891
3166
  };
1892
3167
  requestBody?: never;
1893
3168
  responses: {
1894
- /** @description Post detail. */
3169
+ /** @description Deal. */
1895
3170
  200: {
1896
3171
  headers: {
1897
3172
  [name: string]: unknown;
1898
3173
  };
1899
3174
  content: {
1900
- "application/json": components["schemas"]["ApiResponse_PostDetail"];
3175
+ "application/json": components["schemas"]["ApiResponse_Deal"];
1901
3176
  };
1902
3177
  };
1903
3178
  default: components["responses"]["ApiError"];
1904
3179
  };
1905
3180
  };
1906
- deletePost: {
3181
+ deleteDeal: {
1907
3182
  parameters: {
1908
3183
  query?: never;
1909
3184
  header?: never;
@@ -1920,13 +3195,13 @@ interface operations {
1920
3195
  [name: string]: unknown;
1921
3196
  };
1922
3197
  content: {
1923
- "application/json": components["schemas"]["ApiResponse_Success"];
3198
+ "application/json": components["schemas"]["ApiResponse_DealRemoveResult"];
1924
3199
  };
1925
3200
  };
1926
3201
  default: components["responses"]["ApiError"];
1927
3202
  };
1928
3203
  };
1929
- updatePost: {
3204
+ updateDeal: {
1930
3205
  parameters: {
1931
3206
  query?: never;
1932
3207
  header?: never;
@@ -1937,7 +3212,7 @@ interface operations {
1937
3212
  };
1938
3213
  requestBody: {
1939
3214
  content: {
1940
- "application/json": components["schemas"]["UpdatePostInput"];
3215
+ "application/json": components["schemas"]["UpdateDealInput"];
1941
3216
  };
1942
3217
  };
1943
3218
  responses: {
@@ -1947,160 +3222,171 @@ interface operations {
1947
3222
  [name: string]: unknown;
1948
3223
  };
1949
3224
  content: {
1950
- "application/json": components["schemas"]["ApiResponse_Success"];
3225
+ "application/json": components["schemas"]["ApiResponse_DealUpdateResult"];
1951
3226
  };
1952
3227
  };
1953
3228
  default: components["responses"]["ApiError"];
1954
3229
  };
1955
3230
  };
1956
- schedulePost: {
3231
+ listBookings: {
1957
3232
  parameters: {
1958
- query?: never;
1959
- header?: never;
1960
- path: {
1961
- id: components["parameters"]["Id"];
3233
+ query?: {
3234
+ limit?: components["parameters"]["Limit"];
3235
+ cursor?: components["parameters"]["Cursor"];
3236
+ /** @description Only bookings starting at or after this instant. */
3237
+ from_ts?: components["schemas"]["BookingTimestampInput"];
3238
+ /** @description Only bookings starting before this instant. */
3239
+ to_ts?: components["schemas"]["BookingTimestampInput"];
3240
+ status?: components["schemas"]["BookingStatus"];
3241
+ resource_id?: string;
1962
3242
  };
3243
+ header?: never;
3244
+ path?: never;
1963
3245
  cookie?: never;
1964
3246
  };
1965
- requestBody: {
1966
- content: {
1967
- "application/json": components["schemas"]["SchedulePostInput"];
1968
- };
1969
- };
3247
+ requestBody?: never;
1970
3248
  responses: {
1971
- /** @description Schedule result. */
3249
+ /** @description Bookings page. */
1972
3250
  200: {
1973
3251
  headers: {
1974
3252
  [name: string]: unknown;
1975
3253
  };
1976
3254
  content: {
1977
- "application/json": components["schemas"]["ApiResponse_ScheduleResult"];
3255
+ "application/json": components["schemas"]["PaginatedResponse_Booking"];
1978
3256
  };
1979
3257
  };
1980
3258
  default: components["responses"]["ApiError"];
1981
3259
  };
1982
3260
  };
1983
- publishPost: {
3261
+ createBooking: {
1984
3262
  parameters: {
1985
3263
  query?: never;
1986
3264
  header?: never;
1987
- path: {
1988
- id: components["parameters"]["Id"];
1989
- };
3265
+ path?: never;
1990
3266
  cookie?: never;
1991
3267
  };
1992
- requestBody?: never;
3268
+ requestBody: {
3269
+ content: {
3270
+ "application/json": components["schemas"]["CreateBookingInput"];
3271
+ };
3272
+ };
1993
3273
  responses: {
1994
- /** @description Publish result. */
1995
- 200: {
3274
+ /** @description Created bookings, in request order. */
3275
+ 201: {
1996
3276
  headers: {
1997
3277
  [name: string]: unknown;
1998
3278
  };
1999
3279
  content: {
2000
- "application/json": components["schemas"]["ApiResponse_PublishResult"];
3280
+ "application/json": components["schemas"]["ApiResponse_BookingCreateResult"];
2001
3281
  };
2002
3282
  };
2003
3283
  default: components["responses"]["ApiError"];
2004
3284
  };
2005
3285
  };
2006
- sendEmail: {
3286
+ listBookingServices: {
2007
3287
  parameters: {
2008
- query?: never;
3288
+ query?: {
3289
+ /** @description Include services with `active: false`. Defaults to active-only. */
3290
+ include_inactive?: boolean;
3291
+ };
2009
3292
  header?: never;
2010
3293
  path?: never;
2011
3294
  cookie?: never;
2012
3295
  };
2013
- requestBody: {
2014
- content: {
2015
- "application/json": components["schemas"]["SendEmailInput"];
2016
- };
2017
- };
3296
+ requestBody?: never;
2018
3297
  responses: {
2019
- /** @description Email queued. */
2020
- 202: {
3298
+ /** @description Bookable service catalogue. */
3299
+ 200: {
2021
3300
  headers: {
2022
3301
  [name: string]: unknown;
2023
3302
  };
2024
3303
  content: {
2025
- "application/json": components["schemas"]["ApiResponse_EmailSendResult"];
3304
+ "application/json": components["schemas"]["ApiResponse_BookingServiceArray"];
2026
3305
  };
2027
3306
  };
2028
3307
  default: components["responses"]["ApiError"];
2029
3308
  };
2030
3309
  };
2031
- batchSendEmails: {
3310
+ listBookingResources: {
2032
3311
  parameters: {
2033
3312
  query?: never;
2034
3313
  header?: never;
2035
3314
  path?: never;
2036
3315
  cookie?: never;
2037
3316
  };
2038
- requestBody: {
2039
- content: {
2040
- "application/json": components["schemas"]["BatchSendInput"];
2041
- };
2042
- };
3317
+ requestBody?: never;
2043
3318
  responses: {
2044
- /** @description Batch queued. */
2045
- 202: {
3319
+ /** @description Bookable resources — staff, rooms, and equipment. */
3320
+ 200: {
2046
3321
  headers: {
2047
3322
  [name: string]: unknown;
2048
3323
  };
2049
3324
  content: {
2050
- "application/json": components["schemas"]["ApiResponse_BatchSendSummary"];
3325
+ "application/json": components["schemas"]["ApiResponse_BookingResourceArray"];
2051
3326
  };
2052
3327
  };
2053
3328
  default: components["responses"]["ApiError"];
2054
3329
  };
2055
3330
  };
2056
- listEmailTemplates: {
3331
+ listBookingAvailability: {
2057
3332
  parameters: {
2058
- query?: never;
3333
+ query: {
3334
+ service_id: string;
3335
+ /** @description Start of the window. */
3336
+ from_ts: components["schemas"]["BookingTimestampInput"];
3337
+ /** @description End of the window; must be after `from_ts`. */
3338
+ to_ts: components["schemas"]["BookingTimestampInput"];
3339
+ /** @description Restrict slots to one resource. */
3340
+ resource_id?: string;
3341
+ };
2059
3342
  header?: never;
2060
3343
  path?: never;
2061
3344
  cookie?: never;
2062
3345
  };
2063
3346
  requestBody?: never;
2064
3347
  responses: {
2065
- /** @description Active templates. */
3348
+ /** @description Free slots. */
2066
3349
  200: {
2067
3350
  headers: {
2068
3351
  [name: string]: unknown;
2069
3352
  };
2070
3353
  content: {
2071
- "application/json": components["schemas"]["ApiResponse_EmailTemplateArray"];
3354
+ "application/json": components["schemas"]["ApiResponse_BookingSlotArray"];
2072
3355
  };
2073
3356
  };
2074
3357
  default: components["responses"]["ApiError"];
2075
3358
  };
2076
3359
  };
2077
- getEmailTemplate: {
3360
+ listBookingSchedule: {
2078
3361
  parameters: {
2079
- query?: {
2080
- locale?: string;
2081
- fallback_locale?: string;
3362
+ query: {
3363
+ service_id: string;
3364
+ /** @description Start of the window. */
3365
+ from_ts: components["schemas"]["BookingTimestampInput"];
3366
+ /** @description End of the window; must be after `from_ts`. */
3367
+ to_ts: components["schemas"]["BookingTimestampInput"];
3368
+ /** @description Restrict to one resource's hours. */
3369
+ resource_id?: string;
2082
3370
  };
2083
3371
  header?: never;
2084
- path: {
2085
- slug: components["parameters"]["Slug"];
2086
- };
3372
+ path?: never;
2087
3373
  cookie?: never;
2088
3374
  };
2089
3375
  requestBody?: never;
2090
3376
  responses: {
2091
- /** @description Email template detail. */
3377
+ /** @description Open dates. */
2092
3378
  200: {
2093
3379
  headers: {
2094
3380
  [name: string]: unknown;
2095
3381
  };
2096
3382
  content: {
2097
- "application/json": components["schemas"]["ApiResponse_EmailTemplateDetail"];
3383
+ "application/json": components["schemas"]["ApiResponse_BookingScheduleDayArray"];
2098
3384
  };
2099
3385
  };
2100
3386
  default: components["responses"]["ApiError"];
2101
3387
  };
2102
3388
  };
2103
- getEmailSend: {
3389
+ getBooking: {
2104
3390
  parameters: {
2105
3391
  query?: never;
2106
3392
  header?: never;
@@ -2111,100 +3397,100 @@ interface operations {
2111
3397
  };
2112
3398
  requestBody?: never;
2113
3399
  responses: {
2114
- /** @description Sent email status. */
3400
+ /** @description Booking. */
2115
3401
  200: {
2116
3402
  headers: {
2117
3403
  [name: string]: unknown;
2118
3404
  };
2119
3405
  content: {
2120
- "application/json": components["schemas"]["ApiResponse_EmailSend"];
3406
+ "application/json": components["schemas"]["ApiResponse_Booking"];
2121
3407
  };
2122
3408
  };
2123
3409
  default: components["responses"]["ApiError"];
2124
3410
  };
2125
3411
  };
2126
- listContacts: {
3412
+ updateBooking: {
2127
3413
  parameters: {
2128
- query?: {
2129
- limit?: components["parameters"]["Limit"];
2130
- cursor?: components["parameters"]["Cursor"];
2131
- status?: components["schemas"]["ContactStatus"];
2132
- email_status?: components["schemas"]["EmailStatus"];
2133
- /** @description Comma-separated label IDs. */
2134
- label_ids?: string;
2135
- search?: string;
2136
- };
3414
+ query?: never;
2137
3415
  header?: never;
2138
- path?: never;
3416
+ path: {
3417
+ id: components["parameters"]["Id"];
3418
+ };
2139
3419
  cookie?: never;
2140
3420
  };
2141
- requestBody?: never;
3421
+ requestBody: {
3422
+ content: {
3423
+ "application/json": components["schemas"]["UpdateBookingInput"];
3424
+ };
3425
+ };
2142
3426
  responses: {
2143
- /** @description Contacts page. */
3427
+ /** @description The updated booking. */
2144
3428
  200: {
2145
3429
  headers: {
2146
3430
  [name: string]: unknown;
2147
3431
  };
2148
3432
  content: {
2149
- "application/json": components["schemas"]["PaginatedResponse_Contact"];
3433
+ "application/json": components["schemas"]["ApiResponse_Booking"];
2150
3434
  };
2151
3435
  };
2152
3436
  default: components["responses"]["ApiError"];
2153
3437
  };
2154
3438
  };
2155
- createContact: {
3439
+ cancelBooking: {
2156
3440
  parameters: {
2157
3441
  query?: never;
2158
3442
  header?: never;
2159
- path?: never;
3443
+ path: {
3444
+ id: components["parameters"]["Id"];
3445
+ };
2160
3446
  cookie?: never;
2161
3447
  };
2162
3448
  requestBody: {
2163
3449
  content: {
2164
- "application/json": components["schemas"]["CreateContactInput"];
3450
+ "application/json": components["schemas"]["CancelBookingInput"];
2165
3451
  };
2166
3452
  };
2167
3453
  responses: {
2168
- /** @description Created contact reference. */
3454
+ /** @description Cancel result. */
2169
3455
  200: {
2170
3456
  headers: {
2171
3457
  [name: string]: unknown;
2172
3458
  };
2173
3459
  content: {
2174
- "application/json": components["schemas"]["ApiResponse_ContactCreateResult"];
3460
+ "application/json": components["schemas"]["ApiResponse_BookingActionResult"];
2175
3461
  };
2176
3462
  };
2177
3463
  default: components["responses"]["ApiError"];
2178
3464
  };
2179
3465
  };
2180
- importContacts: {
3466
+ rescheduleBooking: {
2181
3467
  parameters: {
2182
3468
  query?: never;
2183
3469
  header?: never;
2184
- path?: never;
3470
+ path: {
3471
+ id: components["parameters"]["Id"];
3472
+ };
2185
3473
  cookie?: never;
2186
3474
  };
2187
3475
  requestBody: {
2188
3476
  content: {
2189
- "application/json": {
2190
- contacts: components["schemas"]["ImportContactInput"][];
2191
- };
3477
+ "application/json": components["schemas"]["RescheduleBookingInput"];
2192
3478
  };
2193
3479
  };
2194
3480
  responses: {
2195
- /** @description Import summary. */
3481
+ /** @description Reschedule result. */
2196
3482
  200: {
2197
3483
  headers: {
2198
3484
  [name: string]: unknown;
2199
3485
  };
2200
3486
  content: {
2201
- "application/json": components["schemas"]["ApiResponse_ImportContactsResult"];
3487
+ "application/json": components["schemas"]["ApiResponse_BookingRescheduleResult"];
2202
3488
  };
2203
3489
  };
2204
3490
  default: components["responses"]["ApiError"];
2205
3491
  };
2206
3492
  };
2207
- getContact: {
3493
+ markBookingNoShow: {
2208
3494
  parameters: {
2209
3495
  query?: never;
2210
3496
  header?: never;
@@ -2215,241 +3501,288 @@ interface operations {
2215
3501
  };
2216
3502
  requestBody?: never;
2217
3503
  responses: {
2218
- /** @description Contact. */
3504
+ /** @description No-show result. */
2219
3505
  200: {
2220
3506
  headers: {
2221
3507
  [name: string]: unknown;
2222
3508
  };
2223
3509
  content: {
2224
- "application/json": components["schemas"]["ApiResponse_Contact"];
3510
+ "application/json": components["schemas"]["ApiResponse_BookingActionResult"];
2225
3511
  };
2226
3512
  };
2227
3513
  default: components["responses"]["ApiError"];
2228
3514
  };
2229
3515
  };
2230
- deleteContact: {
3516
+ getManagedBooking: {
2231
3517
  parameters: {
2232
3518
  query?: never;
2233
3519
  header?: never;
2234
3520
  path: {
2235
- id: components["parameters"]["Id"];
3521
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
3522
+ token: components["parameters"]["ManageToken"];
2236
3523
  };
2237
3524
  cookie?: never;
2238
3525
  };
2239
3526
  requestBody?: never;
2240
3527
  responses: {
2241
- /** @description Delete result. */
3528
+ /** @description Manage summary. An unknown token and a token belonging to another workspace both answer 404, so this is not an existence oracle. */
2242
3529
  200: {
2243
3530
  headers: {
2244
3531
  [name: string]: unknown;
2245
3532
  };
2246
3533
  content: {
2247
- "application/json": components["schemas"]["ApiResponse_ContactRemoveResult"];
3534
+ "application/json": components["schemas"]["ApiResponse_ManageSummary"];
2248
3535
  };
2249
3536
  };
2250
3537
  default: components["responses"]["ApiError"];
2251
3538
  };
2252
3539
  };
2253
- updateContact: {
3540
+ cancelManagedBooking: {
2254
3541
  parameters: {
2255
3542
  query?: never;
2256
3543
  header?: never;
2257
3544
  path: {
2258
- id: components["parameters"]["Id"];
3545
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
3546
+ token: components["parameters"]["ManageToken"];
2259
3547
  };
2260
3548
  cookie?: never;
2261
3549
  };
2262
3550
  requestBody: {
2263
3551
  content: {
2264
- "application/json": components["schemas"]["UpdateContactInput"];
3552
+ "application/json": components["schemas"]["CancelBookingInput"];
2265
3553
  };
2266
3554
  };
2267
3555
  responses: {
2268
- /** @description Update result. */
3556
+ /** @description Cancel result. */
2269
3557
  200: {
2270
3558
  headers: {
2271
3559
  [name: string]: unknown;
2272
3560
  };
2273
3561
  content: {
2274
- "application/json": components["schemas"]["ApiResponse_ContactUpdateResult"];
3562
+ "application/json": components["schemas"]["ApiResponse_BookingActionResult"];
2275
3563
  };
2276
3564
  };
2277
3565
  default: components["responses"]["ApiError"];
2278
3566
  };
2279
3567
  };
2280
- listContactActivities: {
3568
+ rescheduleManagedBooking: {
2281
3569
  parameters: {
2282
- query?: {
2283
- limit?: components["parameters"]["Limit"];
2284
- cursor?: components["parameters"]["Cursor"];
2285
- };
3570
+ query?: never;
2286
3571
  header?: never;
2287
3572
  path: {
2288
- id: components["parameters"]["Id"];
3573
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
3574
+ token: components["parameters"]["ManageToken"];
2289
3575
  };
2290
3576
  cookie?: never;
2291
3577
  };
2292
- requestBody?: never;
3578
+ requestBody: {
3579
+ content: {
3580
+ "application/json": components["schemas"]["RescheduleBookingInput"];
3581
+ };
3582
+ };
2293
3583
  responses: {
2294
- /** @description Contact activities page. */
3584
+ /** @description Reschedule result. */
2295
3585
  200: {
2296
3586
  headers: {
2297
3587
  [name: string]: unknown;
2298
3588
  };
2299
3589
  content: {
2300
- "application/json": components["schemas"]["PaginatedResponse_Activity"];
3590
+ "application/json": components["schemas"]["ApiResponse_BookingRescheduleResult"];
2301
3591
  };
2302
3592
  };
2303
3593
  default: components["responses"]["ApiError"];
2304
3594
  };
2305
3595
  };
2306
- addContactNote: {
3596
+ startPortalLogin: {
2307
3597
  parameters: {
2308
3598
  query?: never;
2309
3599
  header?: never;
2310
- path: {
2311
- id: components["parameters"]["Id"];
3600
+ path?: never;
3601
+ cookie?: never;
3602
+ };
3603
+ requestBody: {
3604
+ content: {
3605
+ "application/json": components["schemas"]["PortalLoginStartInput"];
2312
3606
  };
3607
+ };
3608
+ responses: {
3609
+ /** @description Code queued (or silently not, for an unknown address). */
3610
+ 202: {
3611
+ headers: {
3612
+ [name: string]: unknown;
3613
+ };
3614
+ content: {
3615
+ "application/json": components["schemas"]["ApiResponse_PortalLoginStartResult"];
3616
+ };
3617
+ };
3618
+ default: components["responses"]["ApiError"];
3619
+ };
3620
+ };
3621
+ verifyPortalLogin: {
3622
+ parameters: {
3623
+ query?: never;
3624
+ header?: never;
3625
+ path?: never;
2313
3626
  cookie?: never;
2314
3627
  };
2315
3628
  requestBody: {
2316
3629
  content: {
2317
- "application/json": components["schemas"]["AddNoteInput"];
3630
+ "application/json": components["schemas"]["PortalVerifyInput"];
2318
3631
  };
2319
3632
  };
2320
3633
  responses: {
2321
- /** @description Created note reference. */
3634
+ /** @description The new session. */
2322
3635
  200: {
2323
3636
  headers: {
2324
3637
  [name: string]: unknown;
2325
3638
  };
2326
3639
  content: {
2327
- "application/json": components["schemas"]["ApiResponse_ContactNoteResult"];
3640
+ "application/json": components["schemas"]["ApiResponse_PortalSession"];
2328
3641
  };
2329
3642
  };
2330
3643
  default: components["responses"]["ApiError"];
2331
3644
  };
2332
3645
  };
2333
- listDeals: {
3646
+ logoutPortal: {
2334
3647
  parameters: {
2335
- query?: {
2336
- limit?: components["parameters"]["Limit"];
2337
- cursor?: components["parameters"]["Cursor"];
2338
- status?: components["schemas"]["DealStatus"];
2339
- search?: string;
3648
+ query?: never;
3649
+ header: {
3650
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
3651
+ "X-Portal-Session": components["parameters"]["PortalSession"];
2340
3652
  };
2341
- header?: never;
2342
3653
  path?: never;
2343
3654
  cookie?: never;
2344
3655
  };
2345
3656
  requestBody?: never;
2346
3657
  responses: {
2347
- /** @description Deals page. */
3658
+ /** @description Session revoked. */
3659
+ 204: {
3660
+ headers: {
3661
+ [name: string]: unknown;
3662
+ };
3663
+ content?: never;
3664
+ };
3665
+ default: components["responses"]["ApiError"];
3666
+ };
3667
+ };
3668
+ getPortalProfile: {
3669
+ parameters: {
3670
+ query?: never;
3671
+ header: {
3672
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
3673
+ "X-Portal-Session": components["parameters"]["PortalSession"];
3674
+ };
3675
+ path?: never;
3676
+ cookie?: never;
3677
+ };
3678
+ requestBody?: never;
3679
+ responses: {
3680
+ /** @description Profile. */
2348
3681
  200: {
2349
3682
  headers: {
2350
3683
  [name: string]: unknown;
2351
3684
  };
2352
3685
  content: {
2353
- "application/json": components["schemas"]["PaginatedResponse_Deal"];
3686
+ "application/json": components["schemas"]["ApiResponse_PortalProfile"];
2354
3687
  };
2355
3688
  };
2356
3689
  default: components["responses"]["ApiError"];
2357
3690
  };
2358
3691
  };
2359
- createDeal: {
3692
+ updatePortalProfile: {
2360
3693
  parameters: {
2361
3694
  query?: never;
2362
- header?: never;
3695
+ header: {
3696
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
3697
+ "X-Portal-Session": components["parameters"]["PortalSession"];
3698
+ };
2363
3699
  path?: never;
2364
3700
  cookie?: never;
2365
3701
  };
2366
3702
  requestBody: {
2367
3703
  content: {
2368
- "application/json": components["schemas"]["CreateDealInput"];
3704
+ "application/json": components["schemas"]["PortalProfilePatch"];
2369
3705
  };
2370
3706
  };
2371
3707
  responses: {
2372
- /** @description Created deal reference. */
3708
+ /** @description Updated profile. */
2373
3709
  200: {
2374
3710
  headers: {
2375
3711
  [name: string]: unknown;
2376
3712
  };
2377
3713
  content: {
2378
- "application/json": components["schemas"]["ApiResponse_DealCreateResult"];
3714
+ "application/json": components["schemas"]["ApiResponse_PortalProfile"];
2379
3715
  };
2380
3716
  };
2381
3717
  default: components["responses"]["ApiError"];
2382
3718
  };
2383
3719
  };
2384
- getDeal: {
3720
+ listPortalBookings: {
2385
3721
  parameters: {
2386
3722
  query?: never;
2387
- header?: never;
2388
- path: {
2389
- id: components["parameters"]["Id"];
3723
+ header: {
3724
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
3725
+ "X-Portal-Session": components["parameters"]["PortalSession"];
2390
3726
  };
3727
+ path?: never;
2391
3728
  cookie?: never;
2392
3729
  };
2393
3730
  requestBody?: never;
2394
3731
  responses: {
2395
- /** @description Deal. */
3732
+ /** @description Bookings. */
2396
3733
  200: {
2397
3734
  headers: {
2398
3735
  [name: string]: unknown;
2399
3736
  };
2400
3737
  content: {
2401
- "application/json": components["schemas"]["ApiResponse_Deal"];
3738
+ "application/json": components["schemas"]["ApiResponse_PortalBookings"];
2402
3739
  };
2403
3740
  };
2404
3741
  default: components["responses"]["ApiError"];
2405
3742
  };
2406
3743
  };
2407
- deleteDeal: {
3744
+ exportPortalData: {
2408
3745
  parameters: {
2409
3746
  query?: never;
2410
- header?: never;
2411
- path: {
2412
- id: components["parameters"]["Id"];
3747
+ header: {
3748
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
3749
+ "X-Portal-Session": components["parameters"]["PortalSession"];
2413
3750
  };
3751
+ path?: never;
2414
3752
  cookie?: never;
2415
3753
  };
2416
3754
  requestBody?: never;
2417
3755
  responses: {
2418
- /** @description Delete result. */
3756
+ /** @description The export. */
2419
3757
  200: {
2420
3758
  headers: {
2421
3759
  [name: string]: unknown;
2422
3760
  };
2423
3761
  content: {
2424
- "application/json": components["schemas"]["ApiResponse_DealRemoveResult"];
3762
+ "application/json": components["schemas"]["ApiResponse_PortalExport"];
2425
3763
  };
2426
3764
  };
2427
3765
  default: components["responses"]["ApiError"];
2428
3766
  };
2429
3767
  };
2430
- updateDeal: {
3768
+ deletePortalAccount: {
2431
3769
  parameters: {
2432
3770
  query?: never;
2433
- header?: never;
2434
- path: {
2435
- id: components["parameters"]["Id"];
3771
+ header: {
3772
+ /** @description The `session_token` returned by `verifyPortalLogin`. A bearer credential for ONE contact — the site's server keeps it in an HttpOnly cookie and forwards it here. Missing answers `401 PORTAL_SESSION_REQUIRED`; unknown, expired or revoked answers `401 PORTAL_SESSION_INVALID`. */
3773
+ "X-Portal-Session": components["parameters"]["PortalSession"];
2436
3774
  };
3775
+ path?: never;
2437
3776
  cookie?: never;
2438
3777
  };
2439
- requestBody: {
2440
- content: {
2441
- "application/json": components["schemas"]["UpdateDealInput"];
2442
- };
2443
- };
3778
+ requestBody?: never;
2444
3779
  responses: {
2445
- /** @description Update result. */
2446
- 200: {
3780
+ /** @description Contact erased and session revoked. */
3781
+ 204: {
2447
3782
  headers: {
2448
3783
  [name: string]: unknown;
2449
3784
  };
2450
- content: {
2451
- "application/json": components["schemas"]["ApiResponse_DealUpdateResult"];
2452
- };
3785
+ content?: never;
2453
3786
  };
2454
3787
  default: components["responses"]["ApiError"];
2455
3788
  };