Flavours API

Changelog

Version history for the Flavours API — new endpoints, request/response changes, deprecations, and breaking changes.

This page tracks every change to the Flavours API that affects how you integrate with it: new endpoints, added or renamed request fields, changed responses, new query parameters, deprecations, and breaking changes. Entries are listed newest first.

How versions work

We follow Semantic Versioning: MAJOR.MINOR.PATCH.

  • PATCH (e.g. 2.1.02.1.1) — bug fixes, no contract changes. Safe to upgrade.
  • MINOR (e.g. 2.1.02.2.0) — new, backward-compatible features. Safe to upgrade.
  • MAJOR (e.g. 2.x3.0.0) — may include breaking changes. Review before upgrading.

Breaking changes are also called out inline with a ⚠ Breaking marker.

How to select a version

The API serves the contract that matches the X-API-Version request header (default 2.0.0). Every change below applies only to clients that send that version or higher — a client pinned to an older version keeps the old behavior, so you can upgrade field-by-field on your own schedule.

2.3.0 — 2026-06-29

Minor release · contains breaking changes

⚠ Breaking change

Several response fields were renamed and logo_img on payment-method creation now expects a hosted URL instead of an uploaded file. These changes apply only to clients sending X-API-Version: 2.3.0 or higher — clients pinned to an earlier version keep the old field names and upload behavior, so existing integrations are unaffected until they opt in.

Changed

  • Category reference renamed product_category_idcategory_id on every response carrying a category reference: the product object, order line items, product/category sort entries, kitchen categories, and sector categories.

      {
        "id": "…",
    -   "product_category_id": 12,
    +   "category_id": 12
      }
  • Product object — preparation_timeduration.

      {
        "id": "…",
        "name": "Flat White",
    -   "preparation_time": 5
    +   "duration": 5
      }
  • Modifier reference renamed product_modifier_idmodifier_id on the product price and product ingredient objects.

      {
        "id": "…",
    -   "product_modifier_id": 34,
    +   "modifier_id": 34
      }
  • Kitchen reference renamed kitchen_group_idkitchen_id on the kitchen category and printer-kitchen objects.

      {
        "id": "…",
    -   "kitchen_group_id": 7,
    +   "kitchen_id": 7
      }
  • ⚠ Breaking POST /api/v2/payment-methodslogo_img now expects a URL string instead of a file upload. Upload the logo to your storage first, then send its URL. Clients below 2.3.0 keep uploading the image file as multipart form data.

    - // multipart/form-data
    - logo_img: <binary image file>            // required|image|max:1024
    + // application/json
    + "logo_img": "https://cdn.example.com/logos/apple-pay.png"   // required|string|url

2.2.0 — 2026-06-15

Minor release · contains breaking changes

⚠ Breaking change

The dashboard and report endpoints changed their response shape: flat, prefixed keys were replaced by nested objects. Clients that read these responses must update their parsing when adopting 2.2.0. Clients pinned below 2.2.0 continue to receive the flat structure.

