package mainimport ( "context" "fmt" "log" "os" "github.com/AhaSend/ahasend-go" "github.com/AhaSend/ahasend-go/api" "github.com/AhaSend/ahasend-go/models/requests" "github.com/google/uuid")func main() { client := api.NewAPIClient(api.WithAPIKey(os.Getenv("AHASEND_API_KEY"))) accountID := uuid.MustParse(os.Getenv("AHASEND_ACCOUNT_ID")) ctx := context.Background() segmentID := uuid.MustParse("11111111-1111-4111-8111-111111111111") // Only the fields you set change. A new name or description keeps the // members; a new definition or time zone builds them again. response, _, err := client.SegmentsAPI.UpdateSegment(ctx, accountID, segmentID, requests.UpdateSegmentRequest{ Name: ahasend.String("Engaged customers"), Description: ahasend.String("Opened a campaign recently"), }) if err != nil { log.Fatalf("Error updating segment: %v", err) } fmt.Printf("Updated segment %s (%s)\n", response.Name, response.State)}
import { AhaSendClient } from "@ahasend/sdk";
const client = AhaSendClient.fromEnv();
const segmentId = "00000000-0000-4000-8000-000000000015";
// A changed definition or time zone builds the members again; a new name does not.
const segment = await client.segments.update(segmentId, { name: "Engaged German customers" });
console.log("Segment updated.", { id: segment.id, name: segment.name });
{
"message": "conditions[0].field: the account has no contact field \"city\"; conditions[1].value: must be a list id"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
Segments
Update a Segment via the API
Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.
PUT
/
v2
/
accounts
/
{account_id}
/
segments
/
{segment_id}
AhaSend Go SDK
package mainimport ( "context" "fmt" "log" "os" "github.com/AhaSend/ahasend-go" "github.com/AhaSend/ahasend-go/api" "github.com/AhaSend/ahasend-go/models/requests" "github.com/google/uuid")func main() { client := api.NewAPIClient(api.WithAPIKey(os.Getenv("AHASEND_API_KEY"))) accountID := uuid.MustParse(os.Getenv("AHASEND_ACCOUNT_ID")) ctx := context.Background() segmentID := uuid.MustParse("11111111-1111-4111-8111-111111111111") // Only the fields you set change. A new name or description keeps the // members; a new definition or time zone builds them again. response, _, err := client.SegmentsAPI.UpdateSegment(ctx, accountID, segmentID, requests.UpdateSegmentRequest{ Name: ahasend.String("Engaged customers"), Description: ahasend.String("Opened a campaign recently"), }) if err != nil { log.Fatalf("Error updating segment: %v", err) } fmt.Printf("Updated segment %s (%s)\n", response.Name, response.State)}
import { AhaSendClient } from "@ahasend/sdk";
const client = AhaSendClient.fromEnv();
const segmentId = "00000000-0000-4000-8000-000000000015";
// A changed definition or time zone builds the members again; a new name does not.
const segment = await client.segments.update(segmentId, { name: "Engaged German customers" });
console.log("Segment updated.", { id: segment.id, name: segment.name });
{
"message": "conditions[0].field: the account has no contact field \"city\"; conditions[1].value: must be a list id"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
{
"message": "Error message"
}
The AhaSend API changes one segment. Access requires segments:write.Fields:
A field that you leave out or send as null does not change.
name and description follow the same rules as in Create Segment.
definition replaces the stored rules as a whole. See Definitions.
timezone is an IANA time zone. An empty string stores UTC.
A field that you cannot write is refused with 400, and the message names it.
Members:
A change of definition or timezone builds the members again. The segment is building until that ends, and a campaign that uses it cannot be sent until then.
A change of only name or description keeps the members and the state.
Any update of a failed segment, {} included, builds it again.
See States.A segment that is being changed, for example by an update of its members, answers 409 with The segment is being updated. Try again in a minute. Nothing was changed, so send the request again later.
API key for authentication. Non-empty Security Requirement values are
AhaSend API-key roles. Roles listed within one requirement object are
jointly required; separate requirement objects are alternatives.
A partial segment update. An omitted or null property leaves the
stored value unchanged. A change of definition or timezone builds
the segment's members again, and it is building until that ends; a
change of only name or description leaves its members and its
state as they are. A property that is not writable is rejected with
400 naming it.
The rules of a segment. The root group holds conditions and groups;
a group holds conditions only, so groups nest one level deep. A
definition has at most 50 conditions in all, and at most 5 of them
are campaign, any_campaign or campaign_count conditions. An
unknown key, or a schema_version other than 1, is refused. A
refused definition is answered with 400 and a message that names each
problem by its path, such as conditions[3].value.
The contacts that match the rules, whatever their consent. A
campaign reaches only those of them who may get marketing email;
Get Segment counts them as marketable_count.
When the members were last checked against the whole account. Null until the first build ends.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"AhaSend","description":"AhaSend is a European transactional email service for developers: send through a REST API, SMTP relay, CLI or the official Node.js and Go SDKs, with data stored in the EU and 1,000 free emails per month.","colors":{"primary":"#066fd1","light":"#F8FAFC","dark":"#0F172A"},"logo":{"light":"https://mintcdn.com/ahasend/F35Ozd-1GsftDpcH/logo.png?fit=max\u0026auto=format\u0026n=F35Ozd-1GsftDpcH\u0026q=85\u0026s=ca1d4c27f7c2811598e65cb25a21323c","dark":"https://mintcdn.com/ahasend/F35Ozd-1GsftDpcH/logo-dark.png?fit=max\u0026auto=format\u0026n=F35Ozd-1GsftDpcH\u0026q=85\u0026s=bb6b9068b30f93fd1ea216e2a7c1d137","href":"https://ahasend.com/"},"favicon":"https://mintcdn.com/ahasend/F35Ozd-1GsftDpcH/favicon.png?fit=max\u0026auto=format\u0026n=F35Ozd-1GsftDpcH\u0026q=85\u0026s=ac855c16b6cb74b8c5965d2e7ef3e324","appearance":{"strict":false},"navbar":{"links":[{"href":"https://dash.ahasend.com","label":"Login"}],"primary":{"type":"button","label":"Get Started","href":"https://dash.ahasend.com/user/register"}},"footer":{"socials":{"x":"https://x.com/aha_send","linkedin":"https://www.linkedin.com/company/ahasend","github":"https://github.com/ahasend"},"links":[{"header":"Resources","items":[{"label":"Pricing","href":"https://ahasend.com/pricing"},{"label":"Support","href":"mailto:support@ahasend.com"},{"label":"Status","href":"https://status.ahasend.com"},{"label":"Security","href":"https://ahasend.com/security"}]},{"header":"Company","items":[{"label":"Blog","href":"https://ahasend.com/blog"},{"label":"Feedback Board","href":"https://ahasend.sleekplan.app/"}]},{"header":"Legal","items":[{"label":"Imprint","href":"https://ahasend.com/imprint"},{"label":"Terms of Service","href":"https://ahasend.com/terms"},{"label":"Privacy Policy","href":"https://ahasend.com/privacy"},{"label":"Data Processing Agreement","href":"https://ahasend.com/dpa"}]}]},"seo":{"metatags":{"canonical":"https://ahasend.com/docs","twitter:site":"@aha_send"},"organization":{"name":"AhaSend","legalName":"AhaSend B.V.","url":"https://ahasend.com","sameAs":["https://x.com/aha_send","https://www.linkedin.com/company/ahasend","https://github.com/ahasend"]}},"integrations":{"telemetry":{"enabled":true},"cookies":{"key":"cookieConsent","value":"true"}},"errors":{"404":{"redirect":true}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/ahasend/Gpf8BnLpzpIKQ4dU/images/social-background.svg?fit=max\u0026auto=format\u0026n=Gpf8BnLpzpIKQ4dU\u0026q=85\u0026s=df32e1edef517352b8437c75feecbf6e"},"markdown":{"instructions":["AhaSend stores all message data in the EU. See /facts.","The API base URL is https://api.ahasend.com. Send the API key in the Authorization: Bearer header. See /api-reference/authentication.","Use send.ahasend.com for SMTP. Ports 25, 587 and 2525 use STARTTLS. Port 465 is not supported. See /smtp.","For send-only integrations, create an API Key v2 under Credentials → Add and scope it to messages:send:{your-domain}. See /send-api/credentials and /api-reference/scopes."]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ahasend","hasAudioNarration":false,"actualSubdomain":"ahasend","customDomains":["ahasend.com"],"gitSource":{"type":"github","owner":"ahasend","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adfc319e83fbbb268c93e4e","collectionId":"0d176591-a964-41df-9533-235282892afa","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adfc319e83fbbb268c93e4e"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6adfc319e83fbbb268c93e4e","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API Reference","count":148},{"language":"default","tag":"API reference","count":114},{"language":"default","tag":"Documentation","count":68},{"language":"default","tag":"Guides","count":52},{"language":"default","tag":"Integrations","count":41},{"language":"default","tag":"Webhooks","count":29},{"language":"default","tag":"CLI","count":25},{"language":"default","tag":"Commands","count":15},{"language":"default","tag":"Domain Authentication","count":13},{"language":"default","tag":"Campaigns","count":12}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"privacy":{"consentBanner":{"enabled":false}},"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#content-container table{display:table}#content-container table thead th{text-align:left}"},{"filePath":"roadmap.css","content":".rm{display:flex;flex-direction:column;gap:2.5rem;margin-top:1.5rem}.rm-head{display:flex;align-items:center;gap:.65rem;margin-bottom:1rem}.rm-badge{display:inline-flex;align-items:center;margin:0;border:0;font-size:.78rem;font-weight:600;letter-spacing:.02em;padding:.28rem .75rem;border-radius:999px;line-height:1}.rm-badge.is-active{background:#fdebd0;color:#854f0b}.rm-badge.is-planned{background:#e6f1fb;color:#0c447c}.rm-badge.is-shipped{background:#e1f5ee;color:#0f6e56}.rm-list{display:flex;flex-direction:column;gap:.65rem}.rm-card{display:flex;gap:.9rem;padding:.9rem 1.05rem;background:#fff;border:1px solid #e5e7eb;border-radius:.7rem;transition:transform .15s ease,box-shadow .15s ease}.rm-card:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(0,0,0,.06)}.rm-accent{flex:0 0 3px;border-radius:2px}.rm-card.is-active .rm-accent{background:#ba7517}.rm-card.is-planned .rm-accent{background:#378add}.rm-card.is-shipped .rm-accent{background:#1d9e75}.rm-card.is-sub{margin-left:2rem;position:relative}.rm-card p,.rm-card.is-sub .rm-title{font-size:.9rem}.rm-card.is-sub::after,.rm-card.is-sub::before{content:\"\";position:absolute;left:-1.15rem;pointer-events:none}.rm-card.is-sub::before{top:-.65rem;height:calc(100% + .65rem);border-left:1.5px solid #d1d5db}.rm-card.is-sub::after{top:50%;width:.85rem;border-top:1.5px solid #d1d5db}.rm-card .rm-title{margin:0 0 .2rem;font-size:.97rem;font-weight:600;line-height:1.35;color:#111827}.rm-card p{margin:0;line-height:1.55;color:#4b5563}.rm-date,.rm-tag{display:inline-block}.rm-date{margin-top:.5rem;font-size:.78rem;font-weight:600;color:#0f6e56}.rm-tag{margin-left:.5rem;font-size:.66rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:.16rem .5rem;border-radius:999px;vertical-align:middle;line-height:1.4;color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.15)}.rm-tag.is-new{background:#6d28d9}.rm-tag.is-product{background:#be123c}.rm-tag.is-improvement{background:#0e7490}.rm-tag.is-early{background:#1d4ed8}.rm-tag.is-bugfix{background:#c2410c}.dark .rm-card{background:rgba(255,255,255,.025);border-color:rgba(255,255,255,.09)}.dark .rm-card p{color:#9ca3af}.dark .rm-badge.is-active{background:rgba(186,117,23,.18);color:#fac074}.dark .rm-badge.is-planned{background:rgba(55,138,221,.18);color:#85b7eb}.dark .rm-badge.is-shipped{background:rgba(29,158,117,.18);color:#5dcaa5}.dark .rm-date{color:#5dcaa5}.dark .rm-card.is-sub::after,.dark .rm-card.is-sub::before{border-color:rgba(255,255,255,.18)}.rm-note{margin-top:2.5rem;font-size:.85rem;color:#6b7280}.dark .rm-note{color:#9ca3af}.dark .rm-card .rm-title{color:#e7e9ee}.rm-jump{margin:-.5rem 0 0;font-size:.88rem}.rm-jump a{color:#2296ff;text-decoration:none;font-weight:500}.rm-jump a:hover{text-decoration:underline}.rm-badge[id]{scroll-margin-top:6rem}"}],"page":{"pagePath":"api-reference/segments/update-segment","slug":"/api-reference/segments/update-segment","pageMetadata":{"title":"Update a Segment via the API","sidebarTitle":"Update Segment","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/segments/{segment_id}","description":"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.","href":"/api-reference/segments/update-segment"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading}=_components;if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The AhaSend API changes one segment. Access requires `,_jsx(_components.code,{children:`segments:write`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Fields:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A field that you leave out or send as `,_jsx(_components.code,{children:`null`}),` does not change.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`name`}),` and `,_jsx(_components.code,{children:`description`}),` follow the same rules as in `,_jsx(_components.a,{href:`/api-reference/segments/create-segment`,children:`Create Segment`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`definition`}),` replaces the stored rules as a whole. See `,_jsx(_components.a,{href:`/api-reference/segments/overview#definitions`,children:`Definitions`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`timezone`}),` is an IANA time zone. An empty string stores `,_jsx(_components.code,{children:`UTC`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`A field that you cannot write is refused with `,_jsx(_components.code,{children:`400`}),`, and the message names it.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Members:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A change of `,_jsx(_components.code,{children:`definition`}),` or `,_jsx(_components.code,{children:`timezone`}),` builds the members again. The segment is `,_jsx(_components.code,{children:`building`}),` until that ends, and a campaign that uses it cannot be sent until then.`]}),`\n`,_jsxs(_components.li,{children:[`A change of only `,_jsx(_components.code,{children:`name`}),` or `,_jsx(_components.code,{children:`description`}),` keeps the members and the state.`]}),`\n`,_jsxs(_components.li,{children:[`Any update of a `,_jsx(_components.code,{children:`failed`}),` segment, `,_jsx(_components.code,{children:`{}`}),` included, builds it again.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/api-reference/segments/overview#states`,children:`States`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`A segment that is being changed, for example by an update of its members, answers `,_jsx(_components.code,{children:`409`}),` with `,_jsx(_components.code,{children:`The segment is being updated. Try again in a minute.`}),` Nothing was changed, so send the request again later.`]}),`\n`,_jsx(Heading,{level:`2`,id:`related-guides`,children:`Related Guides`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/api-reference/authentication`,children:`API authentication`}),`, `,_jsx(_components.a,{href:`/api-reference/scopes`,children:`Permission scopes`}),`, `,_jsx(_components.a,{href:`/api-reference/segments/get-segment`,children:`Get Segment`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/api-reference/segments/overview`,children:`Segments API overview`}),`, `,_jsx(_components.a,{href:`/api-reference/errors`,children:`API errors`}),`, `,_jsx(_components.a,{href:`/api-reference/rate-limits`,children:`API rate limits`}),`.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Update a Segment via the API","sidebarTitle":"Update Segment","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/segments/{segment_id}","description":"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.","href":"/api-reference/segments/update-segment"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Related Guides","slug":"related-guides","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/ahasend/1d760da0535d9f7c/ahasend-gtm.js"],"openApiReferenceData":{"operation":{"summary":"Update Segment","description":"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.","operationId":"updateSegment","tags":["Segments"],"parameters":["0fbebcf6-e309-424c-9c1e-43474a8a706e","a3bf2327-6b02-4127-adc7-204d8f03e9b3"],"security":["be04deac-2ec5-48f5-a698-b7e43cb4b9d5"],"requestBody":"4e2af395-c379-4e8b-8304-47c0c86c9bb6","responses":{"200":"0e49532a-4ae1-4943-8309-f68dc88cbf13","400":"aff697cc-28e3-4883-8393-00327f8d54a7","401":"9ef26a9d-be19-4b3d-8407-352655c345dd","403":"c580cfff-cc17-42b4-98a8-2ec2660a5048","404":"b35fb903-0925-4368-9cbc-50234557d0fc","409":"b1507df1-735e-4b57-86d7-a2bc770398ef","429":"c3818d85-d2a8-48e3-930b-8931a0f8f978","500":"04a75a2d-22b6-4031-bd0a-df1305441757"},"x-code-samples":[{"lang":"go","label":"AhaSend Go SDK","source":"package main\n\nimport (\n \"context\"\n \"fmt\"\n \"log\"\n \"os\"\n\n \"github.com/AhaSend/ahasend-go\"\n \"github.com/AhaSend/ahasend-go/api\"\n \"github.com/AhaSend/ahasend-go/models/requests\"\n \"github.com/google/uuid\"\n)\n\nfunc main() {\n client := api.NewAPIClient(api.WithAPIKey(os.Getenv(\"AHASEND_API_KEY\")))\n accountID := uuid.MustParse(os.Getenv(\"AHASEND_ACCOUNT_ID\"))\n ctx := context.Background()\n\n segmentID := uuid.MustParse(\"11111111-1111-4111-8111-111111111111\")\n\n // Only the fields you set change. A new name or description keeps the\n // members; a new definition or time zone builds them again.\n response, _, err := client.SegmentsAPI.UpdateSegment(ctx, accountID, segmentID, requests.UpdateSegmentRequest{\n Name: ahasend.String(\"Engaged customers\"),\n Description: ahasend.String(\"Opened a campaign recently\"),\n })\n if err != nil {\n log.Fatalf(\"Error updating segment: %v\", err)\n }\n fmt.Printf(\"Updated segment %s (%s)\\n\", response.Name, response.State)\n}\n"},{"lang":"javascript","label":"Node.js 22+ (AhaSend SDK)","source":"import { AhaSendClient } from \"@ahasend/sdk\";\n\nconst client = AhaSendClient.fromEnv();\nconst segmentId = \"00000000-0000-4000-8000-000000000015\";\n// A changed definition or time zone builds the members again; a new name does not.\nconst segment = await client.segments.update(segmentId, { name: \"Engaged German customers\" });\nconsole.log(\"Segment updated.\", { id: segment.id, name: segment.name });\n"}],"method":"put","type":"path","servers":["b5fdc511-65a3-4ae3-b4c1-31f6415bb096"],"path":"/v2/accounts/{account_id}/segments/{segment_id}","baseUrlOptions":["https://api.ahasend.com"],"title":"Update Segment","codeSamples":[{"label":"AhaSend Go SDK","lang":"go","source":"package main\n\nimport (\n \"context\"\n \"fmt\"\n \"log\"\n \"os\"\n\n \"github.com/AhaSend/ahasend-go\"\n \"github.com/AhaSend/ahasend-go/api\"\n \"github.com/AhaSend/ahasend-go/models/requests\"\n \"github.com/google/uuid\"\n)\n\nfunc main() {\n client := api.NewAPIClient(api.WithAPIKey(os.Getenv(\"AHASEND_API_KEY\")))\n accountID := uuid.MustParse(os.Getenv(\"AHASEND_ACCOUNT_ID\"))\n ctx := context.Background()\n\n segmentID := uuid.MustParse(\"11111111-1111-4111-8111-111111111111\")\n\n // Only the fields you set change. A new name or description keeps the\n // members; a new definition or time zone builds them again.\n response, _, err := client.SegmentsAPI.UpdateSegment(ctx, accountID, segmentID, requests.UpdateSegmentRequest{\n Name: ahasend.String(\"Engaged customers\"),\n Description: ahasend.String(\"Opened a campaign recently\"),\n })\n if err != nil {\n log.Fatalf(\"Error updating segment: %v\", err)\n }\n fmt.Printf(\"Updated segment %s (%s)\\n\", response.Name, response.State)\n}\n"},{"label":"Node.js 22+ (AhaSend SDK)","lang":"javascript","source":"import { AhaSendClient } from \"@ahasend/sdk\";\n\nconst client = AhaSendClient.fromEnv();\nconst segmentId = \"00000000-0000-4000-8000-000000000015\";\n// A changed definition or time zone builds the members again; a new name does not.\nconst segment = await client.segments.update(segmentId, { name: \"Engaged German customers\" });\nconsole.log(\"Segment updated.\", { id: segment.id, name: segment.name });\n"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"0fbebcf6-e309-424c-9c1e-43474a8a706e":{"name":"account_id","in":"path","required":true,"description":"Account ID","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Account ID","uniqueKey":"","typeLabel":"string\u003cuuid>"}},"a3bf2327-6b02-4127-adc7-204d8f03e9b3":{"name":"segment_id","in":"path","required":true,"description":"Segment ID","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Segment ID","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"A partial segment update. An omitted or null property leaves the\nstored value unchanged. A change of `definition` or `timezone` builds\nthe segment's members again, and it is `building` until that ends; a\nchange of only `name` or `description` leaves its members and its\nstate as they are. A property that is not writable is rejected with\n400 naming it.\n","properties":{"name":{"oneOf":[{"type":"string","minLength":1,"maxLength":255,"description":"Trimmed and bounded exactly as on create.","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"maxLength":255,"description":"Trimmed and bounded exactly as on create.","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","maxLength":1000,"description":"Trimmed and bounded exactly as on create.","uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":1000,"description":"Trimmed and bounded exactly as on create.","uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"definition":{"oneOf":[{"type":"object","description":"The new rules, which replace the stored ones as a whole.","required":["schema_version","match","conditions"],"example":{"schema_version":1,"match":"all","conditions":[{"field":"attributes.country","op":"equal","value":"DE"},{"field":"created_at","op":"after","value":"30 days ago"},{"field":"list","op":"in","value":"6f1c2a52-8f2e-4d8e-9a3b-1c2d3e4f5a6b"},{"match":"any","conditions":[{"field":"campaign","op":"opened","value":"9a2e7c41-0b3d-4f5e-8a6b-7c8d9e0f1a2b"},{"field":"any_campaign","op":"clicked","value":"14 days ago"},{"field":"campaign_count","op":"opened_at_least","value":{"count":3,"since":"90 days ago"}}]}]},"properties":{"schema_version":{"type":"integer","enum":[1],"description":"The version of this format","isRequired":true,"uniqueKey":"definition.oneOf.0.schema_version","typeLabel":"enum\u003cinteger>"},"match":{"type":"string","enum":["all","any"],"description":"Whether a contact must match all of the conditions or any of them","isRequired":true,"uniqueKey":"definition.oneOf.0.match","typeLabel":"enum\u003cstring>"},"conditions":{"type":"array","minItems":1,"items":{"oneOf":[{"type":"object","description":"One rule. `field` names what it reads:\n\n- `email`, `first_name`, `last_name`, `created_at` (when the contact\n was created), or `attributes.\u003ckey>` for a contact field of the\n account. The operators and values are those of the field's type:\n text fields take `equal`, `not_equal`, `contains`, `not_contains`,\n `begins_with`, `not_begins_with`, `ends_with`, `not_ends_with`,\n `is_empty` and `is_not_empty`; number fields `equal`, `not_equal`,\n `less`, `less_or_equal`, `greater` and `greater_or_equal`; date and\n timestamp fields and `created_at` `equal`, `not_equal`, `before`,\n `before_or_on`, `after` and `after_or_on`, with a date such as\n `2024-06-15` or a relative time such as `today` or `30 days ago`,\n and timestamp fields and `created_at` also a time such as\n `2 hours from now`; boolean fields `is_true` and `is_false`. Custom\n date, number, timestamp and boolean fields also take `is_null` and\n `is_not_null`; `email`, `first_name`, `last_name`, `created_at` and\n custom text fields do not. A negated operator also matches a\n contact that has no value for the field.\n- Custom date fields also take two rules that read only the month\n and day, so the year does not matter: `month_is` with a month\n from 1 (January) to 12 (December), and `anniversary_within` with\n a number of days N from 0 to 365, which matches when the month\n and day fall on today or one of the next N days in the segment's\n time zone (`0` is today only). A 29 February date counts as\n 28 February in a year without one. Both take a whole number as\n `value`. Both read a stored value that starts with a `YYYY-MM-DD`\n date, as the API and imports store it; any other value never\n matches. The members of an `anniversary_within` segment move to\n the new day shortly after midnight in its time zone, usually\n within about half an hour.\n- `list` with `in` or `not_in` and a list ID. `in` means a\n `confirmed` membership of that list.\n- `campaign` with `received`, `not_received`, `opened`,\n `not_opened`, `clicked` or `not_clicked` and a campaign ID.\n `received` means the campaign was delivered to the contact.\n `not_opened` and `not_clicked` match only contacts who received\n the campaign.\n- `any_campaign` with `received`, `opened`, `clicked`, `not_opened`\n or `not_clicked` and a relative time such as `14 days ago`:\n `received`, `opened` and `clicked` match at least one such event\n since then; `not_opened` and `not_clicked` match a contact who\n received a campaign since then and opened (clicked) none since\n then.\n- `campaign_count` with `received_at_least`, `received_fewer_than`,\n `opened_at_least`, `opened_fewer_than`, `clicked_at_least` or\n `clicked_fewer_than` and a `SegmentCampaignCount` object such as\n `{\"count\": 3, \"since\": \"90 days ago\"}`: the number of campaigns\n sent since then that the contact received, opened or clicked. A\n campaign counts from the time it started sending, whenever the\n contact received, opened or clicked it, and several opens or clicks\n of one campaign count once. `received_fewer_than`,\n `opened_fewer_than` and `clicked_fewer_than` match only a contact\n who received at least one campaign sent since then.\n\nOpens and clicks by bots do not count. A list, campaign or contact\nfield that a segment uses cannot be deleted until no segment uses it.\n","required":["field","op"],"properties":{"field":{"type":"string","description":"`email`, `first_name`, `last_name`, `created_at`, `attributes.\u003ckey>`, `list`, `campaign`, `any_campaign` or `campaign_count`","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.field","typeLabel":"string"},"op":{"type":"string","enum":["equal","not_equal","contains","not_contains","begins_with","not_begins_with","ends_with","not_ends_with","is_empty","is_not_empty","less","less_or_equal","greater","greater_or_equal","before","before_or_on","after","after_or_on","is_null","is_not_null","is_true","is_false","month_is","anniversary_within","in","not_in","received","not_received","opened","not_opened","clicked","not_clicked","received_at_least","received_fewer_than","opened_at_least","opened_fewer_than","clicked_at_least","clicked_fewer_than"],"description":"The operator, one that applies to `field`","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.op","typeLabel":"enum\u003cstring>"},"value":{"oneOf":[{"type":"string","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"number","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"number"},{"type":"boolean","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"boolean"},{"type":"null","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"null"},{"type":"object","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","required":["count","since"],"properties":{"count":{"type":"integer","minimum":1,"maximum":1000,"description":"The number of campaigns, a whole number from 1 to 1000, or from 2 for `received_fewer_than`.","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.4.count","typeLabel":"integer"},"since":{"type":"string","description":"When the window starts: a relative time of the form `M days\nago`, `M weeks ago`, `M months ago` or `M years ago`, with M from\n1 to 365 days, 52 weeks, 12 months or 1 year. It starts at the\nbeginning of its day in the segment's time zone.\n","example":"90 days ago","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.4.since","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.4","typeLabel":"object"}],"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0.value","typeLabel":"string | number | boolean | null | object"}},"additionalProperties":false,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A nested group of conditions. A group cannot hold another group.","required":["match","conditions"],"properties":{"match":{"type":"string","enum":["all","any"],"description":"Whether a contact must match all of the group's conditions or any of them","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.match","typeLabel":"enum\u003cstring>"},"conditions":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"description":"One rule. `field` names what it reads:\n\n- `email`, `first_name`, `last_name`, `created_at` (when the contact\n was created), or `attributes.\u003ckey>` for a contact field of the\n account. The operators and values are those of the field's type:\n text fields take `equal`, `not_equal`, `contains`, `not_contains`,\n `begins_with`, `not_begins_with`, `ends_with`, `not_ends_with`,\n `is_empty` and `is_not_empty`; number fields `equal`, `not_equal`,\n `less`, `less_or_equal`, `greater` and `greater_or_equal`; date and\n timestamp fields and `created_at` `equal`, `not_equal`, `before`,\n `before_or_on`, `after` and `after_or_on`, with a date such as\n `2024-06-15` or a relative time such as `today` or `30 days ago`,\n and timestamp fields and `created_at` also a time such as\n `2 hours from now`; boolean fields `is_true` and `is_false`. Custom\n date, number, timestamp and boolean fields also take `is_null` and\n `is_not_null`; `email`, `first_name`, `last_name`, `created_at` and\n custom text fields do not. A negated operator also matches a\n contact that has no value for the field.\n- Custom date fields also take two rules that read only the month\n and day, so the year does not matter: `month_is` with a month\n from 1 (January) to 12 (December), and `anniversary_within` with\n a number of days N from 0 to 365, which matches when the month\n and day fall on today or one of the next N days in the segment's\n time zone (`0` is today only). A 29 February date counts as\n 28 February in a year without one. Both take a whole number as\n `value`. Both read a stored value that starts with a `YYYY-MM-DD`\n date, as the API and imports store it; any other value never\n matches. The members of an `anniversary_within` segment move to\n the new day shortly after midnight in its time zone, usually\n within about half an hour.\n- `list` with `in` or `not_in` and a list ID. `in` means a\n `confirmed` membership of that list.\n- `campaign` with `received`, `not_received`, `opened`,\n `not_opened`, `clicked` or `not_clicked` and a campaign ID.\n `received` means the campaign was delivered to the contact.\n `not_opened` and `not_clicked` match only contacts who received\n the campaign.\n- `any_campaign` with `received`, `opened`, `clicked`, `not_opened`\n or `not_clicked` and a relative time such as `14 days ago`:\n `received`, `opened` and `clicked` match at least one such event\n since then; `not_opened` and `not_clicked` match a contact who\n received a campaign since then and opened (clicked) none since\n then.\n- `campaign_count` with `received_at_least`, `received_fewer_than`,\n `opened_at_least`, `opened_fewer_than`, `clicked_at_least` or\n `clicked_fewer_than` and a `SegmentCampaignCount` object such as\n `{\"count\": 3, \"since\": \"90 days ago\"}`: the number of campaigns\n sent since then that the contact received, opened or clicked. A\n campaign counts from the time it started sending, whenever the\n contact received, opened or clicked it, and several opens or clicks\n of one campaign count once. `received_fewer_than`,\n `opened_fewer_than` and `clicked_fewer_than` match only a contact\n who received at least one campaign sent since then.\n\nOpens and clicks by bots do not count. A list, campaign or contact\nfield that a segment uses cannot be deleted until no segment uses it.\n","required":["field","op"],"properties":{"field":{"type":"string","description":"`email`, `first_name`, `last_name`, `created_at`, `attributes.\u003ckey>`, `list`, `campaign`, `any_campaign` or `campaign_count`","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].field","typeLabel":"string"},"op":{"type":"string","enum":["equal","not_equal","contains","not_contains","begins_with","not_begins_with","ends_with","not_ends_with","is_empty","is_not_empty","less","less_or_equal","greater","greater_or_equal","before","before_or_on","after","after_or_on","is_null","is_not_null","is_true","is_false","month_is","anniversary_within","in","not_in","received","not_received","opened","not_opened","clicked","not_clicked","received_at_least","received_fewer_than","opened_at_least","opened_fewer_than","clicked_at_least","clicked_fewer_than"],"description":"The operator, one that applies to `field`","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].op","typeLabel":"enum\u003cstring>"},"value":{"oneOf":[{"type":"string","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"number","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.1","typeLabel":"number"},{"type":"boolean","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.2","typeLabel":"boolean"},{"type":"null","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.3","typeLabel":"null"},{"type":"object","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","required":["count","since"],"properties":{"count":{"type":"integer","minimum":1,"maximum":1000,"description":"The number of campaigns, a whole number from 1 to 1000, or from 2 for `received_fewer_than`.","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.4.count","typeLabel":"integer"},"since":{"type":"string","description":"When the window starts: a relative time of the form `M days\nago`, `M weeks ago`, `M months ago` or `M years ago`, with M from\n1 to 365 days, 52 weeks, 12 months or 1 year. It starts at the\nbeginning of its day in the segment's time zone.\n","example":"90 days ago","isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.4.since","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.4","typeLabel":"object"}],"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value","typeLabel":"string | number | boolean | null | object"}},"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1.conditions","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"definition.oneOf.0.conditions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"definition.oneOf.0.conditions","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"definition.oneOf.0","typeLabel":"object"},{"type":"null","description":"The new rules, which replace the stored ones as a whole.","uniqueKey":"definition.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition","typeLabel":"object | null"},"timezone":{"oneOf":[{"type":"string","description":"The IANA time zone, as on create. Null and omission keep the stored zone; an empty string stores `UTC`.","uniqueKey":"timezone.oneOf.0","typeLabel":"string"},{"type":"null","description":"The IANA time zone, as on create. Null and omission keep the stored zone; an empty string stores `UTC`.","uniqueKey":"timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"timezone","typeLabel":"string | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","description":"\u003cstring>","definition":{"schema_version":1,"match":"all","conditions":[{"field":"attributes.country","op":"equal","value":"DE"},{"field":"created_at","op":"after","value":"30 days ago"},{"field":"list","op":"in","value":"6f1c2a52-8f2e-4d8e-9a3b-1c2d3e4f5a6b"},{"match":"any","conditions":[{"field":"campaign","op":"opened","value":"9a2e7c41-0b3d-4f5e-8a6b-7c8d9e0f1a2b"},{"field":"any_campaign","op":"clicked","value":"14 days ago"},{"field":"campaign_count","op":"opened_at_least","value":{"count":3,"since":"90 days ago"}}]}]},"timezone":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"0e49532a-4ae1-4943-8309-f68dc88cbf13":{"description":"Segment updated","content":{"application/json":{"schema":{"type":"object","description":"A saved set of rules over the account's contacts, and the contacts\nthat match them.\n","required":["object","id","created_at","updated_at","name","description","definition","timezone","state","failure_reason","member_count","last_evaluated_at"],"properties":{"object":{"type":"string","enum":["segment"],"description":"Object type identifier","isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"id":{"type":"string","format":"uuid","description":"Unique identifier for the segment","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"created_at":{"type":"string","format":"date-time","description":"When the segment was created","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"When the segment was last saved","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"name":{"type":"string","description":"Segment name; names are not unique within an account","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"description":{"type":"string","description":"Free-text description; empty when none was given","isRequired":true,"uniqueKey":"description","typeLabel":"string"},"definition":{"type":"object","additionalProperties":false,"description":"The rules of a segment. The root group holds conditions and groups;\na group holds conditions only, so groups nest one level deep. A\ndefinition has at most 50 conditions in all, and at most 5 of them\nare `campaign`, `any_campaign` or `campaign_count` conditions. An\nunknown key, or a `schema_version` other than 1, is refused. A\nrefused definition is answered with 400 and a message that names each\nproblem by its path, such as `conditions[3].value`.\n","required":["schema_version","match","conditions"],"properties":{"schema_version":{"type":"integer","enum":[1],"description":"The version of this format","isRequired":true,"uniqueKey":"definition.schema_version","typeLabel":"enum\u003cinteger>"},"match":{"type":"string","enum":["all","any"],"description":"Whether a contact must match all of the conditions or any of them","isRequired":true,"uniqueKey":"definition.match","typeLabel":"enum\u003cstring>"},"conditions":{"type":"array","minItems":1,"items":{"oneOf":[{"type":"object","description":"One rule. `field` names what it reads:\n\n- `email`, `first_name`, `last_name`, `created_at` (when the contact\n was created), or `attributes.\u003ckey>` for a contact field of the\n account. The operators and values are those of the field's type:\n text fields take `equal`, `not_equal`, `contains`, `not_contains`,\n `begins_with`, `not_begins_with`, `ends_with`, `not_ends_with`,\n `is_empty` and `is_not_empty`; number fields `equal`, `not_equal`,\n `less`, `less_or_equal`, `greater` and `greater_or_equal`; date and\n timestamp fields and `created_at` `equal`, `not_equal`, `before`,\n `before_or_on`, `after` and `after_or_on`, with a date such as\n `2024-06-15` or a relative time such as `today` or `30 days ago`,\n and timestamp fields and `created_at` also a time such as\n `2 hours from now`; boolean fields `is_true` and `is_false`. Custom\n date, number, timestamp and boolean fields also take `is_null` and\n `is_not_null`; `email`, `first_name`, `last_name`, `created_at` and\n custom text fields do not. A negated operator also matches a\n contact that has no value for the field.\n- Custom date fields also take two rules that read only the month\n and day, so the year does not matter: `month_is` with a month\n from 1 (January) to 12 (December), and `anniversary_within` with\n a number of days N from 0 to 365, which matches when the month\n and day fall on today or one of the next N days in the segment's\n time zone (`0` is today only). A 29 February date counts as\n 28 February in a year without one. Both take a whole number as\n `value`. Both read a stored value that starts with a `YYYY-MM-DD`\n date, as the API and imports store it; any other value never\n matches. The members of an `anniversary_within` segment move to\n the new day shortly after midnight in its time zone, usually\n within about half an hour.\n- `list` with `in` or `not_in` and a list ID. `in` means a\n `confirmed` membership of that list.\n- `campaign` with `received`, `not_received`, `opened`,\n `not_opened`, `clicked` or `not_clicked` and a campaign ID.\n `received` means the campaign was delivered to the contact.\n `not_opened` and `not_clicked` match only contacts who received\n the campaign.\n- `any_campaign` with `received`, `opened`, `clicked`, `not_opened`\n or `not_clicked` and a relative time such as `14 days ago`:\n `received`, `opened` and `clicked` match at least one such event\n since then; `not_opened` and `not_clicked` match a contact who\n received a campaign since then and opened (clicked) none since\n then.\n- `campaign_count` with `received_at_least`, `received_fewer_than`,\n `opened_at_least`, `opened_fewer_than`, `clicked_at_least` or\n `clicked_fewer_than` and a `SegmentCampaignCount` object such as\n `{\"count\": 3, \"since\": \"90 days ago\"}`: the number of campaigns\n sent since then that the contact received, opened or clicked. A\n campaign counts from the time it started sending, whenever the\n contact received, opened or clicked it, and several opens or clicks\n of one campaign count once. `received_fewer_than`,\n `opened_fewer_than` and `clicked_fewer_than` match only a contact\n who received at least one campaign sent since then.\n\nOpens and clicks by bots do not count. A list, campaign or contact\nfield that a segment uses cannot be deleted until no segment uses it.\n","required":["field","op"],"properties":{"field":{"type":"string","description":"`email`, `first_name`, `last_name`, `created_at`, `attributes.\u003ckey>`, `list`, `campaign`, `any_campaign` or `campaign_count`","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.field","typeLabel":"string"},"op":{"type":"string","enum":["equal","not_equal","contains","not_contains","begins_with","not_begins_with","ends_with","not_ends_with","is_empty","is_not_empty","less","less_or_equal","greater","greater_or_equal","before","before_or_on","after","after_or_on","is_null","is_not_null","is_true","is_false","month_is","anniversary_within","in","not_in","received","not_received","opened","not_opened","clicked","not_clicked","received_at_least","received_fewer_than","opened_at_least","opened_fewer_than","clicked_at_least","clicked_fewer_than"],"description":"The operator, one that applies to `field`","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.op","typeLabel":"enum\u003cstring>"},"value":{"oneOf":[{"type":"string","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"number","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"number"},{"type":"boolean","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"boolean"},{"type":"null","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"null"},{"type":"object","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","required":["count","since"],"properties":{"count":{"type":"integer","minimum":1,"maximum":1000,"description":"The number of campaigns, a whole number from 1 to 1000, or from 2 for `received_fewer_than`.","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.value.oneOf.4.count","typeLabel":"integer"},"since":{"type":"string","description":"When the window starts: a relative time of the form `M days\nago`, `M weeks ago`, `M months ago` or `M years ago`, with M from\n1 to 365 days, 52 weeks, 12 months or 1 year. It starts at the\nbeginning of its day in the segment's time zone.\n","example":"90 days ago","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.value.oneOf.4.since","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.value.oneOf.4","typeLabel":"object"}],"uniqueKey":"definition.conditions.items.[INDEX].oneOf.0.value","typeLabel":"string | number | boolean | null | object"}},"additionalProperties":false,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A nested group of conditions. A group cannot hold another group.","required":["match","conditions"],"properties":{"match":{"type":"string","enum":["all","any"],"description":"Whether a contact must match all of the group's conditions or any of them","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.match","typeLabel":"enum\u003cstring>"},"conditions":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"description":"One rule. `field` names what it reads:\n\n- `email`, `first_name`, `last_name`, `created_at` (when the contact\n was created), or `attributes.\u003ckey>` for a contact field of the\n account. The operators and values are those of the field's type:\n text fields take `equal`, `not_equal`, `contains`, `not_contains`,\n `begins_with`, `not_begins_with`, `ends_with`, `not_ends_with`,\n `is_empty` and `is_not_empty`; number fields `equal`, `not_equal`,\n `less`, `less_or_equal`, `greater` and `greater_or_equal`; date and\n timestamp fields and `created_at` `equal`, `not_equal`, `before`,\n `before_or_on`, `after` and `after_or_on`, with a date such as\n `2024-06-15` or a relative time such as `today` or `30 days ago`,\n and timestamp fields and `created_at` also a time such as\n `2 hours from now`; boolean fields `is_true` and `is_false`. Custom\n date, number, timestamp and boolean fields also take `is_null` and\n `is_not_null`; `email`, `first_name`, `last_name`, `created_at` and\n custom text fields do not. A negated operator also matches a\n contact that has no value for the field.\n- Custom date fields also take two rules that read only the month\n and day, so the year does not matter: `month_is` with a month\n from 1 (January) to 12 (December), and `anniversary_within` with\n a number of days N from 0 to 365, which matches when the month\n and day fall on today or one of the next N days in the segment's\n time zone (`0` is today only). A 29 February date counts as\n 28 February in a year without one. Both take a whole number as\n `value`. Both read a stored value that starts with a `YYYY-MM-DD`\n date, as the API and imports store it; any other value never\n matches. The members of an `anniversary_within` segment move to\n the new day shortly after midnight in its time zone, usually\n within about half an hour.\n- `list` with `in` or `not_in` and a list ID. `in` means a\n `confirmed` membership of that list.\n- `campaign` with `received`, `not_received`, `opened`,\n `not_opened`, `clicked` or `not_clicked` and a campaign ID.\n `received` means the campaign was delivered to the contact.\n `not_opened` and `not_clicked` match only contacts who received\n the campaign.\n- `any_campaign` with `received`, `opened`, `clicked`, `not_opened`\n or `not_clicked` and a relative time such as `14 days ago`:\n `received`, `opened` and `clicked` match at least one such event\n since then; `not_opened` and `not_clicked` match a contact who\n received a campaign since then and opened (clicked) none since\n then.\n- `campaign_count` with `received_at_least`, `received_fewer_than`,\n `opened_at_least`, `opened_fewer_than`, `clicked_at_least` or\n `clicked_fewer_than` and a `SegmentCampaignCount` object such as\n `{\"count\": 3, \"since\": \"90 days ago\"}`: the number of campaigns\n sent since then that the contact received, opened or clicked. A\n campaign counts from the time it started sending, whenever the\n contact received, opened or clicked it, and several opens or clicks\n of one campaign count once. `received_fewer_than`,\n `opened_fewer_than` and `clicked_fewer_than` match only a contact\n who received at least one campaign sent since then.\n\nOpens and clicks by bots do not count. A list, campaign or contact\nfield that a segment uses cannot be deleted until no segment uses it.\n","required":["field","op"],"properties":{"field":{"type":"string","description":"`email`, `first_name`, `last_name`, `created_at`, `attributes.\u003ckey>`, `list`, `campaign`, `any_campaign` or `campaign_count`","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].field","typeLabel":"string"},"op":{"type":"string","enum":["equal","not_equal","contains","not_contains","begins_with","not_begins_with","ends_with","not_ends_with","is_empty","is_not_empty","less","less_or_equal","greater","greater_or_equal","before","before_or_on","after","after_or_on","is_null","is_not_null","is_true","is_false","month_is","anniversary_within","in","not_in","received","not_received","opened","not_opened","clicked","not_clicked","received_at_least","received_fewer_than","opened_at_least","opened_fewer_than","clicked_at_least","clicked_fewer_than"],"description":"The operator, one that applies to `field`","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].op","typeLabel":"enum\u003cstring>"},"value":{"oneOf":[{"type":"string","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"number","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.1","typeLabel":"number"},{"type":"boolean","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.2","typeLabel":"boolean"},{"type":"null","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.3","typeLabel":"null"},{"type":"object","description":"The value the operator compares with. Left out, or null, for an operator that takes none, such as `is_empty`. A month for `month_is` and a number of days for `anniversary_within`, each a whole number. A `SegmentCampaignCount` object for `campaign_count`.","required":["count","since"],"properties":{"count":{"type":"integer","minimum":1,"maximum":1000,"description":"The number of campaigns, a whole number from 1 to 1000, or from 2 for `received_fewer_than`.","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.4.count","typeLabel":"integer"},"since":{"type":"string","description":"When the window starts: a relative time of the form `M days\nago`, `M weeks ago`, `M months ago` or `M years ago`, with M from\n1 to 365 days, 52 weeks, 12 months or 1 year. It starts at the\nbeginning of its day in the segment's time zone.\n","example":"90 days ago","isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.4.since","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value.oneOf.4","typeLabel":"object"}],"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX].value","typeLabel":"string | number | boolean | null | object"}},"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1.conditions","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"definition.conditions.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"definition.conditions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"definition.conditions","typeLabel":"object[]"}},"example":{"schema_version":1,"match":"all","conditions":[{"field":"attributes.country","op":"equal","value":"DE"},{"field":"created_at","op":"after","value":"30 days ago"},{"field":"list","op":"in","value":"6f1c2a52-8f2e-4d8e-9a3b-1c2d3e4f5a6b"},{"match":"any","conditions":[{"field":"campaign","op":"opened","value":"9a2e7c41-0b3d-4f5e-8a6b-7c8d9e0f1a2b"},{"field":"any_campaign","op":"clicked","value":"14 days ago"},{"field":"campaign_count","op":"opened_at_least","value":{"count":3,"since":"90 days ago"}}]}]},"isRequired":true,"uniqueKey":"definition","typeLabel":"object"},"timezone":{"type":"string","description":"The IANA time zone that relative times and days in the definition are read in","isRequired":true,"uniqueKey":"timezone","typeLabel":"string"},"state":{"type":"string","enum":["building","ready","failed"],"description":"- `building`: the members are being found for the current\n definition. A campaign that uses the segment cannot be sent\n until it is `ready`.\n- `ready`: the members follow the current definition.\n- `failed`: the members could not be found; `failure_reason`\n says why. Any update of the segment, `{}` included, builds it\n again.\n","isRequired":true,"uniqueKey":"state","typeLabel":"enum\u003cstring>"},"failure_reason":{"oneOf":[{"type":"string","description":"Why the segment failed. Null unless `state` is `failed`.","isRequired":true,"uniqueKey":"failure_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why the segment failed. Null unless `state` is `failed`.","isRequired":true,"uniqueKey":"failure_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"failure_reason","typeLabel":"string | null"},"member_count":{"type":"integer","minimum":0,"description":"The contacts that match the rules, whatever their consent. A\ncampaign reaches only those of them who may get marketing email;\nGet Segment counts them as `marketable_count`.\n","isRequired":true,"uniqueKey":"member_count","typeLabel":"integer"},"last_evaluated_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the members were last checked against the whole account. Null until the first build ends.","isRequired":true,"uniqueKey":"last_evaluated_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the members were last checked against the whole account. Null until the first build ends.","isRequired":true,"uniqueKey":"last_evaluated_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"last_evaluated_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"segment","id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","name":"\u003cstring>","description":"\u003cstring>","definition":{"schema_version":1,"match":"all","conditions":[{"field":"attributes.country","op":"equal","value":"DE"},{"field":"created_at","op":"after","value":"30 days ago"},{"field":"list","op":"in","value":"6f1c2a52-8f2e-4d8e-9a3b-1c2d3e4f5a6b"},{"match":"any","conditions":[{"field":"campaign","op":"opened","value":"9a2e7c41-0b3d-4f5e-8a6b-7c8d9e0f1a2b"},{"field":"any_campaign","op":"clicked","value":"14 days ago"},{"field":"campaign_count","op":"opened_at_least","value":{"count":3,"since":"90 days ago"}}]}]},"timezone":"\u003cstring>","state":"building","failure_reason":"\u003cstring>","member_count":1,"last_evaluated_at":"2023-11-07T05:31:56Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"aff697cc-28e3-4883-8393-00327f8d54a7":{"description":"Malformed `segment_id`, invalid request body, a property that is\nnot writable, an unknown time zone, or a definition that is\nrefused. The message names every problem of the definition by its\npath.\n","content":{"application/json":{"schema":{"type":"object","description":"Human-readable API error. The server currently sends no stable machine\nerror code. In particular, clients must not parse `message` to\ndistinguish IP-allow-list, scope, ownership, plan, self-lockout,\nsuppression-duplicate, or other errors that share an HTTP status.\n","additionalProperties":false,"required":["message"],"properties":{"message":{"type":"string","description":"Error description","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"example":{"message":"Error message"},"uniqueKey":"","typeLabel":"object"},"example":{"message":"conditions[0].field: the account has no contact field \"city\"; conditions[1].value: must be a list id"},"examples":{"Example":{"title":"Example","value":{"message":"conditions[0].field: the account has no contact field \"city\"; conditions[1].value: must be a list id"}}},"exampleType":"examples"}},"exampleType":"examples"},"9ef26a9d-be19-4b3d-8407-352655c345dd":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","description":"Human-readable API error. The server currently sends no stable machine\nerror code. In particular, clients must not parse `message` to\ndistinguish IP-allow-list, scope, ownership, plan, self-lockout,\nsuppression-duplicate, or other errors that share an HTTP status.\n","additionalProperties":false,"required":["message"],"properties":{"message":{"type":"string","description":"Error description","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"example":{"message":"Error message"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Error message"}}},"exampleType":"generated"}},"exampleType":"generated"},"c580cfff-cc17-42b4-98a8-2ec2660a5048":{"description":"Missing `segments:write` scope","content":{"application/json":{"schema":{"type":"object","description":"Human-readable API error. The server currently sends no stable machine\nerror code. In particular, clients must not parse `message` to\ndistinguish IP-allow-list, scope, ownership, plan, self-lockout,\nsuppression-duplicate, or other errors that share an HTTP status.\n","additionalProperties":false,"required":["message"],"properties":{"message":{"type":"string","description":"Error description","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"example":{"message":"Error message"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Error message"}}},"exampleType":"generated"}},"exampleType":"generated"},"b35fb903-0925-4368-9cbc-50234557d0fc":{"description":"Segment not found","content":{"application/json":{"schema":{"type":"object","description":"Human-readable API error. The server currently sends no stable machine\nerror code. In particular, clients must not parse `message` to\ndistinguish IP-allow-list, scope, ownership, plan, self-lockout,\nsuppression-duplicate, or other errors that share an HTTP status.\n","additionalProperties":false,"required":["message"],"properties":{"message":{"type":"string","description":"Error description","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"example":{"message":"Error message"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Error message"}}},"exampleType":"generated"}},"exampleType":"generated"},"b1507df1-735e-4b57-86d7-a2bc770398ef":{"description":"The segment is being changed, such as by a member update that\nholds it: `The segment is being updated. Try again in a minute.`\nNothing was changed; retry the request.\n","content":{"application/json":{"schema":{"type":"object","description":"Human-readable API error. The server currently sends no stable machine\nerror code. In particular, clients must not parse `message` to\ndistinguish IP-allow-list, scope, ownership, plan, self-lockout,\nsuppression-duplicate, or other errors that share an HTTP status.\n","additionalProperties":false,"required":["message"],"properties":{"message":{"type":"string","description":"Error description","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"example":{"message":"Error message"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Error message"}}},"exampleType":"generated"}},"exampleType":"generated"},"c3818d85-d2a8-48e3-930b-8931a0f8f978":{"description":"Too many requests","content":{"application/json":{"schema":{"type":"object","description":"Human-readable API error. The server currently sends no stable machine\nerror code. In particular, clients must not parse `message` to\ndistinguish IP-allow-list, scope, ownership, plan, self-lockout,\nsuppression-duplicate, or other errors that share an HTTP status.\n","additionalProperties":false,"required":["message"],"properties":{"message":{"type":"string","description":"Error description","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"example":{"message":"Error message"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Error message"}}},"exampleType":"generated"}},"exampleType":"generated"},"04a75a2d-22b6-4031-bd0a-df1305441757":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","description":"Human-readable API error. The server currently sends no stable machine\nerror code. In particular, clients must not parse `message` to\ndistinguish IP-allow-list, scope, ownership, plan, self-lockout,\nsuppression-duplicate, or other errors that share an HTTP status.\n","additionalProperties":false,"required":["message"],"properties":{"message":{"type":"string","description":"Error description","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"example":{"message":"Error message"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Error message"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"be04deac-2ec5-48f5-a698-b7e43cb4b9d5":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"aha-sk-64-CHARACTER-RANDOM-STRING","description":"API key for authentication. Non-empty Security Requirement values are\nAhaSend API-key roles. Roles listed within one requirement object are\njointly required; separate requirement objects are alternatives.\n","scopes":["segments:write"],"schemeName":"BearerAuth"}}},"servers":{"b5fdc511-65a3-4ae3-b4c1-31f6415bb096":{"url":"https://api.ahasend.com","description":"Production server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"aha-sk-64-CHARACTER-RANDOM-STRING","description":"API key for authentication. Non-empty Security Requirement values are\nAhaSend API-key roles. Roles listed within one requirement object are\njointly required; separate requirement objects are alternatives.\n","scopes":["segments:write"],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key for authentication. Non-empty Security Requirement values are\nAhaSend API-key roles. Roles listed within one requirement object are\njointly required; separate requirement objects are alternatives.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"ahasend","siteName":"AhaSend","title":"Update a Segment via the API - AhaSend","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T21:03:06.877Z","originalFileLocation":"api-reference/segments/update-segment.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.\">\u003cmeta data-mint-head name=\"application-name\" content=\"AhaSend\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update a Segment via the API - AhaSend\">\u003cmeta data-mint-head property=\"og:description\" content=\"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AhaSend\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ahasend.com/docs/api-reference/segments/update-segment\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ahasend.mintlify.app/_mintlify/api/og/v2?division=Segments\u0026amp;title=Update+a+Segment+via+the+API\u0026amp;description=Change+the+name%2C+description%2C+rules+or+time+zone+of+an+AhaSend+segment.+New+rules+or+a+new+time+zone+make+AhaSend+find+the+members+of+the+segment+again.\u0026amp;theme=fec911c84bb9f722051c4af3\u0026amp;signature=6864c13b1c7409706a8a2a47a9a355552901443247b2f57f65dcb97454b125c9\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update a Segment via the API - AhaSend\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ahasend.mintlify.app/_mintlify/api/og/v2?division=Segments\u0026amp;title=Update+a+Segment+via+the+API\u0026amp;description=Change+the+name%2C+description%2C+rules+or+time+zone+of+an+AhaSend+segment.+New+rules+or+a+new+time+zone+make+AhaSend+find+the+members+of+the+segment+again.\u0026amp;theme=fec911c84bb9f722051c4af3\u0026amp;signature=6864c13b1c7409706a8a2a47a9a355552901443247b2f57f65dcb97454b125c9\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/ahasend/4BjAcdwrGYDKJCaO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AhaSend\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#066fd1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://ahasend.com/docs/api-reference/segments/update-segment\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/segments/update-segment.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://ahasend.com/#organization\",\"name\":\"AhaSend\",\"legalName\":\"AhaSend B.V.\",\"url\":\"https://ahasend.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ahasend/F35Ozd-1GsftDpcH/logo.png?fit=max\u0026auto=format\u0026n=F35Ozd-1GsftDpcH\u0026q=85\u0026s=ca1d4c27f7c2811598e65cb25a21323c\"},\"sameAs\":[\"https://x.com/aha_send\",\"https://www.linkedin.com/company/ahasend\",\"https://github.com/ahasend\"]},{\"@type\":\"WebSite\",\"@id\":\"https://ahasend.com/docs#website\",\"name\":\"AhaSend\",\"url\":\"https://ahasend.com/docs\",\"publisher\":{\"@id\":\"https://ahasend.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://ahasend.com/docs/api-reference/segments/update-segment#webpage\",\"url\":\"https://ahasend.com/docs/api-reference/segments/update-segment\",\"name\":\"Update a Segment via the API\",\"description\":\"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.\",\"dateModified\":\"2026-10-26T21:03:06.877Z\",\"isPartOf\":{\"@id\":\"https://ahasend.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://ahasend.com/docs/api-reference/segments/update-segment#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ahasend.com/docs/api-reference/segments/update-segment#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API reference\",\"item\":\"https://ahasend.com/docs/api-reference/messages/create-message\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Segments\",\"item\":\"https://ahasend.com/docs/api-reference/segments/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Update a Segment via the API\",\"item\":\"https://ahasend.com/docs/api-reference/segments/update-segment\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://ahasend.com/docs/api-reference/segments/update-segment#apireference\",\"headline\":\"Update a Segment via the API\",\"name\":\"Update a Segment via the API\",\"description\":\"Change the name, description, rules or time zone of an AhaSend segment. New rules or a new time zone make AhaSend find the members of the segment again.\",\"url\":\"https://ahasend.com/docs/api-reference/segments/update-segment\",\"mainEntityOfPage\":{\"@id\":\"https://ahasend.com/docs/api-reference/segments/update-segment#webpage\"},\"dateModified\":\"2026-10-26T21:03:06.877Z\",\"publisher\":{\"@id\":\"https://ahasend.com/#organization\"},\"isPartOf\":{\"@id\":\"https://ahasend.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AhaSend\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"AhaSend","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Overview","pages":[{"title":"Email API Reference (v2)","sidebarTitle":"Introduction","icon":"book","href":"/api-reference"},{"title":"API Authentication with Bearer API Keys","sidebarTitle":"Authentication","icon":"key","href":"/api-reference/authentication"},{"title":"API Key Scopes and Permissions","sidebarTitle":"Scopes","icon":"lock","href":"/api-reference/scopes"},{"title":"API Rate Limits and 429 Handling","sidebarTitle":"Rate Limits","icon":"gauge-high","href":"/api-reference/rate-limits"},{"title":"Idempotency Keys for Safe API Retries","icon":"repeat","sidebarTitle":"Idempotency","href":"/api-reference/idempotency"},{"title":"API Error Codes and Error Responses","icon":"triangle-exclamation","sidebarTitle":"Errors","href":"/api-reference/errors"}]},{"group":"API reference","pages":[{"group":"Messages","icon":"envelope","pages":[{"title":"Send an Email via the API","sidebarTitle":"Create Message","openapi":"openapi.yaml POST /v2/accounts/{account_id}/messages","href":"/api-reference/messages/create-message"},{"title":"Send a Transactional Template via the API","sidebarTitle":"Create Template Message","openapi":"openapi.yaml POST /v2/accounts/{account_id}/messages/template","href":"/api-reference/messages/create-template-message"},{"title":"Send Email with CC and BCC via the API","sidebarTitle":"Create Conversation","openapi":"openapi.yaml POST /v2/accounts/{account_id}/messages/conversation","href":"/api-reference/messages/create-conversation"},{"title":"Get a Message by ID via the API","sidebarTitle":"Get Message","openapi":"openapi.yaml GET /v2/accounts/{account_id}/messages/{message_id}","href":"/api-reference/messages/get-message"},{"title":"List and Search Sent Emails via the API","sidebarTitle":"List Messages","openapi":"openapi.yaml GET /v2/accounts/{account_id}/messages","href":"/api-reference/messages/get-messages"},{"title":"Cancel a Scheduled Email via the API","sidebarTitle":"Cancel Message","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/messages/{message_id}/cancel","href":"/api-reference/messages/cancel-message"}]},{"group":"Transactional Templates","icon":"file-lines","pages":[{"title":"Create a Transactional Template via the API","sidebarTitle":"Create Template","openapi":"openapi.yaml POST /v2/accounts/{account_id}/templates","href":"/api-reference/templates/create-template"},{"title":"Get a Transactional Template via the API","sidebarTitle":"Get Template","openapi":"openapi.yaml GET /v2/accounts/{account_id}/templates/{template_id}","href":"/api-reference/templates/get-template"},{"title":"Get a Published Transactional Template via the API","sidebarTitle":"Get Published Template","openapi":"openapi.yaml GET /v2/accounts/{account_id}/templates/{template_id}/published","href":"/api-reference/templates/get-published-template"},{"title":"List Transactional Templates via the API","sidebarTitle":"List Templates","openapi":"openapi.yaml GET /v2/accounts/{account_id}/templates","href":"/api-reference/templates/get-templates"},{"title":"Update a Transactional Template via the API","sidebarTitle":"Update Template","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/templates/{template_id}","href":"/api-reference/templates/update-template"},{"title":"Publish a Template Draft via the API","sidebarTitle":"Publish Template","openapi":"openapi.yaml POST /v2/accounts/{account_id}/templates/{template_id}/publish","href":"/api-reference/templates/publish-template"},{"title":"Discard a Template Draft via the API","sidebarTitle":"Discard Template Draft","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/templates/{template_id}/draft","href":"/api-reference/templates/discard-template-draft"},{"title":"List Template Versions via the API","sidebarTitle":"List Template Versions","openapi":"openapi.yaml GET /v2/accounts/{account_id}/templates/{template_id}/versions","href":"/api-reference/templates/get-template-versions"},{"title":"Get a Template Version via the API","sidebarTitle":"Get Template Version","openapi":"openapi.yaml GET /v2/accounts/{account_id}/templates/{template_id}/versions/{version_id}","href":"/api-reference/templates/get-template-version"},{"title":"Restore a Template Version via the API","sidebarTitle":"Restore Template Version","openapi":"openapi.yaml POST /v2/accounts/{account_id}/templates/{template_id}/versions/{version_id}/restore","href":"/api-reference/templates/restore-template-version"},{"title":"Delete a Transactional Template via the API","sidebarTitle":"Delete Template","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/templates/{template_id}","href":"/api-reference/templates/delete-template"}]},{"group":"Campaigns","icon":"bullhorn","pages":[{"title":"Campaigns API Overview","sidebarTitle":"Introduction","icon":"bullhorn","href":"/api-reference/campaigns/overview"},{"title":"Create a Campaign via the API","sidebarTitle":"Create Campaign","openapi":"openapi.yaml POST /v2/accounts/{account_id}/campaigns","href":"/api-reference/campaigns/create-campaign"},{"title":"Get a Campaign via the API","sidebarTitle":"Get Campaign","openapi":"openapi.yaml GET /v2/accounts/{account_id}/campaigns/{campaign_id}","href":"/api-reference/campaigns/get-campaign"},{"title":"List Campaigns via the API","sidebarTitle":"List Campaigns","openapi":"openapi.yaml GET /v2/accounts/{account_id}/campaigns","href":"/api-reference/campaigns/get-campaigns"},{"title":"Update a Campaign via the API","sidebarTitle":"Update Campaign","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/campaigns/{campaign_id}","href":"/api-reference/campaigns/update-campaign"},{"title":"Duplicate a Campaign via the API","sidebarTitle":"Duplicate Campaign","openapi":"openapi.yaml POST /v2/accounts/{account_id}/campaigns/{campaign_id}/duplicate","href":"/api-reference/campaigns/duplicate-campaign"},{"title":"Send a Campaign Test via the API","sidebarTitle":"Test Campaign","openapi":"openapi.yaml POST /v2/accounts/{account_id}/campaigns/{campaign_id}/test","href":"/api-reference/campaigns/test-campaign"},{"title":"Send or Schedule a Campaign via the API","sidebarTitle":"Send Campaign","openapi":"openapi.yaml POST /v2/accounts/{account_id}/campaigns/{campaign_id}/send","href":"/api-reference/campaigns/send-campaign"},{"title":"Unschedule a Campaign via the API","sidebarTitle":"Unschedule Campaign","openapi":"openapi.yaml POST /v2/accounts/{account_id}/campaigns/{campaign_id}/unschedule","href":"/api-reference/campaigns/unschedule-campaign"},{"title":"Get Campaign Stats via the API","sidebarTitle":"Get Campaign Stats","openapi":"openapi.yaml GET /v2/accounts/{account_id}/campaigns/{campaign_id}/stats","href":"/api-reference/campaigns/get-campaign-stats"},{"title":"List Campaign Recipients via the API","sidebarTitle":"List Campaign Recipients","openapi":"openapi.yaml GET /v2/accounts/{account_id}/campaigns/{campaign_id}/recipients","href":"/api-reference/campaigns/get-campaign-recipients"},{"title":"Delete a Campaign via the API","sidebarTitle":"Delete Campaign","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/campaigns/{campaign_id}","href":"/api-reference/campaigns/delete-campaign"}]},{"group":"Campaign Templates","icon":"palette","pages":[{"title":"Create a Campaign Template via the API","sidebarTitle":"Create Template","openapi":"openapi.yaml POST /v2/accounts/{account_id}/campaign-templates","href":"/api-reference/campaign-templates/create-campaign-template"},{"title":"Get a Campaign Template via the API","sidebarTitle":"Get Template","openapi":"openapi.yaml GET /v2/accounts/{account_id}/campaign-templates/{template_id}","href":"/api-reference/campaign-templates/get-campaign-template"},{"title":"List Campaign Templates via the API","sidebarTitle":"List Templates","openapi":"openapi.yaml GET /v2/accounts/{account_id}/campaign-templates","href":"/api-reference/campaign-templates/get-campaign-templates"},{"title":"Update a Campaign Template via the API","sidebarTitle":"Update Template","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/campaign-templates/{template_id}","href":"/api-reference/campaign-templates/update-campaign-template"},{"title":"Delete a Campaign Template via the API","sidebarTitle":"Delete Template","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/campaign-templates/{template_id}","href":"/api-reference/campaign-templates/delete-campaign-template"}]},{"group":"Contacts","icon":"address-book","pages":[{"title":"Contacts API Overview","sidebarTitle":"Introduction","icon":"address-book","href":"/api-reference/contacts/overview"},{"title":"Create a Contact via the API","sidebarTitle":"Create Contact","openapi":"openapi.yaml POST /v2/accounts/{account_id}/contacts","href":"/api-reference/contacts/create-contact"},{"title":"Get a Contact via the API","sidebarTitle":"Get Contact","openapi":"openapi.yaml GET /v2/accounts/{account_id}/contacts/{id_or_email}","href":"/api-reference/contacts/get-contact"},{"title":"List Contacts via the API","sidebarTitle":"List Contacts","openapi":"openapi.yaml GET /v2/accounts/{account_id}/contacts","href":"/api-reference/contacts/get-contacts"},{"title":"Update a Contact via the API","sidebarTitle":"Update Contact","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/contacts/{id_or_email}","href":"/api-reference/contacts/update-contact"},{"title":"Delete a Contact via the API","sidebarTitle":"Delete Contact","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/contacts/{id_or_email}","href":"/api-reference/contacts/delete-contact"},{"title":"Create or Update Contacts in a Batch via the API","sidebarTitle":"Batch Upsert Contacts","openapi":"openapi.yaml POST /v2/accounts/{account_id}/contacts/batch","href":"/api-reference/contacts/batch-upsert-contacts"}]},{"group":"Lists","icon":"list-ul","pages":[{"title":"Lists API Overview","sidebarTitle":"Introduction","icon":"list-ul","href":"/api-reference/lists/overview"},{"title":"Create a List via the API","sidebarTitle":"Create List","openapi":"openapi.yaml POST /v2/accounts/{account_id}/lists","href":"/api-reference/lists/create-list"},{"title":"Get a List via the API","sidebarTitle":"Get List","openapi":"openapi.yaml GET /v2/accounts/{account_id}/lists/{list_id}","href":"/api-reference/lists/get-list"},{"title":"List Contact Lists via the API","sidebarTitle":"List Lists","openapi":"openapi.yaml GET /v2/accounts/{account_id}/lists","href":"/api-reference/lists/get-lists"},{"title":"Update a List via the API","sidebarTitle":"Update List","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/lists/{list_id}","href":"/api-reference/lists/update-list"},{"title":"Delete a List via the API","sidebarTitle":"Delete List","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/lists/{list_id}","href":"/api-reference/lists/delete-list"},{"title":"List the Contacts on a List via the API","sidebarTitle":"List Contacts on a List","openapi":"openapi.yaml GET /v2/accounts/{account_id}/lists/{list_id}/contacts","href":"/api-reference/lists/get-list-contacts"},{"title":"Add or Update a List Contact via the API","sidebarTitle":"Add or Update List Contact","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/lists/{list_id}/contacts/{id_or_email}","href":"/api-reference/lists/upsert-list-contact"},{"title":"Add Contacts to a List in a Batch via the API","sidebarTitle":"Batch Add List Contacts","openapi":"openapi.yaml POST /v2/accounts/{account_id}/lists/{list_id}/contacts/batch","href":"/api-reference/lists/batch-add-list-contacts"},{"title":"Remove a Contact from a List via the API","sidebarTitle":"Remove List Contact","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/lists/{list_id}/contacts/{id_or_email}","href":"/api-reference/lists/delete-list-contact"},{"title":"List a Contact's Lists via the API","sidebarTitle":"List Contact's Lists","openapi":"openapi.yaml GET /v2/accounts/{account_id}/contacts/{id_or_email}/lists","href":"/api-reference/lists/get-contact-lists"}]},{"group":"Segments","icon":"filter","pages":[{"title":"Segments API Overview","sidebarTitle":"Introduction","icon":"filter","href":"/api-reference/segments/overview"},{"title":"Preview a Segment via the API","sidebarTitle":"Preview Segment","openapi":"openapi.yaml POST /v2/accounts/{account_id}/segments/preview","href":"/api-reference/segments/preview-segment"},{"title":"Create a Segment via the API","sidebarTitle":"Create Segment","openapi":"openapi.yaml POST /v2/accounts/{account_id}/segments","href":"/api-reference/segments/create-segment"},{"title":"Get a Segment via the API","sidebarTitle":"Get Segment","openapi":"openapi.yaml GET /v2/accounts/{account_id}/segments/{segment_id}","href":"/api-reference/segments/get-segment"},{"title":"List Segments via the API","sidebarTitle":"List Segments","openapi":"openapi.yaml GET /v2/accounts/{account_id}/segments","description":"List the segments of your AhaSend account, newest first, with the rules, the state and the member count of each segment and the time its members were checked.","href":"/api-reference/segments/get-segments"},{"title":"Update a Segment via the API","sidebarTitle":"Update Segment","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/segments/{segment_id}","href":"/api-reference/segments/update-segment"},{"title":"Delete a Segment via the API","sidebarTitle":"Delete Segment","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/segments/{segment_id}","description":"Delete an AhaSend segment. Its contacts stay in your account, and a segment that an unfinished campaign sends to or excludes cannot be deleted.","href":"/api-reference/segments/delete-segment"},{"title":"List the Contacts in a Segment via the API","sidebarTitle":"List Segment Contacts","openapi":"openapi.yaml GET /v2/accounts/{account_id}/segments/{segment_id}/contacts","href":"/api-reference/segments/get-segment-contacts"},{"title":"List a Contact's Segments via the API","sidebarTitle":"List Contact's Segments","openapi":"openapi.yaml GET /v2/accounts/{account_id}/contacts/{id_or_email}/segments","href":"/api-reference/segments/get-contact-segments"}]},{"group":"Suppressions","icon":"ban","pages":[{"title":"Add an Address to the Suppression List via the API","sidebarTitle":"Create Suppression","openapi":"openapi.yaml POST /v2/accounts/{account_id}/suppressions","href":"/api-reference/suppressions/create-suppression"},{"title":"List Suppressed Addresses via the API","sidebarTitle":"List Suppressions","openapi":"openapi.yaml GET /v2/accounts/{account_id}/suppressions","href":"/api-reference/suppressions/get-suppressions"},{"title":"Remove a Suppression via the API","sidebarTitle":"Delete Suppression","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/suppressions","href":"/api-reference/suppressions/delete-suppression"},{"title":"Delete All Suppressions via the API","sidebarTitle":"Delete All Suppressions","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/suppressions/all","href":"/api-reference/suppressions/wipe-suppressions"}]},{"group":"SMTP Credentials","icon":"user-shield","pages":[{"title":"Create SMTP Credentials via the API","sidebarTitle":"Create SMTP Credential","openapi":"openapi.yaml POST /v2/accounts/{account_id}/smtp-credentials","href":"/api-reference/smtp-credentials/create-smtp-credential"},{"title":"Get an SMTP Credential via the API","sidebarTitle":"Get SMTP Credential","openapi":"openapi.yaml GET /v2/accounts/{account_id}/smtp-credentials/{smtp_credential_id}","href":"/api-reference/smtp-credentials/get-smtp-credential"},{"title":"List SMTP Credentials via the API","sidebarTitle":"List SMTP Credentials","openapi":"openapi.yaml GET /v2/accounts/{account_id}/smtp-credentials","href":"/api-reference/smtp-credentials/get-smtp-credentials"},{"title":"Delete an SMTP Credential via the API","sidebarTitle":"Delete SMTP Credential","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/smtp-credentials/{smtp_credential_id}","href":"/api-reference/smtp-credentials/delete-smtp-credential"}]},{"group":"Webhooks","icon":"webhook","pages":[{"title":"Create a Webhook via the API","sidebarTitle":"Create Webhook","openapi":"openapi.yaml POST /v2/accounts/{account_id}/webhooks","href":"/api-reference/webhooks/create-webhook"},{"title":"Get a Webhook via the API","sidebarTitle":"Get Webhook","openapi":"openapi.yaml GET /v2/accounts/{account_id}/webhooks/{webhook_id}","href":"/api-reference/webhooks/get-webhook"},{"title":"List Webhooks via the API","sidebarTitle":"List Webhooks","openapi":"openapi.yaml GET /v2/accounts/{account_id}/webhooks","href":"/api-reference/webhooks/get-webhooks"},{"title":"Update a Webhook via the API","sidebarTitle":"Update Webhook","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/webhooks/{webhook_id}","href":"/api-reference/webhooks/update-webhook"},{"title":"Delete a Webhook via the API","sidebarTitle":"Delete Webhook","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/webhooks/{webhook_id}","href":"/api-reference/webhooks/delete-webhook"}]},{"group":"Routes","icon":"route","pages":[{"title":"Create an Inbound Email Route via the API","sidebarTitle":"Create Route","openapi":"openapi.yaml POST /v2/accounts/{account_id}/routes","href":"/api-reference/routes/create-route"},{"title":"Get an Inbound Email Route via the API","sidebarTitle":"Get Route","openapi":"openapi.yaml GET /v2/accounts/{account_id}/routes/{route_id}","href":"/api-reference/routes/get-route"},{"title":"List Inbound Email Routes via the API","sidebarTitle":"List Routes","openapi":"openapi.yaml GET /v2/accounts/{account_id}/routes","href":"/api-reference/routes/get-routes"},{"title":"Update an Inbound Email Route via the API","sidebarTitle":"Update Route","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/routes/{route_id}","href":"/api-reference/routes/update-route"},{"title":"Delete an Inbound Email Route via the API","sidebarTitle":"Delete Route","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/routes/{route_id}","href":"/api-reference/routes/delete-route"}]},{"group":"Domains","icon":"globe","pages":[{"title":"Add a Sending Domain via the API","sidebarTitle":"Create Domain","openapi":"openapi.yaml POST /v2/accounts/{account_id}/domains","href":"/api-reference/domains/create-domain"},{"title":"Get a Domain and Its DNS Records via the API","sidebarTitle":"Get Domain","openapi":"openapi.yaml GET /v2/accounts/{account_id}/domains/{domain}","href":"/api-reference/domains/get-domain"},{"title":"List Sending Domains via the API","sidebarTitle":"List Domains","openapi":"openapi.yaml GET /v2/accounts/{account_id}/domains","href":"/api-reference/domains/get-domains"},{"title":"Update a Sending Domain via the API","sidebarTitle":"Update Domain","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/domains/{domain}","href":"/api-reference/domains/update-domain"},{"title":"Check Domain DNS Records via the API","sidebarTitle":"Check Domain DNS","openapi":"openapi.yaml POST /v2/accounts/{account_id}/domains/{domain}/check-dns","href":"/api-reference/domains/check-dns"},{"title":"Delete a Sending Domain via the API","sidebarTitle":"Delete Domain","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/domains/{domain}","href":"/api-reference/domains/delete-domain"}]},{"group":"Accounts","icon":"building","pages":[{"title":"Get Account Details via the API","sidebarTitle":"Get Account","openapi":"openapi.yaml GET /v2/accounts/{account_id}","href":"/api-reference/accounts/get-account"},{"title":"Update Account Settings via the API","sidebarTitle":"Update Account","openapi":"openapi.yaml PUT /v2/accounts/{account_id}","href":"/api-reference/accounts/update-account"},{"title":"List Account Members via the API","sidebarTitle":"List Account Members","openapi":"openapi.yaml GET /v2/accounts/{account_id}/members","href":"/api-reference/accounts/get-account-members"},{"title":"Add an Account Member via the API","sidebarTitle":"Add Account Member","openapi":"openapi.yaml POST /v2/accounts/{account_id}/members","href":"/api-reference/accounts/create-account-member"},{"title":"Remove an Account Member via the API","sidebarTitle":"Remove Account Member","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/members/{user_id}","href":"/api-reference/accounts/delete-account-member"}]},{"group":"Sub-Accounts","icon":"sitemap","pages":[{"title":"Sub-Accounts API Overview","sidebarTitle":"Introduction","icon":"sitemap","href":"/api-reference/sub-accounts/overview"},{"title":"Create a Sub-Account via the API","sidebarTitle":"Create Sub-Account","openapi":"openapi.yaml POST /v2/accounts/{account_id}/sub-accounts","href":"/api-reference/sub-accounts/create-sub-account"},{"title":"List Sub-Accounts via the API","sidebarTitle":"List Sub-Accounts","openapi":"openapi.yaml GET /v2/accounts/{account_id}/sub-accounts","href":"/api-reference/sub-accounts/get-sub-accounts"},{"title":"Get a Sub-Account via the API","sidebarTitle":"Get Sub-Account","openapi":"openapi.yaml GET /v2/accounts/{account_id}/sub-accounts/{sub_account_id}","href":"/api-reference/sub-accounts/get-sub-account"},{"title":"Update a Sub-Account via the API","sidebarTitle":"Update Sub-Account","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/sub-accounts/{sub_account_id}","href":"/api-reference/sub-accounts/update-sub-account"},{"title":"Pause a Sub-Account via the API","sidebarTitle":"Pause Sub-Account","openapi":"openapi.yaml POST /v2/accounts/{account_id}/sub-accounts/{sub_account_id}/suspend","href":"/api-reference/sub-accounts/suspend-sub-account"},{"title":"Resume a Sub-Account via the API","sidebarTitle":"Resume Sub-Account","openapi":"openapi.yaml POST /v2/accounts/{account_id}/sub-accounts/{sub_account_id}/unsuspend","href":"/api-reference/sub-accounts/unsuspend-sub-account"},{"title":"Unpause a Sub-Account Domain via the API","sidebarTitle":"Unpause Sub-Account Domain","openapi":"openapi.yaml POST /v2/accounts/{account_id}/sub-accounts/{sub_account_id}/domains/{domain}/unpause","href":"/api-reference/sub-accounts/unpause-sub-account-domain"},{"title":"Delete a Sub-Account via the API","sidebarTitle":"Delete Sub-Account","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/sub-accounts/{sub_account_id}","href":"/api-reference/sub-accounts/delete-sub-account"},{"title":"Get Sub-Account Usage via the API","sidebarTitle":"Sub-Account Usage","openapi":"openapi.yaml GET /v2/accounts/{account_id}/sub-accounts/usage","href":"/api-reference/sub-accounts/get-sub-accounts-usage"}]},{"group":"Sub-Account API Keys","icon":"key","pages":[{"title":"Create a Sub-Account API Key via the API","sidebarTitle":"Create API Key","openapi":"openapi.yaml POST /v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys","href":"/api-reference/sub-accounts/create-sub-account-api-key"},{"title":"Get a Sub-Account API Key via the API","sidebarTitle":"Get API Key","openapi":"openapi.yaml GET /v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}","href":"/api-reference/sub-accounts/get-sub-account-api-key"},{"title":"List Sub-Account API Keys via the API","sidebarTitle":"List API Keys","openapi":"openapi.yaml GET /v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys","href":"/api-reference/sub-accounts/get-sub-account-api-keys"},{"title":"Update a Sub-Account API Key via the API","sidebarTitle":"Update API Key","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}","href":"/api-reference/sub-accounts/update-sub-account-api-key"},{"title":"Delete a Sub-Account API Key via the API","sidebarTitle":"Delete API Key","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}","href":"/api-reference/sub-accounts/delete-sub-account-api-key"}]},{"group":"Reports","icon":"chart-line","pages":[{"title":"Get Email Deliverability Statistics via the API","sidebarTitle":"Deliverability Report","openapi":"openapi.yaml GET /v2/accounts/{account_id}/statistics/transactional/deliverability","href":"/api-reference/reports/get-deliverability-report"},{"title":"Get Email Bounce Statistics via the API","sidebarTitle":"Bounce Report","openapi":"openapi.yaml GET /v2/accounts/{account_id}/statistics/transactional/bounce","href":"/api-reference/reports/get-bounce-report"},{"title":"Get Email Delivery Time Statistics via the API","sidebarTitle":"Delivery Time Report","openapi":"openapi.yaml GET /v2/accounts/{account_id}/statistics/transactional/delivery-time","href":"/api-reference/reports/get-delivery-time-report"}]},{"group":"API Keys","icon":"key","pages":[{"title":"Create an API Key via the API","sidebarTitle":"Create API Key","openapi":"openapi.yaml POST /v2/accounts/{account_id}/api-keys","href":"/api-reference/api-keys/create-api-key"},{"title":"Get an API Key via the API","sidebarTitle":"Get API Key","openapi":"openapi.yaml GET /v2/accounts/{account_id}/api-keys/{key_id}","href":"/api-reference/api-keys/get-api-key"},{"title":"List API Keys via the API","sidebarTitle":"List API Keys","openapi":"openapi.yaml GET /v2/accounts/{account_id}/api-keys","href":"/api-reference/api-keys/get-api-keys"},{"title":"Update an API Key via the API","sidebarTitle":"Update API Key","openapi":"openapi.yaml PUT /v2/accounts/{account_id}/api-keys/{key_id}","href":"/api-reference/api-keys/update-api-key"},{"title":"Delete an API Key via the API","sidebarTitle":"Delete API Key","openapi":"openapi.yaml DELETE /v2/accounts/{account_id}/api-keys/{key_id}","href":"/api-reference/api-keys/delete-api-key"}]},{"group":"Utility endpoints","icon":"bolt","pages":[{"title":"Test Your API Key with the Ping Endpoint","sidebarTitle":"Ping","openapi":"openapi.yaml GET /v2/ping","href":"/api-reference/utility/ping"}]}]},{"group":"Webhooks","pages":[{"title":"Webhook Events and Payload Reference","sidebarTitle":"Introduction","icon":"webhook","href":"/api-reference/webhooks/index"},{"title":"Verify Webhook and Route Signatures (HMAC)","sidebarTitle":"Security","icon":"shield-check","href":"/api-reference/webhooks/security"},{"title":"Webhook and Route Retry Policy","sidebarTitle":"Retry Policy","icon":"repeat","href":"/api-reference/webhooks/retry-policy"},{"group":"Message Events","icon":"envelope","pages":[{"title":"message.reception Webhook Event","sidebarTitle":"Reception","openapi":"webhooks.yaml webhook message.reception","href":"/api-reference/webhooks/message-reception"},{"title":"message.delivered Webhook Event","sidebarTitle":"Delivered","openapi":"webhooks.yaml webhook message.delivered","href":"/api-reference/webhooks/message-delivered"},{"title":"message.transient_error (Deferred) Webhook Event","sidebarTitle":"Deferred","openapi":"webhooks.yaml webhook message.transient_error","href":"/api-reference/webhooks/message-transient_error"},{"title":"message.failed Webhook Event","sidebarTitle":"Failed","openapi":"webhooks.yaml webhook message.failed","href":"/api-reference/webhooks/message-failed"},{"title":"message.bounced Webhook Event","sidebarTitle":"Bounced","openapi":"webhooks.yaml webhook message.bounced","href":"/api-reference/webhooks/message-bounced"},{"title":"message.suppressed Webhook Event","sidebarTitle":"Suppressed","openapi":"webhooks.yaml webhook message.suppressed","href":"/api-reference/webhooks/message-suppressed"},{"title":"message.opened Webhook Event","sidebarTitle":"Opened","openapi":"webhooks.yaml webhook message.opened","href":"/api-reference/webhooks/message-opened"},{"title":"message.clicked Webhook Event","sidebarTitle":"Clicked","openapi":"webhooks.yaml webhook message.clicked","href":"/api-reference/webhooks/message-clicked"},{"title":"message.unsubscribed Webhook Event","sidebarTitle":"Unsubscribed","openapi":"webhooks.yaml webhook message.unsubscribed","href":"/api-reference/webhooks/message-unsubscribed"},{"title":"message.complained Webhook Event","sidebarTitle":"Complained","openapi":"webhooks.yaml webhook message.complained","href":"/api-reference/webhooks/message-complained"}]},{"group":"Suppression Events","icon":"ban","pages":[{"title":"suppression.created Webhook Event","sidebarTitle":"Suppression Created","openapi":"webhooks.yaml webhook suppression.created","href":"/api-reference/webhooks/suppression-created"},{"title":"suppression.deleted Webhook Event","sidebarTitle":"Suppression Deleted","openapi":"webhooks.yaml webhook suppression.deleted","href":"/api-reference/webhooks/suppression-deleted"}]},{"group":"Domain Events","icon":"globe","pages":[{"title":"domain.dns_error Webhook Event","sidebarTitle":"DNS Error","openapi":"webhooks.yaml webhook domain.dns_error","href":"/api-reference/webhooks/domain-dns_error"}]},{"group":"Contact Events","icon":"address-book","pages":[{"title":"contact.created Webhook Event","sidebarTitle":"Contact Created","openapi":"webhooks.yaml webhook contact.created","href":"/api-reference/webhooks/contact-created"},{"title":"contact.updated Webhook Event","sidebarTitle":"Contact Updated","openapi":"webhooks.yaml webhook contact.updated","href":"/api-reference/webhooks/contact-updated"},{"title":"contact.deleted Webhook Event","sidebarTitle":"Contact Deleted","openapi":"webhooks.yaml webhook contact.deleted","href":"/api-reference/webhooks/contact-deleted"},{"title":"contact.added_to_list Webhook Event","sidebarTitle":"Contact Added to List","openapi":"webhooks.yaml webhook contact.added_to_list","href":"/api-reference/webhooks/contact-added_to_list"},{"title":"contact.removed_from_list Webhook Event","sidebarTitle":"Contact Removed from List","openapi":"webhooks.yaml webhook contact.removed_from_list","href":"/api-reference/webhooks/contact-removed_from_list"},{"title":"contact.subscribed Webhook Event","sidebarTitle":"Contact Subscribed","openapi":"webhooks.yaml webhook contact.subscribed","href":"/api-reference/webhooks/contact-subscribed"},{"title":"contact.unsubscribed Webhook Event","sidebarTitle":"Contact Unsubscribed","openapi":"webhooks.yaml webhook contact.unsubscribed","href":"/api-reference/webhooks/contact-unsubscribed"},{"title":"contact.complained Webhook Event","sidebarTitle":"Contact Complained","openapi":"webhooks.yaml webhook contact.complained","href":"/api-reference/webhooks/contact-complained"}]}]},{"group":"Message Routing","pages":[{"title":"Inbound Email Routing API Overview","sidebarTitle":"Introduction","icon":"route","href":"/api-reference/routes/index"},{"title":"message.routing Inbound Email Webhook Event","sidebarTitle":"Message Routing","openapi":"webhooks.yaml webhook message.routing","href":"/api-reference/routes/route-message"}]},{"group":"API v1 (legacy)","pages":[{"title":"API v1 vs v2: Differences and Migration","sidebarTitle":"v1 vs v2","icon":"code-compare","href":"/api-reference/v1/v1-vs-v2"},{"title":"Send Email with API v1 (Legacy)","sidebarTitle":"Send Email (Legacy)","icon":"paper-plane","openapi":"openapi-v1.yaml POST /v1/email/send","href":"/api-reference/v1/index"}]}]},{"tab":"CLI","icon":"square-terminal","pages":[{"title":"CLI","href":"/cli"}]},{"tab":"Guides","icon":"plug","pages":[{"title":"Guides","href":"/guides"}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"Roadmap","icon":"map","pages":[{"title":"Roadmap","href":"/roadmap"}]}]},"title":"Update a Segment via the API - AhaSend","buildId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","deploymentId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bg4Z7D_G.js","utils-Biz734EK.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C6F9YHs6.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BoJjY_VP.js","snippetPresets-CnZ-mOFh.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-DC_SB2pp.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BYKtOiIP.js","shallow-COAac_UD.js","getApiPlaygroundDisplay-BV4Viqi2.js","CodeSnippet-DDgW-JXl.js","CodeSnippets-CP1LpNhG.js","Page-BeiUfucV.js","getPastedJson-Cvgvbfmv.js","icon-D-H368xH.js","MethodPill-CXSxH1VW.js","DuplicateIcon-JcbBzF1x.js","createIcon-BDt_aHZM.js","DynamicMarkdown-DO1Fz7ar.js","SectionHeading-mwKBArs3.js","axios-vUo_bRtp.js","Markdown-C3KUTGJN.js","clsx-C6CAjViH.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C3vb5JQZ.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C8Hisf3g.js"]}