Postvow
Developer documentation
Three requests to a first send, the interactive API reference, and the index of every identifier the API links to. Everything here is generated from or checked against the running service — where a manual would be needed, this points at the generated contract instead of paraphrasing it.
Your first send
You need one thing that is not on this page: an API key. Keys are issued during onboarding, which is a conversation rather than a form. hello@postvow.com
-
Send a message
A test key — the pv_test_ prefix — captures the message instead of delivering it, so a first integration never reaches a real inbox and never spends your sending reputation. Swap it for the live key when you are ready.
curl -X POST https://api.postvow.eu/v1/send \ -H "Authorization: Bearer pv_test_..." \ -H "Content-Type: application/json" \ -d '{ "to": "you@example.com", "from": "noreply@your-domain.com", "subject": "First send", "text": "It works." }' -
Read the acceptance
Sending is asynchronous: 202 means accepted for delivery, not delivered. Keep the messageId — it is how every later question about this message is asked.
{ "messageId": "019fd464-18dc-7e6f-a755-2d492f4ba944", "stream": "transactional", "warnings": [] } -
Ask what happened to it
The first call returns the message and its current delivery status. The second is the one worth knowing about: it returns the decision tree — what was attempted, what the receiving server said, and why the outcome is what it is.
curl https://api.postvow.eu/v1/messages/{messageId} \ -H "Authorization: Bearer pv_test_..." curl https://api.postvow.eu/v1/messages/{messageId}/explain \ -H "Authorization: Bearer pv_test_..."
The full API
Two ways to read one artefact. Pick by why you came.
-
API reference
Every endpoint, its parameters and its responses, rendered as an interactive reference. It is a client-side application and needs JavaScript.
-
OpenAPI document
The raw specification, for generating a client or reading in an editor. It declares the bearer scheme, so a generated SDK sends your API key without further configuration.
Two things are authoritative, and neither of them is this page.
The response you are holding. Every Postvow error is RFC 9457 problem details and carries its own message and suggestedFix. That text is generated at the point the error occurs and is more specific than anything written here could be.
The OpenAPI specification. It is generated from the running code, so it cannot drift from the behaviour of the API you are calling.
If a code below is unfamiliar and the response text did not resolve it, write to us and quote the code. hello@postvow.com
Error codes
The codes the API emits from a fixed call site. The set is open — a code absent from this list is not an invalid code, and the response body remains authoritative for it.
-
AUTH_FLOW_INVALID -
AUTH_ID_TOKEN_INVALID -
AUTH_INSUFFICIENT_ACR -
AUTH_NO_TENANT_MEMBERSHIP -
AUTH_STATE_MISMATCH -
BAD_REQUEST -
DB_ERROR -
DOMAIN_NOT_FOUND -
EXPORT_EXPIRED -
EXPORT_NOT_FOUND -
EXPORT_NOT_READY -
IMMUTABLE_REASON -
INSUFFICIENT_DATA -
INTERNAL_ERROR -
INVALID_CURSOR -
INVALID_DATE_RANGE -
INVALID_GRANULARITY -
M2M_CLIENT_NOT_FOUND -
NOT_FOUND -
NO_VERIFIED_DOMAIN -
PAYLOAD_TOO_LARGE -
PIPELINE_FAILED -
RATE_LIMIT_EXCEEDED -
REQUEST_ERROR -
REQUEST_IN_FLIGHT -
REQUEST_TOO_LARGE -
RETENTION_BELOW_MINIMUM -
RETENTION_CANNOT_REDUCE -
RETENTION_OUT_OF_RANGE -
SERVER_ERROR -
SERVICE_UNAVAILABLE -
TENANT_NOT_FOUND -
UNSUPPORTED_MEDIA_TYPE -
VALIDATION_ERROR
API topics
Each links to its operations in the specification.
- admin invoices
- admin m2m clients
- admin runtime config
- admin tenant keys
- admin tenants
- api keys
- authentication
- billing
- bimi logo rendering not live
- check disposable
- domains
- headers
- jurisdiction
- messages
- rate limits
- sandbox
- send
- streams
- suppression
- tools → migration diff
- warmup
- webhooks
Guides and compatibility
Topics referenced from responses and from the compatibility endpoints. The migration endpoints themselves return machine-readable differences; these anchors exist so those references resolve.
- account → suspended
- authentication → dkim setup
- authentication → dns setup
- billing → limits
- compat → sendgrid
- dashboard → login
- deliverability → bounce management
- deliverability → email storm prevention
- deliverability → spam prevention
- migration
- migration → mailgun
- migration → mailgun
- migration → mailgun
- migration → nodemailer
- migration → nodemailer
- migration → nodemailer
- migration → postmark
- migration → postmark
- migration → postmark
- migration → resend
- migration → resend
- migration → sendgrid
- migration → sendgrid
- migration → sendgrid
- migration → sendgrid
- migration → ses
- migration → ses
- migration → ses
- migration → ses
- operations → circuit breaker
- operations → dkim rotation
- sdk
- security → mta sts
- smtp relay
- team → members
- team → roles
- warmup → schedule
- webhooks → url requirements