Features

Built like the rest of your stack.

Postbox is built on a simple premise: a form is a contract. The schema defines the terms. The endpoint is the signature. Everything else — validation, spam filtering, translation, routing — is enforcement. Here's how it fits together.

01 / The contract

A form is a contract.

Most form tools give you a UI with a POST endpoint bolted on the back. Postbox inverts that. You define the schema (fields, types, rules) and get back an endpoint URL. Browser form, curl script, autonomous agent — every client holds the same contract and gets the same validation, spam protection, and routing.

endpoint
/f/contact
02 / Self-documenting endpoints

One URL. Two audiences. Same contract.

Every Postbox endpoint knows what it is. GET it with Accept: application/json and it tells you its schema. With Accept: text/html it renders human-readable docs. POST to it and you submit data. No SDK, no docs lookup, no syncing field changes — when the contract changes, the documentation already has.

GET /f/contact
accept: json
{
  "name": "Contact",
  "method": "POST",
  "fields": [
    "email",
    "message"
  ]
}
accept: html
Contact
email email · required
message string
POST to /f/contact
03 / Versioning

Schemas evolve. Old URLs never break.

Every schema change produces a new endpoint URL. The old one keeps working forever, validated against the schema it was born with. Add a required field without breaking the mobile app that still sends the old payload. No migration scripts. No deprecation emails. No 3am pages.

v1
/api/abc123/f/contact
jan 2024
live
v2
/api/xyz789/f/contact
mar 2025
live
v3
/api/lmn456/f/contact
apr 2026
live
04 / The pipeline

What happens after submit is the actual product.

Most form tools stop at "data received." Every Postbox submission runs through an async pipeline — validation, spam detection, translation, smart replies drafted from your knowledge base, routing — while the submitter gets an instant 201. Each stage is toggleable per form. Configure it once, and every submission flows through.

{ name: "alice", email: "alice@example.com", message: "hey" }
validate
filter
translate
reply
route
✓ processed in 1.2s
05 / Submissions, read back

Submissions are not data. They're a conversation.

Data sitting in a dashboard waits for you to do the reading. Connect our MCP server to your agent and just ask. What's the feedback looking like? What are people complaining about? Draft a reply to the angry one. No CSV exports. No dashboards. The submissions read themselves back.

What's the feedback looking like?
👤
🤖
12 so far, average 4.2. Three said export is slow. Two want mobile dark mode. One 1-star on settings. The rest are compliments on the new design.
Draft a reply to the 1-star.
👤
🤖
Draft ready. Apologetic, points them to settings at /app/settings. Want to review before I send?
06 / Honeypots

Spam traps that trap spam, not your agents.

Honeypot fields are old magic: invisible inputs that bots fill and humans don't. Mark a field as a honeypot in the schema and it's validated on submission but omitted from the discovery endpoint. Agents asking what the form accepts never see it. Bots blindly filling every field still do. No CAPTCHAs, no JavaScript, no friction.

Contact
3 fields
field
type
owner sees
agent sees
email
email · required
visible
visible
message
string
visible
visible
website 🍯
honeypot
visible
hidden
07 / Idempotency

Retry-safe by default.

Every submission endpoint accepts an Idempotency-Key header. Include one (typically a UUID) and if you retry the same submission, you get the original result instead of a duplicate. Safe networks are rare. Retries happen. Duplicate submissions shouldn't.

POST /f/contact 201
key: a1b2c3d4
POST /f/contact 200
key: a1b2c3d4
submission
sub_xyz
08 / Destinations

The work nobody wants to write twice.

Submissions fan out wherever you need them. Webhooks with HMAC-SHA256 signatures and exponential-backoff retries. Discord rich embeds. Slack Block Kit messages. If a destination keeps failing, Postbox pauses it and emails you instead of hammering a broken endpoint. The boilerplate every form tool reinvents, written once, done properly.

new submission
webhook
signed · retried
discord
rich embed
slack
block kit
Features FAQ

The details that matter.

Does Postbox host the form UI for me? +
We give you the endpoint and schema. You build the UI however you want — React, Vue, plain HTML, a mobile app, or even no UI at all if your agent handles submissions. For quick testing, every endpoint also renders a basic HTML form when visited in a browser with Accept: text/html.
What field types are supported? +
String, number, boolean, email, date, enum, and honeypot. Each field supports rules like required, min/max length, regex patterns, and allowed values. Custom validation rules are on the roadmap.
Can I use my own OpenAI or Claude API key? +
Not currently. AI features run through our managed infrastructure so we can optimize prompt engineering, caching, and cost across all users. This keeps pricing predictable — you pay per action, not per token. If you have specific compliance needs, contact us.
How fast are webhook deliveries? +
Usually under a second from submission to webhook dispatch. The pipeline (validation, spam, translation) runs async, so the submitter gets an instant 201 while the background work happens behind the scenes. Webhooks include a 5-second timeout with exponential backoff retries up to 3 attempts.
Still wondering?

We're easy to reach.