More Rewards
More Rewards
Developer Documentation

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. |