> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getomni.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Spread Results

> Read a completed spread's figures as JSON

Read the numbers a spreading run produced: the consolidated income statement, balance sheet, and cash flow as line items by period. These are the same figures the report PDF presents.

Every spread uses the same template — the possible rows and their keys are fixed. What varies is which rows have figures and what those figures are.

## Reading the figures

Each statement is a list of `periods`. Every period has a `values` object with the rows that have figures for that period, keyed by row key. A row absent from `values` has no figure for that period.

```json theme={null}
{
  "id": "48e65bef-2cea-5b97-b94d-86047b4c1b2e",
  "label": "FY2023",
  "start": "2023-01-01",
  "end": "2023-12-31",
  "basis": "accrual",
  "annualized": false,
  "derivedFrom": null,
  "values": {
    "netRevenues": { "label": "Net Revenues", "value": 4200000, "kind": "line", "computed": false, "memo": false },
    "netIncome":   { "label": "Net Income",   "value": 565000,  "kind": "total", "computed": true,  "memo": false }
  }
}
```

To match a period across statements, use `periods[].id` — the same period carries the same id in every block. `label` is display copy derived from the source documents and may differ between statements.

The income statement adds an annualized column beside each interim period (shorter than 12 months), with figures scaled to a full year. `derivedFrom` points back to the period it was derived from. The cash flow starts one period later than the others, since it measures change between balance sheet dates.

A period with no dates gets an id that doesn't match anything else in the response.

## Authentication

Requires the `x-api-key` header with a valid workspace API key.

## Path Parameters

<ParamField path="spreadId" type="string" required>
  The run id returned by [Create Spread](/api-reference/spreads/create-spread).
</ParamField>

## Response

<ResponseField name="success" type="boolean">
  Whether the request succeeded.
</ResponseField>

<ResponseField name="results" type="object">
  The spread's figures.

  <Expandable title="results">
    <ResponseField name="schemaVersion" type="integer">
      The version of this response's structure. See [Compatibility](#compatibility).
    </ResponseField>

    <ResponseField name="spreadId" type="string">
      The run these figures came from, so a stored copy stays traceable.
    </ResponseField>

    <ResponseField name="leadId" type="string | null">
      The lead the run belongs to.
    </ResponseField>

    <ResponseField name="generatedAt" type="string">
      When the run last produced these figures, ISO 8601. Regenerating a spread
      moves this forward.
    </ResponseField>

    <ResponseField name="entityName" type="string | null">
      The business name as read from the source documents.
    </ResponseField>

    <ResponseField name="currency" type="string | null">
      The currency the source reported in.
    </ResponseField>

    <ResponseField name="statements" type="object">
      `incomeStatement`, `balanceSheet`, and `cashFlow`, each an object with a
      `periods` array, or `null` if the run produced none. We compute the cash
      flow with the indirect method from the income statement and balance sheet
      rather than extracting it, so a single-period spread returns empty
      `periods` for it.
    </ResponseField>
  </Expandable>
</ResponseField>

### Periods

<ResponseField name="periods" type="array">
  The block's columns in display order.

  <Expandable title="period">
    <ResponseField name="id" type="string">
      Stable identifier for this period. The same period carries the same id in
      every statement and on subsequent fetches of the same run.
    </ResponseField>

    <ResponseField name="label" type="string">
      Column heading, e.g. `FY2023`. Derived from the source documents and may
      differ between statements or across runs.
    </ResponseField>

    <ResponseField name="start" type="string | null">
      Period start date, `YYYY-MM-DD`. On the cash flow this is the prior
      period's end date, since a cash flow column measures the movement between
      two balance sheet dates.
    </ResponseField>

    <ResponseField name="end" type="string | null">
      Period end date, `YYYY-MM-DD`.
    </ResponseField>

    <ResponseField name="basis" type="string | null">
      The accounting basis, `accrual` or `cash`. Income statement only; `null`
      everywhere else.
    </ResponseField>

    <ResponseField name="annualized" type="boolean">
      True when the figures have been scaled to a full year from a period shorter
      than 12 months. The unscaled period appears alongside it; `derivedFrom`
      points back to it.
    </ResponseField>

    <ResponseField name="derivedFrom" type="string | null">
      The `id` of the period this column was scaled from. `null` on all other
      columns.
    </ResponseField>

    <ResponseField name="values" type="object">
      The rows with figures for this period, keyed by row key. A missing key
      means no figure.
    </ResponseField>
  </Expandable>
