@medalsocial/sdk 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -0
- package/dist/openapi/medal-social.openapi.json +1842 -258
- package/dist/pilot/index.d.mts +2 -2
- package/dist/pilot/index.d.ts +2 -2
- package/dist/src/index.d.mts +418 -3
- package/dist/src/index.d.ts +418 -3
- package/dist/src/index.js +205 -19
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.mjs +204 -19
- package/dist/src/index.mjs.map +1 -1
- package/dist/src/openapi.generated.d.mts +912 -18
- package/dist/src/openapi.generated.d.ts +912 -18
- package/dist/src/openapi.generated.js.map +1 -1
- package/openapi/medal-social.openapi.yaml +1024 -43
- package/package.json +1 -1
- package/skills/client/SKILL.md +2 -0
- package/skills/resources/SKILL.md +53 -2
|
@@ -414,6 +414,85 @@ interface paths {
|
|
|
414
414
|
patch?: never;
|
|
415
415
|
trace?: never;
|
|
416
416
|
};
|
|
417
|
+
"/api/v1/bookings/persons": {
|
|
418
|
+
parameters: {
|
|
419
|
+
query?: never;
|
|
420
|
+
header?: never;
|
|
421
|
+
path?: never;
|
|
422
|
+
cookie?: never;
|
|
423
|
+
};
|
|
424
|
+
/**
|
|
425
|
+
* List a contact's persons
|
|
426
|
+
* @description Persons a contact books for — a child, a pet, an employee. No login of their own. Active-only unless `include_inactive` is set.
|
|
427
|
+
*/
|
|
428
|
+
get: operations["listContactPersons"];
|
|
429
|
+
put?: never;
|
|
430
|
+
/** Add a person under a contact */
|
|
431
|
+
post: operations["createContactPerson"];
|
|
432
|
+
delete?: never;
|
|
433
|
+
options?: never;
|
|
434
|
+
head?: never;
|
|
435
|
+
patch?: never;
|
|
436
|
+
trace?: never;
|
|
437
|
+
};
|
|
438
|
+
"/api/v1/bookings/relations": {
|
|
439
|
+
parameters: {
|
|
440
|
+
query?: never;
|
|
441
|
+
header?: never;
|
|
442
|
+
path?: never;
|
|
443
|
+
cookie?: never;
|
|
444
|
+
};
|
|
445
|
+
/**
|
|
446
|
+
* List a contact's relations
|
|
447
|
+
* @description Directional relations a contact holds, split into outgoing and incoming.
|
|
448
|
+
*/
|
|
449
|
+
get: operations["listContactRelations"];
|
|
450
|
+
put?: never;
|
|
451
|
+
/** Create a relation from one contact to another */
|
|
452
|
+
post: operations["createContactRelation"];
|
|
453
|
+
delete?: never;
|
|
454
|
+
options?: never;
|
|
455
|
+
head?: never;
|
|
456
|
+
patch?: never;
|
|
457
|
+
trace?: never;
|
|
458
|
+
};
|
|
459
|
+
"/api/v1/bookings/events": {
|
|
460
|
+
parameters: {
|
|
461
|
+
query?: never;
|
|
462
|
+
header?: never;
|
|
463
|
+
path?: never;
|
|
464
|
+
cookie?: never;
|
|
465
|
+
};
|
|
466
|
+
/** List arrangementer in a date range */
|
|
467
|
+
get: operations["listBookingEvents"];
|
|
468
|
+
put?: never;
|
|
469
|
+
/** Create an arrangement from a template */
|
|
470
|
+
post: operations["createBookingEvent"];
|
|
471
|
+
delete?: never;
|
|
472
|
+
options?: never;
|
|
473
|
+
head?: never;
|
|
474
|
+
patch?: never;
|
|
475
|
+
trace?: never;
|
|
476
|
+
};
|
|
477
|
+
"/api/v1/bookings/events/{id}": {
|
|
478
|
+
parameters: {
|
|
479
|
+
query?: never;
|
|
480
|
+
header?: never;
|
|
481
|
+
path: {
|
|
482
|
+
id: components["parameters"]["Id"];
|
|
483
|
+
};
|
|
484
|
+
cookie?: never;
|
|
485
|
+
};
|
|
486
|
+
/** Get an arrangement */
|
|
487
|
+
get: operations["getBookingEvent"];
|
|
488
|
+
put?: never;
|
|
489
|
+
post?: never;
|
|
490
|
+
delete?: never;
|
|
491
|
+
options?: never;
|
|
492
|
+
head?: never;
|
|
493
|
+
patch?: never;
|
|
494
|
+
trace?: never;
|
|
495
|
+
};
|
|
417
496
|
"/api/v1/bookings/{id}": {
|
|
418
497
|
parameters: {
|
|
419
498
|
query?: never;
|
|
@@ -563,6 +642,165 @@ interface paths {
|
|
|
563
642
|
patch?: never;
|
|
564
643
|
trace?: never;
|
|
565
644
|
};
|
|
645
|
+
"/api/v1/portal/login/start": {
|
|
646
|
+
parameters: {
|
|
647
|
+
query?: never;
|
|
648
|
+
header?: never;
|
|
649
|
+
path?: never;
|
|
650
|
+
cookie?: never;
|
|
651
|
+
};
|
|
652
|
+
get?: never;
|
|
653
|
+
put?: never;
|
|
654
|
+
/**
|
|
655
|
+
* E-mail a one-time login code
|
|
656
|
+
* @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`.
|
|
657
|
+
*/
|
|
658
|
+
post: operations["startPortalLogin"];
|
|
659
|
+
delete?: never;
|
|
660
|
+
options?: never;
|
|
661
|
+
head?: never;
|
|
662
|
+
patch?: never;
|
|
663
|
+
trace?: never;
|
|
664
|
+
};
|
|
665
|
+
"/api/v1/portal/login/verify": {
|
|
666
|
+
parameters: {
|
|
667
|
+
query?: never;
|
|
668
|
+
header?: never;
|
|
669
|
+
path?: never;
|
|
670
|
+
cookie?: never;
|
|
671
|
+
};
|
|
672
|
+
get?: never;
|
|
673
|
+
put?: never;
|
|
674
|
+
/**
|
|
675
|
+
* Exchange the e-mailed code for a session
|
|
676
|
+
* @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`.
|
|
677
|
+
*/
|
|
678
|
+
post: operations["verifyPortalLogin"];
|
|
679
|
+
delete?: never;
|
|
680
|
+
options?: never;
|
|
681
|
+
head?: never;
|
|
682
|
+
patch?: never;
|
|
683
|
+
trace?: never;
|
|
684
|
+
};
|
|
685
|
+
"/api/v1/portal/logout": {
|
|
686
|
+
parameters: {
|
|
687
|
+
query?: never;
|
|
688
|
+
header: {
|
|
689
|
+
/** @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`. */
|
|
690
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
691
|
+
};
|
|
692
|
+
path?: never;
|
|
693
|
+
cookie?: never;
|
|
694
|
+
};
|
|
695
|
+
get?: never;
|
|
696
|
+
put?: never;
|
|
697
|
+
/**
|
|
698
|
+
* Revoke the session
|
|
699
|
+
* @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`.
|
|
700
|
+
*/
|
|
701
|
+
post: operations["logoutPortal"];
|
|
702
|
+
delete?: never;
|
|
703
|
+
options?: never;
|
|
704
|
+
head?: never;
|
|
705
|
+
patch?: never;
|
|
706
|
+
trace?: never;
|
|
707
|
+
};
|
|
708
|
+
"/api/v1/portal/me": {
|
|
709
|
+
parameters: {
|
|
710
|
+
query?: never;
|
|
711
|
+
header: {
|
|
712
|
+
/** @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`. */
|
|
713
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
714
|
+
};
|
|
715
|
+
path?: never;
|
|
716
|
+
cookie?: never;
|
|
717
|
+
};
|
|
718
|
+
/**
|
|
719
|
+
* The signed-in contact's profile
|
|
720
|
+
* @description Errors: `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN` (key lacks `read:portal`), `429 RATE_LIMITED`.
|
|
721
|
+
*/
|
|
722
|
+
get: operations["getPortalProfile"];
|
|
723
|
+
put?: never;
|
|
724
|
+
post?: never;
|
|
725
|
+
delete?: never;
|
|
726
|
+
options?: never;
|
|
727
|
+
head?: never;
|
|
728
|
+
/**
|
|
729
|
+
* Update the signed-in contact's profile
|
|
730
|
+
* @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`.
|
|
731
|
+
*/
|
|
732
|
+
patch: operations["updatePortalProfile"];
|
|
733
|
+
trace?: never;
|
|
734
|
+
};
|
|
735
|
+
"/api/v1/portal/me/bookings": {
|
|
736
|
+
parameters: {
|
|
737
|
+
query?: never;
|
|
738
|
+
header: {
|
|
739
|
+
/** @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`. */
|
|
740
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
741
|
+
};
|
|
742
|
+
path?: never;
|
|
743
|
+
cookie?: never;
|
|
744
|
+
};
|
|
745
|
+
/**
|
|
746
|
+
* The signed-in contact's bookings
|
|
747
|
+
* @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`.
|
|
748
|
+
*/
|
|
749
|
+
get: operations["listPortalBookings"];
|
|
750
|
+
put?: never;
|
|
751
|
+
post?: never;
|
|
752
|
+
delete?: never;
|
|
753
|
+
options?: never;
|
|
754
|
+
head?: never;
|
|
755
|
+
patch?: never;
|
|
756
|
+
trace?: never;
|
|
757
|
+
};
|
|
758
|
+
"/api/v1/portal/me/export": {
|
|
759
|
+
parameters: {
|
|
760
|
+
query?: never;
|
|
761
|
+
header: {
|
|
762
|
+
/** @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`. */
|
|
763
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
764
|
+
};
|
|
765
|
+
path?: never;
|
|
766
|
+
cookie?: never;
|
|
767
|
+
};
|
|
768
|
+
get?: never;
|
|
769
|
+
put?: never;
|
|
770
|
+
/**
|
|
771
|
+
* Export everything held about the signed-in contact
|
|
772
|
+
* @description A synchronous GDPR Art. 15 export of the contact's profile, family, consents and bookings, as one JSON document. Unlike `GET /api/v1/portal/me`, `contact.persons` here includes inactive persons so the export is a complete dump. `relations` lists every relation the contact is a party to, exposing only the counterpart's display name. Read-only, so not idempotency-keyed. Errors: `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN`, `429 RATE_LIMITED`.
|
|
773
|
+
*/
|
|
774
|
+
post: operations["exportPortalData"];
|
|
775
|
+
delete?: never;
|
|
776
|
+
options?: never;
|
|
777
|
+
head?: never;
|
|
778
|
+
patch?: never;
|
|
779
|
+
trace?: never;
|
|
780
|
+
};
|
|
781
|
+
"/api/v1/portal/me/delete": {
|
|
782
|
+
parameters: {
|
|
783
|
+
query?: never;
|
|
784
|
+
header: {
|
|
785
|
+
/** @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`. */
|
|
786
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
787
|
+
};
|
|
788
|
+
path?: never;
|
|
789
|
+
cookie?: never;
|
|
790
|
+
};
|
|
791
|
+
get?: never;
|
|
792
|
+
put?: never;
|
|
793
|
+
/**
|
|
794
|
+
* Erase the signed-in contact
|
|
795
|
+
* @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`.
|
|
796
|
+
*/
|
|
797
|
+
post: operations["deletePortalAccount"];
|
|
798
|
+
delete?: never;
|
|
799
|
+
options?: never;
|
|
800
|
+
head?: never;
|
|
801
|
+
patch?: never;
|
|
802
|
+
trace?: never;
|
|
803
|
+
};
|
|
566
804
|
"/api/v1/gdpr/export": {
|
|
567
805
|
parameters: {
|
|
568
806
|
query?: never;
|
|
@@ -1444,6 +1682,12 @@ interface components {
|
|
|
1444
1682
|
booked_for_name: string | null;
|
|
1445
1683
|
/** @description A birth year, not a birthdate — the age bracket is all that is stored. */
|
|
1446
1684
|
booked_for_birth_year: number | null;
|
|
1685
|
+
/** @description The ContactPerson this booking was made for, if any. */
|
|
1686
|
+
booked_for_person_id: string | null;
|
|
1687
|
+
/** @description The BookingEvent this booking is a registration for, if any. */
|
|
1688
|
+
event_id: string | null;
|
|
1689
|
+
/** @description Position of this booking within its event's registrations, if any. */
|
|
1690
|
+
event_order: number | null;
|
|
1447
1691
|
/** @description Shared by every booking created in the same party request. */
|
|
1448
1692
|
party_sequence_id: string | null;
|
|
1449
1693
|
status: components["schemas"]["BookingStatus"];
|
|
@@ -1539,6 +1783,8 @@ interface components {
|
|
|
1539
1783
|
start_ts: components["schemas"]["BookingTimestampInput"];
|
|
1540
1784
|
booked_for_name?: string;
|
|
1541
1785
|
booked_for_birth_year?: number;
|
|
1786
|
+
/** @description Book this line on behalf of a ContactPerson rather than the contact. */
|
|
1787
|
+
booked_for_person_id?: string;
|
|
1542
1788
|
};
|
|
1543
1789
|
CreateBookingInput: {
|
|
1544
1790
|
/** @description A PARTY — one request books a whole family in one all-or-nothing transaction. */
|
|
@@ -1965,6 +2211,11 @@ interface components {
|
|
|
1965
2211
|
ApiResponse_BookingActionResult: components["schemas"]["Envelope_BookingActionResult"];
|
|
1966
2212
|
ApiResponse_BookingRescheduleResult: components["schemas"]["Envelope_BookingRescheduleResult"];
|
|
1967
2213
|
ApiResponse_ManageSummary: components["schemas"]["Envelope_ManageSummary"];
|
|
2214
|
+
ApiResponse_PortalLoginStartResult: components["schemas"]["Envelope_PortalLoginStartResult"];
|
|
2215
|
+
ApiResponse_PortalSession: components["schemas"]["Envelope_PortalSession"];
|
|
2216
|
+
ApiResponse_PortalProfile: components["schemas"]["Envelope_PortalProfile"];
|
|
2217
|
+
ApiResponse_PortalBookings: components["schemas"]["Envelope_PortalBookings"];
|
|
2218
|
+
ApiResponse_PortalExport: components["schemas"]["Envelope_PortalExport"];
|
|
1968
2219
|
ApiResponse_GdprExportRequest: components["schemas"]["Envelope_GdprExportRequest"];
|
|
1969
2220
|
ApiResponse_GdprExportArray: components["schemas"]["Envelope_GdprExportArray"];
|
|
1970
2221
|
ApiResponse_GdprExport: components["schemas"]["Envelope_GdprExport"];
|
|
@@ -2113,6 +2364,149 @@ interface components {
|
|
|
2113
2364
|
Envelope_ManageSummary: {
|
|
2114
2365
|
data: components["schemas"]["ManageSummary"];
|
|
2115
2366
|
};
|
|
2367
|
+
PortalLoginStartInput: {
|
|
2368
|
+
/**
|
|
2369
|
+
* Format: email
|
|
2370
|
+
* @description The address the code is sent to.
|
|
2371
|
+
*/
|
|
2372
|
+
email: string;
|
|
2373
|
+
/** @description Locale for the e-mail (e.g. `nb`, `en`); the workspace default when omitted. */
|
|
2374
|
+
locale?: string;
|
|
2375
|
+
};
|
|
2376
|
+
/** @description Always `sent`, whether or not the address is a known contact — the route is enumeration-safe by design. */
|
|
2377
|
+
PortalLoginStartResult: {
|
|
2378
|
+
/** @constant */
|
|
2379
|
+
status: "sent";
|
|
2380
|
+
};
|
|
2381
|
+
PortalVerifyInput: {
|
|
2382
|
+
/** Format: email */
|
|
2383
|
+
email: string;
|
|
2384
|
+
/** @description The one-time code from the e-mail. */
|
|
2385
|
+
code: string;
|
|
2386
|
+
};
|
|
2387
|
+
PortalContactSummary: {
|
|
2388
|
+
contact_id: string;
|
|
2389
|
+
first_name: string | null;
|
|
2390
|
+
};
|
|
2391
|
+
/** @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. */
|
|
2392
|
+
PortalSession: {
|
|
2393
|
+
session_token: string;
|
|
2394
|
+
/** @description Unix timestamp in milliseconds. */
|
|
2395
|
+
expires_at: number;
|
|
2396
|
+
contact: components["schemas"]["PortalContactSummary"];
|
|
2397
|
+
};
|
|
2398
|
+
PortalFamilyMember: {
|
|
2399
|
+
name: string;
|
|
2400
|
+
birth_year: number;
|
|
2401
|
+
};
|
|
2402
|
+
/** @description A person the contact books for — a child, a pet — with no login of its own. */
|
|
2403
|
+
PortalPerson: {
|
|
2404
|
+
person_id: string;
|
|
2405
|
+
name: string;
|
|
2406
|
+
birth_year: number | null;
|
|
2407
|
+
relation_type: components["schemas"]["RelationType"];
|
|
2408
|
+
relation_label: string | null;
|
|
2409
|
+
notes: string | null;
|
|
2410
|
+
/** @description False for a person the customer removed or that was promoted to its own contact; `me` returns active persons only, the export returns all. */
|
|
2411
|
+
active: boolean;
|
|
2412
|
+
};
|
|
2413
|
+
/** @description The workspace's own words for the person concept, e.g. `"Barn"`. */
|
|
2414
|
+
PortalLabels: {
|
|
2415
|
+
person: string;
|
|
2416
|
+
persons: string;
|
|
2417
|
+
};
|
|
2418
|
+
PortalProfile: {
|
|
2419
|
+
contact_id: string;
|
|
2420
|
+
email: string;
|
|
2421
|
+
first_name: string | null;
|
|
2422
|
+
last_name: string | null;
|
|
2423
|
+
phone: string | null;
|
|
2424
|
+
family: components["schemas"]["PortalFamilyMember"][];
|
|
2425
|
+
persons: components["schemas"]["PortalPerson"][];
|
|
2426
|
+
labels: components["schemas"]["PortalLabels"];
|
|
2427
|
+
marketing_consent: boolean;
|
|
2428
|
+
/** @description Unix timestamp in milliseconds. */
|
|
2429
|
+
created_at: number;
|
|
2430
|
+
};
|
|
2431
|
+
/** @description Only the supplied fields change. */
|
|
2432
|
+
PortalProfilePatch: {
|
|
2433
|
+
first_name?: string;
|
|
2434
|
+
last_name?: string;
|
|
2435
|
+
/** @description `null` clears the number. */
|
|
2436
|
+
phone?: string | null;
|
|
2437
|
+
/** @description Replaces the whole list. */
|
|
2438
|
+
family?: components["schemas"]["PortalFamilyMember"][];
|
|
2439
|
+
/** @description Records a `marketing_email` consent change with source `portal`. */
|
|
2440
|
+
marketing_consent?: boolean;
|
|
2441
|
+
};
|
|
2442
|
+
PortalBooking: {
|
|
2443
|
+
booking_id: string;
|
|
2444
|
+
status: components["schemas"]["BookingStatus"];
|
|
2445
|
+
/** @description Unix timestamp in milliseconds. */
|
|
2446
|
+
start_ts: number;
|
|
2447
|
+
/** @description Unix timestamp in milliseconds. */
|
|
2448
|
+
end_ts: number;
|
|
2449
|
+
service_id: string | null;
|
|
2450
|
+
service_name: string | null;
|
|
2451
|
+
resource_id: string | null;
|
|
2452
|
+
resource_name: string | null;
|
|
2453
|
+
booked_for_name: string | null;
|
|
2454
|
+
/** @description Integer øre, or `null` when the service has no price. */
|
|
2455
|
+
amount_ore: number | null;
|
|
2456
|
+
notes: string | null;
|
|
2457
|
+
/** @description Present only while the booking is upcoming and manageable; opens the site's manage page. */
|
|
2458
|
+
manage_token: string | null;
|
|
2459
|
+
can_manage: boolean;
|
|
2460
|
+
};
|
|
2461
|
+
PortalBookings: {
|
|
2462
|
+
upcoming: components["schemas"]["PortalBooking"][];
|
|
2463
|
+
past: components["schemas"]["PortalBooking"][];
|
|
2464
|
+
};
|
|
2465
|
+
PortalConsentRecord: {
|
|
2466
|
+
consent_type: string;
|
|
2467
|
+
granted: boolean;
|
|
2468
|
+
/** @description Unix timestamp in milliseconds, or `null`. */
|
|
2469
|
+
granted_at: number | null;
|
|
2470
|
+
/** @description Unix timestamp in milliseconds, or `null`. */
|
|
2471
|
+
revoked_at: number | null;
|
|
2472
|
+
source: string;
|
|
2473
|
+
};
|
|
2474
|
+
/** @description A relation the exporting contact is a party to; only the counterpart's display name is exposed. */
|
|
2475
|
+
PortalExportRelation: {
|
|
2476
|
+
/** @enum {string} */
|
|
2477
|
+
direction: "outgoing" | "incoming";
|
|
2478
|
+
type: components["schemas"]["RelationType"];
|
|
2479
|
+
custom_label: string | null;
|
|
2480
|
+
/** @description Unix timestamp in milliseconds. */
|
|
2481
|
+
since: number | null;
|
|
2482
|
+
note: string | null;
|
|
2483
|
+
counterpart_name: string;
|
|
2484
|
+
};
|
|
2485
|
+
/** @description Everything the workspace holds about the signed-in contact (GDPR Art. 15). */
|
|
2486
|
+
PortalExport: {
|
|
2487
|
+
/** @description Unix timestamp in milliseconds. */
|
|
2488
|
+
exported_at: number;
|
|
2489
|
+
contact: components["schemas"]["PortalProfile"];
|
|
2490
|
+
family: components["schemas"]["PortalFamilyMember"][];
|
|
2491
|
+
consents: components["schemas"]["PortalConsentRecord"][];
|
|
2492
|
+
bookings: components["schemas"]["PortalBooking"][];
|
|
2493
|
+
relations: components["schemas"]["PortalExportRelation"][];
|
|
2494
|
+
};
|
|
2495
|
+
Envelope_PortalLoginStartResult: {
|
|
2496
|
+
data: components["schemas"]["PortalLoginStartResult"];
|
|
2497
|
+
};
|
|
2498
|
+
Envelope_PortalSession: {
|
|
2499
|
+
data: components["schemas"]["PortalSession"];
|
|
2500
|
+
};
|
|
2501
|
+
Envelope_PortalProfile: {
|
|
2502
|
+
data: components["schemas"]["PortalProfile"];
|
|
2503
|
+
};
|
|
2504
|
+
Envelope_PortalBookings: {
|
|
2505
|
+
data: components["schemas"]["PortalBookings"];
|
|
2506
|
+
};
|
|
2507
|
+
Envelope_PortalExport: {
|
|
2508
|
+
data: components["schemas"]["PortalExport"];
|
|
2509
|
+
};
|
|
2116
2510
|
/** @description Provide exactly one of `url`, `orgnr`, or `name`. */
|
|
2117
2511
|
ScanCreateInput: {
|
|
2118
2512
|
url?: string;
|
|
@@ -2277,26 +2671,160 @@ interface components {
|
|
|
2277
2671
|
Envelope_ChannelConnectionDisconnectResult: {
|
|
2278
2672
|
data: components["schemas"]["ChannelConnectionDisconnectResult"];
|
|
2279
2673
|
};
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2674
|
+
/**
|
|
2675
|
+
* @description How a person or a relation relates to a contact.
|
|
2676
|
+
* @enum {string}
|
|
2677
|
+
*/
|
|
2678
|
+
RelationType: "guardian" | "owner" | "employer" | "caregiver" | "partner" | "custom";
|
|
2679
|
+
/** @description A person a contact books for — a child, a pet, an employee. No login of their own. */
|
|
2680
|
+
ContactPerson: {
|
|
2681
|
+
person_id: string;
|
|
2682
|
+
contact_id: string;
|
|
2683
|
+
name: string;
|
|
2684
|
+
birth_year: number | null;
|
|
2685
|
+
relation_type: components["schemas"]["RelationType"];
|
|
2686
|
+
relation_label: string | null;
|
|
2687
|
+
notes: string | null;
|
|
2688
|
+
active: boolean;
|
|
2689
|
+
promoted_to_contact_id: string | null;
|
|
2690
|
+
/** Format: date-time */
|
|
2691
|
+
created_at: string;
|
|
2692
|
+
/** Format: date-time */
|
|
2693
|
+
updated_at: string;
|
|
2694
|
+
};
|
|
2695
|
+
CreateContactPersonInput: {
|
|
2696
|
+
contact_id: string;
|
|
2697
|
+
name: string;
|
|
2698
|
+
birth_year?: number;
|
|
2699
|
+
relation_type: components["schemas"]["RelationType"];
|
|
2700
|
+
relation_label?: string;
|
|
2701
|
+
notes?: string;
|
|
2702
|
+
};
|
|
2703
|
+
/** @description One directional relation between two contacts. */
|
|
2704
|
+
ContactRelation: {
|
|
2705
|
+
relation_id: string;
|
|
2706
|
+
from_contact_id: string;
|
|
2707
|
+
to_contact_id: string;
|
|
2708
|
+
type: components["schemas"]["RelationType"];
|
|
2709
|
+
custom_label: string | null;
|
|
2710
|
+
/** @description Unix timestamp in milliseconds. */
|
|
2711
|
+
since: number | null;
|
|
2712
|
+
note: string | null;
|
|
2713
|
+
/** @description Empty string when the counterpart contact no longer exists. */
|
|
2714
|
+
counterpart_name: string;
|
|
2715
|
+
/** Format: date-time */
|
|
2716
|
+
created_at: string;
|
|
2717
|
+
};
|
|
2718
|
+
/** @description Relations a contact holds, split by direction. */
|
|
2719
|
+
ContactRelations: {
|
|
2720
|
+
outgoing: components["schemas"]["ContactRelation"][];
|
|
2721
|
+
incoming: components["schemas"]["ContactRelation"][];
|
|
2722
|
+
};
|
|
2723
|
+
CreateContactRelationInput: {
|
|
2724
|
+
from_contact_id: string;
|
|
2725
|
+
to_contact_id: string;
|
|
2726
|
+
type: components["schemas"]["RelationType"];
|
|
2727
|
+
custom_label?: string;
|
|
2728
|
+
/** @description Unix timestamp in milliseconds. */
|
|
2729
|
+
since?: number;
|
|
2730
|
+
note?: string;
|
|
2731
|
+
};
|
|
2732
|
+
CreateContactRelationResult: {
|
|
2733
|
+
relation_id: string;
|
|
2734
|
+
};
|
|
2735
|
+
/** @enum {string} */
|
|
2736
|
+
BookingEventStatus: "draft" | "open" | "closed" | "completed" | "cancelled";
|
|
2737
|
+
/** @enum {string} */
|
|
2738
|
+
BookingEventTemplateKey: "kindergarten_visit" | "company_day" | "class" | "open_day" | "custom";
|
|
2739
|
+
/** @description An arrangement — a scheduled group session bookings register against. */
|
|
2740
|
+
BookingEvent: {
|
|
2741
|
+
event_id: string;
|
|
2742
|
+
template_id: string;
|
|
2743
|
+
host_id: string | null;
|
|
2744
|
+
/**
|
|
2745
|
+
* Format: date
|
|
2746
|
+
* @description yyyy-mm-dd in the workspace time zone.
|
|
2747
|
+
*/
|
|
2748
|
+
date: string;
|
|
2749
|
+
window_start_minute: number;
|
|
2750
|
+
window_end_minute: number;
|
|
2751
|
+
/** @enum {string} */
|
|
2752
|
+
place: "at_host" | "in_house";
|
|
2753
|
+
capacity: number;
|
|
2754
|
+
minimum: number;
|
|
2755
|
+
registered_count: number;
|
|
2756
|
+
service_ids: string[];
|
|
2757
|
+
resource_ids: string[];
|
|
2758
|
+
price_override_ore: number | null;
|
|
2759
|
+
status: components["schemas"]["BookingEventStatus"];
|
|
2760
|
+
/** Format: date-time */
|
|
2761
|
+
registration_closes_at: string;
|
|
2762
|
+
slug: string;
|
|
2763
|
+
/** Format: date-time */
|
|
2764
|
+
created_at: string;
|
|
2765
|
+
/** Format: date-time */
|
|
2766
|
+
updated_at: string;
|
|
2767
|
+
};
|
|
2768
|
+
CreateBookingEventInput: {
|
|
2769
|
+
template_key: components["schemas"]["BookingEventTemplateKey"];
|
|
2770
|
+
host_id?: string;
|
|
2771
|
+
/** Format: date */
|
|
2772
|
+
date: string;
|
|
2773
|
+
window_start_minute: number;
|
|
2774
|
+
window_end_minute?: number;
|
|
2775
|
+
/** @enum {string} */
|
|
2776
|
+
place: "at_host" | "in_house";
|
|
2777
|
+
capacity?: number;
|
|
2778
|
+
minimum?: number;
|
|
2779
|
+
service_ids: string[];
|
|
2780
|
+
resource_ids: string[];
|
|
2781
|
+
};
|
|
2782
|
+
ApiResponse_ContactPersonArray: components["schemas"]["Envelope_ContactPersonArray"];
|
|
2783
|
+
ApiResponse_ContactPerson: components["schemas"]["Envelope_ContactPerson"];
|
|
2784
|
+
ApiResponse_ContactRelations: components["schemas"]["Envelope_ContactRelations"];
|
|
2785
|
+
ApiResponse_CreateContactRelationResult: components["schemas"]["Envelope_CreateContactRelationResult"];
|
|
2786
|
+
ApiResponse_BookingEventArray: components["schemas"]["Envelope_BookingEventArray"];
|
|
2787
|
+
ApiResponse_BookingEvent: components["schemas"]["Envelope_BookingEvent"];
|
|
2788
|
+
Envelope_ContactPersonArray: {
|
|
2789
|
+
data: components["schemas"]["ContactPerson"][];
|
|
2790
|
+
};
|
|
2791
|
+
Envelope_ContactPerson: {
|
|
2792
|
+
data: components["schemas"]["ContactPerson"];
|
|
2793
|
+
};
|
|
2794
|
+
Envelope_ContactRelations: {
|
|
2795
|
+
data: components["schemas"]["ContactRelations"];
|
|
2796
|
+
};
|
|
2797
|
+
Envelope_CreateContactRelationResult: {
|
|
2798
|
+
data: components["schemas"]["CreateContactRelationResult"];
|
|
2799
|
+
};
|
|
2800
|
+
Envelope_BookingEventArray: {
|
|
2801
|
+
data: components["schemas"]["BookingEvent"][];
|
|
2802
|
+
};
|
|
2803
|
+
Envelope_BookingEvent: {
|
|
2804
|
+
data: components["schemas"]["BookingEvent"];
|
|
2290
2805
|
};
|
|
2291
2806
|
};
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2807
|
+
responses: {
|
|
2808
|
+
/** @description API error. */
|
|
2809
|
+
ApiError: {
|
|
2810
|
+
headers: {
|
|
2811
|
+
[name: string]: unknown;
|
|
2812
|
+
};
|
|
2813
|
+
content: {
|
|
2814
|
+
"application/json": components["schemas"]["ApiError"];
|
|
2815
|
+
};
|
|
2816
|
+
};
|
|
2817
|
+
};
|
|
2818
|
+
parameters: {
|
|
2819
|
+
Id: string;
|
|
2820
|
+
Slug: string;
|
|
2821
|
+
/** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
|
|
2822
|
+
ManageToken: string;
|
|
2823
|
+
/** @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`. */
|
|
2824
|
+
PortalSession: string;
|
|
2825
|
+
Cursor: string;
|
|
2826
|
+
Limit: number;
|
|
2827
|
+
};
|
|
2300
2828
|
requestBodies: never;
|
|
2301
2829
|
headers: never;
|
|
2302
2830
|
pathItems: never;
|
|
@@ -3107,6 +3635,178 @@ interface operations {
|
|
|
3107
3635
|
default: components["responses"]["ApiError"];
|
|
3108
3636
|
};
|
|
3109
3637
|
};
|
|
3638
|
+
listContactPersons: {
|
|
3639
|
+
parameters: {
|
|
3640
|
+
query: {
|
|
3641
|
+
contact_id: string;
|
|
3642
|
+
include_inactive?: boolean;
|
|
3643
|
+
};
|
|
3644
|
+
header?: never;
|
|
3645
|
+
path?: never;
|
|
3646
|
+
cookie?: never;
|
|
3647
|
+
};
|
|
3648
|
+
requestBody?: never;
|
|
3649
|
+
responses: {
|
|
3650
|
+
/** @description Contact persons. */
|
|
3651
|
+
200: {
|
|
3652
|
+
headers: {
|
|
3653
|
+
[name: string]: unknown;
|
|
3654
|
+
};
|
|
3655
|
+
content: {
|
|
3656
|
+
"application/json": components["schemas"]["ApiResponse_ContactPersonArray"];
|
|
3657
|
+
};
|
|
3658
|
+
};
|
|
3659
|
+
default: components["responses"]["ApiError"];
|
|
3660
|
+
};
|
|
3661
|
+
};
|
|
3662
|
+
createContactPerson: {
|
|
3663
|
+
parameters: {
|
|
3664
|
+
query?: never;
|
|
3665
|
+
header?: never;
|
|
3666
|
+
path?: never;
|
|
3667
|
+
cookie?: never;
|
|
3668
|
+
};
|
|
3669
|
+
requestBody: {
|
|
3670
|
+
content: {
|
|
3671
|
+
"application/json": components["schemas"]["CreateContactPersonInput"];
|
|
3672
|
+
};
|
|
3673
|
+
};
|
|
3674
|
+
responses: {
|
|
3675
|
+
/** @description Created person. */
|
|
3676
|
+
201: {
|
|
3677
|
+
headers: {
|
|
3678
|
+
[name: string]: unknown;
|
|
3679
|
+
};
|
|
3680
|
+
content: {
|
|
3681
|
+
"application/json": components["schemas"]["ApiResponse_ContactPerson"];
|
|
3682
|
+
};
|
|
3683
|
+
};
|
|
3684
|
+
default: components["responses"]["ApiError"];
|
|
3685
|
+
};
|
|
3686
|
+
};
|
|
3687
|
+
listContactRelations: {
|
|
3688
|
+
parameters: {
|
|
3689
|
+
query: {
|
|
3690
|
+
contact_id: string;
|
|
3691
|
+
};
|
|
3692
|
+
header?: never;
|
|
3693
|
+
path?: never;
|
|
3694
|
+
cookie?: never;
|
|
3695
|
+
};
|
|
3696
|
+
requestBody?: never;
|
|
3697
|
+
responses: {
|
|
3698
|
+
/** @description Outgoing and incoming relations. */
|
|
3699
|
+
200: {
|
|
3700
|
+
headers: {
|
|
3701
|
+
[name: string]: unknown;
|
|
3702
|
+
};
|
|
3703
|
+
content: {
|
|
3704
|
+
"application/json": components["schemas"]["ApiResponse_ContactRelations"];
|
|
3705
|
+
};
|
|
3706
|
+
};
|
|
3707
|
+
default: components["responses"]["ApiError"];
|
|
3708
|
+
};
|
|
3709
|
+
};
|
|
3710
|
+
createContactRelation: {
|
|
3711
|
+
parameters: {
|
|
3712
|
+
query?: never;
|
|
3713
|
+
header?: never;
|
|
3714
|
+
path?: never;
|
|
3715
|
+
cookie?: never;
|
|
3716
|
+
};
|
|
3717
|
+
requestBody: {
|
|
3718
|
+
content: {
|
|
3719
|
+
"application/json": components["schemas"]["CreateContactRelationInput"];
|
|
3720
|
+
};
|
|
3721
|
+
};
|
|
3722
|
+
responses: {
|
|
3723
|
+
/** @description Created relation id. */
|
|
3724
|
+
201: {
|
|
3725
|
+
headers: {
|
|
3726
|
+
[name: string]: unknown;
|
|
3727
|
+
};
|
|
3728
|
+
content: {
|
|
3729
|
+
"application/json": components["schemas"]["ApiResponse_CreateContactRelationResult"];
|
|
3730
|
+
};
|
|
3731
|
+
};
|
|
3732
|
+
default: components["responses"]["ApiError"];
|
|
3733
|
+
};
|
|
3734
|
+
};
|
|
3735
|
+
listBookingEvents: {
|
|
3736
|
+
parameters: {
|
|
3737
|
+
query: {
|
|
3738
|
+
/** @description Start of the window, `yyyy-mm-dd`, inclusive. */
|
|
3739
|
+
from: string;
|
|
3740
|
+
/** @description End of the window, `yyyy-mm-dd`, inclusive. */
|
|
3741
|
+
to: string;
|
|
3742
|
+
status?: components["schemas"]["BookingEventStatus"];
|
|
3743
|
+
};
|
|
3744
|
+
header?: never;
|
|
3745
|
+
path?: never;
|
|
3746
|
+
cookie?: never;
|
|
3747
|
+
};
|
|
3748
|
+
requestBody?: never;
|
|
3749
|
+
responses: {
|
|
3750
|
+
/** @description Arrangementer in the window. */
|
|
3751
|
+
200: {
|
|
3752
|
+
headers: {
|
|
3753
|
+
[name: string]: unknown;
|
|
3754
|
+
};
|
|
3755
|
+
content: {
|
|
3756
|
+
"application/json": components["schemas"]["ApiResponse_BookingEventArray"];
|
|
3757
|
+
};
|
|
3758
|
+
};
|
|
3759
|
+
default: components["responses"]["ApiError"];
|
|
3760
|
+
};
|
|
3761
|
+
};
|
|
3762
|
+
createBookingEvent: {
|
|
3763
|
+
parameters: {
|
|
3764
|
+
query?: never;
|
|
3765
|
+
header?: never;
|
|
3766
|
+
path?: never;
|
|
3767
|
+
cookie?: never;
|
|
3768
|
+
};
|
|
3769
|
+
requestBody: {
|
|
3770
|
+
content: {
|
|
3771
|
+
"application/json": components["schemas"]["CreateBookingEventInput"];
|
|
3772
|
+
};
|
|
3773
|
+
};
|
|
3774
|
+
responses: {
|
|
3775
|
+
/** @description Created arrangement. */
|
|
3776
|
+
201: {
|
|
3777
|
+
headers: {
|
|
3778
|
+
[name: string]: unknown;
|
|
3779
|
+
};
|
|
3780
|
+
content: {
|
|
3781
|
+
"application/json": components["schemas"]["ApiResponse_BookingEvent"];
|
|
3782
|
+
};
|
|
3783
|
+
};
|
|
3784
|
+
default: components["responses"]["ApiError"];
|
|
3785
|
+
};
|
|
3786
|
+
};
|
|
3787
|
+
getBookingEvent: {
|
|
3788
|
+
parameters: {
|
|
3789
|
+
query?: never;
|
|
3790
|
+
header?: never;
|
|
3791
|
+
path: {
|
|
3792
|
+
id: components["parameters"]["Id"];
|
|
3793
|
+
};
|
|
3794
|
+
cookie?: never;
|
|
3795
|
+
};
|
|
3796
|
+
requestBody?: never;
|
|
3797
|
+
responses: {
|
|
3798
|
+
/** @description Arrangement. */
|
|
3799
|
+
200: {
|
|
3800
|
+
headers: {
|
|
3801
|
+
[name: string]: unknown;
|
|
3802
|
+
};
|
|
3803
|
+
content: {
|
|
3804
|
+
"application/json": components["schemas"]["ApiResponse_BookingEvent"];
|
|
3805
|
+
};
|
|
3806
|
+
};
|
|
3807
|
+
default: components["responses"]["ApiError"];
|
|
3808
|
+
};
|
|
3809
|
+
};
|
|
3110
3810
|
getBooking: {
|
|
3111
3811
|
parameters: {
|
|
3112
3812
|
query?: never;
|
|
@@ -3314,6 +4014,200 @@ interface operations {
|
|
|
3314
4014
|
default: components["responses"]["ApiError"];
|
|
3315
4015
|
};
|
|
3316
4016
|
};
|
|
4017
|
+
startPortalLogin: {
|
|
4018
|
+
parameters: {
|
|
4019
|
+
query?: never;
|
|
4020
|
+
header?: never;
|
|
4021
|
+
path?: never;
|
|
4022
|
+
cookie?: never;
|
|
4023
|
+
};
|
|
4024
|
+
requestBody: {
|
|
4025
|
+
content: {
|
|
4026
|
+
"application/json": components["schemas"]["PortalLoginStartInput"];
|
|
4027
|
+
};
|
|
4028
|
+
};
|
|
4029
|
+
responses: {
|
|
4030
|
+
/** @description Code queued (or silently not, for an unknown address). */
|
|
4031
|
+
202: {
|
|
4032
|
+
headers: {
|
|
4033
|
+
[name: string]: unknown;
|
|
4034
|
+
};
|
|
4035
|
+
content: {
|
|
4036
|
+
"application/json": components["schemas"]["ApiResponse_PortalLoginStartResult"];
|
|
4037
|
+
};
|
|
4038
|
+
};
|
|
4039
|
+
default: components["responses"]["ApiError"];
|
|
4040
|
+
};
|
|
4041
|
+
};
|
|
4042
|
+
verifyPortalLogin: {
|
|
4043
|
+
parameters: {
|
|
4044
|
+
query?: never;
|
|
4045
|
+
header?: never;
|
|
4046
|
+
path?: never;
|
|
4047
|
+
cookie?: never;
|
|
4048
|
+
};
|
|
4049
|
+
requestBody: {
|
|
4050
|
+
content: {
|
|
4051
|
+
"application/json": components["schemas"]["PortalVerifyInput"];
|
|
4052
|
+
};
|
|
4053
|
+
};
|
|
4054
|
+
responses: {
|
|
4055
|
+
/** @description The new session. */
|
|
4056
|
+
200: {
|
|
4057
|
+
headers: {
|
|
4058
|
+
[name: string]: unknown;
|
|
4059
|
+
};
|
|
4060
|
+
content: {
|
|
4061
|
+
"application/json": components["schemas"]["ApiResponse_PortalSession"];
|
|
4062
|
+
};
|
|
4063
|
+
};
|
|
4064
|
+
default: components["responses"]["ApiError"];
|
|
4065
|
+
};
|
|
4066
|
+
};
|
|
4067
|
+
logoutPortal: {
|
|
4068
|
+
parameters: {
|
|
4069
|
+
query?: never;
|
|
4070
|
+
header: {
|
|
4071
|
+
/** @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`. */
|
|
4072
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
4073
|
+
};
|
|
4074
|
+
path?: never;
|
|
4075
|
+
cookie?: never;
|
|
4076
|
+
};
|
|
4077
|
+
requestBody?: never;
|
|
4078
|
+
responses: {
|
|
4079
|
+
/** @description Session revoked. */
|
|
4080
|
+
204: {
|
|
4081
|
+
headers: {
|
|
4082
|
+
[name: string]: unknown;
|
|
4083
|
+
};
|
|
4084
|
+
content?: never;
|
|
4085
|
+
};
|
|
4086
|
+
default: components["responses"]["ApiError"];
|
|
4087
|
+
};
|
|
4088
|
+
};
|
|
4089
|
+
getPortalProfile: {
|
|
4090
|
+
parameters: {
|
|
4091
|
+
query?: never;
|
|
4092
|
+
header: {
|
|
4093
|
+
/** @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`. */
|
|
4094
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
4095
|
+
};
|
|
4096
|
+
path?: never;
|
|
4097
|
+
cookie?: never;
|
|
4098
|
+
};
|
|
4099
|
+
requestBody?: never;
|
|
4100
|
+
responses: {
|
|
4101
|
+
/** @description Profile. */
|
|
4102
|
+
200: {
|
|
4103
|
+
headers: {
|
|
4104
|
+
[name: string]: unknown;
|
|
4105
|
+
};
|
|
4106
|
+
content: {
|
|
4107
|
+
"application/json": components["schemas"]["ApiResponse_PortalProfile"];
|
|
4108
|
+
};
|
|
4109
|
+
};
|
|
4110
|
+
default: components["responses"]["ApiError"];
|
|
4111
|
+
};
|
|
4112
|
+
};
|
|
4113
|
+
updatePortalProfile: {
|
|
4114
|
+
parameters: {
|
|
4115
|
+
query?: never;
|
|
4116
|
+
header: {
|
|
4117
|
+
/** @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`. */
|
|
4118
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
4119
|
+
};
|
|
4120
|
+
path?: never;
|
|
4121
|
+
cookie?: never;
|
|
4122
|
+
};
|
|
4123
|
+
requestBody: {
|
|
4124
|
+
content: {
|
|
4125
|
+
"application/json": components["schemas"]["PortalProfilePatch"];
|
|
4126
|
+
};
|
|
4127
|
+
};
|
|
4128
|
+
responses: {
|
|
4129
|
+
/** @description Updated profile. */
|
|
4130
|
+
200: {
|
|
4131
|
+
headers: {
|
|
4132
|
+
[name: string]: unknown;
|
|
4133
|
+
};
|
|
4134
|
+
content: {
|
|
4135
|
+
"application/json": components["schemas"]["ApiResponse_PortalProfile"];
|
|
4136
|
+
};
|
|
4137
|
+
};
|
|
4138
|
+
default: components["responses"]["ApiError"];
|
|
4139
|
+
};
|
|
4140
|
+
};
|
|
4141
|
+
listPortalBookings: {
|
|
4142
|
+
parameters: {
|
|
4143
|
+
query?: never;
|
|
4144
|
+
header: {
|
|
4145
|
+
/** @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`. */
|
|
4146
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
4147
|
+
};
|
|
4148
|
+
path?: never;
|
|
4149
|
+
cookie?: never;
|
|
4150
|
+
};
|
|
4151
|
+
requestBody?: never;
|
|
4152
|
+
responses: {
|
|
4153
|
+
/** @description Bookings. */
|
|
4154
|
+
200: {
|
|
4155
|
+
headers: {
|
|
4156
|
+
[name: string]: unknown;
|
|
4157
|
+
};
|
|
4158
|
+
content: {
|
|
4159
|
+
"application/json": components["schemas"]["ApiResponse_PortalBookings"];
|
|
4160
|
+
};
|
|
4161
|
+
};
|
|
4162
|
+
default: components["responses"]["ApiError"];
|
|
4163
|
+
};
|
|
4164
|
+
};
|
|
4165
|
+
exportPortalData: {
|
|
4166
|
+
parameters: {
|
|
4167
|
+
query?: never;
|
|
4168
|
+
header: {
|
|
4169
|
+
/** @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`. */
|
|
4170
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
4171
|
+
};
|
|
4172
|
+
path?: never;
|
|
4173
|
+
cookie?: never;
|
|
4174
|
+
};
|
|
4175
|
+
requestBody?: never;
|
|
4176
|
+
responses: {
|
|
4177
|
+
/** @description The export. */
|
|
4178
|
+
200: {
|
|
4179
|
+
headers: {
|
|
4180
|
+
[name: string]: unknown;
|
|
4181
|
+
};
|
|
4182
|
+
content: {
|
|
4183
|
+
"application/json": components["schemas"]["ApiResponse_PortalExport"];
|
|
4184
|
+
};
|
|
4185
|
+
};
|
|
4186
|
+
default: components["responses"]["ApiError"];
|
|
4187
|
+
};
|
|
4188
|
+
};
|
|
4189
|
+
deletePortalAccount: {
|
|
4190
|
+
parameters: {
|
|
4191
|
+
query?: never;
|
|
4192
|
+
header: {
|
|
4193
|
+
/** @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`. */
|
|
4194
|
+
"X-Portal-Session": components["parameters"]["PortalSession"];
|
|
4195
|
+
};
|
|
4196
|
+
path?: never;
|
|
4197
|
+
cookie?: never;
|
|
4198
|
+
};
|
|
4199
|
+
requestBody?: never;
|
|
4200
|
+
responses: {
|
|
4201
|
+
/** @description Contact erased and session revoked. */
|
|
4202
|
+
204: {
|
|
4203
|
+
headers: {
|
|
4204
|
+
[name: string]: unknown;
|
|
4205
|
+
};
|
|
4206
|
+
content?: never;
|
|
4207
|
+
};
|
|
4208
|
+
default: components["responses"]["ApiError"];
|
|
4209
|
+
};
|
|
4210
|
+
};
|
|
3317
4211
|
requestGdprExport: {
|
|
3318
4212
|
parameters: {
|
|
3319
4213
|
query?: never;
|