Edits history of script submission #12282 for ' Create Segment (klaviyo)'

  • bun
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    type Klaviyo = {
      apiKey: string;
    };
    /**
     * Create Segment
     * Create a segment.*Rate limits*:Burst: `1/s`Steady: `15/m`Daily: `100/d`
    
     */
    export async function main(
      auth: Klaviyo,
      revision: string,
      body: {
        data: {
          type: "segment";
          attributes: {
            name: string;
            definition: {
              condition_groups: {
                conditions:
                  | {
                      type: "profile-group-membership";
                      is_member: true;
                      group_ids: string[];
                      timeframe_filter?:
                        | {
                            type: "date";
                            operator: "after" | "before";
                            date: string;
                          }
                        | {
                            type: "date";
                            operator: "between-static";
                            start: string;
                            end: string;
                          }
                        | {
                            type: "date";
                            operator: "at-least" | "in-the-last" | "in-the-next";
                            unit: "day" | "hour" | "week";
                            quantity: number;
                          }
                        | {
                            type: "date";
                            operator: "between";
                            start: number;
                            end: number;
                            unit: "day" | "hour" | "week";
                          };
                    }
                  | {
                      type: "profile-group-membership";
                      is_member: false;
                      group_ids: string[];
                    }
                  | {
                      type: "profile-metric";
                      metric_id: string;
                      measurement: "count" | "sum";
                      measurement_filter: {
                        type: "numeric";
                        operator:
                          | "equals"
                          | "greater-than"
                          | "greater-than-or-equal"
                          | "less-than"
                          | "less-than-or-equal"
                          | "not-equals";
                        value: number;
                      };
                      timeframe_filter:
                        | {
                            type: "date";
                            operator: "after" | "before";
                            date: string;
                          }
                        | {
                            type: "date";
                            operator: "between-static";
                            start: string;
                            end: string;
                          }
                        | {
                            type: "date";
                            operator: "at-least" | "in-the-last" | "in-the-next";
                            unit: "day" | "hour" | "week";
                            quantity: number;
                          }
                        | {
                            type: "date";
                            operator: "anniversary-last" | "anniversary-next";
                            unit: "day" | "hour" | "week";
                            quantity: number;
                          }
                        | {
                            type: "date";
                            operator: "between";
                            start: number;
                            end: number;
                            unit: "day" | "hour" | "week";
                          }
                        | { type: "date"; operator: "alltime" };
                      metric_filters?: {
                        property: string;
                        filter?:
                          | {
                              type: "string";
                              operator:
                                | "equals"
                                | "not-equals"
                                | "contains"
                                | "ends-with"
                                | "not-contains"
                                | "not-ends-with"
                                | "not-starts-with"
                                | "starts-with";
                              value: string;
                            }
                          | {
                              type: "string";
                              operator: "in" | "not-in";
                              value: string[];
                            }
                          | { type: "existence"; operator: "is-set" | "not-set" }
                          | {
                              type: "list";
                              operator:
                                | "contains-all"
                                | "contains-any"
                                | "not-contains-all"
                                | "not-contains-any";
                              value: string[];
                            }
                          | {
                              type: "list";
                              operator:
                                | "length-equals"
                                | "length-greater-than"
                                | "length-greater-than-or-equal"
                                | "length-less-than"
                                | "length-less-than-or-equal";
                              value: number;
                            }
                          | {
                              type: "list";
                              operator:
                                | "contains-substring"
                                | "not-contains-substring";
                              value: string;
                            }
                          | {
                              type: "boolean";
                              operator: "equals";
                              value: false | true;
                            }
                          | {
                              type: "numeric";
                              operator:
                                | "equals"
                                | "greater-than"
                                | "greater-than-or-equal"
                                | "less-than"
                                | "less-than-or-equal"
                                | "not-equals";
                              value: number;
                            };
                      }[];
                    }
                  | {
                      type: "profile-marketing-consent";
                      consent:
                        | {
                            channel: "email";
                            can_receive_marketing: true;
                            consent_status:
                              | { subscription: "any" }
                              | {
                                  subscription: "subscribed";
                                  filters?:
                                    | {
                                        field: "is_double_opt_in";
                                        filter: {
                                          type: "boolean";
                                          operator: "equals";
                                          value: false | true;
                                        };
                                      }
                                    | {
                                        field: "status_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            };
                                      }
                                    | {
                                        field: "custom_source";
                                        filter: {
                                          type: "string";
                                          operator: "equals";
                                          value: string;
                                        };
                                      }
                                    | {
                                        field: "method";
                                        method: "form";
                                        filter?: {
                                          type: "string";
                                          operator: "in";
                                          value: string[];
                                        };
                                      }
                                    | {
                                        field: "method";
                                        method: "preference_page";
                                        filter?: {
                                          type: "string";
                                          operator: "equals";
                                          value: string;
                                        };
                                      }
                                    | {
                                        field: "method";
                                        method: "api";
                                        filter?: {
                                          type: "string";
                                          operator: "in";
                                          value: string[];
                                        };
                                      }
                                    | { field: "method"; method: "inbound_message" }
                                    | { field: "method"; method: "back_in_stock" }
                                    | { field: "method"; method: "sftp" }
                                    | {
                                        field: "method";
                                        method: "manual_import";
                                        filter?: {
                                          type: "string";
                                          operator: "in";
                                          value: string[];
                                        };
                                      }
                                    | {
                                        field: "method";
                                        method: "manual_add";
                                        filter?: {
                                          type: "string";
                                          operator: "in";
                                          value: string[];
                                        };
                                      }
                                    | {
                                        field: "method";
                                        method: "integration";
                                        filter: {
                                          type: "string";
                                          operator: "in";
                                          value: "shopify"[];
                                        };
                                      }[];
                                }
                              | { subscription: "never_subscribed" };
                          }
                        | {
                            channel: "email";
                            can_receive_marketing: false;
                            consent_status:
                              | {
                                  subscription: "any";
                                  filters?:
                                    | {
                                        field: "bounce_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }
                                    | {
                                        field: "manual_suppression_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }
                                    | {
                                        field: "invalid_email_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }[];
                                }
                              | {
                                  subscription: "unsubscribed";
                                  filters?:
                                    | {
                                        field: "status_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            };
                                      }
                                    | {
                                        field: "method";
                                        method: "api";
                                        filter?: {
                                          type: "string";
                                          operator: "in";
                                          value: string[];
                                        };
                                      }
                                    | { field: "method"; method: "inbound_message" }
                                    | { field: "method"; method: "preference_page" }
                                    | { field: "method"; method: "manual_remove" }
                                    | { field: "method"; method: "spam_complaint" }
                                    | {
                                        field: "method";
                                        method: "mailbox_provider";
                                      }
                                    | {
                                        field: "method";
                                        method: "integration";
                                        filter: {
                                          type: "string";
                                          operator: "in";
                                          value: "constant_contact"[];
                                        };
                                      }[]
                                    | {
                                        field: "bounce_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }
                                    | {
                                        field: "manual_suppression_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }
                                    | {
                                        field: "invalid_email_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }[];
                                }
                              | {
                                  subscription: "never_subscribed";
                                  filters:
                                    | {
                                        field: "bounce_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }
                                    | {
                                        field: "manual_suppression_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }
                                    | {
                                        field: "invalid_email_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }[];
                                }
                              | {
                                  subscription: "subscribed";
                                  filters:
                                    | {
                                        field: "bounce_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }
                                    | {
                                        field: "manual_suppression_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }
                                    | {
                                        field: "invalid_email_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            }
                                          | {
                                              type: "existence";
                                              operator: "is-set";
                                            };
                                      }[];
                                };
                          }
                        | {
                            channel: "sms";
                            can_receive_marketing: true;
                            consent_status: {
                              subscription: "subscribed";
                              filters?:
                                | {
                                    field: "status_date";
                                    filter:
                                      | {
                                          type: "date";
                                          operator: "after" | "before";
                                          date: string;
                                        }
                                      | {
                                          type: "date";
                                          operator: "between-static";
                                          start: string;
                                          end: string;
                                        }
                                      | {
                                          type: "date";
                                          operator:
                                            | "at-least"
                                            | "in-the-last"
                                            | "in-the-next";
                                          unit: "day" | "hour" | "week";
                                          quantity: number;
                                        }
                                      | {
                                          type: "date";
                                          operator:
                                            | "anniversary-last"
                                            | "anniversary-next";
                                          unit: "day" | "hour" | "week";
                                          quantity: number;
                                        }
                                      | {
                                          type: "date";
                                          operator: "between";
                                          start: number;
                                          end: number;
                                          unit: "day" | "hour" | "week";
                                        }
                                      | {
                                          type: "date";
                                          operator: "calendar-month";
                                          value: number;
                                        }
                                      | {
                                          type: "date";
                                          operator:
                                            | "anniversary"
                                            | "anniversary-month";
                                        };
                                  }
                                | {
                                    field: "method";
                                    method: "form";
                                    filter?: {
                                      type: "string";
                                      operator: "in";
                                      value: string[];
                                    };
                                  }
                                | {
                                    field: "method";
                                    method: "manual_import";
                                    filter?: {
                                      type: "string";
                                      operator: "in";
                                      value: string[];
                                    };
                                  }
                                | {
                                    field: "method";
                                    method: "manual_add";
                                    filter?: {
                                      type: "string";
                                      operator: "in";
                                      value: string[];
                                    };
                                  }
                                | { field: "method"; method: "checkout" }
                                | { field: "method"; method: "inbound_message" }
                                | { field: "method"; method: "preference_page" }
                                | { field: "method"; method: "sftp" }
                                | {
                                    field: "method";
                                    method: "integration";
                                    filter: {
                                      type: "string";
                                      operator: "in";
                                      value: "shopify"[];
                                    };
                                  }[];
                            };
                          }
                        | {
                            channel: "sms";
                            can_receive_marketing: false;
                            consent_status:
                              | { subscription: "any" }
                              | {
                                  subscription: "unsubscribed";
                                  filters?:
                                    | {
                                        field: "status_date";
                                        filter:
                                          | {
                                              type: "date";
                                              operator: "after" | "before";
                                              date: string;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between-static";
                                              start: string;
                                              end: string;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "at-least"
                                                | "in-the-last"
                                                | "in-the-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary-last"
                                                | "anniversary-next";
                                              unit: "day" | "hour" | "week";
                                              quantity: number;
                                            }
                                          | {
                                              type: "date";
                                              operator: "between";
                                              start: number;
                                              end: number;
                                              unit: "day" | "hour" | "week";
                                            }
                                          | {
                                              type: "date";
                                              operator: "calendar-month";
                                              value: number;
                                            }
                                          | {
                                              type: "date";
                                              operator:
                                                | "anniversary"
                                                | "anniversary-month";
                                            };
                                      }
                                    | {
                                        field: "method";
                                        method: "form";
                                        filter?: {
                                          type: "string";
                                          operator: "in";
                                          value: string[];
                                        };
                                      }
                                    | {
                                        field: "method";
                                        method: "manual_import";
                                        filter?: {
                                          type: "string";
                                          operator: "in";
                                          value: string[];
                                        };
                                      }
                                    | {
                                        field: "method";
                                        method: "manual_add";
                                        filter?: {
                                          type: "string";
                                          operator: "in";
                                          value: string[];
                                        };
                                      }
                                    | { field: "method"; method: "manual_remove" }
                                    | { field: "method"; method: "bulk_remove" }
                                    | { field: "method"; method: "checkout" }
                                    | { field: "method"; method: "inbound_message" }
                                    | { field: "method"; method: "preference_page" }
                                    | { field: "method"; method: "sftp" }
                                    | {
                                        field: "method";
                                        method: "carrier_deactivation";
                                      }
                                    | {
                                        field: "method";
                                        method: "provided_landline";
                                      }
                                    | { field: "method"; method: "message_blocked" }
                                    | { field: "method"; method: "provided_no_age" }
                                    | { field: "method"; method: "failed_age_gate" }
                                    | {
                                        field: "method";
                                        method: "integration";
                                        filter: {
                                          type: "string";
                                          operator: "in";
                                          value: "shopify"[];
                                        };
                                      }[];
                                }
                              | { subscription: "never_subscribed" };
                          }
                        | {
                            channel: "push";
                            can_receive_marketing: true;
                            consent_status: {
                              subscription: "any";
                              filters?: {
                                field: "status_date";
                                filter:
                                  | {
                                      type: "date";
                                      operator: "after" | "before";
                                      date: string;
                                    }
                                  | {
                                      type: "date";
                                      operator: "between-static";
                                      start: string;
                                      end: string;
                                    }
                                  | {
                                      type: "date";
                                      operator:
                                        | "at-least"
                                        | "in-the-last"
                                        | "in-the-next";
                                      unit: "day" | "hour" | "week";
                                      quantity: number;
                                    }
                                  | {
                                      type: "date";
                                      operator:
                                        | "anniversary-last"
                                        | "anniversary-next";
                                      unit: "day" | "hour" | "week";
                                      quantity: number;
                                    }
                                  | {
                                      type: "date";
                                      operator: "between";
                                      start: number;
                                      end: number;
                                      unit: "day" | "hour" | "week";
                                    }
                                  | {
                                      type: "date";
                                      operator: "calendar-month";
                                      value: number;
                                    }
                                  | {
                                      type: "date";
                                      operator: "anniversary" | "anniversary-month";
                                    };
                              }[];
                            };
                          }
                        | {
                            channel: "push";
                            can_receive_marketing: false;
                            consent_status: { subscription: "any" };
                          };
                    }
                  | {
                      type: "profile-postal-code-distance";
                      country_code: string;
                      postal_code: string;
                      unit: "kilometers" | "miles";
                      filter: {
                        type: "numeric";
                        operator: "greater-than" | "less-than";
                        value: number;
                      };
                    }
                  | {
                      type: "profile-property";
                      property: string;
                      filter:
                        | {
                            type: "string";
                            operator:
                              | "equals"
                              | "not-equals"
                              | "contains"
                              | "ends-with"
                              | "not-contains"
                              | "not-ends-with"
                              | "not-starts-with"
                              | "starts-with";
                            value: string;
                          }
                        | {
                            type: "string";
                            operator: "in" | "not-in";
                            value: string[];
                          }
                        | {
                            type: "string";
                            operator:
                              | "phone-country-code-in"
                              | "phone-country-code-not-in";
                            value: string[];
                          }
                        | {
                            type: "numeric";
                            operator:
                              | "equals"
                              | "greater-than"
                              | "greater-than-or-equal"
                              | "less-than"
                              | "less-than-or-equal"
                              | "not-equals";
                            value: number;
                          }
                        | {
                            type: "boolean";
                            operator: "equals";
                            value: false | true;
                          }
                        | {
                            type: "date";
                            operator: "after" | "before";
                            date: string;
                          }
                        | {
                            type: "date";
                            operator: "between-static";
                            start: string;
                            end: string;
                          }
                        | {
                            type: "date";
                            operator: "at-least" | "in-the-last" | "in-the-next";
                            unit: "day" | "hour" | "week";
                            quantity: number;
                          }
                        | {
                            type: "date";
                            operator: "anniversary-last" | "anniversary-next";
                            unit: "day" | "hour" | "week";
                            quantity: number;
                          }
                        | {
                            type: "date";
                            operator: "between";
                            start: number;
                            end: number;
                            unit: "day" | "hour" | "week";
                          }
                        | {
                            type: "date";
                            operator: "calendar-month";
                            value: number;
                          }
                        | {
                            type: "date";
                            operator: "anniversary" | "anniversary-month";
                          }
                        | {
                            type: "list";
                            operator: "contains" | "not-contains";
                            value: string | number;
                          }
                        | {
                            type: "list";
                            operator:
                              | "length-equals"
                              | "length-greater-than"
                              | "length-greater-than-or-equal"
                              | "length-less-than"
                              | "length-less-than-or-equal";
                            value: number;
                          }
                        | { type: "existence"; operator: "is-set" | "not-set" };
                    }
                  | {
                      type: "profile-region";
                      in_region: false | true;
                      region: "european_union" | "united_states";
                    }
                  | {
                      type: "profile-predictive-analytics";
                      dimension:
                        | "average_days_between_orders"
                        | "average_order_value"
                        | "churn_probability"
                        | "historic_clv"
                        | "historic_number_of_orders"
                        | "predicted_clv"
                        | "predicted_number_of_orders"
                        | "total_clv";
                      filter: {
                        type: "numeric";
                        operator:
                          | "equals"
                          | "greater-than"
                          | "greater-than-or-equal"
                          | "less-than"
                          | "less-than-or-equal"
                          | "not-equals";
                        value: number;
                      };
                    }
                  | {
                      type: "profile-predictive-analytics";
                      dimension: "predicted_gender";
                      filter: {
                        type: "string";
                        operator: "equals" | "not-equals";
                        value: "likely_female" | "likely_male" | "uncertain";
                      };
                    }[];
              }[];
            };
            is_starred?: false | true;
          };
        };
      },
    ) {
      const url = new URL(`https://a.klaviyo.com/api/segments`);
    
      const response = await fetch(url, {
        method: "POST",
        headers: {
          revision: revision,
          "Accept": "application/vnd.api+json",
          "Content-Type": "application/vnd.api+json",
          Authorization: "Klaviyo-API-Key " + auth.apiKey,
        },
        body: JSON.stringify(body),
      });
      if (!response.ok) {
        const text = await response.text();
        throw new Error(`${response.status} ${text}`);
      }
      return await response.json();
    }
    

    Submitted by hugo697 428 days ago