Reference / API v1

BSimple API Documentation — Endpoints, Authentication 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 and quantities, or add inventory items
suppliers:readRead suppliers
locations:readRead inventory locations
reorder:readRead reorder recommendations and PAR data
stocktakes:readRead stocktakes, progress, expected items and variances
purchase_orders:readRead purchase orders and lines
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.

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
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

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

Purchase orders and transfers

GET/purchase_orders/listpurchase_orders:read
GET/purchase_orders/get/<id>purchase_orders:read
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, file attachments, payments, invoice approval or sending, invoice editing or deletion, stocktake-count writes, purchase-order writes, transfer writes or general stock adjustments. Use the polling and reconciliation guide for current integration patterns.

This reference was reviewed on 9 September 2026. See the API changelog for documented changes.

Ready when you are

Build it against
a real account.

Build with a free trial