Skip to content

List a customer's points transactions

GET /customers/{customer_id}/transactions
Scopepoints:read
Customer session tokenAccepted with the read scope, for the token’s own customer
Rate limit classread (limits)
Idempotency keyNot used
MCP toolcharm_list_customer_transactions

Newest first, cursor-paginated. points is signed and its sign does not follow from type — zero-point marker rows exist, and corrections can be negative earns.

NameInTypeDescription
customer_idpathstringShopify customer GID (percent-encoded, e.g. gid%3A%2F%2Fshopify%2FCustomer%2F123) or the numeric customer id.
limit (optional)queryintegerPage size, 1–250. Defaults to 50.
cursor (optional)querystringOpaque cursor from a previous response’s next_cursor.
include_internal (optional)querystring: trueInclude internal bookkeeping rows (pending reversals) that are hidden by default. The paired earn row already carries the reduced amount, so a reconciliation client wants these and a customer-facing one does not.
type (optional)querystringComma-separated ledger types to include: earn, adjust, redeem, reversal, expire, credit, status, history.

Returns TransactionList.

FieldTypeDescription
dataarray of Transaction
next_cursorstring or nullPass as cursor to fetch the next page; null on the last page. (nullable)
has_morebooleanTrue when another page exists.
{
"data": [
{
"id": "id",
"type": "earn",
"points": 120,
"balance_after": 120,
"source": "order",
"source_ref": "pos-receipt-4471",
"description": "Points for order #1042",
"title_key": "history.title.order_points",
"title_params": {},
"discount_code": "CHARM-7Q2X9",
"order_total": null,
"credit_amount": null,
"is_pending": false,
"pending_until": "2026-10-01T09:30:00.000Z",
"cancelled": false,
"created_at": "2026-10-01T09:30:00.000Z"
}
],
"next_cursor": null,
"has_more": true
}
Terminal window
curl -X GET "https://charm.appfleece.app/api/v1/customers/7712345/transactions" \
-H "Authorization: Bearer chrm_live_..."

unauthorized · invalid_token · token_expired · insufficient_scope · access_required · not_found · 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.