@savvycal/appointments-core 1.2.0 → 1.4.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/dist/index.d.cts CHANGED
@@ -2186,9 +2186,7 @@ interface components {
2186
2186
  * "id": "bi_abc123def456abc123def456",
2187
2187
  * "locked_fields": [
2188
2188
  * "provider_id",
2189
- * "start_at",
2190
- * "end_at",
2191
- * "time_zone"
2189
+ * "slot"
2192
2190
  * ],
2193
2191
  * "metadata": {
2194
2192
  * "source": "web"
@@ -2206,6 +2204,20 @@ interface components {
2206
2204
  * "object": "provider",
2207
2205
  * "updated_at": "2017-09-13T10:11:12Z"
2208
2206
  * },
2207
+ * "requirements": {
2208
+ * "booking": {
2209
+ * "complete": true
2210
+ * },
2211
+ * "info": {
2212
+ * "complete": false
2213
+ * },
2214
+ * "submissions": [
2215
+ * {
2216
+ * "complete": false,
2217
+ * "form_id": "frm_abc123def456"
2218
+ * }
2219
+ * ]
2220
+ * },
2209
2221
  * "service": {
2210
2222
  * "appointment_type": "in_person",
2211
2223
  * "booking_policy": {
@@ -2298,7 +2310,19 @@ interface components {
2298
2310
  * },
2299
2311
  * "status": "slot_selected",
2300
2312
  * "submissions": [],
2301
- * "updated_at": "2026-02-22T10:00:00Z"
2313
+ * "updated_at": "2026-02-22T10:00:00Z",
2314
+ * "workflow": {
2315
+ * "available_steps": [
2316
+ * "booking",
2317
+ * "info",
2318
+ * "form:frm_abc123def456"
2319
+ * ],
2320
+ * "can_change_slot": true,
2321
+ * "can_complete": false,
2322
+ * "defunct_reason": null,
2323
+ * "is_defunct": false,
2324
+ * "resume_step": "info"
2325
+ * }
2302
2326
  * },
2303
2327
  * "type": "booking_intent.completed"
2304
2328
  * }
@@ -2431,8 +2455,8 @@ interface components {
2431
2455
  * @description The end time of the slot as an ISO-8601 datetime string with a timezone offset.
2432
2456
  */
2433
2457
  end_at?: string | null;
2434
- /** @description Fields to lock from public API updates. Possible values: service_id, provider_id, start_at, end_at, time_zone, client_data, submissions. */
2435
- locked_fields?: string[] | null;
2458
+ /** @description Fields to lock from public API updates. */
2459
+ locked_fields?: ("service_id" | "provider_id" | "slot" | "client_data" | "submissions")[] | null;
2436
2460
  /** @description Custom metadata key-value pairs. */
2437
2461
  metadata?: {
2438
2462
  [key: string]: unknown;
@@ -2493,9 +2517,7 @@ interface components {
2493
2517
  * "id": "bi_abc123def456abc123def456",
2494
2518
  * "locked_fields": [
2495
2519
  * "provider_id",
2496
- * "start_at",
2497
- * "end_at",
2498
- * "time_zone"
2520
+ * "slot"
2499
2521
  * ],
2500
2522
  * "metadata": {
2501
2523
  * "source": "web"
@@ -2513,6 +2535,20 @@ interface components {
2513
2535
  * "object": "provider",
2514
2536
  * "updated_at": "2017-09-13T10:11:12Z"
2515
2537
  * },
2538
+ * "requirements": {
2539
+ * "booking": {
2540
+ * "complete": true
2541
+ * },
2542
+ * "info": {
2543
+ * "complete": false
2544
+ * },
2545
+ * "submissions": [
2546
+ * {
2547
+ * "complete": false,
2548
+ * "form_id": "frm_abc123def456"
2549
+ * }
2550
+ * ]
2551
+ * },
2516
2552
  * "service": {
2517
2553
  * "appointment_type": "in_person",
2518
2554
  * "booking_policy": {
@@ -2605,7 +2641,19 @@ interface components {
2605
2641
  * },
2606
2642
  * "status": "slot_selected",
2607
2643
  * "submissions": [],
2608
- * "updated_at": "2026-02-22T10:00:00Z"
2644
+ * "updated_at": "2026-02-22T10:00:00Z",
2645
+ * "workflow": {
2646
+ * "available_steps": [
2647
+ * "booking",
2648
+ * "info",
2649
+ * "form:frm_abc123def456"
2650
+ * ],
2651
+ * "can_change_slot": true,
2652
+ * "can_complete": false,
2653
+ * "defunct_reason": null,
2654
+ * "is_defunct": false,
2655
+ * "resume_step": "info"
2656
+ * }
2609
2657
  * },
2610
2658
  * "type": "booking_intent.abandoned"
2611
2659
  * }
@@ -2788,6 +2836,41 @@ interface components {
2788
2836
  */
2789
2837
  type: "short_text" | "long_text" | "email" | "phone" | "boolean" | "radio" | "select" | "checkbox";
2790
2838
  };
2839
+ /**
2840
+ * BookingIntentRequirements
2841
+ * @description Per-section completeness status for a booking intent. Provides boolean
2842
+ * signals for whether each section of the booking flow has enough data
2843
+ * to proceed, enabling the frontend to make navigation decisions without
2844
+ * parsing error pointers.
2845
+ * @example {
2846
+ * "booking": {
2847
+ * "complete": true
2848
+ * },
2849
+ * "info": {
2850
+ * "complete": false
2851
+ * },
2852
+ * "submissions": [
2853
+ * {
2854
+ * "complete": false,
2855
+ * "form_id": "frm_abc123def456"
2856
+ * }
2857
+ * ]
2858
+ * }
2859
+ */
2860
+ BookingIntentRequirements: {
2861
+ /** @description Booking step completeness status. */
2862
+ booking: {
2863
+ /** @description Whether the booking step is complete (provider and slot fields are present). */
2864
+ complete: boolean;
2865
+ };
2866
+ /** @description Info step completeness status. */
2867
+ info: {
2868
+ /** @description Whether the info step is complete (required client fields are present). */
2869
+ complete: boolean;
2870
+ };
2871
+ /** @description Per-form completeness status, in the same order as the service's forms. */
2872
+ submissions: components["schemas"]["SubmissionRequirement"][];
2873
+ };
2791
2874
  /**
2792
2875
  * ServiceProvider
2793
2876
  * @description A service provider
@@ -3006,9 +3089,7 @@ interface components {
3006
3089
  * "id": "bi_abc123def456abc123def456",
3007
3090
  * "locked_fields": [
3008
3091
  * "provider_id",
3009
- * "start_at",
3010
- * "end_at",
3011
- * "time_zone"
3092
+ * "slot"
3012
3093
  * ],
3013
3094
  * "metadata": {
3014
3095
  * "source": "web"
@@ -3026,6 +3107,20 @@ interface components {
3026
3107
  * "object": "provider",
3027
3108
  * "updated_at": "2017-09-13T10:11:12Z"
3028
3109
  * },
3110
+ * "requirements": {
3111
+ * "booking": {
3112
+ * "complete": true
3113
+ * },
3114
+ * "info": {
3115
+ * "complete": false
3116
+ * },
3117
+ * "submissions": [
3118
+ * {
3119
+ * "complete": false,
3120
+ * "form_id": "frm_abc123def456"
3121
+ * }
3122
+ * ]
3123
+ * },
3029
3124
  * "service": {
3030
3125
  * "appointment_type": "in_person",
3031
3126
  * "booking_policy": {
@@ -3118,7 +3213,19 @@ interface components {
3118
3213
  * },
3119
3214
  * "status": "slot_selected",
3120
3215
  * "submissions": [],
3121
- * "updated_at": "2026-02-22T10:00:00Z"
3216
+ * "updated_at": "2026-02-22T10:00:00Z",
3217
+ * "workflow": {
3218
+ * "available_steps": [
3219
+ * "booking",
3220
+ * "info",
3221
+ * "form:frm_abc123def456"
3222
+ * ],
3223
+ * "can_change_slot": true,
3224
+ * "can_complete": false,
3225
+ * "defunct_reason": null,
3226
+ * "is_defunct": false,
3227
+ * "resume_step": "info"
3228
+ * }
3122
3229
  * },
3123
3230
  * "type": "booking_intent.updated"
3124
3231
  * }
@@ -3429,9 +3536,7 @@ interface components {
3429
3536
  * "id": "bi_abc123def456abc123def456",
3430
3537
  * "locked_fields": [
3431
3538
  * "provider_id",
3432
- * "start_at",
3433
- * "end_at",
3434
- * "time_zone"
3539
+ * "slot"
3435
3540
  * ],
3436
3541
  * "metadata": {
3437
3542
  * "source": "web"
@@ -3449,6 +3554,20 @@ interface components {
3449
3554
  * "object": "provider",
3450
3555
  * "updated_at": "2017-09-13T10:11:12Z"
3451
3556
  * },
3557
+ * "requirements": {
3558
+ * "booking": {
3559
+ * "complete": true
3560
+ * },
3561
+ * "info": {
3562
+ * "complete": false
3563
+ * },
3564
+ * "submissions": [
3565
+ * {
3566
+ * "complete": false,
3567
+ * "form_id": "frm_abc123def456"
3568
+ * }
3569
+ * ]
3570
+ * },
3452
3571
  * "service": {
3453
3572
  * "appointment_type": "in_person",
3454
3573
  * "booking_policy": {
@@ -3541,7 +3660,19 @@ interface components {
3541
3660
  * },
3542
3661
  * "status": "slot_selected",
3543
3662
  * "submissions": [],
3544
- * "updated_at": "2026-02-22T10:00:00Z"
3663
+ * "updated_at": "2026-02-22T10:00:00Z",
3664
+ * "workflow": {
3665
+ * "available_steps": [
3666
+ * "booking",
3667
+ * "info",
3668
+ * "form:frm_abc123def456"
3669
+ * ],
3670
+ * "can_change_slot": true,
3671
+ * "can_complete": false,
3672
+ * "defunct_reason": null,
3673
+ * "is_defunct": false,
3674
+ * "resume_step": "info"
3675
+ * }
3545
3676
  * }
3546
3677
  * ],
3547
3678
  * "meta": {
@@ -3769,9 +3900,7 @@ interface components {
3769
3900
  * "id": "bi_abc123def456abc123def456",
3770
3901
  * "locked_fields": [
3771
3902
  * "provider_id",
3772
- * "start_at",
3773
- * "end_at",
3774
- * "time_zone"
3903
+ * "slot"
3775
3904
  * ],
3776
3905
  * "metadata": {
3777
3906
  * "source": "web"
@@ -3789,6 +3918,20 @@ interface components {
3789
3918
  * "object": "provider",
3790
3919
  * "updated_at": "2017-09-13T10:11:12Z"
3791
3920
  * },
3921
+ * "requirements": {
3922
+ * "booking": {
3923
+ * "complete": true
3924
+ * },
3925
+ * "info": {
3926
+ * "complete": false
3927
+ * },
3928
+ * "submissions": [
3929
+ * {
3930
+ * "complete": false,
3931
+ * "form_id": "frm_abc123def456"
3932
+ * }
3933
+ * ]
3934
+ * },
3792
3935
  * "service": {
3793
3936
  * "appointment_type": "in_person",
3794
3937
  * "booking_policy": {
@@ -3881,7 +4024,19 @@ interface components {
3881
4024
  * },
3882
4025
  * "status": "slot_selected",
3883
4026
  * "submissions": [],
3884
- * "updated_at": "2026-02-22T10:00:00Z"
4027
+ * "updated_at": "2026-02-22T10:00:00Z",
4028
+ * "workflow": {
4029
+ * "available_steps": [
4030
+ * "booking",
4031
+ * "info",
4032
+ * "form:frm_abc123def456"
4033
+ * ],
4034
+ * "can_change_slot": true,
4035
+ * "can_complete": false,
4036
+ * "defunct_reason": null,
4037
+ * "is_defunct": false,
4038
+ * "resume_step": "info"
4039
+ * }
3885
4040
  * },
3886
4041
  * "type": "booking_intent.created"
3887
4042
  * }
@@ -3930,7 +4085,7 @@ interface components {
3930
4085
  * IntentSubmissionInput
3931
4086
  * @description A form submission entry containing a form ID and response data.
3932
4087
  * @example {
3933
- * "form_id": "frm_abc123def456abc123def456",
4088
+ * "form_id": "frm_abc123def456",
3934
4089
  * "responses": {
3935
4090
  * "color": [
3936
4091
  * "opt_abc"
@@ -5275,8 +5430,8 @@ interface components {
5275
5430
  * @description The end time of the slot as an ISO-8601 datetime string with a timezone offset.
5276
5431
  */
5277
5432
  end_at?: string | null;
5278
- /** @description Fields to lock from public API updates. Possible values: service_id, provider_id, start_at, end_at, time_zone, client_data, submissions. Replaces existing locked_fields entirely. */
5279
- locked_fields?: string[] | null;
5433
+ /** @description Fields to lock from public API updates. Replaces existing locked_fields entirely. */
5434
+ locked_fields?: ("service_id" | "provider_id" | "slot" | "client_data" | "submissions")[] | null;
5280
5435
  /** @description Custom metadata key-value pairs. Replaces existing metadata entirely. */
5281
5436
  metadata?: {
5282
5437
  [key: string]: unknown;
@@ -7204,6 +7359,20 @@ interface components {
7204
7359
  * "id": "bi_abc123def456abc123def456",
7205
7360
  * "locked_fields": [],
7206
7361
  * "object": "public_booking_intent",
7362
+ * "requirements": {
7363
+ * "booking": {
7364
+ * "complete": true
7365
+ * },
7366
+ * "info": {
7367
+ * "complete": false
7368
+ * },
7369
+ * "submissions": [
7370
+ * {
7371
+ * "complete": false,
7372
+ * "form_id": "frm_abc123def456"
7373
+ * }
7374
+ * ]
7375
+ * },
7207
7376
  * "start_at": {
7208
7377
  * "local": "2026-02-23T10:00:00-05:00",
7209
7378
  * "object": "zoned_date_time",
@@ -7211,7 +7380,19 @@ interface components {
7211
7380
  * "unix_ts": 1771945200,
7212
7381
  * "utc": "2026-02-23T15:00:00Z"
7213
7382
  * },
7214
- * "status": "slot_selected"
7383
+ * "status": "slot_selected",
7384
+ * "workflow": {
7385
+ * "available_steps": [
7386
+ * "booking",
7387
+ * "info",
7388
+ * "form:frm_abc123def456"
7389
+ * ],
7390
+ * "can_change_slot": true,
7391
+ * "can_complete": false,
7392
+ * "defunct_reason": null,
7393
+ * "is_defunct": false,
7394
+ * "resume_step": "info"
7395
+ * }
7215
7396
  * }
7216
7397
  */
7217
7398
  PublicBookingIntent: {
@@ -7228,20 +7409,22 @@ interface components {
7228
7409
  hold_until?: string | null;
7229
7410
  /** @description The booking intent ID */
7230
7411
  id: string;
7231
- /** @description Fields that are locked and cannot be updated via the public API. Possible values: service_id, provider_id, start_at, end_at, time_zone, client_data, submissions. */
7232
- locked_fields?: string[];
7412
+ /** @description Fields that are locked and cannot be updated via the public API. */
7413
+ locked_fields?: ("service_id" | "provider_id" | "slot" | "client_data" | "submissions")[];
7233
7414
  /**
7234
7415
  * @description The object type
7235
7416
  * @enum {string}
7236
7417
  */
7237
7418
  object: "public_booking_intent";
7419
+ requirements?: components["schemas"]["BookingIntentRequirements"];
7238
7420
  /** @description The start time of the selected slot */
7239
7421
  start_at?: components["schemas"]["ZonedDateTime"] | null;
7240
7422
  /**
7241
- * @description The current status of the booking intent
7423
+ * @description The current status of the booking intent. Automatically transitions from pending to slot_selected when provider_id, start_at, end_at, and time_zone are all present (on create or update).
7242
7424
  * @enum {string}
7243
7425
  */
7244
7426
  status: "pending" | "slot_selected" | "completed" | "abandoned";
7427
+ workflow?: components["schemas"]["BookingIntentWorkflow"];
7245
7428
  };
7246
7429
  /**
7247
7430
  * ServiceForm
@@ -7723,6 +7906,20 @@ interface components {
7723
7906
  */
7724
7907
  type: "short_text" | "long_text" | "email" | "phone" | "boolean" | "radio" | "select" | "checkbox";
7725
7908
  };
7909
+ /**
7910
+ * SubmissionRequirement
7911
+ * @description Completeness status for a single form submission.
7912
+ * @example {
7913
+ * "complete": false,
7914
+ * "form_id": "frm_abc123def456"
7915
+ * }
7916
+ */
7917
+ SubmissionRequirement: {
7918
+ /** @description Whether the submission exists and all required fields have been answered. */
7919
+ complete: boolean;
7920
+ /** @description The form's object ID. */
7921
+ form_id: string;
7922
+ };
7726
7923
  /**
7727
7924
  * PublicBookingIntentResponse
7728
7925
  * @description Response schema for a single booking intent via a public interface.
@@ -7741,6 +7938,20 @@ interface components {
7741
7938
  * "id": "bi_abc123def456abc123def456",
7742
7939
  * "locked_fields": [],
7743
7940
  * "object": "public_booking_intent",
7941
+ * "requirements": {
7942
+ * "booking": {
7943
+ * "complete": true
7944
+ * },
7945
+ * "info": {
7946
+ * "complete": false
7947
+ * },
7948
+ * "submissions": [
7949
+ * {
7950
+ * "complete": false,
7951
+ * "form_id": "frm_abc123def456"
7952
+ * }
7953
+ * ]
7954
+ * },
7744
7955
  * "start_at": {
7745
7956
  * "local": "2026-02-23T10:00:00-05:00",
7746
7957
  * "object": "zoned_date_time",
@@ -7748,7 +7959,19 @@ interface components {
7748
7959
  * "unix_ts": 1771945200,
7749
7960
  * "utc": "2026-02-23T15:00:00Z"
7750
7961
  * },
7751
- * "status": "slot_selected"
7962
+ * "status": "slot_selected",
7963
+ * "workflow": {
7964
+ * "available_steps": [
7965
+ * "booking",
7966
+ * "info",
7967
+ * "form:frm_abc123def456"
7968
+ * ],
7969
+ * "can_change_slot": true,
7970
+ * "can_complete": false,
7971
+ * "defunct_reason": null,
7972
+ * "is_defunct": false,
7973
+ * "resume_step": "info"
7974
+ * }
7752
7975
  * }
7753
7976
  * }
7754
7977
  */
@@ -8376,9 +8599,7 @@ interface components {
8376
8599
  * "id": "bi_abc123def456abc123def456",
8377
8600
  * "locked_fields": [
8378
8601
  * "provider_id",
8379
- * "start_at",
8380
- * "end_at",
8381
- * "time_zone"
8602
+ * "slot"
8382
8603
  * ],
8383
8604
  * "metadata": {
8384
8605
  * "source": "web"
@@ -8396,6 +8617,20 @@ interface components {
8396
8617
  * "object": "provider",
8397
8618
  * "updated_at": "2017-09-13T10:11:12Z"
8398
8619
  * },
8620
+ * "requirements": {
8621
+ * "booking": {
8622
+ * "complete": true
8623
+ * },
8624
+ * "info": {
8625
+ * "complete": false
8626
+ * },
8627
+ * "submissions": [
8628
+ * {
8629
+ * "complete": false,
8630
+ * "form_id": "frm_abc123def456"
8631
+ * }
8632
+ * ]
8633
+ * },
8399
8634
  * "service": {
8400
8635
  * "appointment_type": "in_person",
8401
8636
  * "booking_policy": {
@@ -8488,7 +8723,19 @@ interface components {
8488
8723
  * },
8489
8724
  * "status": "slot_selected",
8490
8725
  * "submissions": [],
8491
- * "updated_at": "2026-02-22T10:00:00Z"
8726
+ * "updated_at": "2026-02-22T10:00:00Z",
8727
+ * "workflow": {
8728
+ * "available_steps": [
8729
+ * "booking",
8730
+ * "info",
8731
+ * "form:frm_abc123def456"
8732
+ * ],
8733
+ * "can_change_slot": true,
8734
+ * "can_complete": false,
8735
+ * "defunct_reason": null,
8736
+ * "is_defunct": false,
8737
+ * "resume_step": "info"
8738
+ * }
8492
8739
  * }
8493
8740
  * }
8494
8741
  */
@@ -9388,6 +9635,41 @@ interface components {
9388
9635
  reschedule: string[];
9389
9636
  };
9390
9637
  };
9638
+ /**
9639
+ * BookingIntentWorkflow
9640
+ * @description Server-computed workflow state for a booking intent. Provides step routing,
9641
+ * completability, and defunct state so the frontend can render the correct
9642
+ * booking flow without inferring these from raw fields.
9643
+ * @example {
9644
+ * "available_steps": [
9645
+ * "booking",
9646
+ * "info",
9647
+ * "form:frm_abc123def456"
9648
+ * ],
9649
+ * "can_change_slot": true,
9650
+ * "can_complete": false,
9651
+ * "defunct_reason": null,
9652
+ * "is_defunct": false,
9653
+ * "resume_step": "info"
9654
+ * }
9655
+ */
9656
+ BookingIntentWorkflow: {
9657
+ /** @description Ordered list of steps the user can visit. Computed from service forms and locked_fields. */
9658
+ available_steps: string[];
9659
+ /** @description Whether slot fields (start_at, end_at, time_zone) are unlocked and can be modified. */
9660
+ can_change_slot: boolean;
9661
+ /** @description Whether the intent has enough valid data to submit right now. When true, calling the complete endpoint will succeed regardless of whether the current status is pending or slot_selected. */
9662
+ can_complete: boolean;
9663
+ /**
9664
+ * @description Why the intent is defunct. Null when not defunct.
9665
+ * @enum {string|null}
9666
+ */
9667
+ defunct_reason?: "abandoned" | "no_available_steps" | "status_invalid" | null;
9668
+ /** @description Whether the intent is in an unrecoverable state and should render a terminal UI. */
9669
+ is_defunct: boolean;
9670
+ /** @description The step the UI should show on load or resume. One of: booking, info, form:<form_id>, confirmed, defunct. */
9671
+ resume_step: string;
9672
+ };
9391
9673
  /**
9392
9674
  * ProviderDeactivatedEventData
9393
9675
  * @description This is an object representing data for the provider deactivated event.
@@ -9808,9 +10090,7 @@ interface components {
9808
10090
  * "id": "bi_abc123def456abc123def456",
9809
10091
  * "locked_fields": [
9810
10092
  * "provider_id",
9811
- * "start_at",
9812
- * "end_at",
9813
- * "time_zone"
10093
+ * "slot"
9814
10094
  * ],
9815
10095
  * "metadata": {
9816
10096
  * "source": "web"
@@ -9828,6 +10108,20 @@ interface components {
9828
10108
  * "object": "provider",
9829
10109
  * "updated_at": "2017-09-13T10:11:12Z"
9830
10110
  * },
10111
+ * "requirements": {
10112
+ * "booking": {
10113
+ * "complete": true
10114
+ * },
10115
+ * "info": {
10116
+ * "complete": false
10117
+ * },
10118
+ * "submissions": [
10119
+ * {
10120
+ * "complete": false,
10121
+ * "form_id": "frm_abc123def456"
10122
+ * }
10123
+ * ]
10124
+ * },
9831
10125
  * "service": {
9832
10126
  * "appointment_type": "in_person",
9833
10127
  * "booking_policy": {
@@ -9920,7 +10214,19 @@ interface components {
9920
10214
  * },
9921
10215
  * "status": "slot_selected",
9922
10216
  * "submissions": [],
9923
- * "updated_at": "2026-02-22T10:00:00Z"
10217
+ * "updated_at": "2026-02-22T10:00:00Z",
10218
+ * "workflow": {
10219
+ * "available_steps": [
10220
+ * "booking",
10221
+ * "info",
10222
+ * "form:frm_abc123def456"
10223
+ * ],
10224
+ * "can_change_slot": true,
10225
+ * "can_complete": false,
10226
+ * "defunct_reason": null,
10227
+ * "is_defunct": false,
10228
+ * "resume_step": "info"
10229
+ * }
9924
10230
  * }
9925
10231
  */
9926
10232
  BookingIntent: {
@@ -9965,8 +10271,8 @@ interface components {
9965
10271
  hold_until?: string | null;
9966
10272
  /** @description The booking intent ID */
9967
10273
  id: string;
9968
- /** @description Fields that are locked and cannot be updated via the public API. Possible values: service_id, provider_id, start_at, end_at, time_zone, client_data, submissions. */
9969
- locked_fields?: string[];
10274
+ /** @description Fields that are locked and cannot be updated via the public API. */
10275
+ locked_fields?: ("service_id" | "provider_id" | "slot" | "client_data" | "submissions")[];
9970
10276
  /** @description Custom metadata key-value pairs */
9971
10277
  metadata?: {
9972
10278
  [key: string]: unknown;
@@ -9978,6 +10284,8 @@ interface components {
9978
10284
  object: "booking_intent";
9979
10285
  /** @description The assigned provider */
9980
10286
  provider?: components["schemas"]["Provider"] | null;
10287
+ /** @description Per-section completeness status. Present on single-intent responses, null on list responses. */
10288
+ requirements?: components["schemas"]["BookingIntentRequirements"] | null;
9981
10289
  /** @description The selected service */
9982
10290
  service?: components["schemas"]["Service"] | null;
9983
10291
  /** @description Whether the slot has been prevalidated. When true, public completion skips slot validation. */
@@ -9985,7 +10293,7 @@ interface components {
9985
10293
  /** @description The start time of the selected slot */
9986
10294
  start_at?: components["schemas"]["ZonedDateTime"] | null;
9987
10295
  /**
9988
- * @description The current status of the booking intent
10296
+ * @description The current status of the booking intent. Automatically transitions from pending to slot_selected when provider_id, start_at, end_at, and time_zone are all present (on create or update).
9989
10297
  * @enum {string}
9990
10298
  */
9991
10299
  status: "pending" | "slot_selected" | "completed" | "abandoned";
@@ -9996,6 +10304,8 @@ interface components {
9996
10304
  * @description When the intent was last updated
9997
10305
  */
9998
10306
  updated_at: string;
10307
+ /** @description Server-computed workflow state. Present on single-intent responses, null on list responses. */
10308
+ workflow?: components["schemas"]["BookingIntentWorkflow"] | null;
9999
10309
  };
10000
10310
  /**
10001
10311
  * CreateServiceRequest
@@ -15071,9 +15381,11 @@ type BookingIntentAbandonedEventData = Schemas["BookingIntentAbandonedEventData"
15071
15381
  type BookingIntentBookingPolicy = Schemas["BookingIntentBookingPolicy"];
15072
15382
  type BookingIntentCompletedEventData = Schemas["BookingIntentCompletedEventData"];
15073
15383
  type BookingIntentCreatedEventData = Schemas["BookingIntentCreatedEventData"];
15384
+ type BookingIntentRequirements = Schemas["BookingIntentRequirements"];
15074
15385
  type BookingIntentResponse = Schemas["BookingIntentResponse"];
15075
15386
  type BookingIntentsResponse = Schemas["BookingIntentsResponse"];
15076
15387
  type BookingIntentUpdatedEventData = Schemas["BookingIntentUpdatedEventData"];
15388
+ type BookingIntentWorkflow = Schemas["BookingIntentWorkflow"];
15077
15389
  type BookingPolicy = Schemas["BookingPolicy"];
15078
15390
  type CancelAppointmentRequest = Schemas["CancelAppointmentRequest"];
15079
15391
  type CancellationEvent = Schemas["CancellationEvent"];
@@ -15191,6 +15503,7 @@ type ServiceUpdatedEventData = Schemas["ServiceUpdatedEventData"];
15191
15503
  type Slot = Schemas["Slot"];
15192
15504
  type SlotRule = Schemas["SlotRule"];
15193
15505
  type SortServiceFormsRequest = Schemas["SortServiceFormsRequest"];
15506
+ type SubmissionRequirement = Schemas["SubmissionRequirement"];
15194
15507
  type UnauthorizedResponse = Schemas["UnauthorizedResponse"];
15195
15508
  type UpdateAccountRequest = Schemas["UpdateAccountRequest"];
15196
15509
  type UpdateAccountUserRequest = Schemas["UpdateAccountUserRequest"];
@@ -16042,7 +16355,7 @@ declare function createBookingIntent(client: FetchClient, body: RequestBody<"/v1
16042
16355
  } | null;
16043
16356
  client_id?: string | null;
16044
16357
  end_at?: string | null;
16045
- locked_fields?: string[] | null;
16358
+ locked_fields?: ("service_id" | "provider_id" | "slot" | "client_data" | "submissions")[] | null;
16046
16359
  metadata?: {
16047
16360
  [key: string]: unknown;
16048
16361
  } | null;
@@ -19594,7 +19907,7 @@ declare function updateBookingIntent(client: FetchClient, path: PathParams<"/v1/
19594
19907
  } | null;
19595
19908
  client_id?: string | null;
19596
19909
  end_at?: string | null;
19597
- locked_fields?: string[] | null;
19910
+ locked_fields?: ("service_id" | "provider_id" | "slot" | "client_data" | "submissions")[] | null;
19598
19911
  metadata?: {
19599
19912
  [key: string]: unknown;
19600
19913
  } | null;
@@ -20186,4 +20499,4 @@ declare function updateService(client: FetchClient, path: PathParams<"/v1/servic
20186
20499
  };
20187
20500
  }, `${string}/${string}`>>;
20188
20501
 
20189
- export { type Account, type AccountEvent, type AccountResponse, type AccountUser, type AccountUserCreatedEventData, type AccountUserDeletedEventData, type AccountUserResponse, type AccountUserUpdatedEventData, type AccountUsersResponse, type AccountsResponse, type AdvanceNoticePolicy, type AggregatedSlot, type Appointment, type AppointmentCanceledEventData, type AppointmentConfirmedEventData, type AppointmentCreatedEventData, type AppointmentDeletedEventData, type AppointmentRescheduledEventData, type AppointmentResponse, type AppointmentsResponse, type AttachServiceFormRequest, type Block, type BlockCreatedEventData, type BlockDeletedEventData, type BlockResponse, type BlockUpdatedEventData, type BlocksResponse, type BookingIntent, type BookingIntentAbandonedEventData, type BookingIntentBookingPolicy, type BookingIntentCompletedEventData, type BookingIntentCreatedEventData, type BookingIntentResponse, type BookingIntentUpdatedEventData, type BookingIntentsResponse, type BookingPolicy, type CancelAppointmentRequest, type CancelPublicAppointmentRequest, type CancellationEvent, type CancellationPolicy, type CancellationReason, type CancellationReasonResponse, type CancellationReasonsResponse, type Client, type ClientCreatedEventData, type ClientDeletedEventData, type ClientField, type ClientFieldChoice, type ClientFieldOptions, type ClientFieldResponse, type ClientFieldsResponse, type ClientResponse, type ClientUpdatedEventData, type ClientsResponse, type CompleteBookingIntentRequest, type CompletePublicBookingIntentRequest, type ConfirmAppointmentRequest, type ConfirmationEvent, type ConnectedAccount, type ConnectedAccountCreatedEventData, type ConnectedAccountDeletedEventData, type ConnectedAccountReconnectedEventData, type ConnectedAccountRefreshFailedEventData, type ConnectedAccountResponse, type ConnectedAccountsResponse, type CreateAccountRequest, type CreateAccountUserRequest, type CreateAppointmentRequest, type CreateBlockRequest, type CreateBookingIntentRequest, type CreateCancellationReasonRequest, type CreateClientFieldRequest, type CreateClientRequest, type CreateDashboardSessionRequest, type CreateFormRequest, type CreateProviderRequest, type CreateProviderScheduleRequest, type CreatePublicAppointmentRequest, type CreatePublicBookingIntentRequest, type CreateServiceProviderRequest, type CreateServiceRequest, type DashboardSession, type DashboardSessionResponse, type FetchClient, type FetchClientOptions, type FieldChoice, type FieldChoiceInput, type FieldOptions, type FieldOptionsInput, type ForbiddenResponse, type Form, type FormDetail, type FormField, type FormFieldInput, type FormResponse, type FormsResponse, type GenericErrorResponse, type HoldPolicy, type IntentSubmissionInput, type JsonError, type JsonErrorResponse, type MaximizeUtilizationPolicy, type NotFoundResponse, type PaginationMeta, type PathParams, type Platform, type PlatformResponse, type Provider, type ProviderCreatedEventData, type ProviderDeactivatedEventData, type ProviderNotificationConfig, type ProviderNotificationType, type ProviderReactivatedEventData, type ProviderResponse, type ProviderSchedule, type ProviderScheduleCreatedEventData, type ProviderScheduleDeletedEventData, type ProviderScheduleResponse, type ProviderScheduleUpdatedEventData, type ProviderSchedulesResponse, type ProviderUpdatedEventData, type ProvidersResponse, type PublicAppointment, type PublicAppointmentResponse, type PublicBookingIntent, type PublicBookingIntentResponse, type PublicCancellationReason, type PublicCancellationReasonsResponse, type PublicServiceEarliestSlotResponse, type PublicServiceSlotsResponse, type QueryParams, type RecurrenceRule, type RequestBody, type RescheduleAppointmentRequest, type RescheduleEvent, type ReschedulePublicAppointmentRequest, type ReschedulingPolicy, type Role, type RolesResponse, type Service, type ServiceCreatedEventData, type ServiceDeletedEventData, type ServiceForm, type ServiceFormResponse, type ServiceFormsResponse, type ServiceProvider, type ServiceProviderCreatedEventData, type ServiceProviderDeletedEventData, type ServiceProviderResponse, type ServiceProvidersResponse, type ServiceResponse, type ServiceSlotResponse, type ServiceUpdatedEventData, type ServicesResponse, type Slot, type SlotRule, type SortServiceFormsRequest, type UnauthorizedResponse, type UpdateAccountRequest, type UpdateAccountUserRequest, type UpdateBlockRequest, type UpdateBookingIntentRequest, type UpdateCancellationReasonRequest, type UpdateClientFieldRequest, type UpdateClientRequest, type UpdateConnectedAccountRequest, type UpdateFormRequest, type UpdateProviderRequest, type UpdateProviderScheduleRequest, type UpdatePublicBookingIntentRequest, type UpdateServiceRequest, type User, type WeeklyRule, type ZonedDateTime, abandonBookingIntent, abandonPublicBookingIntent, attachServiceForm, cancelAppointment, cancelPublicAppointment, completeBookingIntent, completePublicBookingIntent, confirmAppointment, createAccount, createAccountUser, createAppointment, createBlock, createBookingIntent, createCancellationReason, createClient, createClientField, createDashboardSession, createFetchClient, createForm, createProvider, createProviderSchedule, createPublicAppointment, createPublicBookingIntent, createService, createServiceProvider, deactivateProvider, deleteBlock, deleteCancellationReason, deleteClient, deleteClientField, deleteConnectedAccount, deleteForm, deleteProviderSchedule, deleteService, deleteServiceProvider, detachServiceForm, getAccountById, getAppointment, getBlock, getBookingIntent, getCancellationReason, getClient, getClientField, getConnectedAccount, getCurrentAccount, getCurrentAccountUser, getCurrentPlatform, getEarliestPublicServiceSlot, getForm, getProvider, getProviderSchedule, getPublicAppointment, getPublicBookingIntent, getService, listAccountUsers, listAccounts, listAppointments, listBlocks, listBookingIntents, listCancellationReasons, listClientFields, listClients, listConnectedAccounts, listForms, listProviderSchedules, listProviders, listPublicCancellationReasons, listPublicServiceSlots, listRoles, listServiceForms, listServiceProviders, listServiceSlots, listServices, type paths, rescheduleAppointment, reschedulePublicAppointment, sortServiceForms, updateAccount, updateAccountUser, updateBlock, updateBookingIntent, updateCancellationReason, updateClient, updateClientField, updateConnectedAccount, updateForm, updateProvider, updateProviderSchedule, updatePublicBookingIntent, updateService };
20502
+ export { type Account, type AccountEvent, type AccountResponse, type AccountUser, type AccountUserCreatedEventData, type AccountUserDeletedEventData, type AccountUserResponse, type AccountUserUpdatedEventData, type AccountUsersResponse, type AccountsResponse, type AdvanceNoticePolicy, type AggregatedSlot, type Appointment, type AppointmentCanceledEventData, type AppointmentConfirmedEventData, type AppointmentCreatedEventData, type AppointmentDeletedEventData, type AppointmentRescheduledEventData, type AppointmentResponse, type AppointmentsResponse, type AttachServiceFormRequest, type Block, type BlockCreatedEventData, type BlockDeletedEventData, type BlockResponse, type BlockUpdatedEventData, type BlocksResponse, type BookingIntent, type BookingIntentAbandonedEventData, type BookingIntentBookingPolicy, type BookingIntentCompletedEventData, type BookingIntentCreatedEventData, type BookingIntentRequirements, type BookingIntentResponse, type BookingIntentUpdatedEventData, type BookingIntentWorkflow, type BookingIntentsResponse, type BookingPolicy, type CancelAppointmentRequest, type CancelPublicAppointmentRequest, type CancellationEvent, type CancellationPolicy, type CancellationReason, type CancellationReasonResponse, type CancellationReasonsResponse, type Client, type ClientCreatedEventData, type ClientDeletedEventData, type ClientField, type ClientFieldChoice, type ClientFieldOptions, type ClientFieldResponse, type ClientFieldsResponse, type ClientResponse, type ClientUpdatedEventData, type ClientsResponse, type CompleteBookingIntentRequest, type CompletePublicBookingIntentRequest, type ConfirmAppointmentRequest, type ConfirmationEvent, type ConnectedAccount, type ConnectedAccountCreatedEventData, type ConnectedAccountDeletedEventData, type ConnectedAccountReconnectedEventData, type ConnectedAccountRefreshFailedEventData, type ConnectedAccountResponse, type ConnectedAccountsResponse, type CreateAccountRequest, type CreateAccountUserRequest, type CreateAppointmentRequest, type CreateBlockRequest, type CreateBookingIntentRequest, type CreateCancellationReasonRequest, type CreateClientFieldRequest, type CreateClientRequest, type CreateDashboardSessionRequest, type CreateFormRequest, type CreateProviderRequest, type CreateProviderScheduleRequest, type CreatePublicAppointmentRequest, type CreatePublicBookingIntentRequest, type CreateServiceProviderRequest, type CreateServiceRequest, type DashboardSession, type DashboardSessionResponse, type FetchClient, type FetchClientOptions, type FieldChoice, type FieldChoiceInput, type FieldOptions, type FieldOptionsInput, type ForbiddenResponse, type Form, type FormDetail, type FormField, type FormFieldInput, type FormResponse, type FormsResponse, type GenericErrorResponse, type HoldPolicy, type IntentSubmissionInput, type JsonError, type JsonErrorResponse, type MaximizeUtilizationPolicy, type NotFoundResponse, type PaginationMeta, type PathParams, type Platform, type PlatformResponse, type Provider, type ProviderCreatedEventData, type ProviderDeactivatedEventData, type ProviderNotificationConfig, type ProviderNotificationType, type ProviderReactivatedEventData, type ProviderResponse, type ProviderSchedule, type ProviderScheduleCreatedEventData, type ProviderScheduleDeletedEventData, type ProviderScheduleResponse, type ProviderScheduleUpdatedEventData, type ProviderSchedulesResponse, type ProviderUpdatedEventData, type ProvidersResponse, type PublicAppointment, type PublicAppointmentResponse, type PublicBookingIntent, type PublicBookingIntentResponse, type PublicCancellationReason, type PublicCancellationReasonsResponse, type PublicServiceEarliestSlotResponse, type PublicServiceSlotsResponse, type QueryParams, type RecurrenceRule, type RequestBody, type RescheduleAppointmentRequest, type RescheduleEvent, type ReschedulePublicAppointmentRequest, type ReschedulingPolicy, type Role, type RolesResponse, type Service, type ServiceCreatedEventData, type ServiceDeletedEventData, type ServiceForm, type ServiceFormResponse, type ServiceFormsResponse, type ServiceProvider, type ServiceProviderCreatedEventData, type ServiceProviderDeletedEventData, type ServiceProviderResponse, type ServiceProvidersResponse, type ServiceResponse, type ServiceSlotResponse, type ServiceUpdatedEventData, type ServicesResponse, type Slot, type SlotRule, type SortServiceFormsRequest, type SubmissionRequirement, type UnauthorizedResponse, type UpdateAccountRequest, type UpdateAccountUserRequest, type UpdateBlockRequest, type UpdateBookingIntentRequest, type UpdateCancellationReasonRequest, type UpdateClientFieldRequest, type UpdateClientRequest, type UpdateConnectedAccountRequest, type UpdateFormRequest, type UpdateProviderRequest, type UpdateProviderScheduleRequest, type UpdatePublicBookingIntentRequest, type UpdateServiceRequest, type User, type WeeklyRule, type ZonedDateTime, abandonBookingIntent, abandonPublicBookingIntent, attachServiceForm, cancelAppointment, cancelPublicAppointment, completeBookingIntent, completePublicBookingIntent, confirmAppointment, createAccount, createAccountUser, createAppointment, createBlock, createBookingIntent, createCancellationReason, createClient, createClientField, createDashboardSession, createFetchClient, createForm, createProvider, createProviderSchedule, createPublicAppointment, createPublicBookingIntent, createService, createServiceProvider, deactivateProvider, deleteBlock, deleteCancellationReason, deleteClient, deleteClientField, deleteConnectedAccount, deleteForm, deleteProviderSchedule, deleteService, deleteServiceProvider, detachServiceForm, getAccountById, getAppointment, getBlock, getBookingIntent, getCancellationReason, getClient, getClientField, getConnectedAccount, getCurrentAccount, getCurrentAccountUser, getCurrentPlatform, getEarliestPublicServiceSlot, getForm, getProvider, getProviderSchedule, getPublicAppointment, getPublicBookingIntent, getService, listAccountUsers, listAccounts, listAppointments, listBlocks, listBookingIntents, listCancellationReasons, listClientFields, listClients, listConnectedAccounts, listForms, listProviderSchedules, listProviders, listPublicCancellationReasons, listPublicServiceSlots, listRoles, listServiceForms, listServiceProviders, listServiceSlots, listServices, type paths, rescheduleAppointment, reschedulePublicAppointment, sortServiceForms, updateAccount, updateAccountUser, updateBlock, updateBookingIntent, updateCancellationReason, updateClient, updateClientField, updateConnectedAccount, updateForm, updateProvider, updateProviderSchedule, updatePublicBookingIntent, updateService };