Changelog - July 13 2026
Welcome to the latest Catch-e release! This is a big sprint for our API suite, with major upgrades to Quoting, Contracts and Card Services, plus a set of quality-of-life improvements and new integrations. Here's everything that's landed.
Quoting
Smarter field updates in patchQuote
Selected fields in the patchQuote API have moved from SET to OVERRIDE behaviour. Previously, a value sent as SET could still be overwritten by the system's default strategies (for example when a variant change re-triggered defaults). Fields declared as OVERRIDE now take precedence over system-calculated values, so the figure you send is the figure that sticks.
The updated fields by section:
Vehicle Details:
warranty_kms,warranty_mthsPricing Details:
bonus_amount_net,dealer_discount_net,dealer_rebate_net,discount_net,margin_net,rebate_netRegistration/CTP Details:
reg_initial_net,ctp_initial_net,plate_year,premium_plates_netVehicle Trade Details:
trade_in_amount_net,deposit_net,disposal_feeFBT Details:
fbt_business_use,previous_fbt_value
If you integrate with patchQuote, values you supply for these fields will now reliably override system defaults rather than being recalculated over the top of. No payload changes are required, the fields behave more predictably, exactly as most integrations already expect.
Contracts & Payments
New Contract Payments API suite
Five new endpoints let you read and manage contract payment structures and their payment schedules via the API, no more needing to work through the UI for payment variations:
GET /fm/contract/payment-structures— list payment structures for a contract, with optional filters forpayment_type(finance, comprehensive-insurance, finance-principal-interest, management-fee, roadside-assistance, sundry-payment) andstatus_flag(defaults to active)GET /fm/contract/payment-structures/{id}/vary— retrieve a single payment structurePATCH /fm/contract/payment-structures/{id}/vary— vary a payment structure, including schedule timing (periods_deferred,first_payment_due,payment_interval,due_day), placing payments on hold, and setting stop datesGET /fm/contract/payment-schedules— paginated schedules for a payment structure, with optionalpayment_period_nofilterPATCH /fm/contract/payment-schedules— bulk-edit schedulepayment_date,amount_netandamount_gstin a single batch
Additional Details
Four new permissions control access:
ContractPaymentStructures:Get,ContractPaymentStructures:Vary,ContractPaymentSchedules:GetandContractPaymentSchedules:Edit.All changes write audit records, and batch schedule edits are all-or-nothing, so if any row in a batch fails validation, the whole batch rolls back so your data stays consistent.
Posted and history-only schedules are protected and can't be edited via the API.
New getContractEvents API
A new GET /fm/contract/events endpoint returns a paginated list of contract events, with optional filters for:
contract_id— events for a specific contractposting_class_id— events for a specific posting classtable_name— one offm_drivers,fm_client_cost_centresorfm_client_divisionsstatus_flag—activeordeleted(defaults to active)
Filters can be combined and pagination is supported via page and page_size. Access is controlled by a new ContractEvents:Get permission, and responses follow the standard HAL format you'll know from our other collection endpoints. Ideal for audit trails, syncing contract activity into your own systems, or triggering downstream workflows.
FBT fields added to the Contracts API
The getContract and getContracts endpoints can now return a full FBT summary for a contract, bringing the API to parity with the FBT tab in Catch-e. A new opt-in embed=fbt parameter returns an _embedded.fbt object containing:
fbt_year_ending— the FBT year the figures are calculated forstart_of_year_date— start of the FBT year for the contractfbt_year_days— days in this FBT yeargross_up_ratetax_ratebudget_statutory_rateandactual_statutory_ratebudget_fringe_benefitandactual_fringe_benefit
Additional Details
The FBT fields are opt-in via
embed=fbton bothGET /fm/contracts/{contract_id}andGET /fm/contracts. If you don't request them, your existing responses are completely unchanged — no integration changes required.An optional
fbt_year_ending=YYYYparameter calculates the fields for a specific FBT year, defaulting to the current FBT year when not supplied.FBT fields are returned for contracts with an applicable FBT benefit type (operating, statutory or exempt). Contracts that can't support the calculation are silently skipped rather than breaking the response.
On the collection endpoint the FBT calculation runs per eligible contract on the page, so expect longer response times when using
embed=fbton lists. Swagger has been updated with the new parameters and response shape.
Card Services
New bulk import APIs for Cards
A full batch-based card import workflow is now available via the API. Upload a CSV of cards for a selected supplier and Catch-e validates every row, classifies each as create, update, invalid, duplicate or unauthorised, processes the valid rows, and gives you downloadable reports:
Upload & Validate — creates an import batch, validates all rows, and returns summary counts before anything is committed
Process — creates new cards and updates existing ones, returning a summary of created, updated, failed and skipped rows
GET /fm/cards/imports/{importBatchId}/errors— download an error CSV of invalid, duplicate or unauthorised rowsGET /fm/cards/imports/{importBatchId}/result— download a result CSV with the final outcome of every row, including thecard_idfor successful rows
Additional Details
Create vs update is determined automatically by supplier + card number, and each row must include a
contract_idorreg_no.Duplicate rows within the same file are detected and rejected with a clear reason, and blank optional values on updates won't overwrite existing data.
The workflow respects your
Cards:CreateandCards:Updatepermissions independently — missing one won't block the other — and every successful create or update writes normal card audit history.Frontend UI for managing bulk import for Cards is coming in the next few weeks.
Other enhancements
Residual Basis default at Client level
You can now set a default Residual Basis at the client level, with support in both the Catch-e UI and the API.
New quotes and contracts pick up the client's default Residual Basis automatically, reducing manual selection and keeping residual treatment consistent across a client's portfolio. Swagger documentation covers the updated API behaviour.
Automated LCC clearing with a client-level retention flag
Luxury Car Charge (LCC) clearing is now automated, and a new client-level retention flag lets you control whether LCC is retained or cleared for each client.
This removes a manual clearing step from your workflow. Set the retention flag once per client and Catch-e handles the rest.
Banking
Three new financial institutions for Driver/Employee bank accounts
Three financial institutions have been added, so Driver and Employee bank accounts with these BSBs can now be created and updated without validation errors:
BSB 671-000 — Cuscal Limited (People First Bank)
BSB 772-772 — Revolut Payments Australia Pty Ltd
BSB 840-303 — Zepto Payments Pty Ltd
Previously, attempting to save a bank account with one of these BSBs failed with a "financial institution not found" style validation error. These institutions are now available across all relevant screens and APIs, and existing BSB validation is unaffected.
Integrations & Data
New JATO vehicle data integration
Catch-e now integrates with JATO, a leading global provider of vehicle specification and pricing data. Reach out to us if you need help with this.
G-NAF address database updated to May 2026
Catch-e's address validation now runs on the May 2026 release of the G-NAF (Geocoded National Address File) database.
The May 2026 release adds around 41,000 addresses nationally, bringing the total to over 15.9 million Australian addresses, and retires roughly 7,000 invalid lot-numbered addresses in Queensland. Address lookups and validation in Catch-e now reflect this latest data.
Lily Improvements
Thank you to everyone for adopting Lily! We have continued to improve Lily’s base training dataset, improving over 20 articles in the past 2 weeks. We will continue to improve Lily’s training context and start rolling out new features over the coming months.
Questions
If you'd like more detail on any of these changes or want a hand with the new APIs, contact us through Lily. We’re more than happy to help. Don’t forget to check out our new customer portals: