Getting started
A token, one call, and what comes back. Ten minutes from nothing to the Checkup as JSON.
Make a token
Open Settings > Developers in Thaw, give the token a name, and tick what it may do. Every token reads; the other ticks (change things, download files, see account and policy numbers, ask, manage) are the scopes, and the list offers only what your role allows. The token is shown once. It starts thaw_pat_ and belongs to you, not to one family or business.
The API comes with the paid plans. On Free the page says so and offers the Plan page instead.
Say who you are
Every call carries the token as a bearer and answers as JSON. Two calls say where you stand: /identity is who holds the token, and /account is the family or business the call landed in.
curl "https://api.thawed.app/v1/identity" \
-H "Authorization: Bearer $THAW_TOKEN"
The answer is the person behind the token, the token itself, and every family or business it could name:
{
"user": { "id": "019958a0-…", "name": "Marisol Alvarez", "email": "marisol@example.com" },
"token": { "kind": "personal", "label": "thaw_pat_…7Kx2", "scopes": ["read", "write", "files"] },
"accounts": [
{ "id": "019958a0-…", "name": "The Alvarez family", "kind": "family", "role": "owner", "guest": false },
{ "id": "019958a0-…", "name": "Rivera Studio", "kind": "business", "role": "member", "guest": false }
],
"header": "Thaw-Account",
"api": "https://api.thawed.app/v1"
}
A personal token opens the first family or business you belong to unless the Thaw-Account header names another one. Send the id from accounts, and /account says where you are now, your role there, and what the token may do once the role and the plan have had their say:
curl "https://api.thawed.app/v1/account" \
-H "Authorization: Bearer $THAW_TOKEN" \
-H "Thaw-Account: 019958a0-2d5f-7e4b-8c30-4a1d3b7f9e22"
{
"id": "019958a0-…",
"name": "The Alvarez family",
"kind": "family",
"role": "owner",
"plan": { "name": "family", "label": "Family" },
"can": { "change": true, "identifiers": false }
}
Every other call acts in that account.
Read the Checkup
The quickest way to see what Thaw sees is the Checkup: everything that needs a person, in one list.
curl "https://api.thawed.app/v1/checkup" \
-H "Authorization: Bearer $THAW_TOKEN"
That is the Checkup - past due, this month, what is missing, housekeeping - each item with why, what to do and what it is based on. GET /overview is the same family or business in a few numbers.
Then the pieces
For working with the pieces there are plain resources: GET /documents is the Library’s list with its filters and a cursor, GET /search finds by words and by meaning, GET /facts is what Thaw took off the pages with sums, GET /checkup is the list of things that need a person, and GET /people-and-things is who and what the documents are about.
curl "https://api.thawed.app/v1/documents?type=utilities/electric-bill&year=2026" \
-H "Authorization: Bearer $THAW_TOKEN"
Every id in an answer is a UUID you can hand to the matching path, and every row carries a url into the app for the page it came from.
Change something
A change needs the write scope, an owner or member, and a paid plan. It is the same press the page makes, through another door: mark a Checkup item handled, file a document as something else, link it to a person. Send an Idempotency-Key if you might send it twice.
curl -X PATCH "https://api.thawed.app/v1/checkup/obligations/019958a0-3e60-7f5c-9d41-5b2e4c80af33" \
-H "Authorization: Bearer $THAW_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"action":"handled","note":"Paid over the phone on the 28th."}'
When it says no
Every refusal is application/problem+json with a status, a title and a detail sentence a person could read out. A missing scope is 403 and names the scope; a plan that does not come with something says which one does. Errors has the whole list.
The pace
Calls are paced per token (120 a minute) and per family or business across all of its tokens (600 a minute). Past that the answer is 429 with Retry-After in seconds.