The Accounts API is currently a draft — shapes, field names, and field sets may change before it is finalized.The
POST /v1/accounts endpoint is fully idempotent on crid. Sending the same payload twice creates the record once and updates it in place on subsequent calls — safe to use in retry logic or batch pipelines.1
Prepare your account snapshot
Before calling the API, assemble the required fields for each account record. Every upsert must include:
Include optional fields such as
accountNumber, portfolioId, chargeOffDate, or metadata whenever they are available. The richer the snapshot, the less back-and-forth required downstream in legal workflows.creditorId references a creditor entity — register creditors first via POST /v1/creditors and list them with GET /v1/creditors. If you place accounts, a placement’s firmId likewise references a firm registered via POST /v1/firms.2
Upsert the account
Send a
POST /v1/accounts request with your account payload. If an account with the same crid already exists, Slate updates it in place; otherwise it creates a new record.3
Store the returned accountId
On success, Slate returns a Map
201 Created response containing the canonical accountId UUID. Persist this value in your system; you will reference it in matters, payments, and legal filings.Example Response
crid → accountId in your database so you can hydrate Slate UUIDs without an extra lookup on every subsequent API call.4
Apply partial updates with PATCH
When a balance changes, a status transitions, or any single field needs updating, use Partial updates are the preferred approach for high-frequency changes such as daily balance refreshes — they minimize payload size and reduce the risk of accidentally overwriting fields you did not intend to touch.
PATCH /v1/accounts/{accountId} instead of re-sending the full payload. Include only the fields you want to change.5
Look up accounts by crid
If you need to retrieve a Slate account record using your own identifier — for example, during reconciliation or when the The response returns an
accountId UUID is not cached locally — query the accounts list endpoint. GET /v1/accounts requires an owner query parameter, and filtering uses deep-object filter[...] syntax — for example filter[crid]=ACC-00123, filter[status]=CLOSED, or filter[metadata][region]=west.cURL
Example Response
accounts array — use the first element for a one-to-one mapping, or iterate over multiple results if your filter matches more than one Slate account. Page through larger result sets with cursor (from a response’s pagination.nextCursor/pagination.previousCursor, empty strings at the ends), limit, orderBy, and orderDirection.