Skip to content

Contacts

Contacts are recipients. They live inside a ContactImport and can be enrolled in one or more campaigns (subject to the Outreach dedup rules).

GET /contacts/:id
Authorization: Bearer <key>
{
"id": "...",
"email": "ada@example.com",
"first_name": "Ada",
"last_name": "Lovelace",
"company": "Widgets Inc",
"unsubscribed_at": null,
"created_at": "...",
"enrollments": [
{ "id": "...", "campaign_id": "...", "status": "sent", "batch_number": 1, "sent_at": "..." }
]
}
PATCH /contacts/:id
Authorization: Bearer <key>
Content-Type: application/json
{ "contact": { "first_name": "Augusta", "company": "Acme" } }

Updatable: email, first_name, last_name, company. unsubscribed_at is set only via the unsubscribe link or webhook flow.

DELETE /contacts/:id

Cascades to all the contact’s enrollments (across every campaign).

GET /contact_imports/:contact_import_id/contacts

(Documented under Contact imports.)

Contacts unsubscribe one of two ways:

  1. One-click unsubscribe — every email includes a List-Unsubscribe header (RFC 8058) and a footer link signed with a per-contact token. Click → contact is marked unsubscribed; future sends to that contact (including already-scheduled step 2/3) skip the SMTP transaction.
  2. SMTP2GO inbound webhook — when a recipient marks an email as spam or unsubscribes via the provider, the inbound webhook sets unsubscribed_at.

Both paths emit an enrollment.unsubscribed outbound webhook (one per active enrollment for that contact).

StatusCodeWhen
404contact_not_foundUnknown id or another account’s.
404contact_import_not_foundListing under an unknown import.
422validation_failedInvalid email, duplicate email, etc.