API reference
35 endpoints. Responses are JSON; errors carry an error string and the
status code that matches what went wrong.
Authentication
Sign in at POST /api/auth/login and send the returned ws-access-token
and ws-refresh-token cookies with subsequent requests. The access token is an
RS256 token from our identity provider, verified on every request; a modified one is
rejected outright rather than downgraded to an anonymous session.
curl -s -X POST https://warehousescanner.co/api/auth/login \
-H 'content-type: application/json' \
-d '{"email":"you@company.com","password":"…"}' \
-c cookies.txt
curl -s https://warehousescanner.co/api/dashboard/stats -b cookies.txt Endpoints marked Operator additionally require an operator or owner role. Long-lived API keys are not issued yet — see integrations.
Directory
Open data derived from mapped building outlines. No authentication.
| Method | Path | Auth | Summary |
|---|---|---|---|
| GET | /api/warehouses | Public | Paged list of facilities. |
| GET | /api/warehouses/search | Public | Filter by region, country, type and floor area. Names any filter it could not apply rather than ignoring it. |
| GET | /api/warehouses/{slug} | Public | One facility, including the OpenStreetMap way id it was derived from. |
| GET | /api/regions | Public | Regions with facility counts and combined floor area. |
| GET | /api/facility-types | Public | The facility type codes used by the filters. |
| GET | /api/cities | Public | Cities the directory can be browsed by. Facilities with no mapped city are excluded rather than invented. |
| GET | /api/operators | Public | Operator names recorded on mapped facilities. Listing does not imply a commercial relationship. |
| GET | /api/health | Public | Liveness, dataset size and build stamp. |
Rates and quotes
Every price here came from an operator answering a specific requirement.
| Method | Path | Auth | Summary |
|---|---|---|---|
| GET | /api/rates | Public | Rates from quotes that are still within their validity window. Empty until operators have answered. |
| POST | /api/quotes/rfq | Session | Send a requirement to a facility. Counts against the plan's monthly rate-request allowance. |
| GET | /api/quotes | Session | Your own requests and their answers. |
| GET | /api/quotes/{reference} | Session | One rate request, with the operator's answer when it has been given. |
| POST | /api/quotes/{reference}/answer | Operator | Operator-side: price a request. |
| POST | /api/quotes/{reference}/decline | Operator | Operator-side: decline with a reason. |
Bookings and stock
A booking takes its price from the quote it was created from.
| Method | Path | Auth | Summary |
|---|---|---|---|
| GET | /api/bookings | Session | Bookings belonging to your account, cancelled ones included. |
| POST | /api/bookings/create | Session | Create from an answered quote. The request body cannot set a price. |
| GET | /api/bookings/{reference} | Session | One booking, with its quoted price, term and current status. |
| POST | /api/bookings/{reference}/update | Session | Amend term or quantity. |
| POST | /api/bookings/{reference}/cancel | Session | Cancel with a reason. |
| GET | /api/movements | Session | Recorded receipts and despatches. |
| POST | /api/movements | Session | Record one. A despatch exceeding stock on hand is refused. |
| GET | /api/inventory | Session | On-hand quantities per booking. |
| GET | /api/capacity | Session | Committed units by month. Does not report free space — no operator supplies it. |
Account
Session-cookie authenticated.
| Method | Path | Auth | Summary |
|---|---|---|---|
| POST | /api/auth/login | Public | Exchange credentials for a signed session cookie. |
| POST | /api/auth/signup | Public | Create an account. |
| POST | /api/auth/logout | Session | Clear the session. |
| GET | /api/auth/me | Session | The current account. |
| POST | /api/account/password | Session | Change your password. Requires the current one. |
| GET | /api/dashboard/stats | Session | The figures behind the dashboard, scoped to your account. |
| GET | /api/billing/usage | Session | Plan counters for the current month. |
Workspace
Saved facilities and support conversations, scoped to your own account.
| Method | Path | Auth | Summary |
|---|---|---|---|
| GET | /api/shortlist | Session | Saved facilities, joined to the live directory record rather than a copy taken at save time. |
| POST | /api/shortlist | Session | Save a facility, or update the note on one already saved. Saving twice is one entry, not an error. |
| DELETE | /api/shortlist | Session | Remove a saved facility. Answers 404 when it was never saved. |
| GET | /api/support | Session | Your support tickets and the replies on them. |
| POST | /api/support | Session | Open a ticket, or reply to one by sending its reference. |
Rate limits
Searches and rate requests count against the monthly allowance on your plan. When a payment
provider is configured, an exhausted allowance returns 429 with the counter in
the body. Until then the counters are recorded and not enforced, and
/api/billing/usage says which mode the deployment is in.