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

# list_statements

List the statements you can see, with simple filters and pagination.

You only see the statements you have access to.

## Parameters

<Accordion title="Body" defaultOpen>
  <ParamField body="period" type="string" required>
    Period in YYYY-MM format (e.g. 2026-03). Required.
  </ParamField>

  <ParamField body="search" type="string">
    Free-text filter matched against the statement's user (name or email), same
    matching as list\_users search.
  </ParamField>

  <ParamField body="status" type="string">
    Status filter. One of ongoing (open / not yet locked), locked (frozen but
    not paid), paid (sent to payroll), or error (the calculation errored out).
    The error condition is bundled into this single field.
  </ParamField>

  <ParamField body="adjusted" type="boolean">
    If True, only statements with at least one manual amount adjustment
    (overwritten).
  </ParamField>

  <ParamField body="with_requests" type="boolean">
    If True, only statements that have at least one linked request you can
    access.
  </ParamField>

  <ParamField body="compensation_plan" type="string">
    Compensation plan, matched either by name (a case-insensitive substring of
    the plan name) or by ObjectId.
  </ParamField>

  <ParamField body="view" type="string">
    Saved statement view to apply, by name (case- and accent-insensitive
    substring) or ObjectId. Narrows the results to the users that view exposes —
    a filtering aid, it never widens what you can see. Discover the views you
    can pass from get\_identity (the views of your statement access). An unknown
    or inaccessible view raises an error listing the views you can choose.
  </ParamField>

  <ParamField body="manager" type="string">
    Narrow to this manager's team — everyone below them in the hierarchy (all
    levels, not just direct reports). Match the manager by name or email
    (case-insensitive substring) or by ObjectId. It only filters within what you
    can already see — a teammate outside your access stays hidden.
  </ParamField>

  <ParamField body="currency_mode" type="string">
    Which currency each total\_payment is converted into and labelled with:
    'payment' (default) — the currency the user is paid in; 'calculation' — the
    currency the plan computes in; 'company' — the company's global currency.
    The amount and its currency always agree. One of: `company`, `payment`,
    `calculation`.
  </ParamField>

  <ParamField body="limit" type="integer">
    Page size, between 1 and 250. Defaults to 50.
  </ParamField>

  <ParamField body="offset" type="integer">
    Row offset into the result set — the number of rows to skip before this
    page. Pass the next\_offset returned by the previous call, or None for the
    first page.
  </ParamField>
</Accordion>

## Response

<Accordion title="Body" defaultOpen>
  <ResponseField name="statements" type="object[]">
    <Expandable title="object properties">
      <ResponseField name="id" type="string" />

      <ResponseField name="resource_url" type="string">
        Deep link to open this statement in the Qobra web app.
      </ResponseField>

      <ResponseField name="user_email" type="string" />

      <ResponseField name="period" type="string" />

      <ResponseField name="status" type="string">
        Overall processing state: error (calculation failed), ongoing (open, not
        yet locked), locked (frozen, not yet paid), paid (sent to payroll). A
        paid statement is always frozen too. Distinct from the per-period
        reporting stage of list\_statement\_periods. One of: `error`, `ongoing`,
        `locked`, `paid`.
      </ResponseField>

      <ResponseField name="total_payment" type="number">
        Net amount to be paid out on this statement, expressed in `currency` —
        already reflects draw and manual payments, so it is not just the sum of
        the compensation lines.
      </ResponseField>

      <ResponseField name="currency" type="string">
        The ISO currency code that total\_payment is expressed in. One of: `AED`,
        `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`,
        `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`,
        `BSD`, `BTN`, `BWP`, `BYR`, `BZD`, `CAD`, `CDF`, `CHF`, `CLF`, `CLP`,
        `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`,
        `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`,
        `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`,
        `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`,
        `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`,
        `LBP`, `LKR`, `LRD`, `LSL`, `LTL`, `LVL`, `LYD`, `MAD`, `MDL`, `MGA`,
        `MKD`, `MMK`, `MNT`, `MOP`, `MRO`, `MUR`, `MVR`, `MWK`, `MXN`, `MYR`,
        `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`,
        `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RMB`, `RON`, `RSD`, `RUB`,
        `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`,
        `SRD`, `STD`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`,
        `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `UYI`, `UYU`, `UZS`,
        `VEF`, `VND`, `VUV`, `WON`, `WST`, `XAF`, `XAG`, `XAU`, `XCD`, `XOF`,
        `XPD`, `XPF`, `XPT`, `XSU`, `YER`, `ZAR`, `ZMK`, `ZWL`.
      </ResponseField>

      <ResponseField name="last_ready_at" type="string">
        When the statement last finished computing and was up to date; null if
        it never reached that state.
      </ResponseField>

      <ResponseField name="linked_requests" type="object[]">
        <Expandable title="object properties">
          <ResponseField name="id" type="string" />

          <ResponseField name="reference" type="string" />

          <ResponseField name="name" type="string" />

          <ResponseField name="creator_email" type="string" />

          <ResponseField name="assignee_email" type="string" />
        </Expandable>
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="next_offset" type="integer" />
</Accordion>
