API overview and quick start
What the LeisureNexus REST API does, the base URL, conventions for ids, money and time, and your first request in five minutes.
What you can build
The LeisureNexus API lets your own website, app or back-end system work with a LeisureNexus business:
- Show items, prices, pictures and live stock on your website.
- Look up and create customers (with loyalty points and house-account balance) from your sign-up form or app.
- Pull sales and refunds into a data warehouse, BI tool or accounting system.
- Let business customers place wholesale orders from your B2B portal.
- Be told the moment something happens with signed webhooks.
Base URL
https://api.leisurenexus.app/v1
Every call uses HTTPS and JSON. The machine-readable description is at https://api.leisurenexus.app/v1/openapi.json (OpenAPI 3.1) — load it into Postman, Insomnia or a code generator.
Quick start
- In the back office, open Point of sale → Developer API → New API key. Give it a name, tick the scopes it needs (for example
catalog.read), choose a default store and save. Copy the key — it starts withlnk_and is shown once. See API keys and scopes. - Call the API with the key as a bearer token:
curl https://api.leisurenexus.app/v1/locations \
-H "Authorization: Bearer lnk_your_key_here"
- You get your stores back:
{
"data": [
{
"id": "9f2c1c2e-5b1a-4a8e-9d55-3c1f0b7a2e11",
"name": "Main Street",
"code": "001",
"address_line1": "120 Main St",
"city": "Austin",
"state": "TX",
"postal_code": "78701",
"phone": "5125550142",
"timezone": "America/Chicago"
}
]
}
Conventions
| Topic | Rule |
|---|---|
| IDs | UUID strings, e.g. 9f2c1c2e-5b1a-4a8e-9d55-3c1f0b7a2e11. |
| Money | Integer cents in fields ending _cents — price_cents: 249 is $2.49. |
| Quantities | Units, with up to 3 decimals for weighed items (1.25 lb). |
| Times | ISO 8601 in UTC, e.g. 2026-10-17T14:05:00+00:00. Filters accept a date or date-time. |
| Lists | {"data": [...], "meta": {...}}, paged with page and per_page — see Requests, errors and limits. |
| Single records | {"data": {...}}. |
| Errors | {"error": {"code": "...", "message": "..."}} with the right HTTP status. |
| Store | Prices and stock are per store. Each key has a default store; pass location_id to choose another. |
Endpoints at a glance
| Method and path | Scope | What it does |
|---|---|---|
GET /locations | catalog.read | Stores |
GET /departments | catalog.read | Departments with their categories |
GET /items · GET /items/{id} | catalog.read | Items with this store's price, barcodes and picture |
GET /stock | stock.read | Stock on hand at a store |
GET /customers · GET /customers/{id} | customers.read | Customers with points and account balance |
POST /customers · PATCH /customers/{id} | customers.write | Add or update a customer |
GET /orders · GET /orders/{id} | orders.read | Sales and refunds |
POST /sales-orders · GET /sales-orders/{id} | orders.write | Wholesale orders |
Full details are in the endpoint reference.
Security in one paragraph
Keys belong on your server, never in a web page or mobile app. Each key sees one business only, does only what its scopes allow, and can be revoked at once. The API is reached only through the LeisureNexus gateway, which strips internal details, limits request sizes and rate, and tags every request with an X-Request-Id you can quote to support. No card numbers or payment-processor details are ever returned.
Versioning
This is version 1 (/v1). We add fields and endpoints without notice — write your code to ignore fields it doesn't know. Anything that would break existing code ships as a new version, announced in advance.
Still stuck? Email support@leisurenexus.com or send us a message — we're happy to help.