Sign Customiser

Products

list_integration_products

read

List integration products

Copy page

See what customers have bought or configured, and obtain the product ids get_integration_product takes.

Overview

Lists the products the connected Store has synchronised into Sign Customiser from its selling platform, newest first, with each product id, the customiser it belongs to, its title, its price and comparison price in integer minor units, the Store currency and its image URL. A product title can contain customer-entered sign text. The route accepts no filters, so pagination is the only control. It requires the products:read scope and has no side effects.

Permission

Requires theproducts:readpermission. A connection without it answersinsufficient_scopenaming the permission to approve.

Annotations

readOnlyHinttrue
destructiveHintfalse
idempotentHinttrue
openWorldHintfalse

Prerequisites

  • A merchant has connected this store and approved the products:read scope.

Arguments

limitinteger

How many products to return per page, between 1 and 100. Defaults to 20.

cursorstring

The opaque next_cursor value from the previous page. Omit it for the first page.

Result

Up to `limit` product rows, newest first, plus the cursor for the next page. Selections and dimensions are a separate per-product read.

request_idstringalways present
storeobjectalways present
store.idintegeralways present
store.namestringalways present
productsarray of objectalways present

The page of products, newest first.

products[].idintegeralways present
products[].customiser_idinteger or null
products[].titlestring or null
products[].price_amountinteger or null

Integer minor units of currency.

products[].compare_at_amountinteger or null
products[].currencystring or null
products[].image_urlstring or null
products[].created_atstring or null
products[].updated_atstring or null
paginationobjectalways present
pagination.has_morebooleanalways present
pagination.next_cursorstring or null

Error cases

insufficient_scope

The connection was approved without products:read.

invalid_cursor

The cursor was altered or reused; restart with no cursor.

First page of synchronised products

tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_integration_products",
    "arguments": {
      "limit": 1
    }
  }
}
result
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t",
      "store": {
        "id": 12,
        "name": "Demo Signs"
      },
      "products": [
        {
          "id": 731,
          "customiser_id": 42,
          "title": "Custom neon sign",
          "price_amount": 12900,
          "compare_at_amount": 14900,
          "currency": "AUD",
          "image_url": "https://cdn.example.com/products/731.png",
          "created_at": "2026-07-18T03:14:15Z",
          "updated_at": "2026-07-18T03:16:10Z"
        }
      ],
      "pagination": {
        "has_more": true,
        "next_cursor": "eyJpZCI6N30"
      }
    }
  }
}

A connection without products:read (error)

tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_integration_products",
    "arguments": {}
  }
}
result
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "structuredContent": {
      "error": {
        "code": "insufficient_scope",
        "title": "Insufficient scope",
        "detail": "The tool [list_integration_products] requires the products:read scope, which this connection was not granted.",
        "recovery": "The connection was authorised without the scope this tool needs. Ask the merchant to reconnect the connector and approve the scope named in required_scopes. Do not retry this call.",
        "required_scopes": [
          "products:read"
        ],
        "granted_scopes": [
          "store:read"
        ]
      }
    }
  }
}