Changed

  • Dashboard endpoints (GET /api/v2/dashboards, GET /api/v2/dashboard/{admin,merchant,subscriber}) — flat keys consolidated into nested objects. interval_* keys become a nested interval object, and the payload sections were renamed to chart, stats, orders, products, ingredients.

      {
    -   "interval_past_start_at": 1717200000000,
    -   "interval_past_end_at":   1717286400000,
    -   "interval_live_start_at": 1718064000000,
    -   "interval_live_end_at":   1718150400000,
    -   "chart_revenues":     [ … ],
    -   "overview_totals":    { … },
    -   "totals_by_status":   { … },
    -   "totals_by_type":     { … },
    -   "recent_orders":      [ … ],
    -   "featured_products":  [ … ],
    -   "out_of_stock_items": [ … ]
    +   "interval": {
    +     "past": { "min": 1717200000000, "max": 1717286400000 },
    +     "live": { "min": 1718064000000, "max": 1718150400000 }
    +   },
    +   "chart":       [ … ],
    +   "stats":       { … },
    +   "orders":      [ … ],
    +   "products":    [ … ],
    +   "ingredients": [ … ]
      }
  • Order statistics (the stats block of the dashboard) — flat prev_* / curr_* / percent_* keys replaced by nested past, live, and percent objects, each keyed by count, total, tax, cost, cost_unit, profit. The per-type and per-status breakdowns moved under types and statuses, and their inner keys dropped the _total suffix (e.g. overall_totaloverall, success_totalsuccess).

      {
    -   "prev_total_orders": 120,
    -   "prev_total_sales":  "4500.00",
    -   "curr_total_orders": 150,
    -   "curr_total_sales":  "5200.00",
    -   "percent_total_orders": 25.0
    +   "past":    { "count": 120, "total": "4500.00", "tax": "…", "cost": "…", "cost_unit": "…", "profit": "…" },
    +   "live":    { "count": 150, "total": "5200.00", "tax": "…", "cost": "…", "cost_unit": "…", "profit": "…" },
    +   "percent": { "count": 25.0, "total": 15.6, "tax": "…", "cost": "…", "cost_unit": "…", "profit": "…" }
      }
  • GET /api/v2/reports/overview — response restructured. The created_at_min / created_at_max keys move into a nested interval object (min / max), monetary values are now returned as raw numeric strings instead of money()-formatted strings, the discount and subtotal keys were removed, a new cost_unit key was added (item cost before tax), and cost now means item cost including tax.

      {
    -   "created_at_min": 1717200000000,
    -   "created_at_max": 1718150400000,
        "count": 150,
    -   "discount": "120.00",
    -   "subtotal": "5000.00",
    -   "payment":  "30.00",
    -   "profit":   "3800.00",
    -   "total":    "5200.00",
    -   "cost":     "1200.00",
    -   "tax":      "200.00"
    +   "interval": { "min": 1717200000000, "max": 1718150400000 },
    +   "payment":   "30.00",
    +   "profit":    "3800.00",
    +   "total":     "5200.00",
    +   "cost_unit": "1200.00",
    +   "cost":      "1400.00",
    +   "tax":       "200.00"
      }
  • Attendance report — the flat total_* summary keys were replaced by the full report object, which now exposes payment_stats and product_stats as arrays. Legacy keys such as total_order, total_revenue, total_payment_fees, total_tax, total_discount, total_cost_item, total_cost, total_profit, total_dining_order, total_dining_revenue, total_take_away_order, total_take_away_revenue, order_start_at, and order_close_at are no longer returned for 2.2.0+ clients.

Fixed

  • Product ingredient — ingredient_id now returns the real ingredient id. Before 2.2.0 this field was always 1; it now reflects the actual related ingredient and is typed as a string.

      {
        "id": "…",
    -   "ingredient_id": 1
    +   "ingredient_id": "9f1c…-uuid"
      }

2.1.0 — 2026-04-30

Minor release · contains breaking changes

⚠ Breaking change

Time and billing fields on several objects were renamed, and the Renewal endpoints now require X-API-Version: 2.1.0 or higher. Clients pinned below 2.1.0 keep the old field names; the Renewal endpoints reject them with 426 Upgrade Required.

Added

  • Ingredient object — cost is now returned. It was hidden for clients below 2.1.0.

      {
        "id": "…",
        "name": "Espresso Beans",
    +   "cost": "0.85"
      }

Changed

  • Attendance object — closing-time fields renamed:

      {
    -   "end_at": 1717286400000,
    -   "end_cash": "150.00",
    -   "end_schedule_at": 1717286400000
    +   "close_at": 1717286400000,
    +   "close_cash": "150.00",
    +   "close_schedule_at": 1717286400000
      }
  • Market setting objectbalance renamed to credit (now a raw decimal rather than a money()-formatted string), the subscription keys were renamed, and country_code is no longer returned (use the related country instead):

      {
    -   "balance": "1,200.00",
    -   "subscription_key": "PRO",
    -   "plan_option_key": "MONTHLY",
    -   "subscription_option_key": "MONTHLY",
    -   "country_code": "SA"
    +   "credit": "1200.0000",
    +   "plan_key": "PRO",
    +   "cycle_key": "MONTHLY"
      }
  • Renewal branch objectend_at renamed to close_at, and the same subscription-key renames as the market setting object (subscription_keyplan_key, plan_option_key / subscription_option_keycycle_key).

  • Plan reconciliation queries (branch, branch-setting, and market plan data) — the aggregated end_at column was renamed to close_at in the response rows.

  • Order tax objecttaxable_id changed type from integer to string.

      {
    -   "taxable_id": 42
    +   "taxable_id": "42"
      }

Removed

  • ⚠ Breaking Renewal endpoints no longer support clients below 2.1.0. POST/PUT create, update, custom, preview, and calculate routes under the Renewal API now return 426 Upgrade Required for X-API-Version < 2.1.0.

2.0.0 — Initial release

Baseline of the Flavours v2 API. Every entry above describes changes relative to this version. Requests that omit the X-API-Version header are served the 2.0.0 contract.

On this page