API reference
LoanManager
A ledger that tells the story. Open the product
GET/v1/loanmanagerOpen ↗
The account from the page’s own query fields, as data
POST/v1/loanmanager/applicationKey
The application against the product version and form published on that day
{catalogue, product, onDay, request, form, answers, applicant}POST/v1/loanmanager/contractKey
Where a contract stands, from prepared to funded
{contract: {pricing}, events: [{on, to}], asAt}GET/v1/loanmanager/assessment-copyOpen ↗
When the consumer’s copy of the assessment is due under s 132
| Query | |
|---|---|
requested | YYYY-MM-DD |
credit | YYYY-MM-DD |
POST/v1/loanmanager/accountKey
One loan replayed from its terms and what happened to it
{terms, events, asAt}GET/v1/lOpen ↗
Calls a lender’s own program makes against the records its hosted pages keep, under /v1/l/<lender id>/: applications from its own front end, sign-in links for its staff, the work queue, case files and every action its staff take on them for a console of its own, the payments and requests its borrowers made, the daily run and the funder pack.
GET/v1/l/:tenant/contract-templatesKey
Your contract templates, and which version of each is published.
POST/v1/l/:tenant/contract-templatesKey
A new template, or one from an example: { "starter": "mutual-nda | services | contractor | referral | variation | personal-guarantee | loan-sacc | loan-macc | loan-personal | loan-car | loan-mortgage | loan-business | loan-business-supplier-pay | loan-business-invoice-advance | loan-business-line-of-credit | loan-business-equipment" }, or { "name", "title", "text", "signers": [{ "label", "side" }], "fields": [] }. Each {{name}} in the wording that is not described becomes a field.
GET/v1/l/:tenant/contract-templates/:idKey
One template: its draft and its latest version.
POST/v1/l/:tenant/contract-templates/:id/publishKey
Publish the draft as the next version. Wording that began as an example needs { "reviewed": true } for real records.
| Body | |
|---|---|
reviewed | true: it has been reviewed for your use |
GET/v1/l/:tenant/contractsKey
Your contracts, newest first, each with its status and who has signed.
| Query | |
|---|---|
status | — |
q | — |
POST/v1/l/:tenant/contracts/runKey
Do what is due today: reminders, contracts past their day, notices of an end date and renewals. Where Creditcrest runs your day this happens by itself.
POST/v1/l/:tenant/contractsKey
A contract from a template’s latest version, or from wording of its own. It stays a draft unless "send" is true; then it answers with each signer’s link.
| Body | |
|---|---|
template | a template’s id |
title | optional; the template’s if left out |
text | wording of its own, or a change for this one |
values | { field: value } |
signers | [{ "role", "name", "email" }] |
startsOn | YYYY-MM-DD |
endsOn | YYYY-MM-DD |
termMonths | whole months, if there is no end date |
renewal | none | remind | auto |
links | { "application" | "loan": a reference } |
send | true to send it now |
signWithinDays | 1 to 30 |
GET/v1/l/:tenant/contracts/:idKey
One contract, with its history and whether that history is unchanged.
POST/v1/l/:tenant/contracts/:id/sendKey
Send a draft for signature: its document is frozen and fingerprinted, and each signer whose turn it is gets their link, by email where they have one and you may send it. Answers with the links.
POST/v1/l/:tenant/contracts/:id/remindKey
Send a reminder to everyone it is waiting on who has not had one today. Answers with their links.
POST/v1/l/:tenant/contracts/:id/voidKey
Withdraw a draft or a contract out for signature. A signed one cannot be: amend it.
| Body | |
|---|---|
reason | why |
GET/v1/l/:tenant/contracts/:id/pdfKey
The contract as a PDF, with every signature so far.
GET/v1/l/:tenant/loansKey
Every funded loan, as the LoanManager dashboard lists it: balance, days past due and band, risk class, hardship and flags, with the portfolio’s tiles. Needs that lender’s API key.
| Query | |
|---|---|
status | open | current | arrears | hardship | closed | paid-out | written-off | written-off-hardship |
band | current | 1-30 | 31-60 | 61-90 | 91-120 | 120+ |
hardship | request | undecided | arrangement | any | ever | none |
asked | statement (a payout statement still owed) | complaint (a complaint on file) |
product | a product key |
q | a loan or application reference, customer id, name or mobile |
sort | priority | dpd | balance | principal | next | risk | borrower | reference |
page | from 1, 25 loans a page |
GET/v1/l/:tenant/loans/:loanRefKey
One loan: its account as the ledger runs it today — schedule, every transaction with its allocations, balances, payout figure, hardship — with its repayment history month by month, its score history and the borrower’s requests. Needs that lender’s API key.
GET/v1/l/:tenant/loans/:loanRef/actionsKey
The servicing actions on one loan, as its LoanManager page offers them, for a lender building its own staff console: each with whether it is open on the loan now and why not, the roles that may take it, and its fields — kind (money, day, choice, choices, text or yes), label, whether required, choices and default. With the lastSeq and requestsSeq to send it with. Needs that lender’s API key.
| Query | |
|---|---|
by | optional: a work email on the lender’s staff list, to say whether that person may take each (allowed) |
POST/v1/l/:tenant/loans/:loanRef/actionsKey
A servicing action on one loan, taken exactly as its LoanManager page takes it: the same checks, the same ledger, the same webhooks. by is the person it is recorded as, active on the lender’s staff list, and their role there decides what they may do. Written after the lastSeq and requestsSeq sent, so a change made since is a 409 conflict, never written over, and a call sent again is never recorded twice. Answers the events posted and the loan as GET /v1/l/:tenant/loans/:loanRef answers it; a payout statement, the statement too. Not charged: servicing is in the take-rate on each advance. Needs that lender’s own key, live for a lender whose records are live.
| Body | |
|---|---|
action | payment | settle | dishonour | fee | waive | refund | notice | decide | end-arrangement | write-off | payout-statement | default-notice | customer-paid | security-released |
by | the work email of the staff member taking it, active on the lender’s staff list |
lastSeq | the loan’s lastSeq, as you read it |
requestsSeq | the loan’s requestsSeq, as you read it |
amount | money, for payment, fee, waive, refund, customer-paid |
planAmount | money, for decide |
on | day, for payment, settle, dishonour, fee, end-arrangement, default-notice, customer-paid, security-released |
receivedOn | day, for notice |
decidedOn | day, for decide |
until | day, for decide |
first | day, for decide |
asAt | day, for payout-statement |
method | choice, for payment |
part | choice, for fee, waive |
channel | choice, for notice |
outcome | choice, for settle, decide |
cadence | choice, for decide |
payment | choice, for dishonour |
notice | choice, for decide |
request | choice, for settle, payout-statement |
row | choice, for fee |
to | choice, for customer-paid |
reasons | choices, for notice |
reference | text, for payment, settle, customer-paid, security-released |
reason | text, for payment, settle, dishonour, fee, waive, refund, decide, end-arrangement, write-off, default-notice |
statedReason | text, for notice |
again | yes, for payment |
overpay | yes, for payment |
enforcement | yes, for fee |
confirm | yes, for write-off |
hardshipRelief | yes, for write-off |
POST/v1/l/:tenant/applications/prefillKey
What to fill your own form in with, once the applicant has proved both contacts: their details from their last application with you, or — for someone who signed up before applying — the name they saved. {found: false} for anyone else. The same keys as an application, and refused (not_open) while you take only sign-ups.
{contact: {email, mobile, emailToken, mobileToken}}, the tokens POST /v1/identity/contact/check gave back once each code was rightGET/v1/l/:tenant/requests/:loanRefKey
What a borrower asked for on a loan: payments with their state (processing, settled or returned), hardship notices, complaints and payout statements.
GET/v1/l/:tenant/sign-upsKey
The people who signed up before applying and said yes to the lender’s marketing emails: each one’s email address and first name, with the version of the question and when it was answered. Read it again before every send: anyone can say no on their account at any time, and an account not used is deleted. Pages of 200, from ?after=<the last customerId>.
GET/v1/l/:tenant/support/:referenceKey
A hardship notice or complaint given on the support page, by its acknowledgement reference: what was asked, and the name and contact to reply to. The loan reference is as the person typed it, for the lender to match.
POST/v1/l/:tenant/requests/:loanRef/settleKey
Settle or return a payment a borrower asked for. Settled, it becomes the payment on the account, once, whatever the number of times it is sent.
| Body | |
|---|---|
requestSeq | the seq of the payment requested event |
outcome | settled | returned |
reference | the payment’s reference in the lender’s system |
on | YYYY-MM-DD, the day; today in Sydney if left out |
reason | for a return, why |
POST/v1/l/:tenant/dayKey
The daily run: seals the day before for every funded account, and lists the debits, hardship and complaint deadlines, payout statements, processing payments and messages due. Where the lender’s payments are connected (Zepto, with payment collection allowed), each repayment due today on a loan whose borrower authorised a PayTo agreement is collected — never more than the ledger says is owed that day, one at a time — and goes on the ledger when Zepto reports it settled. It sends nothing else.
| Body | |
|---|---|
asAt | YYYY-MM-DD; today in Sydney if left out. |
GET/v1/l/:tenant/staffKey
The lender’s staff list, as its Staff page shows it: each person with their id, work email, role and whether they are active — those who may be named in by — and the changes waiting for a second administrator. Needs that lender’s API key.
POST/v1/l/:tenant/staffKey
One change to the staff list, by an operations admin on it, under the Staff page’s own rules: nobody changes their own entry, the last administrator stays one, and a change that gives a senior analyst’s or an administrator’s role (or stops requiring a passkey) waits for a second administrator where there is one. Needs that lender’s API key.
{by, seq, op, …}: op is add | role | deactivate | reactivate | reset-passkeys | passkey-rule | approve | reject. add takes name, email, role; role takes id, role; deactivate, reactivate and reset-passkeys take id; passkey-rule takes roles ([] or ["senior"]); approve and reject take request. seq is the list’s, as read.