- Overview
- Authentication
- Errors and limits
- Code examples
- Moving from Classic
- KPIs
- KPI Categories
- KPI Categories / KPIs
- Breakdown Items
- KPI Entries
- KPI Frequencies
- KPI Icons
- KPI Units
- Reports
- Users
SimpleKPI AI › API reference
SimpleKPI AI API
The SimpleKPI AI API lets you read and write your account's data from your own systems — push entries from a nightly job, pull KPIs into a warehouse, or wire SimpleKPI into a tool that has no ready-made connector.
https://api.simplekpi.com/v1
It is a JSON REST API over HTTPS. Every request carries an API key you create in the app, and every key is scoped to the resources it needs.
This is not the same API as SimpleKPI Classic. If you are looking for the Classic Developer API — basic authentication against your own subdomain — that is documented separately atthe Classic Developer API. Moving an existing integration across is covered inMoving from Classic.
Getting started
- Create an API key at Settings → API Access in SimpleKPI, granting it only the permissions it needs. See Authentication.
- Copy the key when it is shown. It is only shown once.
- Send it as a bearer token on every request.
curl https://api.simplekpi.com/v1/kpis \ -H "Authorization: Bearer skpi_your_api_key"
If that returns a JSON array of your KPIs, you are ready. If it returns401 or 403, seeErrors and limits.
Resources
38 endpoints across 10 resources.
- KPIs
- KPI Categories
- KPI Categories / KPIs
- Breakdown Items
- KPI Entries
- KPI Frequencies
- KPI Icons
- KPI Units
- Reports
- Users
Conventions
These hold across every endpoint, so they are worth reading once.
| Convention | What it means |
|---|---|
| Field naming | Fields are snake_case. A handful of flags on a KPI entry — setActual, setTarget, setNotes, addToActual — are camelCase instead. That is deliberate: integrations built against the first version send them, so they were kept as they were. |
| Lists | A list endpoint returns a plain JSON array. There is no wrapper object and no total count. |
| Paging | page counts from 1 and rows defaults to 500. Page until you get a short page. |
| Numbers | Numeric fields also accept their string form, so "5" and 5 are equivalent on the way in. |
| Dates | ISO 8601. Entry dates are dates rather than instants — the time part is ignored. |
| Updates | PUT replaces the whole object. Anything you leave out is reset to its default rather than kept, so read the object first and send it back changed. |
| Errors | Failures return RFC 7807 problem details as application/problem+json. |
| Versioning | The version is in the path. /v1 will not change shape underneath you; a breaking change ships as /v2. |
Next
- Authentication — creating keys, scopes, and what 401 and 403 mean.
- Errors and limits — the error shape, status codes and rate limits.
- Code examples — working requests in curl, C# and Python.
- Moving from Classic — for existing Classic API integrations.