Developer & API
WorthSync has a small, stable public API for automating your own ledger: read your accounts and snapshots, create accounts, and write balances from a script, a spreadsheet job, or another tool you already use.
It exists because your data should not be trapped in a product. Everything the API can do, you can also do by hand in the app — and everything you put in, you can get back out.
Every endpoint, with parameters, responses, and examples.
API ReferenceGet a signed HTTP callback when a snapshot is written.
WebhooksScope of the API
This is a personal automation API, not a platform API. There is no OAuth, no third-party app model, and no way to act on behalf of another user. A token acts as you, sees exactly what you see in the app, and is subject to the same database-level access rules as your session.
What it covers today:
- Your identity and the household the token resolves to
- Categories
- Accounts — list, read, create, update
- Snapshots — list, read, create/update, delete, and bulk write
- Outgoing webhooks for snapshot writes
Create a token
- In the app, go to Settings → Developer.
- Under API tokens, give the token a name and choose Create token.
- Copy the token immediately — it is shown once and never again. WorthSync stores only a hash of it plus a short prefix so you can identify it later.
Tokens look like wsk_…. The list shows each token’s prefix and when it was
last used, and Revoke disables one immediately.
A token can read and write your financial data. Treat it like a password: keep it out of source control, out of shared machines, and revoke it the moment you suspect it has leaked.
Authenticate
Send the token as a bearer token on every request:
curl https://app.worthsync.com/api/public/v1/me \
-H "Authorization: Bearer wsk_..."The base URL is https://app.worthsync.com.
Scopes
Every endpoint requires one of three scopes:
| Scope | Grants |
|---|---|
ledger:read | Reading your identity, categories, accounts, and snapshots. |
snapshots:write | Creating, updating, and deleting snapshots. |
accounts:write | Creating and updating accounts. |
Tokens are currently issued with all three scopes — there is no per-token scope picker in the app yet. The scope a request needs is listed with each endpoint in the API Reference, so a future narrower token stays predictable.
What a token can reach
- Access is resolved live from your account, not frozen at the moment the token was made. If you leave a household, tokens you created stop seeing that household’s shared accounts straight away.
- The account endpoints cover standard accounts only. Tangible-asset vault items are not exposed through the public API.
- The API itself needs the Household plan. Creating tokens or webhooks
returns
402on Solo (Free), and every request is checked against your household’s current plan — a token stops working if the plan lapses. Tokens you already created stay listed and revocable on any plan. - Individual plan limits still apply on top of that. Creating or updating an
account with a shared visibility requires a plan that includes sharing, and
returns
402otherwise.
Errors
Errors are JSON with an error message, sometimes with a machine-readable
code or a detail payload:
{ "error": "Validation failed", "detail": [{ "path": "snapshot_date", "message": "..." }] }| Status | Meaning |
|---|---|
400 | Malformed request — bad JSON, or an invalid query parameter. |
401 | Missing, invalid, revoked, or expired token. |
402 | Your plan doesn’t include the feature you asked for. |
403 | The token doesn’t carry the scope this endpoint needs. |
404 | Not found, or not visible/editable by this token. |
422 | Well-formed but rejected — validation failure, or a referenced record that doesn’t exist. |
Machine-readable spec
An OpenAPI 3.1 document describing the current endpoints is served from the app itself:
https://app.worthsync.com/api/public/v1/openapi.jsonIt requires no token to fetch and is generated from the live deployment, so it is the authoritative shape reference if this documentation and the app ever disagree.
Versioning
The path carries the version: /api/public/v1/…. Additive changes — new
endpoints, new optional fields in a response — can land within v1. Write your
client so unknown response fields are ignored.
Looking for a bulk one-off rather than an integration? The app’s CSV import and the CSV / JSON / PDF exports handle most migrations without any code. See Data, Export & Privacy.