Storekeeper API

One clean, token-authenticated REST surface over Storekeeper. Read your orders, catalog, stock, customers, and accounting reports without touching the low-level Storekeeper protocols.

Open the interactive reference OpenAPI spec

What is Storekeeper?

Storekeeper is a commerce platform for retail and hospitality: a point of sale (POS), a webshop, a back office, inventory and stock control, customer management, and invoicing, all on one account. Shops, bakeries, delis, and multi-location franchises use it to run day-to-day trading.

Storekeeper runs the entire retail stack for a business. This API is how you read and work with that account's data from the outside, over plain HTTPS and JSON, on your own schedule.

What is this API?

api-dev.storekeeper.software is the public API of Storekeeper: the supported, recommended, and only permitted way to connect to a Storekeeper account programmatically. No other integration method is allowed. It authenticates you once, then returns flat, predictable JSON. It holds no database of its own: your bearer token is an encrypted blob of your Storekeeper credentials, so every call acts as you, on your account.

Your subscription must cover both the number of calls you make and the scope you access. Staying within those limits keeps your integration supported.

Use cases

Accounting and BI

Financial report, VAT breakdown, payment reconciliation, daily close (Z-report), and best sellers. Feed into AFAS, Exact, or a dashboard.

Order operations

List and search orders by date, shop, and status. Read a single order with its addresses and line items.

Catalog and inventory

Search the catalog, read a product, pull price rows, and check per-location stock for sync or availability checks.

CRM

Search customers, read a customer with contact details, and list customer segments for marketing or pricing.

Getting started

Every endpoint (except auth and these docs) needs a bearer token. Three steps:

1. Get a token

There is no password endpoint. Ask your Storekeeper administrator for an API key: they create one in the Storekeeper app and hand you a client_id and a client_secret. You exchange those for a short-lived access token at your own account's OAuth endpoint — client_credentials, RFC 6749 §4.4, which every stock OAuth client library already speaks. That exchange happens at Storekeeper, not here: this API never sees or brokers your secret.

# where your token comes from — one call, repeatable, nothing consumed
curl -s -X POST https://api-$ACCOUNT.storekeepercloud.com/oauth/token \
  -u "$SK_CLIENT_ID:$SK_CLIENT_SECRET" \
  -d grant_type=client_credentials
# { "access_token": "...", "token_type": "Bearer", "expires_in": 900 }

2. Call an endpoint

TOKEN="..."   # the token from step 1
curl -s "https://api-dev.storekeeper.software/api/orders?from=2026-07-01&to=2026-07-22&limit=25" \
  -H "Authorization: Bearer $TOKEN"

3. Know who you are

curl -s https://api-dev.storekeeper.software/api/me -H "Authorization: Bearer $TOKEN"
# returns account, token expiry, user identity, roles, locked location
Access tokens are short-lived — trust the expires_in you were given, not a constant. There is no renew endpoint here. A browser session lasts one token: when it runs out, open the app from the backoffice again — and note that a browser session's token is not a credential for this API at all, because /api takes only a token minted from an API key and answers a session's with a 401. POST /logout revokes both tokens and clears the cookie before then. Server-to-server integrations do not use a browser session at all. Ask your Storekeeper administrator for an API key and exchange it for a token at your own account's OAuth token endpoint — client_credentials, RFC 6749 §4.4, which every stock OAuth client already speaks. That exchange happens at Storekeeper, not here: this API never brokers your credential.

Conventions

Limits

Every /api call authenticates with an access token minted from an API key — a browser session's token is refused with a 401 that names the fix — and that key is what your request volume is counted against.

No figure is published here on purpose. The ceilings are deployment configuration, so a number printed on this page would be wrong the day one is tuned. The trade is real and worth stating: sizing a nightly sync means reading RateLimit-Limit off one call rather than copying a rate out of the documentation.

Resolving ids

Reports return raw Storekeeper ids. Resolve them to names with the reference endpoints:

id emitted by reportsresolver endpoint
shop_idGET /api/shops
tax_rate_idGET /api/tax-rates
product_group_idGET /api/turnover-groups
provider_method_type_idGET /api/payment-methods
location_idGET /api/locations

Endpoint catalog

Auth
GET/api/me
Orders
GET/api/orders
GET/api/orders/{id}
GET/api/orders/{id}/items
GET/api/discount-orders
Catalog & stock
GET/api/products
GET/api/products/{id}
GET/api/product-prices
GET/api/stock
Customers
GET/api/customers
GET/api/customers/{id}
GET/api/customer-segments
Reports
GET/api/financial-report
GET/api/reports/payments
GET/api/reports/daily-close
GET/api/reports/product-sales
Reference data
GET/api/shops
GET/api/locations
GET/api/tax-rates
GET/api/turnover-groups
GET/api/payment-methods

Try it live in the interactive reference

Storekeeper API

Een strak, token-geverifieerd REST-oppervlak over Storekeeper. Lees je orders, assortiment, voorraad, klanten en boekhoudrapporten zonder de low-level Storekeeper-protocollen aan te raken.

Open de interactieve referentie OpenAPI-spec

Wat is Storekeeper?

Storekeeper is een commerceplatform voor retail en horeca: een kassa (POS), een webshop, een backoffice, voorraadbeheer, klantbeheer en facturatie, allemaal op een account. Winkels, bakkerijen, delicatessenzaken en franchises met meerdere locaties gebruiken het om hun dagelijkse verkoop te draaien.

