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

# List transactions

> List sales transactions for downstream ERP and BI ingestion.

Returns sales transactions visible to your API key. Pair with [List products](/api-reference/products/list) to assemble a catalog-plus-sales view in your warehouse without going through the in-app CSV export flow.

## Authentication

Bearer token. See [Authentication](/api-reference/authentication).

## Query parameters

| Name            | Type                   | Required | Description                                                                                |
| :-------------- | :--------------------- | :------- | :----------------------------------------------------------------------------------------- |
| `limit`         | integer                | No       | Page size, default `1000`, max `10000`.                                                    |
| `cursor`        | string                 | No       | Opaque pagination cursor returned by a previous response.                                  |
| `from_date`     | string (ISO-8601, UTC) | No       | Earliest transaction timestamp to include.                                                 |
| `to_date`       | string (ISO-8601, UTC) | No       | Latest transaction timestamp to include.                                                   |
| `product_id`    | string                 | No       | Filter to a single product.                                                                |
| `store_id`      | string                 | No       | Filter to a single store.                                                                  |
| `updated_after` | string (ISO-8601, UTC) | No       | Only return transactions updated at or after this timestamp - useful for incremental sync. |

## Response

```json theme={null}
{
  "data": [
    {
      "transaction_id": "txn_01HX9R5M",
      "product_id": "SKU-12345",
      "store_id": "STORE-007",
      "timestamp": "2026-05-21T16:42:09Z",
      "quantity": "2",
      "price": "1.49",
      "revenue": "2.98",
      "currency": "EUR",
      "is_promo": false,
      "updated_at": "2026-05-21T16:42:09Z"
    }
  ],
  "next_cursor": "eyJvZmZzZXQiOjEwMDB9"
}
```

Numeric values are returned as strings - see [Conventions](/api-reference/conventions).

## Incremental pulls

For downstream sync jobs, store the highest `updated_at` you've seen and pass it as `updated_after` on the next run. This is more efficient than re-reading the full window and lets you catch late-arriving corrections to existing transactions.

## Large windows

For wide date ranges across high-volume accounts, narrow the window with `from_date` / `to_date` and page with `limit=10000`. Pulling many months in a single call is supported but slow and more likely to hit a retry.

## Example request

```bash theme={null}
curl -s "https://clientapi.retailgrid.io/v1/transactions?from_date=2026-05-01T00:00:00Z&to_date=2026-05-22T00:00:00Z&limit=10000" \
  -H "Authorization: Bearer rg_live_xxx"
```

## Related

* [Bulk upsert transactions](/api-reference/transactions/bulk-upsert)
* [List products](/api-reference/products/list)
* [Conventions](/api-reference/conventions)
* [Errors](/api-reference/errors)
