# Real Backend Surface (from Postman 2026-04-29)

> **Document type:** generated artifact from the 2026-04-29 Postman snapshot.
> **Verified 2026-05-02:** the source file (`uploads/DALSEEN.postman_collection-e8eff482.json`) and its companion `DALSEEN.postman_environment-7e4cb151.json` are both still in `uploads/`. This list is **frozen at the 2026-04-29 snapshot date** — for the current authoritative backend surface, see `docs/openapi/openapi.yaml` (15k+ lines, generated from `routes/api.php`). When this doc and OpenAPI disagree, **OpenAPI wins**.
> **Status:** kept as the historical "what we knew on 2026-04-29" reference and as the trigger for the R-SWEEP reconciliation pass.

Generated from `uploads/DALSEEN.postman_collection-e8eff482.json`. This is the **single source of truth** for what the backend actually exposes — anything not on this list is **not implemented** yet, regardless of what mocks or prototype screens assume.

## 01 — Auth & Identity

- `POST   /auth/login` — Login (tenant)
- `POST   /auth/mfa` — MFA verify
- `POST   /auth/logout` — Logout
- `GET    /me` — Me
- `PATCH  /me` — Update profile
- `POST   /me/password` — Change password
- `POST   /me/mfa` — Enable MFA
- `GET    /me/branches` — My branches
- `GET    /me/modules` — My modules
- `GET    /me/setup-progress` — Setup progress
- `POST   /platform/auth/login` — Platform: login

## 02 — Tenancy & Onboarding

- `POST   /signup` — Public signup
- `GET    /platform/signups?status=submitted` — Platform: signups queue
- `GET    /platform/signups/{id}` — Platform: signup workbench
- `POST   /platform/signups/{id}/{step}` — Platform: KYC step
- `POST   /platform/tenants/provision` — Platform: provision tenant
- `POST   /setup/kyc` — Tenant: KYC submit
- `PATCH  /companies/{id}` — Update company profile
- `POST   /branches` — Create first branch
- `POST   /accounting/coa/seed` — Seed COA
- `POST   /accounting/opening-balances` — Opening balances
- `POST   /users/invite` — Invite users

## 03 — Catalog

- `GET    /catalog/categories?parent_id=null` — List categories
- `POST   /catalog/categories` — Create category
- `PATCH  /catalog/categories/{id}` — Update category
- `DELETE /catalog/categories/{id}` — Delete category
- `GET    /catalog/brands` — List brands
- `POST   /catalog/brands` — Create brand
- `GET    /catalog/attributes` — List attributes
- `POST   /catalog/attributes` — Create attribute
- `GET    /catalog/search?q=latte&category_id=5&page=1` — Search products
- `POST   /products` — Create product
- `PATCH  /products/{id}` — Update product
- `POST   /products/{id}/variants/generate` — Generate variant matrix
- `GET    /pricing/price-lists` — List price lists
- `POST   /pricing/price-lists` — Create price list
- `POST   /pricing/resolve` — Resolve price
- `PATCH  /catalog/categories` — Bulk update categories
- `DELETE /catalog/categories?ids=4,7,11&mode=archive` — Bulk delete / archive categories

## 04 — Inventory

- `GET    /stock-levels?branch_id=1&product_id=101` — Stock levels
- `GET    /stock-movements?product_id=101&from=2026-04-01&to=2026-04-30` — Stock movements
- `POST   /grn` — Goods Receipt (GRN) — strict always
- `GET    /purchase-orders?status=open` — List POs
- `POST   /purchase-orders` — Create PO
- `PATCH  /purchase-orders/{id}` — Update PO
- `POST   /transfers` — Stock transfer
- `POST   /stock-counts` — Stock count (full)
- `POST   /spot-counts` — Spot count
- `POST   /quick-receives` — Quick-receive (frictionless only)
- `POST   /synthetic-grns` — Synthetic GRN
- `POST   /stock-adjustments` — Stock adjustment
- `POST   /wastage` — Wastage
- `GET    /frictionless-events?status=open` — Frictionless events
- `POST   /reconciliation/{id}/resolve` — Reconcile event
- `GET    /recipe-drift` — Recipe drift list
- `POST   /recipe-drift` — Recipe drift submit
- `GET    /cost-layers?product_id=101` — Cost layers

