PurrOSDocs

Sales

Sales has two parts. You can use either one, or both.

Feature keysalesFeature switches
NeedsNothing: works on its own
API25 endpointsAPI reference

What works today

The API covers POS transaction and summary feeds, the unmapped-items queue, customers, sales orders (reserve, ship, cancel) and invoices (PDF, pay, void). Price lists, quotes and the screens are planned. Screens described on this page arrive with the web app; until then, use the API.

  1. Sales feeds (sales.feeds): sales from your POS systems, online stores and delivery platforms come in through the API. They drive forecasting, cash, inventory usage and reports.
  2. Sales orders (sales.orders, sales.invoicing): quotes, orders, fulfilment and invoices that you manage in PurrOS itself, typically for B2B, wholesale or orders taken by phone.

Not a POS

PurrOS isn't a point-of-sale system. It receives sales from yours through an integration.

Sales feeds

An integration sends data at the level of detail your POS can provide:

LevelEndpointEnables
Daily or hourly totalsPOST /api/v1/sales-summariesDashboards, forecasting, labor % of sales
Tender totals per drawer or shiftPOST /api/v1/cash/tendersCash management
Individual transactions with itemsPOST /api/v1/sales/transactions:batchEverything above, plus inventory usage and item-level reports

Each record has a source (e.g. pos:front-counter, web-store, delivery:platform-x) and an externalId, so data can be re-sent safely and traced back to where it came from. See Data ingestion.

Mapping POS items

Items in sales feeds are matched to PurrOS items by externalId, SKU or barcode. Anything that can't be matched goes to the Unmapped items queue (sales.unmapped.resolve), where you link it once and PurrOS remembers it. Past sales are then recalculated.

Business days

Sales are grouped into each location's business day (see business day cut-off). Late data such as refunds recalculates the affected days. If the day is already closed in Cash Management, the change is flagged for review rather than silently changing closed figures.

Sales orders

  • Customers and price lists (customers.manage), with customer-specific prices and payment terms.
  • Quotes → sales orders (sales_orders.manage). Confirming an order reserves stock.
  • Online orders can be created by an integration (PUT /api/v1/sales-orders/external/{externalId}) so PurrOS handles picking and stock.
  • Fulfilment: pick lists, packing, shipping with tracking numbers. Shipping deducts stock.
  • Invoicing (sales.invoicing, invoices.issue): PDF invoices, payment status, credit notes, and export to accounting.

Reports

Sales by location, hour, channel (source), item and category, average transaction value, comparisons with last week, last year and forecast, and top and bottom items.

API & events

EndpointScope
POST /api/v1/sales/transactions:batchsales:write
POST /api/v1/sales-summariessales:write
GET /api/v1/sales/transactions, GET /api/v1/sales-summariessales:read
GET/POST /api/v1/customerssales:read / sales:write
GET/POST /api/v1/sales-orders, PUT /api/v1/sales-orders/external/{externalId}sales:read / sales:write
POST /api/v1/sales-orders/{id}:ship, :cancelsales:write
GET /api/v1/invoicessales:read

Events: sales.unmapped_item, sales_order.created, sales_order.shipped, sales_order.cancelled, invoice.issued, invoice.paid.

On this page