> ## 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.

# get_report_data

Return a report's computed rows — its actual data, filtered and sorted.

The follow-up to `get_report`: once you know how a report is built, read its
data. Returns the displayed columns, the row values (aligned to the columns),
and the bottom-of-column aggregates, respecting the report's filters, sort and
the caller's visibility. Use `get_report` first to read the field ids, types
and filter/sort configuration that make these rows interpretable; use
`get_report_pivot_data` for a report shown as a pivot table.

Paginated like every list tool: `limit` rows per call, `offset` to walk the
pages (`next_offset` is `null` on the last one), `total_row_count` for the
full size. Only the report's displayed columns are ever returned. A report too
large to compute on the fly raises a clear error asking you to narrow it with
filters. You only see reports you have access to.

## Parameters

<Accordion title="Body" defaultOpen>
  <ParamField body="report" type="string" required>
    The report to read. Accepts the report's ObjectId (the id returned by
    list\_reports) or a case- and accent-insensitive substring of its name. A
    name matching no — or more than one — report raises a clear error; pass the
    full id to disambiguate.
  </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>

  <ParamField body="field_ids" type="string[]">
    Restrict the returned columns to these field ids (as returned by
    get\_report). Omit to return all of the report's displayed columns. Hidden or
    unknown field ids are rejected.
  </ParamField>
</Accordion>

## Response

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

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

      <ResponseField name="value_type" type="string">
        One of: `number`, `boolean`, `date`, `string`.
      </ResponseField>

      <ResponseField name="field_type" type="string">
        One of: `float`, `amount`, `percentage`, `string`, `picklist`,
        `multipicklist`, `bool`, `date`, `user`, `object`, `group`,
        `record_status`.
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="rows" type="any[][]" />

  <ResponseField name="bottom_aggregates" type="object[]">
    <Expandable title="object properties">
      <ResponseField name="field_id" type="string" />

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

      <ResponseField name="operator" type="string">
        One of: `empty`, `not_empty`, `distinct`, `count`, `sum`, `average`,
        `min`, `max`.
      </ResponseField>

      <ResponseField name="value" type="any" />

      <ResponseField name="value_type" type="string">
        One of: `number`, `boolean`, `date`, `string`.
      </ResponseField>

      <ResponseField name="field_type" type="string">
        One of: `float`, `amount`, `percentage`, `string`, `picklist`,
        `multipicklist`, `bool`, `date`, `user`, `object`, `group`,
        `record_status`.
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="row_count_returned" type="integer" />

  <ResponseField name="total_row_count" type="integer" />

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

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

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