Introduction
This documentation aims to provide all the information you need to work with our API.
As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can retrieve your token by visiting your dashboard and clicking Team Settings > API Tokens.
Domains
Retrieve Domains.
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/domains?page=1&per_page=15" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/domains"
);
const params = {
"page": "1",
"per_page": "15",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/domains';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'per_page' => '15',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/domains'
params = {
'page': '1',
'per_page': '15',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"success": true,
"message": "Domains retrieved successfully.",
"data": [
{
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "example.com",
"description": "Primary sending domain",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 15,
"to": 1,
"total": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Retrieve Domain Feed.
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/domains/01ARZ3NDEKTSV4RRFFQ69G5FAV/feed?page=1&date=2026-07-29" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/domains/01ARZ3NDEKTSV4RRFFQ69G5FAV/feed"
);
const params = {
"page": "1",
"date": "2026-07-29",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/domains/01ARZ3NDEKTSV4RRFFQ69G5FAV/feed';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'date' => '2026-07-29',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/domains/01ARZ3NDEKTSV4RRFFQ69G5FAV/feed'
params = {
'page': '1',
'date': '2026-07-29',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"success": true,
"message": "Domain feed retrieved successfully.",
"data": [
{
"reported_at": "Mar 28, 2026 5:30PM",
"mail_stream": "Transactional Stream",
"domain": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "example.com",
"description": "Primary sending domain",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
},
"spf_domain": "example.com",
"seed_message": {
"mail_from_name": "Test Sender",
"mail_from": "sender@example.com",
"subject": "Seed message",
"preview_line": "This is a preview.",
"is_compliant": true,
"is_blocklisted": false,
"is_test": false
}
},
{
"message": "SPF is valid.",
"reported_at": "Mar 28, 2026 4:45PM",
"mail_stream": "Transactional Stream",
"domain": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "example.com",
"description": "Primary sending domain",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
},
"spf_domain": null,
"seed_message": null
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 2,
"per_page": 15,
"to": 15,
"total": 16
}
}
Example response (403):
{
"success": false,
"message": "Feed is only available for activated domains.",
"data": []
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Retrieve Domain.
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/domains/01ARZ3NDEKTSV4RRFFQ69G5FAV?start_date=2026-01-01&end_date=2026-03-31&related_ips_page=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"related_ips_page\": 16,
\"start_date\": \"2022-08-23\",
\"end_date\": \"2052-08-21\"
}"
const url = new URL(
"https://postmasterplus.app/api/v1/domains/01ARZ3NDEKTSV4RRFFQ69G5FAV"
);
const params = {
"start_date": "2026-01-01",
"end_date": "2026-03-31",
"related_ips_page": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"related_ips_page": 16,
"start_date": "2022-08-23",
"end_date": "2052-08-21"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/domains/01ARZ3NDEKTSV4RRFFQ69G5FAV';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'start_date' => '2026-01-01',
'end_date' => '2026-03-31',
'related_ips_page' => '1',
],
'json' => [
'related_ips_page' => 16,
'start_date' => '2022-08-23',
'end_date' => '2052-08-21',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/domains/01ARZ3NDEKTSV4RRFFQ69G5FAV'
payload = {
"related_ips_page": 16,
"start_date": "2022-08-23",
"end_date": "2052-08-21"
}
params = {
'start_date': '2026-01-01',
'end_date': '2026-03-31',
'related_ips_page': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()Example response (200):
{
"success": true,
"message": "Domain retrieved successfully.",
"data": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "example.com",
"description": "Primary sending domain",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z",
"logo": null,
"team": {
"name": "Owner Custom Team"
},
"mail_streams": [
{
"name": "Transactional Stream",
"type": "transactional",
"logo": "https://cdn.example.com/mail-streams/transactional.svg"
}
],
"configuration": {
"spf_domains": [],
"dkim_selectors": [],
"bimi_selectors": [],
"dmarc": {
"valid": true,
"record": "v=DMARC1; p=none;"
},
"mx": {
"valid": true,
"records": [
"mx1.example.com",
"mx2.example.com"
]
},
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
},
"alignment": {
"items": []
},
"settings": {
"estimated_message_volume": "1000",
"general_settings": {
"estimated_message_volume": "1000"
},
"shared_team_ids": [],
"mail_streams": [
{
"name": "Transactional Stream",
"type": "transactional",
"general_settings": []
}
],
"spf_domains": []
},
"compliance": {
"is_compliant": true,
"pre_send": {
"is_compliant": true,
"mail_streams": [
{
"name": "Transactional Stream",
"type": "transactional",
"is_compliant": true,
"checks": {
"ips": true,
"one_click_unsub": false,
"blocklists": true,
"spf": true,
"dkim": true,
"dmarc": true,
"tls": true
}
}
]
},
"post_send": {
"is_compliant": false,
"requirements": {
"spf": true,
"dkim": null,
"dmarc_alignment": null,
"dmarc_policy": false,
"encryption": null,
"user_reported_spam_rate": null,
"dns_records": null,
"one_click_unsubscribe": null,
"honor_unsubscribe": null,
"message_formatting": null
},
"subdomain": {
"domain_id": "mail.example.com",
"requirements": {
"spf": false,
"dkim": false,
"dmarc_alignment": null,
"dmarc_policy": null,
"encryption": null,
"user_reported_spam_rate": null,
"dns_records": null,
"one_click_unsubscribe": null,
"honor_unsubscribe": null,
"message_formatting": null
}
}
},
"mail_streams": [
{
"name": "Transactional Stream",
"type": "transactional",
"is_compliant": true,
"checks": {
"ips": true,
"one_click_unsub": false,
"blocklists": true,
"spf": true,
"dkim": true,
"dmarc": true,
"tls": true
}
}
]
},
"complaint_rate_averages": {
"periods": []
},
"related_ips": {
"date_range": {
"start_date": "2026-01-01 00:00:00",
"end_date": "2026-03-31 23:59:59"
},
"items": [
{
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "192.0.2.10",
"description": "Primary sending IP",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
}
],
"meta": {
"current_page": 1,
"last_page": 1,
"per_page": 10,
"total": 0
}
},
"blocklists": {
"is_blacklist": false,
"blacklist_count": 0,
"listed_count": 0,
"listed_muted": 0,
"listed_details": []
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
IPs
Retrieve IPs.
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/ips?page=1&per_page=15" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/ips"
);
const params = {
"page": "1",
"per_page": "15",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/ips';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'per_page' => '15',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/ips'
params = {
'page': '1',
'per_page': '15',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"success": true,
"message": "IPs retrieved successfully.",
"data": [
{
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "192.0.2.10",
"description": "Primary sending IP",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 15,
"to": 1,
"total": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Retrieve IP Feed.
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/ips/01ARZ3NDEKTSV4RRFFQ69G5FAV/feed?page=1&date=2026-07-29" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/ips/01ARZ3NDEKTSV4RRFFQ69G5FAV/feed"
);
const params = {
"page": "1",
"date": "2026-07-29",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/ips/01ARZ3NDEKTSV4RRFFQ69G5FAV/feed';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'date' => '2026-07-29',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/ips/01ARZ3NDEKTSV4RRFFQ69G5FAV/feed'
params = {
'page': '1',
'date': '2026-07-29',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"success": true,
"message": "IP feed retrieved successfully.",
"data": [
{
"reported_at": "Mar 28, 2026 5:30PM",
"mail_stream": "Transactional Stream",
"ip": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "192.0.2.10",
"description": "Primary sending IP",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
},
"seed_message": {
"mail_from_name": "Test Sender",
"mail_from": "sender@example.com",
"subject": "Seed message",
"preview_line": "This is a preview.",
"is_compliant": true,
"is_blocklisted": false,
"is_test": false
}
},
{
"message": "IP is compliant.",
"reported_at": "Mar 28, 2026 4:45PM",
"mail_stream": "Transactional Stream",
"ip": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "192.0.2.10",
"description": "Primary sending IP",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
},
"seed_message": null
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 2,
"per_page": 15,
"to": 15,
"total": 16
}
}
Example response (403):
{
"success": false,
"message": "Feed is only available for activated IPs.",
"data": []
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Retrieve IP.
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/ips/01ARZ3NDEKTSV4RRFFQ69G5FAV?start_date=2026-01-01&end_date=2026-03-31&related_domains_page=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"related_domains_page\": 16,
\"start_date\": \"2022-08-23\",
\"end_date\": \"2052-08-21\"
}"
const url = new URL(
"https://postmasterplus.app/api/v1/ips/01ARZ3NDEKTSV4RRFFQ69G5FAV"
);
const params = {
"start_date": "2026-01-01",
"end_date": "2026-03-31",
"related_domains_page": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"related_domains_page": 16,
"start_date": "2022-08-23",
"end_date": "2052-08-21"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/ips/01ARZ3NDEKTSV4RRFFQ69G5FAV';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'start_date' => '2026-01-01',
'end_date' => '2026-03-31',
'related_domains_page' => '1',
],
'json' => [
'related_domains_page' => 16,
'start_date' => '2022-08-23',
'end_date' => '2052-08-21',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/ips/01ARZ3NDEKTSV4RRFFQ69G5FAV'
payload = {
"related_domains_page": 16,
"start_date": "2022-08-23",
"end_date": "2052-08-21"
}
params = {
'start_date': '2026-01-01',
'end_date': '2026-03-31',
'related_domains_page': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()Example response (200):
{
"success": true,
"message": "IP retrieved successfully.",
"data": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "192.0.2.10",
"description": "Primary sending IP",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z",
"logo": null,
"team": {
"name": "Owner Custom Team"
},
"mail_streams": [
{
"name": "Transactional Stream",
"type": "transactional",
"logo": "https://cdn.example.com/mail-streams/transactional.svg"
}
],
"configuration": {
"rdns": "mail.example.com",
"fcrdns": true,
"rdns_summary": null,
"provider": {
"asn": {
"asn": "AS64500",
"name": "Example ASN"
},
"location": "37.7749,-122.4194"
},
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
},
"settings": {
"shared_team_ids": []
},
"compliance": {
"is_compliant": true,
"sender_score": 98,
"checks": {
"blocklists": true,
"fcrdns": true
}
},
"complaint_rate_averages": {
"periods": []
},
"inbox_placement_averages": {
"periods": []
},
"related_domains": {
"date_range": {
"start_date": "2026-01-01 00:00:00",
"end_date": "2026-03-31 23:59:59"
},
"items": [
{
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "example.com",
"description": "Primary sending domain",
"created_at": "2026-03-28T10:30:00.000000Z",
"updated_at": "2026-03-28T10:30:00.000000Z"
}
],
"meta": {
"current_page": 1,
"last_page": 1,
"per_page": 10,
"total": 0
}
},
"blocklists": {
"is_blacklist": false,
"blacklist_count": 0,
"listed_count": 0,
"listed_muted": 0,
"listed_details": []
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Intelligence
Single Email
Retrieve Single Email.
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/intelligence/single-emails/example@postmasterplus.com" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/intelligence/single-emails/example@postmasterplus.com"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/intelligence/single-emails/example@postmasterplus.com';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/intelligence/single-emails/example@postmasterplus.com'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"id": 27,
"email": "price.amber@example.org",
"status": null,
"created_at": "2026-07-29 17:26:20",
"updated_at": "2026-07-29 17:26:20"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Scan Single Email.
requires authentication
Example request:
curl --request POST \
"https://postmasterplus.app/api/v1/intelligence/single-emails/scan" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"example@postmasterplus.com\",
\"actions\": \"\\\"verification,activity,postal_append\\\"\"
}"
const url = new URL(
"https://postmasterplus.app/api/v1/intelligence/single-emails/scan"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "example@postmasterplus.com",
"actions": "\"verification,activity,postal_append\""
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/intelligence/single-emails/scan';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'example@postmasterplus.com',
'actions' => '"verification,activity,postal_append"',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/intelligence/single-emails/scan'
payload = {
"email": "example@postmasterplus.com",
"actions": "\"verification,activity,postal_append\""
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"id": 28,
"email": "rempel.chadrick@example.org",
"status": null,
"created_at": "2026-07-29 17:26:20",
"updated_at": "2026-07-29 17:26:20"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Single Email.
requires authentication
Example request:
curl --request DELETE \
"https://postmasterplus.app/api/v1/intelligence/single-emails/example@postmasterplus.com" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/intelligence/single-emails/example@postmasterplus.com"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/intelligence/single-emails/example@postmasterplus.com';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/intelligence/single-emails/example@postmasterplus.com'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200):
{
"message": "Single email deleted.",
"deleted": true
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Blocklists
Blocklist Scan
Start Blocklist Scan.
requires authentication
Example request:
curl --request POST \
"https://postmasterplus.app/api/v1/blocklist/scan/start" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"urls\": [
\"https:\\/\\/optipub.com\\/newsletter\",
\"optipub.com\",
\"8.8.8.8\"
],
\"follow_redirects\": true
}"
const url = new URL(
"https://postmasterplus.app/api/v1/blocklist/scan/start"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"urls": [
"https:\/\/optipub.com\/newsletter",
"optipub.com",
"8.8.8.8"
],
"follow_redirects": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/blocklist/scan/start';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'urls' => ['https://optipub.com/newsletter', 'optipub.com', '8.8.8.8'],
'follow_redirects' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/blocklist/scan/start'
payload = {
"urls": [
"https:\/\/optipub.com\/newsletter",
"optipub.com",
"8.8.8.8"
],
"follow_redirects": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"id": "01kyqekeet8me0d3j3zsmwpjjq",
"status": "pending",
"status_label": "Pending",
"unique_hosts_checked": 3,
"total_hosts_detected": null,
"urls_scanned": 0,
"urls_skipped": 0,
"blocklisted": false,
"credits_used": 0,
"error_message": "",
"started_at": null,
"completed_at": null
},
"success": true,
"message": "Blocklist check started successfully."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
data
object
id
string
The unique identifier for the blocklist check.
status
string
The status of the blocklist check. Example: pending, processing, completed, partially_completed, failed
pendingprocessingcompletedpartially_completedfailed
status_label
string
Human-friendly status label. Example: Pending, Processing, Completed, Partially Completed, Failed
unique_hosts_checked
integer
The number of unique hosts checked.
total_hosts_detected
integer
The number of hosts detected.
urls_scanned
integer
The number of URLs scanned.
urls_skipped
integer
The number of URLs skipped.
blocklisted
boolean
Whether the check is blocklisted.
credits_used
integer
The number of credits used.
error_message
string
The error message if the check failed.
started_at
string
The date and time the check started.
completed_at
string
The date and time the check completed.
results
object
Detailed results of the blocklist check. Only included when the check is completed and results are requested. Contains a data array with monitoring history items.
data array with monitoring history items.
data
string[]
Array of blacklist monitoring history items, each containing URL, redirect information, and blocklist status for each host checked.
url
string
The URL that was checked for blocklist status.
total_redirects
integer
Total number of redirects found for this URL.
redirect_urls
string[]
Array of redirect URLs encountered during the check.
hosts_checked
string[]
Array of hosts that were checked for blocklist status.
host
string
The hostname that was checked.
position
integer
The position of this host in the redirect chain.
blocklisted
boolean
Whether this host is blocklisted.
listed_details
string[]
Array of blocklist details for this host.
host
string
The blocklist hostname.
name
string
The name of the blocklist.
listed
boolean
Whether the host is listed on this blocklist.
details
string
Additional details about the blocklist status.
Retrieve Blocklist Scan Status.
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/blocklist/scan/status/01ARZ3NDEKTSV4RRFFQ69G5FAV" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/blocklist/scan/status/01ARZ3NDEKTSV4RRFFQ69G5FAV"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/blocklist/scan/status/01ARZ3NDEKTSV4RRFFQ69G5FAV';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/blocklist/scan/status/01ARZ3NDEKTSV4RRFFQ69G5FAV'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"id": "01kyqekefbyc35ftbcz3pq2gh7",
"status": "pending",
"status_label": "Pending",
"unique_hosts_checked": 4,
"total_hosts_detected": null,
"urls_scanned": 0,
"urls_skipped": 0,
"blocklisted": false,
"credits_used": 0,
"error_message": "",
"started_at": null,
"completed_at": null
},
"success": true,
"message": "Blocklist check status retrieved successfully."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
data
object
id
string
The unique identifier for the blocklist check.
status
string
The status of the blocklist check. Example: pending, processing, completed, partially_completed, failed
pendingprocessingcompletedpartially_completedfailed
status_label
string
Human-friendly status label. Example: Pending, Processing, Completed, Partially Completed, Failed
unique_hosts_checked
integer
The number of unique hosts checked.
total_hosts_detected
integer
The number of hosts detected.
urls_scanned
integer
The number of URLs scanned.
urls_skipped
integer
The number of URLs skipped.
blocklisted
boolean
Whether the check is blocklisted.
credits_used
integer
The number of credits used.
error_message
string
The error message if the check failed.
started_at
string
The date and time the check started.
completed_at
string
The date and time the check completed.
results
object
Detailed results of the blocklist check. Only included when the check is completed and results are requested. Contains a data array with monitoring history items.
data array with monitoring history items.
data
string[]
Array of blacklist monitoring history items, each containing URL, redirect information, and blocklist status for each host checked.
url
string
The URL that was checked for blocklist status.
total_redirects
integer
Total number of redirects found for this URL.
redirect_urls
string[]
Array of redirect URLs encountered during the check.
hosts_checked
string[]
Array of hosts that were checked for blocklist status.
host
string
The hostname that was checked.
position
integer
The position of this host in the redirect chain.
blocklisted
boolean
Whether this host is blocklisted.
listed_details
string[]
Array of blocklist details for this host.
host
string
The blocklist hostname.
name
string
The name of the blocklist.
listed
boolean
Whether the host is listed on this blocklist.
details
string
Additional details about the blocklist status.
Seedbox
GET api/v1/seedboxes
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/seedboxes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"active\",
\"client_reference\": \"b\",
\"per_page\": 22,
\"page\": 67
}"
const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"status": "active",
"client_reference": "b",
"per_page": 22,
"page": 67
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'status' => 'active',
'client_reference' => 'b',
'per_page' => 22,
'page' => 67,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes'
payload = {
"status": "active",
"client_reference": "b",
"per_page": 22,
"page": 67
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/seedboxes
requires authentication
Example request:
curl --request POST \
"https://postmasterplus.app/api/v1/seedboxes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"b\",
\"client_reference\": \"n\",
\"scan_blocklists\": false
}"
const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "b",
"client_reference": "n",
"scan_blocklists": false
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'b',
'client_reference' => 'n',
'scan_blocklists' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes'
payload = {
"name": "b",
"client_reference": "n",
"scan_blocklists": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/seedboxes/{seedbox}/messages
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"per_page\": 1,
\"page\": 22,
\"include_content\": \"1\"
}"
const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"per_page": 1,
"page": 22,
"include_content": "1"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'per_page' => 1,
'page' => 22,
'include_content' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages'
payload = {
"per_page": 1,
"page": 22,
"include_content": "1"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/seedboxes/{seedbox}/messages/{message}
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"include_content\": \"false\"
}"
const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"include_content": "false"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'include_content' => 'false',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc'
payload = {
"include_content": "false"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Request a one-click unsubscribe for the list behind a seedbox message.
requires authentication
Mirrors the web endpoint exactly: this action owns no unsubscribe logic
of its own, it resolves the message through the current team, delegates
to the shared action, and maps the returned outcome to a status through
{@see RequestUnsubscribeOutcome}, so every surface agrees on whether an
outcome counts as a success. A rate_limited outcome answers 429 and the same
request may succeed once the budget refills.
Example request:
curl --request POST \
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/unsubscribe" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/unsubscribe"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/unsubscribe';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/messages/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/unsubscribe'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/seedboxes/{seedbox_id}/subscriptions
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/seedboxes/architecto/subscriptions" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"state\": \"unsubscribe_failed\",
\"search\": \"b\",
\"sort\": \"oldest_seen_at\",
\"per_page\": 22,
\"page\": 67
}"
const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/architecto/subscriptions"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"state": "unsubscribe_failed",
"search": "b",
"sort": "oldest_seen_at",
"per_page": 22,
"page": 67
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/architecto/subscriptions';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'state' => 'unsubscribe_failed',
'search' => 'b',
'sort' => 'oldest_seen_at',
'per_page' => 22,
'page' => 67,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/architecto/subscriptions'
payload = {
"state": "unsubscribe_failed",
"search": "b",
"sort": "oldest_seen_at",
"per_page": 22,
"page": 67
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Request an unsubscribe from every actionable list matching the given filters.
requires authentication
Requests are paced, so this answers 202 with counts rather than a per-list outcome.
Example request:
curl --request POST \
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/subscriptions/unsubscribe-all" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"state\": \"mail_after_unsubscribe_within_threshold\",
\"search\": \"b\",
\"sort\": \"oldest_seen_at\"
}"
const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/subscriptions/unsubscribe-all"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"state": "mail_after_unsubscribe_within_threshold",
"search": "b",
"sort": "oldest_seen_at"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/subscriptions/unsubscribe-all';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'state' => 'mail_after_unsubscribe_within_threshold',
'search' => 'b',
'sort' => 'oldest_seen_at',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/subscriptions/unsubscribe-all'
payload = {
"state": "mail_after_unsubscribe_within_threshold",
"search": "b",
"sort": "oldest_seen_at"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/seedboxes/{seedbox}/subscriptions/{subscription}/unsubscribe
requires authentication
Example request:
curl --request POST \
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/subscriptions/564/unsubscribe" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/subscriptions/564/unsubscribe"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/subscriptions/564/unsubscribe';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6/subscriptions/564/unsubscribe'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/seedboxes/{seedbox}
requires authentication
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update editable seedbox metadata without changing its address or lifecycle.
requires authentication
Example request:
curl --request PATCH \
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Transactional seedbox\",
\"client_reference\": \"campaign-2026-07\",
\"scan_blocklists\": true
}"
const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Transactional seedbox",
"client_reference": "campaign-2026-07",
"scan_blocklists": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6';
$response = $client->patch(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Transactional seedbox',
'client_reference' => 'campaign-2026-07',
'scan_blocklists' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58C6f7nnFCJ9M6rjyc6rTKMzn6'
payload = {
"name": "Transactional seedbox",
"client_reference": "campaign-2026-07",
"scan_blocklists": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"id": "01kyqekejn58n2kmn1d4tf9c3t",
"team_id": 351,
"name": null,
"client_reference": null,
"status": "active",
"address": "ac141390ef87d2ce718fa457d3ef2322@b-01kyqekejn58n2kmn1d4tf9c3v.seeds.dev.optipub.com",
"scan_blocklists": false,
"receive_credits_per_message": 1,
"messages_count": 0,
"rejected_insufficient_credit_count": 0,
"unresolved_insufficient_credit_rejection_count": 0,
"accepting_messages": true,
"can_delete": false,
"revoked_at": null,
"last_received_at": null,
"last_rejected_insufficient_credit_at": null,
"created_at": "2026-07-29T17:26:21+00:00"
},
"success": true,
"message": "Seedbox updated successfully."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
DELETE api/v1/seedboxes/{seedbox}
requires authentication
Example request:
curl --request DELETE \
"https://postmasterplus.app/api/v1/seedboxes/58" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
DELETE api/v1/seedboxes/{seedbox}/delete
requires authentication
Example request:
curl --request DELETE \
"https://postmasterplus.app/api/v1/seedboxes/58/delete" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/seedboxes/58/delete"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/seedboxes/58/delete';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/seedboxes/58/delete'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Spam Identifiers
Retrieve Spam Identifiers.
requires authentication
List all Gmail Postmaster Tools v2 spam (feedback loop) identifiers reported for accessible domains in the given date range, along with each identifier's average complaint rate across that window.
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/spam-identifiers?domain_id=01ARZ3NDEKTSV4RRFFQ69G5FAV&page=1&start_date=2026-01-22&end_date=2026-04-22" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/spam-identifiers"
);
const params = {
"domain_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"page": "1",
"start_date": "2026-01-22",
"end_date": "2026-04-22",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/spam-identifiers';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'domain_id' => '01ARZ3NDEKTSV4RRFFQ69G5FAV',
'page' => '1',
'start_date' => '2026-01-22',
'end_date' => '2026-04-22',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/spam-identifiers'
params = {
'domain_id': '01ARZ3NDEKTSV4RRFFQ69G5FAV',
'page': '1',
'start_date': '2026-01-22',
'end_date': '2026-04-22',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"success": true,
"message": "Spam identifiers retrieved successfully.",
"data": [
{
"domain": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "example.com"
},
"identifier": "66189376",
"sample_count": 57,
"average_complaint_rate": 0.12,
"min_complaint_rate": 0.05,
"max_complaint_rate": 0.31
},
{
"domain": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FBG",
"value": "example.net"
},
"identifier": "66189799",
"sample_count": 40,
"average_complaint_rate": 0.05,
"min_complaint_rate": 0.01,
"max_complaint_rate": 0.14
}
],
"meta": {
"current_page": 1,
"last_page": 1,
"per_page": 25,
"total": 2
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Retrieve Spam Identifier.
requires authentication
Return the daily Gmail complaint rate time series for a single spam (feedback loop) identifier across accessible domains, plus the aggregate average over the selected date range for each domain.
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/spam-identifiers/66189376?domain_id=01ARZ3NDEKTSV4RRFFQ69G5FAV&start_date=2026-01-22&end_date=2026-04-22" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/spam-identifiers/66189376"
);
const params = {
"domain_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"start_date": "2026-01-22",
"end_date": "2026-04-22",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/spam-identifiers/66189376';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'domain_id' => '01ARZ3NDEKTSV4RRFFQ69G5FAV',
'start_date' => '2026-01-22',
'end_date' => '2026-04-22',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/spam-identifiers/66189376'
params = {
'domain_id': '01ARZ3NDEKTSV4RRFFQ69G5FAV',
'start_date': '2026-01-22',
'end_date': '2026-04-22',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"success": true,
"message": "Spam identifier retrieved successfully.",
"data": [
{
"identifier": "66189376",
"domain": {
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"value": "example.com"
},
"date_range": {
"start_date": "2026-01-22",
"end_date": "2026-04-22"
},
"aggregate": {
"average_complaint_rate": 0.12,
"sample_count": 57
},
"time_series": [
{
"date": "2026-01-22",
"complaint_rate": 0.1
},
{
"date": "2026-01-23",
"complaint_rate": null
}
]
}
]
}
Example response (404):
{
"success": false,
"message": "Spam identifier not found for accessible domains in the selected date range.",
"data": []
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Tools
Screenshot
Take Screenshot.
requires authentication
Take a screenshot of a URL or HTML content.
Example request:
curl --request POST \
"https://postmasterplus.app/api/v1/screenshot/take" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"url\": \"\\\"https:\\/\\/example.com\\\"\",
\"width\": 1280,
\"height\": 720,
\"format\": \"\\\"png\\\"\",
\"device_scale\": 1
}"
const url = new URL(
"https://postmasterplus.app/api/v1/screenshot/take"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"url": "\"https:\/\/example.com\"",
"width": 1280,
"height": 720,
"format": "\"png\"",
"device_scale": 1
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/screenshot/take';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'url' => '"https://example.com"',
'width' => 1280,
'height' => 720,
'format' => '"png"',
'device_scale' => 1,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/screenshot/take'
payload = {
"url": "\"https:\/\/example.com\"",
"width": 1280,
"height": 720,
"format": "\"png\"",
"device_scale": 1
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"id": "01kyqekeg52k4bmaxvyp6x7g5b",
"url": "https://assets.optipub.com/postmaster/screenshots/01kyqekefyzqag5hbbx98dt2qp/01kyqekeg52k4bmaxvyp6x7g5b.png",
"format": "png",
"width": 1024,
"height": 600,
"device_scale": 3,
"credits_used": 1,
"started_at": "2026-07-04T11:27:45+00:00",
"completed_at": "2026-07-04T11:27:58+00:00",
"created_at": "2026-07-29T17:26:20+00:00"
},
"success": true,
"message": "Screenshot taken successfully."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
data
object
id
string
The unique identifier for the screenshot.
url
string
The URL of the screenshot image.
format
string
The format of the screenshot image. Example: png, jpeg
width
integer
The width of the screenshot in pixels.
height
integer
The height of the screenshot in pixels.
device_scale
integer
The device scale factor used (1-3). Higher values produce sharper images.
credits_used
integer
The number of credits used for this screenshot.
started_at
string
The date and time when the screenshot capture started.
completed_at
string
The date and time when the screenshot capture completed.
created_at
string
The date and time the screenshot was created.
List Screenshots.
requires authentication
Retrieve a paginated list of screenshots for the current team.
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/screenshots?per_page=15&page=1&sort=-created_at" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/screenshots"
);
const params = {
"per_page": "15",
"page": "1",
"sort": "-created_at",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/screenshots';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'per_page' => '15',
'page' => '1',
'sort' => '-created_at',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/screenshots'
params = {
'per_page': '15',
'page': '1',
'sort': '-created_at',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"success": true,
"message": "Screenshots retrieved successfully.",
"data": [
{
"id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"url": "https://assets.optipub.com/postmaster/screenshots/01arz3ndektsv4rrffq69g5fav/01arz3ndektsv4rrffq69g5fav.png",
"format": "png",
"width": 1280,
"height": 720,
"credits_used": 1,
"created_at": "2024-01-15T10:30:00Z"
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"per_page": 15,
"to": 15,
"total": 75
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Screenshot.
requires authentication
Retrieve details of a specific screenshot by its ID.
Example request:
curl --request GET \
--get "https://postmasterplus.app/api/v1/screenshot/01ARZ3NDEKTSV4RRFFQ69G5FAV" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://postmasterplus.app/api/v1/screenshot/01ARZ3NDEKTSV4RRFFQ69G5FAV"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/screenshot/01ARZ3NDEKTSV4RRFFQ69G5FAV';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://postmasterplus.app/api/v1/screenshot/01ARZ3NDEKTSV4RRFFQ69G5FAV'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"id": "01kyqekegxmsngvqyn7djvv4vf",
"url": "https://assets.optipub.com/postmaster/screenshots/01kyqekegqvdmrxcmytk25w8y0/01kyqekegxmsngvqyn7djvv4vf.png",
"format": "png",
"width": 800,
"height": 600,
"device_scale": 2,
"credits_used": 1,
"started_at": "2026-07-20T08:08:18+00:00",
"completed_at": "2026-07-20T08:08:48+00:00",
"created_at": "2026-07-29T17:26:20+00:00"
},
"success": true,
"message": "Screenshot retrieved successfully."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
data
object
id
string
The unique identifier for the screenshot.
url
string
The URL of the screenshot image.
format
string
The format of the screenshot image. Example: png, jpeg
width
integer
The width of the screenshot in pixels.
height
integer
The height of the screenshot in pixels.
device_scale
integer
The device scale factor used (1-3). Higher values produce sharper images.
credits_used
integer
The number of credits used for this screenshot.
started_at
string
The date and time when the screenshot capture started.
completed_at
string
The date and time when the screenshot capture completed.
created_at
string
The date and time the screenshot was created.