</ResponseField>

### Values

Each entry in a period's `values` object has the following fields.

<ResponseField name="value" type="number">
  The figure for this row in this period.
</ResponseField>

<ResponseField name="label" type="string">
  Display copy for the row. May be reworded over time.
</ResponseField>

<ResponseField name="kind" type="string">
  `line` for a line item, `subtotal` for a computed subtotal or derived metric,
  `total` for a statement total.
</ResponseField>

<ResponseField name="computed" type="boolean">
  True when we derived the row rather than reading it off a source document.
  Subtotals, totals, the variance rows, EBITDA/EBIDA, and every cash flow row
  are computed; template line items are not.
</ResponseField>

<ResponseField name="memo" type="boolean">
  True for display-only rows not included in computed totals — the balance
  sheet's equity rollforward rows, for instance. Including them in a total will
  double-count them.
</ResponseField>

## Row keys

Row keys are stable camelCase identifiers from our spreading template. `label` is display copy and may be reworded; it's also not unique across statements ("Net Income" appears on all three).

<AccordionGroup>
  <Accordion title="Income statement">
    Line items: `netRevenues`, `cogsGoodsMaterials`, `cogsLabor`, `cogsOther`,
    `officerCompGuaranteedPayments`, `salariesWages`, `badDebts`, `rent`,
    `interest`, `depreciation`, `amortization`, `otherDiscretionary`,
    `otherSgna`, `otherIncome`, `otherExpense`.

    Subtotals and totals: `totalCostOfRevenues`, `grossProfit`,
    `totalOperatingExpenses`, `netIncome`.

    Also: `reportedNetIncome` (the net income the source printed, before our
    consolidation), `incomeStatementVariance` (our computed net income minus
    that reported figure), `ebitda`, and `ebida` (EBITDA without the income-tax
    add-back).
  </Accordion>

  <Accordion title="Balance sheet">
    Assets: `cash`, `accountsReceivable`, `inventory`, `otherCurrentAssets`,
    `totalCurrentAssets`, `grossFixedAssets`, `accumulatedDepreciation`,
    `netFixedAssets`, `loansToAffiliates`, `goodwill`, `otherIntangibles`,
    `otherNonCurrentAssets`, `totalNonCurrentAssets`, `totalAssets`.

    Liabilities: `accountsPayable`, `currentDebt`, `otherCurrentLiabilities`,
    `totalCurrentLiabilities`, `longTermDebt`, `dueToAffiliates`,
    `otherLiabilities`, `totalNonCurrentLiabilities`, `totalLiabilities`.

    Equity: `commonStock`, `additionalPaidInCapital`, `treasuryStock`,
    `endingRetainedEarnings`, `otherEquity`, `totalEquity`,
    `totalLiabilitiesAndEquity`.

    Equity rollforward, all `memo` rows excluded from `totalEquity`:
    `beginningRetainedEarnings`, `netIncomeEquity`, `distributionsDividends`.

    Also: `balanceSheetVariance`, total assets minus total liabilities and
    equity. A non-zero value means the spread is out of balance for that period.
  </Accordion>

  <Accordion title="Cash flow">
    Operating: `netIncome`, `depreciation`, `amortization`,
    `changeInAccountsReceivable`, `changeInInventory`,
    `changeInOtherCurrentAssets`, `changeInAccountsPayable`,
    `changeInOtherCurrentLiabilities`, `netCashFromOperating`.

    Investing: `capitalExpenditures`, `changeInIntangibles`,
    `changeInLoansToAffiliates`, `changeInOtherNonCurrentAssets`,
    `netCashFromInvesting`.

    Financing: `changeInCurrentDebt`, `changeInLongTermDebt`,
    `changeInDueToAffiliates`, `changeInOtherLiabilities`,
    `distributionsDividends`, `netEquityContributions`,
    `netCashFromFinancing`.

    Totals: `netChangeInCash`, `beginningCash`, `endingCash`, and
    `cashFlowVariance` — net change in cash minus the actual movement in the
    cash balance.
  </Accordion>
