Axion Biz Solutions

Orders & POS

A storefront checkout creates an Order; an in-person POS checkout creates a Sale directly. An Order can also turn into one or more Sales once fulfilled — that link is exposed on the Order detail response below. Staff authentication required for everything on this page.

Orders

GET /api/v1/orders/ filters on source, order_type, status, and a date_from/date_to range.

GET /api/v1/orders/42/ — response data
{
  "id": 42,
  "order_number": "ORD-0042",
  "source": "web",
  "order_type": "delivery",
  "customer": 7,
  "staff": null,
  "branch": 1,
  "status": "processing",
  "payment_preference": "mpesa",
  "notes": "",
  "subtotal": "1450.00",
  "tax": "0.00",
  "shipping_fee": "300.00",
  "discount": "0.00",
  "total": "1750.00",
  "items": [
    {
      "id": 88,
      "product": 201,
      "product_name": "Yellow African Necklace",
      "product_sku": "BEAD-NECKLACE-001",
      "product_slug": "yellow-african-necklace",
      "quantity": 2,
      "subtotal": "1450.00"
    }
  ],
  "fulfillment": { "type": "delivery", "status": "in_transit", "carrier": "third_party" },
  "is_sale": false,
  "sales": [],
  "created_at": "2026-07-20T09:00:00Z",
  "updated_at": "2026-07-20T10:15:00Z"
}

fulfillment.type is "walk_in" when no logistics shipment exists for the order, otherwise "delivery" with the shipment's own status.

Sales (POS)

GET /api/v1/sales/ filters on source, sale_category, payment_status, credit_status, has_refund, and the same date_from/date_to range as Orders. Each sale is made of line items (SaleItem), payments, and optional refunds.

/api/v1/sales/POS/web sales — receipt_number, invoice_number, items, payments, refunds.
/api/v1/pos/sessions/A cashier's till session — opening float through closing count.
/api/v1/pos/transactions/Individual tender events (cash/card/M-Pesa) against a sale, tied to a session.
/api/v1/pos/lookup/Barcode → product lookup for a POS register.

GET only, not a router resource.