0

CreateBooking

by
Published Oct 17, 2025

Creates a booking.

Script square Verified

The script

Submitted by hugo697 Bun
Verified 235 days ago
1
//native
2
type Square = {
3
  token: string;
4
};
5
/**
6
 * CreateBooking
7
 * Creates a booking.
8
 */
9
export async function main(
10
  auth: Square,
11
  body: {
12
    idempotency_key?: string;
13
    booking: {
14
      id?: string;
15
      version?: number;
16
      status?:
17
        | "PENDING"
18
        | "CANCELLED_BY_CUSTOMER"
19
        | "CANCELLED_BY_SELLER"
20
        | "DECLINED"
21
        | "ACCEPTED"
22
        | "NO_SHOW";
23
      created_at?: string;
24
      updated_at?: string;
25
      start_at?: string;
26
      location_id?: string;
27
      customer_id?: string;
28
      customer_note?: string;
29
      seller_note?: string;
30
      appointment_segments?: {
31
        duration_minutes?: number;
32
        service_variation_id?: string;
33
        team_member_id: string;
34
        service_variation_version?: number;
35
        intermission_minutes?: number;
36
        any_team_member?: false | true;
37
        resource_ids?: string[];
38
      }[];
39
      transition_time_minutes?: number;
40
      all_day?: false | true;
41
      location_type?: "BUSINESS_LOCATION" | "CUSTOMER_LOCATION" | "PHONE";
42
      creator_details?: {
43
        creator_type?: "TEAM_MEMBER" | "CUSTOMER";
44
        team_member_id?: string;
45
        customer_id?: string;
46
      };
47
      source?:
48
        | "FIRST_PARTY_MERCHANT"
49
        | "FIRST_PARTY_BUYER"
50
        | "THIRD_PARTY_BUYER"
51
        | "API";
52
      address?: {
53
        address_line_1?: string;
54
        address_line_2?: string;
55
        address_line_3?: string;
56
        locality?: string;
57
        sublocality?: string;
58
        sublocality_2?: string;
59
        sublocality_3?: string;
60
        administrative_district_level_1?: string;
61
        administrative_district_level_2?: string;
62
        administrative_district_level_3?: string;
63
        postal_code?: string;
64
        country?:
65
          | "ZZ"
66
          | "AD"
67
          | "AE"
68
          | "AF"
69
          | "AG"
70
          | "AI"
71
          | "AL"
72
          | "AM"
73
          | "AO"
74
          | "AQ"
75
          | "AR"
76
          | "AS"
77
          | "AT"
78
          | "AU"
79
          | "AW"
80
          | "AX"
81
          | "AZ"
82
          | "BA"
83
          | "BB"
84
          | "BD"
85
          | "BE"
86
          | "BF"
87
          | "BG"
88
          | "BH"
89
          | "BI"
90
          | "BJ"
91
          | "BL"
92
          | "BM"
93
          | "BN"
94
          | "BO"
95
          | "BQ"
96
          | "BR"
97
          | "BS"
98
          | "BT"
99
          | "BV"
100
          | "BW"
101
          | "BY"
102
          | "BZ"
103
          | "CA"
104
          | "CC"
105
          | "CD"
106
          | "CF"
107
          | "CG"
108
          | "CH"
109
          | "CI"
110
          | "CK"
111
          | "CL"
112
          | "CM"
113
          | "CN"
114
          | "CO"
115
          | "CR"
116
          | "CU"
117
          | "CV"
118
          | "CW"
119
          | "CX"
120
          | "CY"
121
          | "CZ"
122
          | "DE"
123
          | "DJ"
124
          | "DK"
125
          | "DM"
126
          | "DO"
127
          | "DZ"
128
          | "EC"
129
          | "EE"
130
          | "EG"
131
          | "EH"
132
          | "ER"
133
          | "ES"
134
          | "ET"
135
          | "FI"
136
          | "FJ"
137
          | "FK"
138
          | "FM"
139
          | "FO"
140
          | "FR"
141
          | "GA"
142
          | "GB"
143
          | "GD"
144
          | "GE"
145
          | "GF"
146
          | "GG"
147
          | "GH"
148
          | "GI"
149
          | "GL"
150
          | "GM"
151
          | "GN"
152
          | "GP"
153
          | "GQ"
154
          | "GR"
155
          | "GS"
156
          | "GT"
157
          | "GU"
158
          | "GW"
159
          | "GY"
160
          | "HK"
161
          | "HM"
162
          | "HN"
163
          | "HR"
164
          | "HT"
165
          | "HU"
166
          | "ID"
167
          | "IE"
168
          | "IL"
169
          | "IM"
170
          | "IN"
171
          | "IO"
172
          | "IQ"
173
          | "IR"
174
          | "IS"
175
          | "IT"
176
          | "JE"
177
          | "JM"
178
          | "JO"
179
          | "JP"
180
          | "KE"
181
          | "KG"
182
          | "KH"
183
          | "KI"
184
          | "KM"
185
          | "KN"
186
          | "KP"
187
          | "KR"
188
          | "KW"
189
          | "KY"
190
          | "KZ"
191
          | "LA"
192
          | "LB"
193
          | "LC"
194
          | "LI"
195
          | "LK"
196
          | "LR"
197
          | "LS"
198
          | "LT"
199
          | "LU"
200
          | "LV"
201
          | "LY"
202
          | "MA"
203
          | "MC"
204
          | "MD"
205
          | "ME"
206
          | "MF"
207
          | "MG"
208
          | "MH"
209
          | "MK"
210
          | "ML"
211
          | "MM"
212
          | "MN"
213
          | "MO"
214
          | "MP"
215
          | "MQ"
216
          | "MR"
217
          | "MS"
218
          | "MT"
219
          | "MU"
220
          | "MV"
221
          | "MW"
222
          | "MX"
223
          | "MY"
224
          | "MZ"
225
          | "NA"
226
          | "NC"
227
          | "NE"
228
          | "NF"
229
          | "NG"
230
          | "NI"
231
          | "NL"
232
          | "NO"
233
          | "NP"
234
          | "NR"
235
          | "NU"
236
          | "NZ"
237
          | "OM"
238
          | "PA"
239
          | "PE"
240
          | "PF"
241
          | "PG"
242
          | "PH"
243
          | "PK"
244
          | "PL"
245
          | "PM"
246
          | "PN"
247
          | "PR"
248
          | "PS"
249
          | "PT"
250
          | "PW"
251
          | "PY"
252
          | "QA"
253
          | "RE"
254
          | "RO"
255
          | "RS"
256
          | "RU"
257
          | "RW"
258
          | "SA"
259
          | "SB"
260
          | "SC"
261
          | "SD"
262
          | "SE"
263
          | "SG"
264
          | "SH"
265
          | "SI"
266
          | "SJ"
267
          | "SK"
268
          | "SL"
269
          | "SM"
270
          | "SN"
271
          | "SO"
272
          | "SR"
273
          | "SS"
274
          | "ST"
275
          | "SV"
276
          | "SX"
277
          | "SY"
278
          | "SZ"
279
          | "TC"
280
          | "TD"
281
          | "TF"
282
          | "TG"
283
          | "TH"
284
          | "TJ"
285
          | "TK"
286
          | "TL"
287
          | "TM"
288
          | "TN"
289
          | "TO"
290
          | "TR"
291
          | "TT"
292
          | "TV"
293
          | "TW"
294
          | "TZ"
295
          | "UA"
296
          | "UG"
297
          | "UM"
298
          | "US"
299
          | "UY"
300
          | "UZ"
301
          | "VA"
302
          | "VC"
303
          | "VE"
304
          | "VG"
305
          | "VI"
306
          | "VN"
307
          | "VU"
308
          | "WF"
309
          | "WS"
310
          | "YE"
311
          | "YT"
312
          | "ZA"
313
          | "ZM"
314
          | "ZW";
315
        first_name?: string;
316
        last_name?: string;
317
      };
318
    };
319
  },
320
) {
321
  const url = new URL(`https://connect.squareup.com/v2/bookings`);
322

323
  const response = await fetch(url, {
324
    method: "POST",
325
    headers: {
326
      "Content-Type": "application/json",
327
      Authorization: "Bearer " + auth.token,
328
    },
329
    body: JSON.stringify(body),
330
  });
331
  if (!response.ok) {
332
    const text = await response.text();
333
    throw new Error(`${response.status} ${text}`);
334
  }
335
  return await response.json();
336
}
337