RFQs
A rate request that arrived as an email, the structured fields AI pulled out of it, the cost components that went into pricing it, and the quote that went back.
RFQ fields are snake_case
Unlike bookings, which come back in camelCase, RFQ rows are returned in the database's own snake_case — from_email, quantity_unit, extraction_confidence. Worth knowing before you write your mapping layer.
Lifecycle
An RFQ moves through these statuses as it is parsed, costed and answered. Filter the list endpoint with ?status= to watch one stage — failed is the one worth alerting on.
newEmail received, not yet parsed.parsingAI extraction in flight.parsedFields extracted and ready for costing.costingCost components being assembled.quotedA quote has been drafted but not sent.sentQuote emailed back to the enquirer.failedExtraction could not complete.
/api/v1/rfqsBearer keyList your organization's rate requests, oldest-updated first, each with its quote summary.
Query parameters
sincestring (ISO 8601)optionalOnly return RFQs updated strictly after this timestamp. Omit on the first call, then pass the previous response’s meta.nextSince.
limitinteger 1–100optionalRows per page. Defaults to 50; values outside the range are clamped.
statusstringoptionalFilter to one lifecycle status: new, parsing, parsed, costing, quoted, sent or failed.
| Name | Type | Description |
|---|---|---|
since | string (ISO 8601) | Only return RFQs updated strictly after this timestamp. Omit on the first call, then pass the previous response’s meta.nextSince. |
limit | integer 1–100 | Rows per page. Defaults to 50; values outside the range are clamped. |
status | string | Filter to one lifecycle status: new, parsing, parsed, costing, quoted, sent or failed. |
Request
curl -G https://www.cargomo.de/api/v1/rfqs \ -d status=sent \ -d limit=50 \ -H "Authorization: Bearer cm_live_YOUR_API_KEY"
Response
{
"data": [
{
"id": "4d19b7c8-51ae-4a02-b6f3-9c7d02e1f884",
"organization_id": "1f0a...",
"from_email": "trading@example-buyer.com",
"from_name": "Maria Okafor",
"subject": "RFQ - 5000 MT White Sugar CIF Jebel Ali",
"received_at": "2026-09-02T08:41:19Z",
"status": "sent",
"commodity": "White Refined Sugar ICUMSA 45",
"quantity": 5000,
"quantity_unit": "MT",
"incoterms": "CIF",
"destination": "Jebel Ali",
"origin": "Brazil",
"payment_terms": "Irrevocable LC at sight",
"required_date": "2026-10-15",
"extraction_confidence": 0.94,
"buyer_role": "broker",
"pricing_mechanism": "fixed",
"missing_critical": ["packing"],
"extraction_v2": { "line_items": [ /* ... */ ] },
"parsed_at": "2026-09-02T08:41:26Z",
"updated_at": "2026-09-02T11:03:55Z",
"rfq_quotes": [
{
"id": "9b2e...",
"sent_at": "2026-09-02T11:03:55Z",
"total_price": 2810000,
"unit_price": 562,
"currency": "USD"
}
]
}
],
"meta": { "count": 50, "limit": 50, "nextSince": "2026-09-02T11:03:55Z" }
}/api/v1/rfqs/:idBearer keyFetch one RFQ in full — the complete structured extraction, every cost component considered (not just the ones chosen), and the quote detail.
Path parameters
idstring (uuid)requiredThe RFQ id. Path parameter. Must belong to your organization.
| Name | Type | Description |
|---|---|---|
id | string (uuid)required | The RFQ id. Path parameter. Must belong to your organization. |
Request
curl https://www.cargomo.de/api/v1/rfqs/4d19b7c8-51ae-4a02-b6f3-9c7d02e1f884 \ -H "Authorization: Bearer cm_live_YOUR_API_KEY"
Response
{
"id": "4d19b7c8-51ae-4a02-b6f3-9c7d02e1f884",
"status": "sent",
"commodity": "White Refined Sugar ICUMSA 45",
"extraction_v2": {
"line_items": [
{
"commodity": "White Refined Sugar ICUMSA 45",
"quantity_min": 5000,
"quantity_max": 5000,
"quantity_unit": "MT",
"incoterms": "CIF",
"destination": "Jebel Ali"
}
]
},
"rfq_cost_sources": [
{
"id": "aa10...",
"component": "ocean_freight",
"source": "liner_api",
"value": 48.5,
"currency": "USD",
"unit": "per_MT",
"selected": true,
"created_at": "2026-09-02T09:15:02Z"
},
{
"id": "aa11...",
"component": "insurance",
"source": "manual",
"value": 3.2,
"currency": "USD",
"unit": "per_MT",
"selected": true,
"created_at": "2026-09-02T09:18:40Z"
}
],
"rfq_quotes": [
{
"id": "9b2e...",
"sent_at": "2026-09-02T11:03:55Z",
"draft_saved_at": "2026-09-02T10:44:12Z",
"total_price": 2810000,
"unit_price": 562,
"currency": "USD",
"email_subject": "Re: RFQ - 5000 MT White Sugar CIF Jebel Ali"
}
]
}Cost sources are the audit trail.rfq_cost_sources lists every rate that was on the table for each component, where it came from, and which one was selected. That's how you reconstruct why a quote was priced the way it was — months later, when someone asks.
