0

Create Segment

by
Published Apr 8, 2025

Create a segment.*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
 * Create Segment
7
 * Create a segment.*Rate limits*:Burst: `1/s`Steady: `15/m`Daily: `100/d`
8

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

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