Skip to navigation

Price a deal and find where it can be approved

Runs the calculator and the Approval Matrix over one payload and returns the join: each financier that can both price the deal and approve it, with the rate and repayment from the cheapest rate card that financier accepts.

The request is the union of the two tools’ fields, so anything either accepts is accepted here. Two differences from the standalone surfaces:

  • term is required. Matrix treats it as optional because a broker without a term in mind can still ask who would approve a deal. There is no repayment without a term, so the combined tool demands it.
  • Commercial only. type accepts commercial; consumer pricing carries its own entitlement and commission columns and is not folded in yet.

home_owner and asset_owner are the same question under the two tools’ names. Send either; sending both with different values is rejected rather than silently resolved.

The rate bracket is the join key, so a financier appears only when it can do both. An approval whose brackets were all filtered out by pricing has no rate to show and is omitted — it still appears in the standalone Matrix, which is the tool for that question. This is why destination_count can exceed the length of results.

Requires the matrix.enabled entitlement, and surfaces.matrix_calculator on GET /api/v1/feature-flags to be available. A run decrements both the calculator and Matrix daily allowances, because it consumes both engines.

If one engine fails and the other succeeds, the response is a 200 with degraded naming the missing half and the surviving half returned unjoined. An empty results with degraded: null means no financier matched; degraded set means the check could not be completed. The two are deliberately distinguishable.

Authentication

AuthorizationBearer

JWT access token obtained from POST /api/v1/auth/login, or a finput_sk_... API token

Headers

X-Finput-ClientenumOptional

Which client is asking, so every message in the response is worded for it. ios and android get sentences that state a fact and nothing more: no plan, no price, no link. Absent means web, which keeps its existing wording. An unrecognised value is treated like ios and android.

Allowed values:

Request

This endpoint expects an object.
coststringRequired

Asset cost. Compared GST-inclusive against an approval's min_asset_cost / max_asset_cost. A negative cost is rejected.

asset_valueintegerRequired>=1

Asset ID from GET /api/v1/assets/search.

termintegerRequired>=1

Months. Required here even though Matrix treats it as optional — there is no repayment without a term.

advance_arrearsenumRequired

Whether payments are made at the start or end of each period. none prices in arrears.

Allowed values:
repayment_frequencyenumRequired

none prices monthly.

cost_gstbooleanOptionalDefaults to false

Whether cost already includes GST.

abn_ageinteger or nullOptional>=0

ABN age (months).

gst_ageinteger or nullOptional>=0

GST registration age (months).

asset_ageinteger or nullOptional>=0

Asset age (months). Derived from year_model when that is sent instead.

year_modelinteger or nullOptional>=0

Build year, used to derive asset_age.

borrower_age_youngestinteger or nullOptional>=0

Youngest borrower's age (years). Tested against the approval's minimum — every borrower has to sit inside the band.

borrower_age_oldestinteger or nullOptional>=0

Oldest borrower's age (years), tested against the maximum. A single-borrower deal can send borrower_age instead and the API mirrors it into both ends.

borrower_ageinteger or nullOptional>=0

Shorthand for a single-borrower deal.

file_ageinteger or nullOptional>=0

Age of the borrower's credit file, in months — not the deal file. Months to match every other age criterion on the form (ABN age, GST age, asset age); it was days until the unit was unified.

credit_scoreinteger or nullOptional>=0

The borrower's credit score. A different criterion from file_age: this is the score, that is how long the file has existed, and an approval can gate on either or both.

industrystring or nullOptional

ANZSIC division. See GET /api/v1/approvals/options.

asset_stateenumOptional
Allowed values:
transaction_typeenumOptional
Allowed values:
home_ownerboolean or nullOptional
private_saleboolean or nullOptional
sale_hire_backboolean or nullOptional
preferred_financierlist of integersOptional

Restrict results to these organisation (financier) IDs.

typeenumOptionalDefaults to commercial
Commercial only for now. A consumer value is rejected rather than silently priced as commercial.
Allowed values:
depositfloatOptionalDefaults to 0
deposit_gstbooleanOptionalDefaults to false
deposit_percentagebooleanOptionalDefaults to false

Treat deposit as a percentage of cost rather than dollars.

brokeragefloatOptionalDefaults to 0
brokerage_gstbooleanOptionalDefaults to false
brokerage_percentagebooleanOptionalDefaults to false
origination_feefloatOptionalDefaults to 0
origination_fee_gstbooleanOptionalDefaults to false
balloonfloatOptionalDefaults to 0
balloon_gstbooleanOptionalDefaults to false
balloon_percentagebooleanOptionalDefaults to false

Treat balloon as a percentage. A percentage above 100 is rejected; a dollar balloon above 100 is ordinary.

doc_fee_financedstring or nullOptional
asset_ownerboolean or nullOptional

The calculator's name for home_owner. Send either; both with different values is rejected.

asset_age_plus_terminteger or nullOptional>=0
employment_statusstring or nullOptional
citizenship_statusstring or nullOptional
lvrfloat or nullOptional

Loan-to-value ratio as a percentage of asset value. Cards whose max_lvr is below this drop out.

Response

Priced approval destinations
resultslist of objectsOptional
priced_countintegerOptional
Rate cards that survived pricing for this deal.
destination_countintegerOptional

Approvals that were not ruled out. Can exceed the length of results, because an approval with no priced rate bracket has no rate to show and is omitted from the join.

degradedenumOptional

Null on a healthy run. Set when one engine failed and the other succeeded, naming the missing half (rates for the rate engine, approvals for the approval checks) — so an empty results can be told apart from "we could not check".

Allowed values:
pricedlist of objectsOptional

Present only on a degraded run where the rate engine survived: the unjoined rate cards, so the broker still sees something useful.

financierslist of objectsOptional

Present only on a degraded run where the approvals lookup survived: the unjoined Matrix groups.

Errors

400
Bad Request Error
403
Forbidden Error
429
Too Many Requests Error