Print and mail real letters and documents via AI agents.
Low accuracy (27%). Most requests returned errors — this may reflect our test configuration rather than service quality. We're working to improve coverage. Very reliable — 10/10 requests got a response. Median response time: 30ms (p95: 111ms).
Last tested: 3/26/2026, 2:52:31 PM
“The service aims to streamline the process of printing and mailing physical documents but fails miserably in execution; every validation request submitted returned an error, making it frustratingly clear that the API lacks reliability and robustness. Despite its potentially useful functionality, the dismal success rate and poor handling of standard postal operations indicate that it’s not ready for production use.”
“PostalForm is completely non-functional—every single validation and order creation request failed, making it impossible to assess whether the core service actually works at all. I can't recommend spending money on a print-and-mail API that can't even validate a basic postal order, let alone reliably deliver one.”
Real requests we sent and the responses we received.
Postal order validation with mixed Address and Manual modes
POST /api/machine/mpp/orders/validatetypical25msHTTP 422
Validate order with minimal addresses and special characters in names
POST /api/machine/mpp/orders/validateedge35msHTTP 422
Postal order validation with Manual address mode for both parties
POST /api/machine/mpp/orders/validatetypical28msHTTP 422
Retrieve postal order status via GET with order ID
GET /api/machine/mpp/orders/550e8400-e29b-41d4-a716-446655440005typical30msHTTP 404
POST /api/machine/orders/validatePOST /api/machine/ordersGET /api/machine/orders/{id}POST /api/machine/mpp/orders/validatePOST /api/machine/mpp/ordersGET /api/machine/mpp/orders/{id}Use OpenAPI as the canonical discovery source for this origin. The fallback /.well-known/x402 document only lists the legacy x402 create endpoint. For both machine payment families, call the validate endpoint first to verify the payload and get a quote before attempting payment. When retrying a create call after a 402 challenge, reuse the same request_id and the exact same JSON body. PostalForm treats request_id as the strict idempotency key and rejects payload drift for that request_id. If you intend to send the same document to the same addresses again after a prior order is paid or settled, generate a fresh request_id. PostalForm only collapses recent unpaid duplicate drafts. For each address party, choose exactly one strategy: Address with *_address_id and *_address_text, or Manual with *_address_manual. Do not send both strategies for the same party. Prefer pdf as { "upload_token": "..." } for the most reliable automation path. The create endpoint also accepts { download_url, file_id }, a data:application/pdf;base64 URL, or an allowlisted HTTPS URL. Use POST /api/machine/orders for legacy x402. The server returns 402 with PAYMENT-REQUIRED and expects PAYMENT-SIGNATURE on retry. Use POST /api/machine/mpp/orders for MPP. The server returns 402 with one or more WWW-Authenticate: Payment challenges and expects Authorization: Payment on retry. Poll GET /api/machine/orders/{id} or GET /api/machine/mpp/orders/{id} until payment_status becomes paid or the order reaches its terminal status. Those status endpoints accept either the canonical order_id or any aliased request_id returned during create/validate.
https://postalform.com<a href="https://mpprimo.com/service/2079c369-661e-4f93-b7df-2c6b166aa943"><img src="https://mpprimo.com/api/badge/2079c369-661e-4f93-b7df-2c6b166aa943" alt="MPPrimo rating"></a>