Add or update email-list members
Adds or updates members on a list in one batch and returns { "audienceId", "imported" }, where imported is the number of members submitted.
Adds or updates members on a list in one batch and returns { "audienceId", "imported" }, where imported is the number of members submitted. Each entry in members is either a raw handle (a plain email address, normalized) or a contactId whose address is resolved from that contact's primary email handle — supplying both, or neither, is a 400; an unknown or cross-project contact is a 404, and a contact with no email handle is a 422. Optional per-member name and metadata (defaulting to {}) are stored on the row. Members merge on the (list, address) pair, so re-adding an existing address updates it in place instead of creating a duplicate, which makes retries safe. At most 2000 members may be sent per request (413 above that; an empty array is a 400). Requires the audiences:write scope.
Scope: audiences:write. Send the API key as a bearer token; Scopes lists what each one reaches.
Request
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
audienceId | string (uuid) | yes | The audience's ID. |
Body
Required, application/json: AudienceMembersRequest.
| Field | Type | Required | Description |
|---|---|---|---|
members | array of object | yes | (min items 1, max items 2000) |
Response
200 Success. Body: application/json, AudienceMembersResponse.
| Field | Type | Required | Description |
|---|---|---|---|
audienceId | string (uuid) | yes | |
imported | integer | yes |
Errors
Every error has the same body, {"error": {"type", "code", "message", "param"}}; branch on code. Errors lists every code.
| Status | Meaning |
|---|---|
400 | The request is malformed or a value is invalid (invalid_request, invalid_domain, idempotency_key_mismatch). |
401 | The API key is missing or invalid. |
403 | The key lacks the scope this endpoint needs (scope_missing) or may not do this (not_permitted). |
404 | No such resource in this account (resource_not_found). |
422 | The request is well-formed but a field failed validation (validation_failed). |
429 | Rate limit, plan limit, budget or spend cap reached (rate_limited, plan_limit_reached, budget_exceeded, spend_cap_reached). |
500 | An unexpected error; retry with backoff, then contact support (internal_error). |
Archive an email list
Archives an email list by setting its status to archived; the list and its members are retained but the list no longer appears in GET /v1/audiences and can no longer be fetched or broadcast to.
Broadcast an email to an email list
Broadcasts one email to every active member of the list and returns 202 with a broadcast object: { "object": "broadcast", "id": "bcast_...", "audienceId", "status": "queued" }.