openapi: 3.0.3
info:
title: 'Postmaster+ API Documentation'
description: ''
version: 1.0.0
servers:
-
url: 'https://postmasterplus.app'
tags:
-
name: Domains
description: ''
-
name: IPs
description: ''
-
name: Intelligence
description: ''
-
name: Blocklists
description: ''
-
name: 'Spam Identifiers'
description: ''
-
name: Tools
description: ''
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'You can retrieve your token by visiting your dashboard and clicking Team Settings > API Tokens.'
security:
-
default: []
paths:
/api/v1/domains:
get:
summary: 'Retrieve Domains.'
operationId: retrieveDomains
description: ''
parameters:
-
in: query
name: page
description: 'The page number. Must be at least 1.'
example: 1
required: false
schema:
type: integer
description: 'The page number. Must be at least 1.'
example: 1
-
in: query
name: per_page
description: 'The number of domains per page. Must be at least 1. Must not be greater than 100.'
example: 15
required: false
schema:
type: integer
description: 'The number of domains per page. Must be at least 1. Must not be greater than 100.'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Domains retrieved successfully.'
data:
type: array
example:
-
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'
items:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: example.com
description:
type: string
example: 'Primary sending domain'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
per_page:
type: integer
example: 15
to:
type: integer
example: 1
total:
type: integer
example: 1
tags:
- Domains
'/api/v1/domains/{id}/feed':
get:
summary: 'Retrieve Domain Feed.'
operationId: retrieveDomainFeed
description: ''
parameters:
-
in: query
name: page
description: 'The page number for paginated feed results. Must be at least 1.'
example: 1
required: false
schema:
type: integer
description: 'The page number for paginated feed results. Must be at least 1.'
example: 1
nullable: true
-
in: query
name: date
description: 'Filter feed items reported on or after this date, up to today. Must not be older than 90 days from today. Must be a valid date in the format Y-m-d.'
example: '2026-04-24'
required: false
schema:
type: string
description: 'Filter feed items reported on or after this date, up to today. Must not be older than 90 days from today. Must be a valid date in the format Y-m-d.'
example: '2026-04-24'
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Domain feed retrieved successfully.'
data:
type: array
example:
-
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
items:
type: object
properties:
reported_at:
type: string
example: 'Mar 28, 2026 5:30PM'
mail_stream:
type: string
example: 'Transactional Stream'
domain:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: example.com
description:
type: string
example: 'Primary sending domain'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
spf_domain:
type: string
example: example.com
seed_message:
type: object
properties:
mail_from_name:
type: string
example: 'Test Sender'
mail_from:
type: string
example: sender@example.com
subject:
type: string
example: 'Seed message'
preview_line:
type: string
example: 'This is a preview.'
is_compliant:
type: boolean
example: true
is_blocklisted:
type: boolean
example: false
is_test:
type: boolean
example: false
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 2
per_page:
type: integer
example: 15
to:
type: integer
example: 15
total:
type: integer
example: 16
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Feed is only available for activated domains.'
data: []
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Feed is only available for activated domains.'
data:
type: array
example: []
tags:
- Domains
parameters:
-
in: path
name: id
description: 'The ULID of the domain.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
required: true
schema:
type: string
'/api/v1/domains/{id}':
get:
summary: 'Retrieve Domain.'
operationId: retrieveDomain
description: ''
parameters:
-
in: query
name: start_date
description: 'Filter related IPs from this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-01-01'
required: false
schema:
type: string
description: 'Filter related IPs from this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-01-01'
-
in: query
name: end_date
description: 'Filter related IPs until this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-03-31'
required: false
schema:
type: string
description: 'Filter related IPs until this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-03-31'
-
in: query
name: related_ips_page
description: 'The page number for related IP results.'
example: 1
required: false
schema:
type: integer
description: 'The page number for related IP results.'
example: 1
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Domain retrieved successfully.'
data:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: example.com
description:
type: string
example: 'Primary sending domain'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
logo:
type: string
example: null
nullable: true
team:
type: object
properties:
name:
type: string
example: 'Owner Custom Team'
mail_streams:
type: array
example:
-
name: 'Transactional Stream'
type: transactional
logo: 'https://cdn.example.com/mail-streams/transactional.svg'
items:
type: object
properties:
name:
type: string
example: 'Transactional Stream'
type:
type: string
example: transactional
logo:
type: string
example: 'https://cdn.example.com/mail-streams/transactional.svg'
configuration:
type: object
properties:
spf_domains:
type: array
example: []
dkim_selectors:
type: array
example: []
bimi_selectors:
type: array
example: []
dmarc:
type: object
properties:
valid:
type: boolean
example: true
record:
type: string
example: 'v=DMARC1; p=none;'
mx:
type: object
properties:
valid:
type: boolean
example: true
records:
type: array
example:
- mx1.example.com
- mx2.example.com
items:
type: string
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
alignment:
type: object
properties:
items:
type: array
example: []
settings:
type: object
properties:
estimated_message_volume:
type: string
example: '1000'
general_settings:
type: object
properties:
estimated_message_volume:
type: string
example: '1000'
shared_team_ids:
type: array
example: []
mail_streams:
type: array
example:
-
name: 'Transactional Stream'
type: transactional
general_settings: []
items:
type: object
properties:
name:
type: string
example: 'Transactional Stream'
type:
type: string
example: transactional
general_settings:
type: array
example: []
spf_domains:
type: array
example: []
compliance:
type: object
properties:
is_compliant:
type: boolean
example: true
pre_send:
type: object
properties:
is_compliant:
type: boolean
example: true
mail_streams:
type: array
example:
-
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
items:
type: object
properties:
name:
type: string
example: 'Transactional Stream'
type:
type: string
example: transactional
is_compliant:
type: boolean
example: true
checks:
type: object
properties: { ips: { type: boolean, example: true }, one_click_unsub: { type: boolean, example: false }, blocklists: { type: boolean, example: true }, spf: { type: boolean, example: true }, dkim: { type: boolean, example: true }, dmarc: { type: boolean, example: true }, tls: { type: boolean, example: true } }
post_send:
type: object
properties:
is_compliant:
type: boolean
example: false
requirements:
type: object
properties:
spf:
type: boolean
example: true
dkim:
type: string
example: null
nullable: true
dmarc_alignment:
type: string
example: null
nullable: true
dmarc_policy:
type: boolean
example: false
encryption:
type: string
example: null
nullable: true
user_reported_spam_rate:
type: string
example: null
nullable: true
dns_records:
type: string
example: null
nullable: true
one_click_unsubscribe:
type: string
example: null
nullable: true
honor_unsubscribe:
type: string
example: null
nullable: true
message_formatting:
type: string
example: null
nullable: true
subdomain:
type: object
properties:
domain_id:
type: string
example: mail.example.com
requirements:
type: object
properties:
spf: { type: boolean, example: false }
dkim: { type: boolean, example: false }
dmarc_alignment: { type: string, example: null, nullable: true }
dmarc_policy: { type: string, example: null, nullable: true }
encryption: { type: string, example: null, nullable: true }
user_reported_spam_rate: { type: string, example: null, nullable: true }
dns_records: { type: string, example: null, nullable: true }
one_click_unsubscribe: { type: string, example: null, nullable: true }
honor_unsubscribe: { type: string, example: null, nullable: true }
message_formatting: { type: string, example: null, nullable: true }
mail_streams:
type: array
example:
-
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
items:
type: object
properties:
name:
type: string
example: 'Transactional Stream'
type:
type: string
example: transactional
is_compliant:
type: boolean
example: true
checks:
type: object
properties:
ips:
type: boolean
example: true
one_click_unsub:
type: boolean
example: false
blocklists:
type: boolean
example: true
spf:
type: boolean
example: true
dkim:
type: boolean
example: true
dmarc:
type: boolean
example: true
tls:
type: boolean
example: true
complaint_rate_averages:
type: object
properties:
periods:
type: array
example: []
related_ips:
type: object
properties:
date_range:
type: object
properties:
start_date:
type: string
example: '2026-01-01 00:00:00'
end_date:
type: string
example: '2026-03-31 23:59:59'
items:
type: array
example:
-
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'
items:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: 192.0.2.10
description:
type: string
example: 'Primary sending IP'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
meta:
type: object
properties:
current_page:
type: integer
example: 1
last_page:
type: integer
example: 1
per_page:
type: integer
example: 10
total:
type: integer
example: 0
blocklists:
type: object
properties:
is_blacklist:
type: boolean
example: false
blacklist_count:
type: integer
example: 0
listed_count:
type: integer
example: 0
listed_muted:
type: integer
example: 0
listed_details:
type: array
example: []
tags:
- Domains
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
related_ips_page:
type: integer
description: 'Must be at least 1.'
example: 16
nullable: true
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d. Must be a date before or equal to today. Must be a date before or equal to end_date.'
example: '2022-05-19'
nullable: true
end_date:
type: string
description: 'Must be a valid date in the format Y-m-d. Must be a date before or equal to today. Must be a date after or equal to start_date.'
example: '2052-05-17'
nullable: true
parameters:
-
in: path
name: id
description: 'The ULID of the domain.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
required: true
schema:
type: string
/api/v1/ips:
get:
summary: 'Retrieve IPs.'
operationId: retrieveIPs
description: ''
parameters:
-
in: query
name: page
description: 'The page number. Must be at least 1.'
example: 1
required: false
schema:
type: integer
description: 'The page number. Must be at least 1.'
example: 1
-
in: query
name: per_page
description: 'The number of IPs per page. Must be at least 1. Must not be greater than 100.'
example: 15
required: false
schema:
type: integer
description: 'The number of IPs per page. Must be at least 1. Must not be greater than 100.'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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
properties:
success:
type: boolean
example: true
message:
type: string
example: 'IPs retrieved successfully.'
data:
type: array
example:
-
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'
items:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: 192.0.2.10
description:
type: string
example: 'Primary sending IP'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
per_page:
type: integer
example: 15
to:
type: integer
example: 1
total:
type: integer
example: 1
tags:
- IPs
'/api/v1/ips/{id}/feed':
get:
summary: 'Retrieve IP Feed.'
operationId: retrieveIPFeed
description: ''
parameters:
-
in: query
name: page
description: 'The page number for paginated feed results. Must be at least 1.'
example: 1
required: false
schema:
type: integer
description: 'The page number for paginated feed results. Must be at least 1.'
example: 1
nullable: true
-
in: query
name: date
description: 'Filter feed items reported on or after this date, up to today. Must not be older than 90 days from today. Must be a valid date in the format Y-m-d.'
example: '2026-04-24'
required: false
schema:
type: string
description: 'Filter feed items reported on or after this date, up to today. Must not be older than 90 days from today. Must be a valid date in the format Y-m-d.'
example: '2026-04-24'
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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
properties:
success:
type: boolean
example: true
message:
type: string
example: 'IP feed retrieved successfully.'
data:
type: array
example:
-
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
items:
type: object
properties:
reported_at:
type: string
example: 'Mar 28, 2026 5:30PM'
mail_stream:
type: string
example: 'Transactional Stream'
ip:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: 192.0.2.10
description:
type: string
example: 'Primary sending IP'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
seed_message:
type: object
properties:
mail_from_name:
type: string
example: 'Test Sender'
mail_from:
type: string
example: sender@example.com
subject:
type: string
example: 'Seed message'
preview_line:
type: string
example: 'This is a preview.'
is_compliant:
type: boolean
example: true
is_blocklisted:
type: boolean
example: false
is_test:
type: boolean
example: false
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 2
per_page:
type: integer
example: 15
to:
type: integer
example: 15
total:
type: integer
example: 16
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Feed is only available for activated IPs.'
data: []
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Feed is only available for activated IPs.'
data:
type: array
example: []
tags:
- IPs
parameters:
-
in: path
name: id
description: 'The ULID of the IP.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
required: true
schema:
type: string
'/api/v1/ips/{id}':
get:
summary: 'Retrieve IP.'
operationId: retrieveIP
description: ''
parameters:
-
in: query
name: start_date
description: 'Filter related domains from this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-01-01'
required: false
schema:
type: string
description: 'Filter related domains from this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-01-01'
-
in: query
name: end_date
description: 'Filter related domains until this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-03-31'
required: false
schema:
type: string
description: 'Filter related domains until this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-03-31'
-
in: query
name: related_domains_page
description: 'The page number for related domain results.'
example: 1
required: false
schema:
type: integer
description: 'The page number for related domain results.'
example: 1
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'IP retrieved successfully.'
data:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: 192.0.2.10
description:
type: string
example: 'Primary sending IP'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
logo:
type: string
example: null
nullable: true
team:
type: object
properties:
name:
type: string
example: 'Owner Custom Team'
mail_streams:
type: array
example:
-
name: 'Transactional Stream'
type: transactional
logo: 'https://cdn.example.com/mail-streams/transactional.svg'
items:
type: object
properties:
name:
type: string
example: 'Transactional Stream'
type:
type: string
example: transactional
logo:
type: string
example: 'https://cdn.example.com/mail-streams/transactional.svg'
configuration:
type: object
properties:
rdns:
type: string
example: mail.example.com
fcrdns:
type: boolean
example: true
rdns_summary:
type: string
example: null
nullable: true
provider:
type: object
properties:
asn:
type: object
properties:
asn:
type: string
example: AS64500
name:
type: string
example: 'Example ASN'
location:
type: string
example: '37.7749,-122.4194'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
settings:
type: object
properties:
shared_team_ids:
type: array
example: []
compliance:
type: object
properties:
is_compliant:
type: boolean
example: true
sender_score:
type: integer
example: 98
checks:
type: object
properties:
blocklists:
type: boolean
example: true
fcrdns:
type: boolean
example: true
complaint_rate_averages:
type: object
properties:
periods:
type: array
example: []
inbox_placement_averages:
type: object
properties:
periods:
type: array
example: []
related_domains:
type: object
properties:
date_range:
type: object
properties:
start_date:
type: string
example: '2026-01-01 00:00:00'
end_date:
type: string
example: '2026-03-31 23:59:59'
items:
type: array
example:
-
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'
items:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: example.com
description:
type: string
example: 'Primary sending domain'
created_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
updated_at:
type: string
example: '2026-03-28T10:30:00.000000Z'
meta:
type: object
properties:
current_page:
type: integer
example: 1
last_page:
type: integer
example: 1
per_page:
type: integer
example: 10
total:
type: integer
example: 0
blocklists:
type: object
properties:
is_blacklist:
type: boolean
example: false
blacklist_count:
type: integer
example: 0
listed_count:
type: integer
example: 0
listed_muted:
type: integer
example: 0
listed_details:
type: array
example: []
tags:
- IPs
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
related_domains_page:
type: integer
description: 'Must be at least 1.'
example: 16
nullable: true
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d. Must be a date before or equal to today. Must be a date before or equal to end_date.'
example: '2022-05-19'
nullable: true
end_date:
type: string
description: 'Must be a valid date in the format Y-m-d. Must be a date before or equal to today. Must be a date after or equal to start_date.'
example: '2052-05-17'
nullable: true
parameters:
-
in: path
name: id
description: 'The ULID of the IP.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
required: true
schema:
type: string
'/api/v1/intelligence/single-emails/{email}':
get:
summary: 'Retrieve Single Email.'
operationId: retrieveSingleEmail
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 23
email: price.amber@example.org
status: null
created_at: '2026-04-24 16:58:40'
updated_at: '2026-04-24 16:58:40'
properties:
data:
type: object
properties:
id:
type: integer
example: 23
email:
type: string
example: price.amber@example.org
status:
type: string
example: null
nullable: true
created_at:
type: string
example: '2026-04-24 16:58:40'
updated_at:
type: string
example: '2026-04-24 16:58:40'
tags:
- Intelligence
delete:
summary: 'Delete Single Email.'
operationId: deleteSingleEmail
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Single email deleted.'
deleted: true
properties:
message:
type: string
example: 'Single email deleted.'
deleted:
type: boolean
example: true
tags:
- Intelligence
parameters:
-
in: path
name: email
description: 'The email address to retrieve.'
example: example@postmasterplus.com
required: true
schema:
type: string
/api/v1/intelligence/single-emails/scan:
post:
summary: 'Scan Single Email.'
operationId: scanSingleEmail
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 24
email: rempel.chadrick@example.org
status: null
created_at: '2026-04-24 16:58:40'
updated_at: '2026-04-24 16:58:40'
properties:
data:
type: object
properties:
id:
type: integer
example: 24
email:
type: string
example: rempel.chadrick@example.org
status:
type: string
example: null
nullable: true
created_at:
type: string
example: '2026-04-24 16:58:40'
updated_at:
type: string
example: '2026-04-24 16:58:40'
tags:
- Intelligence
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'The email address to scan.'
example: example@postmasterplus.com
actions:
type: string
description: 'The actions in comma separated format to perform.'
example: '"verification,activity,postal_append"'
required:
- email
- actions
/api/v1/blocklist/scan/start:
post:
summary: 'Start Blocklist Scan.'
operationId: startBlocklistScan
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 01kq06vschgcber9cy20a73dt6
status: 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.'
properties:
data:
type: object
properties:
id:
type: string
example: 01kq06vschgcber9cy20a73dt6
description: 'The unique identifier for the blocklist check.'
status:
type: string
example: pending
description: 'The status of the blocklist check. Example: `pending`, `processing`, `completed`, `partially_completed`, `failed`'
enum:
- pending
- processing
- completed
- partially_completed
- failed
unique_hosts_checked:
type: integer
example: 3
description: 'The number of unique hosts checked.'
total_hosts_detected:
type: string
example: null
description: 'The number of hosts detected.'
urls_scanned:
type: integer
example: 0
description: 'The number of URLs scanned.'
urls_skipped:
type: integer
example: 0
description: 'The number of URLs skipped.'
blocklisted:
type: boolean
example: false
description: 'Whether the check is blocklisted.'
credits_used:
type: integer
example: 0
description: 'The number of credits used.'
error_message:
type: string
example: ''
description: 'The error message if the check failed.'
started_at:
type: string
example: null
description: 'The date and time the check started.'
completed_at:
type: string
example: null
description: 'The date and time the check completed.'
required:
- id
- status
- unique_hosts_checked
- total_hosts_detected
- urls_scanned
- urls_skipped
- blocklisted
- credits_used
- error_message
- started_at
- completed_at
success:
type: boolean
example: true
message:
type: string
example: 'Blocklist check started successfully.'
tags:
- Blocklists
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
urls:
type: array
description: 'Array of URLs to scan (minimum 1 URL, maximum 100 URLs).'
example:
- 'https://optipub.com'
- 'https://postmasterplus.com'
items:
type: string
follow_redirects:
type: boolean
description: '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
required:
- urls
'/api/v1/blocklist/scan/status/{id}':
get:
summary: 'Retrieve Blocklist Scan Status.'
operationId: retrieveBlocklistScanStatus
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 01kq06vsd0dp49ttrf238x6ryb
status: 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.'
properties:
data:
type: object
properties:
id:
type: string
example: 01kq06vsd0dp49ttrf238x6ryb
description: 'The unique identifier for the blocklist check.'
status:
type: string
example: pending
description: 'The status of the blocklist check. Example: `pending`, `processing`, `completed`, `partially_completed`, `failed`'
enum:
- pending
- processing
- completed
- partially_completed
- failed
unique_hosts_checked:
type: integer
example: 4
description: 'The number of unique hosts checked.'
total_hosts_detected:
type: string
example: null
description: 'The number of hosts detected.'
urls_scanned:
type: integer
example: 0
description: 'The number of URLs scanned.'
urls_skipped:
type: integer
example: 0
description: 'The number of URLs skipped.'
blocklisted:
type: boolean
example: false
description: 'Whether the check is blocklisted.'
credits_used:
type: integer
example: 0
description: 'The number of credits used.'
error_message:
type: string
example: ''
description: 'The error message if the check failed.'
started_at:
type: string
example: null
description: 'The date and time the check started.'
completed_at:
type: string
example: null
description: 'The date and time the check completed.'
required:
- id
- status
- unique_hosts_checked
- total_hosts_detected
- urls_scanned
- urls_skipped
- blocklisted
- credits_used
- error_message
- started_at
- completed_at
success:
type: boolean
example: true
message:
type: string
example: 'Blocklist check status retrieved successfully.'
tags:
- Blocklists
parameters:
-
in: path
name: id
description: 'The ULID of the blocklist check.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
required: true
schema:
type: string
/api/v1/spam-identifiers:
get:
summary: 'Retrieve Spam Identifiers.'
operationId: retrieveSpamIdentifiers
description: "List all Gmail Postmaster Tools v2 spam (feedback loop) identifiers reported\nfor accessible domains in the given date range, along with each identifier's\naverage complaint rate across that window."
parameters:
-
in: query
name: domain_id
description: 'Optionally filter identifiers to a single accessible domain ULID.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
required: false
schema:
type: string
description: 'Optionally filter identifiers to a single accessible domain ULID.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
-
in: query
name: page
description: 'The page number for paginated identifier results.'
example: 1
required: false
schema:
type: integer
description: 'The page number for paginated identifier results.'
example: 1
-
in: query
name: start_date
description: 'Filter identifiers from this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-01-22'
required: false
schema:
type: string
description: 'Filter identifiers from this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-01-22'
-
in: query
name: end_date
description: 'Filter identifiers until this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-04-22'
required: false
schema:
type: string
description: 'Filter identifiers until this date (Y-m-d). Maximum selected range is 90 days.'
example: '2026-04-22'
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Spam identifiers retrieved successfully.'
data:
-
domain:
id: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value: example.com
identifier: '66189376'
sample_count: 57
average_complaint_rate: 0.12
-
domain:
id: 01ARZ3NDEKTSV4RRFFQ69G5FBG
value: example.net
identifier: '66189799'
sample_count: 40
average_complaint_rate: 0.05
meta:
current_page: 1
last_page: 1
per_page: 25
total: 2
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Spam identifiers retrieved successfully.'
data:
type: array
example:
-
domain:
id: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value: example.com
identifier: '66189376'
sample_count: 57
average_complaint_rate: 0.12
-
domain:
id: 01ARZ3NDEKTSV4RRFFQ69G5FBG
value: example.net
identifier: '66189799'
sample_count: 40
average_complaint_rate: 0.05
items:
type: object
properties:
domain:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: example.com
identifier:
type: string
example: '66189376'
sample_count:
type: integer
example: 57
average_complaint_rate:
type: number
example: 0.12
meta:
type: object
properties:
current_page:
type: integer
example: 1
last_page:
type: integer
example: 1
per_page:
type: integer
example: 25
total:
type: integer
example: 2
tags:
- 'Spam Identifiers'
'/api/v1/spam-identifiers/{identifier}':
get:
summary: 'Retrieve Spam Identifier.'
operationId: retrieveSpamIdentifier
description: "Return the daily Gmail complaint rate time series for a single spam\n(feedback loop) identifier across accessible domains, plus the aggregate\naverage over the selected date range for each domain."
parameters:
-
in: query
name: domain_id
description: 'Optionally filter the identifier to a single accessible domain ULID.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
required: false
schema:
type: string
description: 'Optionally filter the identifier to a single accessible domain ULID.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
-
in: query
name: start_date
description: 'Start date of the reporting window (Y-m-d). Maximum selected range is 90 days.'
example: '2026-01-22'
required: false
schema:
type: string
description: 'Start date of the reporting window (Y-m-d). Maximum selected range is 90 days.'
example: '2026-01-22'
-
in: query
name: end_date
description: 'End date of the reporting window (Y-m-d). Maximum selected range is 90 days.'
example: '2026-04-22'
required: false
schema:
type: string
description: 'End date of the reporting window (Y-m-d). Maximum selected range is 90 days.'
example: '2026-04-22'
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Spam identifier retrieved successfully.'
data:
type: array
example:
-
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
items:
type: object
properties:
identifier:
type: string
example: '66189376'
domain:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
value:
type: string
example: example.com
date_range:
type: object
properties:
start_date:
type: string
example: '2026-01-22'
end_date:
type: string
example: '2026-04-22'
aggregate:
type: object
properties:
average_complaint_rate:
type: number
example: 0.12
sample_count:
type: integer
example: 57
time_series:
type: array
example:
-
date: '2026-01-22'
complaint_rate: 0.1
-
date: '2026-01-23'
complaint_rate: null
items:
type: object
properties:
date:
type: string
example: '2026-01-22'
complaint_rate:
type: number
example: 0.1
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Spam identifier not found for accessible domains in the selected date range.'
data: []
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Spam identifier not found for accessible domains in the selected date range.'
data:
type: array
example: []
tags:
- 'Spam Identifiers'
parameters:
-
in: path
name: identifier
description: 'The Gmail Postmaster Tools v2 spam (feedback loop) identifier.'
example: '66189376'
required: true
schema:
type: string
/api/v1/screenshot/take:
post:
summary: 'Take Screenshot.'
operationId: takeScreenshot
description: 'Take a screenshot of a URL or HTML content.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 01kq06vsdpfacepemv3gbkpvsh
url: 'https://assets.optipub.com/postmaster/screenshots/01kq06vsdebvj0bfaaygbz1qnv/01kq06vsdpfacepemv3gbkpvsh.png'
format: png
width: 1024
height: 600
device_scale: 3
credits_used: 1
started_at: '2026-04-14T11:00:14+00:00'
completed_at: '2026-04-14T11:00:27+00:00'
created_at: '2026-04-24T16:58:40+00:00'
success: true
message: 'Screenshot taken successfully.'
properties:
data:
type: object
properties:
id:
type: string
example: 01kq06vsdpfacepemv3gbkpvsh
description: 'The unique identifier for the screenshot.'
url:
type: string
example: 'https://assets.optipub.com/postmaster/screenshots/01kq06vsdebvj0bfaaygbz1qnv/01kq06vsdpfacepemv3gbkpvsh.png'
description: 'The URL of the screenshot image.'
format:
type: string
example: png
description: 'The format of the screenshot image. Example: `png`, `jpeg`'
width:
type: integer
example: 1024
description: 'The width of the screenshot in pixels.'
height:
type: integer
example: 600
description: 'The height of the screenshot in pixels.'
device_scale:
type: integer
example: 3
description: 'The device scale factor used (1-3). Higher values produce sharper images.'
credits_used:
type: integer
example: 1
description: 'The number of credits used for this screenshot.'
started_at:
type: string
example: '2026-04-14T11:00:14+00:00'
description: 'The date and time when the screenshot capture started.'
completed_at:
type: string
example: '2026-04-14T11:00:27+00:00'
description: 'The date and time when the screenshot capture completed.'
created_at:
type: string
example: '2026-04-24T16:58:40+00:00'
description: 'The date and time the screenshot was created.'
required:
- id
- url
- format
- width
- height
- device_scale
- credits_used
- started_at
- completed_at
- created_at
success:
type: boolean
example: true
message:
type: string
example: 'Screenshot taken successfully.'
tags:
- Tools
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
url:
type: string
description: 'URL to screenshot (required if html is not provided).'
example: '"https://example.com"'
nullable: true
html:
type: string
description: 'HTML content to screenshot (required if url is not provided).'
example: null
nullable: true
width:
type: integer
description: 'optional Viewport width in pixels (320-1920). Defaults to 1280.'
example: 1280
nullable: true
height:
type: integer
description: 'optional Viewport height in pixels (240-1080). Defaults to 720.'
example: 720
nullable: true
format:
type: string
description: 'optional Image format (png, jpeg, or webp). Defaults to png.'
example: '"png"'
nullable: true
device_scale:
type: integer
description: 'optional Device scale factor for higher resolution (1-3). Defaults to 1 for retina-quality images.'
example: 1
nullable: true
/api/v1/screenshots:
get:
summary: 'List Screenshots.'
operationId: listScreenshots
description: 'Retrieve a paginated list of screenshots for the current team.'
parameters:
-
in: query
name: per_page
description: 'The number of screenshots per page (1-100). Defaults to 15. Must be at least 1. Must not be greater than 100.'
example: 15
required: false
schema:
type: integer
description: 'The number of screenshots per page (1-100). Defaults to 15. Must be at least 1. Must not be greater than 100.'
example: 15
-
in: query
name: page
description: 'The page number. Must be at least 1.'
example: 1
required: false
schema:
type: integer
description: 'The page number. Must be at least 1.'
example: 1
-
in: query
name: sort
description: 'Sort order. Use `-` prefix for descending. Options: `created_at`, `-created_at`, `format`, `-format`. Defaults to `-created_at`.'
example: '-created_at'
required: false
schema:
type: string
description: 'Sort order. Use `-` prefix for descending. Options: `created_at`, `-created_at`, `format`, `-format`. Defaults to `-created_at`.'
example: '-created_at'
enum:
- created_at
- '-created_at'
- format
- '-format'
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Screenshots retrieved successfully.'
data:
type: array
example:
-
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'
items:
type: object
properties:
id:
type: string
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
url:
type: string
example: 'https://assets.optipub.com/postmaster/screenshots/01arz3ndektsv4rrffq69g5fav/01arz3ndektsv4rrffq69g5fav.png'
format:
type: string
example: png
width:
type: integer
example: 1280
height:
type: integer
example: 720
credits_used:
type: integer
example: 1
created_at:
type: string
example: '2024-01-15T10:30:00Z'
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 5
per_page:
type: integer
example: 15
to:
type: integer
example: 15
total:
type: integer
example: 75
tags:
- Tools
'/api/v1/screenshot/{id}':
get:
summary: 'Get Screenshot.'
operationId: getScreenshot
description: 'Retrieve details of a specific screenshot by its ID.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 01kq06vsendywweecn020wx6nk
url: 'https://assets.optipub.com/postmaster/screenshots/01kq06vseekh3p1ke4zja9ywys/01kq06vsendywweecn020wx6nk.png'
format: png
width: 800
height: 600
device_scale: 2
credits_used: 1
started_at: '2026-04-14T07:41:04+00:00'
completed_at: '2026-04-14T07:41:34+00:00'
created_at: '2026-04-24T16:58:40+00:00'
success: true
message: 'Screenshot retrieved successfully.'
properties:
data:
type: object
properties:
id:
type: string
example: 01kq06vsendywweecn020wx6nk
description: 'The unique identifier for the screenshot.'
url:
type: string
example: 'https://assets.optipub.com/postmaster/screenshots/01kq06vseekh3p1ke4zja9ywys/01kq06vsendywweecn020wx6nk.png'
description: 'The URL of the screenshot image.'
format:
type: string
example: png
description: 'The format of the screenshot image. Example: `png`, `jpeg`'
width:
type: integer
example: 800
description: 'The width of the screenshot in pixels.'
height:
type: integer
example: 600
description: 'The height of the screenshot in pixels.'
device_scale:
type: integer
example: 2
description: 'The device scale factor used (1-3). Higher values produce sharper images.'
credits_used:
type: integer
example: 1
description: 'The number of credits used for this screenshot.'
started_at:
type: string
example: '2026-04-14T07:41:04+00:00'
description: 'The date and time when the screenshot capture started.'
completed_at:
type: string
example: '2026-04-14T07:41:34+00:00'
description: 'The date and time when the screenshot capture completed.'
created_at:
type: string
example: '2026-04-24T16:58:40+00:00'
description: 'The date and time the screenshot was created.'
required:
- id
- url
- format
- width
- height
- device_scale
- credits_used
- started_at
- completed_at
- created_at
success:
type: boolean
example: true
message:
type: string
example: 'Screenshot retrieved successfully.'
tags:
- Tools
parameters:
-
in: path
name: id
description: 'The ULID of the screenshot.'
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
required: true
schema:
type: string