Catalog & history
Read-only endpoints for configuring your till and reconciling at end of day.
Catalog
Scope: catalog.read.
Branches
curl "https://staging.app.rewards.network/api/partner/v1/branches" -H "Authorization: Bearer rn_live_..."
{ "success": true, "data": { "branches": [ { "branch_id": 45, "branch_name": "Main Street", "business_address": "12 Main St", "branch_phone": "0312345678", "is_active": true } ] } }
Cache the list; branch_id is required on every commit and redeem.
Campaign status
curl "https://staging.app.rewards.network/api/partner/v1/campaigns/status" -H "Authorization: Bearer rn_live_..."
Flags such as loyalty_running, stamp_running, has_campaigns with their date ranges. Use it to hide loyalty UI on the till when nothing is running, and to explain a NO_ACTIVE_RULES preview.
Vouchers
curl "https://staging.app.rewards.network/api/partner/v1/vouchers?per_page=50" -H "Authorization: Bearer rn_live_..."
The merchant's voucher campaigns (campaign_id, title, discount_percent, discount_amount, min_purchase_amount, max_discount_amount, valid_from, valid_to, terms_text, applies_to_all_branches, remaining_count, is_available, campaign_status) with pagination meta.
Reward catalog
curl "https://staging.app.rewards.network/api/partner/v1/rewards/catalog" -H "Authorization: Bearer rn_live_..."
{
"success": true,
"data": {
"loyalty_items": [ { "item_id": 9, "campaign_id": 17, "campaign_name": "Coffee Points", "item_name": "Free flat white", "item_image_url": null, "points_required": 500 } ],
"stamp_milestones": [ { "milestone_id": 3, "campaign_id": 18, "campaign_name": "Pastry Card", "stamps_required": 5, "reward_name": "Free pastry", "reward_description": null } ]
}
}
Only items and milestones from campaigns running right now.
History
Scope: history.read.
Transactions
curl "https://staging.app.rewards.network/api/partner/v1/transactions?date_from=2026-09-22&date_to=2026-09-22&per_page=100" \
-H "Authorization: Bearer rn_live_..."
| Query | Values |
|---|---|
type |
all (default), points, stamps |
date_from, date_to |
Y-m-d |
search |
customer name |
per_page, page |
pagination |
sort_by, sort_dir |
ordering |
Each item is one ledger movement:
{
"id": "pl_88213",
"type": "EARN_POINTS",
"delta": 43,
"unit": "points",
"customer_id": 123,
"customer_name": "Jane Doe",
"description": "+43 points given",
"source": "EARN",
"txn_id": 9901,
"created_at": "2026-09-22T10:41:07+00:00"
}
source is the ledger entry type (EARN, REDEEM, VOID); txn_id links back to the transaction you committed, so match it against your qr_scan_id records via the commit response.
Redemptions
curl "https://staging.app.rewards.network/api/partner/v1/redemptions?status=COMPLETED&branch_id=45" -H "Authorization: Bearer rn_live_..."
curl "https://staging.app.rewards.network/api/partner/v1/redemptions/5512" -H "Authorization: Bearer rn_live_..."
Filters: type (POINTS, STAMPS, VOUCHER), status (PENDING, COMPLETED or ALL; expired and cancelled QR codes are not kept in this list, so EXPIRED / CANCELLED return an empty list), branch_id, per_page (1–100, default 15), page. Each redemption carries redemption_id, user_id, branch_id, campaign_id, redemption_type, status, points_used, stamps_used, voucher_code, voucher_title, expires_at, redeemed_at, created_at.
Redemptions of other merchants are never visible, even by id (404).
Reward Networks