## 05 — Sales / POS

- `POST   /sales` — Capture sale
- `POST   /carts` — Hold cart
- `PATCH  /carts/{id}` — Resume cart
- `POST   /sales/{id}/void` — Void sale
- `GET    /sales/{id}/receipt?format=html` — Receipt
- `POST   /sales/{id}/share` — Share receipt
- `GET    /tenders` — List tenders
- `POST   /shifts/open` — Open shift
- `POST   /shifts/close` — Close shift

## 06 — Returns / RMA

- `POST   /rma` — Open RMA
- `POST   /rma/{id}/approve` — Approve RMA
- `POST   /rma/{id}/receive` — Receive RMA
- `POST   /rma/{id}/inspect` — Inspect RMA
- `POST   /rma/{id}/refund` — Refund RMA
- `POST   /rma/{id}/reject` — Reject RMA

## 07 — Customers, Loyalty, Gift Cards

- `GET    /customers?q=ali` — List customers
- `POST   /customers` — Create customer
- `PATCH  /customers/{id}` — Update customer
- `POST   /loyalty/redeem` — Loyalty redeem
- `POST   /loyalty/breakage` — Loyalty breakage (admin/job)
- `POST   /gift-cards` — Issue gift card
- `POST   /gift-cards/{code}/redeem` — Redeem gift card
- `GET    /customers/credit-holds` — B2B credit holds queue

## 08 — Suppliers & Purchasing

- `GET    /suppliers` — List suppliers
- `POST   /suppliers` — Create supplier
- `POST   /supplier-invoices` — Supplier invoice
- `POST   /supplier-payments` — Supplier payment
- `POST   /debit-notes` — Debit note

## 09 — Promotions

- `GET    /promotions?status=active` — List promotions
- `POST   /promotions` — Create promotion
- `PATCH  /promotions/{id}` — Update promotion

## 10 — E-com & Marketplaces

- `POST   /ecom/orders` — Place e-com order
- `POST   /ecom/orders/{id}/fulfill` — Fulfill e-com order
- `POST   /ecom/orders/{id}/return` — Return e-com order
- `POST   /marketplaces/{partner}/sync` — Sync marketplace catalog
- `POST   /webhooks/marketplaces/{partner}` — Marketplace order webhook

## 11 — Dine / Orders & KDS

- `POST   /orders` — Open order
- `POST   /orders/{id}/items` — Add item
- `PATCH  /order-items/{id}` — Modify item
- `POST   /order-items/{id}/void` — Void item (manager PIN)
- `POST   /orders/{id}/fire` — Fire order
- `POST   /kds/items/{id}/{action}` — KDS transition
- `POST   /orders/{id}/serve` — Serve order
- `POST   /orders/{id}/close` — Close order (creates Sale)
- `POST   /orders/{id}/cancel` — Cancel order

## 12 — Dine / Tables & Reservations

- `GET    /tables?branch_id=1` — List tables
- `POST   /tables` — Create table
- `POST   /tables/{id}/seat` — Seat party
- `POST   /tables/{id}/move` — Move party
- `GET    /reservations?date=2026-04-26` — List reservations
- `POST   /reservations` — Create reservation
- `POST   /waitlist` — Add to waitlist
- `GET    /qr/{token}/menu` — Public QR — get menu
- `POST   /qr/{token}/orders` — Public QR — place order

## 13 — Dine / Menus, Modifiers, Combos

- `GET    /menus` — List menus
- `POST   /menus` — Create menu
- `GET    /modifier-groups` — List modifier groups
- `POST   /modifier-groups` — Create modifier group
- `GET    /combos` — List combos
- `POST   /combos` — Create combo
- `POST   /menu-items/bulk-availability` — Bulk-update item availability (86)

## 14 — Dine / Recipes & Production

