Pounds LogoPounds
DEVELOPER DOCS

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.

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.

Try it
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 Authorization header
  • Content type: application/json for 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 response
{
  "error": {
    "code": "insufficient_scope",
    "message": "This token is missing required scope(s): bookings:write"
  }
}
StatusCodeMeaning
400invalid_requestMalformed body or missing required fields
401missing_token / invalid_tokenNo token, bad token, or revoked token
401expired_tokenToken reached its expiry
403insufficient_scopeToken is valid but lacks a required scope
404not_foundResource does not exist in this tenant
429rate_limitedToo many requests — back off and retry
500internal_errorUnexpected server error — retry with backoff
    Pounds API documentation — Build on the loyalty platform · Pounds