Pounds API
Build loyalty, booking, and rewards experiences on top of the same platform powering thousands of shops. Every admin dashboard action is available as an API — same data, same guarantees, authenticated with a tenant API key that you generate from your shop's settings.
Get an API key
Generate a tenant-scoped token from your admin settings.
Admin API
Manage bookings, customers, rewards, forms, and analytics.
One API, two surfaces
The Pounds API is a single REST surface organized into two logical groups based on how you use it:
Admin API
Server-to-server endpoints for managing everything a shop owner sees in the admin dashboard. Requires write-capable scopes.
- Create and update bookings
- Manage customers and loyalty points
- Configure forms, services, rewards
- Pull full analytics
Client API
Read-mostly endpoints designed for building customer-facing flows — your own branded booking page, a mobile app, a kiosk UI.
- Public shop info, services, rewards
- Customer loyalty balance & history
- Customer's own bookings
- Claim a reward on behalf of a customer
Same token, different scopes. Both API surfaces use the same Bearer token format. The difference is which scopes you grant. Never ship a token with:writescopes to a customer-facing browser app — create a separate read-only token for that.
Quickstart
Every request goes to https://pounds.network/api/v1 and is authenticated with a Bearer token from the API Tokens tab in your admin settings.
curl https://pounds.network/api/v1/bookings \
-H "Authorization: Bearer pnds_************"Conventions
- Base URL:
https://pounds.network/api/v1 - Authentication: HTTP Bearer token in the
Authorizationheader - Content type:
application/jsonfor all request and response bodies - Tenant scoping: Every token is bound to a single tenant. You never need to pass a tenant ID — it's inferred from the token.
- Timestamps: ISO 8601 UTC strings (
2026-04-10T14:23:00.000Z) - Errors: Standard HTTP status codes plus a JSON body
{ error: { code, message } } - Rate limits: 60 req/min per token, higher for Pro. Check
X-RateLimit-*response headers.
Error format
{
"error": {
"code": "insufficient_scope",
"message": "This token is missing required scope(s): bookings:write"
}
}| Status | Code | Meaning |
|---|---|---|
400 | invalid_request | Malformed body or missing required fields |
401 | missing_token / invalid_token | No token, bad token, or revoked token |
401 | expired_token | Token reached its expiry |
403 | insufficient_scope | Token is valid but lacks a required scope |
404 | not_found | Resource does not exist in this tenant |
429 | rate_limited | Too many requests — back off and retry |
500 | internal_error | Unexpected server error — retry with backoff |