- `GET    /recipes` — List recipes
- `POST   /recipes` — Create recipe
- `PATCH  /recipes/{id}` — Update recipe (creates new version)
- `POST   /production-orders` — Production order

## 15 — Dine / Delivery & Aggregators

- `GET    /delivery/queue` — Delivery queue
- `POST   /delivery/assign` — Assign courier
- `POST   /delivery/stack` — Stack run
- `POST   /delivery/{id}/pod` — Capture POD
- `POST   /delivery/{id}/handoff` — Driver handoff
- `GET    /aggregator/inbox?status=pending` — Aggregator inbox
- `POST   /aggregator/{id}/accept` — Accept aggregator order
- `POST   /aggregator/{id}/reject` — Reject aggregator order
- `POST   /webhooks/aggregator/{partner}` — Aggregator webhook
- `POST   /couriers/{id}/close-shift` — Close rider shift

## 16 — Pay (PSP)

- `POST   /pay/transactions` — Record direct SoftPOS txn
- `POST   /pay/partner/transactions` — Record partner-pushed txn (HMAC)
- `POST   /pay/transactions/{id}/refund` — Refund (record-only)
- `GET    /pay/settlements?from=2026-04-01&to=2026-04-30` — Tenant settlements (read-only)
- `POST   /webhooks/acquirers/{id}/chargebacks` — Chargeback inbound
- `POST   /pay/terminals` — Issue terminal
- `POST   /pay/softpos-devices` — Issue SoftPOS device
- `PUT    /merchants/{id}/mdr` — Set MDR schedule
- `POST   /pay/partners/{id}/keys` — Issue partner sandbox keys
- `POST   /pay/charge` — Charge (active capture)
- `POST   /pay/disputes` — Open dispute (merchant-initiated)
- `POST   /pay/payouts` — Manual / out-of-cycle payout
- `GET    /pay/settlements/{id}/lines?page=1&per_page=50` — Settlement lines (drill-down)
- `GET    /pay/transactions?from=2026-04-01&to=2026-04-30&merchant_id=&scheme=&status=` — List transactions

## 17 — Accounting (Books, COA, Journal, GL, VAT, Banking)


## 17.1 — Chart of Accounts

- `GET    /accounting/coa?format=flat&include_archived=false` — List CoA — flat
- `GET    /accounting/coa?format=tree` — List CoA — tree
- `GET    /accounting/coa/{code}` — Get account
- `POST   /accounting/coa` — Create account (leaf)
- `POST   /accounting/coa` — Create account (parent / rollup)
- `PATCH  /accounting/coa/{code}` — Update account
- `POST   /accounting/coa/{code}/reparent` — Re-parent account
- `POST   /accounting/coa/{code}/archive` — Archive account
- `POST   /accounting/coa/{code}/unarchive` — Unarchive account
- `POST   /accounting/coa/{code}/merge` — Merge account into another
- `DELETE /accounting/coa/{code}` — Delete account (hard)
- `POST   /accounting/coa/bulk` — Bulk activity (CSV-style)
- `GET    /accounting/coa/templates` — List CoA templates
- `GET    /accounting/coa/templates/{code}` — Preview template
- `POST   /accounting/coa/seed` — Seed CoA from template
- `GET    /accounting/coa/export?format=xlsx&include_balances=true` — Export CoA (CSV/XLSX)
- `POST   /accounting/coa/import` — Import CoA (CSV/XLSX)
- `GET    /accounting/coa/validate` — CoA validation report
- `POST   /accounting/coa/recompute` — Recompute parent rollups

## 17.2 — Fiscal calendar & periods

- `GET    /accounting/fiscal-calendar` — Get fiscal calendar
- `PATCH  /accounting/fiscal-calendar` — Update fiscal calendar
- `GET    /accounting/periods?fy=2026` — List periods
- `GET    /accounting/periods/{key}/checks` — Period readiness check
- `POST   /accounting/periods/{key}/close` — Close period
- `POST   /accounting/periods/{key}/reopen` — Reopen period
- `POST   /accounting/year-end/close` — Year-end close (rollover)

