{
  "service": "Creditcrest Compare",
  "version": "1.0.0",
  "not_advice": "Creditcrest Technologies is not a credit provider, is not a credit assistance provider, and does not hold an Australian credit licence. Its software produces evidence; the licensee makes the decision.",
  "endpoints": {
    "GET /v1/compare": {
      "what": "Rank the products in the dataset for one loan.",
      "query": {
        "amount": "dollars borrowed, default 500000",
        "value": "what the property is worth, default 625000 — the two together are the loan to value ratio, which is what decides the rate",
        "years": "the term, default 30",
        "purpose": "OWNER_OCCUPIED or INVESTMENT",
        "repayment": "PRINCIPAL_AND_INTEREST or INTEREST_ONLY",
        "io": "years of interest-only repayments, used only with repayment=INTEREST_ONLY"
      }
    },
    "GET /v1/dataset": {
      "what": "What was read, from whom, and when."
    },
    "GET /v1/enrich": {
      "what": "Creditcrest Enrich: one transaction in, the category, the third party, and how confident it is and why. Takes setting: strict, balanced (the default) or broad; every answer says which it was read under."
    },
    "POST /v1/enrich": {
      "what": "The same for a list of transactions, with the coverage of the whole list by money and by row, under the setting sent in the body or the query."
    },
    "GET /v1/enrich/accuracy": {
      "what": "What Enrich gets right, measured per category and per confidence band against payee lists nobody here chose."
    }
  },
  "figures": {
    "source": "Consumer Data Right Product Reference Data",
    "retrieved_at": "2026-11-04T23:34:18.786Z",
    "brands": [
      "AMP Bank GO",
      "My State PM Production",
      "Greater Bank",
      "Arab Bank Australia Ltd Prod",
      "NORTHERN INLAND CREDIT UNION LTD.",
      "ME Bank",
      "Police Bank",
      "Border Bank",
      "Westpac",
      "NAB",
      "ANZ",
      "CommBank",
      "Regional Australia Bank",
      "ING",
      "Community First Credit Union",
      "Bankwest",
      "FIRST OPTION BANK",
      "Beyond Bank Australia",
      "Cairns Bank",
      "Teachers Mutual Bank",
      "IMB Bank",
      "SCCU",
      "Bank of Sydney",
      "AMB Bank Product",
      "Bank First Production",
      "Up",
      "Broken Hill Bank",
      "Bendigo Bank",
      "Defence Bank Limited",
      "Summerland",
      "Dnister Bank",
      "Queensland Country Bank",
      "CENTRAL MURRAY CREDIT UNION LIMITED",
      "P&N Bank",
      "bcu",
      "Credit Union SA",
      "Gateway Bank",
      "Qudos Bank",
      "Fire Service Credit Union",
      "MOVE Bank",
      "St. George Bank",
      "BankSA",
      "Bank of Melbourne",
      "A-Auswide Bank",
      "UniBank",
      "Firefighters Mutual Bank",
      "Health Professionals Bank",
      "Bank Australia",
      "Judo Bank",
      "Macquarie",
      "ubank",
      "Goulburn Murray Credit Union Co-Operative Ltd",
      "LCU",
      "Coastline",
      "UNITY BANK",
      "THE CAPRICORNIAN",
      "BankVic",
      "South West Slopes Credit Union Ltd trading as SWSbank",
      "POLICE CREDIT UNION LIMITED",
      "ORANGE CREDIT UNION LTD",
      "MACARTHUR CREDIT UNION LTD",
      "WOOLWORTHS TEAM BANK",
      "People First Bank",
      "Heritage",
      "Easystreet",
      "The Mutual Bank",
      "Great Southern Bank",
      "QBANK",
      "HORIZON BANK",
      "BankWAW",
      "HUME BANK LIMITED",
      "WARWICK CREDIT UNION",
      "Bank of us",
      "TRANSPORT MUTUAL CREDIT UNION LTD",
      "Australian Mutual Bank",
      "Bank of Queensland",
      "BOQ Specialist",
      "RACQ Bank",
      "Virgin Money Australia",
      "Bank of China",
      "ANZ Plus",
      "Unloan Prod",
      "CENTRAL WEST CREDIT UNION LTD",
      "Newcastle Permanent",
      "BNK Bank (Goldfields Money/BCHL)",
      "Aussie Home Loans",
      "AFG Home Loans Alpha",
      "Connective Select Home Loans",
      "NRMA Insurance",
      "Qantas Money",
      "Tiimely",
      "Liberty Financial"
    ],
    "products": 1448
  },
  "docs": "/developers",
  "openapi": "/openapi.json",
  "errors": "/developers/errors",
  "every_endpoint": {
    "GET /v1/broker": "The best interests file for the query below, as data: every option costed, what the file still needs, and its seal.",
    "GET /v1/broker/fields": "This description: every field the file takes.",
    "GET /v1/back-book": "What a borrower is paying, against what their own lender and the rest of the imported data publish today for a loan of the same shape at the same loan to value ratio.",
    "GET /v1/small-amount": "The same costing, as data.",
    "GET /v1/small-amount/provisions": "The provisions, as data.",
    "GET /v1/loanmanager": "The account from the page’s own query fields, as data",
    "POST /v1/loanmanager/application": "The application against the product version and form published on that day",
    "POST /v1/loanmanager/contract": "Where a contract stands, from prepared to funded",
    "GET /v1/loanmanager/assessment-copy": "When the consumer’s copy of the assessment is due under s 132",
    "POST /v1/loanmanager/account": "One loan replayed from its terms and what happened to it",
    "GET /v1/operations": "Describes this API: what it takes and what it returns.",
    "POST /v1/operations/case": "The file replayed",
    "POST /v1/operations/queue": "The queue, in the order to pick files up",
    "GET /v1/compliance": "Describes this API: what it takes and what it returns.",
    "POST /v1/compliance/readiness": "{gates: [{key, status, attestedBy, attestedOn, evidence, expiresOn, mandatory}], asAt, environment?, required?}",
    "POST /v1/compliance/capabilities": "Shadow on turns off everything but keeping records",
    "POST /v1/compliance/changes": "{requests: [{id, control, change, requestedBy, approvedBy, approvedOn, rejectedBy}], approvers: [...]}",
    "POST /v1/compliance/target-market": "{tmd: {criteria, channels, reviewEveryDays, triggers}, facts, channel, asAt, metrics}",
    "POST /v1/compliance/traceability": "{matrix: {obligations, controls, tests, evidence}, asAt}",
    "GET /v1/portal": "Describes this API: what it takes and what it returns.",
    "POST /v1/portal/account": "The borrower’s view of their account, from the ledger",
    "POST /v1/portal/render": "A message, rendered, or why not",
    "POST /v1/portal/may-contact": "{purpose, channel, offersSmallAmountCredit, requestedByConsumer, recipient, recentSends, frequencyCap, journeyOver, onDay}",
    "GET /v1/growth": "Describes this API: what it takes and what it returns.",
    "POST /v1/growth/check-event": "The problems with an event, if any",
    "POST /v1/growth/funnel": "The funnel in people, and cost per funded loan",
    "POST /v1/growth/experiment": "Whether it may run",
    "POST /v1/growth/guardrails": "Whether growth pauses",
    "POST /v1/loanmanager/book": "The book added up on a day",
    "GET /v1/intent": "Describes this API: what it takes and what it returns.",
    "POST /v1/intent/read": "{accounts: [{terms, events, asAt}], conduct, reading?, declared? (Creditcrest Apply’s feeds.intent), assessedSurplus?, weights?}",
    "POST /v1/intent/calibrate": "{outcomes: [{index, outcome}]}",
    "GET /v1/evidence": "Describes this API: what it takes and what it returns.",
    "POST /v1/evidence/coverage": "{product, accounts: [{id, role, from, to}], applicationDay, selfEmployed?, refinancing?, policy?}",
    "GET /v1/identity": "Describes this API: what it takes and what it returns.",
    "POST /v1/identity/contact/start": "{channel: email|mobile, destination, lender}",
    "POST /v1/identity/contact/resend": "{token}",
    "POST /v1/identity/contact/check": "{token, code}",
    "GET /v1/identity/address": "G-NAF suggestions",
    "POST /v1/identity/id/start": "{reference, callback}",
    "POST /v1/identity/id/webhook": "The provider’s signed result (X-Signature-V2, with an X-Timestamp inside five minutes)",
    "POST /v1/identity/decision": "{record, rules, asAt}",
    "POST /v1/identity/record": "{applicant, contacts, identity, address, rules, asAt}",
    "GET /v1/aml": "Describes this API: what it takes and what it returns.",
    "POST /v1/aml/cdd": "{cip, screening, purpose}",
    "POST /v1/aml/risk": "{customer, settings?}",
    "POST /v1/aml/monitor": "{accounts, settings?, holidays?}",
    "POST /v1/aml/smr": "{events, asAt, holidays?}",
    "GET /v1/aml/compliance-report": "The reporting window",
    "GET /v1/payments": "Describes this API: what it takes and what it returns.",
    "GET /v1/credit-reporting": "Describes this API: what it takes and what it returns.",
    "POST /v1/payments/aba": "A BECS direct entry file, or the reasons it was refused",
    "POST /v1/payments/debits": "The debits to raise on a day",
    "POST /v1/payments/return": "A returned debit as ledger events and conduct",
    "POST /v1/payments/payto": "A PayTo agreement replayed",
    "POST /v1/payments/reconcile": "{expected, settled}",
    "POST /v1/payments/payouts": "{contracts: [{reference, state, amount, payee, nameCheck}]}",
    "POST /v1/credit-reporting/history": "{reference, terms, events, arrangements?, asAt, grace?}",
    "POST /v1/credit-reporting/submission": "{month, accounts: [{reference, terms, events, arrangements}], previous?}",
    "POST /v1/credit-reporting/default": "{terms, events, asAt, s6qNotice, s21dNotice, statuteBarred, hardshipRequest, threshold?}",
    "POST /v1/credit-reporting/prepare": "The month’s contribution as it would be sent, its SHA-256, and the check before a person at the lender approves it",
    "POST /v1/credit-reporting/obligations": "The lender’s filings replayed from its own events: each one’s step, due day, overdue flag and approval, and its enquiry log",
    "GET /v1/complaints": "Describes this API: what it takes and what it returns.",
    "POST /v1/complaints/clock": "One complaint replayed",
    "POST /v1/complaints/register": "The register with systemic grouping",
    "POST /v1/complaints/extract": "The IDR data extract",
    "GET /v1/privacy": "Describes this API: what it takes and what it returns.",
    "POST /v1/privacy/access": "{request: {receivedOn, kind, identityCheckedOn?, respondedOn?, refused?}, asAt}",
    "POST /v1/privacy/correction": "{request: {receivedOn, kind, agreedInWritingUntil?, correctedOn?, noticeGivenOn?}, asAt}",
    "POST /v1/privacy/register": "The register checked",
    "POST /v1/privacy/disposal": "What falls due",
    "POST /v1/privacy/breach": "{breach: {awareOn, assessedOn?, eligible?, ...}, asAt}",
    "POST /v1/privacy/automated-decisions": "{uses: [...], decisions: [{kind, solely}], asAt}",
    "GET /v1/documents": "Describes this API: what it takes and what it returns.",
    "POST /v1/documents/register": "What the product must give, and before which step",
    "POST /v1/documents/version": "Checked for placeholders and hashed",
    "POST /v1/documents/check": "Whether a document may be issued: a credit guide missing an item s 126 requires may not",
    "POST /v1/documents/proceed": "{step, given: [{key, version, sha256, givenOn}], product, context?, library?, onDay?}",
    "POST /v1/documents/assessment-copy": "{requestedOn, creditDay?}",
    "GET /v1/apply": "Describes this API: what it takes and what it returns.",
    "GET /v1/apply/form": "The standard form for a kind of credit, and its coverage",
    "POST /v1/apply/customise": "A lender’s form from a base",
    "POST /v1/apply/coverage": "Which topics the form covers, and which required ones it does not",
    "POST /v1/apply/publish": "Refused while a required topic is unasked without an approved exception",
    "POST /v1/apply/record": "The sealed reasonable inquiries record",
    "GET /v1/score": "Describes this API: what it takes and what it returns.",
    "POST /v1/score": "Score an applicant against the lender’s model borrower, or on the plain scale out of 1200, with its risk class (AAA to CC) and, on the rating, the chance it is not repaid in full. The answer carries the first entry of the rating history, to keep.",
    "POST /v1/score/model-borrower": "Count completed and written-off loans in the lender’s model borrower for one loan type, up to 25 a call: its own rating moves with each by K × (result − expected). Its profile is Creditcrest’s shared one for the type. A write-off with hardship relief is a loss, counted apart. Send it back each time; each loan counts once.",
    "POST /v1/score/history": "Bring a loan’s rating history up to a day from its ledger: every repayment, dishonour, cleared arrears, early payout, completion or write-off (with hardship relief or not) since, each once, with the risk class before and after. Hardship never lowers it.",
    "POST /v1/score/benchmark": "Build a model borrower’s profile from closed loans in one go.",
    "POST /v1/score/validate": "How well the score separates good and bad loans: AUC, Gini, KS and the bad rate in each risk class beside the range it stands for.",
    "POST /v1/score/update": "Move a rating by repayment results: each instalment is a match.",
    "GET /v1/l": "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/score/model-borrower": "The lender’s model borrower for a loan type (?type=sacc, macc, personal, secured, car or business; the first it offers if none): its name, its own rating, the shared profile for the type, and every one of its loans that moved it.",
    "GET /v1/l/:tenant/score/history/:loanRef": "A loan’s rating history: the assessment against the model borrower, measure by measure, then every change since, each with its day, reason, risk class before and after, and the gap to the model borrower; its risk class now, D once written off or 90 days past due.",
    "GET /v1/sign": "Signing for any document.",
    "POST /v1/sign/requests": "Ask for a signature. Answers with the link to send the signer: the request travels sealed inside it, so nothing is stored.",
    "POST /v1/sign/evidence": "Open the evidence token a signer brought back to your return address: the evidence, its seal, the check, and a certificate of signing to keep. Only the lender that asked can open it.",
    "POST /v1/sign/certificate": "The certificate of signing as a PDF, to keep with the document: the drawn signature as drawn, the typed name, the fingerprints and the seal. Made only for evidence whose seal checks; answers application/pdf.",
    "POST /v1/sign/verify": "Check evidence and its seal, and the document if you send it: valid, or exactly why not, each reason with a code.",
    "GET /v1/contracts": "Write a contract once as a template, fill it in, have every party sign it with Creditcrest Sign, and keep it with its history, its end date and its renewal.",
    "GET /v1/l/:tenant/contract-templates": "Your contract templates, and which version of each is published.",
    "POST /v1/l/:tenant/contract-templates": "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/:id": "One template: its draft and its latest version.",
    "POST /v1/l/:tenant/contract-templates/:id/publish": "Publish the draft as the next version. Wording that began as an example needs { \"reviewed\": true } for real records.",
    "GET /v1/l/:tenant/contracts": "Your contracts, newest first, each with its status and who has signed.",
    "POST /v1/l/:tenant/contracts/run": "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/contracts": "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.",
    "GET /v1/l/:tenant/contracts/:id": "One contract, with its history and whether that history is unchanged.",
    "POST /v1/l/:tenant/contracts/:id/send": "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/remind": "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/void": "Withdraw a draft or a contract out for signature. A signed one cannot be: amend it.",
    "GET /v1/l/:tenant/contracts/:id/pdf": "The contract as a PDF, with every signature so far.",
    "GET /v1/keys": "Describes this API: what it takes and what it returns.",
    "POST /v1/keys/sandbox": "A sandbox key, straight away, for 30 days. No account.",
    "GET /v1/keys/me": "What the key you sent is: its id, lender, mode, scopes and expiry. Never the key itself.",
    "GET /v1/usage": "Your month: every call and check counted, each application decided on your hosted pages and each advance, and what they come to at the published prices on your own terms, Launch included. Test and sandbox use, and refused calls, are never charged. The price is what you pay: GST is never added on top. total is what is payable, and gstIncluded the GST inside it once Creditcrest is registered for GST. spend is the month so far, its estimate for the month, and your spend alert with how far through it the month is.",
    "GET /v1/admin/usage": "Creditcrest’s own: every lender’s month, priced, for invoicing. Needs Creditcrest’s admin token, not a key.",
    "GET /v1/admin/invoices/:lender": "Creditcrest’s own: one lender’s invoice for a month — its number, dates, lines, price list version, Launch and total, and on a tax invoice the GST the total includes (none is added) — as JSON or a PDF. The first time it is final it is kept, with its SHA-256, and that invoice is answered ever after, byte for byte. Needs Creditcrest’s admin token, not a key.",
    "POST /v1/admin/invoices/:lender/adjustments": "Creditcrest’s own: an adjustment note for an issued month made again — its own document, naming the invoice it adjusts and that invoice’s SHA-256, and changing what is owed by the difference. The issued invoice is never changed. Needs Creditcrest’s admin token.",
    "POST /v1/admin/usage": "Creditcrest’s own: puts back counts that could not be written at the time, each once. Needs Creditcrest’s admin token.",
    "GET /v1/l/:tenant/book/funder": "The funder pack for a lender whose records Creditcrest keeps: loan tape, borrowing base, vintage curves, roll rates, complaints and refunds. Needs that lender’s API key.",
    "GET /v1/l/:tenant/loans": "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.",
    "GET /v1/l/:tenant/loans/:loanRef": "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/actions": "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.",
    "POST /v1/l/:tenant/loans/:loanRef/actions": "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.",
    "POST /v1/l/:tenant/applications/prefill": "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.",
    "POST /v1/l/:tenant/applications": "Submit a whole application: the same checks as the hosted pages, the answers sealed, the lender’s policy run for its staff, and the case put in its queue. Returns the reference and nothing about the outcome.",
    "GET /v1/l/:tenant/requests/:loanRef": "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-ups": "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/:reference": "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/settle": "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.",
    "POST /v1/l/:tenant/day": "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.",
    "POST /v1/l/:tenant/staff-sessions": "A sign-in link to the lender’s operations console for one of its staff, lasting ten minutes and working once. The lender’s own key is needed outside the sandbox. Send a name and a role; or the work email of a person on the lender’s staff list, to sign them in as the list has them — the way in before sign-in links can be emailed, and how a person adds their first passkey then.",
    "GET /v1/l/:tenant/cases": "The work queue as the operations console shows it: open files first, those past their service level first, 25 a page. Needs that lender’s API key.",
    "GET /v1/l/:tenant/cases/:ref": "One application’s case file as data: the applicant, the answers, the statement’s reading, the policy and score in shadow, verification, the ledger, the checklist, documents, notes, credit enquiries, the conclusion, the contract and the audit trail. Needs that lender’s API key.",
    "POST /v1/l/:tenant/cases/close-automated": "Close files as automated submissions, up to 100 at once, as the queue does in a bot flood: each the person may close, at the seq it was read at; the rest listed with why. Needs that lender’s API key.",
    "GET /v1/l/:tenant/staff": "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/staff": "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.",
    "POST /v1/l/:tenant/cases/:ref/actions": "One action on an application by a person on the staff list, through the console’s own checks: their role there decides, the event names them, and the case comes back as it stands. Each action and its fields are listed under actions in GET /v1/l. Needs that lender’s API key.",
    "POST /v1/l/:tenant/bank-connections": "Connect an applicant’s bank for your own application form. Send the applicant to url; they agree at their bank and come back to returnUrl with ?connection=<id>&status=ready|failed, and nothing personal. Their transactions are read by Creditcrest Statement exactly as on the hosted pages. Name the connection in the application, statement: {connection}: it is used once, before expiresAt, by whoever made it — you, with any of your own keys; with a sandbox key, that key alone. The connection is part of Statement and never charged on its own.",
    "GET /v1/l/:tenant/bank-connections/:id": "Where a bank connection stands: pending, ready, failed (with why, in words the applicant may be shown), used (with the application) or expired, and expiresAt, until when it can be finished or used. Once read, a summary: the accounts read, the transactions and the days they cover, and whether the account holder’s name matches the applicant’s — never a transaction. While ready, figures: what the hosted finances screen shows the applicant from their bank, each figure a month with what it is made of, for your form to ask whether they look right; and shownHash, to send back with the application. Read it before trusting the status in the return address.",
    "GET /v1/statement": "Describes this API: what it takes and what it returns.",
    "POST /v1/statement": "A bank statement read: income, commitments, expenses and the signals an assessor should be told, each with the transactions behind it.",
    "GET /v1/statement/accuracy": "How well the reading is measured to be: precision, coverage, recall and F1 on each test set, per category and per release.",
    "GET /v1/statement/extract": "The formats the extraction reads, and what it answers.",
    "POST /v1/statement/extract": "A statement file’s transactions and nothing else: date, description, signed amount and printed balance, with the statement’s period, its opening and closing balances and whether its own arithmetic agrees with what was read. Nothing is categorised and nothing is kept.",
    "GET /v1/statement/sample": "The same for an invented statement, so a program can be built before it has anybody’s data.",
    "GET /v1/statement/sample.csv": "That invented statement as a bank’s CSV export, to send back to POST /v1/statement.",
    "GET /v1/capacity": "The same on the invented ordinary statement, for any loan in the query.",
    "POST /v1/capacity": "Serviceability and borrowing power for a loan, on a statement sent in the body.",
    "GET /v1/statement/document": "What the standard holds, the sources it is made from and how it is sealed.",
    "GET /v1/statement/document/schema": "The standard as JSON Schema, for a program that checks what it is given.",
    "GET /v1/statement/document/sample": "An invented statement in the standard, sealed with the sandbox key.",
    "POST /v1/statement/document": "A bank statement in Creditcrest’s standard, from whatever the data came as: a statement file, banking data in the Consumer Data Right’s shape, illion’s raw data file, or accounts in the standard’s own open input. The same JSON whichever it was, sealed; or the statement as a page with format=html.",
    "POST /v1/statement/document/verify": "Whether a statement is as Creditcrest made it: its shape, its fingerprint and its seal, each problem with a code. Free.",
    "POST /v1/statement/document/render": "A statement you kept, as its page: drawn again from its JSON, with whether it checks said at the top. Free.",
    "GET /v1/enrich": "One transaction. A link, so an answer somebody disagrees with is a link they can paste into a bug report.",
    "POST /v1/enrich": "A list of transactions, up to 20,000 in one request, with the coverage of the whole list.",
    "GET /v1/enrich/rules": "What the engine is made of: the categories it can assign and how many rules it holds.",
    "GET /v1/enrich/accuracy": "What it gets right, measured against payee lists nobody here chose, per category and per confidence band.",
    "GET /v1": "Describes this API: what it takes and what it returns.",
    "GET /v1/compare": "Rank the products in the dataset for one loan.",
    "GET /v1/dataset": "What was read, from whom, and when.",
    "GET /v1/hardship-clock": "Put a hardship matter on the statutory clock. Any of the query fields below; `notice` is the one without which there is no clock.",
    "GET /v1/hardship-clock/provisions": "Every period this engine knows, with the provision it comes from, for a credit contract and for a consumer lease.",
    "GET /v1/decisioning": "A lender’s own credit policy, versioned and replayable against the version that was in force on the day.",
    "GET /v1/decisioning/policy": "One of the example policies on this surface: every version, its dates, the hash of its rules, and every clause in it.",
    "GET /v1/decisioning/replay": "One application run against the policy in force on the day it was assessed and against the policy in force today, with every rule outcome and the evidence behind it.",
    "GET /v1/decisioning/record": "The same application sealed into a record, verified, amended by appending, and edited so the verification fails.",
    "POST /v1/decisioning/run": "A lender’s own policy — its text, or a policy already sealed — read, sealed and run on one application as it stood on a day. Every rule’s outcome comes back with its reason; nothing is kept.",
    "POST /v1/decisioning/shadow": "A candidate policy run beside the current one on the same applications, and each set beside the conclusion a person recorded, so a change can be piloted before anybody relies on it.",
    "GET /v1/shadow": "Run Creditcrest beside your own process before going live: your applications read, your policy and the Creditcrest Score run on them, and each set beside the decision you made.",
    "POST /v1/shadow": "Up to 50 of your applications, each with your own outcome: the statement read, your policy and the score run on it, and a sealed comparison of where Creditcrest’s reading and your decision agree and part, with the rules, figures and transactions behind each difference. A report over the batch comes with them.",
    "POST /v1/shadow/report": "A report over comparisons you kept, for any period: agreement on outcome, the rules behind each difference, how far apart the figures were, the score beside your outcomes and what could not be read — each comparison’s seal checked first, and the report sealed.",
    "GET /v1/l/:tenant/shadow": "A shadow report over the comparisons kept in your own records service, for a period of up to 92 days: agreement with your outcomes, the rules behind each difference, the figures, the score and what could not be read, sealed."
  }
}