Confirm Double Opt-in

Marks a contact's double opt-in as complete.

POSThttps://api.audienceful.com/v2/people/opt-in
curl --location --request POST 'https://api.audienceful.com/v2/people/opt-in' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <your-api-key>' \
--data-raw '{
    "email": "person@example.com"
}'
{
  "id": "jQKdwqp3YRRtTrwqUJEp7d",
  "email": "person@example.com",
  "tags": ["vip"],
  "notes": "",
  "extra_data": {
    "plan": "pro"
  },
  "created_at": "2026-07-04T12:00:00Z",
  "updated_at": "2026-07-04T12:00:00Z",
  "last_activity": "2026-07-04T12:00:00Z",
  "country": "US",
  "status": "active",
  "source": "api",
  "open_rate": 0.42,
  "click_rate": 0.11
}

Requires the people:write scope. Use this to confirm a contact's double opt-in from your own flow — for example after they click a confirmation link you host. It sets the contact's double opt-in status to complete.

Address the contact in the request body, with either their id or their email. A confirmation flow usually only knows the address the person typed, which is exactly the case the body form is for — no percent-encoding, whatever the address contains.

Body

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.

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

Also available: POST /v2/people/{id}/opt-in

The path form still works and is not deprecated:

Bash
curl --location --request POST 'https://api.audienceful.com/v2/people/jQKdwqp3YRRtTrwqUJEp7d/opt-in' \
  --header 'X-Api-Key: <your-api-key>'

Response

Returns the updated contact.

idstring
The contact's opaque, unique identifier. Send it as id in the body of the update, delete, opt-in, unsubscribe and publications endpoints to address this contact, or use it in the path of the resource-shaped routes. The sequential integer primary key is never exposed.
emailstring
The contact's email address.
tagsarray[string]
The names of the tags applied to this contact — a flat list of strings.
notesstring
Notes associated with this contact. HTML string or plain string.
extra_dataobject
All custom field values for the contact, keyed by each field's data_name (never the internal field id).
Properties
custom_fieldstring | boolean | number
An example of a custom field you may have for your audience. The data_name for each field is listed here. See Fields.
created_atstring
The datetime (UTC) at which the contact was created.
updated_atstring
The datetime (UTC) at which the contact was last updated.
last_activitystring or null
The datetime (UTC) of this contact's last activity. Example activities that update this field are: creation, opening an email, clicking an email, and unsubscribing.
countrystring or null
The contact's two-letter country code, if known.
statusstring
The single subscription/deliverability indicator for the contact.
Values
active
The contact is active and subscribed.
unconfirmed
The contact has not confirmed their double opt-in email.
bounced
The contact's email failed to deliver (permanent).
unsubscribed
The contact has unsubscribed.
not_subscribed
The contact is not subscribed to marketing.
cleaned
The contact was cleaned from the list (repeatedly undeliverable).
sourcestring
How the contact entered your audience (e.g. api, import, form).
open_ratenumber
The contact's historical email open rate, from 0 to 1.
click_ratenumber
The contact's historical email click rate, from 0 to 1.
Last updated: July 31, 2026