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.0→2.1.1) — bug fixes, no contract changes. Safe to upgrade. - MINOR (e.g.
2.1.0→2.2.0) — new, backward-compatible features. Safe to upgrade. - MAJOR (e.g.
2.x→3.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_id→category_idon 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_time→duration.{ "id": "…", "name": "Flat White", - "preparation_time": 5 + "duration": 5 } -
Modifier reference renamed
product_modifier_id→modifier_idon the product price and product ingredient objects.{ "id": "…", - "product_modifier_id": 34, + "modifier_id": 34 } -
Kitchen reference renamed
kitchen_group_id→kitchen_idon the kitchen category and printer-kitchen objects.{ "id": "…", - "kitchen_group_id": 7, + "kitchen_id": 7 } -
⚠ Breaking
POST /api/v2/payment-methods—logo_imgnow expects a URL string instead of a file upload. Upload the logo to your storage first, then send its URL. Clients below2.3.0keep 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 nestedintervalobject, and the payload sections were renamed tochart,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
statsblock of the dashboard) — flatprev_*/curr_*/percent_*keys replaced by nestedpast,live, andpercentobjects, each keyed bycount,total,tax,cost,cost_unit,profit. The per-type and per-status breakdowns moved undertypesandstatuses, and their inner keys dropped the_totalsuffix (e.g.overall_total→overall,success_total→success).{ - "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. Thecreated_at_min/created_at_maxkeys move into a nestedintervalobject (min/max), monetary values are now returned as raw numeric strings instead ofmoney()-formatted strings, thediscountandsubtotalkeys were removed, a newcost_unitkey was added (item cost before tax), andcostnow 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 exposespayment_statsandproduct_statsas arrays. Legacy keys such astotal_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, andorder_close_atare no longer returned for2.2.0+ clients.
Fixed
-
Product ingredient —
ingredient_idnow returns the real ingredient id. Before2.2.0this field was always1; 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 —
costis now returned. It was hidden for clients below2.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 object —
balancerenamed tocredit(now a raw decimal rather than amoney()-formatted string), the subscription keys were renamed, andcountry_codeis 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 object —
end_atrenamed toclose_at, and the same subscription-key renames as the market setting object (subscription_key→plan_key,plan_option_key/subscription_option_key→cycle_key). -
Plan reconciliation queries (branch, branch-setting, and market plan data) — the aggregated
end_atcolumn was renamed toclose_atin the response rows. -
Order tax object —
taxable_idchanged type from integer to string.{ - "taxable_id": 42 + "taxable_id": "42" }
Removed
- ⚠ Breaking Renewal endpoints no longer
support clients below
2.1.0.POST/PUTcreate, update, custom, preview, and calculate routes under the Renewal API now return426 Upgrade RequiredforX-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.