</AccordionGroup>

## Compatibility

`schemaVersion` is `2` today. We may make these changes without changing it, so
parse defensively:

* adding a statement or a row
* adding a field to the response, a period, or a values entry
* rewording any `label`
* changing which rows a given spread carries

We will change `schemaVersion` if we rename or remove a row `key`, or
restructure `periods` or `values`. If you want to fail loudly rather than
silently mis-read a future response, assert on it.

## Errors

Every error body carries `success: false` and a human-readable `error`. Branch on
the status code rather than on the message text, which we may reword.

<ResponseField name="404" type="error">
  No spread with this id exists in your workspace.
</ResponseField>

<ResponseField name="409" type="error">
  The run has not completed. Results are served only for a `COMPLETE` run: one
  still in flight has partly written statements, and regenerating a run rewrites
  them in place, so an earlier read could return a mix of the old spread and the
  new one.

  To know when to fetch, poll [Get Spread](/api-reference/spreads/get-spread)
  for the run's `status` or subscribe to the `spread.completed`
  [webhook](/api-reference/webhooks/webhook-events). A `FAILED` run will never
  produce results, so stop polling when you see one.

  ```json 409 theme={null}
  {
    "success": false,
    "error": "This spread is IN_PROGRESS. Results are available once it is COMPLETE."
  }
  ```
</ResponseField>

