List individual outreach messages
curl --request GET \
--url https://api.snowseo.com/v3/outreach/outbox/messages \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/outreach/outbox/messages"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.snowseo.com/v3/outreach/outbox/messages', 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.snowseo.com/v3/outreach/outbox/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.snowseo.com/v3/outreach/outbox/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.snowseo.com/v3/outreach/outbox/messages")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/outreach/outbox/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"truncated": true,
"messages": [
{
"id": "<string>",
"conversationId": "<string>",
"direction": "<string>",
"subject": "<string>",
"body": "<string>",
"fromEmail": "<string>",
"fromName": "<string>",
"toEmail": "<string>",
"toName": "<string>",
"domain": "<string>",
"conversationStatus": "<string>",
"sentAt": "<string>"
}
]
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Email sending
List individual messages
Every message sent and received, one row each.
GET
/
v3
/
outreach
/
outbox
/
messages
List individual outreach messages
curl --request GET \
--url https://api.snowseo.com/v3/outreach/outbox/messages \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/outreach/outbox/messages"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.snowseo.com/v3/outreach/outbox/messages', 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.snowseo.com/v3/outreach/outbox/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.snowseo.com/v3/outreach/outbox/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.snowseo.com/v3/outreach/outbox/messages")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/outreach/outbox/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"truncated": true,
"messages": [
{
"id": "<string>",
"conversationId": "<string>",
"direction": "<string>",
"subject": "<string>",
"body": "<string>",
"fromEmail": "<string>",
"fromName": "<string>",
"toEmail": "<string>",
"toName": "<string>",
"domain": "<string>",
"conversationStatus": "<string>",
"sentAt": "<string>"
}
]
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Every message sent and received, one row each, grouped by conversation (conversations in descending ID order, messages oldest first inside each). Unsent drafts are excluded. This is the message-level view; the conversation list groups the same data and is usually the better read. Returns 25 messages per page by default; pass
page/pageSize, or pageSize=all for every message. search matches the subject, sender and recipient name or email, and prospect domain before paging.
Inbound mail only exists for mailboxes connected with reading settings. Mailboxes connected through an OAuth provider are send-only, so an empty reply list is not necessarily a bug.
Authorizations
bearerAuthapiKey
Your SnowSEO API key (sk_...).
Query Parameters
1-based page. Default 1.
Rows per page (max 1000), or 'all'. Every response reports total and totalPages.
Optional row limit. Use pageSize=all for a complete export.
Required range:
x >= 1Case-insensitive text matched against the subject, sender and recipient name or email, and prospect domain. Applied before paging.
Was this page helpful?

