@praxium/sdk 0.2.4

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.
@@ -0,0 +1,1263 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+
3
+ export type ClientOptions = {
4
+ baseUrl: 'https://platform.praxium.nl' | 'http://localhost:3300' | (string & {});
5
+ };
6
+
7
+ /**
8
+ * Tenant identifier slug
9
+ */
10
+ export type TenantSlug = string;
11
+
12
+ /**
13
+ * Weekly opening hours schedule. Null if not configured.
14
+ */
15
+ export type OpeningHours = {
16
+ /**
17
+ * Weekly schedule (7 entries, Mon-Sun)
18
+ */
19
+ schedule: Array<PublicDaySchedule>;
20
+ /**
21
+ * General note about opening hours
22
+ */
23
+ globalNote: string | null;
24
+ } | null;
25
+
26
+ /**
27
+ * Daily opening schedule entry
28
+ */
29
+ export type PublicDaySchedule = {
30
+ /**
31
+ * Day of week (0=Monday, 6=Sunday)
32
+ */
33
+ dayIndex: number;
34
+ /**
35
+ * Localized day name
36
+ */
37
+ dayName: string;
38
+ /**
39
+ * Opening hours text
40
+ */
41
+ hours: string | null;
42
+ /**
43
+ * Whether the practice is closed on this day
44
+ */
45
+ isClosed: boolean;
46
+ /**
47
+ * Additional note for this day
48
+ */
49
+ note: string | null;
50
+ };
51
+
52
+ /**
53
+ * Standard error response
54
+ */
55
+ export type ApiError = {
56
+ /**
57
+ * Error type
58
+ */
59
+ error: string;
60
+ /**
61
+ * Machine-readable error code
62
+ */
63
+ errorCode: string;
64
+ /**
65
+ * Human-readable error message
66
+ */
67
+ message: string;
68
+ /**
69
+ * Validation error details (only for 400 responses)
70
+ */
71
+ details?: Array<{
72
+ /**
73
+ * Field path that failed validation
74
+ */
75
+ field: string;
76
+ /**
77
+ * Validation error message
78
+ */
79
+ message: string;
80
+ }>;
81
+ };
82
+
83
+ /**
84
+ * Practice contact details. Null if not configured.
85
+ */
86
+ export type ContactDetails = {
87
+ /**
88
+ * Main phone number
89
+ */
90
+ phone: string;
91
+ /**
92
+ * WhatsApp contact number
93
+ */
94
+ whatsappPhone: string;
95
+ /**
96
+ * Contact email address
97
+ */
98
+ email: string;
99
+ } | null;
100
+
101
+ /**
102
+ * Contact form submission result
103
+ */
104
+ export type ContactFormResult = {
105
+ /**
106
+ * Whether the form was submitted successfully
107
+ */
108
+ success: boolean;
109
+ /**
110
+ * Email delivery status
111
+ */
112
+ emailStatus: string;
113
+ };
114
+
115
+ /**
116
+ * Practice location with coordinates and directions. Null if not configured.
117
+ */
118
+ export type Location = {
119
+ /**
120
+ * Street address
121
+ */
122
+ address: string;
123
+ /**
124
+ * City name
125
+ */
126
+ city: string;
127
+ /**
128
+ * Postal/ZIP code
129
+ */
130
+ postalCode: string;
131
+ /**
132
+ * Country name (localized)
133
+ */
134
+ country: string;
135
+ /**
136
+ * Complete formatted address
137
+ */
138
+ fullAddress: string;
139
+ /**
140
+ * GPS latitude coordinate
141
+ */
142
+ latitude: number | null;
143
+ /**
144
+ * GPS longitude coordinate
145
+ */
146
+ longitude: number | null;
147
+ /**
148
+ * Google Maps URL for the practice
149
+ */
150
+ googleMapsUrl: string | null;
151
+ /**
152
+ * Parking information (localized)
153
+ */
154
+ parkingInfo: string | null;
155
+ /**
156
+ * Accessibility information (localized)
157
+ */
158
+ accessibility: string | null;
159
+ } | null;
160
+
161
+ /**
162
+ * Practice business name
163
+ */
164
+ export type BusinessName = {
165
+ /**
166
+ * Practice name (localized)
167
+ */
168
+ name: string;
169
+ };
170
+
171
+ /**
172
+ * Social media profile URLs. Null if not configured.
173
+ */
174
+ export type SocialLinks = {
175
+ /**
176
+ * Facebook page URL
177
+ */
178
+ facebook?: string;
179
+ /**
180
+ * Instagram profile URL
181
+ */
182
+ instagram?: string;
183
+ /**
184
+ * LinkedIn page URL
185
+ */
186
+ linkedin?: string;
187
+ /**
188
+ * Twitter/X profile URL
189
+ */
190
+ twitter?: string;
191
+ } | null;
192
+
193
+ /**
194
+ * List of team members visible on the public team page
195
+ */
196
+ export type TeamMembers = Array<PublicTeamMember>;
197
+
198
+ /**
199
+ * Public team member profile
200
+ */
201
+ export type PublicTeamMember = {
202
+ /**
203
+ * Staff member UUID
204
+ */
205
+ id: string;
206
+ /**
207
+ * Public display name
208
+ */
209
+ publicName: string;
210
+ /**
211
+ * Public profile image URL (Supabase CDN)
212
+ */
213
+ publicImage: string;
214
+ /**
215
+ * List of specializations
216
+ */
217
+ specializations: Array<LocalizedSpecialization>;
218
+ /**
219
+ * Staff biography in NL and EN
220
+ */
221
+ bio: BilingualText | null;
222
+ /**
223
+ * BIG registration number (Dutch healthcare registration)
224
+ */
225
+ bigNumber: string | null;
226
+ };
227
+
228
+ /**
229
+ * Specialization with bilingual names
230
+ */
231
+ export type LocalizedSpecialization = {
232
+ /**
233
+ * Dutch specialization name
234
+ */
235
+ nl: string;
236
+ /**
237
+ * English specialization name
238
+ */
239
+ en: string;
240
+ };
241
+
242
+ /**
243
+ * Bilingual text with Dutch (nl) and English (en) translations
244
+ */
245
+ export type BilingualText = {
246
+ /**
247
+ * Dutch text
248
+ */
249
+ nl: string;
250
+ /**
251
+ * English text
252
+ */
253
+ en: string;
254
+ };
255
+
256
+ /**
257
+ * FAQs grouped by category, ordered by category.order then faq.order
258
+ */
259
+ export type FaqContent = Array<FaqGroup>;
260
+
261
+ /**
262
+ * FAQ category with its items
263
+ */
264
+ export type FaqGroup = {
265
+ /**
266
+ * The FAQ category
267
+ */
268
+ category: FaqCategory;
269
+ /**
270
+ * FAQ items in this category
271
+ */
272
+ faqs: Array<FaqItem>;
273
+ };
274
+
275
+ /**
276
+ * FAQ category with bilingual name
277
+ */
278
+ export type FaqCategory = {
279
+ /**
280
+ * Category UUID
281
+ */
282
+ id: string;
283
+ /**
284
+ * Category name per locale
285
+ */
286
+ name: {
287
+ [key: string]: string;
288
+ };
289
+ /**
290
+ * Display order (ascending)
291
+ */
292
+ order: number;
293
+ };
294
+
295
+ /**
296
+ * Individual FAQ question and answer
297
+ */
298
+ export type FaqItem = {
299
+ /**
300
+ * FAQ item UUID
301
+ */
302
+ id: string;
303
+ /**
304
+ * Question text per locale
305
+ */
306
+ question: {
307
+ [key: string]: string;
308
+ };
309
+ /**
310
+ * Answer text per locale (may contain HTML)
311
+ */
312
+ answer: {
313
+ [key: string]: string;
314
+ };
315
+ /**
316
+ * Parent category UUID
317
+ */
318
+ categoryId: string;
319
+ /**
320
+ * Display order within category (ascending)
321
+ */
322
+ order: number;
323
+ /**
324
+ * Whether this FAQ item is currently visible
325
+ */
326
+ visible: boolean;
327
+ };
328
+
329
+ /**
330
+ * All service variants ordered by category, service, then variant order
331
+ */
332
+ export type PricingVariants = Array<PricingVariant>;
333
+
334
+ /**
335
+ * Service variant with pricing and category info
336
+ */
337
+ export type PricingVariant = {
338
+ /**
339
+ * Variant UUID
340
+ */
341
+ id: string;
342
+ /**
343
+ * Parent service name per locale
344
+ */
345
+ serviceName: {
346
+ [key: string]: string;
347
+ };
348
+ /**
349
+ * Variant name per locale (null if single variant)
350
+ */
351
+ name: {
352
+ [key: string]: string;
353
+ } | null;
354
+ /**
355
+ * Variant description per locale
356
+ */
357
+ description: {
358
+ [key: string]: string;
359
+ } | null;
360
+ /**
361
+ * Duration in minutes
362
+ */
363
+ duration: number;
364
+ /**
365
+ * Price in euros (cents)
366
+ */
367
+ price: number;
368
+ /**
369
+ * Display order within service
370
+ */
371
+ order: number;
372
+ /**
373
+ * Parent service category
374
+ */
375
+ category: ServiceCategoryInfo;
376
+ /**
377
+ * Category display order
378
+ */
379
+ categoryOrder: number;
380
+ /**
381
+ * Service display order within category
382
+ */
383
+ serviceOrder: number;
384
+ };
385
+
386
+ /**
387
+ * Service category metadata
388
+ */
389
+ export type ServiceCategoryInfo = {
390
+ /**
391
+ * Category UUID
392
+ */
393
+ id: string;
394
+ /**
395
+ * Category name per locale
396
+ */
397
+ name: {
398
+ [key: string]: string;
399
+ };
400
+ /**
401
+ * URL-safe category identifier
402
+ */
403
+ slug: string;
404
+ /**
405
+ * Category color hex code
406
+ */
407
+ color: string | null;
408
+ };
409
+
410
+ /**
411
+ * Insurance information items ordered by display order
412
+ */
413
+ export type InsuranceList = Array<InsuranceInfo>;
414
+
415
+ /**
416
+ * Insurance coverage information
417
+ */
418
+ export type InsuranceInfo = {
419
+ /**
420
+ * Insurance info UUID
421
+ */
422
+ id: string;
423
+ /**
424
+ * Title per locale
425
+ */
426
+ title: {
427
+ [key: string]: string;
428
+ };
429
+ /**
430
+ * Description per locale (may contain HTML)
431
+ */
432
+ description: {
433
+ [key: string]: string;
434
+ };
435
+ /**
436
+ * Display order (ascending)
437
+ */
438
+ order: number;
439
+ /**
440
+ * ISO 8601 creation timestamp
441
+ */
442
+ createdAt: string;
443
+ /**
444
+ * ISO 8601 last update timestamp
445
+ */
446
+ updatedAt: string;
447
+ };
448
+
449
+ /**
450
+ * Practice feature items ordered by display order
451
+ */
452
+ export type FeatureList = Array<FeatureItem>;
453
+
454
+ /**
455
+ * Practice feature or highlight
456
+ */
457
+ export type FeatureItem = {
458
+ /**
459
+ * Feature item UUID
460
+ */
461
+ id: string;
462
+ /**
463
+ * Feature text per locale
464
+ */
465
+ text: {
466
+ [key: string]: string;
467
+ };
468
+ /**
469
+ * Display order (ascending)
470
+ */
471
+ order: number;
472
+ /**
473
+ * ISO 8601 creation timestamp
474
+ */
475
+ createdAt: string;
476
+ /**
477
+ * ISO 8601 last update timestamp
478
+ */
479
+ updatedAt: string;
480
+ };
481
+
482
+ /**
483
+ * Accepted payment methods ordered by display order
484
+ */
485
+ export type PaymentMethodList = Array<PaymentMethod>;
486
+
487
+ /**
488
+ * Accepted payment method
489
+ */
490
+ export type PaymentMethod = {
491
+ /**
492
+ * Payment method UUID
493
+ */
494
+ id: string;
495
+ /**
496
+ * Payment method name per locale
497
+ */
498
+ name: {
499
+ [key: string]: string;
500
+ };
501
+ /**
502
+ * Display order (ascending)
503
+ */
504
+ order: number;
505
+ /**
506
+ * ISO 8601 creation timestamp
507
+ */
508
+ createdAt: string;
509
+ /**
510
+ * ISO 8601 last update timestamp
511
+ */
512
+ updatedAt: string;
513
+ };
514
+
515
+ /**
516
+ * Practice policy items ordered by display order
517
+ */
518
+ export type PolicyList = Array<PolicyInfo>;
519
+
520
+ /**
521
+ * Cancellation/practice policy information
522
+ */
523
+ export type PolicyInfo = {
524
+ /**
525
+ * Policy info UUID
526
+ */
527
+ id: string;
528
+ /**
529
+ * Policy title per locale
530
+ */
531
+ title: {
532
+ [key: string]: string;
533
+ };
534
+ /**
535
+ * Policy description per locale (may contain HTML)
536
+ */
537
+ description: {
538
+ [key: string]: string;
539
+ };
540
+ /**
541
+ * Display order (ascending)
542
+ */
543
+ order: number;
544
+ /**
545
+ * ISO 8601 creation timestamp
546
+ */
547
+ createdAt: string;
548
+ /**
549
+ * ISO 8601 last update timestamp
550
+ */
551
+ updatedAt: string;
552
+ };
553
+
554
+ /**
555
+ * All bookable services with their variants and categories
556
+ */
557
+ export type BookableServices = Array<BookableService>;
558
+
559
+ /**
560
+ * Service available for online booking with its variants
561
+ */
562
+ export type BookableService = {
563
+ /**
564
+ * Service UUID
565
+ */
566
+ id: string;
567
+ /**
568
+ * URL-safe service identifier
569
+ */
570
+ slug: string;
571
+ /**
572
+ * Service name per locale
573
+ */
574
+ name: {
575
+ [key: string]: string;
576
+ };
577
+ /**
578
+ * Service description per locale
579
+ */
580
+ description: {
581
+ [key: string]: string;
582
+ };
583
+ /**
584
+ * Service category
585
+ */
586
+ category: ServiceCategoryInfo;
587
+ /**
588
+ * Service color hex code
589
+ */
590
+ color: string | null;
591
+ /**
592
+ * Available booking variants
593
+ */
594
+ variants: Array<BookableVariantInfo>;
595
+ };
596
+
597
+ /**
598
+ * Bookable service variant with pricing
599
+ */
600
+ export type BookableVariantInfo = {
601
+ /**
602
+ * Variant UUID
603
+ */
604
+ id: string;
605
+ /**
606
+ * Variant name per locale (null for single-variant services)
607
+ */
608
+ name: {
609
+ [key: string]: string;
610
+ } | null;
611
+ /**
612
+ * Duration in minutes
613
+ */
614
+ duration: number;
615
+ /**
616
+ * Price in euros (cents)
617
+ */
618
+ price: number;
619
+ /**
620
+ * Display order within service
621
+ */
622
+ order: number;
623
+ /**
624
+ * Whether this is the default variant for the service
625
+ */
626
+ isDefault: boolean;
627
+ /**
628
+ * Cal.com event type slug for online booking
629
+ */
630
+ externalEventTypeSlug: string | null;
631
+ /**
632
+ * Variant description per locale
633
+ */
634
+ description: {
635
+ [key: string]: string;
636
+ } | null;
637
+ };
638
+
639
+ export type GetOpeningHoursData = {
640
+ body?: never;
641
+ path: {
642
+ /**
643
+ * Tenant identifier slug
644
+ */
645
+ tenantSlug: TenantSlug;
646
+ };
647
+ query?: never;
648
+ url: '/api/public/{tenantSlug}/opening-hours';
649
+ };
650
+
651
+ export type GetOpeningHoursErrors = {
652
+ /**
653
+ * Invalid or missing API key
654
+ */
655
+ 401: ApiError;
656
+ /**
657
+ * API key does not match the requested tenant
658
+ */
659
+ 403: ApiError;
660
+ /**
661
+ * Tenant not found or inactive
662
+ */
663
+ 404: ApiError;
664
+ /**
665
+ * Rate limit exceeded
666
+ */
667
+ 429: ApiError;
668
+ };
669
+
670
+ export type GetOpeningHoursError = GetOpeningHoursErrors[keyof GetOpeningHoursErrors];
671
+
672
+ export type GetOpeningHoursResponses = {
673
+ /**
674
+ * Opening hours data (null if not configured)
675
+ */
676
+ 200: {
677
+ data: OpeningHours;
678
+ };
679
+ };
680
+
681
+ export type GetOpeningHoursResponse = GetOpeningHoursResponses[keyof GetOpeningHoursResponses];
682
+
683
+ export type GetContactDetailsData = {
684
+ body?: never;
685
+ path: {
686
+ /**
687
+ * Tenant identifier slug
688
+ */
689
+ tenantSlug: TenantSlug;
690
+ };
691
+ query?: never;
692
+ url: '/api/public/{tenantSlug}/contact';
693
+ };
694
+
695
+ export type GetContactDetailsErrors = {
696
+ /**
697
+ * Invalid or missing API key
698
+ */
699
+ 401: ApiError;
700
+ /**
701
+ * API key does not match the requested tenant
702
+ */
703
+ 403: ApiError;
704
+ /**
705
+ * Tenant not found or inactive
706
+ */
707
+ 404: ApiError;
708
+ /**
709
+ * Rate limit exceeded
710
+ */
711
+ 429: ApiError;
712
+ };
713
+
714
+ export type GetContactDetailsError = GetContactDetailsErrors[keyof GetContactDetailsErrors];
715
+
716
+ export type GetContactDetailsResponses = {
717
+ /**
718
+ * Contact details (null if not configured)
719
+ */
720
+ 200: {
721
+ data: ContactDetails;
722
+ };
723
+ };
724
+
725
+ export type GetContactDetailsResponse = GetContactDetailsResponses[keyof GetContactDetailsResponses];
726
+
727
+ export type SubmitContactFormData = {
728
+ body: {
729
+ name: string;
730
+ email: string;
731
+ phone?: string;
732
+ subject: string;
733
+ message: string;
734
+ };
735
+ path: {
736
+ /**
737
+ * Tenant identifier slug
738
+ */
739
+ tenantSlug: TenantSlug;
740
+ };
741
+ query?: never;
742
+ url: '/api/public/{tenantSlug}/contact';
743
+ };
744
+
745
+ export type SubmitContactFormErrors = {
746
+ /**
747
+ * Validation failed
748
+ */
749
+ 400: ApiError;
750
+ /**
751
+ * Invalid or missing API key
752
+ */
753
+ 401: ApiError;
754
+ /**
755
+ * API key does not match the requested tenant
756
+ */
757
+ 403: ApiError;
758
+ /**
759
+ * Tenant not found or inactive
760
+ */
761
+ 404: ApiError;
762
+ /**
763
+ * Rate limit exceeded
764
+ */
765
+ 429: ApiError;
766
+ };
767
+
768
+ export type SubmitContactFormError = SubmitContactFormErrors[keyof SubmitContactFormErrors];
769
+
770
+ export type SubmitContactFormResponses = {
771
+ /**
772
+ * Form submitted successfully
773
+ */
774
+ 200: {
775
+ data: ContactFormResult;
776
+ };
777
+ };
778
+
779
+ export type SubmitContactFormResponse = SubmitContactFormResponses[keyof SubmitContactFormResponses];
780
+
781
+ export type GetLocationData = {
782
+ body?: never;
783
+ path: {
784
+ /**
785
+ * Tenant identifier slug
786
+ */
787
+ tenantSlug: TenantSlug;
788
+ };
789
+ query?: never;
790
+ url: '/api/public/{tenantSlug}/location';
791
+ };
792
+
793
+ export type GetLocationErrors = {
794
+ /**
795
+ * Invalid or missing API key
796
+ */
797
+ 401: ApiError;
798
+ /**
799
+ * API key does not match the requested tenant
800
+ */
801
+ 403: ApiError;
802
+ /**
803
+ * Tenant not found or inactive
804
+ */
805
+ 404: ApiError;
806
+ /**
807
+ * Rate limit exceeded
808
+ */
809
+ 429: ApiError;
810
+ };
811
+
812
+ export type GetLocationError = GetLocationErrors[keyof GetLocationErrors];
813
+
814
+ export type GetLocationResponses = {
815
+ /**
816
+ * Location data (null if not configured)
817
+ */
818
+ 200: {
819
+ data: Location;
820
+ };
821
+ };
822
+
823
+ export type GetLocationResponse = GetLocationResponses[keyof GetLocationResponses];
824
+
825
+ export type GetBusinessNameData = {
826
+ body?: never;
827
+ path: {
828
+ /**
829
+ * Tenant identifier slug
830
+ */
831
+ tenantSlug: TenantSlug;
832
+ };
833
+ query?: never;
834
+ url: '/api/public/{tenantSlug}/business';
835
+ };
836
+
837
+ export type GetBusinessNameErrors = {
838
+ /**
839
+ * Invalid or missing API key
840
+ */
841
+ 401: ApiError;
842
+ /**
843
+ * API key does not match the requested tenant
844
+ */
845
+ 403: ApiError;
846
+ /**
847
+ * Tenant not found or inactive
848
+ */
849
+ 404: ApiError;
850
+ /**
851
+ * Rate limit exceeded
852
+ */
853
+ 429: ApiError;
854
+ };
855
+
856
+ export type GetBusinessNameError = GetBusinessNameErrors[keyof GetBusinessNameErrors];
857
+
858
+ export type GetBusinessNameResponses = {
859
+ /**
860
+ * Business name
861
+ */
862
+ 200: {
863
+ data: BusinessName;
864
+ };
865
+ };
866
+
867
+ export type GetBusinessNameResponse = GetBusinessNameResponses[keyof GetBusinessNameResponses];
868
+
869
+ export type GetSocialLinksData = {
870
+ body?: never;
871
+ path: {
872
+ /**
873
+ * Tenant identifier slug
874
+ */
875
+ tenantSlug: TenantSlug;
876
+ };
877
+ query?: never;
878
+ url: '/api/public/{tenantSlug}/social-links';
879
+ };
880
+
881
+ export type GetSocialLinksErrors = {
882
+ /**
883
+ * Invalid or missing API key
884
+ */
885
+ 401: ApiError;
886
+ /**
887
+ * API key does not match the requested tenant
888
+ */
889
+ 403: ApiError;
890
+ /**
891
+ * Tenant not found or inactive
892
+ */
893
+ 404: ApiError;
894
+ /**
895
+ * Rate limit exceeded
896
+ */
897
+ 429: ApiError;
898
+ };
899
+
900
+ export type GetSocialLinksError = GetSocialLinksErrors[keyof GetSocialLinksErrors];
901
+
902
+ export type GetSocialLinksResponses = {
903
+ /**
904
+ * Social links (null if not configured)
905
+ */
906
+ 200: {
907
+ data: SocialLinks;
908
+ };
909
+ };
910
+
911
+ export type GetSocialLinksResponse = GetSocialLinksResponses[keyof GetSocialLinksResponses];
912
+
913
+ export type GetTeamMembersData = {
914
+ body?: never;
915
+ path: {
916
+ /**
917
+ * Tenant identifier slug
918
+ */
919
+ tenantSlug: TenantSlug;
920
+ };
921
+ query?: never;
922
+ url: '/api/public/{tenantSlug}/team';
923
+ };
924
+
925
+ export type GetTeamMembersErrors = {
926
+ /**
927
+ * Invalid or missing API key
928
+ */
929
+ 401: ApiError;
930
+ /**
931
+ * API key does not match the requested tenant
932
+ */
933
+ 403: ApiError;
934
+ /**
935
+ * Tenant not found or inactive
936
+ */
937
+ 404: ApiError;
938
+ /**
939
+ * Rate limit exceeded
940
+ */
941
+ 429: ApiError;
942
+ };
943
+
944
+ export type GetTeamMembersError = GetTeamMembersErrors[keyof GetTeamMembersErrors];
945
+
946
+ export type GetTeamMembersResponses = {
947
+ /**
948
+ * List of team members
949
+ */
950
+ 200: {
951
+ data: TeamMembers;
952
+ };
953
+ };
954
+
955
+ export type GetTeamMembersResponse = GetTeamMembersResponses[keyof GetTeamMembersResponses];
956
+
957
+ export type GetFaqData = {
958
+ body?: never;
959
+ path: {
960
+ /**
961
+ * Tenant identifier slug
962
+ */
963
+ tenantSlug: TenantSlug;
964
+ };
965
+ query?: never;
966
+ url: '/api/public/{tenantSlug}/faq';
967
+ };
968
+
969
+ export type GetFaqErrors = {
970
+ /**
971
+ * Invalid or missing API key
972
+ */
973
+ 401: ApiError;
974
+ /**
975
+ * API key does not match the requested tenant
976
+ */
977
+ 403: ApiError;
978
+ /**
979
+ * Tenant not found or inactive
980
+ */
981
+ 404: ApiError;
982
+ /**
983
+ * Rate limit exceeded
984
+ */
985
+ 429: ApiError;
986
+ };
987
+
988
+ export type GetFaqError = GetFaqErrors[keyof GetFaqErrors];
989
+
990
+ export type GetFaqResponses = {
991
+ /**
992
+ * FAQ groups
993
+ */
994
+ 200: {
995
+ data: FaqContent;
996
+ };
997
+ };
998
+
999
+ export type GetFaqResponse = GetFaqResponses[keyof GetFaqResponses];
1000
+
1001
+ export type GetServiceVariantsData = {
1002
+ body?: never;
1003
+ path: {
1004
+ /**
1005
+ * Tenant identifier slug
1006
+ */
1007
+ tenantSlug: TenantSlug;
1008
+ };
1009
+ query?: never;
1010
+ url: '/api/public/{tenantSlug}/service-variants';
1011
+ };
1012
+
1013
+ export type GetServiceVariantsErrors = {
1014
+ /**
1015
+ * Invalid or missing API key
1016
+ */
1017
+ 401: ApiError;
1018
+ /**
1019
+ * API key does not match the requested tenant
1020
+ */
1021
+ 403: ApiError;
1022
+ /**
1023
+ * Tenant not found or inactive
1024
+ */
1025
+ 404: ApiError;
1026
+ /**
1027
+ * Rate limit exceeded
1028
+ */
1029
+ 429: ApiError;
1030
+ };
1031
+
1032
+ export type GetServiceVariantsError = GetServiceVariantsErrors[keyof GetServiceVariantsErrors];
1033
+
1034
+ export type GetServiceVariantsResponses = {
1035
+ /**
1036
+ * Service variants
1037
+ */
1038
+ 200: {
1039
+ data: PricingVariants;
1040
+ };
1041
+ };
1042
+
1043
+ export type GetServiceVariantsResponse = GetServiceVariantsResponses[keyof GetServiceVariantsResponses];
1044
+
1045
+ export type GetInsuranceInfoData = {
1046
+ body?: never;
1047
+ path: {
1048
+ /**
1049
+ * Tenant identifier slug
1050
+ */
1051
+ tenantSlug: TenantSlug;
1052
+ };
1053
+ query?: never;
1054
+ url: '/api/public/{tenantSlug}/insurance';
1055
+ };
1056
+
1057
+ export type GetInsuranceInfoErrors = {
1058
+ /**
1059
+ * Invalid or missing API key
1060
+ */
1061
+ 401: ApiError;
1062
+ /**
1063
+ * API key does not match the requested tenant
1064
+ */
1065
+ 403: ApiError;
1066
+ /**
1067
+ * Tenant not found or inactive
1068
+ */
1069
+ 404: ApiError;
1070
+ /**
1071
+ * Rate limit exceeded
1072
+ */
1073
+ 429: ApiError;
1074
+ };
1075
+
1076
+ export type GetInsuranceInfoError = GetInsuranceInfoErrors[keyof GetInsuranceInfoErrors];
1077
+
1078
+ export type GetInsuranceInfoResponses = {
1079
+ /**
1080
+ * Insurance info items
1081
+ */
1082
+ 200: {
1083
+ data: InsuranceList;
1084
+ };
1085
+ };
1086
+
1087
+ export type GetInsuranceInfoResponse = GetInsuranceInfoResponses[keyof GetInsuranceInfoResponses];
1088
+
1089
+ export type GetFeaturesData = {
1090
+ body?: never;
1091
+ path: {
1092
+ /**
1093
+ * Tenant identifier slug
1094
+ */
1095
+ tenantSlug: TenantSlug;
1096
+ };
1097
+ query?: never;
1098
+ url: '/api/public/{tenantSlug}/features';
1099
+ };
1100
+
1101
+ export type GetFeaturesErrors = {
1102
+ /**
1103
+ * Invalid or missing API key
1104
+ */
1105
+ 401: ApiError;
1106
+ /**
1107
+ * API key does not match the requested tenant
1108
+ */
1109
+ 403: ApiError;
1110
+ /**
1111
+ * Tenant not found or inactive
1112
+ */
1113
+ 404: ApiError;
1114
+ /**
1115
+ * Rate limit exceeded
1116
+ */
1117
+ 429: ApiError;
1118
+ };
1119
+
1120
+ export type GetFeaturesError = GetFeaturesErrors[keyof GetFeaturesErrors];
1121
+
1122
+ export type GetFeaturesResponses = {
1123
+ /**
1124
+ * Feature items
1125
+ */
1126
+ 200: {
1127
+ data: FeatureList;
1128
+ };
1129
+ };
1130
+
1131
+ export type GetFeaturesResponse = GetFeaturesResponses[keyof GetFeaturesResponses];
1132
+
1133
+ export type GetPaymentMethodsData = {
1134
+ body?: never;
1135
+ path: {
1136
+ /**
1137
+ * Tenant identifier slug
1138
+ */
1139
+ tenantSlug: TenantSlug;
1140
+ };
1141
+ query?: never;
1142
+ url: '/api/public/{tenantSlug}/payments';
1143
+ };
1144
+
1145
+ export type GetPaymentMethodsErrors = {
1146
+ /**
1147
+ * Invalid or missing API key
1148
+ */
1149
+ 401: ApiError;
1150
+ /**
1151
+ * API key does not match the requested tenant
1152
+ */
1153
+ 403: ApiError;
1154
+ /**
1155
+ * Tenant not found or inactive
1156
+ */
1157
+ 404: ApiError;
1158
+ /**
1159
+ * Rate limit exceeded
1160
+ */
1161
+ 429: ApiError;
1162
+ };
1163
+
1164
+ export type GetPaymentMethodsError = GetPaymentMethodsErrors[keyof GetPaymentMethodsErrors];
1165
+
1166
+ export type GetPaymentMethodsResponses = {
1167
+ /**
1168
+ * Payment methods
1169
+ */
1170
+ 200: {
1171
+ data: PaymentMethodList;
1172
+ };
1173
+ };
1174
+
1175
+ export type GetPaymentMethodsResponse = GetPaymentMethodsResponses[keyof GetPaymentMethodsResponses];
1176
+
1177
+ export type GetPolicyInfoData = {
1178
+ body?: never;
1179
+ path: {
1180
+ /**
1181
+ * Tenant identifier slug
1182
+ */
1183
+ tenantSlug: TenantSlug;
1184
+ };
1185
+ query?: never;
1186
+ url: '/api/public/{tenantSlug}/policy';
1187
+ };
1188
+
1189
+ export type GetPolicyInfoErrors = {
1190
+ /**
1191
+ * Invalid or missing API key
1192
+ */
1193
+ 401: ApiError;
1194
+ /**
1195
+ * API key does not match the requested tenant
1196
+ */
1197
+ 403: ApiError;
1198
+ /**
1199
+ * Tenant not found or inactive
1200
+ */
1201
+ 404: ApiError;
1202
+ /**
1203
+ * Rate limit exceeded
1204
+ */
1205
+ 429: ApiError;
1206
+ };
1207
+
1208
+ export type GetPolicyInfoError = GetPolicyInfoErrors[keyof GetPolicyInfoErrors];
1209
+
1210
+ export type GetPolicyInfoResponses = {
1211
+ /**
1212
+ * Policy info items
1213
+ */
1214
+ 200: {
1215
+ data: PolicyList;
1216
+ };
1217
+ };
1218
+
1219
+ export type GetPolicyInfoResponse = GetPolicyInfoResponses[keyof GetPolicyInfoResponses];
1220
+
1221
+ export type GetBookableServicesData = {
1222
+ body?: never;
1223
+ path: {
1224
+ /**
1225
+ * Tenant identifier slug
1226
+ */
1227
+ tenantSlug: TenantSlug;
1228
+ };
1229
+ query?: never;
1230
+ url: '/api/public/{tenantSlug}/services';
1231
+ };
1232
+
1233
+ export type GetBookableServicesErrors = {
1234
+ /**
1235
+ * Invalid or missing API key
1236
+ */
1237
+ 401: ApiError;
1238
+ /**
1239
+ * API key does not match the requested tenant
1240
+ */
1241
+ 403: ApiError;
1242
+ /**
1243
+ * Tenant not found or inactive
1244
+ */
1245
+ 404: ApiError;
1246
+ /**
1247
+ * Rate limit exceeded
1248
+ */
1249
+ 429: ApiError;
1250
+ };
1251
+
1252
+ export type GetBookableServicesError = GetBookableServicesErrors[keyof GetBookableServicesErrors];
1253
+
1254
+ export type GetBookableServicesResponses = {
1255
+ /**
1256
+ * Bookable services
1257
+ */
1258
+ 200: {
1259
+ data: BookableServices;
1260
+ };
1261
+ };
1262
+
1263
+ export type GetBookableServicesResponse = GetBookableServicesResponses[keyof GetBookableServicesResponses];