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

JSON Field

Format

Notes

Mandatory

Financier

(Column One)

finance_type_id

listbox

Updates the Finance Type

No

base_rate

number

Updates the Base Rate. Example: To update Base Rate to 10.50% use "0.1050" in payload. If lock_base_rate_flag = 'yes', the base_rate will not be recalculated and a 422 error "Base rate is locked" is returned.

No

budgets_financed

number

Feeds the same Financed Amount / Total Brokerage figures as Early Termination Fee.

No

claimable_gst

number

Updates GST Claimable

No

client_margin

number

Calculates the Client Margin. If [gb_controls]client_margin_allow_negative_flag = 'no', negative values return 422 error "Client Margin” must be 0 or a positive number.

No

early_termination_fee

number

Feeds Financed Amount / Total Brokerage

No

lock_base_rate_flag

string

Set 'yes' to lock the Base Rate (default 'no'). Prevents recalculation and triggers alert. Note: Ignored in Catch-e UI until DEV-22363 is completed.

No

delivery_fee

number

Explicit value wins in the same request as a recalculation driver, but is not protected across separate requests (can reset to 0.00 on a later recalculating request)

No

deposit_net

number

Updates Deposit Net (shown as calculated Deposit Gross in UI)

No

deposit_gst

number

Updates Deposit GST

No

fuel_on_delivery_fee

number

Explicit value wins in the same request as a recalculation driver, but is not protected across separate requests (can reset to 0.00 on a later recalculating request)

No

revs_fee

number

Explicit value wins in the same request as a recalculation driver, but is not protected across separate requests (can reset to 0.00 on a later recalculating request)

No

trade_in_reg_no

string

Updates Trade-in Registration

No

trade_in_amount_net

number

Updates Trade-in Net (shown as calculated Gross in UI)

No

trade_in_amount_gst

number

Updates Trade-in GST

No

Broker (Column Two)

commission_rate

number

Updates Commission Rate

No

commission

number

Updates Commission Fee

No

establishment_fee

number

Updates Establishment / Admin Fee

No

originator_fee

number

Updates Originator Fee

No

other_brokerage

number

Residual

(Column Three)

number

An explicit value wins over a same-request recalculation driver, but — unlike the Broker column's existing fields — is not protected across separate requests; a later request that recalculates the quote can reset it back to 0.00

No

residual_net

number

Updates Residual (Excl GST). Residual GST and Residual Incl GST are auto-calculated.

No

residual_rate

number

Fraction, 0 – 0.9999999999 (up to 10 dp). Editable on novated quotes only — on a non-novated quote a submitted value is silently ignored (200, not rejected); the rate continues to be derived from Residual Net / variant calculation there instead.

No

Finance Application

originator_id

string

Updates Originator (if configured)

No

application_reference

string

Updates Application Reference

No

application_date

timestamp

Updates Application Date

No

application_status_flag

listbox

Updates Status

No

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_financed feeds into the same Financed Amount / Total Brokerage figures as Early Termination Fee.

Residual Rate behaviour

  • residual_rate is only accepted on novated quotes. On a non-novated quote, a submitted residual_rate is 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_rate is 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_rate as expected; sending residual_rate directly 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

Validation Message

Comments

422 - <field>.isEmpty

Applies to all seven fields. An empty string or an explicit null returns this error and leaves the stored value untouched.

422 - <field> out of range

Value is negative or exceeds the field's maximum (999,999.99 for the four fee fields and Early Termination Fee; 9,999,999.99 for Budget Financed; 0.9999999999 for Residual Rate).

422 - <field> over-precision

Value has more decimal places than the field allows (2 for the fee fields; 10 for Residual Rate).

422 - <field> not numeric

Value is not a valid number.

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

Validation Message

Comments

401 Unauthorized

1. You have not authenticated before running this API or 2. The token_timeout of the current session has passed. You need to authenticate again.

json

{ "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Unauthorized", "status": 401, "detail": "Unauthorized" }

403 Forbidden

Validation Message

Comments

403 Forbidden

- You do not have permissions for this request. - Go to System Roles and enter 'web_services' - Navigate to the Roles / APIs tab to make sure the permission you need to run this API is checked.

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

Validation Message

Comments

423 Locked

The quote is currently locked by another session. Retry once the lock is released.

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" }