## 17.3 — Opening balances

- `GET    /accounting/opening-balances?as_of=2026-01-01` — Get opening balances
- `POST   /accounting/opening-balances` — Set/replace opening balances
- `POST   /accounting/opening-balances/import` — Import trial balance (XLSX)

## 17.4 — Tax · VAT · ZATCA

- `GET    /accounting/vat-codes` — List VAT codes
- `POST   /accounting/vat-codes` — Create VAT code
- `GET    /accounting/vat?period=2026-Q2` — Get VAT view
- `POST   /accounting/vat/file` — File VAT return (ZATCA)
- `GET    /accounting/zatca/invoices/{sale_id}` — ZATCA invoice clearance status
- `GET    /accounting/zatca/queue?status=pending` — ZATCA submission queue (B2B)

## 17.5 — Customers & AR

- `GET    /accounting/customers?q=ali&has_balance=true` — List customers (accounting)
- `GET    /accounting/customers/{id}/ledger?from=2026-04-01&to=2026-04-30` — Customer ledger
- `GET    /accounting/customers/{id}/statement?as_of=2026-04-30&format=pdf` — Customer statement (PDF)
- `GET    /accounting/ar/aging?as_of=2026-04-30` — AR aging report
- `POST   /accounting/receipts` — Receive customer payment (Collect)
- `POST   /accounting/credit-notes` — Customer credit note
- `POST   /accounting/customers/{id}/write-off` — Apply credit / write-off

## 17.6 — Vendors & AP

- `GET    /accounting/vendors?q=almarai` — List vendors (accounting)
- `GET    /accounting/vendors/{id}/ledger?from=2026-04-01&to=2026-04-30` — Vendor ledger
- `GET    /accounting/ap/aging?as_of=2026-04-30` — AP aging report
- `POST   /accounting/payments` — Pay vendor (Pay)
- `POST   /accounting/vendor-debit-notes` — Debit note (vendor)

## 17.7 — Journal & GL

- `GET    /accounting/journal-entries?from=2026-04-01&to=2026-04-30&kind=all` — List journal entries
- `GET    /accounting/journal-entries/{id}` — Get journal entry
- `POST   /accounting/journal-entries` — Manual journal entry (post)
- `POST   /accounting/journal-entries/{id}/reverse` — Reverse journal entry
- `POST   /accounting/journal-entries/{id}/adjust` — Adjust journal entry (manager-only)
- `GET    /accounting/gl?account_code=1101&from=2026-04-01&to=2026-04-30&dimensions[branch_id]=1` — GL — single account
- `GET    /accounting/gl/export?from=2026-04-01&to=2026-04-30&format=xlsx` — GL — bulk export
- `GET    /accounting/recurring-je` — Recurring JE list
- `POST   /accounting/recurring-je` — Create recurring JE
- `POST   /journal-entries` — Manual journal entry (root alias)

## 17.8 — Vouchers (CR / CP / JV)

- `GET    /accounting/voucher-types` — List voucher types
- `POST   /accounting/vouchers/cr` — Create cash receipt (CR)
- `POST   /accounting/vouchers/cp` — Create cash payment (CP)

## 17.9 — Banking

- `GET    /accounting/bank-accounts` — List bank accounts
- `POST   /accounting/bank-accounts` — Create bank account
- `POST   /accounting/bank/{id}/statements/import` — Import bank statement
- `GET    /accounting/bank/statements/{id}/lines?status=unmatched` — List statement lines
- `GET    /accounting/bank/statements/{id}/suggestions` — Auto-match suggestions
- `POST   /accounting/bank/lines/{id}/match` — Match statement line → JE
- `POST   /accounting/bank/lines/{id}/unmatch` — Unmatch
- `POST   /bank/reconcile` — Bank reconcile (close batch)

## 17.10 — Dimensions (cost centers, projects)

- `GET    /accounting/dimensions` — List dimension types
- `GET    /accounting/dimensions/{code}/values` — List dimension values
- `POST   /accounting/dimensions/{code}/values` — Create dimension value
- `PATCH  /accounting/dimensions/{code}` — Update dimension settings

