Clear a contact's do-not-contact mark
const url = 'https://api.usesonora.com/v1/contacts/example/do-not-contact';const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request DELETE \ --url https://api.usesonora.com/v1/contacts/example/do-not-contact \ --header 'Authorization: Bearer <token>'Lift the mark, so workflows and drafts include the contact again from their next send. An unsubscribe or a bounce on the same address stays in place. Clearing a mark that isn’t there changes nothing.
Requires the contacts:write scope. API keys only.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The contact’s Sonora id.
Responses
Section titled “Responses”The contact, unmarked.
A person at one of your customers.
object
The customer the person works at. Null when Sonora hasn’t matched them to one.
First and last name together; null when Sonora has neither.
Job title.
Marked as a champion at their account.
Someone on your team marked the person do-not-contact, so Sonora never emails them. The mark is on the address, so changing it doesn’t move updatedAt.
The record’s id in another system.
object
The system the id is from: salesforce, hubspot, zendesk, intercom, …
Calls, emails, meetings and tickets Sonora has seen the person in.
Moves on any change to the record, including Sonora’s own bookkeeping (engagement counts).
object
This resource’s canonical URL on the API host.
Examplegenerated
{ "id": "example", "customerId": "example", "firstName": "example", "lastName": "example", "name": "example", "email": "example", "phone": "example", "title": "example", "linkedinUrl": "example", "isChampion": true, "departedAt": "2026-04-15T12:00:00Z", "archivedAt": "2026-04-15T12:00:00Z", "doNotContact": true, "externalIds": [ { "source": "example", "id": "example" } ], "engagementsCount": 1, "lastEngagementAt": "2026-04-15T12:00:00Z", "createdAt": "2026-04-15T12:00:00Z", "updatedAt": "2026-04-15T12:00:00Z", "links": { "self": "example" }}unauthorized: The Authorization header is missing, or the key is invalid, revoked or expired.
The one error shape every endpoint answers with.
object
object
Stable snake_case code to branch on; see the error table.
For humans; may change.
object
Quote it when asking for help.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": { "additionalProperty": "example" }, "requestId": "example" }}insufficient_scope: The key or token lacks the scope this endpoint needs, and details.required names it; or an OAuth access token called an endpoint only an API key can.
The one error shape every endpoint answers with.
object
object
Stable snake_case code to branch on; see the error table.
For humans; may change.
object
Quote it when asking for help.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": { "additionalProperty": "example" }, "requestId": "example" }}contact_not_found: No contact with that id.
The one error shape every endpoint answers with.
object
object
Stable snake_case code to branch on; see the error table.
For humans; may change.
object
Quote it when asking for help.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": { "additionalProperty": "example" }, "requestId": "example" }}rate_limited: Too many requests for this key; retry after Retry-After seconds.
The one error shape every endpoint answers with.
object
object
Stable snake_case code to branch on; see the error table.
For humans; may change.
object
Quote it when asking for help.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": { "additionalProperty": "example" }, "requestId": "example" }}internal_error: Something went wrong on Sonora’s side. Retry, and quote requestId if it persists.
The one error shape every endpoint answers with.
object
object
Stable snake_case code to branch on; see the error table.
For humans; may change.
object
Quote it when asking for help.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": { "additionalProperty": "example" }, "requestId": "example" }}Try it
Try it runs the reference's read endpoints, and this one changes data, so it needs an API key with the contacts:write scope. Create a key in Sonora under Settings → API and call it from your own code.