---
title: "List segments"
method: GET
path: "/segments"
tags: ["Segments"]
---

# List segments

`GET /segments`

Lists saved segments and subscriber counts for the authenticated company.

## Response `200`

Segments returned

- object
  - `success` boolean
  - `segments` Segment[]
    - `id` string
    - `name` string
    - `filters` FilterLeaf[] — Legacy v1 flat filters, or flattened leaves for v2 responses.
      - `kind` 'filter' — Required when the filter is inside a v2 root group.
      - `id` string, required
      - `field` 'status' | 'phone' | 'smsStatus' | 'tag' | 'email' | 'emailProvider' | 'added' | 'firstName' | 'lastName' | 'list' | 'attribute' | 'event' | 'segment' | 'stripeProduct' | 'stripeCurrentProduct' | 'stripeTrialProduct' | 'commerceProduct' | 'commerceCollection' | 'emailSent' | 'emailDelivered' | 'emailOpened' | 'emailClicked' | 'emailBounced' | 'emailComplained', required
      - `operator` 'is' | 'is_not' | 'is_empty' | 'is_not_empty' | 'contains' | 'not_contains' | 'less_than' | 'more_than' | 'is_temporary_bounce' | 'is_permanent_bounce' | 'at_least' | 'less_than_count' | 'gte' | 'lte' | 'gt' | 'lt', required — Valid operators depend on the field. status/segment: is, is_not. smsStatus: is, is_not (values: subscribed, unsubscribed, not_subscribed). phone: is_not_empty, is_empty (empty value). tag: contains, not_contains, is_empty, is_not_empty. email: contains, not_contains for domain or substring matching, is, is_not for an exact case-insensitive address. emailProvider/list: is, is_not, is_empty, is_not_empty. firstName/lastName: contains, not_contains, is_empty, is_not_empty. added: less_than, more_than. attribute: is, is_not, is_empty, is_not_empty, gte, lte, gt, lt, contains, not_contains. event and email engagement fields: is, is_not, at_least, less_than_count. emailBounced also supports is_temporary_bounce and is_permanent_bounce. stripeProduct: is, is_not, at_least, less_than_count. stripeCurrentProduct/stripeTrialProduct: is, is_not, gte, lte, gt, lt. commerceProduct/commerceCollection: is, is_not, at_least, less_than_count.
      - `value` string, required — Event filters use `eventName:30d` or `eventName:5:30d`. Segment filters use a segment ID. Email engagement fields use a rolling time window (`7d`, `30d`, `90d`, `180d`, `all`), a specific campaign via `campaign:<campaign_id>`, or `count:timeRange` (such as `10:30d` or `10:all`) with at_least/less_than_count. Stripe product filters use `prod_123` for bought/current/trialing checks, `prod_123:3` for payment thresholds, and product-scoped values such as `prod_123:is_canceled`, `prod_123:cancels_at:2026-05-26`, `prod_123:end_at:2026-05-26`, or `prod_123:start_at:7 days ago`. Commerce product filters use `provider:productId` (provider one of `shopify`, `woocommerce`, `api`), optionally with an order-count threshold (`shopify:42:2`); a bare product ID matches the ID on any provider. Commerce collection filters use a collection ID or handle (`skincare`), optionally provider-prefixed and/or with an order-count threshold (`shopify:skincare:2`), and match anyone whose orders contain any product currently in that collection.
    - `filterJoinOperator` 'and' | 'or'
    - `format` 'v1' | 'v2'
    - `root` FilterGroup — A nested AND/OR filter group.
      - `kind` 'group', required
      - `id` string, required
      - `joinOperator` 'and' | 'or', required
      - `children` union[], required
        - union
          - FilterLeaf — A single subscriber filter rule.
            - `kind` 'filter' — Required when the filter is inside a v2 root group.
            - `id` string, required
            - `field` 'status' | 'phone' | 'smsStatus' | 'tag' | 'email' | 'emailProvider' | 'added' | 'firstName' | 'lastName' | 'list' | 'attribute' | 'event' | 'segment' | 'stripeProduct' | 'stripeCurrentProduct' | 'stripeTrialProduct' | 'commerceProduct' | 'commerceCollection' | 'emailSent' | 'emailDelivered' | 'emailOpened' | 'emailClicked' | 'emailBounced' | 'emailComplained', required
            - `operator` 'is' | 'is_not' | 'is_empty' | 'is_not_empty' | 'contains' | 'not_contains' | 'less_than' | 'more_than' | 'is_temporary_bounce' | 'is_permanent_bounce' | 'at_least' | 'less_than_count' | 'gte' | 'lte' | 'gt' | 'lt', required — Valid operators depend on the field. status/segment: is, is_not. smsStatus: is, is_not (values: subscribed, unsubscribed, not_subscribed). phone: is_not_empty, is_empty (empty value). tag: contains, not_contains, is_empty, is_not_empty. email: contains, not_contains for domain or substring matching, is, is_not for an exact case-insensitive address. emailProvider/list: is, is_not, is_empty, is_not_empty. firstName/lastName: contains, not_contains, is_empty, is_not_empty. added: less_than, more_than. attribute: is, is_not, is_empty, is_not_empty, gte, lte, gt, lt, contains, not_contains. event and email engagement fields: is, is_not, at_least, less_than_count. emailBounced also supports is_temporary_bounce and is_permanent_bounce. stripeProduct: is, is_not, at_least, less_than_count. stripeCurrentProduct/stripeTrialProduct: is, is_not, gte, lte, gt, lt. commerceProduct/commerceCollection: is, is_not, at_least, less_than_count.
            - `value` string, required — Event filters use `eventName:30d` or `eventName:5:30d`. Segment filters use a segment ID. Email engagement fields use a rolling time window (`7d`, `30d`, `90d`, `180d`, `all`), a specific campaign via `campaign:<campaign_id>`, or `count:timeRange` (such as `10:30d` or `10:all`) with at_least/less_than_count. Stripe product filters use `prod_123` for bought/current/trialing checks, `prod_123:3` for payment thresholds, and product-scoped values such as `prod_123:is_canceled`, `prod_123:cancels_at:2026-05-26`, `prod_123:end_at:2026-05-26`, or `prod_123:start_at:7 days ago`. Commerce product filters use `provider:productId` (provider one of `shopify`, `woocommerce`, `api`), optionally with an order-count threshold (`shopify:42:2`); a bare product ID matches the ID on any provider. Commerce collection filters use a collection ID or handle (`skincare`), optionally provider-prefixed and/or with an order-count threshold (`shopify:skincare:2`), and match anyone whose orders contain any product currently in that collection.
          - FilterGroup — recursive
    - `subscriberCount` integer
    - `activeSubscriberCount` integer

## Other responses

- `401` — Unauthorized

---

[API](https://skmtc.net/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.net/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/versions/af1cf9620482/schema)
