Open Loyalty

Open Loyalty is an API-first, headless loyalty and gamification platform. Every loyalty mechanic - members, transactions, points, tiers/levels, earning rules, reward campaigns, and analytics - is exposed through a documented REST API, so brands assemble custom loyalty experiences on top of Open Loyalty rather than a fixed UI. The platform grew from an open-source loyalty engine (still available as a GitHub Open Source Edition capped at 200 members for testing) into a managed, cloud-hosted SaaS. Requests are JSON over HTTPS, authenticated with a JWT bearer token (per-store and admin login) or a permanent API token. The API is scoped per store using a storeCode path segment, and change events are delivered to consumers via outbound HTTP webhook callbacks.

6 APIs 0 Features
LoyaltyGamificationRewardsPointsLoyalty ProgramCustomer EngagementHeadlessAPI First

APIs

Open Loyalty Customer API

Register, list, read, and update loyalty members (customers), check existence by email or phone, manage activation and status, assign members to levels and POS, and read per-mem...

Open Loyalty Transactions API

Register purchase transactions, simulate the points a transaction would earn before committing it, list and read transactions, assign transactions to members, import transaction...

Open Loyalty Points Transfers API

Award (add) and spend points on a member account, transfer points peer-to-peer between members, and cancel, activate, expire, or block a points transfer. List points transfers a...

Open Loyalty Reward Campaigns API

Create and manage reward campaigns (the redeemable rewards catalog), toggle campaigns active, list active and publicly available campaigns, buy a reward campaign for a member, r...

Open Loyalty Levels API

Create, list, read, update, activate, and delete loyalty tiers (levels), list the members assigned to a level, and manage level images. Levels model the tiered structure - bronz...

Open Loyalty Earning Rules API

Create, list, read, update, and activate the earning rules that define how members earn points - purchase-based, event-based, QR code scans, and geolocation check-ins - plus man...

Collections

Pricing Plans

Rate Limits

Open Loyalty Rate Limits

3 limits

RATE LIMITS

FinOps

Resources

🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Open Loyalty REST API
  version: '1.0'
request:
  auth:
    type: bearer
    token: '{{jwtToken}}'
items:
- info:
    name: Authorization
    type: folder
  items:
  - info:
      name: Admin login (get JWT).
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/admin/login_check
      body:
        type: json
        data: "{\n  \"username\": \"admin\",\n  \"password\": \"\"\n}"
    docs: Exchanges admin credentials for a JWT bearer token.
  - info:
      name: Customer login (get JWT).
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/customer/login_check
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"username\": \"\",\n  \"password\": \"\"\n}"
    docs: Exchanges member credentials for a JWT bearer token.
- info:
    name: Members
    type: folder
  items:
  - info:
      name: Register a member.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/customer/register
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"firstName\": \"Jane\",\n  \"lastName\": \"Doe\",\n  \"email\": \"jane@example.com\"\n}"
    docs: Registers a new loyalty member.
  - info:
      name: List members.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/customer
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
    docs: Lists loyalty members, paginated.
  - info:
      name: Check member by email or phone.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/customer/check?email=jane@example.com
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: email
        value: jane@example.com
        type: query
        description: Email to check.
    docs: Checks whether a member exists by email or phone.
  - info:
      name: Get a member.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/customer/:customer
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: customer
        value: ''
        type: path
        description: Member identifier.
    docs: Gets a single member by ID.
  - info:
      name: Update a member.
      type: http
    http:
      method: PUT
      url: https://your-instance.openloyalty.io/api/:storeCode/customer/:customer
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: customer
        value: ''
        type: path
        description: Member identifier.
      body:
        type: json
        data: '{}'
    docs: Updates a member's profile.
  - info:
      name: Assign member to a level.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/customer/:customer/level
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: customer
        value: ''
        type: path
        description: Member identifier.
      body:
        type: json
        data: "{\n  \"levelId\": \"\"\n}"
    docs: Assigns a member to a specific level (tier).
  - info:
      name: Get member loyalty history.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/admin/customer/:customer/history
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: customer
        value: ''
        type: path
        description: Member identifier.
    docs: Reads a member's loyalty activity history.
- info:
    name: Transactions
    type: folder
  items:
  - info:
      name: List transactions.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/transaction
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
    docs: Lists transactions, paginated.
  - info:
      name: Register a transaction.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/transaction
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"transactionData\": {\n    \"documentNumber\": \"INV-001\",\n    \"documentType\": \"sell\"\n  },\n \
          \ \"customerData\": { \"email\": \"jane@example.com\" },\n  \"items\": []\n}"
    docs: Registers a purchase transaction and evaluates earning rules.
  - info:
      name: Simulate transaction points.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/transaction/simulate
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"transactionData\": {},\n  \"items\": []\n}"
    docs: Returns the points obtainable if the transaction were registered.
  - info:
      name: Get a transaction.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/transaction/:transaction
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: transaction
        value: ''
        type: path
        description: Transaction identifier.
    docs: Gets a single transaction by ID.
  - info:
      name: Assign transaction to member.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/customer/transaction/customer/assign
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"transactionId\": \"\",\n  \"customerId\": \"\"\n}"
    docs: Assigns an unmatched transaction to a member.
