Update a Contact's Publications

Subscribes or unsubscribes a contact per publication.

POSThttps://api.audienceful.com/v2/people/publications
curl --location --request POST 'https://api.audienceful.com/v2/people/publications' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <your-api-key>' \
--data-raw '{
    "email": "person@example.com",
    "publications": {
        "kR2xN9mDfLpQ": true,
        "mZ7bV3nQwXcT": false
    }
}'
{
  "data": [
    {
      "id": "kR2xN9mDfLpQ",
      "name": "The Weekly",
      "subscribed": true,
      "explicit": true,
      "source": "api"
    },
    {
      "id": "mZ7bV3nQwXcT",
      "name": "Product Updates",
      "subscribed": false,
      "explicit": true,
      "source": "api"
    }
  ],
  "unsubscribed_all": false
}

Requires the publications:write scope.

Sets a contact's consent per publication. Unlike creating or updating a contact — where the publications field can only grant consent — this endpoint can both subscribe (true) and unsubscribe (false).

The update is a partial map: only the publication ids you name are changed. A publication you leave out of the object keeps its current state, so a partial payload can never silently revoke consent for a publication you didn't mention.

Body

Address the contact in the request body, alongside the consent map.

idstring
The contact's opaque id. Takes precedence over email when both are supplied.
emailstring
The contact's email address (case-insensitive). Use this when you don't hold their id.
publicationsobjectrequired
A map of publication id → boolean. Set a publication to true to subscribe the contact or false to unsubscribe them. Only the ids present in the object are applied. Every key must be a known publication id in the workspace — an unknown id returns a 400. (Get ids from Retrieve a Contact's Publications.)

Omit this field entirely and the request becomes a read — the same call as Retrieve a Contact's Publications, needing only publications:read.

One of id or email is required; supplying neither returns a 400.

Also available: PATCH /v2/people/{id}/publications

The path form still works and is not deprecated:

Bash
curl --location --request PATCH 'https://api.audienceful.com/v2/people/jQKdwqp3YRRtTrwqUJEp7d/publications' \
  --header 'Content-Type: application/json' \
  --header 'X-Api-Key: <your-api-key>' \
  --data-raw '{ "publications": { "kR2xN9mDfLpQ": true } }'

Response

Returns the contact's full consent state after the update — the same shape as Retrieve a Contact's Publications.

dataarray[object]
One entry per publication in the workspace.
Properties
idstring
The publication's id.
namestring
The publication's name.
subscribedboolean
Whether the contact is currently subscribed to this publication. When the contact has made no explicit choice, this reflects the publication's default.
explicitboolean
true when the contact has a deliberate choice on record for this publication, false when subscribed is simply the publication's default. Publications you set through this endpoint come back as explicit: true.
sourcestring or null
How the contact's explicit choice was made, or null when explicit is false. A change made through this endpoint is recorded with source api. See Retrieve a Contact's Publications for the full list of values.
unsubscribed_allboolean
true when the contact has globally unsubscribed from all email. A global unsubscribe outranks every per-publication state, so a contact with subscribed: true on a publication still receives nothing while this is true.
Last updated: July 31, 2026