List program changes
GET /program/changes| Scope | program:read |
| Customer session token | Not accepted: call from your server with an API key |
| Rate limit class | read (limits) |
| Idempotency key | Not used |
| MCP tool | charm_list_program_changes |
Who changed what in the program, newest first: every rule, reward, tier and settings change made in the admin or through the API, with the actor, the field-level diff and whether it can still be undone. Kept for 180 days.
Parameters
Section titled “Parameters”| Name | In | Type | Description |
|---|---|---|---|
limit (optional) | query | integer | Page size, 1–250. Defaults to 50. |
cursor (optional) | query | string | Opaque cursor from a previous response’s next_cursor. |
Response 200
Section titled “Response 200”Returns ProgramChangeList.
| Field | Type | Description |
|---|---|---|
data | array of ProgramChange | |
next_cursor | string or null | Pass as cursor to fetch the next page; null on the last page. (nullable) |
has_more | boolean | True when another page exists. |
{ "data": [ { "id": "id", "at": "2026-10-01T09:30:00.000Z", "actor": { "type": "admin", "id": "id", "label": "Points per order" }, "operation": "create", "target": { "kind": "earning_rule", "id": "id", "label": "Points per order" }, "diff": [ null ], "revision": 1, "undone_at": "2026-10-01T09:30:00.000Z", "undo_of": "undo of", "summary": "summary", "undoable": false } ], "next_cursor": null, "has_more": true}Example
Section titled “Example”curl -X GET "https://charm.appfleece.app/api/v1/program/changes" \ -H "Authorization: Bearer chrm_live_..."Errors
Section titled “Errors”unauthorized · invalid_token · insufficient_scope · access_required · validation_error · rate_limited
Every error body carries code, message, request_id and a doc_url pointing at the matching entry in the error catalog.