- Mock serverhttps://docs.mercura.ai/_mock/openapi/orders/{order_id}
- https://docs.mercura.ai/api/public/v1https://docs.mercura.ai/api/public/v1/orders/{order_id}
- Productionhttps://prod-euapi.mercura.ai/api/public/v1/orders/{order_id}
curl -i -X GET \
'https://docs.mercura.ai/_mock/openapi/orders/{order_id}' \
-H 'authorization: string'Successful Response
Lifecycle state of an order (open enum — new values are SemVer MINOR).
A translated subset of the internal OrderWorkflowStatus (see README → Design decisions → Public offer status as a translated subset). The internal INCOMPLETE_METADATA is folded into NEEDS_REVIEW — both mean "a human still has to act" — so the public surface exposes a single action-required state. The mapping lives in services.orders_service._ORDER_STATUS_MAP and a test asserts it covers every internal value, so a new internal state is a loud failure rather than a silent passthrough.
When the order was last completed (finalised / exported). Refreshed on every completion; null if never completed. Use it with the GET /orders?completed_since=… completion feed.
Customer the offer was made to. Sourced from Request.customer_bp.
On the wire the customer's partner-id is named customer_id — the same field name the customers resource uses, so a partner ingesting an offer can resolve the reference via GET /customers/{customer_id}.
The Python attribute is still external_id to keep the shared projection (features/customer_offers/offer_projection.py) indifferent to the rename. serialize_by_alias=True plus the field's serialization_alias make every JSON path (FastAPI response, model_dump(mode='json') in the webhook emitter) emit customer_id.
{ "address": { "city": "Düsseldorf", "country": "DE", "postal_code": "40210", "street": "Industriestraße", "street_number": "12" }, "contact_person": "Thomas Weber", "custom_fields": { "Kundengruppe": "Elektrogroßhandel" }, "customer_id": "K-10042", "name": "Elektro Mustermann GmbH" }
Project / object the offer relates to. Sourced from Request.project.
{ "name": "Neubau Bürogebäude Rheinpark", "object_number": "OBJ-2026-0042" }
Organisation-defined custom fields on the underlying request, keyed by the field's display label. Null when the request carries none.
{ "Angebots-Nr": "AN-2026-0042" }
[ { "article_number": "LEU-1500-50-840", "description": "LED-Feuchtraumleuchte 1500 mm 50 W 4000 K IP65", "is_alternative": false, "position_number": "10", "quantity": 48, "unit": "Stk" }, { "article_number": "LEU-1200-30-840", "description": "LED-Feuchtraumleuchte 1200 mm 30 W 4000 K IP65", "is_alternative": false, "position_number": "20", "quantity": 24, "unit": "Stk" } ]
Aggregate amounts for the offer, all in EUR.
Mirrors pdf_offer_service._build_real_data: positions_subtotal is the sum of line_net across non-alternative positions; net_total prefers Request.net_total if set (header-level discount applied), otherwise equals positions_subtotal; gross_total prefers Request.gross_total if set, otherwise is the sum of line_gross across non-alternative positions.
{ "gross_total": "0.00", "net_total": "0.00", "positions_subtotal": "0.00" }
Extracted order-level metadata. Null while the order is still parsing.
{ "contact_person": "Thomas Weber", "customer_reference": "PO-88213", "delivery_address": { "city": "Düsseldorf", "country": "DE", "postal_code": "40213", "street": "Rheinuferstraße", "street_number": "45" }, "delivery_recipient": "Baustelle Rheinpark", "order_date": "2026-07-08", "project_number": "OBJ-2026-0042", "quote_number": "AN-2026-0042", "requested_delivery_date": "2026-07-22", "shipping_terms": "frei Baustelle", "special_instructions": "Anlieferung nur vormittags 7–12 Uhr." }
The partner-side ERP order id, when known — from your acknowledgement's external_id or a previous Mercura-managed export; otherwise null.
Your last reported ERP import outcome for this order, or null if none yet.
{ "acknowledged_at": "2026-07-08T09:06:00Z", "external_id": "SO-2026-5567", "message": "Bestellung als Kundenauftrag angelegt.", "metadata": { "sales_order": "SO-2026-5567" }, "status": "SUCCESS" }
{ "created_at": "2026-07-08T08:30:00Z", "customer": { "address": { … }, "contact_person": "Thomas Weber", "custom_fields": { … }, "customer_id": "K-10042", "name": "Elektro Mustermann GmbH" }, "erp_offer_id": "SO-2026-5567", "id": "20456", "order_metadata": { "contact_person": "Thomas Weber", "customer_reference": "PO-88213", "delivery_address": { … }, "delivery_recipient": "Baustelle Rheinpark", "order_date": "2026-07-08", "project_number": "OBJ-2026-0042", "quote_number": "AN-2026-0042", "requested_delivery_date": "2026-07-22", "shipping_terms": "frei Baustelle", "special_instructions": "Anlieferung nur vormittags 7–12 Uhr." }, "positions": [ { … }, { … } ], "project": { "name": "Neubau Bürogebäude Rheinpark", "object_number": "OBJ-2026-0042" }, "request_custom_fields": { "Angebots-Nr": "AN-2026-0042" }, "request_id": "20456", "status": "READY_TO_EXPORT", "totals": { "gross_total": "0.00", "net_total": "0.00", "positions_subtotal": "0.00" }, "updated_at": "2026-07-08T09:05:00Z" }