The Accounts API is currently a draft. Shapes, field names, and field sets may change before it is finalized.
The Two-Identifier System
Slate uses two identifiers for every account, and understanding both are essential for a reliable integration.accountId is a UUID that Slate assigns when an account is first created. It is stable, canonical, and used in all Slate URLs and relationships (for example, GET /v1/accounts/{accountId}). You will not know this value before the account exists. Slate returns it in the create/upsert response.
crid is the account number from your own system. You supply this value, and it must be unique within your owner. Use it as your lookup key when you do not yet have a Slate accountId. For example, on your first upsert or when reconciling records.
The Upsert Pattern
POST /v1/accounts is idempotent. Send an account by crid and Slate will create it if it does not exist, or update it if it does. The response always includes the Slate-assigned accountId.
A creditorId is required, and it references a creditor you register beforehand via POST /v1/creditors (list them with GET /v1/creditors). A placement’s firmId likewise references a firm you register via POST /v1/firms.
Targeted Partial Updates
When you need to update a single field on a known account without re-sending the full record, usePATCH /v1/accounts/{accountId}:
Account Lifecycle
Every account has astatus field with two possible values:
Update
status to CLOSED via upsert or PATCH when an account is paid, recalled, or otherwise resolved.
Money Format
All monetary amounts in Slate are expressed as US dollars with two decimal places, sent and returned as decimal strings — for example,
"1250.75". Slate does not use cents, integers, or bare JSON numbers. Strings avoid floating-point rounding. Sending "125075" when you mean $1,250.75 will result in an incorrect balance nearly 100 times too large."4872.50", not 4872.50, "487250", or "$4,872.50".
