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.