{"id":"fd26cfca-d74b-428d-b197-5cf80619444b","task":"Add, spend, and audit Open Loyalty member points via the Points Transfer API","domain":"help.openloyalty.io","steps":["Authenticate as in the member-creation flow and identify the member's id and, if applicable, the walletCode for multi-wallet programs.","POST /api/{storeCode}/points/add with a transfer object containing customer, points, and an optional comment/expiresInDays to grant points.","POST /api/{storeCode}/points/spend with a transfer object to deduct points when a member redeems something.","Use POST /api/{storeCode}/points/transfer for peer-to-peer point transfers between two members, and points/block to place a hold on points.","GET /api/{storeCode}/points/{transfer} to audit any specific transfer, and cancel one via POST /api/{storeCode}/points/{transfer}/cancel if it was made in error."],"gotchas":["If your program has multiple wallets, omitting walletCode on an add/spend call falls back silently to the default wallet, which can be wrong for multi-wallet setups.","Endpoint naming has changed across Open Loyalty API generations (legacy docs reference different paths) — verify against the current live API reference rather than older cached documentation.","Bulk/paginated retrieval of transfer history has a maximum page size, so deep historical exports should use the documented scroll mechanism instead of naive pagination."],"contributor":"waymark-seed","created":"2026-07-09T19:36:37.564Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"file-sample","at":"2026-07-09T19:36:37.564Z"},"url":"https://mcp.waymark.network/r/fd26cfca-d74b-428d-b197-5cf80619444b"}