July 13th, 2026
Changelog
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.
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_mths
Pricing Details: bonus_amount_net, dealer_discount_net, dealer_rebate_net, discount_net, margin_net, rebate_net
Registration/CTP Details: reg_initial_net, ctp_initial_net, plate_year, premium_plates_net
Vehicle Trade Details: trade_in_amount_net, deposit_net, disposal_fee
FBT 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.
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 for payment_type (finance, comprehensive-insurance, finance-principal-interest, management-fee, roadside-assistance, sundry-payment) and status_flag (defaults to active)
GET /fm/contract/payment-structures/{id}/vary — retrieve a single payment structure
PATCH /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 dates
GET /fm/contract/payment-schedules — paginated schedules for a payment structure, with optional payment_period_no filter
PATCH /fm/contract/payment-schedules — bulk-edit schedule payment_date, amount_net and amount_gst in a single batch
Additional Details
Four new permissions control access: ContractPaymentStructures:Get, ContractPaymentStructures:Vary, ContractPaymentSchedules:Get and ContractPaymentSchedules: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.
A new GET /fm/contract/events endpoint returns a paginated list of contract events, with optional filters for:
contract_id — events for a specific contract
posting_class_id — events for a specific posting class
table_name — one of fm_drivers, fm_client_cost_centres or fm_client_divisions
status_flag — active or deleted (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.
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 for
start_of_year_date — start of the FBT year for the contract
fbt_year_days — days in this FBT year
gross_up_rate
tax_rate
budget_statutory_rate and actual_statutory_rate
budget_fringe_benefit and actual_fringe_benefit
Additional Details
The FBT fields are opt-in via embed=fbt on both GET /fm/contracts/{contract_id} and GET /fm/contracts. If you don't request them, your existing responses are completely unchanged — no integration changes required.
An optional fbt_year_ending=YYYY parameter 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=fbt on lists. Swagger has been updated with the new parameters and response shape.
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 rows
GET /fm/cards/imports/{importBatchId}/result — download a result CSV with the final outcome of every row, including the card_id for successful rows
Additional Details
Create vs update is determined automatically by supplier + card number, and each row must include a contract_id or reg_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:Create and Cards:Update permissions 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.
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.
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.
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.
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.
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.
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.
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: