Skip to content
MatrixRewards
API docs menu

Billing

Usage against the plan, and the recorded plan.

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

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

Orders that earned points this billing month, against the plan's cap

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

Needs: the read_usage permission (in the app: “Orders used this month and which plan you are on”).

The plan comes from the subscription this platform has recorded from Shopify's billing webhooks, not from a live call to Shopify.

The answer

Usage this month.

FieldTypeAlways thereWhat it is
usedintegeryes—
capinteger, or nullyesNull when no cap applies, or when the level says we could not tell.
percentinteger, or nullyes—
levelone of ok, approaching, over, unknownyes—
countsstringyesWhat used counts, said in the response and not only in the docs.
monthobjectyes—
month.labelstringyes—
month.fromstringyes—
month.tostringyes—
plan_sourceone of recorded_subscriptionyes—
plan_namestring, or nullyes—

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/usage" \
  -H "Authorization: Bearer $MATRIX_API_KEY"

The answer:

{
  "used": 0,
  "cap": null,
  "percent": null,
  "level": "ok",
  "counts": "orders that earned points",
  "month": {
    "label": "2026-09",
    "from": "2026-09-01T00:00:00.000Z",
    "to": "2026-10-01T00:00:00.000Z"
  },
  "plan_source": "recorded_subscription",
  "plan_name": "Multi-store wallet"
}

Other answers

StatusWhat it meansError pages
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

The subscriptions recorded for this account

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

Needs: the read_usage permission (in the app: “Orders used this month and which plan you are on”).

A read, and only a read. A plan is changed on Shopify's own page.

The answer

The recorded subscriptions.

FieldTypeAlways thereWhat it is
datalist of objectyes—
data[].store_keystringyes—
data[].plan_namestringyes—
data[].statusstringyes—
data[].priceobjectyes—
data[].price.amountstringyesDecimal, as text: a price that has been through binary floating point is not a price.
data[].price.currencystringyes—
data[].billing_intervalstringyes—
data[].trial_daysintegeryes—
data[].is_testbooleanyes—
data[].capabilitieslist of stringyes—
data[].activated_atstring, or nullyes—
has_morebooleanyes—
next_cursorstring, or nullyes—
change_plan_atstringyes—

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/plan" \
  -H "Authorization: Bearer $MATRIX_API_KEY"

The answer:

{
  "data": [
    {
      "store_key": "example-store",
      "plan_name": "Multi-store wallet",
      "status": "active",
      "price": {
        "amount": "79.00",
        "currency": "USD"
      },
      "billing_interval": "EVERY_30_DAYS",
      "trial_days": 14,
      "is_test": false,
      "capabilities": [
        "shared_wallet"
      ],
      "activated_at": "2026-08-03T09:20:00Z"
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "change_plan_at": "the app in your Shopify admin"
}

Other answers

StatusWhat it meansError pages
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