Skip to content
MatrixRewards
API docs menu

Log

What every key did, and what it was shown.

Part of the API reference, version 2026-10. Every address below starts with the base address:

https://app.matrixrewards.co.uk/api/2026-10

What every key changed, and what it was shown

GET /audit-log — the full address is https://app.matrixrewards.co.uk/api/2026-10/audit-log.

Needs: the read_audit permission (in the app: “The activity log — what each key did and saw”).

Append-only. A disclosure row says how many shoppers a read carried; a change row says what changed. object_ref names a shopper, so it is returned only to a key that also holds read_members — and that read is itself recorded.

Parameters

NameInRequiredTypeWhat it is
actorquerynostringOne key id.
fromquerynostring2026-09-16 or 2026-09-16T10:00:00Z. A date means the whole of that day (a to of 2026-09-16 includes 23:59 on the 16th).
toquerynostring2026-09-16 or 2026-09-16T10:00:00Z. A date means the whole of that day (a to of 2026-09-16 includes 23:59 on the 16th).
limitquerynointeger, from 1 to 100, default 251 to 100. Larger values are capped.
cursorquerynostringOpaque. Pass back next_cursor from the previous page, with the same filters, and on GET /members the same sort and order.

The answer

A page of log entries.

FieldTypeAlways thereWhat it is
datalist of objectyes—
data[].idstringyes—
data[].atstringyes—
data[].actor_typeone of api_key, oauth_token, staff, platformyesWho acted. platform is Matrix Rewards itself acting on this account — our staff from the platform console, or a migration — written into this account's own log so it can be seen.
data[].actor_idstring, or nullyes—
data[].actor_namestring, or nullyes—
data[].clientstring, or nullyesFrom the caller's Matrix-Client header.
data[].request_idstring, or nullyes—
data[].actionstringyes—
data[].store_keystring, or nullyes—
data[].object_refstring, or nullyesThe member key, store key or reward the action touched. Null when the key does not hold read_members, even if the entry names one.
data[].detailobject, openyes—
data[].resultone of applied, dry_run, refused, disclosedyes—
data[].reasonstring, or nullyes—
has_morebooleanyes—
next_cursorstring, or nullyes—

An open object has no fixed set of fields: it is sent as the platform holds it, in its own field names.

Headers on the answer: Request-Id, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. What each header means.

Example

curl "https://app.matrixrewards.co.uk/api/2026-10/audit-log" \
  -H "Authorization: Bearer $MATRIX_API_KEY"

The answer:

{
  "data": [
    {
      "id": "0d1e2f30-4a5b-4c6d-8e7f-00000000001b",
      "at": "2026-09-16T10:00:00Z",
      "actor_type": "api_key",
      "actor_id": "Kx7Qp2Lm9Vt4Rz8N",
      "actor_name": "Nightly export",
      "client": "example-script/1.0",
      "request_id": "0d1e2f30-4a5b-4c6d-8e7f-000000000008",
      "action": "member.read",
      "store_key": null,
      "object_ref": "mx_3f6c2a9e-8b41-4d7a-9e05-c1b7d24f6a18",
      "detail": {
        "subject_count": 1
      },
      "result": "disclosed",
      "reason": null
    },
    {
      "id": "0d1e2f30-4a5b-4c6d-8e7f-00000000001c",
      "at": "2026-09-16T10:00:00Z",
      "actor_type": "api_key",
      "actor_id": "Kx7Qp2Lm9Vt4Rz8N",
      "actor_name": "Nightly export",
      "client": "example-script/1.0",
      "request_id": "0d1e2f30-4a5b-4c6d-8e7f-000000000013",
      "action": "ledger.read",
      "store_key": null,
      "object_ref": null,
      "detail": {
        "subject_count": 1
      },
      "result": "disclosed",
      "reason": null
    },
    {
      "id": "0d1e2f30-4a5b-4c6d-8e7f-00000000001d",
      "at": "2026-09-16T10:00:00Z",
      "actor_type": "api_key",
      "actor_id": "Kx7Qp2Lm9Vt4Rz8N",
      "actor_name": "Nightly export",
      "client": "example-script/1.0",
      "request_id": "0d1e2f30-4a5b-4c6d-8e7f-000000000007",
      "action": "members.list",
      "store_key": null,
      "object_ref": null,
      "detail": {
        "subject_count": 1
      },
      "result": "disclosed",
      "reason": null
    }
  ],
  "has_more": true,
  "next_cursor": "eyJhdCI6IjIwMjYtMDktMTZUMTA6MDA6MDBaIiwiaWQiOiIwZDFlMmYzMCJ9"
}

Other answers

StatusWhat it meansError pages
400invalid_request: a parameter could not be read; param names it. invalid_cursor: the cursor is not one this list issued.invalid_request, invalid_cursor
401unauthenticated: no usable API key was presented. Malformed, unknown, revoked and wrong-secret are one answer.unauthenticated
403forbidden_scope: the key does not carry the scope this call needs; required_scope says which.forbidden_scope
429rate_limited: too many requests for this key; bucket says which allowance. Retry-After says how long to wait.rate_limited

Last updated: 14 October 2026