Loop is an open JSON format for B2B procurement messages — RFQs, quotes, POs, and the clarification rounds in between. Embedded in normal email, it lets AI agents on both sides skip the extraction step entirely. No scraping prose. No parsing PDF tables. No guessing units.
Every B2B procurement transaction — every freight booking, every services RFP, every capex purchase — still travels as a free-form email or PDF. The receiving side has spent the last decade building extraction layers to recover the structure. With LLMs on both ends now, the cost of that lossy hand-off is finally visible.
Loop is a tiny core spec plus namespaced vertical extensions. Six decisions shape it:
extensions.<vertical>. Verticals grow without forcing the core to grow.extraction_meta block — confidence score, completeness, flagged missing fields — so receiving agents can route low-confidence messages to a human without re-classifying.
An air-freight RFQ from a freight forwarder, addressed to a co-loader.
Arrives in the supplier's inbox as a normal email with a
procurement.json attachment containing:
{
"loop_version": "0.1",
"message_type": "rfq",
"message_action": "rfq_initial",
"message_id": "9c2a8b8e-…",
"thread_id": "9c2a8b8e-…",
"issued_at": "2026-05-17T09:00:00Z",
"issuer": {
"org_name": "Acme Logistics Pvt Ltd",
"contact_name": "Priya Shah",
"email": "priya@acme.example"
},
"issuer_role": "forwarder_requesting_quote",
"recipients": [ { "org_name": "BlueWing Freight", "email": "quotes@bluewing.example" } ],
"body": {
"title": "Air freight: BLR → FRA, 2 pallets electronics",
"quote_deadline": "2026-05-19T12:00:00Z",
"line_items": [
{ "id": "1", "description": "Electronics, palletized, non-hazardous",
"quantity": { "value": "2", "unit": "PLT" } }
],
"flags": {
"cost_vs_time_preference": "balanced",
"requested_quote_fields": ["carrier", "transit_time", "validity"]
},
"extensions": {
"freight": {
"mode": "air",
"offer_direction": "export",
"service_type": "port_to_port",
"origin": { "country": "IN", "port_code": "BLR" },
"destination": { "country": "DE", "port_code": "FRA" },
"incoterms": "FCA",
"incoterms_place": "Bengaluru",
"ready_date": "2026-05-22",
"commodity": "Electronics, palletized",
"cargo_type": "general",
"gross_weight": { "value": "850", "unit": "KGM" },
"chargeable_weight": { "value": "1100", "unit": "KGM" },
"hazardous": { "is_hazardous": false }
}
}
},
"extraction_meta": { "extraction_confidence": 0.95, "data_completeness": "complete" }
}
Every weight in KGM. Every volume in MTQ. Every
price in ISO 4217. Line-item IDs are stable across the RFQ → quote → PO
thread, so matching is exact, not heuristic. Unknown fields are
preserved on relay so the network can grow without coordination.
View all worked examples — air export, FCL sea, hazmat air with MSDS, services RFP, and a full clarification round.
Loop is a cooperative format. Every participant wins more by adopting than by holding out — and adoption is incremental (emit-only and parse-only both deliver value).
You spend most of your LLM budget re-extracting structure from prose. Every parsed Loop email is several extraction calls you don't make. The unit-economics improvement is direct and measurable.
Air and sea RFQs are dense, unit-sensitive, and routinely lossy in
prose. The extensions.freight block captures mode,
incoterms, dimensional weight, hazmat MSDS, container plan, customs
filings — all the fields your TMS already wants to index.
Coupa, Ariba, SAP, GEP — every minute a customer spends extracting replies from email is friction they blame on your tool. Emitting Loop on outbound and parsing on inbound is an SDK-sized integration with an immediately demonstrable customer-side win.
If you don't speak Loop, nothing changes. Every message ships with a human-readable rendering. The structured attachment is a bonus channel, never a replacement channel. No onboarding, no portal, no new account.
Better quote comparison. Stable line-item identity across the thread. Auditable structured data for category management. Less ambiguity in contracts, fewer disputes downstream of an RFQ.
The spec is small enough to read in 20 minutes. The schemas are standard JSON Schema 2020-12 — generate type-safe parsers in any language with off-the-shelf tooling. No mandatory code lists, no patent traps.
UBL, Peppol, cXML, EDI, RosettaNet, ebXML — every previous attempt at a universal procurement format hit the same wall. The cost of adoption sat with the buyer; the benefit of adoption was a vague "less error eventually." Buyers shrugged. Suppliers shrugged. Standards committees ground on for years and the format never escaped its mandate.
Loop has a different shape because the buyer doesn't have to do extra work. Procurement tools and AI agents on the buyer side can emit Loop automatically, alongside the prose email they were already sending. The supplier-side AI vendor is the party with both the strongest incentive and the cheapest path to adoption — a few hundred lines of JSON-parsing code replaces tens of thousands of LLM calls per month.
That re-aligns the network effect. Once a handful of supplier-side AI tools advertise Loop support, every buyer's AI tool has a reason to emit. Once buyer-side tools emit, every supplier without AI still gets a normal email — but every supplier with AI gets a free upgrade. Adoption compounds instead of stalling.
Loop is a v0.1 draft. The intent is to land at a stable v1.0 once the core has been exercised against real procurement traffic across at least three independent organizations. Until then, the spec is open to substantive change.