Set a contact's audiences
Says exactly which audiences one contact is in, in one call. The contact joins every audience in `audienceIds` it is not in yet and leaves every other one. The default audience is always kept, so an empty list leaves the contact in the default audience alone.
Runs the real call against your workspace, with your own key.
PUT /contacts/{email}/audiences
Says exactly which audiences one contact is in, in one call. The contact joins every audience in audienceIds it is not in yet and leaves every other one. The default audience is always kept, so an empty list leaves the contact in the default audience alone.
Example
Needs audiences:write, because it writes memberships rather than the contact. URL-encode the @. audienceIds holds up to 100 ids.
curl -X PUT "$OE/contacts/grace%40example.com/audiences" -H "$AUTH" -H 'content-type: application/json' -d '{ "audienceIds": ["aud_4c1b8e2a7d9f05c36b4e8a71"]}'{ "object": "contact", "email": "[email protected]", "name": "Grace Hopper", "source": "manual", "notes": null, "lastSeenAt": null, "createdAt": "2026-09-18T09:00:00.000Z", "updatedAt": "2026-09-18T09:00:00.000Z", "audiences": [ { "id": "aud_9f2c4b7e1a0d63d84c5f2e7b", "name": "All contacts", "builtin": "default" }, { "id": "aud_4c1b8e2a7d9f05c36b4e8a71", "name": "Product updates", "builtin": null } ]}The contact has to exist already. An address that is not in the book is a 404 contact_not_found. Create it with POST /contacts, which takes audienceIds too.
An id that names no audience in this workspace is a 404 audience_not_found and nothing changes, so a typo cannot quietly take somebody out of a list. Sending the same call again changes nothing.
The response is the contact as GET /contacts/{email} returns it, with every audience it is in after the change.