The buy plan's grid, by category and month
One buy plan's grid: the planned figure for every category and month of the fiscal year, with actuals filled in for months that have closed. metric=revenue reads the sales plan and metric=margin the margin plan.
view decides which plan is read: working is the planner's tip, live is the published version in force, and a version id reads that frozen version. A variance you want to reproduce next quarter is read against a version id, not against live, because live moves when the plan is published again.
A month still open carries a null actual rather than a partial one, and a category nobody has planned carries a null figure rather than a zero. Narrow with filter_args on category and sales_channel_id.
Scope: planning:read.
Request
- Base URL: https://api.app.tightly.io
- URL: https://api.app.tightly.io/api/v1/mfp/{mfp_id}/table
- Auth: HTTP bearer
Path parameters
The plan to read. It is the mfp_id a plan carries everywhere on this rail, and the same one get_otb_rollup takes. The two read one plan and cannot disagree about it.
Query parameters
URL-encoded JSON array of filters with keys category and sales_channel_id (operation eq/in), e.g. [{"key":"category","operation":"in","value":["Knitwear"]}]. Omit for all categories (as rows) and all channels (aggregated).
Value to render in each cell. Defaults to revenue.
Which version to read: "working" (default), "live", or a version_id. The rows and totals reflect that view; actuals are unchanged. The response echoes the active view.
Headers
The date train to answer on. One train exists today, 2026-11, the one this reference describes and the one every key is minted on, so the call answers on it with or without this header. Send it anyway, so a client built now names its train from the start.
Response
The plan's grid: one row per category, one column per month of the fiscal year, planned figures throughout and actuals only for months that have closed. months[].is_completed says which those are, and an in-progress month's actual is null rather than a part-month figure, "the month is not over" and "we are behind" are different readings and only one of them is actionable. view echoes the version actually read.
Changes
No recorded changes to this operation across all 1 revision of this API.