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

# list_catalog_items — Paginated products and services

> Reference for the list_catalog_items MCP tool. List the products and services an organization sells, filtered by search and type, with cursor-based pagination.

The `list_catalog_items` tool returns a paginated list of catalog items, the products and services an organization sells. Every request must include `intent` and `organizationId`, and the token must carry the `catalog-items.read` scope.

> [!NOTE]
>
> Receivables tools require the organization to have invoicing set up in Relay. If it does not, the tool returns an error instead of data.

## Scope

Required OAuth scope: `catalog-items.read`

## Input

**organizationId** `string` *required*

The organization to query. Must be one of the organizations the token can access.

**search** `string`

Free-text search across catalog item fields.

**type** `string`

Filter by item type. Allowed values: `SERVICE`, `INVENTORY`, `NON_INVENTORY`.

**cursor** `string`

Opaque pagination cursor from a previous response. Keep the same `pageSize` and filters when following cursors. Never parse, edit, or reuse a cursor across different filter sets.

**pageSize** `integer`

Number of results per page. Must be between 1 and 100. Defaults to 50.

**intent** `string` *required*

What the user asked for and why this call serves it, in 1 to 500 characters. Required on every tool call. See [Common tool arguments](https://mcp.docs.relayfi.com/concepts/transport.md#common-tool-arguments).

## Output

**data** `CatalogItem[]` *required*

Array of catalog items matching the filters.

**CatalogItem**

**id** `string` *required*

Unique catalog item identifier. Use this value as `catalogItemId`.

**organizationId** `string` *required*

Organization the catalog item belongs to.

**name** `string` *required*

Display name of the item.

**description** `string` *required*

Description of the item.

**unitPrice** `Money | null` *required*

Unit price as a [Money](https://mcp.docs.relayfi.com/concepts/results.md#money) object, rounded to cents. `null` when no price is set.

**unitPriceDecimal** `string` *required*

Exact unit price as a decimal string. Use this when a price has more precision than cents.

**type** `string` *required*

Item type. Values: `SERVICE`, `INVENTORY`, `NON_INVENTORY`.

**sku** `string` *required*

Stock keeping unit (SKU) of the item.

**unitOfMeasure** `string` *required*

Unit the item is sold in, for example `hour` or `each`.

**source** `string` *required*

Where the item was created or synced from. Values: `relay`, `quickbooks`.

**createdAt** `string` *required*

Timestamp when the item was created, in RFC 3339 format.

**updatedAt** `string` *required*

Timestamp when the item was last updated, in RFC 3339 format.

**pagination** `object` *required*

Cursor-based pagination metadata.

**Pagination**

**hasNextPage** `boolean` *required*

Whether more results are available.

**pageSize** `integer` *required*

Number of results in this page.

**nextCursor** `string`

Opaque cursor to fetch the next page. Present only when `hasNextPage` is `true`.

## Example

```json Request theme={null}
{
  "jsonrpc": "2.0",
  "id": 12,
  "method": "tools/call",
  "params": {
    "name": "list_catalog_items",
    "arguments": {
      "intent": "User asked what we charge per consulting hour.",
      "organizationId": "org_1",
      "search": "consulting",
      "type": "SERVICE",
      "pageSize": 10
    }
  }
}
```

```json Response theme={null}
{
  "jsonrpc": "2.0",
  "id": 12,
  "result": {
    "structuredContent": {
      "data": [
        {
          "id": "item_1",
          "organizationId": "org_1",
          "name": "Consulting hour",
          "description": "Strategy consulting, billed hourly",
          "unitPrice": {
            "cents": 15000,
            "display": "150.00",
            "currency": "USD"
          },
          "unitPriceDecimal": "150.00",
          "type": "SERVICE",
          "sku": "CONSULT-HR",
          "unitOfMeasure": "hour",
          "source": "relay",
          "createdAt": "2026-02-10T12:00:00.000Z",
          "updatedAt": "2026-02-10T12:00:00.000Z"
        }
      ],
      "pagination": {
        "hasNextPage": false,
        "pageSize": 10
      }
    }
  }
}
```

## Notes

* `unitPrice` is rounded to cents. Use `unitPriceDecimal` when you need the exact price.
* Follow `nextCursor` until `hasNextPage` is `false`. Keep the same `pageSize` and filters on every page.

> [card] [get\_catalog\_item](https://mcp.docs.relayfi.com/tools/get-catalog-item.md)
>
> Fetch a single catalog item by ID.

> [card] [Result conventions](https://mcp.docs.relayfi.com/concepts/results.md)
>
> Learn how pagination, Money objects, and dual-channel output work across all tools.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.