0

UpdateShift

by
Published Oct 17, 2025

Updates an existing `Shift`. When adding a `Break` to a `Shift`, any earlier `Break` instances in the `Shift` have the `end_at` property set to a valid RFC-3339 datetime string. When closing a `Shift`, all `Break` instances in the `Shift` must be complete with `end_at` set on each `Break`.

Script square Verified

The script

Submitted by hugo697 Bun
Verified 235 days ago
1
//native
2
type Square = {
3
  token: string;
4
};
5
/**
6
 * UpdateShift
7
 * Updates an existing `Shift`.
8

9
When adding a `Break` to a `Shift`, any earlier `Break` instances in the `Shift` have
10
the `end_at` property set to a valid RFC-3339 datetime string.
11

12
When closing a `Shift`, all `Break` instances in the `Shift` must be complete with `end_at`
13
set on each `Break`.
14
 */
15
export async function main(
16
  auth: Square,
17
  id: string,
18
  body: {
19
    shift: {
20
      id?: string;
21
      employee_id?: string;
22
      location_id: string;
23
      timezone?: string;
24
      start_at: string;
25
      end_at?: string;
26
      wage?: {
27
        title?: string;
28
        hourly_rate?: {
29
          amount?: number;
30
          currency?:
31
            | "UNKNOWN_CURRENCY"
32
            | "AED"
33
            | "AFN"
34
            | "ALL"
35
            | "AMD"
36
            | "ANG"
37
            | "AOA"
38
            | "ARS"
39
            | "AUD"
40
            | "AWG"
41
            | "AZN"
42
            | "BAM"
43
            | "BBD"
44
            | "BDT"
45
            | "BGN"
46
            | "BHD"
47
            | "BIF"
48
            | "BMD"
49
            | "BND"
50
            | "BOB"
51
            | "BOV"
52
            | "BRL"
53
            | "BSD"
54
            | "BTN"
55
            | "BWP"
56
            | "BYR"
57
            | "BZD"
58
            | "CAD"
59
            | "CDF"
60
            | "CHE"
61
            | "CHF"
62
            | "CHW"
63
            | "CLF"
64
            | "CLP"
65
            | "CNY"
66
            | "COP"
67
            | "COU"
68
            | "CRC"
69
            | "CUC"
70
            | "CUP"
71
            | "CVE"
72
            | "CZK"
73
            | "DJF"
74
            | "DKK"
75
            | "DOP"
76
            | "DZD"
77
            | "EGP"
78
            | "ERN"
79
            | "ETB"
80
            | "EUR"
81
            | "FJD"
82
            | "FKP"
83
            | "GBP"
84
            | "GEL"
85
            | "GHS"
86
            | "GIP"
87
            | "GMD"
88
            | "GNF"
89
            | "GTQ"
90
            | "GYD"
91
            | "HKD"
92
            | "HNL"
93
            | "HRK"
94
            | "HTG"
95
            | "HUF"
96
            | "IDR"
97
            | "ILS"
98
            | "INR"
99
            | "IQD"
100
            | "IRR"
101
            | "ISK"
102
            | "JMD"
103
            | "JOD"
104
            | "JPY"
105
            | "KES"
106
            | "KGS"
107
            | "KHR"
108
            | "KMF"
109
            | "KPW"
110
            | "KRW"
111
            | "KWD"
112
            | "KYD"
113
            | "KZT"
114
            | "LAK"
115
            | "LBP"
116
            | "LKR"
117
            | "LRD"
118
            | "LSL"
119
            | "LTL"
120
            | "LVL"
121
            | "LYD"
122
            | "MAD"
123
            | "MDL"
124
            | "MGA"
125
            | "MKD"
126
            | "MMK"
127
            | "MNT"
128
            | "MOP"
129
            | "MRO"
130
            | "MUR"
131
            | "MVR"
132
            | "MWK"
133
            | "MXN"
134
            | "MXV"
135
            | "MYR"
136
            | "MZN"
137
            | "NAD"
138
            | "NGN"
139
            | "NIO"
140
            | "NOK"
141
            | "NPR"
142
            | "NZD"
143
            | "OMR"
144
            | "PAB"
145
            | "PEN"
146
            | "PGK"
147
            | "PHP"
148
            | "PKR"
149
            | "PLN"
150
            | "PYG"
151
            | "QAR"
152
            | "RON"
153
            | "RSD"
154
            | "RUB"
155
            | "RWF"
156
            | "SAR"
157
            | "SBD"
158
            | "SCR"
159
            | "SDG"
160
            | "SEK"
161
            | "SGD"
162
            | "SHP"
163
            | "SLL"
164
            | "SLE"
165
            | "SOS"
166
            | "SRD"
167
            | "SSP"
168
            | "STD"
169
            | "SVC"
170
            | "SYP"
171
            | "SZL"
172
            | "THB"
173
            | "TJS"
174
            | "TMT"
175
            | "TND"
176
            | "TOP"
177
            | "TRY"
178
            | "TTD"
179
            | "TWD"
180
            | "TZS"
181
            | "UAH"
182
            | "UGX"
183
            | "USD"
184
            | "USN"
185
            | "USS"
186
            | "UYI"
187
            | "UYU"
188
            | "UZS"
189
            | "VEF"
190
            | "VND"
191
            | "VUV"
192
            | "WST"
193
            | "XAF"
194
            | "XAG"
195
            | "XAU"
196
            | "XBA"
197
            | "XBB"
198
            | "XBC"
199
            | "XBD"
200
            | "XCD"
201
            | "XDR"
202
            | "XOF"
203
            | "XPD"
204
            | "XPF"
205
            | "XPT"
206
            | "XTS"
207
            | "XXX"
208
            | "YER"
209
            | "ZAR"
210
            | "ZMK"
211
            | "ZMW"
212
            | "BTC"
213
            | "XUS";
214
        };
215
        job_id?: string;
216
        tip_eligible?: false | true;
217
      };
218
      breaks?: {
219
        id?: string;
220
        start_at: string;
221
        end_at?: string;
222
        break_type_id: string;
223
        name: string;
224
        expected_duration: string;
225
        is_paid: false | true;
226
      }[];
227
      status?: "OPEN" | "CLOSED";
228
      version?: number;
229
      created_at?: string;
230
      updated_at?: string;
231
      team_member_id?: string;
232
      declared_cash_tip_money?: {
233
        amount?: number;
234
        currency?:
235
          | "UNKNOWN_CURRENCY"
236
          | "AED"
237
          | "AFN"
238
          | "ALL"
239
          | "AMD"
240
          | "ANG"
241
          | "AOA"
242
          | "ARS"
243
          | "AUD"
244
          | "AWG"
245
          | "AZN"
246
          | "BAM"
247
          | "BBD"
248
          | "BDT"
249
          | "BGN"
250
          | "BHD"
251
          | "BIF"
252
          | "BMD"
253
          | "BND"
254
          | "BOB"
255
          | "BOV"
256
          | "BRL"
257
          | "BSD"
258
          | "BTN"
259
          | "BWP"
260
          | "BYR"
261
          | "BZD"
262
          | "CAD"
263
          | "CDF"
264
          | "CHE"
265
          | "CHF"
266
          | "CHW"
267
          | "CLF"
268
          | "CLP"
269
          | "CNY"
270
          | "COP"
271
          | "COU"
272
          | "CRC"
273
          | "CUC"
274
          | "CUP"
275
          | "CVE"
276
          | "CZK"
277
          | "DJF"
278
          | "DKK"
279
          | "DOP"
280
          | "DZD"
281
          | "EGP"
282
          | "ERN"
283
          | "ETB"
284
          | "EUR"
285
          | "FJD"
286
          | "FKP"
287
          | "GBP"
288
          | "GEL"
289
          | "GHS"
290
          | "GIP"
291
          | "GMD"
292
          | "GNF"
293
          | "GTQ"
294
          | "GYD"
295
          | "HKD"
296
          | "HNL"
297
          | "HRK"
298
          | "HTG"
299
          | "HUF"
300
          | "IDR"
301
          | "ILS"
302
          | "INR"
303
          | "IQD"
304
          | "IRR"
305
          | "ISK"
306
          | "JMD"
307
          | "JOD"
308
          | "JPY"
309
          | "KES"
310
          | "KGS"
311
          | "KHR"
312
          | "KMF"
313
          | "KPW"
314
          | "KRW"
315
          | "KWD"
316
          | "KYD"
317
          | "KZT"
318
          | "LAK"
319
          | "LBP"
320
          | "LKR"
321
          | "LRD"
322
          | "LSL"
323
          | "LTL"
324
          | "LVL"
325
          | "LYD"
326
          | "MAD"
327
          | "MDL"
328
          | "MGA"
329
          | "MKD"
330
          | "MMK"
331
          | "MNT"
332
          | "MOP"
333
          | "MRO"
334
          | "MUR"
335
          | "MVR"
336
          | "MWK"
337
          | "MXN"
338
          | "MXV"
339
          | "MYR"
340
          | "MZN"
341
          | "NAD"
342
          | "NGN"
343
          | "NIO"
344
          | "NOK"
345
          | "NPR"
346
          | "NZD"
347
          | "OMR"
348
          | "PAB"
349
          | "PEN"
350
          | "PGK"
351
          | "PHP"
352
          | "PKR"
353
          | "PLN"
354
          | "PYG"
355
          | "QAR"
356
          | "RON"
357
          | "RSD"
358
          | "RUB"
359
          | "RWF"
360
          | "SAR"
361
          | "SBD"
362
          | "SCR"
363
          | "SDG"
364
          | "SEK"
365
          | "SGD"
366
          | "SHP"
367
          | "SLL"
368
          | "SLE"
369
          | "SOS"
370
          | "SRD"
371
          | "SSP"
372
          | "STD"
373
          | "SVC"
374
          | "SYP"
375
          | "SZL"
376
          | "THB"
377
          | "TJS"
378
          | "TMT"
379
          | "TND"
380
          | "TOP"
381
          | "TRY"
382
          | "TTD"
383
          | "TWD"
384
          | "TZS"
385
          | "UAH"
386
          | "UGX"
387
          | "USD"
388
          | "USN"
389
          | "USS"
390
          | "UYI"
391
          | "UYU"
392
          | "UZS"
393
          | "VEF"
394
          | "VND"
395
          | "VUV"
396
          | "WST"
397
          | "XAF"
398
          | "XAG"
399
          | "XAU"
400
          | "XBA"
401
          | "XBB"
402
          | "XBC"
403
          | "XBD"
404
          | "XCD"
405
          | "XDR"
406
          | "XOF"
407
          | "XPD"
408
          | "XPF"
409
          | "XPT"
410
          | "XTS"
411
          | "XXX"
412
          | "YER"
413
          | "ZAR"
414
          | "ZMK"
415
          | "ZMW"
416
          | "BTC"
417
          | "XUS";
418
      };
419
    };
420
  },
421
) {
422
  const url = new URL(`https://connect.squareup.com/v2/labor/shifts/${id}`);
423

424
  const response = await fetch(url, {
425
    method: "PUT",
426
    headers: {
427
      "Content-Type": "application/json",
428
      Authorization: "Bearer " + auth.token,
429
    },
430
    body: JSON.stringify(body),
431
  });
432
  if (!response.ok) {
433
    const text = await response.text();
434
    throw new Error(`${response.status} ${text}`);
435
  }
436
  return await response.json();
437
}
438