Write an offer on this contact's linked CRM record
POST/api/contacts/:contact/crm/quote
Creates a quote in the connected CRM for the record this contact is linked to. Refused when the contact carries more than one linked record, for the same reason a booking is: an offer written on the wrong chart is a document sent to a patient about somebody else's treatment.
The prices come from this request. Since 2026-09-28 the CRM's catalogue publishes a price (before that it carried none), but an offer is a negotiated document: the catalogue price is where the panel starts, and the caller asserts the figure actually offered — a pricing-authority question a clinic answers with the tenant's write switch.
This endpoint requires MORE than the provider does. The provider accepts
a line with no quantity, no amount and no currency — measured — and the
offer that results sits in a clinic's pipeline carrying no value, which
is the accepted-but-incomplete write that the whole staged opening exists
to prevent. A line naming a catalogue kind nobody has measured
(package) is refused rather than sent hopefully: the vendor's
entityType is a plain string, and an unrecognised value is not
guaranteed to be rejected.
Request
Responses
- 201
- 409
- 422
Written, and read back — write.observed.routed_to says where each line landed.
Not connected, not linked, ambiguous link, or writing closed.
A precondition refused the write — an unmeasured catalogue kind, a currency the clinic does not list, or a draft that could never be an offer.