<RequestExample>
  ```javascript Node.js theme={null}
  const options = {
    method: "GET",
    headers: { "x-api-key": "<your-api-key>" },
  };

  fetch(
    "https://api-v2.getomni.ai/api/v1/spreads/9f1e2d3c-4b5a-6789-0abc-def012345678/results",
    options,
  )
    .then((response) => response.json())
    .then((response) => console.log(response))
    .catch((err) => console.error(err));
  ```

  ```python Python theme={null}
  import requests

  url = "https://api-v2.getomni.ai/api/v1/spreads/9f1e2d3c-4b5a-6789-0abc-def012345678/results"
  headers = {"x-api-key": "<your-api-key>"}

  response = requests.request("GET", url, headers=headers)
  print(response.json())
  ```

  ```bash cURL theme={null}
  curl --request GET \
    --url https://api-v2.getomni.ai/api/v1/spreads/9f1e2d3c-4b5a-6789-0abc-def012345678/results \
    --header 'x-api-key: <your-api-key>'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "results": {
      "schemaVersion": 2,
      "spreadId": "9f1e2d3c-4b5a-6789-0abc-def012345678",
      "leadId": "3a7c1b90-2e4d-4f61-8b0a-9c5d7e2f1a34",
      "generatedAt": "2026-03-04T17:42:11.000Z",
      "entityName": "Pacific Coast Container Haulers",
      "currency": "USD",
      "statements": {
        "incomeStatement": {
          "periods": [
            {
              "id": "e05f7d35-d3fc-57c7-bb32-6dea39143f25",
              "label": "FY2022",
              "start": "2022-01-01",
              "end": "2022-12-31",
              "basis": "accrual",
              "annualized": false,
              "derivedFrom": null,
              "values": {
                "netRevenues":            { "label": "Net Revenues",             "value": 3730000, "kind": "line",    "computed": false, "memo": false },
                "cogsGoodsMaterials":     { "label": "Cost of Revenues - Goods", "value": 2340000, "kind": "line",    "computed": false, "memo": false },
                "totalCostOfRevenues":    { "label": "Total Cost of Revenues",   "value": 2340000, "kind": "subtotal","computed": true,  "memo": false },
                "grossProfit":            { "label": "Gross Profit",             "value": 1390000, "kind": "subtotal","computed": true,  "memo": false },
                "salariesWages":          { "label": "Salaries & Wages",         "value": 710000,  "kind": "line",    "computed": false, "memo": false },
                "rent":                   { "label": "Rent",                     "value": 180000,  "kind": "line",    "computed": false, "memo": false },
                "depreciation":           { "label": "Depreciation",             "value": 88000,   "kind": "line",    "computed": false, "memo": false },
                "totalOperatingExpenses": { "label": "Total Operating Expenses", "value": 978000,  "kind": "subtotal","computed": true,  "memo": false },
                "netIncome":              { "label": "Net Income",               "value": 412000,  "kind": "total",   "computed": true,  "memo": false },
                "reportedNetIncome":      { "label": "Net Income Per Books",     "value": 412000,  "kind": "subtotal","computed": false, "memo": false },
                "incomeStatementVariance":{ "label": "Variance vs Reported",     "value": 0,       "kind": "subtotal","computed": true,  "memo": false },
                "ebitda":                 { "label": "EBITDA",                   "value": 541000,  "kind": "subtotal","computed": true,  "memo": false }
              }
            },
            {
              "id": "48e65bef-2cea-5b97-b94d-86047b4c1b2e",
              "label": "FY2023",
              "start": "2023-01-01",
              "end": "2023-12-31",
              "basis": "accrual",
              "annualized": false,
              "derivedFrom": null,
              "values": {
                "netRevenues":            { "label": "Net Revenues",             "value": 4200000, "kind": "line",    "computed": false, "memo": false },
                "cogsGoodsMaterials":     { "label": "Cost of Revenues - Goods", "value": 2600000, "kind": "line",    "computed": false, "memo": false },
                "totalCostOfRevenues":    { "label": "Total Cost of Revenues",   "value": 2600000, "kind": "subtotal","computed": true,  "memo": false },
                "grossProfit":            { "label": "Gross Profit",             "value": 1600000, "kind": "subtotal","computed": true,  "memo": false },
                "salariesWages":          { "label": "Salaries & Wages",         "value": 760000,  "kind": "line",    "computed": false, "memo": false },
                "rent":                   { "label": "Rent",                     "value": 180000,  "kind": "line",    "computed": false, "memo": false },
                "depreciation":           { "label": "Depreciation",             "value": 95000,   "kind": "line",    "computed": false, "memo": false },
                "totalOperatingExpenses": { "label": "Total Operating Expenses", "value": 1035000, "kind": "subtotal","computed": true,  "memo": false },
                "netIncome":              { "label": "Net Income",               "value": 565000,  "kind": "total",   "computed": true,  "memo": false },
                "reportedNetIncome":      { "label": "Net Income Per Books",     "value": 565000,  "kind": "subtotal","computed": false, "memo": false },
                "incomeStatementVariance":{ "label": "Variance vs Reported",     "value": 0,       "kind": "subtotal","computed": true,  "memo": false },
                "ebitda":                 { "label": "EBITDA",                   "value": 701000,  "kind": "subtotal","computed": true,  "memo": false }
              }
            }
          ]
        },
        "balanceSheet": {
          "periods": [
            {
              "id": "e05f7d35-d3fc-57c7-bb32-6dea39143f25",
              "label": "FY2022",
              "start": "2022-01-01",
              "end": "2022-12-31",
              "basis": null,
              "annualized": false,
              "derivedFrom": null,
              "values": {
                "cash":                     { "label": "Cash",                          "value": 190000,  "kind": "line",    "computed": false, "memo": false },
                "accountsReceivable":        { "label": "Accounts Receivable",          "value": 480000,  "kind": "line",    "computed": false, "memo": false },
                "inventory":                 { "label": "Inventory",                    "value": 295000,  "kind": "line",    "computed": false, "memo": false },
                "totalCurrentAssets":        { "label": "Total Current Assets",         "value": 965000,  "kind": "subtotal","computed": true,  "memo": false },
                "totalAssets":               { "label": "Total Assets",                 "value": 1885000, "kind": "total",   "computed": true,  "memo": false },
                "accountsPayable":           { "label": "Accounts Payable",             "value": 195000,  "kind": "line",    "computed": false, "memo": false },
                "totalLiabilities":          { "label": "Total Liabilities",            "value": 928000,  "kind": "subtotal","computed": true,  "memo": false },
                "totalEquity":               { "label": "Total Equity",                 "value": 957000,  "kind": "subtotal","computed": true,  "memo": false },
                "totalLiabilitiesAndEquity": { "label": "Total Liabilities and Equity", "value": 1885000, "kind": "total",   "computed": true,  "memo": false }
              }
            },
            {
              "id": "48e65bef-2cea-5b97-b94d-86047b4c1b2e",
              "label": "FY2023",
              "start": "2023-01-01",
              "end": "2023-12-31",
              "basis": null,
              "annualized": false,
              "derivedFrom": null,
              "values": {
                "cash":                     { "label": "Cash",                          "value": 250000,   "kind": "line",    "computed": false, "memo": false },
                "accountsReceivable":        { "label": "Accounts Receivable",          "value": 540000,   "kind": "line",    "computed": false, "memo": false },
                "inventory":                 { "label": "Inventory",                    "value": 320000,   "kind": "line",    "computed": false, "memo": false },
                "totalCurrentAssets":        { "label": "Total Current Assets",         "value": 1110000,  "kind": "subtotal","computed": true,  "memo": false },
                "totalAssets":               { "label": "Total Assets",                 "value": 2090000,  "kind": "total",   "computed": true,  "memo": false },
                "accountsPayable":           { "label": "Accounts Payable",             "value": 210000,   "kind": "line",    "computed": false, "memo": false },
                "totalLiabilities":          { "label": "Total Liabilities",            "value": 930000,   "kind": "subtotal","computed": true,  "memo": false },
                "distributionsDividends":    { "label": "Distributions / Dividends",    "value": -180000,  "kind": "line",    "computed": false, "memo": true  },
                "totalEquity":               { "label": "Total Equity",                 "value": 1160000,  "kind": "subtotal","computed": true,  "memo": false },
                "totalLiabilitiesAndEquity": { "label": "Total Liabilities and Equity", "value": 2090000,  "kind": "total",   "computed": true,  "memo": false }
              }
            }
          ]
        },
        "cashFlow": {
          "periods": [
            {
              "id": "48e65bef-2cea-5b97-b94d-86047b4c1b2e",
              "label": "FY2023",
              "start": "2022-12-31",
              "end": "2023-12-31",
              "basis": null,
              "annualized": false,
              "derivedFrom": null,
              "values": {
                "netIncome":               { "label": "Net Income",                       "value": 565000, "kind": "line",    "computed": true, "memo": false },
                "depreciation":            { "label": "Depreciation",                     "value": 95000,  "kind": "line",    "computed": true, "memo": false },
                "changeInAccountsReceivable":{ "label": "Change in Accounts Receivable",  "value": -60000, "kind": "line",    "computed": true, "memo": false },
                "netCashFromOperating":    { "label": "Net Cash from Operating",           "value": 560000, "kind": "subtotal","computed": true, "memo": false },
                "netChangeInCash":         { "label": "Net Change in Cash",               "value": 60000,  "kind": "total",   "computed": true, "memo": false },
                "cashFlowVariance":        { "label": "Variance vs Change in Cash",       "value": 0,      "kind": "subtotal","computed": true, "memo": false }
              }
            }
          ]
        }
      }
    }
  }
  ```
</ResponseExample>
