Client API
The Client API is the read-mostly slice of the Pounds API designed for building customer-facing experiences — your own branded booking page, a kiosk screen, a white-label mobile app. Same token format, different scopes.
Never ship write-scope tokens to browsers
The Client API is designed to be called from your own backend server. If you need to expose data directly from a customer's browser, mint a read-only token with just customers:read and rewards:read. Never expose a token that can create, update, or delete resources.
Public shop info
These endpoints return the same public profile data a customer sees when they land on the shop's page. They are safe to cache.
/api/v1/public/shopGet shop profile
Returns the shop's public profile — name, logo, address, opening hours, and primary color. Scoped to the tenant that owns the API key.
Response
{
"data": {
"id": "tenant_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"name": "Brew & Bean Coffee",
"slug": "brew-bean",
"logo": "https://cdn.pounds.network/shops/brew-bean/logo.png",
"primaryColor": "#7c3aed",
"description": "Third-wave coffee roastery in Shoreditch",
"address": "42 Redchurch Street, London E2 7DP",
"location": { "lat": 51.524, "lng": -0.074 },
"currency": "GBP",
"timezone": "Europe/London",
"operatingHours": {
"mon": "08:00-18:00",
"tue": "08:00-18:00"
}
}
}Services
The list of bookable services — the things a customer can pick when making a booking.
/api/v1/public/servicesList bookable services
Returns every active service a customer can book, with price, duration, and the points they'll earn on completion.
Response
{
"data": [
{
"id": "svc_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"name": "Signature Cut & Style",
"description": "60 minutes with a senior stylist",
"durationMinutes": 60,
"price": 8000,
"currency": "GBP",
"pointsOnCompletion": 100,
"image": "https://cdn.pounds.network/services/svc_01HY2F.jpg"
}
]
}Public rewards
The catalog of rewards customers can redeem. Inactive and out-of-stock rewards are filtered out automatically.
/api/v1/public/rewardsList available rewards
Returns the rewards catalog visible to customers. Excludes inactive rewards and ones with zero stock remaining.
Response
{
"data": [
{
"id": "rwd_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"name": "Free coffee",
"description": "Any drink on the menu",
"pointsCost": 500,
"image": "https://cdn.pounds.network/rewards/rwd_01HY2F.jpg",
"stockRemaining": null
}
]
}Availability
Check which slots are open before showing a booking picker to the customer.
/api/v1/public/availabilityGet available time slots
Returns the next N available start times for a given service, respecting operating hours, existing bookings, and staff assignments.
Parameters
| Name | Type | Description |
|---|---|---|
serviceId* | string | Service to check availability for |
from | ISO date | Earliest start time to consider (default: now) |
days | number | How many days forward to search (default 14, max 60) |
Response
{
"data": {
"serviceId": "svc_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"slots": [
{ "startAt": "2026-04-11T09:00:00.000Z", "available": true },
{ "startAt": "2026-04-11T10:00:00.000Z", "available": true },
{ "startAt": "2026-04-11T11:00:00.000Z", "available": false }
]
}
}Customer self-service
These endpoints return data for a single customer. They accept either:
- A tenant API key + explicit
customerIdquery param (for server-to-server calls), or - A signed-in customer session (for customer-facing pages hosted on your domain via the Pounds customer SDK).
/api/v1/me/balanceGet customer balance
Returns the customer's current points balance, tier, and next-tier progress.
Parameters
| Name | Type | Description |
|---|---|---|
customerId | string | Required when using a tenant API key. Inferred from the session otherwise. |
Response
{
"data": {
"customerId": "cust_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"points": 1247,
"tier": "GOLD",
"nextTier": {
"name": "PLATINUM",
"pointsNeeded": 753
},
"lifetimeSpend": 24500,
"currency": "GBP"
}
}/api/v1/me/bookingsList customer bookings
Returns the customer's upcoming and past bookings, most recent first.
Parameters
| Name | Type | Description |
|---|---|---|
customerId | string | Required when using a tenant API key |
status | string | Filter by status (PENDING, CONFIRMED, COMPLETED, CANCELLED) |
limit | number | Page size (default 20, max 100) |
Response
{
"data": [
{
"id": "bkng_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"status": "CONFIRMED",
"serviceName": "Signature Cut & Style",
"startAt": "2026-04-12T14:00:00.000Z",
"endAt": "2026-04-12T15:00:00.000Z",
"pointsAwarded": 0
}
]
}/api/v1/me/rewardsList customer rewards
Returns the rewards this specific customer has redeemed or is eligible for.
Parameters
| Name | Type | Description |
|---|---|---|
customerId | string | Required when using a tenant API key |
Response
{
"data": {
"eligible": [
{
"id": "rwd_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"name": "Free coffee",
"pointsCost": 500,
"affordable": true
}
],
"history": [
{
"id": "redm_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"rewardName": "Free pastry",
"pointsDebited": 250,
"redeemedAt": "2026-03-14T12:00:00.000Z"
}
]
}
}Customer booking
Endpoints for letting a customer book themselves — for branded booking pages and white-label apps.
/api/v1/me/bookingsCreate a booking
Create a new booking on behalf of the current customer. The customer is identified by the session cookie or by passing customerId explicitly when using a tenant API key.
Request body
{
"customerId": "cust_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"serviceId": "svc_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"startAt": "2026-04-12T14:00:00.000Z",
"notes": "Coming in for a trim before the wedding"
}Response
{
"data": {
"id": "bkng_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"status": "PENDING",
"startAt": "2026-04-12T14:00:00.000Z",
"endAt": "2026-04-12T15:00:00.000Z",
"confirmationCode": "VR7K8X"
}
}/api/v1/me/bookings/:idCancel a booking
Lets a customer cancel their own upcoming booking. Respects the shop's cancellation cutoff — returns 409 if the cutoff has passed.
Parameters
| Name | Type | Description |
|---|---|---|
id* | string | Booking ID |
Response
{
"data": {
"id": "bkng_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"status": "CANCELLED",
"cancelledAt": "2026-04-10T09:14:22.000Z"
}
}/api/v1/me/rewards/:id/redeemRedeem a reward
Let a customer redeem one of the rewards they're eligible for. Debits points and returns the new balance.
Parameters
| Name | Type | Description |
|---|---|---|
id* | string | Reward ID |
Request body
{
"customerId": "cust_01HY2F8Z3M7K8XQRBV4N2YJWPD"
}Response
{
"data": {
"id": "redm_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"rewardId": "rwd_01HY2F8Z3M7K8XQRBV4N2YJWPD",
"pointsDebited": 500,
"balanceAfter": 747,
"redeemedAt": "2026-04-10T09:14:22.000Z"
}
}