## 17.11 — Financial reports

- `GET    /accounting/reports/trial-balance?as_of=2026-04-30` — Trial balance
- `GET    /accounting/reports/pl?from=2026-04-01&to=2026-04-30&dimensions[branch_id]=1` — P&L
- `GET    /accounting/reports/bs?as_of=2026-04-30` — Balance Sheet
- `GET    /accounting/reports/cashflow?period=2026-04&method=indirect` — Cashflow statement
- `GET    /accounting/reports/equity?from=2026-01-01&to=2026-04-30` — Statement of changes in equity
- `GET    /accounting/reports/drill?account_code=4000&from=2026-04-01&to=2026-04-30` — Account drill-down

## 17.12 — Settings & integrations

- `GET    /accounting/settings` — Get accounting settings
- `PATCH  /accounting/settings` — Update accounting settings
- `GET    /accounting/currencies` — List currencies
- `GET    /accounting/fx-rates?from=2026-04-01&to=2026-04-30&pair=USD/SAR` — FX rates
- `POST   /accounting/fx-rates` — Set FX rate (manual)
- `GET    /accounting/posting-bridges` — Posting bridges status

## 17.13 — Audit trail

- `GET    /accounting/audit?entity=journal_entry&from=2026-04-01` — List audit events
- `GET    /accounting/audit/{entity}/{id}` — Audit on a single entity

## 18 — HR

- `GET    /hr/employees` — List employees
- `POST   /hr/employees` — Create employee
- `GET    /hr/jobs` — List jobs (ATS)
- `GET    /hr/candidates?job_id=1` — Candidates
- `POST   /hr/contracts` — Create contract
- `GET    /hr/policies` — Policies
- `GET    /hr/reviews` — Reviews
- `GET    /hr/goals` — Goals
- `GET    /hr/1-1s` — 1-on-1s
- `GET    /hr/courses` — Courses
- `POST   /hr/enrollments` — Enrollments
- `POST   /hr/loans` — Loans
- `POST   /hr/expenses` — Expenses
- `POST   /hr/tickets` — Helpdesk tickets
- `GET    /hr/assets` — Assets
- `POST   /hr/payroll/runs` — Payroll run
- `GET    /me/ess` — ESS

## 19 — Platform & Billing

- `GET    /platform/tenants?status=active` — Tenants list
- `GET    /platform/tenants/{id}` — Tenant drawer
- `POST   /platform/tenants/{id}/suspend` — Suspend tenant
- `POST   /platform/tenants/{id}/reactivate` — Reactivate tenant
- `POST   /platform/tenants/{id}/impersonate` — Impersonate
- `GET    /plans` — List plans
- `POST   /platform/tenants/{id}/quote` — Quote subscription change
- `POST   /platform/tenants/{id}/subscription` — Apply subscription change
- `POST   /me/invoices/{id}/pay` — Pay platform invoice (tenant side)
- `GET    /support/tickets` — Support tickets
- `POST   /support/tickets` — Create support ticket
- `GET    /platform/health` — Health overview
- `POST   /platform/incidents/{id}/{action}` — Incident transition
- `POST   /platform/releases/{id}/promote` — Promote release
- `POST   /platform/releases/{id}/rollback` — Rollback release
- `GET    /feature-flags` — Feature flags
- `PATCH  /feature-flags/{key}` — Update feature flag

## 20 — Reports

