# income_statement

Read revenue, expenses and net income for a date window. Omitting both bounds includes all postings; select currency for a native-ledger view across currency changes.

## What it shows

Revenue, expenses and net income over an optional effective-date window (omit both bounds for every posting). With an explicit currency, or when the window overlaps one functional-currency period, this returns one statement. Without a currency across an incorporation's periods, it returns { presentationCurrency: null, segments: IncomeStatement[] }, one per ledger, and never sums ledgers.

## Example MCP App view

The read-only example below uses illustrative demo data and the same report component as the MCP App. These are not your books or the result of the request example.

<iframe class="docs-report-preview" src="/docs/report-previews/income_statement.html" title="income_statement report view with demo data" loading="lazy" sandbox referrerpolicy="no-referrer"></iframe>

[Open the full example view](/docs/report-previews/income_statement.html).

## Inputs

Send the fixed `kind` and these parameters at the top level of the report request, not inside `input`.

Required means required within its containing object; an optional parent can be omitted.

| Field | Type | Required | Meaning and accepted values |
|---|---|---|---|
| `currency` | string | No | Ledger currency (default: the functional currency active for the report period). Format: currency. |
| `from` | string | No | Start date (YYYY-MM-DD) or UTC timestamp (RFC 3339). A date is a UTC day and includes that whole day. A calendar date means midnight UTC at its start; an explicit timestamp keeps the stated instant. Format: moment. Example: `"2026-09-01"`. |
| `until` | string | No | End date (YYYY-MM-DD) or UTC timestamp (RFC 3339). A date is a UTC day and includes that whole day, so September ends at 2026-09-30; a timestamp includes everything before that moment. A calendar date includes the whole UTC day (exclusive cutoff); an explicit timestamp keeps the stated instant. Format: moment. Example: `"2026-09-30"`. |
| `window` | string | No | Instead of from/until: all, YYYY, YYYY-Qn, YYYY-MM, or ytd / qtd / mtd (to the moment the report runs).  |

## Reading the result

Running this report does not change the books. Its description above distinguishes recorded-book summaries from previews based on supplied facts or assumptions. Interpret its totals, grouping, missing-data indicators and pagination using that description. Monetary amounts are integer strings in the reported unit; ratios and assumptions can be fractional numbers. An empty result is not evidence that the business had no activity.

The public OpenAPI contract does not enumerate this report's result fields. Fetch `GET /v1/reports` for its live description and parameters, and inspect the returned JSON rather than assuming an output shape.

## Example request


```json
{
  "kind": "income_statement",
  "from": "2026-09-01",
  "until": "2026-09-30"
}
```


[All reports](/docs/report-reference/) · [Operation and errors](/docs/api-reference/operations/reports-run/) · [Reusable schemas](/docs/api-reference/components/)

Keep credentials out of prompts; rehearse writes only in a disposable sandbox.

## Exact request schema


```json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "kind": {
      "const": "income_statement"
    },
    "currency": {
      "description": "Ledger currency (default: the functional currency active for the report period).",
      "type": "string",
      "minLength": 1
    },
    "from": {
      "description": "Start date (YYYY-MM-DD) or UTC timestamp (RFC 3339). A date is a UTC day and includes that whole day.",
      "type": "string",
      "minLength": 1
    },
    "until": {
      "description": "End date (YYYY-MM-DD) or UTC timestamp (RFC 3339). A date is a UTC day and includes that whole day, so September ends at 2026-09-30; a timestamp includes everything before that moment.",
      "type": "string",
      "minLength": 1
    },
    "window": {
      "description": "Instead of from/until: all, YYYY, YYYY-Qn, YYYY-MM, or ytd / qtd / mtd (to the moment the report runs).",
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "kind"
  ]
}
```