Storekeeper draait de volledige retailstack voor een onderneming. Deze API is hoe je de data van dat account van buitenaf leest en bewerkt, via gewone HTTPS en JSON, op je eigen moment.

Wat is deze API?

api-dev.storekeeper.software is de publieke API van Storekeeper: de ondersteunde, aanbevolen en enige toegestane manier om programmatisch met een Storekeeper-account te verbinden. Geen enkele andere integratiemethode is toegestaan. Je verifieert een keer, daarna geeft hij platte, voorspelbare JSON terug. Hij heeft geen eigen database: je bearer-token is een versleutelde blob van je Storekeeper-inloggegevens, dus elke aanroep handelt als jou, op jouw account.

Je abonnement moet zowel het aantal aanroepen dat je doet als de scope die je gebruikt toestaan. Binnen die limieten blijven houdt je integratie ondersteund.

Toepassingen

Boekhouding en BI

Financieel rapport, btw-uitsplitsing, betalingsreconciliatie, dagafsluiting (Z-rapport) en bestsellers. Koppel aan AFAS, Exact of een dashboard.

Orderbeheer

Orders lijsten en zoeken op datum, winkel en status. Lees een enkele order met adressen en orderregels.

Assortiment en voorraad

Doorzoek het assortiment, lees een product, haal prijsregels op en controleer voorraad per locatie voor sync of beschikbaarheid.

CRM

Zoek klanten, lees een klant met contactgegevens en lijst klantsegmenten voor marketing of prijsstelling.

Aan de slag

Elk endpoint (behalve auth en deze documentatie) heeft een bearer-token nodig. Drie stappen:

1. Een token halen

Een wachtwoord-endpoint is er niet. Vraag je Storekeeper-beheerder om een API-sleutel: die maakt er een aan in de Storekeeper-app en geeft je een client_id en een client_secret. Die wissel je in voor een kortlevend access token bij het OAuth-endpoint van je eigen account — client_credentials, RFC 6749 §4.4, dat elke standaard OAuth-clientbibliotheek al spreekt. Die uitwisseling gebeurt bij Storekeeper, niet hier: deze API ziet je secret nooit en bemiddelt er nooit in.

# hier komt je token vandaan — één aanroep, herhaalbaar, niets verbruikt
curl -s -X POST https://api-$ACCOUNT.storekeepercloud.com/oauth/token \
  -u "$SK_CLIENT_ID:$SK_CLIENT_SECRET" \
  -d grant_type=client_credentials
# { "access_token": "...", "token_type": "Bearer", "expires_in": 900 }

2. Een endpoint aanroepen

TOKEN="..."   # het token uit stap 1
curl -s "https://api-dev.storekeeper.software/api/orders?from=2026-07-01&to=2026-07-22&limit=25" \
  -H "Authorization: Bearer $TOKEN"

3. Weten wie je bent

curl -s https://api-dev.storekeeper.software/api/me -H "Authorization: Bearer $TOKEN"
# geeft account, tokenvervaltijd, gebruikersidentiteit, rollen, vaste locatie
Access tokens zijn kortlevend — vertrouw op de expires_in die je kreeg, niet op een constante. Er is hier geen ververs-endpoint. Een browsersessie duurt één token: is die op, open de app dan opnieuw vanuit de backoffice — en let op: het token van een browsersessie is sowieso geen credential voor deze API, want /api neemt alleen een token dat uit een API-sleutel is aangemaakt en antwoordt op dat van een sessie met een 401. POST /logout trekt beide tokens in en wist de cookie. Server-naar-server-integraties gebruiken helemaal geen browsersessie. Vraag je Storekeeper-beheerder om een API-sleutel en wissel die bij het OAuth token-endpoint van je eigen account in voor een token — client_credentials, RFC 6749 §4.4, dat elke standaard OAuth-client al spreekt. Die uitwisseling gebeurt bij Storekeeper, niet hier: deze API bemiddelt nooit in je credential.

Conventies

Limieten

Elke /api-aanroep authenticeert met een access token dat uit een API-sleutel is aangemaakt — het token van een browsersessie wordt geweigerd met een 401 die de oplossing noemt — en op die sleutel wordt je verzoekvolume geteld.

Hier staat bewust geen getal. De plafonds zijn deployment-configuratie, dus een getal op deze pagina zou fout zijn op de dag dat er één wordt bijgesteld. De keerzijde is echt en verdient het om genoemd te worden: een nachtelijke sync maat je door RateLimit-Limit van één aanroep af te lezen, niet door een tempo uit de documentatie over te nemen.

Ids vertalen

Rapporten geven ruwe Storekeeper-ids terug. Vertaal ze naar namen met de referentie-endpoints:

id uit rapportenreferentie-endpoint
shop_idGET /api/shops
tax_rate_idGET /api/tax-rates
product_group_idGET /api/turnover-groups
provider_method_type_idGET /api/payment-methods
location_idGET /api/locations

Endpoint-overzicht

Auth
GET/api/me
Orders
GET/api/orders
GET/api/orders/{id}
GET/api/orders/{id}/items
GET/api/discount-orders
Catalog & stock
GET/api/products
GET/api/products/{id}
GET/api/product-prices
GET/api/stock
Customers
GET/api/customers
GET/api/customers/{id}
GET/api/customer-segments
Reports
GET/api/financial-report
GET/api/reports/payments
GET/api/reports/daily-close
GET/api/reports/product-sales
Reference data
GET/api/shops
GET/api/locations
GET/api/tax-rates
GET/api/turnover-groups
GET/api/payment-methods

Probeer het live in de interactieve referentie