- info:
    name: Points
    type: folder
  items:
  - info:
      name: List points transfers.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/points/transfer
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
    docs: Lists points transfers, paginated.
  - info:
      name: Add points.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/points/transfer/add
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"customer\": \"\",\n  \"points\": 100,\n  \"comment\": \"Welcome bonus\"\n}"
    docs: Awards points to a member account.
  - info:
      name: Spend points.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/points/transfer/spend
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"customer\": \"\",\n  \"points\": 50\n}"
    docs: Deducts points from a member account.
  - info:
      name: Transfer points peer-to-peer.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/customer/points/p2p-transfer
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"receiver\": \"\",\n  \"points\": 25\n}"
    docs: Transfers points from the logged-in member to another member.
  - info:
      name: Cancel a points transfer.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/points/transfer/:transfer/cancel
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: transfer
        value: ''
        type: path
        description: Points transfer identifier.
    docs: Cancels a specific points transfer.
- info:
    name: Rewards
    type: folder
  items:
  - info:
      name: List reward campaigns.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/campaign
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
    docs: Lists reward campaigns, paginated.
  - info:
      name: Create a reward campaign.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/campaign
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"name\": \"Free coffee\",\n  \"reward\": \"discount_code\",\n  \"costInPoints\": 200,\n  \"active\":\
          \ true\n}"
    docs: Creates a new reward campaign.
  - info:
      name: List active campaigns.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/campaign/active
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
    docs: Lists currently active reward campaigns.
  - info:
      name: Get a reward campaign.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/campaign/:campaign
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: campaign
        value: ''
        type: path
        description: Campaign identifier.
    docs: Gets a single reward campaign by ID.
  - info:
      name: Buy a reward campaign for a member.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/admin/customer/:customer/campaign/:campaign/buy
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: customer
        value: ''
        type: path
        description: Member identifier.
      - name: campaign
        value: ''
        type: path
        description: Campaign identifier.
    docs: Buys a reward campaign for a member and deducts the point cost.
- info:
    name: Tiers
    type: folder
  items:
  - info:
      name: List levels.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/level
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
    docs: Lists loyalty levels (tiers), paginated.
  - info:
      name: Create a level.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/level/create
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"name\": \"Gold\",\n  \"conditionValue\": 1000,\n  \"active\": true\n}"
    docs: Creates a new loyalty level (tier).
  - info:
      name: Get a level.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/level/:level
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: level
        value: ''
        type: path
        description: Level identifier.
    docs: Gets a single level (tier) by ID.
  - info:
      name: Update a level.
      type: http
    http:
      method: PUT
      url: https://your-instance.openloyalty.io/api/:storeCode/level/:level
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: level
        value: ''
        type: path
        description: Level identifier.
      body:
        type: json
        data: '{}'
    docs: Updates a level (tier).
  - info:
      name: List members in a level.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/level/:level/customers
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: level
        value: ''
        type: path
        description: Level identifier.
    docs: Lists members currently assigned to a level.
- info:
    name: Earning Rules
    type: folder
  items:
  - info:
      name: List earning rules.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/earningRule
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
    docs: Lists earning rules, paginated.
  - info:
      name: Create an earning rule.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/earningRule
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      body:
        type: json
        data: "{\n  \"name\": \"1 point per dollar\",\n  \"type\": \"points\",\n  \"pointsAmount\": 1,\n  \"active\": true\n\
          }"
    docs: Creates a new earning rule.
  - info:
      name: Get an earning rule.
      type: http
    http:
      method: GET
      url: https://your-instance.openloyalty.io/api/:storeCode/earningRule/:earningRule
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: earningRule
        value: ''
        type: path
        description: Earning rule identifier.
    docs: Gets a single earning rule by ID.
  - info:
      name: Update an earning rule.
      type: http
    http:
      method: PUT
      url: https://your-instance.openloyalty.io/api/:storeCode/earningRule/:earningRule
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: earningRule
        value: ''
        type: path
        description: Earning rule identifier.
      body:
        type: json
        data: '{}'
    docs: Updates an earning rule.
  - info:
      name: Activate an earning rule.
      type: http
    http:
      method: POST
      url: https://your-instance.openloyalty.io/api/:storeCode/earningRule/:earningRule/activate
      params:
      - name: storeCode
        value: DEFAULT
        type: path
        description: The store code.
      - name: earningRule
        value: ''
        type: path
        description: Earning rule identifier.
    docs: Activates or deactivates an earning rule.
bundled: true