Developers
The same API our apps run on.
Summely's web, iPhone and Android apps are API clients with no private endpoints. Anything the product can do, an integration can do — every capability, on one OpenAPI 3.1 schema.
The reference and schema are generated from the running service, so they cannot drift from it. These pages document the invariants; the reference documents every endpoint.
Request
curl https://app.summely.com/api/v1/invoices \
-H "Authorization: Token smly_live_k3J9x2Qw…"
Response — abbreviated
{
"next": null,
"results": [
{
"number": "INV-1042",
"customer_name": "Fern & Frond Landscaping",
"status": "paid",
"currency": "USD",
"total": "4820.0000",
"balance_due": "0.0000"
}
]
}
The rules
Three promises the schema can't make.
Money is a string.
Every amount is a decimal string plus a currency code, never a JSON number. A float cannot represent 0.1, and this is an accounting system. Your totals survive the trip.
The ledger is immutable.
Posted entries are never edited and never deleted. Corrections post as new entries, so what your integration wrote stays written.
Retries are safe.
POSTs that create financial records honour an
Idempotency-Key header for 24 hours. A timeout is a
resend, not a duplicate invoice.
Access
Included in every plan.
Plans differ by seats, never by what the software is allowed to do, and the API is no exception. Keys are created in the app by an owner or admin, under More → API keys. A key carries its own role — never above accountant — is pinned to one organisation's books, and expires; there is no non-expiring key.
The key's effective authority is the lesser of its own role and its
creator's current role, so demoting or removing the creator narrows
or ends the key on its next request. Endpoints outside the published
surface refuse API keys outright, with the error code
not_part_of_public_api.
Candour
What the API doesn't do.
No webhooks.
Polling is the supported way to learn what changed, and
GET /changes
makes it one cursored request rather than a sweep of every
collection.
No payroll.
Summely does not run payroll and has no Employee entity. Pay runs belong in the books as summary journal entries — the supported route takes one request.
No query language.
There is no /query endpoint, and none is planned for
v1. List endpoints filter, search and paginate instead.
Rate limits exist and are per key; the numbers are deliberately not printed here yet. The contract page says why.
Where to go
Three destinations.
Getting started
A key, the auth header, a first read and a first write — five minutes, start to finish.
Full API reference
Every endpoint, every field, every enum — generated from the running service on every deploy.
Changelog
Dated and hand-written, so you can trust that a breaking change would have been announced.
Start with one call.
A free trial organisation, a key from the app, and the worked flow — from a new customer to a balanced ledger entry in six requests.