- `GET    /reports/sales/daily?from=2026-04-01&to=2026-04-30` — Sales — daily
- `GET    /reports/sales/by-channel?period=2026-04` — Sales — by channel
- `GET    /reports/sales/by-staff?period=2026-04` — Sales — by staff
- `GET    /reports/sales/weekly?from=2026-01-01&to=2026-04-30` — Sales — weekly
- `GET    /reports/sales/monthly?from=2026-01&to=2026-04` — Sales — monthly
- `GET    /reports/sales/by-product?period=2026-04&limit=100` — Sales — by product
- `GET    /reports/sales/by-category?period=2026-04` — Sales — by category
- `GET    /reports/sales/by-branch?period=2026-04` — Sales — by branch
- `GET    /reports/sales/by-hour?period=2026-04&branch_id=1` — Sales — by hour (heatmap)
- `GET    /reports/sales/discounts?period=2026-04` — Sales — discounts
- `GET    /reports/sales/voids-returns?period=2026-04` — Sales — voids & returns
- `GET    /reports/sales/tenders?period=2026-04` — Sales — tender mix
- `GET    /reports/inventory/turns?period=2026-04` — Inventory — turns
- `GET    /reports/inventory/aging` — Inventory — aging
- `GET    /reports/inventory/wastage?period=2026-04` — Inventory — wastage
- `GET    /reports/inventory/zero-friction-health` — Inventory — ZF health
- `GET    /reports/inventory/stock-on-hand?branch_id=1&as_of=2026-04-30` — Inventory — stock on hand
- `GET    /reports/inventory/valuation?as_of=2026-04-30&method=weighted_avg` — Inventory — valuation
- `GET    /reports/inventory/low-stock?branch_id=1` — Inventory — low stock & reorder
- `GET    /reports/inventory/cycle-count-accuracy?period=2026-04` — Inventory — cycle count accuracy
- `GET    /reports/inventory/lot-expiry?within_days=30` — Inventory — lot expiry
- `GET    /reports/customers/cohorts` — Customers — cohorts
- `GET    /reports/customers/loyalty` — Customers — loyalty
- `GET    /reports/customers/top?period=2026-04&limit=50` — Customers — top customers
- `GET    /reports/customers/rfm` — Customers — RFM segmentation
- `GET    /reports/staff/productivity?period=2026-04` — Staff — productivity
- `GET    /reports/staff/attendance?period=2026-04` — Staff — attendance
- `GET    /reports/staff/tips?period=2026-04&branch_id=1` — Staff — tips
- `GET    /reports/staff/commission?period=2026-04` — Staff — commission
- `GET    /reports/staff/saudization` — Staff — Saudization (Nitaqat band)
- `GET    /reports/branches/pnl?period=2026-04` — Branches — P&L
- `GET    /reports/branches/comparison?period=2026-04&metric=net` — Branches — comparison
- `GET    /reports/branches/health-scorecard?period=2026-04` — Branches — health scorecard
- `GET    /reports/finance/pl?period=2026-04` — Finance — P&L
- `GET    /reports/finance/bs?as_of=2026-04-30` — Finance — Balance Sheet
- `GET    /reports/finance/cashflow?period=2026-04` — Finance — Cashflow
- `GET    /reports/finance/vat-summary?period=2026-04&basis=accrual` — Finance — VAT summary
- `GET    /reports/finance/vat-detail?period=2026-04&vat_code=STD` — Finance — VAT detail
- `GET    /reports/finance/trial-balance?as_of=2026-04-30&include_archived=false` — Finance — trial balance
- `GET    /reports/finance/ar-aging?as_of=2026-04-30` — Finance — AR aging
- `GET    /reports/finance/ap-aging?as_of=2026-04-30` — Finance — AP aging
- `GET    /reports/finance/equity-changes?period=2026-04` — Finance — statement of equity changes
- `GET    /reports/menu-engineering?period=2026-04` — Menu engineering
- `GET    /reports/recipe-drift` — Recipe drift
- `GET    /reports/prep-vs-actual?period=2026-04&branch_id=1` — Prep vs actual (F&B)
- `GET    /reports/kds-times?period=2026-04&branch_id=1` — KDS times (F&B)
- `GET    /reports/pay/mdr-by-scheme?period=2026-04` — Pay — MDR by scheme
- `GET    /reports/pay/acquirer-mix?period=2026-04` — Pay — acquirer mix
- `GET    /reports/pay/chargeback-rate?period=2026-04` — Pay — chargeback rate
- `GET    /reports/pay/auth-decline-rate?period=2026-04` — Pay — auth & decline rate
