patchQuote - Finance Tab
patchQuote - Finance Tab
Enhancement to this process are being deployed on 21/09/2026
Overview
The fields listed on this page are all found on the Quotes / Finance tab.
Note: Not all fields are supported yet. If a field is listed below it is supported.
Refer to main page for full details of patchQuote functionality.
Supplementary SWAGGER documentation is available here: api.catch-e.com/docs/#/Quotes/patchQuote
Body - JSON
Early Termination Fee and Budget Financed behaviour
Both fields are plain "set" values — once patched, they are stored as sent and are not recalculated by any later, unrelated change.
budgets_financedfeeds into the same Financed Amount / Total Brokerage figures as Early Termination Fee.
Residual Rate behaviour
residual_rateis only accepted on novated quotes. On a non-novated quote, a submittedresidual_rateis silently ignored (the request still returns 200) — the rate continues to be derived from the Residual Amount / variant calculation, matching how the field already behaves on the Quotes screen.On a novated quote, an explicitly patched
residual_rateis protected from being recalculated away — including when the quote's residual is locked, where the residual amount and GST re-derive from the keyed rate and the lock is retained.Changing the Residual Amount on a non-novated quote recalculates
residual_rateas expected; sendingresidual_ratedirectly has no effect on that quote type.
REVS/PPSR, Fuel on Delivery, Delivery Fee and Other Brokerage behaviour
An explicit value for any of these four fields wins over a recalculation driver (e.g. Term, Quote Date) sent in the same request.
Across separate requests, these four fields are not protected: a later, separate request that recalculates the quote (for example, changing the Financier) can reset a previously patched value back to
0.00.This mirrors the existing behaviour of the equivalent fields on the Quotes → Finance screen, so it is expected rather than a defect — integrations should not assume a patched value is permanent unless it's re-sent with any request that could trigger a recalculation.
Known limitation — Total Brokerage rounding (pre-existing, not introduced by this release)
total_brokerage is capped at 999,999.99 and silently clamps once the broker-section fees it sums (which now include other_brokerage) push past that limit, while Amount Financed keeps the true figure.
Response Details
Success
200 - OK
json
{ "quote_id": "138261", "early_termination_fee": 1500.50, "budgets_financed": 25000.00, "residual_rate": 0.4500000000, "revs_fee": 45.50, "fuel_on_delivery_fee": 60.00, "delivery_fee": 350.75, "other_brokerage": 125.00, "_links": { "self": { "href": "https://api.catch-e.loc/qt/quotes/138261" } } }Error Response Details
json
{ "validation_messages": { "early_termination_fee": { "isEmpty": "Value is required and can't be empty" } }, "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Unprocessable Entity", "status": 422, "detail": "Failed Validation" }json
{ "validation_messages": { "revs_fee": { "notBetween": "The input is not between '0' and '999999.99', inclusively" } }, "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Unprocessable Entity", "status": 422, "detail": "Failed Validation" }json
{ "validation_messages": { "residual_rate": { "notBetween": "The input is not between '0' and '0.9999999999', inclusively" } }, "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Unprocessable Entity", "status": 422, "detail": "Failed Validation" }401 Unauthorized
json
{ "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Unauthorized", "status": 401, "detail": "Unauthorized" }403 Forbidden
json
{ "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Forbidden", "status": 403, "detail": "Forbidden" }406 Not Acceptable
json
{ "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Not Acceptable", "status": 406, "detail": "Not Acceptable" }415 Unsupported Media Type
json
{ "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Unsupported Media Type", "status": 415, "detail": "Not Acceptable" }423 Locked
json
{ "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Locked", "status": 423, "detail": "locked_by" }500 Internal Error
json
{ "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "string", "status": 599, "detail": "string" }default Unexpected Error
json
{ "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "string", "status": 599, "detail": "string" }