Quiet by default
Start with a form that accepts messages normally. Postbag watches what arrives and lets you know when the answers begin to change. No form-filling ceremony required.
Stricter when it matters
For a group of sites or a partner feed, your agent can set what a form should collect. A message that does not fit is set aside with a clear reason rather than vanishing or confusing the next person in line.
History that stays understandable
When you change the agreed questions, earlier messages keep their original context. That makes a small change on a live site much less dramatic.
curl -X POST https://postbag.dev/v1/forms/fm_8f3kq2/schema -H "Authorization: Bearer pb_live_…" -d '{
"json_schema": { "type": "object", "required": ["email"],
"properties": { "email": { "type": "string", "format": "email" }, "message": { "type": "string" } } },
"ui": { "email": { "label": "Email", "widget": "email", "order": 1 }, "message": { "label": "Message", "widget": "textarea", "order": 2 } },
"changelog": "v2: message optional"
}' curl -X POST https://postbag.dev/v1/forms/fm_8f3kq2/schema -H "Authorization: Bearer pb_live_…" -d '{
"json_schema": { "type": "object", "required": ["email"],
"properties": { "email": { "type": "string", "format": "email" }, "message": { "type": "string" } } },
"ui": { "email": { "label": "Email", "widget": "email", "order": 1 }, "message": { "label": "Message", "widget": "textarea", "order": 2 } },
"changelog": "v2: message optional"
}' An early heads-up
If a site adds a question, drops one, or changes the kind of answer it sends, Postbag raises a clear “Change detected” note. You find out before a partner has to ask what happened.