MENU navbar-image

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.

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": 124,
        "email": "eloisa.harber@example.com",
        "status": null,
        "created_at": "2026-01-15 14:15:16",
        "updated_at": "2026-01-15 14:15:16"
    }
}
 

Request      

GET api/v1/intelligence/single-emails/{email}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

email   string     

The email address to retrieve. Example: example@postmasterplus.com

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()

Request      

POST api/v1/intelligence/single-emails/scan

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

The email address to scan. Example: example@postmasterplus.com

actions   string     

The actions in comma separated format to perform. Example: "verification,activity,postal_append"

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
}
 

Request      

DELETE api/v1/intelligence/single-emails/{email}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

email   string     

The email address to delete. Example: example@postmasterplus.com

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\",
        \"https:\\/\\/postmasterplus.com\"
    ],
    \"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",
        "https:\/\/postmasterplus.com"
    ],
    "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',
                'https://postmasterplus.com',
            ],
            '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",
        "https:\/\/postmasterplus.com"
    ],
    "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": "01kf105dbhcgas62jvnk1h5x0j",
        "status": "pending",
        "unique_hosts_checked": 1,
        "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."
}
 

Example response (200):


{
    "success": true,
    "message": "Blocklist check started successfully.",
    "data": {
        "id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
        "status": "pending",
        "unique_hosts_checked": 0,
        "total_hosts_detected": null,
        "urls_scanned": 0,
        "urls_skipped": 0,
        "blocklisted": false,
        "credits_used": 1,
        "error_message": "",
        "started_at": "2024-01-15T10:30:00Z",
        "completed_at": null
    }
}
 

Request      

POST api/v1/blocklist/scan/start

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

urls   string[]     

Array of URLs to scan (minimum 1 URL, maximum 100 URLs).

*   string     

Valid URL string (maximum 10000 characters). Example: "https://optipub.com"

follow_redirects   boolean  optional    

optional Whether to follow redirects and scan all hosts in the redirect chain. Defaults to true. When false, only the hosts from the original URLs will be scanned. Example: true

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

Must be one of:
  • 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   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.

success   boolean     

Whether the request was successful.

message   string     

The message of the response.

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": "01kf105dc1afatp94war8rek5q",
        "status": "pending",
        "unique_hosts_checked": 1,
        "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."
}
 

Example response (200):


