SimpleKPI Logo

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

  1. Create an API key at Settings → API Access in SimpleKPI, granting it only the permissions it needs. See Authentication.
  2. Copy the key when it is shown. It is only shown once.
  3. 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.

Conventions

These hold across every endpoint, so they are worth reading once.

ConventionWhat it means
Field namingFields 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.
ListsA list endpoint returns a plain JSON array. There is no wrapper object and no total count.
Pagingpage counts from 1 and rows defaults to 500. Page until you get a short page.
NumbersNumeric fields also accept their string form, so "5" and 5 are equivalent on the way in.
DatesISO 8601. Entry dates are dates rather than instants — the time part is ignored.
UpdatesPUT 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.
ErrorsFailures return RFC 7807 problem details as application/problem+json.
VersioningThe version is in the path. /v1 will not change shape underneath you; a breaking change ships as /v2.

Next