Migrate from Postmark
Move a supported sending integration while checking the differences explicitly.
Inventory your integration
List the endpoints and features your application uses. Compare them with the compatibility table. If you depend on templates, inbound processing, webhooks, or open/click events, plan a replacement before changing the send path.
Prepare the domain and key
Ask a Prawnwire organization admin to verify and host the From domain, publish its mail DNS records, and create a key. Request email:send for sending and email:read for activity.
MX changes affect incoming mail too. Coordinate the migration with whoever manages the domain rather than copying DNS records without review.
Change the client host
For postmark.js, set requestHost to the Prawnwire API host plus /v1, with no scheme. Use the environment-specific Postmark library example. Replace the Postmark token with a Prawnwire key.
If using the Prawnwire SDK later, change PascalCase wire fields to its camelCase API; do not pass the same object unchanged.
Check without sending
Use a pw_test_ key. Validate From, recipients, bodies, attachments, headers, metadata, scopes, and current allowance. Prawnwire does not accept POSTMARK_API_TEST.
A test response has a MessageID but no stored message. Test keys do not prove deliverability or reserve capacity for a future live batch.
Switch a controlled send
Send with a live key to an address you control. Check the receiving message’s SPF and DKIM results, then read message details. Keep old and new message IDs separate in your application’s records.
Differences checklist
- Use only the
outboundstream. - Render templates into HTML/text before calling the API.
- Do not expect
TrackOpensorTrackLinksto create tracking events. - Read activity for delivery events; this API does not deliver webhooks.
- Interpret
Sentas submission, not recipient delivery. - Read every result of a batch, even when HTTP status is
200. - Check the per-plan monthly allowance and daily cap, counted per recipient.
- Review your suppression policy. The public API supports dump and deletion, not importing a suppression list.
- Store anything you need beyond the 30-day message-retention window.
- Avoid blind retries after ambiguous timeouts; no idempotency key is documented.