0

Update Segment

by
Published Apr 8, 2025

Update a segment with the given segment ID.*Rate limits*:Burst: `1/s`Steady: `15/m`Daily: `100/d` **Scopes:** `segments:write`

Script klaviyo Verified

The script

Submitted by hugo697 Bun
Verified 428 days ago
1
//native
2
type Klaviyo = {
3
  apiKey: string;
4
};
5
/**
6
 * Update Segment
7
 * Update a segment with the given segment ID.*Rate limits*:Burst: `1/s`Steady: `15/m`Daily: `100/d`
8

9
 */
10
export async function main(
11
  auth: Klaviyo,
12
  id: string,
13
  revision: string,
14
  body: {
15
    data: {
16
      type: "segment";
17
      id: string;
18
      attributes: {
19
        definition?: {
20
          condition_groups: {
21
            conditions:
22
              | {
23
                  type: "profile-group-membership";
24
                  is_member: true;
25
                  group_ids: string[];
26
                  timeframe_filter?:
27
                    | {
28
                        type: "date";
29
                        operator: "after" | "before";
30
                        date: string;
31
                      }
32
                    | {
33
                        type: "date";
34
                        operator: "between-static";
35
                        start: string;
36
                        end: string;
37
                      }
38
                    | {
39
                        type: "date";
40
                        operator: "at-least" | "in-the-last" | "in-the-next";
41
                        unit: "day" | "hour" | "week";
42
                        quantity: number;
43
                      }
44
                    | {
45
                        type: "date";
46
                        operator: "between";
47
                        start: number;
48
                        end: number;
49
                        unit: "day" | "hour" | "week";
50
                      };
51
                }
52
              | {
53
                  type: "profile-group-membership";
54
                  is_member: false;
55
                  group_ids: string[];
56
                }
57
              | {
58
                  type: "profile-metric";
59
                  metric_id: string;
60
                  measurement: "count" | "sum";
61
                  measurement_filter: {
62
                    type: "numeric";
63
                    operator:
64
                      | "equals"
65
                      | "greater-than"
66
                      | "greater-than-or-equal"
67
                      | "less-than"
68
                      | "less-than-or-equal"
69
                      | "not-equals";
70
                    value: number;
71
                  };
72
                  timeframe_filter:
73
                    | {
74
                        type: "date";
75
                        operator: "after" | "before";
76
                        date: string;
77
                      }
78
                    | {
79
                        type: "date";
80
                        operator: "between-static";
81
                        start: string;
82
                        end: string;
83
                      }
84
                    | {
85
                        type: "date";
86
                        operator: "at-least" | "in-the-last" | "in-the-next";
87
                        unit: "day" | "hour" | "week";
88
                        quantity: number;
89
                      }
90
                    | {
91
                        type: "date";
92
                        operator: "anniversary-last" | "anniversary-next";
93
                        unit: "day" | "hour" | "week";
94
                        quantity: number;
95
                      }
96
                    | {
97
                        type: "date";
98
                        operator: "between";
99
                        start: number;
100
                        end: number;
101
                        unit: "day" | "hour" | "week";
102
                      }
103
                    | { type: "date"; operator: "alltime" };
104
                  metric_filters?: {
105
                    property: string;
106
                    filter?:
107
                      | {
108
                          type: "string";
109
                          operator:
110
                            | "equals"
111
                            | "not-equals"
112
                            | "contains"
113
                            | "ends-with"
114
                            | "not-contains"
115
                            | "not-ends-with"
116
                            | "not-starts-with"
117
                            | "starts-with";
118
                          value: string;
119
                        }
120
                      | {
121
                          type: "string";
122
                          operator: "in" | "not-in";
123
                          value: string[];
124
                        }
125
                      | { type: "existence"; operator: "is-set" | "not-set" }
126
                      | {
127
                          type: "list";
128
                          operator:
129
                            | "contains-all"
130
                            | "contains-any"
131
                            | "not-contains-all"
132
                            | "not-contains-any";
133
                          value: string[];
134
                        }
135
                      | {
136
                          type: "list";
137
                          operator:
138
                            | "length-equals"
139
                            | "length-greater-than"
140
                            | "length-greater-than-or-equal"
141
                            | "length-less-than"
142
                            | "length-less-than-or-equal";
143
                          value: number;
144
                        }
145
                      | {
146
                          type: "list";
147
                          operator:
148
                            | "contains-substring"
149
                            | "not-contains-substring";
150
                          value: string;
151
                        }
152
                      | {
153
                          type: "boolean";
154
                          operator: "equals";
155
                          value: false | true;
156
                        }
157
                      | {
158
                          type: "numeric";
159
                          operator:
160
                            | "equals"
161
                            | "greater-than"
162
                            | "greater-than-or-equal"
163
                            | "less-than"
164
                            | "less-than-or-equal"
165
                            | "not-equals";
166
                          value: number;
167
                        };
168
                  }[];
169
                }
170
              | {
171
                  type: "profile-marketing-consent";
172
                  consent:
173
                    | {
174
                        channel: "email";
175
                        can_receive_marketing: true;
176
                        consent_status:
177
                          | { subscription: "any" }
178
                          | {
179
                              subscription: "subscribed";
180
                              filters?:
181
                                | {
182
                                    field: "is_double_opt_in";
183
                                    filter: {
184
                                      type: "boolean";
185
                                      operator: "equals";
186
                                      value: false | true;
187
                                    };
188
                                  }
189
                                | {
190
                                    field: "status_date";
191
                                    filter:
192
                                      | {
193
                                          type: "date";
194
                                          operator: "after" | "before";
195
                                          date: string;
196
                                        }
197
                                      | {
198
                                          type: "date";
199
                                          operator: "between-static";
200
                                          start: string;
201
                                          end: string;
202
                                        }
203
                                      | {
204
                                          type: "date";
205
                                          operator:
206
                                            | "at-least"
207
                                            | "in-the-last"
208
                                            | "in-the-next";
209
                                          unit: "day" | "hour" | "week";
210
                                          quantity: number;
211
                                        }
212
                                      | {
213
                                          type: "date";
214
                                          operator:
215
                                            | "anniversary-last"
216
                                            | "anniversary-next";
217
                                          unit: "day" | "hour" | "week";
218
                                          quantity: number;
219
                                        }
220
                                      | {
221
                                          type: "date";
222
                                          operator: "between";
223
                                          start: number;
224
                                          end: number;
225
                                          unit: "day" | "hour" | "week";
226
                                        }
227
                                      | {
228
                                          type: "date";
229
                                          operator: "calendar-month";
230
                                          value: number;
231
                                        }
232
                                      | {
233
                                          type: "date";
234
                                          operator:
235
                                            | "anniversary"
236
                                            | "anniversary-month";
237
                                        };
238
                                  }
239
                                | {
240
                                    field: "custom_source";
241
                                    filter: {
242
                                      type: "string";
243
                                      operator: "equals";
244
                                      value: string;
245
                                    };
246
                                  }
247
                                | {
248
                                    field: "method";
249
                                    method: "form";
250
                                    filter?: {
251
                                      type: "string";
252
                                      operator: "in";
253
                                      value: string[];
254
                                    };
255
                                  }
256
                                | {
257
                                    field: "method";
258
                                    method: "preference_page";
259
                                    filter?: {
260
                                      type: "string";
261
                                      operator: "equals";
262
                                      value: string;
263
                                    };
264
                                  }
265
                                | {
266
                                    field: "method";
267
                                    method: "api";
268
                                    filter?: {
269
                                      type: "string";
270
                                      operator: "in";
271
                                      value: string[];
272
                                    };
273
                                  }
274
                                | { field: "method"; method: "inbound_message" }
275
                                | { field: "method"; method: "back_in_stock" }
276
                                | { field: "method"; method: "sftp" }
277
                                | {
278
                                    field: "method";
279
                                    method: "manual_import";
280
                                    filter?: {
281
                                      type: "string";
282
                                      operator: "in";
283
                                      value: string[];
284
                                    };
285
                                  }
286
                                | {
287
                                    field: "method";
288
                                    method: "manual_add";
289
                                    filter?: {
290
                                      type: "string";
291
                                      operator: "in";
292
                                      value: string[];
293
                                    };
294
                                  }
295
                                | {
296
                                    field: "method";
297
                                    method: "integration";
298
                                    filter: {
299
                                      type: "string";
300
                                      operator: "in";
301
                                      value: "shopify"[];
302
                                    };
303
                                  }[];
304
                            }
305
                          | { subscription: "never_subscribed" };
306
                      }
307
                    | {
308
                        channel: "email";
309
                        can_receive_marketing: false;
310
                        consent_status:
311
                          | {
312
                              subscription: "any";
313
                              filters?:
314
                                | {
315
                                    field: "bounce_date";
316
                                    filter:
317
                                      | {
318
                                          type: "date";
319
                                          operator: "after" | "before";
320
                                          date: string;
321
                                        }
322
                                      | {
323
                                          type: "date";
324
                                          operator: "between-static";
325
                                          start: string;
326
                                          end: string;
327
                                        }
328
                                      | {
329
                                          type: "date";
330
                                          operator:
331
                                            | "at-least"
332
                                            | "in-the-last"
333
                                            | "in-the-next";
334
                                          unit: "day" | "hour" | "week";
335
                                          quantity: number;
336
                                        }
337
                                      | {
338
                                          type: "date";
339
                                          operator:
340
                                            | "anniversary-last"
341
                                            | "anniversary-next";
342
                                          unit: "day" | "hour" | "week";
343
                                          quantity: number;
344
                                        }
345
                                      | {
346
                                          type: "date";
347
                                          operator: "between";
348
                                          start: number;
349
                                          end: number;
350
                                          unit: "day" | "hour" | "week";
351
                                        }
352
                                      | {
353
                                          type: "date";
354
                                          operator: "calendar-month";
355
                                          value: number;
356
                                        }
357
                                      | {
358
                                          type: "date";
359
                                          operator:
360
                                            | "anniversary"
361
                                            | "anniversary-month";
362
                                        }
363
                                      | {
364
                                          type: "existence";
365
                                          operator: "is-set";
366
                                        };
367
                                  }
368
                                | {
369
                                    field: "manual_suppression_date";
370
                                    filter:
371
                                      | {
372
                                          type: "date";
373
                                          operator: "after" | "before";
374
                                          date: string;
375
                                        }
376
                                      | {
377
                                          type: "date";
378
                                          operator: "between-static";
379
                                          start: string;
380
                                          end: string;
381
                                        }
382
                                      | {
383
                                          type: "date";
384
                                          operator:
385
                                            | "at-least"
386
                                            | "in-the-last"
387
                                            | "in-the-next";
388
                                          unit: "day" | "hour" | "week";
389
                                          quantity: number;
390
                                        }
391
                                      | {
392
                                          type: "date";
393
                                          operator:
394
                                            | "anniversary-last"
395
                                            | "anniversary-next";
396
                                          unit: "day" | "hour" | "week";
397
                                          quantity: number;
398
                                        }
399
                                      | {
400
                                          type: "date";
401
                                          operator: "between";
402
                                          start: number;
403
                                          end: number;
404
                                          unit: "day" | "hour" | "week";
405
                                        }
406
                                      | {
407
                                          type: "date";
408
                                          operator: "calendar-month";
409
                                          value: number;
410
                                        }
411
                                      | {
412
                                          type: "date";
413
                                          operator:
414
                                            | "anniversary"
415
                                            | "anniversary-month";
416
                                        }
417
                                      | {
418
                                          type: "existence";
419
                                          operator: "is-set";
420
                                        };
421
                                  }
422
                                | {
423
                                    field: "invalid_email_date";
424
                                    filter:
425
                                      | {
426
                                          type: "date";
427
                                          operator: "after" | "before";
428
                                          date: string;
429
                                        }
430
                                      | {
431
                                          type: "date";
432
                                          operator: "between-static";
433
                                          start: string;
434
                                          end: string;
435
                                        }
436
                                      | {
437
                                          type: "date";
438
                                          operator:
439
                                            | "at-least"
440
                                            | "in-the-last"
441
                                            | "in-the-next";
442
                                          unit: "day" | "hour" | "week";
443
                                          quantity: number;
444
                                        }
445
                                      | {
446
                                          type: "date";
447
                                          operator:
448
                                            | "anniversary-last"
449
                                            | "anniversary-next";
450
                                          unit: "day" | "hour" | "week";
451
                                          quantity: number;
452
                                        }
453
                                      | {
454
                                          type: "date";
455
                                          operator: "between";
456
                                          start: number;
457
                                          end: number;
458
                                          unit: "day" | "hour" | "week";
459
                                        }
460
                                      | {
461
                                          type: "date";
462
                                          operator: "calendar-month";
463
                                          value: number;
464
                                        }
465
                                      | {
466
                                          type: "date";
467
                                          operator:
468
                                            | "anniversary"
469
                                            | "anniversary-month";
470
                                        }
471
                                      | {
472
                                          type: "existence";
473
                                          operator: "is-set";
474
                                        };
475
                                  }[];
476
                            }
477
                          | {
478
                              subscription: "unsubscribed";
479
                              filters?:
480
                                | {
481
                                    field: "status_date";
482
                                    filter:
483
                                      | {
484
                                          type: "date";
485
                                          operator: "after" | "before";
486
                                          date: string;
487
                                        }
488
                                      | {
489
                                          type: "date";
490
                                          operator: "between-static";
491
                                          start: string;
492
                                          end: string;
493
                                        }
494
                                      | {
495
                                          type: "date";
496
                                          operator:
497
                                            | "at-least"
498
                                            | "in-the-last"
499
                                            | "in-the-next";
500
                                          unit: "day" | "hour" | "week";
501
                                          quantity: number;
502
                                        }
503
                                      | {
504
                                          type: "date";
505
                                          operator:
506
                                            | "anniversary-last"
507
                                            | "anniversary-next";
508
                                          unit: "day" | "hour" | "week";
509
                                          quantity: number;
510
                                        }
511
                                      | {
512
                                          type: "date";
513
                                          operator: "between";
514
                                          start: number;
515
                                          end: number;
516
                                          unit: "day" | "hour" | "week";
517
                                        }
518
                                      | {
519
                                          type: "date";
520
                                          operator: "calendar-month";
521
                                          value: number;
522
                                        }
523
                                      | {
524
                                          type: "date";
525
                                          operator:
526
                                            | "anniversary"
527
                                            | "anniversary-month";
528
                                        };
529
                                  }
530
                                | {
531
                                    field: "method";
532
                                    method: "api";
533
                                    filter?: {
534
                                      type: "string";
535
                                      operator: "in";
536
                                      value: string[];
537
                                    };
538
                                  }
539
                                | { field: "method"; method: "inbound_message" }
540
                                | { field: "method"; method: "preference_page" }
541
                                | { field: "method"; method: "manual_remove" }
542
                                | { field: "method"; method: "spam_complaint" }
543
                                | {
544
                                    field: "method";
545
                                    method: "mailbox_provider";
546
                                  }
547
                                | {
548
                                    field: "method";
549
                                    method: "integration";
550
                                    filter: {
551
                                      type: "string";
552
                                      operator: "in";
553
                                      value: "constant_contact"[];
554
                                    };
555
                                  }[]
556
                                | {
557
                                    field: "bounce_date";
558
                                    filter:
559
                                      | {
560
                                          type: "date";
561
                                          operator: "after" | "before";
562
                                          date: string;
563
                                        }
564
                                      | {
565
                                          type: "date";
566
                                          operator: "between-static";
567
                                          start: string;
568
                                          end: string;
569
                                        }
570
                                      | {
571
                                          type: "date";
572
                                          operator:
573
                                            | "at-least"
574
                                            | "in-the-last"
575
                                            | "in-the-next";
576
                                          unit: "day" | "hour" | "week";
577
                                          quantity: number;
578
                                        }
579
                                      | {
580
                                          type: "date";
581
                                          operator:
582
                                            | "anniversary-last"
583
                                            | "anniversary-next";
584
                                          unit: "day" | "hour" | "week";
585
                                          quantity: number;
586
                                        }
587
                                      | {
588
                                          type: "date";
589
                                          operator: "between";
590
                                          start: number;
591
                                          end: number;
592
                                          unit: "day" | "hour" | "week";
593
                                        }
594
                                      | {
595
                                          type: "date";
596
                                          operator: "calendar-month";
597
                                          value: number;
598
                                        }
599
                                      | {
600
                                          type: "date";
601
                                          operator:
602
                                            | "anniversary"
603
                                            | "anniversary-month";
604
                                        }
605
                                      | {
606
                                          type: "existence";
607
                                          operator: "is-set";
608
                                        };
609
                                  }
610
                                | {
611
                                    field: "manual_suppression_date";
612
                                    filter:
613
                                      | {
614
                                          type: "date";
615
                                          operator: "after" | "before";
616
                                          date: string;
617
                                        }
618
                                      | {
619
                                          type: "date";
620
                                          operator: "between-static";
621
                                          start: string;
622
                                          end: string;
623
                                        }
624
                                      | {
625
                                          type: "date";
626
                                          operator:
627
                                            | "at-least"
628
                                            | "in-the-last"
629
                                            | "in-the-next";
630
                                          unit: "day" | "hour" | "week";
631
                                          quantity: number;
632
                                        }
633
                                      | {
634
                                          type: "date";
635
                                          operator:
636
                                            | "anniversary-last"
637
                                            | "anniversary-next";
638
                                          unit: "day" | "hour" | "week";
639
                                          quantity: number;
640
                                        }
641
                                      | {
642
                                          type: "date";
643
                                          operator: "between";
644
                                          start: number;
645
                                          end: number;
646
                                          unit: "day" | "hour" | "week";
647
                                        }
648
                                      | {
649
                                          type: "date";
650
                                          operator: "calendar-month";
651
                                          value: number;
652
                                        }
653
                                      | {
654
                                          type: "date";
655
                                          operator:
656
                                            | "anniversary"
657
                                            | "anniversary-month";
658
                                        }
659
                                      | {
660
                                          type: "existence";
661
                                          operator: "is-set";
662
                                        };
663
                                  }
664
                                | {
665
                                    field: "invalid_email_date";
666
                                    filter:
667
                                      | {
668
                                          type: "date";
669
                                          operator: "after" | "before";
670
                                          date: string;
671
                                        }
672
                                      | {
673
                                          type: "date";
674
                                          operator: "between-static";
675
                                          start: string;
676
                                          end: string;
677
                                        }
678
                                      | {
679
                                          type: "date";
680
                                          operator:
681
                                            | "at-least"
682
                                            | "in-the-last"
683
                                            | "in-the-next";
684
                                          unit: "day" | "hour" | "week";
685
                                          quantity: number;
686
                                        }
687
                                      | {
688
                                          type: "date";
689
                                          operator:
690
                                            | "anniversary-last"
691
                                            | "anniversary-next";
692
                                          unit: "day" | "hour" | "week";
693
                                          quantity: number;
694
                                        }
695
                                      | {
696
                                          type: "date";
697
                                          operator: "between";
698
                                          start: number;
699
                                          end: number;
700
                                          unit: "day" | "hour" | "week";
701
                                        }
702
                                      | {
703
                                          type: "date";
704
                                          operator: "calendar-month";
705
                                          value: number;
706
                                        }
707
                                      | {
708
                                          type: "date";
709
                                          operator:
710
                                            | "anniversary"
711
                                            | "anniversary-month";
712
                                        }
713
                                      | {
714
                                          type: "existence";
715
                                          operator: "is-set";
716
                                        };
717
                                  }[];
718
                            }
719
                          | {
720
                              subscription: "never_subscribed";
721
                              filters:
722
                                | {
723
                                    field: "bounce_date";
724
                                    filter:
725
                                      | {
726
                                          type: "date";
727
                                          operator: "after" | "before";
728
                                          date: string;
729
                                        }
730
                                      | {
731
                                          type: "date";
732
                                          operator: "between-static";
733
                                          start: string;
734
                                          end: string;
735
                                        }
736
                                      | {
737
                                          type: "date";
738
                                          operator:
739
                                            | "at-least"
740
                                            | "in-the-last"
741
                                            | "in-the-next";
742
                                          unit: "day" | "hour" | "week";
743
                                          quantity: number;
744
                                        }
745
                                      | {
746
                                          type: "date";
747
                                          operator:
748
                                            | "anniversary-last"
749
                                            | "anniversary-next";
750
                                          unit: "day" | "hour" | "week";
751
                                          quantity: number;
752
                                        }
753
                                      | {
754
                                          type: "date";
755
                                          operator: "between";
756
                                          start: number;
757
                                          end: number;
758
                                          unit: "day" | "hour" | "week";
759
                                        }
760
                                      | {
761
                                          type: "date";
762
                                          operator: "calendar-month";
763
                                          value: number;
764
                                        }
765
                                      | {
766
                                          type: "date";
767
                                          operator:
768
                                            | "anniversary"
769
                                            | "anniversary-month";
770
                                        }
771
                                      | {
772
                                          type: "existence";
773
                                          operator: "is-set";
774
                                        };
775
                                  }
776
                                | {
777
                                    field: "manual_suppression_date";
778
                                    filter:
779
                                      | {
780
                                          type: "date";
781
                                          operator: "after" | "before";
782
                                          date: string;
783
                                        }
784
                                      | {
785
                                          type: "date";
786
                                          operator: "between-static";
787
                                          start: string;
788
                                          end: string;
789
                                        }
790
                                      | {
791
                                          type: "date";
792
                                          operator:
793
                                            | "at-least"
794
                                            | "in-the-last"
795
                                            | "in-the-next";
796
                                          unit: "day" | "hour" | "week";
797
                                          quantity: number;
798
                                        }
799
                                      | {
800
                                          type: "date";
801
                                          operator:
802
                                            | "anniversary-last"
803
                                            | "anniversary-next";
804
                                          unit: "day" | "hour" | "week";
805
                                          quantity: number;
806
                                        }
807
                                      | {
808
                                          type: "date";
809
                                          operator: "between";
810
                                          start: number;
811
                                          end: number;
812
                                          unit: "day" | "hour" | "week";
813
                                        }
814
                                      | {
815
                                          type: "date";
816
                                          operator: "calendar-month";
817
                                          value: number;
818
                                        }
819
                                      | {
820
                                          type: "date";
821
                                          operator:
822
                                            | "anniversary"
823
                                            | "anniversary-month";
824
                                        }
825
                                      | {
826
                                          type: "existence";
827
                                          operator: "is-set";
828
                                        };
829
                                  }
830
                                | {
831
                                    field: "invalid_email_date";
832
                                    filter:
833
                                      | {
834
                                          type: "date";
835
                                          operator: "after" | "before";
836
                                          date: string;
837
                                        }
838
                                      | {
839
                                          type: "date";
840
                                          operator: "between-static";
841
                                          start: string;
842
                                          end: string;
843
                                        }
844
                                      | {
845
                                          type: "date";
846
                                          operator:
847
                                            | "at-least"
848
                                            | "in-the-last"
849
                                            | "in-the-next";
850
                                          unit: "day" | "hour" | "week";
851
                                          quantity: number;
852
                                        }
853
                                      | {
854
                                          type: "date";
855
                                          operator:
856
                                            | "anniversary-last"
857
                                            | "anniversary-next";
858
                                          unit: "day" | "hour" | "week";
859
                                          quantity: number;
860
                                        }
861
                                      | {
862
                                          type: "date";
863
                                          operator: "between";
864
                                          start: number;
865
                                          end: number;
866
                                          unit: "day" | "hour" | "week";
867
                                        }
868
                                      | {
869
                                          type: "date";
870
                                          operator: "calendar-month";
871
                                          value: number;
872
                                        }
873
                                      | {
874
                                          type: "date";
875
                                          operator:
876
                                            | "anniversary"
877
                                            | "anniversary-month";
878
                                        }
879
                                      | {
880
                                          type: "existence";
881
                                          operator: "is-set";
882
                                        };
883
                                  }[];
884
                            }
885
                          | {
886
                              subscription: "subscribed";
887
                              filters:
888
                                | {
889
                                    field: "bounce_date";
890
                                    filter:
891
                                      | {
892
                                          type: "date";
893
                                          operator: "after" | "before";
894
                                          date: string;
895
                                        }
896
                                      | {
897
                                          type: "date";
898
                                          operator: "between-static";
899
                                          start: string;
900
                                          end: string;
901
                                        }
902
                                      | {
903
                                          type: "date";
904
                                          operator:
905
                                            | "at-least"
906
                                            | "in-the-last"
907
                                            | "in-the-next";
908
                                          unit: "day" | "hour" | "week";
909
                                          quantity: number;
910
                                        }
911
                                      | {
912
                                          type: "date";
913
                                          operator:
914
                                            | "anniversary-last"
915
                                            | "anniversary-next";
916
                                          unit: "day" | "hour" | "week";
917
                                          quantity: number;
918
                                        }
919
                                      | {
920
                                          type: "date";
921
                                          operator: "between";
922
                                          start: number;
923
                                          end: number;
924
                                          unit: "day" | "hour" | "week";
925
                                        }
926
                                      | {
927
                                          type: "date";
928
                                          operator: "calendar-month";
929
                                          value: number;
930
                                        }
931
                                      | {
932
                                          type: "date";
933
                                          operator:
934
                                            | "anniversary"
935
                                            | "anniversary-month";
936
                                        }
937
                                      | {
938
                                          type: "existence";
939
                                          operator: "is-set";
940
                                        };
941
                                  }
942
                                | {
943
                                    field: "manual_suppression_date";
944
                                    filter:
945
                                      | {
946
                                          type: "date";
947
                                          operator: "after" | "before";
948
                                          date: string;
949
                                        }
950
                                      | {
951
                                          type: "date";
952
                                          operator: "between-static";
953
                                          start: string;
954
                                          end: string;
955
                                        }
956
                                      | {
957
                                          type: "date";
958
                                          operator:
959
                                            | "at-least"
960
                                            | "in-the-last"
961
                                            | "in-the-next";
962
                                          unit: "day" | "hour" | "week";
963
                                          quantity: number;
964
                                        }
965
                                      | {
966
                                          type: "date";
967
                                          operator:
968
                                            | "anniversary-last"
969
                                            | "anniversary-next";
970
                                          unit: "day" | "hour" | "week";
971
                                          quantity: number;
972
                                        }
973
                                      | {
974
                                          type: "date";
975
                                          operator: "between";
976
                                          start: number;
977
                                          end: number;
978
                                          unit: "day" | "hour" | "week";
979
                                        }
980
                                      | {
981
                                          type: "date";
982
                                          operator: "calendar-month";
983
                                          value: number;
984
                                        }
985
                                      | {
986
                                          type: "date";
987
                                          operator:
988
                                            | "anniversary"
989
                                            | "anniversary-month";
990
                                        }
991
                                      | {
992
                                          type: "existence";
993
                                          operator: "is-set";
994
                                        };
995
                                  }
996
                                | {
997
                                    field: "invalid_email_date";
998
                                    filter:
999
                                      | {
1000
                                          type: "date";
1001
                                          operator: "after" | "before";
1002
                                          date: string;
1003
                                        }
1004
                                      | {
1005
                                          type: "date";
1006
                                          operator: "between-static";
1007
                                          start: string;
1008
                                          end: string;
1009
                                        }
1010
                                      | {
1011
                                          type: "date";
1012
                                          operator:
1013
                                            | "at-least"
1014
                                            | "in-the-last"
1015
                                            | "in-the-next";
1016
                                          unit: "day" | "hour" | "week";
1017
                                          quantity: number;
1018
                                        }
1019
                                      | {
1020
                                          type: "date";
1021
                                          operator:
1022
                                            | "anniversary-last"
1023
                                            | "anniversary-next";
1024
                                          unit: "day" | "hour" | "week";
1025
                                          quantity: number;
1026
                                        }
1027
                                      | {
1028
                                          type: "date";
1029
                                          operator: "between";
1030
                                          start: number;
1031
                                          end: number;
1032
                                          unit: "day" | "hour" | "week";
1033
                                        }
1034
                                      | {
1035
                                          type: "date";
1036
                                          operator: "calendar-month";
1037
                                          value: number;
1038
                                        }
1039
                                      | {
1040
                                          type: "date";
1041
                                          operator:
1042
                                            | "anniversary"
1043
                                            | "anniversary-month";
1044
                                        }
1045
                                      | {
1046
                                          type: "existence";
1047
                                          operator: "is-set";
1048
                                        };
1049
                                  }[];
1050
                            };
1051
                      }
1052
                    | {
1053
                        channel: "sms";
1054
                        can_receive_marketing: true;
1055
                        consent_status: {
1056
                          subscription: "subscribed";
1057
                          filters?:
1058
                            | {
1059
                                field: "status_date";
1060
                                filter:
1061
                                  | {
1062
                                      type: "date";
1063
                                      operator: "after" | "before";
1064
                                      date: string;
1065
                                    }
1066
                                  | {
1067
                                      type: "date";
1068
                                      operator: "between-static";
1069
                                      start: string;
1070
                                      end: string;
1071
                                    }
1072
                                  | {
1073
                                      type: "date";
1074
                                      operator:
1075
                                        | "at-least"
1076
                                        | "in-the-last"
1077
                                        | "in-the-next";
1078
                                      unit: "day" | "hour" | "week";
1079
                                      quantity: number;
1080
                                    }
1081
                                  | {
1082
                                      type: "date";
1083
                                      operator:
1084
                                        | "anniversary-last"
1085
                                        | "anniversary-next";
1086
                                      unit: "day" | "hour" | "week";
1087
                                      quantity: number;
1088
                                    }
1089
                                  | {
1090
                                      type: "date";
1091
                                      operator: "between";
1092
                                      start: number;
1093
                                      end: number;
1094
                                      unit: "day" | "hour" | "week";
1095
                                    }
1096
                                  | {
1097
                                      type: "date";
1098
                                      operator: "calendar-month";
1099
                                      value: number;
1100
                                    }
1101
                                  | {
1102
                                      type: "date";
1103
                                      operator:
1104
                                        | "anniversary"
1105
                                        | "anniversary-month";
1106
                                    };
1107
                              }
1108
                            | {
1109
                                field: "method";
1110
                                method: "form";
1111
                                filter?: {
1112
                                  type: "string";
1113
                                  operator: "in";
1114
                                  value: string[];
1115
                                };
1116
                              }
1117
                            | {
1118
                                field: "method";
1119
                                method: "manual_import";
1120
                                filter?: {
1121
                                  type: "string";
1122
                                  operator: "in";
1123
                                  value: string[];
1124
                                };
1125
                              }
1126
                            | {
1127
                                field: "method";
1128
                                method: "manual_add";
1129
                                filter?: {
1130
                                  type: "string";
1131
                                  operator: "in";
1132
                                  value: string[];
1133
                                };
1134
                              }
1135
                            | { field: "method"; method: "checkout" }
1136
                            | { field: "method"; method: "inbound_message" }
1137
                            | { field: "method"; method: "preference_page" }
1138
                            | { field: "method"; method: "sftp" }
1139
                            | {
1140
                                field: "method";
1141
                                method: "integration";
1142
                                filter: {
1143
                                  type: "string";
1144
                                  operator: "in";
1145
                                  value: "shopify"[];
1146
                                };
1147
                              }[];
1148
                        };
1149
                      }
1150
                    | {
1151
                        channel: "sms";
1152
                        can_receive_marketing: false;
1153
                        consent_status:
1154
                          | { subscription: "any" }
1155
                          | {
1156
                              subscription: "unsubscribed";
1157
                              filters?:
1158
                                | {
1159
                                    field: "status_date";
1160
                                    filter:
1161
                                      | {
1162
                                          type: "date";
1163
                                          operator: "after" | "before";
1164
                                          date: string;
1165
                                        }
1166
                                      | {
1167
                                          type: "date";
1168
                                          operator: "between-static";
1169
                                          start: string;
1170
                                          end: string;
1171
                                        }
1172
                                      | {
1173
                                          type: "date";
1174
                                          operator:
1175
                                            | "at-least"
1176
                                            | "in-the-last"
1177
                                            | "in-the-next";
1178
                                          unit: "day" | "hour" | "week";
1179
                                          quantity: number;
1180
                                        }
1181
                                      | {
1182
                                          type: "date";
1183
                                          operator:
1184
                                            | "anniversary-last"
1185
                                            | "anniversary-next";
1186
                                          unit: "day" | "hour" | "week";
1187
                                          quantity: number;
1188
                                        }
1189
                                      | {
1190
                                          type: "date";
1191
                                          operator: "between";
1192
                                          start: number;
1193
                                          end: number;
1194
                                          unit: "day" | "hour" | "week";
1195
                                        }
1196
                                      | {
1197
                                          type: "date";
1198
                                          operator: "calendar-month";
1199
                                          value: number;
1200
                                        }
1201
                                      | {
1202
                                          type: "date";
1203
                                          operator:
1204
                                            | "anniversary"
1205
                                            | "anniversary-month";
1206
                                        };
1207
                                  }
1208
                                | {
1209
                                    field: "method";
1210
                                    method: "form";
1211
                                    filter?: {
1212
                                      type: "string";
1213
                                      operator: "in";
1214
                                      value: string[];
1215
                                    };
1216
                                  }
1217
                                | {
1218
                                    field: "method";
1219
                                    method: "manual_import";
1220
                                    filter?: {
1221
                                      type: "string";
1222
                                      operator: "in";
1223
                                      value: string[];
1224
                                    };
1225
                                  }
1226
                                | {
1227
                                    field: "method";
1228
                                    method: "manual_add";
1229
                                    filter?: {
1230
                                      type: "string";
1231
                                      operator: "in";
1232
                                      value: string[];
1233
                                    };
1234
                                  }
1235
                                | { field: "method"; method: "manual_remove" }
1236
                                | { field: "method"; method: "bulk_remove" }
1237
                                | { field: "method"; method: "checkout" }
1238
                                | { field: "method"; method: "inbound_message" }
1239
                                | { field: "method"; method: "preference_page" }
1240
                                | { field: "method"; method: "sftp" }
1241
                                | {
1242
                                    field: "method";
1243
                                    method: "carrier_deactivation";
1244
                                  }
1245
                                | {
1246
                                    field: "method";
1247
                                    method: "provided_landline";
1248
                                  }
1249
                                | { field: "method"; method: "message_blocked" }
1250
                                | { field: "method"; method: "provided_no_age" }
1251
                                | { field: "method"; method: "failed_age_gate" }
1252
                                | {
1253
                                    field: "method";
1254
                                    method: "integration";
1255
                                    filter: {
1256
                                      type: "string";
1257
                                      operator: "in";
1258
                                      value: "shopify"[];
1259
                                    };
1260
                                  }[];
1261
                            }
1262
                          | { subscription: "never_subscribed" };
1263
                      }
1264
                    | {
1265
                        channel: "push";
1266
                        can_receive_marketing: true;
1267
                        consent_status: {
1268
                          subscription: "any";
1269
                          filters?: {
1270
                            field: "status_date";
1271
                            filter:
1272
                              | {
1273
                                  type: "date";
1274
                                  operator: "after" | "before";
1275
                                  date: string;
1276
                                }
1277
                              | {
1278
                                  type: "date";
1279
                                  operator: "between-static";
1280
                                  start: string;
1281
                                  end: string;
1282
                                }
1283
                              | {
1284
                                  type: "date";
1285
                                  operator:
1286
                                    | "at-least"
1287
                                    | "in-the-last"
1288
                                    | "in-the-next";
1289
                                  unit: "day" | "hour" | "week";
1290
                                  quantity: number;
1291
                                }
1292
                              | {
1293
                                  type: "date";
1294
                                  operator:
1295
                                    | "anniversary-last"
1296
                                    | "anniversary-next";
1297
                                  unit: "day" | "hour" | "week";
1298
                                  quantity: number;
1299
                                }
1300
                              | {
1301
                                  type: "date";
1302
                                  operator: "between";
1303
                                  start: number;
1304
                                  end: number;
1305
                                  unit: "day" | "hour" | "week";
1306
                                }
1307
                              | {
1308
                                  type: "date";
1309
                                  operator: "calendar-month";
1310
                                  value: number;
1311
                                }
1312
                              | {
1313
                                  type: "date";
1314
                                  operator: "anniversary" | "anniversary-month";
1315
                                };
1316
                          }[];
1317
                        };
1318
                      }
1319
                    | {
1320
                        channel: "push";
1321
                        can_receive_marketing: false;
1322
                        consent_status: { subscription: "any" };
1323
                      };
1324
                }
1325
              | {
1326
                  type: "profile-postal-code-distance";
1327
                  country_code: string;
1328
                  postal_code: string;
1329
                  unit: "kilometers" | "miles";
1330
                  filter: {
1331
                    type: "numeric";
1332
                    operator: "greater-than" | "less-than";
1333
                    value: number;
1334
                  };
1335
                }
1336
              | {
1337
                  type: "profile-property";
1338
                  property: string;
1339
                  filter:
1340
                    | {
1341
                        type: "string";
1342
                        operator:
1343
                          | "equals"
1344
                          | "not-equals"
1345
                          | "contains"
1346
                          | "ends-with"
1347
                          | "not-contains"
1348
                          | "not-ends-with"
1349
                          | "not-starts-with"
1350
                          | "starts-with";
1351
                        value: string;
1352
                      }
1353
                    | {
1354
                        type: "string";
1355
                        operator: "in" | "not-in";
1356
                        value: string[];
1357
                      }
1358
                    | {
1359
                        type: "string";
1360
                        operator:
1361
                          | "phone-country-code-in"
1362
                          | "phone-country-code-not-in";
1363
                        value: string[];
1364
                      }
1365
                    | {
1366
                        type: "numeric";
1367
                        operator:
1368
                          | "equals"
1369
                          | "greater-than"
1370
                          | "greater-than-or-equal"
1371
                          | "less-than"
1372
                          | "less-than-or-equal"
1373
                          | "not-equals";
1374
                        value: number;
1375
                      }
1376
                    | {
1377
                        type: "boolean";
1378
                        operator: "equals";
1379
                        value: false | true;
1380
                      }
1381
                    | {
1382
                        type: "date";
1383
                        operator: "after" | "before";
1384
                        date: string;
1385
                      }
1386
                    | {
1387
                        type: "date";
1388
                        operator: "between-static";
1389
                        start: string;
1390
                        end: string;
1391
                      }
1392
                    | {
1393
                        type: "date";
1394
                        operator: "at-least" | "in-the-last" | "in-the-next";
1395
                        unit: "day" | "hour" | "week";
1396
                        quantity: number;
1397
                      }
1398
                    | {
1399
                        type: "date";
1400
                        operator: "anniversary-last" | "anniversary-next";
1401
                        unit: "day" | "hour" | "week";
1402
                        quantity: number;
1403
                      }
1404
                    | {
1405
                        type: "date";
1406
                        operator: "between";
1407
                        start: number;
1408
                        end: number;
1409
                        unit: "day" | "hour" | "week";
1410
                      }
1411
                    | {
1412
                        type: "date";
1413
                        operator: "calendar-month";
1414
                        value: number;
1415
                      }
1416
                    | {
1417
                        type: "date";
1418
                        operator: "anniversary" | "anniversary-month";
1419
                      }
1420
                    | {
1421
                        type: "list";
1422
                        operator: "contains" | "not-contains";
1423
                        value: string | number;
1424
                      }
1425
                    | {
1426
                        type: "list";
1427
                        operator:
1428
                          | "length-equals"
1429
                          | "length-greater-than"
1430
                          | "length-greater-than-or-equal"
1431
                          | "length-less-than"
1432
                          | "length-less-than-or-equal";
1433
                        value: number;
1434
                      }
1435
                    | { type: "existence"; operator: "is-set" | "not-set" };
1436
                }
1437
              | {
1438
                  type: "profile-region";
1439
                  in_region: false | true;
1440
                  region: "european_union" | "united_states";
1441
                }
1442
              | {
1443
                  type: "profile-predictive-analytics";
1444
                  dimension:
1445
                    | "average_days_between_orders"
1446
                    | "average_order_value"
1447
                    | "churn_probability"
1448
                    | "historic_clv"
1449
                    | "historic_number_of_orders"
1450
                    | "predicted_clv"
1451
                    | "predicted_number_of_orders"
1452
                    | "total_clv";
1453
                  filter: {
1454
                    type: "numeric";
1455
                    operator:
1456
                      | "equals"
1457
                      | "greater-than"
1458
                      | "greater-than-or-equal"
1459
                      | "less-than"
1460
                      | "less-than-or-equal"
1461
                      | "not-equals";
1462
                    value: number;
1463
                  };
1464
                }
1465
              | {
1466
                  type: "profile-predictive-analytics";
1467
                  dimension: "predicted_gender";
1468
                  filter: {
1469
                    type: "string";
1470
                    operator: "equals" | "not-equals";
1471
                    value: "likely_female" | "likely_male" | "uncertain";
1472
                  };
1473
                }[];
1474
          }[];
1475
        };
1476
        name?: string;
1477
        is_starred?: false | true;
1478
      };
1479
    };
1480
  },
1481
) {
1482
  const url = new URL(`https://a.klaviyo.com/api/segments/${id}`);
1483

1484
  const response = await fetch(url, {
1485
    method: "PATCH",
1486
    headers: {
1487
      revision: revision,
1488
      "Accept": "application/vnd.api+json",
1489
      "Content-Type": "application/vnd.api+json",
1490
      Authorization: "Klaviyo-API-Key " + auth.apiKey,
1491
    },
1492
    body: JSON.stringify(body),
1493
  });
1494
  if (!response.ok) {
1495
    const text = await response.text();
1496
    throw new Error(`${response.status} ${text}`);
1497
  }
1498
  return await response.json();
1499
}
1500