Get started
Quickstart
A sandbox key, then a bank statement read and a loan tested against it. Four calls, on an invented statement.
Each call is in curl, Node and Python. Save a Node example as a .mjs file and run it with Node 18 or later: it uses top-level await. Python needs Python 3 and nothing installed.
- 1
Get a sandbox key
One call, no account — or one button, which writes your key into the next calls. Keep the key for the calls below:
export CREDITCREST_KEY=cc_test_…curl -s -X POST https://app.creditcresttechnologies.com.au/v1/keys/sandboxconst res = await fetch('https://app.creditcresttechnologies.com.au/v1/keys/sandbox', { method: 'POST', }); console.log(await res.json());import json, urllib.error, urllib.request req = urllib.request.Request( "https://app.creditcresttechnologies.com.au/v1/keys/sandbox", method="POST", ) try: with urllib.request.urlopen(req) as res: print(json.load(res)) except urllib.error.HTTPError as e: print(json.load(e))Response · 201trimmed { "key": "cc_test_eyJ2Ijox…", "id": "hmw32nop", "mode": "test", "expires": "2026-12-10" } - 2
Get a statement
An invented one, as a bank’s CSV export. Any export this reads works the same way.
Open ↗curl -s https://app.creditcresttechnologies.com.au/v1/statement/sample.csv -o statement.csvimport { writeFile } from 'node:fs/promises'; const res = await fetch('https://app.creditcresttechnologies.com.au/v1/statement/sample.csv'); await writeFile('statement.csv', await res.text());import urllib.request urllib.request.urlretrieve("https://app.creditcresttechnologies.com.au/v1/statement/sample.csv", "statement.csv")Response · 200 Date,Description,Amount 05/03/2026,DIRECT CREDIT 049211 ACME LOGISTICS PAYROLL,2200 19/03/2026,DIRECT CREDIT 049211 ACME LOGISTICS PAYROLL,2320 02/04/2026,DIRECT CREDIT 049211 ACME LOGISTICS PAYROLL,2440 … - 3
Read it
Income, commitments and expenses, each with the transactions behind it.
curl -s -X POST https://app.creditcresttechnologies.com.au/v1/statement \ -H "authorization: Bearer $CREDITCREST_KEY" \ -H 'content-type: text/csv' \ --data-binary @statement.csvimport { readFile } from 'node:fs/promises'; const res = await fetch('https://app.creditcresttechnologies.com.au/v1/statement', { method: 'POST', headers: { authorization: `Bearer ${process.env.CREDITCREST_KEY}`, 'content-type': 'text/csv', }, body: await readFile('statement.csv'), }); console.log(await res.json());import json, os, urllib.error, urllib.request req = urllib.request.Request( "https://app.creditcresttechnologies.com.au/v1/statement", data=open("statement.csv", "rb").read(), headers={ "Authorization": "Bearer " + os.environ["CREDITCREST_KEY"], "Content-Type": "text/csv", }, method="POST", ) try: with urllib.request.urlopen(req) as res: print(json.load(res)) except urllib.error.HTTPError as e: print(json.load(e))Response · 200trimmed { "period": { "from": "2026-03-01", "to": "2026-08-28", "days": 181, "months": 5.95 }, "income": { "verifiedMonthly": 5026.67, "regular": [ { "description": "DIRECT CREDIT 049211 ACME LOGISTICS PAYROLL", "period": "fortnightly", "monthly": 5026.67, "transactions": ["r1", "r2", "r3", …] } ] }, "commitments": { "monthly": 2150 }, "expenses": { "monthly": { "essential": 3497.94, "discretionary": 162.68 } }, "signals": [] } - 4
Ask what it can service
The loan goes in the query; the statement stays in the body.
curl -s -X POST 'https://app.creditcresttechnologies.com.au/v1/capacity?loan=15000&rate=12&years=5' \ -H "authorization: Bearer $CREDITCREST_KEY" \ -H 'content-type: text/csv' \ --data-binary @statement.csvimport { readFile } from 'node:fs/promises'; const res = await fetch('https://app.creditcresttechnologies.com.au/v1/capacity?loan=15000&rate=12&years=5', { method: 'POST', headers: { authorization: `Bearer ${process.env.CREDITCREST_KEY}`, 'content-type': 'text/csv', }, body: await readFile('statement.csv'), }); console.log(await res.json());import json, os, urllib.error, urllib.request req = urllib.request.Request( "https://app.creditcresttechnologies.com.au/v1/capacity?loan=15000&rate=12&years=5", data=open("statement.csv", "rb").read(), headers={ "Authorization": "Bearer " + os.environ["CREDITCREST_KEY"], "Content-Type": "text/csv", }, method="POST", ) try: with urllib.request.urlopen(req) as res: print(json.load(res)) except urllib.error.HTTPError as e: print(json.load(e))Response · 200trimmed { "service": { "assessmentRate": 0.15, "monthlySurplus": 1009.2, "netSurplusRatio": 0.2008, "debtServiceRatio": 0.4987 }, "capacity": { "principal": 57300, "binds": "serviceability" } }