Skip to content

Reports ​

3 reads, no writes, on train 2026-11. Scopes: reports:read.

OperationMethodScopePath
Cash from the buyGETreports:read/api/v1/finance/reports/cash-from-the-buy
The fiscal year week by weekGETreports:read/api/v1/finance/reports/open-to-buy
The Monday pack for one 4-5-4 retail weekGETreports:read/api/v1/finance/reports/weekly-trade

Cash from the buy ​

GET /api/v1/finance/reports/cash-from-the-buy

Scopes: reports:read

A year of retail weeks with the buy on each supplier's terms: what settles in, what a retailer has committed, what leaves the bank, what the plan of record still implies, and the balance and headroom walked against the declared cash floor. Four bands: the weeks, the suppliers with their terms and where those terms came from, the plan's own money, and the levers.

OptionalInWhat it is
as_ofqueryThe day the ladder stands on, written 2026-11-08.
Tightly-VersionheaderThe date train to answer on.
bash
curl "https://api.app.tightly.io/api/v1/finance/reports/cash-from-the-buy" \
  -H "Authorization: Bearer $TIGHTLY_API_KEY"

What it answers

json
{
  "data": {
    "as_of": "2026-11-08T06:05:00+00:00",
    "basis_line": "Merchandise cash · terms clock · retail week",
    "coverage": {
      "not_measured": [
        "The order book was not read, so no week carries a retailer's committed cash."
      ],
      "weeks_not_on_file": [
        "FY26-W37"
      ]
    },
    "head": [
      {
        "against": [
          {
            "figure": {
              "basis": "cash",
              "cents": 25000000,
              "reason": null,
              "usd": 250000
            },
            "key": "floor",
            "label": "Declared floor"
          }
        ],
        "figure": {
          "basis": "cash",
          "cents": -20000000,
          "reason": null,
          "usd": -200000
        },
        "foots_to": {
          "column": "headroom",
          "row": "FY26-W39",
          "section": "weeks"
        },
        "key": "tightest",
        "label": "Cash at the tightest week"
      }
      …
    ]
  }
}

What it refuses

  • 400 The day could not be read
  • 401 key_invalid: "The API key is not valid." No usable key: malformed, unknown, revoked, expired or stopped. One refusal covers all five, telling a caller which is which maps the surface for them. A request with no Authorization header at all is refused 400 before any key is looked for.
  • 403 plan_excludes: "This organisation's plan does not include Commitments. It is sold with Pro." The key may not reach this operation. plan_excludes when Reports is sold with Pro and this organisation's plan does not include it; scope_missing when the key does not hold Reports; organization_mismatch when the path names an organisation that is not the key's; ip_not_allowed when the caller's address is outside the key's allowlist.
  • 429

Try it in the reference

The fiscal year week by week ​

GET /api/v1/finance/reports/open-to-buy

Scopes: reports:read

The fiscal year week by week against the plan and the envelope, as one read. Three bands: every 4-5-4 week of the year with what sold, what was placed, what arrived and the same week last year, footed by a total row; the plan of record's budget and forecast lines at cost by the Gregorian month they were written for; and the buying envelope behind both.

RequiredInWhat it is
fiscal_yearqueryThe fiscal year the plan is labelled by, four digits.
OptionalInWhat it is
Tightly-VersionheaderThe date train to answer on.
bash
curl "https://api.app.tightly.io/api/v1/finance/reports/open-to-buy?fiscal_year=<fiscal_year>" \
  -H "Authorization: Bearer $TIGHTLY_API_KEY"

What it answers

json
{
  "data": {
    "as_of": "2026-09-05T06:10:02Z",
    "basis_line": "Cost · 4-5-4 retail week · organisation calendar",
    "calendar_note": "The weeks are 4-5-4 and the plan is by Gregorian month; neither is spread into the other.",
    "coverage": {
      "commitments_read": 4,
      "reason": null
    },
    "head": [
      {
        "against": {
          "plan": 3480000
        },
        "figure": 3120000,
        "foots_to": {
          "column": "year",
          "row": "open_to_buy",
          "section": "envelope"
        },
        "key": "open_to_buy",
        "label": "Open to buy"
      }
    ],
    "kind": "open_to_buy",
    "label": "Open to buy",
    "period": "FY26",
    "period_detail": {
      "begins": "2026-02-01",
      "ends": "2027-01-30",
      "fiscal_year": 2026
    },
    "sections": [
      {
        "absence": null,
        "as_of": "2026-09-05T06:10:02Z",
        "data_source": "pg",
        "key": "weeks",
        "label": "The year, week by week",
        "note": null
        …
      }
    ]
  }
}

