Flow Unified API
API ReferenceRestaurant

Product · product

Portable restaurant product contract. externalId and name are the stable base fields. categoryExternalId is especially important for Clover targets, where item-group mapping is required.

Entity type: product · Methods: GET · POST

Portable restaurant product contract. externalId and name are the stable base fields. categoryExternalId is especially important for Clover targets, where item-group mapping is required.

Endpoints

GET  /unified/{accountId}/product  # List normalized product records
POST /unified/{accountId}/product  # Create / push one product

Schema

FieldTypeRequiredDescription
externalIdstringYesStable source product / item identifier. Used as the idempotency key on writes.
namestringYesPrimary menu item / product name.
descriptionstringOptional long or alternate description.
skustringPrimary SKU / PLU / product code.
barcodestringBarcode / UPC / external item code.
pricenumberPrimary sell price in major currency units.
costnumberUnit cost in major currency units when available.
activebooleanWhether the product is available / active.
taxablebooleanWhether default taxes should apply.
categoryExternalIdstringSource category / menu group identifier. Required by Clover targets.
trackInventorybooleanWhether the source item tracks inventory.
stockOnHandintegerOn-hand stock quantity when available.
currencyCodestring · ISO 42173-letter currency code when available.
priceTypeenumPrice type when known. Values: FIXED, VARIABLE, PER_UNIT.

Example object

{
  "externalId": "itm_smash_burger",
  "name": "Smash Burger",
  "description": "Double patty, american cheese, house sauce.",
  "sku": "BRG-001",
  "price": 14.5,
  "active": true,
  "taxable": true,
  "categoryExternalId": "cat_burgers",
  "currencyCode": "USD",
  "priceType": "FIXED"
}

The same shape is used as the POST request body and returned by GET reads — reads from every connected system are normalized to it.

Requests

pull product
curl "https://api.linktoany.com/unified/{accountId}/product?pageSize=10" \
  -H "accept: application/json" \
  -H "authorization: Bearer ak_<your_api_key>"
pull product · SDK
const page = await client.records.list(accountId, 'product', {
  pageSize: 10,
});

for (const product of page.data) {
  console.log(product);
}

// Or walk every page — the SDK follows the cursor for you
for await (const product of client.records.iterate(accountId, 'product')) {
  await save(product);
}
push product
curl -X POST "https://api.linktoany.com/unified/{accountId}/product" \
  -H "accept: application/json" \
  -H "authorization: Bearer ak_<your_api_key>" \
  -H "content-type: application/json" \
  -d '{"externalId":"itm_smash_burger","name":"Smash Burger","description":"Double patty, american cheese, house sauce.","sku":"BRG-001","price":14.5,"active":true,"taxable":true,"categoryExternalId":"cat_burgers","currencyCode":"USD","priceType":"FIXED"}'
push product · SDK
await client.records.create(accountId, 'product', {
  externalId: 'itm_smash_burger',
  name: 'Smash Burger',
  description: 'Double patty, american cheese, house sauce.',
  sku: 'BRG-001',
  price: 14.5,
  active: true,
  taxable: true,
  categoryExternalId: 'cat_burgers',
  currencyCode: 'USD',
  priceType: 'FIXED'
});

Supported systems

SystemReadWriteAuthRate limit
SquareYesOAuth 2.05 req / s
Clover (Asia Pacific)YesYesAPI token10 req / s · 100 req / min
Clover (US)YesYesAPI token10 req / s · 100 req / min
Lightspeed K-SeriesYesOAuth 2.0100 req / 60s

On this page