/api/v1, and nothing versions in the host. A product list is GET /api/v1/loan-products.
This page is the map, not the territory. It covers what the operations share, then groups them by the job they do. Each operation has its own page under the Lender anchor in the API Reference, with full request and response shapes.
The OpenAPI documents in this portal are render sources for the reference pages. They are not client contracts, and they are not a basis for SDK generation.
Authentication
Lender accepts a JWT bearer token. One security scheme applies to the whole document:
/health, /readyz, and /version.
Authorization
Lender authorizes each request against the
lender application, a resource, and an action. The resource follows the surface, and the actions are granular rather than one write:
Grant the officer role only the actions its job needs.
make generate-casdoor writes Lender’s roles and permissions to a seed file you load into your identity provider — Prerequisites shows the minimum set for origination.
Tenant and officer identity
The tenant is never a header, a query parameter, or a body field. Lender resolves it from the validated identity on the request. See Multi-tenancy. The assigned officer comes from the token subject in the same way. No loan-application body carries an officer field, and no client-supplied value overrides the subject.
Requests and responses
Every operation that carries a body sends and returns
application/json.
Send every money and rate field as a decimal string, never as a JSON number — "50000.00", "0.01500000". Lender returns them the same way. Timestamps are RFC 3339 in UTC.
Idempotency
The money and schedule writes accept an
X-Idempotency request header.
Send your own key. The five operations that require
X-Idempotency share one behaviour:
- A retry of a completed call replays the first response and stamps
X-Idempotency-Replayed: trueon it. Nothing is recorded a second time. - A retry while the first call is still in flight answers
409. - The key is scoped to your tenant and expires after the window
IDEMPOTENCY_RETRY_WINDOW_SECsets, which defaults to 300 seconds.
X-Request-ID first and fall back to X-Idempotency when it is absent. Send one of the two: a call that carries neither answers 422.
Lender stores the request id in the database together with the facts of the call. A retry that carries the same id and the same facts replays the first response on the normal response path, with no replay header. The same request id with different facts answers 409 rather than replaying, so one id can never record two different amounts. That record does not expire.
The facts Lender compares differ by operation:
Pagination
Paging is per operation, not global. Read the reference page for the operation you call, and send only the parameters it declares.
A value outside the range is rejected rather than clamped. Every other read declares its own parameters, so narrow it with the identifiers and filters on its reference page.
Errors
Every error answers
application/problem+json and follows RFC 9457.
Branch on the status and, for a
422, on the location values in errors. A 422 names each field that failed. A server-side failure answers with a generic detail, so a raw cause never reaches a client.
The operations by job
Catalogue a product
Eight operations own the catalog. Create a product and append a version build the terms an application binds to. The version is immutable. Bind an accounting profile maps each accounting event onto general-ledger accounts, and Lender needs it at disbursement. Apply a charge and read floating rates complete the surface, alongside list, get, and activate. Read Define a loan product.Originate
Six operations carry an application from submitted to disbursed: create, then one of approve, reject, or withdraw, then disburse. Preview a schedule computes installments for a quote and persists nothing. The create and decide responses are the only reads of an application, so keep the body each call returns. Read How origination works for the state machine and Quick start for the six calls end to end.Service a live loan
Five reads describe the account: the account, its schedule, its transactions, its charges, and its audit history. Five writes move money or the schedule: preview a repayment before you record it, prepay, reschedule, and reverse a transaction. Nothing rewrites history. A reversal posts a new transaction that compensates the original. Read Service a loan.Account and book
Start an accrual run recognizes interest for a competence period. List journal references by correlation id and read one to find the accounting record a run wrote. Read Accounting and accrual runs.Discover jurisdictions
The two public reads report which jurisdiction codes this deployment carries and what each profile decides. Read Jurisdictions.Brazil
The Brazil pack adds regulated reads and writes under/api/v1/br: CET disclosure, the credit-operation descriptor, PDD stage and its transitions, a prepayment quote with its payoff statement, tax preview, and capitalization consent. The pack also carries its own product paths, which behave like the generic ones under Brazilian rules. Read Brazil regulatory pack.
The payroll-deducted journey is an event conversation with the payroll rail, not a set of REST calls. Read Consignado privado.
Next steps
Quick start
Six calls from an empty database to a disbursed loan.
Events
Subscribe to the credit journey instead of polling.
API Reference
Every operation, with full request and response shapes.
Prerequisites
The services, migrations, and configuration a first call needs.

