Add emails to the unsubscribe list
curl --request POST \
--url https://api.attio.com/v2/sequences/unsubscribed_emails \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": {
"email_addresses": [
"person@example.com"
]
}
}
'import requests
url = "https://api.attio.com/v2/sequences/unsubscribed_emails"
payload = { "data": { "email_addresses": ["person@example.com"] } }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({data: {email_addresses: ['person@example.com']}})
};
fetch('https://api.attio.com/v2/sequences/unsubscribed_emails', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.attio.com/v2/sequences/unsubscribed_emails",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'email_addresses' => [
'person@example.com'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.attio.com/v2/sequences/unsubscribed_emails"
payload := strings.NewReader("{\n \"data\": {\n \"email_addresses\": [\n \"person@example.com\"\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.attio.com/v2/sequences/unsubscribed_emails")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"email_addresses\": [\n \"person@example.com\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attio.com/v2/sequences/unsubscribed_emails")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"email_addresses\": [\n \"person@example.com\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"email_address": "person@example.com",
"created_at": "2026-01-02T15:04:05.000Z"
}
]
}{
"statusCode": 400,
"type": "invalid_request_error",
"code": "validation_type",
"message": "Body payload validation error."
}Sequences
Add emails to the unsubscribe list
Adds email addresses to the workspace’s sequence unsubscribe list. Email addresses on the unsubscribe list cannot be enrolled in any sequence, and any of their active sequence runs are exited. Email addresses that are already on the unsubscribe list are ignored, so this endpoint is safe to retry.
This endpoint is in beta. We will aim to avoid breaking changes, but small updates may be made as we roll out to more users.
Required scopes: sequence_unsubscribe:read-write.
Supported token levels: workspace, user.
POST
/
v2
/
sequences
/
unsubscribed_emails
Add emails to the unsubscribe list
curl --request POST \
--url https://api.attio.com/v2/sequences/unsubscribed_emails \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": {
"email_addresses": [
"person@example.com"
]
}
}
'import requests
url = "https://api.attio.com/v2/sequences/unsubscribed_emails"
payload = { "data": { "email_addresses": ["person@example.com"] } }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({data: {email_addresses: ['person@example.com']}})
};
fetch('https://api.attio.com/v2/sequences/unsubscribed_emails', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.attio.com/v2/sequences/unsubscribed_emails",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'email_addresses' => [
'person@example.com'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.attio.com/v2/sequences/unsubscribed_emails"
payload := strings.NewReader("{\n \"data\": {\n \"email_addresses\": [\n \"person@example.com\"\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.attio.com/v2/sequences/unsubscribed_emails")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"email_addresses\": [\n \"person@example.com\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attio.com/v2/sequences/unsubscribed_emails")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"email_addresses\": [\n \"person@example.com\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"email_address": "person@example.com",
"created_at": "2026-01-02T15:04:05.000Z"
}
]
}{
"statusCode": 400,
"type": "invalid_request_error",
"code": "validation_type",
"message": "Body payload validation error."
}Authorizations
This API uses OAuth 2.0 with the authorization code grant flow.
FlowAuthorization Code
- Authorization URL
- https://app.attio.com/authorize
- Token URL
- https://app.attio.com/oauth/token
Scopes1
sequence_unsubscribe:read-write
View, and optionally add to, the sequence unsubscribe list.
Body
application/json
Show child attributes
Show child attributes
Response
Success
Success
Show child attributes
Show child attributes
Was this page helpful?