Reference / API v1

BSimple API Docs: Endpoints, Auth and Scopes

Reference for the BSimple REST API: authentication, scopes, pagination, inventory, customers, stocktakes, purchase orders, transfers and invoice endpoints.

requestv1
$ GET /api/v1/customers/list
● scoped access · JSON response

BSimple API Documentation

This is the current developer reference for the BSimple REST API. The API uses JSON responses and a versioned base path:

https://<your-bsimple-domain>/api/v1

For the business overview, see BSimple API. For a guided first request, see Getting started.

Authentication

Every request requires an API key created by an administrator in Settings → API Keys. The recommended method is the X-API-Key header:

curl --fail --silent \
  --header 'X-API-Key: YOUR_API_KEY' \
  'https://<your-bsimple-domain>/api/v1/customers/list'

The key secret is shown once at creation. BSimple stores a SHA-256 hash rather than the original secret. If a key is lost, revoke it and create a replacement. Do not put a key in browser JavaScript, source control, screenshots or support tickets.

Scopes

leads:read leads:writeRead or manage leads and lead tags
customers:read customers:writeRead or manage customers and customer tags
inventory:read inventory:writeRead inventory, or add items and manage stock levels, item details, images and categories
suppliers:readRead suppliers
locations:readRead inventory locations
reorder:readRead reorder recommendations and PAR data
reorder:writeUpdate supplier reorder levels
stocktakes:readRead stocktakes, progress, expected items and variances
purchase_orders:readRead purchase orders and lines
purchase_orders:writeCreate, auto-build and send purchase orders
saleable:readRead the saleable (warehouse bundle) list
transfers:readRead stock transfers and lines
invoices:read invoices:writeRead invoices or create draft invoices

A request whose key lacks the required scope returns 403 with an insufficient_scope error. Grant each integration only the scopes it needs.

Response format

Successful requests use a data value and a meta object. List responses include pagination metadata:

{
  "data": [],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 137,
    "total_pages": 7
  }
}

Errors use an error object and an appropriate HTTP status:

{
  "error": {
    "code": "CUSTOMER_NOT_FOUND",
    "message": "Customer was not found"
  }
}

Common statuses are 400 bad request, 401 missing or invalid key, 403 insufficient scope, 404 not found, 409 conflict and 422 validation failure.

Write endpoints (all POST endpoints that change data) require an Idempotency-Key request header — a client-chosen identifier of 1–255 characters that is unique per logical operation. Retrying the same key with the same body returns the original response instead of performing the write twice; reusing a key with a different body returns 409. Generate a fresh key (for example a UUID) for every new operation.

List parameters

List endpoints support these common parameters where applicable:

page1-based page number; default 1
per_pageRows per page; default 20, maximum 100
qFree-text search across searchable fields
sort orderWhitelisted sort column and asc or desc
include_archivedUse 1 to include archived records where supported
Entity filtersFor example status, customer_id or supplier_id

Always follow meta.total_pages rather than assuming that one request returns every row.

Leads

GET/leads/listleads:read
GET/leads/get/<id>leads:read
POST/leads/addleads:write
POST/leads/edit/<id>leads:write
POST/leads/archive/<id>leads:write
GET/leads/tags/list/<id>leads:read
POST/leads/tags/addleads:write
POST/leads/tags/removeleads:write

Customers

GET/customers/listcustomers:read
GET/customers/get/<id>customers:read
POST/customers/addcustomers:write
POST/customers/edit/<id>customers:write
POST/customers/archive/<id>customers:write
GET/customers/tags/list/<id>customers:read
POST/customers/tags/addcustomers:write
POST/customers/tags/removecustomers:write
GET/customers/invoices/list/<id>customers:read + invoices:read

Inventory and suppliers

GET/inventory/listinventory:read
GET/inventory/get/<code-or-id>inventory:read
POST/inventory/addinventory:write
POST/inventory/adjustinventory:write
POST/inventory/updateinventory:write
POST/inventory/hiddeninventory:write
POST/inventory/discontinueinventory:write
POST/inventory/image/uploadinventory:write
POST/inventory/image/urlinventory:write
POST/inventory/categoryinventory:write
GET/suppliers/listsuppliers:read
GET/suppliers/get/<id>suppliers:read

Locations, PAR and reorder

GET/locations/listlocations:read
GET/locations/get/<id>locations:read
GET/par/listreorder:read
GET/par/get/<location_id>/<product_id>reorder:read
GET/reorder/listreorder:read
POST/reorder/supplier_levelsreorder:write

Stocktakes

GET/stocktakes/liststocktakes:read
GET/stocktakes/get/<id>stocktakes:read
GET/stocktakes/activestocktakes:read
GET/stocktakes/expected/<id>stocktakes:read
GET/stocktakes/progress/<id>stocktakes:read
GET/stocktakes/not-counted/<id>stocktakes:read
GET/stocktakes/variance/<id>stocktakes:read

Saleable items

GET/saleable/listsaleable:read

Returns the slice's saleable (warehouse bundle) list with each component inventory code resolved to description, price and quantity. Requires the saleable feature to be enabled for the account.

Purchase orders and transfers

GET/purchase_orders/listpurchase_orders:read
GET/purchase_orders/get/<id>purchase_orders:read
POST/purchase_orders/addpurchase_orders:write
POST/purchase_orders/auto_buildpurchase_orders:write
POST/purchase_orders/sendpurchase_orders:write
GET/transfers/listtransfers:read
GET/transfers/get/<id>transfers:read

Invoices

GET/invoices/listinvoices:read
GET/invoices/get/<id>invoices:read
POST/invoices/createinvoices:write

Invoice creation accepts inventory-backed lines with item_code and free-form service lines with description and unit_price. A request can mix both line types. See Create a draft invoice for the complete body and response semantics.

Current limitations

The current public API does not provide webhooks, bulk operations, payments, invoice approval or sending, invoice editing or deletion, stocktake-count writes, transfer writes, purchase-order receiving, or location PAR writes. Purchase-order creation, auto-build and sending, stock adjustments, inventory management, supplier reorder levels and saleable reads are available. Use the polling and reconciliation guide for current integration patterns.

This reference was reviewed on 19 October 2026. See the API changelog for documented changes.

Ready when you are

Build it against
a real account.

Build with the API