Skip to main content
Keeping your account inventory in sync with Slate ensures that balances, statuses, and metadata stay consistent across your collections workflows. Use the accounts API to upsert records on creation, update them on any change, and look them up by your own identifiers at any time.
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:
Pass currentBalance as a decimal string — for example "1250.75", not 1250.75 or "125075". Monetary amounts are decimal strings; submitting values in cents will silently inflate every balance in Slate.
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.
Schedule a daily full-inventory feed that sends every account in your portfolio — even accounts with no changes. Because the endpoint is idempotent, re-sending unchanged records costs nothing and guarantees Slate never drifts from your system of record.
3

Store the returned accountId

On success, Slate returns a 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
Map 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 PATCH /v1/accounts/{accountId} instead of re-sending the full payload. Include only the fields you want to change.
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.
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 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
The response returns an 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.