What it refuses

  • 400 The fiscal year could not be read
  • 401 key_invalid: "The API key is not valid." No usable key: malformed, unknown, revoked, expired or stopped. One refusal covers all five, telling a caller which is which maps the surface for them. A request with no Authorization header at all is refused 400 before any key is looked for.
  • 403 plan_excludes: "This organisation's plan does not include Commitments. It is sold with Pro." The key may not reach this operation. plan_excludes when Reports is sold with Pro and this organisation's plan does not include it; scope_missing when the key does not hold Reports; organization_mismatch when the path names an organisation that is not the key's; ip_not_allowed when the caller's address is outside the key's allowlist.
  • 429

Try it in the reference

The Monday pack for one 4-5-4 retail week ​

GET /api/v1/finance/reports/weekly-trade

Scopes: reports:read

The Monday pack for one 4-5-4 retail week, as one read. Eight bands: the ledger's lines for this week, last week, month to date and year to date, each against the plan and against the same fiscal week last year; where the move came from, cut by category, channel or commitment; best and worst sellers; the full-price and markdown mix; size availability; aged stock; future intake by week; and this week's breached and watched commitment verdicts.

RequiredInWhat it is
weekqueryA fiscal year and a fiscal week, written 2026-W23.
OptionalInWhat it is
cutqueryHow the "where the move came from" band is broken. Defaults to category.
plan_idqueryPublished plan in the selected fiscal year. Omit to use the unique published plan; multiple plans require an explicit selection.
Tightly-VersionheaderThe date train to answer on.
bash
curl "https://api.app.tightly.io/api/v1/finance/reports/weekly-trade?week=<week>" \
  -H "Authorization: Bearer $TIGHTLY_API_KEY"

What it answers

json
{
  "data": {
    "as_of": "2026-09-05T06:10:02Z",
    "basis_line": "Net sales · 4-5-4 retail week · organisation calendar",
    "calendar_note": "Weeks are 4-5-4 and Sunday-anchored; the plan is by Gregorian month.",
    "coverage": {
      "commitments_read": 4,
      "reason": null
    },
    "head": [
      {
        "against": {
          "last_year": 1171300,
          "plan": 1236000
        },
        "figure": 1184200,
        "foots_to": {
          "column": "this_week",
          "row": "net_sales",
          "section": "ledger"
        },
        "key": "net_sales",
        "label": "Net sales"
      }
    ],
    "kind": "weekly_trade",
    "label": "Weekly trade",
    "period": "FY26-W36",
    "period_detail": {
      "begins": "2026-08-30",
      "ends": "2026-09-05",
      "last_year": {
        "alignment": "same_fiscal_week",
        "week": "FY25-W36"
      },
      "week": "FY26-W36"
    },
    "sections": [
      {
        "absence": null
        …
      }
    ]
  }
}

What it refuses

  • 400 The week could not be read, or the cut is not one this report offers
  • 401 key_invalid: "The API key is not valid." No usable key: malformed, unknown, revoked, expired or stopped. One refusal covers all five, telling a caller which is which maps the surface for them. A request with no Authorization header at all is refused 400 before any key is looked for.
  • 403 plan_excludes: "This organisation's plan does not include Commitments. It is sold with Pro." The key may not reach this operation. plan_excludes when Reports is sold with Pro and this organisation's plan does not include it; scope_missing when the key does not hold Reports; organization_mismatch when the path names an organisation that is not the key's; ip_not_allowed when the caller's address is outside the key's allowlist.
  • 404 No such report
  • 429

Try it in the reference

Tightly API, version 2026-11.