@medalsocial/sdk 1.6.0 → 1.7.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,6 +319,250 @@ interface paths {
319
319
  patch: operations["updateDeal"];
320
320
  trace?: never;
321
321
  };
322
+ "/api/v1/bookings": {
323
+ parameters: {
324
+ query?: never;
325
+ header?: never;
326
+ path?: never;
327
+ cookie?: never;
328
+ };
329
+ /** List bookings */
330
+ get: operations["listBookings"];
331
+ put?: never;
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"];
337
+ delete?: never;
338
+ options?: never;
339
+ head?: never;
340
+ patch?: never;
341
+ trace?: never;
342
+ };
343
+ "/api/v1/bookings/services": {
344
+ parameters: {
345
+ query?: never;
346
+ header?: never;
347
+ path?: never;
348
+ cookie?: never;
349
+ };
350
+ /** List bookable services */
351
+ get: operations["listBookingServices"];
352
+ put?: never;
353
+ post?: never;
354
+ delete?: never;
355
+ options?: never;
356
+ head?: never;
357
+ patch?: never;
358
+ trace?: never;
359
+ };
360
+ "/api/v1/bookings/resources": {
361
+ parameters: {
362
+ query?: never;
363
+ header?: never;
364
+ path?: never;
365
+ cookie?: never;
366
+ };
367
+ /** List bookable resources */
368
+ get: operations["listBookingResources"];
369
+ put?: never;
370
+ post?: never;
371
+ delete?: never;
372
+ options?: never;
373
+ head?: never;
374
+ patch?: never;
375
+ trace?: never;
376
+ };
377
+ "/api/v1/bookings/availability": {
378
+ parameters: {
379
+ query?: never;
380
+ header?: never;
381
+ path?: never;
382
+ cookie?: never;
383
+ };
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"];
389
+ put?: never;
390
+ post?: never;
391
+ delete?: never;
392
+ options?: never;
393
+ head?: never;
394
+ patch?: never;
395
+ trace?: never;
396
+ };
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}": {
418
+ parameters: {
419
+ query?: never;
420
+ header?: never;
421
+ path: {
422
+ id: components["parameters"]["Id"];
423
+ };
424
+ cookie?: never;
425
+ };
426
+ /** Get a booking */
427
+ get: operations["getBooking"];
428
+ put?: never;
429
+ post?: never;
430
+ delete?: never;
431
+ options?: never;
432
+ head?: never;
433
+ /** Annotate a booking */
434
+ patch: operations["updateBooking"];
435
+ trace?: never;
436
+ };
437
+ "/api/v1/bookings/{id}/cancel": {
438
+ parameters: {
439
+ query?: never;
440
+ header?: never;
441
+ path: {
442
+ id: components["parameters"]["Id"];
443
+ };
444
+ cookie?: never;
445
+ };
446
+ get?: never;
447
+ put?: never;
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"];
453
+ delete?: never;
454
+ options?: never;
455
+ head?: never;
456
+ patch?: never;
457
+ trace?: never;
458
+ };
459
+ "/api/v1/bookings/{id}/reschedule": {
460
+ parameters: {
461
+ query?: never;
462
+ header?: never;
463
+ path: {
464
+ id: components["parameters"]["Id"];
465
+ };
466
+ cookie?: never;
467
+ };
468
+ get?: never;
469
+ put?: 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"];
475
+ delete?: never;
476
+ options?: never;
477
+ head?: never;
478
+ patch?: never;
479
+ trace?: never;
480
+ };
481
+ "/api/v1/bookings/{id}/no-show": {
482
+ parameters: {
483
+ query?: never;
484
+ header?: never;
485
+ path: {
486
+ id: components["parameters"]["Id"];
487
+ };
488
+ cookie?: never;
489
+ };
490
+ get?: never;
491
+ put?: never;
492
+ /** Mark a booking as a no-show */
493
+ post: operations["markBookingNoShow"];
494
+ delete?: never;
495
+ options?: never;
496
+ head?: never;
497
+ patch?: never;
498
+ trace?: never;
499
+ };
500
+ "/api/v1/bookings/manage/{token}": {
501
+ parameters: {
502
+ query?: never;
503
+ header?: never;
504
+ path: {
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"];
507
+ };
508
+ cookie?: never;
509
+ };
510
+ /** Get the customer manage summary for a token */
511
+ get: operations["getManagedBooking"];
512
+ put?: never;
513
+ post?: never;
514
+ delete?: never;
515
+ options?: never;
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;
532
+ /**
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.
535
+ */
536
+ post: operations["cancelManagedBooking"];
537
+ delete?: never;
538
+ options?: never;
539
+ head?: never;
540
+ patch?: never;
541
+ trace?: never;
542
+ };
543
+ "/api/v1/bookings/manage/{token}/reschedule": {
544
+ parameters: {
545
+ query?: never;
546
+ header?: never;
547
+ path: {
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"];
550
+ };
551
+ cookie?: never;
552
+ };
553
+ get?: never;
554
+ put?: 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"];
560
+ delete?: never;
561
+ options?: never;
562
+ head?: never;
563
+ patch?: never;
564
+ trace?: never;
565
+ };
322
566
  "/api/v1/gdpr/export": {
323
567
  parameters: {
324
568
  query?: never;
@@ -1173,63 +1417,272 @@ interface components {
1173
1417
  end_date?: string;
1174
1418
  notes?: string;
1175
1419
  };
1176
- GdprExport: {
1420
+ /** @description A timestamp on the way in — Unix milliseconds, or an ISO 8601 date-time string. Responses always render timestamps as ISO 8601. */
1421
+ BookingTimestampInput: number | string;
1422
+ /** @enum {string} */
1423
+ BookingStatus: "pending" | "confirmed" | "completed" | "cancelled" | "no_show";
1424
+ /**
1425
+ * @description Who cancelled. `staff` for the id-addressed cancel, `customer` for the manage-token cancel, `system` for an automated one.
1426
+ * @enum {string}
1427
+ */
1428
+ BookingCancelledBy: "customer" | "staff" | "system";
1429
+ /** @enum {string} */
1430
+ BookingPaymentStatus: "none" | "reserved" | "captured" | "refunded";
1431
+ /** @enum {string} */
1432
+ BookingCreatedVia: "web" | "dashboard" | "walk_in" | "api";
1433
+ /** @enum {string} */
1434
+ BookingResourceType: "staff" | "room" | "equipment";
1435
+ Booking: {
1177
1436
  id: string;
1178
- request_type: string;
1179
- status: string;
1437
+ contact_id: string | null;
1438
+ service_id: string | null;
1439
+ resource_id: string | null;
1180
1440
  /** Format: date-time */
1181
- submitted_at: string | null;
1441
+ start_ts: string | null;
1182
1442
  /** Format: date-time */
1183
- completed_at: string | null;
1443
+ end_ts: string | null;
1444
+ booked_for_name: string | null;
1445
+ /** @description A birth year, not a birthdate — the age bracket is all that is stored. */
1446
+ booked_for_birth_year: number | null;
1447
+ /** @description Shared by every booking created in the same party request. */
1448
+ party_sequence_id: string | null;
1449
+ status: components["schemas"]["BookingStatus"];
1450
+ cancelled_by: components["schemas"]["BookingCancelledBy"] | null;
1451
+ cancel_reason: string | null;
1452
+ /** @description On a booking created by a reschedule, the booking it replaced. */
1453
+ rescheduled_from_id: string | null;
1454
+ payment_status: components["schemas"]["BookingPaymentStatus"];
1455
+ /** @description Price in integer øre. Never a float and never kroner. */
1456
+ amount_ore: number | null;
1457
+ /** @description Customer-visible note. */
1458
+ notes: string | null;
1459
+ /** @description Staff-only note; never shown to the customer. */
1460
+ internal_notes: string | null;
1461
+ created_via: components["schemas"]["BookingCreatedVia"] | null;
1184
1462
  /** Format: date-time */
1185
- due_date?: string | null;
1186
- /** Format: uri */
1187
- download_url?: string | null;
1463
+ created_at: string | null;
1188
1464
  /** Format: date-time */
1189
- expires_at?: string | null;
1190
- };
1191
- GdprExportRequest: {
1192
- request_id: string;
1193
- status: string;
1194
- };
1195
- /** @enum {string} */
1196
- ConsentType: "marketing_email" | "analytics_tracking" | "third_party_sharing";
1197
- RecordConsentInput: {
1198
- /** Format: email */
1199
- email: string;
1200
- consent_type: components["schemas"]["ConsentType"];
1201
- granted: boolean;
1202
- source?: string;
1203
- ip_address?: string;
1204
- consent_text?: string;
1205
- version?: string;
1465
+ updated_at: string | null;
1206
1466
  };
1207
- ConsentRecord: {
1467
+ BookingService: {
1208
1468
  id: string;
1209
- /** Format: email */
1210
- email: string;
1211
- consent_type: components["schemas"]["ConsentType"];
1212
- granted: boolean;
1469
+ name: string | null;
1470
+ description: string | null;
1471
+ category: string | null;
1472
+ duration_minutes: number | null;
1473
+ buffer_before_minutes: number | null;
1474
+ buffer_after_minutes: number | null;
1475
+ /** @description Price in integer øre. */
1476
+ price_ore: number | null;
1477
+ weekend_surcharge_pct: number | null;
1478
+ /** @description Resource types this service needs, e.g. `["staff"]`. */
1479
+ resource_requirements: string[];
1480
+ bookable_online: boolean;
1481
+ max_per_booking: number | null;
1482
+ color: string | null;
1483
+ sort_order: number | null;
1484
+ active: boolean;
1213
1485
  /** Format: date-time */
1214
- granted_at: string | null;
1486
+ created_at: string | null;
1215
1487
  /** Format: date-time */
1216
- revoked_at: string | null;
1217
- source?: string;
1218
- version?: string;
1488
+ updated_at: string | null;
1219
1489
  };
1220
- ConsentResult: {
1490
+ BookingResource: {
1221
1491
  id: string;
1222
- };
1223
- CookieConsentInput: {
1224
- domain: string;
1225
- consentStatus: string;
1492
+ type: components["schemas"]["BookingResourceType"] | null;
1493
+ name: string | null;
1494
+ /** Format: uri */
1495
+ photo_url: string | null;
1496
+ bio: string | null;
1497
+ /** @description Services this resource can perform. */
1498
+ service_ids: string[];
1499
+ capacity: number | null;
1500
+ sort_order: number | null;
1501
+ active: boolean;
1226
1502
  /** Format: date-time */
1227
- consentTimestamp: string;
1228
- ipAddress?: string;
1229
- userAgent?: string;
1230
- cookiePreferences: {
1231
- [key: string]: components["schemas"]["CookieCategoryConsent"];
1232
- };
1503
+ created_at: string | null;
1504
+ /** Format: date-time */
1505
+ updated_at: string | null;
1506
+ };
1507
+ BookingSlot: {
1508
+ /** Format: date-time */
1509
+ start_ts: string | null;
1510
+ /** Format: date-time */
1511
+ end_ts: string | null;
1512
+ resource_id: string | null;
1513
+ };
1514
+ /** @description One date a service can be booked on. `date` is the workspace's own calendar date, not a timestamp. */
1515
+ BookingScheduleDay: {
1516
+ /** Format: date */
1517
+ date: string | null;
1518
+ /** Format: date-time */
1519
+ opens_ts: string | null;
1520
+ /** Format: date-time */
1521
+ closes_ts: string | null;
1522
+ /**
1523
+ * Format: date-time
1524
+ * @description Last start this service could occupy on the date; `null` when the date is shut outright.
1525
+ */
1526
+ last_start_ts: string | null;
1527
+ };
1528
+ /** @description The person the booking is made under. Phone is the CRM dedupe key. */
1529
+ BookingContactInput: {
1530
+ phone: string;
1531
+ email?: string;
1532
+ name?: string;
1533
+ };
1534
+ /** @description One line of a party — a single service on a single slot. */
1535
+ CreateBookingItemInput: {
1536
+ service_id: string;
1537
+ /** @description Omit to let the engine pick a free resource. */
1538
+ resource_id?: string;
1539
+ start_ts: components["schemas"]["BookingTimestampInput"];
1540
+ booked_for_name?: string;
1541
+ booked_for_birth_year?: number;
1542
+ };
1543
+ CreateBookingInput: {
1544
+ /** @description A PARTY — one request books a whole family in one all-or-nothing transaction. */
1545
+ items: components["schemas"]["CreateBookingItemInput"][];
1546
+ contact: components["schemas"]["BookingContactInput"];
1547
+ notes?: string;
1548
+ /**
1549
+ * @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.
1550
+ * @enum {string}
1551
+ */
1552
+ created_via?: "web" | "api";
1553
+ };
1554
+ CreatedBooking: {
1555
+ id: string;
1556
+ /** @description Show-once secret for the customer's manage link. Only its hash is stored, and an idempotent replay omits this field entirely. */
1557
+ manage_token?: string;
1558
+ };
1559
+ BookingCreateResult: {
1560
+ /** @description One entry per created booking, in request order. */
1561
+ bookings: components["schemas"]["CreatedBooking"][];
1562
+ contact_id: string;
1563
+ };
1564
+ BookingActionResult: {
1565
+ /** @constant */
1566
+ success: true;
1567
+ };
1568
+ BookingRescheduleResult: {
1569
+ /** @constant */
1570
+ success: true;
1571
+ /** @description The NEW booking's id — a reschedule cancels the old row and inserts a new one. */
1572
+ booking_id: string;
1573
+ /** @description Freshly minted manage token for the new booking; omitted on an idempotent replay. */
1574
+ manage_token?: string;
1575
+ };
1576
+ /** @description What the holder of a manage token may see and do. `can_cancel` and `can_reschedule` already apply the workspace's policy windows. */
1577
+ ManageSummary: {
1578
+ booking_id: string;
1579
+ contact_id: string | null;
1580
+ status: components["schemas"]["BookingStatus"] | null;
1581
+ cancelled_by: components["schemas"]["BookingCancelledBy"] | null;
1582
+ cancel_reason: string | null;
1583
+ rescheduled_from_id: string | null;
1584
+ /** Format: date-time */
1585
+ start_ts: string | null;
1586
+ /** Format: date-time */
1587
+ end_ts: string | null;
1588
+ service_id: string | null;
1589
+ service_name: string | null;
1590
+ resource_id: string | null;
1591
+ resource_name: string | null;
1592
+ booked_for_name: string | null;
1593
+ party_sequence_id: string | null;
1594
+ /** @description Price in integer øre. */
1595
+ amount_ore: number | null;
1596
+ payment_status: components["schemas"]["BookingPaymentStatus"] | null;
1597
+ /** @description IANA zone the booking's local times should be rendered in. */
1598
+ time_zone: string | null;
1599
+ cancel_window_hours: number | null;
1600
+ reschedule_window_hours: number | null;
1601
+ can_cancel: boolean;
1602
+ can_reschedule: boolean;
1603
+ };
1604
+ /** @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. */
1605
+ UpdateBookingInput: {
1606
+ /** @description Customer-visible note. */
1607
+ notes: string;
1608
+ /** @description Staff-only note. */
1609
+ internal_notes?: string;
1610
+ } | {
1611
+ /** @description Customer-visible note. */
1612
+ notes?: string;
1613
+ /** @description Staff-only note. */
1614
+ internal_notes: string;
1615
+ };
1616
+ CancelBookingInput: {
1617
+ reason?: string;
1618
+ };
1619
+ RescheduleBookingInput: {
1620
+ new_start_ts: components["schemas"]["BookingTimestampInput"];
1621
+ new_resource_id?: string;
1622
+ };
1623
+ /** @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. */
1624
+ BookingsPagination: {
1625
+ has_more: boolean;
1626
+ next_cursor: string | null;
1627
+ truncated: boolean;
1628
+ };
1629
+ GdprExport: {
1630
+ id: string;
1631
+ request_type: string;
1632
+ status: string;
1633
+ /** Format: date-time */
1634
+ submitted_at: string | null;
1635
+ /** Format: date-time */
1636
+ completed_at: string | null;
1637
+ /** Format: date-time */
1638
+ due_date?: string | null;
1639
+ /** Format: uri */
1640
+ download_url?: string | null;
1641
+ /** Format: date-time */
1642
+ expires_at?: string | null;
1643
+ };
1644
+ GdprExportRequest: {
1645
+ request_id: string;
1646
+ status: string;
1647
+ };
1648
+ /** @enum {string} */
1649
+ ConsentType: "marketing_email" | "analytics_tracking" | "third_party_sharing";
1650
+ RecordConsentInput: {
1651
+ /** Format: email */
1652
+ email: string;
1653
+ consent_type: components["schemas"]["ConsentType"];
1654
+ granted: boolean;
1655
+ source?: string;
1656
+ ip_address?: string;
1657
+ consent_text?: string;
1658
+ version?: string;
1659
+ };
1660
+ ConsentRecord: {
1661
+ id: string;
1662
+ /** Format: email */
1663
+ email: string;
1664
+ consent_type: components["schemas"]["ConsentType"];
1665
+ granted: boolean;
1666
+ /** Format: date-time */
1667
+ granted_at: string | null;
1668
+ /** Format: date-time */
1669
+ revoked_at: string | null;
1670
+ source?: string;
1671
+ version?: string;
1672
+ };
1673
+ ConsentResult: {
1674
+ id: string;
1675
+ };
1676
+ CookieConsentInput: {
1677
+ domain: string;
1678
+ consentStatus: string;
1679
+ /** Format: date-time */
1680
+ consentTimestamp: string;
1681
+ ipAddress?: string;
1682
+ userAgent?: string;
1683
+ cookiePreferences: {
1684
+ [key: string]: components["schemas"]["CookieCategoryConsent"];
1685
+ };
1233
1686
  };
1234
1687
  CookieCategoryConsent: {
1235
1688
  allowed: boolean;
@@ -1503,6 +1956,15 @@ interface components {
1503
1956
  ApiResponse_DealCreateResult: components["schemas"]["Envelope_DealCreateResult"];
1504
1957
  ApiResponse_DealUpdateResult: components["schemas"]["Envelope_DealUpdateResult"];
1505
1958
  ApiResponse_DealRemoveResult: components["schemas"]["Envelope_DealRemoveResult"];
1959
+ ApiResponse_Booking: components["schemas"]["Envelope_Booking"];
1960
+ ApiResponse_BookingServiceArray: components["schemas"]["Envelope_BookingServiceArray"];
1961
+ ApiResponse_BookingResourceArray: components["schemas"]["Envelope_BookingResourceArray"];
1962
+ ApiResponse_BookingSlotArray: components["schemas"]["Envelope_BookingSlotArray"];
1963
+ ApiResponse_BookingScheduleDayArray: components["schemas"]["Envelope_BookingScheduleDayArray"];
1964
+ ApiResponse_BookingCreateResult: components["schemas"]["Envelope_BookingCreateResult"];
1965
+ ApiResponse_BookingActionResult: components["schemas"]["Envelope_BookingActionResult"];
1966
+ ApiResponse_BookingRescheduleResult: components["schemas"]["Envelope_BookingRescheduleResult"];
1967
+ ApiResponse_ManageSummary: components["schemas"]["Envelope_ManageSummary"];
1506
1968
  ApiResponse_GdprExportRequest: components["schemas"]["Envelope_GdprExportRequest"];
1507
1969
  ApiResponse_GdprExportArray: components["schemas"]["Envelope_GdprExportArray"];
1508
1970
  ApiResponse_GdprExport: components["schemas"]["Envelope_GdprExport"];
@@ -1541,6 +2003,10 @@ interface components {
1541
2003
  data: components["schemas"]["Deal"][];
1542
2004
  pagination: components["schemas"]["Pagination"];
1543
2005
  };
2006
+ PaginatedResponse_Booking: {
2007
+ data: components["schemas"]["Booking"][];
2008
+ pagination: components["schemas"]["BookingsPagination"];
2009
+ };
1544
2010
  PaginatedResponse_HelpdeskConversation: {
1545
2011
  data: components["schemas"]["HelpdeskConversation"][];
1546
2012
  pagination: components["schemas"]["Pagination"];
@@ -1620,6 +2086,33 @@ interface components {
1620
2086
  Envelope_DealRemoveResult: {
1621
2087
  data: components["schemas"]["DealRemoveResult"];
1622
2088
  };
2089
+ Envelope_Booking: {
2090
+ data: components["schemas"]["Booking"];
2091
+ };
2092
+ Envelope_BookingServiceArray: {
2093
+ data: components["schemas"]["BookingService"][];
2094
+ };
2095
+ Envelope_BookingResourceArray: {
2096
+ data: components["schemas"]["BookingResource"][];
2097
+ };
2098
+ Envelope_BookingSlotArray: {
2099
+ data: components["schemas"]["BookingSlot"][];
2100
+ };
2101
+ Envelope_BookingScheduleDayArray: {
2102
+ data: components["schemas"]["BookingScheduleDay"][];
2103
+ };
2104
+ Envelope_BookingCreateResult: {
2105
+ data: components["schemas"]["BookingCreateResult"];
2106
+ };
2107
+ Envelope_BookingActionResult: {
2108
+ data: components["schemas"]["BookingActionResult"];
2109
+ };
2110
+ Envelope_BookingRescheduleResult: {
2111
+ data: components["schemas"]["BookingRescheduleResult"];
2112
+ };
2113
+ Envelope_ManageSummary: {
2114
+ data: components["schemas"]["ManageSummary"];
2115
+ };
1623
2116
  /** @description Provide exactly one of `url`, `orgnr`, or `name`. */
1624
2117
  ScanCreateInput: {
1625
2118
  url?: string;
@@ -1799,6 +2292,8 @@ interface components {
1799
2292
  parameters: {
1800
2293
  Id: string;
1801
2294
  Slug: string;
2295
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
2296
+ ManageToken: string;
1802
2297
  Cursor: string;
1803
2298
  Limit: number;
1804
2299
  };
@@ -2454,6 +2949,371 @@ interface operations {
2454
2949
  default: components["responses"]["ApiError"];
2455
2950
  };
2456
2951
  };
2952
+ listBookings: {
2953
+ parameters: {
2954
+ query?: {
2955
+ limit?: components["parameters"]["Limit"];
2956
+ cursor?: components["parameters"]["Cursor"];
2957
+ /** @description Only bookings starting at or after this instant. */
2958
+ from_ts?: components["schemas"]["BookingTimestampInput"];
2959
+ /** @description Only bookings starting before this instant. */
2960
+ to_ts?: components["schemas"]["BookingTimestampInput"];
2961
+ status?: components["schemas"]["BookingStatus"];
2962
+ resource_id?: string;
2963
+ };
2964
+ header?: never;
2965
+ path?: never;
2966
+ cookie?: never;
2967
+ };
2968
+ requestBody?: never;
2969
+ responses: {
2970
+ /** @description Bookings page. */
2971
+ 200: {
2972
+ headers: {
2973
+ [name: string]: unknown;
2974
+ };
2975
+ content: {
2976
+ "application/json": components["schemas"]["PaginatedResponse_Booking"];
2977
+ };
2978
+ };
2979
+ default: components["responses"]["ApiError"];
2980
+ };
2981
+ };
2982
+ createBooking: {
2983
+ parameters: {
2984
+ query?: never;
2985
+ header?: never;
2986
+ path?: never;
2987
+ cookie?: never;
2988
+ };
2989
+ requestBody: {
2990
+ content: {
2991
+ "application/json": components["schemas"]["CreateBookingInput"];
2992
+ };
2993
+ };
2994
+ responses: {
2995
+ /** @description Created bookings, in request order. */
2996
+ 201: {
2997
+ headers: {
2998
+ [name: string]: unknown;
2999
+ };
3000
+ content: {
3001
+ "application/json": components["schemas"]["ApiResponse_BookingCreateResult"];
3002
+ };
3003
+ };
3004
+ default: components["responses"]["ApiError"];
3005
+ };
3006
+ };
3007
+ listBookingServices: {
3008
+ parameters: {
3009
+ query?: {
3010
+ /** @description Include services with `active: false`. Defaults to active-only. */
3011
+ include_inactive?: boolean;
3012
+ };
3013
+ header?: never;
3014
+ path?: never;
3015
+ cookie?: never;
3016
+ };
3017
+ requestBody?: never;
3018
+ responses: {
3019
+ /** @description Bookable service catalogue. */
3020
+ 200: {
3021
+ headers: {
3022
+ [name: string]: unknown;
3023
+ };
3024
+ content: {
3025
+ "application/json": components["schemas"]["ApiResponse_BookingServiceArray"];
3026
+ };
3027
+ };
3028
+ default: components["responses"]["ApiError"];
3029
+ };
3030
+ };
3031
+ listBookingResources: {
3032
+ parameters: {
3033
+ query?: never;
3034
+ header?: never;
3035
+ path?: never;
3036
+ cookie?: never;
3037
+ };
3038
+ requestBody?: never;
3039
+ responses: {
3040
+ /** @description Bookable resources — staff, rooms, and equipment. */
3041
+ 200: {
3042
+ headers: {
3043
+ [name: string]: unknown;
3044
+ };
3045
+ content: {
3046
+ "application/json": components["schemas"]["ApiResponse_BookingResourceArray"];
3047
+ };
3048
+ };
3049
+ default: components["responses"]["ApiError"];
3050
+ };
3051
+ };
3052
+ listBookingAvailability: {
3053
+ parameters: {
3054
+ query: {
3055
+ service_id: string;
3056
+ /** @description Start of the window. */
3057
+ from_ts: components["schemas"]["BookingTimestampInput"];
3058
+ /** @description End of the window; must be after `from_ts`. */
3059
+ to_ts: components["schemas"]["BookingTimestampInput"];
3060
+ /** @description Restrict slots to one resource. */
3061
+ resource_id?: string;
3062
+ };
3063
+ header?: never;
3064
+ path?: never;
3065
+ cookie?: never;
3066
+ };
3067
+ requestBody?: never;
3068
+ responses: {
3069
+ /** @description Free slots. */
3070
+ 200: {
3071
+ headers: {
3072
+ [name: string]: unknown;
3073
+ };
3074
+ content: {
3075
+ "application/json": components["schemas"]["ApiResponse_BookingSlotArray"];
3076
+ };
3077
+ };
3078
+ default: components["responses"]["ApiError"];
3079
+ };
3080
+ };
3081
+ listBookingSchedule: {
3082
+ parameters: {
3083
+ query: {
3084
+ service_id: string;
3085
+ /** @description Start of the window. */
3086
+ from_ts: components["schemas"]["BookingTimestampInput"];
3087
+ /** @description End of the window; must be after `from_ts`. */
3088
+ to_ts: components["schemas"]["BookingTimestampInput"];
3089
+ /** @description Restrict to one resource's hours. */
3090
+ resource_id?: string;
3091
+ };
3092
+ header?: never;
3093
+ path?: never;
3094
+ cookie?: never;
3095
+ };
3096
+ requestBody?: never;
3097
+ responses: {
3098
+ /** @description Open dates. */
3099
+ 200: {
3100
+ headers: {
3101
+ [name: string]: unknown;
3102
+ };
3103
+ content: {
3104
+ "application/json": components["schemas"]["ApiResponse_BookingScheduleDayArray"];
3105
+ };
3106
+ };
3107
+ default: components["responses"]["ApiError"];
3108
+ };
3109
+ };
3110
+ getBooking: {
3111
+ parameters: {
3112
+ query?: never;
3113
+ header?: never;
3114
+ path: {
3115
+ id: components["parameters"]["Id"];
3116
+ };
3117
+ cookie?: never;
3118
+ };
3119
+ requestBody?: never;
3120
+ responses: {
3121
+ /** @description Booking. */
3122
+ 200: {
3123
+ headers: {
3124
+ [name: string]: unknown;
3125
+ };
3126
+ content: {
3127
+ "application/json": components["schemas"]["ApiResponse_Booking"];
3128
+ };
3129
+ };
3130
+ default: components["responses"]["ApiError"];
3131
+ };
3132
+ };
3133
+ updateBooking: {
3134
+ parameters: {
3135
+ query?: never;
3136
+ header?: never;
3137
+ path: {
3138
+ id: components["parameters"]["Id"];
3139
+ };
3140
+ cookie?: never;
3141
+ };
3142
+ requestBody: {
3143
+ content: {
3144
+ "application/json": components["schemas"]["UpdateBookingInput"];
3145
+ };
3146
+ };
3147
+ responses: {
3148
+ /** @description The updated booking. */
3149
+ 200: {
3150
+ headers: {
3151
+ [name: string]: unknown;
3152
+ };
3153
+ content: {
3154
+ "application/json": components["schemas"]["ApiResponse_Booking"];
3155
+ };
3156
+ };
3157
+ default: components["responses"]["ApiError"];
3158
+ };
3159
+ };
3160
+ cancelBooking: {
3161
+ parameters: {
3162
+ query?: never;
3163
+ header?: never;
3164
+ path: {
3165
+ id: components["parameters"]["Id"];
3166
+ };
3167
+ cookie?: never;
3168
+ };
3169
+ requestBody: {
3170
+ content: {
3171
+ "application/json": components["schemas"]["CancelBookingInput"];
3172
+ };
3173
+ };
3174
+ responses: {
3175
+ /** @description Cancel result. */
3176
+ 200: {
3177
+ headers: {
3178
+ [name: string]: unknown;
3179
+ };
3180
+ content: {
3181
+ "application/json": components["schemas"]["ApiResponse_BookingActionResult"];
3182
+ };
3183
+ };
3184
+ default: components["responses"]["ApiError"];
3185
+ };
3186
+ };
3187
+ rescheduleBooking: {
3188
+ parameters: {
3189
+ query?: never;
3190
+ header?: never;
3191
+ path: {
3192
+ id: components["parameters"]["Id"];
3193
+ };
3194
+ cookie?: never;
3195
+ };
3196
+ requestBody: {
3197
+ content: {
3198
+ "application/json": components["schemas"]["RescheduleBookingInput"];
3199
+ };
3200
+ };
3201
+ responses: {
3202
+ /** @description Reschedule result. */
3203
+ 200: {
3204
+ headers: {
3205
+ [name: string]: unknown;
3206
+ };
3207
+ content: {
3208
+ "application/json": components["schemas"]["ApiResponse_BookingRescheduleResult"];
3209
+ };
3210
+ };
3211
+ default: components["responses"]["ApiError"];
3212
+ };
3213
+ };
3214
+ markBookingNoShow: {
3215
+ parameters: {
3216
+ query?: never;
3217
+ header?: never;
3218
+ path: {
3219
+ id: components["parameters"]["Id"];
3220
+ };
3221
+ cookie?: never;
3222
+ };
3223
+ requestBody?: never;
3224
+ responses: {
3225
+ /** @description No-show result. */
3226
+ 200: {
3227
+ headers: {
3228
+ [name: string]: unknown;
3229
+ };
3230
+ content: {
3231
+ "application/json": components["schemas"]["ApiResponse_BookingActionResult"];
3232
+ };
3233
+ };
3234
+ default: components["responses"]["ApiError"];
3235
+ };
3236
+ };
3237
+ getManagedBooking: {
3238
+ parameters: {
3239
+ query?: never;
3240
+ header?: never;
3241
+ path: {
3242
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
3243
+ token: components["parameters"]["ManageToken"];
3244
+ };
3245
+ cookie?: never;
3246
+ };
3247
+ requestBody?: never;
3248
+ responses: {
3249
+ /** @description Manage summary. An unknown token and a token belonging to another workspace both answer 404, so this is not an existence oracle. */
3250
+ 200: {
3251
+ headers: {
3252
+ [name: string]: unknown;
3253
+ };
3254
+ content: {
3255
+ "application/json": components["schemas"]["ApiResponse_ManageSummary"];
3256
+ };
3257
+ };
3258
+ default: components["responses"]["ApiError"];
3259
+ };
3260
+ };
3261
+ cancelManagedBooking: {
3262
+ parameters: {
3263
+ query?: never;
3264
+ header?: never;
3265
+ path: {
3266
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
3267
+ token: components["parameters"]["ManageToken"];
3268
+ };
3269
+ cookie?: never;
3270
+ };
3271
+ requestBody: {
3272
+ content: {
3273
+ "application/json": components["schemas"]["CancelBookingInput"];
3274
+ };
3275
+ };
3276
+ responses: {
3277
+ /** @description Cancel result. */
3278
+ 200: {
3279
+ headers: {
3280
+ [name: string]: unknown;
3281
+ };
3282
+ content: {
3283
+ "application/json": components["schemas"]["ApiResponse_BookingActionResult"];
3284
+ };
3285
+ };
3286
+ default: components["responses"]["ApiError"];
3287
+ };
3288
+ };
3289
+ rescheduleManagedBooking: {
3290
+ parameters: {
3291
+ query?: never;
3292
+ header?: never;
3293
+ path: {
3294
+ /** @description The show-once manage token handed out when the booking was created. Possession of it authorizes the customer's own cancel or reschedule. */
3295
+ token: components["parameters"]["ManageToken"];
3296
+ };
3297
+ cookie?: never;
3298
+ };
3299
+ requestBody: {
3300
+ content: {
3301
+ "application/json": components["schemas"]["RescheduleBookingInput"];
3302
+ };
3303
+ };
3304
+ responses: {
3305
+ /** @description Reschedule result. */
3306
+ 200: {
3307
+ headers: {
3308
+ [name: string]: unknown;
3309
+ };
3310
+ content: {
3311
+ "application/json": components["schemas"]["ApiResponse_BookingRescheduleResult"];
3312
+ };
3313
+ };
3314
+ default: components["responses"]["ApiError"];
3315
+ };
3316
+ };
2457
3317
  requestGdprExport: {
2458
3318
  parameters: {
2459
3319
  query?: never;