Parsing transactional email is one of those problems that looks trivial until it isn’t. You write a regex for the order confirmation your supplier sends. It works for six months. Then their template changes — a new line break, a currency symbol swap, a subject-line reword — and your pipeline silently starts returning empty strings. Nobody notices until a reconciliation run fails at 11 PM.
The same brittleness shows up anywhere structured data hides inside human-formatted messages: order confirmations, shipping notices, payment receipts. The format drifts, the regex rots, and the failure is silent.
MailFrame is built to end that class of problem — starting with email. (PDF and image inputs are on the roadmap; raw email is what ships today.)
What MailFrame Does
MailFrame accepts a raw email (MIME) and returns structured JSON that conforms to a schema you define. You describe the shape of data you want; MailFrame handles extraction and validation, and returns the result synchronously in the response to POST /v1/parse. Asynchronous delivery via signed webhook and confidence scoring are on the roadmap, not yet available.
The API base is https://api.mailframe.ai. There is one core endpoint:
POST /v1/parse
Send it the raw email, tell it which schema to use, and get typed JSON back.
Two Ways to Ingest
HTTP POST
For email your application already has in hand — a message pulled from an inbox, a fetch from S3, a pipeline step — POST the raw MIME directly:
curl -X POST https://api.mailframe.ai/v1/parse \
-H "Authorization: Bearer $MAILFRAME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schema_id": "inv_schema_01jx...",
"input": { "type": "email", "raw": "<base64-encoded MIME>" }
}'
The validated JSON comes back in the same HTTP response. (Async delivery via a job reference and webhook is on the roadmap, not yet available.)
Email Forwarding (on the roadmap)
A second ingestion mode is planned for after launch: unique per-schema inboxes such as parse+inv_schema_01jx@in.mailframe.ai that you can forward, auto-forward, or route email to directly. MailFrame would receive the raw MIME, run extraction against the bound schema, and deliver the result to your webhook (also on the roadmap) — no polling, no cron jobs. Until it ships, send the same raw MIME to POST /v1/parse.
This will be particularly useful for supplier invoices, order confirmations, and shipping notifications that arrive in a shared inbox — configure a mail rule once and the data flows automatically.
A Schema-First Approach
You define what you want as a JSON Schema. For an invoice:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["vendor", "invoice_number", "total_amount", "line_items"],
"properties": {
"vendor": { "type": "string" },
"invoice_number": { "type": "string" },
"invoice_date": { "type": "string", "format": "date" },
"total_amount": { "type": "number" },
"currency": { "type": "string", "enum": ["USD", "EUR", "GBP"] },
"line_items": {
"type": "array",
"items": {
"type": "object",
"required": ["description", "quantity", "unit_price"],
"properties": {
"description": { "type": "string" },
"quantity": { "type": "number" },
"unit_price": { "type": "number" }
}
}
}
}
}
MailFrame validates every extraction attempt against this schema before returning a result. Fields that cannot be extracted or that fail validation are surfaced explicitly, never silently defaulted.
What the Output Looks Like
The example below shows the planned response shape, including the confidence fields that are on the roadmap:
{
"job_id": "job_01jx9kz4m3p8q2n7",
"schema_id": "inv_schema_01jx...",
"status": "completed",
"confidence": 0.97,
"data": {
"vendor": "Acme Supplies Ltd.",
"invoice_number": "INV-2026-00842",
"invoice_date": "2026-04-28",
"total_amount": 4318.50,
"currency": "USD",
"line_items": [
{ "description": "Bolt M8x20 (box of 500)", "quantity": 10, "unit_price": 24.50 },
{ "description": "Steel Bracket Type-B", "quantity": 50, "unit_price": 63.17 }
]
},
"low_confidence_fields": []
}
A top-level confidence score and a low_confidence_fields array are planned to give you signal before you decide whether to auto-process or route for human review. Per-field confidence scoring is on the roadmap, not yet available; today the schema-validation result is the signal to branch on.
Signed Webhook Delivery (on the roadmap)
Signed webhook delivery is on the roadmap, not yet available; today results come back synchronously in the POST /v1/parse response. The planned design signs each payload with HMAC-SHA256 in a MailFrame-Signature header so you can verify it is genuine. Planned retries would use exponential backoff, and deliveries that exhaust all retry attempts would land in a planned dead-letter queue you could inspect and replay — the retries, DLQ, and replay tooling are not yet available.
Early Access
MailFrame is in limited early-access beta. Pricing tiers start at a free tier (100 parse operations/month) and scale up through Indie ($19/mo, 500 ops), Startup ($49/mo, 5,000 ops), Scale ($149/mo, 50,000 ops), and Enterprise with custom volume.
If you are building on top of document or email data today — reconciliation pipelines, procurement automation, logistics integrations — we would like to talk. Request early access on the site. We are onboarding teams selectively right now and can turn around schema design review within 24 hours.
The inbox that does nothing is leaving structured data on the floor. MailFrame picks it up.