SimpleKPI Logo

SimpleKPI AI › API reference

Breakdown Items

A breakdown splits one KPI so it reports separately for each of its parts — a person, a team, a product, a region. Each part is a breakdown item, and writing an entry against one is what produces a per-part figure rather than a single account-wide number.

An item usually belongs to a single breakdown — "North" under "Region" — and names it in breakdown_id. An item that combines several breakdowns leaves that null.

A KPI entry refers to an item as source_id, not breakdown_item_id. That field name predates the rename and was kept so existing integrations keep working. Pass the id from this resource into it — see KPI Entries.

This resource used to live at /v1/sources. That path still answers, with 410 Gone and a message naming its replacement, so an integration written against it fails loudly rather than silently reading an empty list. Update the path; the request and response shapes are unchanged.

The scopes moved with it. Keys that held sources:read or sources:write were migrated to the breakdown item scopes automatically, so nothing needs reissuing.

The Classic API has no equivalent — it used groups and group items instead. See Moving from Classic.

Base URL https://api.simplekpi.com/v1

Endpoints

  1. List breakdown itemsGET /v1/breakdownitems
  2. Create a breakdown itemPOST /v1/breakdownitems
  3. Get a breakdown itemGET /v1/breakdownitems/{id}
  4. Update a breakdown itemPUT /v1/breakdownitems/{id}
  5. Delete a breakdown itemDELETE /v1/breakdownitems/{id}

Breakdown item object

NameTypeRead OnlyMandatoryMax Len.Notes
idintegeryesno Assigned by SimpleKPI when the item is created. Send this value as source_id when writing a KPI entry against the item.
namestringnoyes100What this part of the breakdown is called, e.g. a person, team, product or region.
breakdown_idintegernono Nullable. Which breakdown the item sits under. Null when the item combines more than one breakdown rather than belonging to a single one.
user_idintegeryesno Nullable. For an item under the People breakdown, the person it stands for. Null for every other kind, and not settable here.
is_systembooleannono True for items SimpleKPI maintains itself. Leave it false when creating one; it is ignored on update, because a built-in item cannot be made ordinary through the API.
is_archivedbooleannono Archived items keep their history but stop being offered for new entries.
sort_orderinteger (16 bit)nono Position of the item within its breakdown.
created_atdatetimeyesno  
updated_atdatetimeyesno  

List breakdown items

GET /v1/breakdownitems

Returns both ordinary items and the sets that combine several breakdowns. A set has a null breakdown_id.

Requires breakdownitems:read on the API key.

Parameters

NameTypeRequiredDefaultNotes
pageintegerno1Which page to return, counting from 1.
rowsintegerno500How many rows per page. Defaults to 500.

Using curl

curl https://api.simplekpi.com/v1/breakdownitems \
  -H "Authorization: Bearer skpi_your_api_key"

Example response

Status: 200 OK
[
  {
    "id": 77,
    "name": "North",
    "breakdown_id": 12,
    "user_id": null,
    "is_system": false,
    "is_archived": false,
    "sort_order": 1,
    "created_at": "2026-02-21T10:57:00",
    "updated_at": "2026-02-21T10:57:00"
  }
]

Status codes

CodeMeaning
200OK
400Bad Request
401Unauthorized
403Forbidden
429Too Many Requests

 

Create a breakdown item

POST /v1/breakdownitems

The breakdown itself is created in the app; this adds an item to one that already exists.

Requires breakdownitems:write on the API key.

Using curl

curl https://api.simplekpi.com/v1/breakdownitems \
  -X POST \
  -H "Authorization: Bearer skpi_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"name":"North","breakdown_id":12,"is_system":false,"is_archived":false,"sort_order":1}'

Example request body

{
  "name": "North",
  "breakdown_id": 12,
  "is_system": false,
  "is_archived": false,
  "sort_order": 1
}

Status codes

CodeMeaning
201Created
400Bad Request
401Unauthorized
403Forbidden
409Conflict
429Too Many Requests

 

Get a breakdown item

GET /v1/breakdownitems/{id}

Requires breakdownitems:read on the API key.

Parameters

NameTypeRequiredDefaultNotes
idintegeryes The breakdown item to return.

Using curl

curl https://api.simplekpi.com/v1/breakdownitems/{id} \
  -H "Authorization: Bearer skpi_your_api_key"

Status codes

CodeMeaning
200OK
401Unauthorized
403Forbidden
404Not Found
429Too Many Requests

 

Update a breakdown item

PUT /v1/breakdownitems/{id}

A full replacement, not a patch.

Requires breakdownitems:write on the API key.

Parameters

NameTypeRequiredDefaultNotes
idintegeryes The breakdown item to replace.

Using curl

curl https://api.simplekpi.com/v1/breakdownitems/{id} \
  -X PUT \
  -H "Authorization: Bearer skpi_your_api_key"

Status codes

CodeMeaning
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
409Conflict
429Too Many Requests

 

Delete a breakdown item

DELETE /v1/breakdownitems/{id}

Archive an item you still want history for — deleting removes it outright.

Requires breakdownitems:write on the API key.

Parameters

NameTypeRequiredDefaultNotes
idintegeryes The breakdown item to delete.

Using curl

curl https://api.simplekpi.com/v1/breakdownitems/{id} \
  -X DELETE \
  -H "Authorization: Bearer skpi_your_api_key"

Status codes

CodeMeaning
204No Content
400Bad Request
401Unauthorized
403Forbidden
404Not Found
429Too Many Requests