Skip to main content
The API exposes seven read-only collections. Each one requires an API key with the matching :read scope — see Authentication for the full scope list.
Every request only ever returns records that belong to your own organisation. Requesting a record that exists but belongs to someone else’s organisation returns the same not_found you’d get for a record that doesn’t exist at all.

Collections

The tenant collection returns contact details only — name, email, phone, and status. It does not expose financial, income, credit, or identity information, and there is no scoring or screening endpoint anywhere in the API.
The document collection returns metadata only (name, type, size, and which record it belongs to). File contents are not available through the API.

Two ways to read a collection

List a collection, one page at a time:
Get a single record by its ID:
A single-record response looks like:
A list response looks like:

Pagination

Lists use cursor-based pagination, not page numbers. Every response includes:
  • nextCursor — an opaque token. Pass it as the cursor query parameter to fetch the next page. null on the last page.
  • hasMoretrue if there’s a next page, false on the last one.
Request parameters:
Keep walking pages until hasMore is false. Cursors stay correct even while new records are being added, so it’s safe to page through a large portfolio over time without missing or repeating records.
A cursor is opaque — don’t try to construct or edit one by hand. If a cursor is invalid or malformed, the API returns invalid_request rather than silently restarting from the beginning, so you never lose track of where you were.

Filtering

Each collection accepts a specific set of filters as query parameters (see the table above). Anything not listed for that collection is rejected rather than silently ignored.
Filters and pagination combine — add cursor and limit alongside any filter to page through a filtered result set.

Getting a single record


Exact fields

The exact field list for every collection is published in the API contract at /api/v1/openapi.json, and stays in sync automatically with what’s live. Use it to confirm a field name or generate a client rather than relying on this page for the complete list.

Next steps

Suggesting Changes

Propose a new record or an update — a person approves it before anything changes.

Errors & Limits

The error format, every error code, and rate limits.
Last modified on August 20, 2026