Create segments

Saves a filter over one list as a segment and answers 201 with it and how many subscribers it selects now.

POST /v1/marketing/lists/{id}/segments

Addresshttps://api.hanzo.ai/v1/marketing/lists/{id}/segments
MethodPOST
Operationpost_marketing_lists_by_id_segments
AuthAuthorization: Bearer $HANZO_API_KEY

Saves a filter over one list as a segment and answers 201 with it and how many subscribers it selects now.

Org admin only.

Request

20 fields, body application/json (required).

FieldInTypeRequiredDescription
idpathstringyesID is the list, by id or slug, from the path.
filterbodymarketing.Filter—
filter.basisbodystring—Basis keeps subscribers by the consent basis recorded for them: explicit, legitimate_interest or unverified.
filter.clickedAfterbodyinteger (int64)—ClickedAfter keeps subscribers who clicked a link at or after this time.
filter.confirmedAfterbodyinteger (int64)—ConfirmedAfter and ConfirmedBefore bound when the subscription was confirmed, unix seconds, inclusive.
filter.confirmedBeforebodyinteger (int64)—ConfirmedBefore is the upper bound of ConfirmedAfter's range.
filter.createdAfterbodyinteger (int64)—CreatedAfter and CreatedBefore bound when the subscriber joined the list, unix seconds, inclusive.
filter.createdBeforebodyinteger (int64)—CreatedBefore is the upper bound of CreatedAfter's range.
filter.fieldbodystring—Field names a custom field, and Value keeps subscribers whose value for it is exactly this.
filter.notOpenedSincebodyinteger (int64)—NotOpenedSince keeps subscribers who have opened nothing since this time, including those who never opened anything.
filter.openedAfterbodyinteger (int64)—OpenedAfter keeps subscribers who opened a broadcast at or after this time.
filter.qbodystring—Q keeps subscribers whose address or name begins with it, case-insensitively.
filter.refbodystring—Ref keeps subscribers from one source instance: a form id, a page, an import batch id.
filter.sourcebodystring—Source keeps subscribers that came from this kind of source: form, page, api, import or commerce.
filter.statusbodystring—Status is one status or several, comma-separated: pending, subscribed, unsubscribed, bounced, complained, cleaned.
filter.tagbodystring—Tag keeps subscribers carrying this tag.
filter.valuebodystring—Value is the custom field's value Field keeps.
idbodystring—ID is the list, by id or slug, from the path.
namebodystring—Name is what the segment is called.
sidbodystring—SID is the segment to change, from the path; ignored on create.

Response

StatusBodyMeaning
201marketing.Segmentcreated
defaultproblem-detailsrefused

201 body — 22 fields.

FieldInTypeAlwaysDescription
countbodyinteger (int64)—Count is how many subscribers it selects now; filled on read of one.
createdAtbodyinteger (int64)—CreatedAt is when it was saved, unix seconds.
filterbodymarketing.Filter—
filter.basisbodystring—Basis keeps subscribers by the consent basis recorded for them: explicit, legitimate_interest or unverified.
filter.clickedAfterbodyinteger (int64)—ClickedAfter keeps subscribers who clicked a link at or after this time.
filter.confirmedAfterbodyinteger (int64)—ConfirmedAfter and ConfirmedBefore bound when the subscription was confirmed, unix seconds, inclusive.
filter.confirmedBeforebodyinteger (int64)—ConfirmedBefore is the upper bound of ConfirmedAfter's range.
filter.createdAfterbodyinteger (int64)—CreatedAfter and CreatedBefore bound when the subscriber joined the list, unix seconds, inclusive.
filter.createdBeforebodyinteger (int64)—CreatedBefore is the upper bound of CreatedAfter's range.
filter.fieldbodystring—Field names a custom field, and Value keeps subscribers whose value for it is exactly this.
filter.notOpenedSincebodyinteger (int64)—NotOpenedSince keeps subscribers who have opened nothing since this time, including those who never opened anything.
filter.openedAfterbodyinteger (int64)—OpenedAfter keeps subscribers who opened a broadcast at or after this time.
filter.qbodystring—Q keeps subscribers whose address or name begins with it, case-insensitively.
filter.refbodystring—Ref keeps subscribers from one source instance: a form id, a page, an import batch id.
filter.sourcebodystring—Source keeps subscribers that came from this kind of source: form, page, api, import or commerce.
filter.statusbodystring—Status is one status or several, comma-separated: pending, subscribed, unsubscribed, bounced, complained, cleaned.
filter.tagbodystring—Tag keeps subscribers carrying this tag.
filter.valuebodystring—Value is the custom field's value Field keeps.
idbodystring—ID is the segment's id ("seg_" and 96 random bits in hex).
listbodystring—List is the list it selects from.
namebodystring—Name is what the segment is called; at most 200 characters.
updatedAtbodyinteger (int64)—UpdatedAt is the last change, unix seconds.

Failure carries the platform error shape — see Errors.

Examples

hanzo marketing lists segments create <id>
import { Configuration, MarketingApi } from 'hanzoai';

const api = new MarketingApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postMarketingListsByIdSegments({ id: 'id', filter: {"basis":"<basis>","clickedAfter":0,"confirmedAfter":0,"confirmedBefore":0}, id: "<id>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import MarketingApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = MarketingApi(client).post_marketing_lists_by_id_segments(id='id', filter={"basis":"<basis>","clickedAfter":0,"confirmedAfter":0,"confirmedBefore":0}, id="<id>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.MarketingAPI.PostMarketingListsByIdSegments(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, marketing_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = marketing_api::post_marketing_lists_by_id_segments(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.MarketingApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new MarketingApi(client).postMarketingListsByIdSegments();

The method above is the one at the current release of the document. [email protected] (npm) and [email protected] (PyPI) were generated from an earlier release, where this operation carried a different id, so it spells the method differently — regenerating the clients is what makes the two agree. SDKs →

curl -X POST https://api.hanzo.ai/v1/marketing/lists/<id>/segments \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "filter": {
         "basis": "<basis>",
         "clickedAfter": 0,
         "confirmedAfter": 0,
         "confirmedBefore": 0
       },
       "id": "<id>"
     }'

MCP reaches marketing through the marketing tool, which names its 82 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_marketing_audiences"
         }
       }
     }'

Marketing API · All Hanzo APIs · Interactive reference

Was this page useful?
Broken link or missing step? Drop it in #docs on Discord or open a PR.