Status: Stable API contract for the current Partner API endpoints.
Partner API Quickstart
The More Rewards Partner API connects a club's member/cardholder system to points earning, balances, history, and redemption.
The normal sandbox path is:
member onboard -> transaction settled -> balance returned -> points history returned -> transaction history returned -> redemption requested -> redemption status returned.
Sandbox and production
Use sandbox for development and testing. Production credentials and production base URLs are issued separately after go-live approval.
https://sandbox.more-rewards.co.uk
https://api.more-rewards.co.uk
Sandbox credentials are not valid in production, and production credentials are not valid in sandbox.
Club credentials
Resellers receive one API key set per club. The key identifies the club, so normal requests do not include clubId.
For POST requests that include partnerRef, use the public club reference supplied by More Rewards.
Required auth headers
Every request requires:
X-MR-Key-Id: club_sbx_example
X-MR-Timestamp: 2026-04-28T12:00:00Z
X-MR-Signature: v1=<hex_hmac_sha256>
Every POST also requires:
X-MR-Idempotency-Key: unique-logical-request-key
The signature canonical string is:
{timestamp}
{method}
{path}
{body_sha256}
Sign the pathname only. Do not include query strings in the canonical path.
Member onboarding
Include wallet bank-account details when the integration is collecting payout details for the member.
curl -X POST https://sandbox.more-rewards.co.uk/api/v1/members \
-H "Content-Type: application/json" \
-H "X-MR-Key-Id: club_sbx_example" \
-H "X-MR-Timestamp: 2026-04-28T12:00:00Z" \
-H "X-MR-Idempotency-Key: member-member_external_id" \
-H "X-MR-Signature: v1=<computed_signature>" \
-d '{
"partnerRef": "club_public_id",
"member": {
"externalMemberId": "member_external_id",
"firstName": "Example",
"lastName": "Member",
"email": "member@example.com",
"wallet": {
"provider": "moneyhub",
"walletRef": "sandbox_wallet_member_external_id",
"status": "verified",
"bankAccount": {
"accountNumber": "12345678",
"sortCode": "123456",
"name": "Example Member"
}
}
}
}'
Successful response summary:
{
"ok": true,
"data": {
"status": "created",
"externalMemberId": "member_external_id"
}
}
Settled transaction and points allocation
curl -X POST https://sandbox.more-rewards.co.uk/api/v1/transactions/settled \
-H "Content-Type: application/json" \
-H "X-MR-Key-Id: club_sbx_example" \
-H "X-MR-Timestamp: 2026-04-28T12:01:00Z" \
-H "X-MR-Idempotency-Key: settled-transaction_external_id" \
-H "X-MR-Signature: v1=<computed_signature>" \
-d '{
"partnerRef": "club_public_id",
"eventId": "event_external_id",
"occurredAt": "2026-04-28T12:01:00Z",
"member": {
"externalMemberId": "member_external_id"
},
"transaction": {
"externalTransactionId": "transaction_external_id",
"merchantId": "merchant_external_id",
"merchantName": "Partner Merchant",
"amountMinor": 10000,
"currency": "GBP",
"settledAt": "2026-04-28T12:01:00Z"
}
}'
Successful response summary:
{
"ok": true,
"data": {
"status": "processed",
"eventId": "event_external_id",
"externalTransactionId": "transaction_external_id",
"pointsAwarded": 1000,
"balances": {
"pointsBalance": 1000,
"reservedPointsBalance": 0
}
}
}
Balance lookup
curl https://sandbox.more-rewards.co.uk/api/v1/members/member_external_id/balance \
-H "X-MR-Key-Id: club_sbx_example" \
-H "X-MR-Timestamp: 2026-04-28T12:02:00Z" \
-H "X-MR-Signature: v1=<computed_signature>"
Points history
curl "https://sandbox.more-rewards.co.uk/api/v1/members/member_external_id/points?limit=25&filter=all" \
-H "X-MR-Key-Id: club_sbx_example" \
-H "X-MR-Timestamp: 2026-04-28T12:03:00Z" \
-H "X-MR-Signature: v1=<computed_signature>"
Supported filter values are all, earned, redeemed, reserved, released, reversed, and adjusted.
Transaction history
curl "https://sandbox.more-rewards.co.uk/api/v1/members/member_external_id/transactions?limit=25" \
-H "X-MR-Key-Id: club_sbx_example" \
-H "X-MR-Timestamp: 2026-04-28T12:04:00Z" \
-H "X-MR-Signature: v1=<computed_signature>"
Redemption request
curl -X POST https://sandbox.more-rewards.co.uk/api/v1/redemptions \
-H "Content-Type: application/json" \
-H "X-MR-Key-Id: club_sbx_example" \
-H "X-MR-Timestamp: 2026-04-28T12:05:00Z" \
-H "X-MR-Idempotency-Key: redemption-redemption_external_id" \
-H "X-MR-Signature: v1=<computed_signature>" \
-d '{
"partnerRef": "club_public_id",
"requestId": "redemption_external_id",
"member": {
"externalMemberId": "member_external_id"
},
"redemption": {
"points": 500,
"currency": "GBP"
}
}'
Successful response summary:
{
"ok": true,
"data": {
"status": "payout_pending",
"externalMemberId": "member_external_id",
"redemptionId": "redemption_record_id",
"pointsRedeemed": 500
}
}
Redemption status
curl "https://sandbox.more-rewards.co.uk/api/v1/redemptions/redemption_record_id" \
-H "X-MR-Key-Id: club_sbx_example" \
-H "X-MR-Timestamp: 2026-04-28T12:06:00Z" \
-H "X-MR-Signature: v1=<computed_signature>"
Common errors and fixes
| Error | Likely cause | Fix |
| --- | --- | --- |
| invalid_signature | Body, timestamp, method, or path changed after signing | Sign the exact body and pathname sent |
| stale_timestamp | Timestamp outside the 5 minute window | Use current UTC time and check clock sync |
| unauthorized | Missing/inactive key or wrong environment | Use the correct club key for the API environment |
| invalid_request | Missing header, invalid JSON, or schema mismatch | Compare the request with the endpoint schema |
| duplicate_idempotency_conflict | Reused idempotency key with a different body | Reuse keys only for exact retries |
| cardholder_not_found | Member has not been onboarded for this club | Onboard the member first |
| missing_payout_reference | Member payout details are not ready | Supply wallet bank details and wait for verification |
| insufficient_points_balance | Redemption exceeds available points | Refresh balance before redemption |
| insufficient_partner_cash_capacity | The club cannot cover the redemption yet | Contact More Rewards |
Full endpoint list
| Method | Path | Purpose |
| --- | --- | --- |
| POST | /api/v1/members | Create or update a member/cardholder. |
| POST | /api/v1/transactions/settled | Record a settled transaction and award points. |
| POST | /api/v1/transactions/reversed | Reverse points for a previously settled transaction. |
| GET | /api/v1/members/{externalMemberId}/balance | Read available and reserved member balances. |
| GET | /api/v1/members/{externalMemberId}/points | Read member reward-ledger history. |
| GET | /api/v1/members/{externalMemberId}/transactions | Read member settled/reversed transaction history. |
| POST | /api/v1/redemptions | Request a points redemption. |
| GET | /api/v1/redemptions/{redemptionId} | Read redemption and payout status. |
| POST | /api/v1/members/{externalMemberId}/close | Close a member/cardholder account. |