{
    "success": true,
    "message": "Blocklist check status retrieved successfully.",
    "data": {
        "id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
        "status": "completed",
        "unique_hosts_checked": 5,
        "total_hosts_detected": 3,
        "urls_scanned": 2,
        "urls_skipped": 0,
        "blocklisted": true,
        "credits_used": 1,
        "error_message": "",
        "started_at": "2024-01-15T10:30:00Z",
        "completed_at": "2024-01-15T10:35:00Z",
        "results": {
            "data": [
                {
                    "url": "https://example.com",
                    "total_redirects": 2,
                    "redirect_urls": [
                        "https://example.com/redirect1",
                        "https://example.com/redirect2"
                    ],
                    "hosts_checked": [
                        {
                            "host": "example.com",
                            "position": 1,
                            "blocklisted": true,
                            "listed_details": [
                                {
                                    "host": "example.com",
                                    "name": "Spamhaus ZEN",
                                    "listed": true,
                                    "details": "Listed on Spamhaus ZEN"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    }
}
 

Request      

GET api/v1/blocklist/scan/status/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ULID of the blocklist check. Example: 01ARZ3NDEKTSV4RRFFQ69G5FAV

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

Must be one of:
  • 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   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.

success   boolean     

Whether the request was successful.

message   string     

The message of the response.

Endpoints

POST api/v1/data-sources/report/validity

requires authentication

Example request:
curl --request POST \
    "https://postmasterplus.app/api/v1/data-sources/report/validity" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"From\": \"consequatur\",
    \"Headers\": [],
    \"Attachments\": [],
    \"ToFull\": []
}"
const url = new URL(
    "https://postmasterplus.app/api/v1/data-sources/report/validity"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "From": "consequatur",
    "Headers": [],
    "Attachments": [],
    "ToFull": []
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://postmasterplus.app/api/v1/data-sources/report/validity';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'From' => 'consequatur',
            'Headers' => [],
            'Attachments' => [],
            'ToFull' => [],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://postmasterplus.app/api/v1/data-sources/report/validity'
payload = {
    "From": "consequatur",
    "Headers": [],
    "Attachments": [],
    "ToFull": []
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Request      

POST api/v1/data-sources/report/validity

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

From   string     

Example: consequatur

Headers   object     
Attachments   object     
ToFull   object     

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": "01kf105dcszpsgya8k94nadyk8",
        "url": "https://assets.optipub.com/postmaster/screenshots/01kf105dch8rxtaf1jdf7tqg8s/01kf105dcszpsgya8k94nadyk8.png",
        "format": "png",
        "width": 1280,
        "height": 600,
        "device_scale": 2,
        "credits_used": 1,
        "started_at": "2026-01-15T00:24:50+00:00",
        "completed_at": "2026-01-15T00:24:57+00:00",
        "created_at": "2026-01-15T14:15:16+00:00"
    },
    "success": true,
    "message": "Screenshot taken successfully."
}
 

Example response (200):


{
    "success": true,
    "message": "Screenshot taken 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"
    }
}
 

Request      

POST api/v1/screenshot/take

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

url   string  optional    

URL to screenshot (required if html is not provided). Example: "https://example.com"

html   string  optional    

HTML content to screenshot (required if url is not provided).

width   integer  optional    

optional Viewport width in pixels (320-1920). Defaults to 1280. Example: 1280

height   integer  optional    

optional Viewport height in pixels (240-1080). Defaults to 720. Example: 720

format   string  optional    

optional Image format (png, jpeg, or webp). Defaults to png. Example: "png"

device_scale   integer  optional    

optional Device scale factor for higher resolution (1-3). Defaults to 1 for retina-quality images. Example: 1

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.

success   boolean     

Whether the request was successful.

message   string     

The message of the response.

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" \
    --data "{
    \"per_page\": 21,
    \"page\": 45,
    \"sort\": \"format\"
}"
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",
};

let body = {
    "per_page": 21,
    "page": 45,
    "sort": "format"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).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',
        ],
        'json' => [
            'per_page' => 21,
            'page' => 45,
            'sort' => 'format',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://postmasterplus.app/api/v1/screenshots'
payload = {
    "per_page": 21,
    "page": 45,
    "sort": "format"
}
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, json=payload, 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
    }
}
 

Request      

GET api/v1/screenshots

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

The number of screenshots per page (1-100). Defaults to 15. Example: 15

page   integer  optional    

The page number. Example: 1

sort   string  optional    

Sort order. Use - prefix for descending. Options: created_at, -created_at, format, -format. Defaults to -created_at. Example: -created_at

Body Parameters

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 21

page   integer  optional    

Must be at least 1. Example: 45

sort   string  optional    

Example: format

Must be one of:
  • created_at
  • -created_at
  • format
  • -format

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": "01kf105ddn4zxjyyg96wgyzxh6",
        "url": "https://assets.optipub.com/postmaster/screenshots/01kf105ddfq7shp5g2yz52kv13/01kf105ddn4zxjyyg96wgyzxh6.jpg",
        "format": "jpeg",
        "width": 1280,
        "height": 1080,
        "device_scale": 1,
        "credits_used": 1,
        "started_at": "2025-12-31T08:41:27+00:00",
        "completed_at": "2025-12-31T08:41:37+00:00",
        "created_at": "2026-01-15T14:15:16+00:00"
    },
    "success": true,
    "message": "Screenshot retrieved successfully."
}
 

Example response (200):


{
    "success": true,
    "message": "Screenshot 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"
    }
}
 

Request      

GET api/v1/screenshot/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ULID of the screenshot. Example: 01ARZ3NDEKTSV4RRFFQ69G5FAV

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.

success   boolean     

Whether the request was successful.

message   string     

The message of the response.