Skip to content

One word per concept.

The vocabulary is fixed across the API, the dashboard, the docs and this site. The API uses the engineering word; the dashboard may show a friendlier label, but it is a label, not a second concept.

Form backend
A hosted service that receives HTML form submissions so a website needs no server code of its own. The site's form action points at the backend, which stores the submission and notifies someone. Postbag is a form backend that also routes.
Organization
The tenant. Owns everything: projects, forms, streams, destinations, routes, API keys. Every row in Postbag carries an organization_id. UI label: Workspace.
Project
A folder for forms, grouping them for humans (a client, a niche, a site). Projects are never a routing boundary; routing is done by streams. A Default project exists from signup.
Form
The thing a website posts to. Identified publicly by a prefixed id such as fm_8f3kq2 that appears in the submit URL and is not secret. Has tags, settings (allowed origins, redirect, honeypot, rate limit, Turnstile) and a schema mode.
Submission
One received payload (sb_…). Has data (the submitted fields), status (received, quarantined or spam), spam score and reasons, meta (ip, user agent, origin, country, received_at) and the schema version it was validated against.
Form schema
A versioned, immutable declaration of what a form collects: JSON Schema plus UI hints. New version = new row. UI label: Fields.
Schema mode
observe (accept everything, detect drift, infer), enforce (validate, quarantine violations) or managed (Postbag owns the schema and serves it at /s/{id}/schema).
Stream
A named group of forms with a shared, versioned output shape. The operator's primary object: all vending leads, all AI-app signups. UI label: Bag.
Stream schema
The outbound contract a stream's routes deliver. Versioned and immutable; changing it creates a new version and re-validates every mapping. UI label: What gets delivered.
Mapping
A form's field → stream field assignment: from (direct), const (literal), default, and later expr. Unmapped fields ride along under extras. A mapping is valid or incomplete. UI label: Match fields.
Destination
Somewhere submissions can be sent: email, telegram, webhook (signed). Organization-level and reusable across routes; testable with a sample payload.
Route
form or stream → destination, with rules: mode (instant or digest), window, quality, enabled. UI label: Send to.
Delivery
One attempt-tracked send of one submission via one route (dl_…). The outbox. Statuses: pending, sending, sent, failed, dead, skipped. Keeps the payload snapshot, attempts, last error and the provider's response.
Digest
For digest-mode routes, one delivery grouping a period's submissions, unique per (route, period).
Drift
A change in what a form actually receives versus its declared schema: new_field, missing_field or type_change. Recorded as a drift event until resolved. UI label: Change detected.
Outbox
The pattern where work to be done (deliveries) is written in the same transaction as the data that caused it, then drained by a worker. The database makes it correct; events make it fast.
Quarantine
A submission status for outcomes that are stored but not delivered by default: schema_violation, rate_limited, origin_rejected, turnstile_failed. Visible and reversible.
Agent-native
A property of the whole surface: an agent holding only an API key can discover the API, create what it needs, receive embed snippets, verify a test submission arrived, and wire a destination, without a browser or a human.

Words Postbag does not use, to avoid two names for one thing: endpoint (as a noun for form), integration, channel, hook (for destination), entry, response (for submission), pipeline.

Your first form is three minutes away.

Sign up, get a submit URL, point a form at it. The first submission lands in your inbox and your email. Everything else appears when you need it.