Product · product
Portable POS product contract. externalId and name are the stable core fields; description, price, taxable, currencyCode, and categoryExternalId become important for some write targets such as Lightspeed R-Series, Square, and Clover.
Entity type:
product· Methods: GET · POST
Portable POS product contract. externalId and name are the stable core fields; description, price, taxable, currencyCode, and categoryExternalId become important for some write targets such as Lightspeed R-Series, Square, and Clover.
Endpoints
GET /unified/{accountId}/product # List normalized product records
POST /unified/{accountId}/product # Create / push one productSchema
| Field | Type | Required | Description |
|---|---|---|---|
externalId | string | Yes | Stable product identifier. Used as the idempotency key on writes. |
name | string | Yes | Primary sellable product name. |
description | string | — | Human-readable product description or long description. |
sku | string | — | Primary SKU or item code. |
barcode | string | — | Primary barcode / UPC / EAN / product code. |
price | number | — | Primary sell price in major currency units. |
cost | number | — | Primary unit cost in major currency units. |
active | boolean | — | Whether the product is active / available. |
taxable | boolean | — | Whether the product is taxable when the target requires that flag. |
stockOnHand | integer | — | Primary on-hand stock quantity when available. |
categoryExternalId | string | — | Source or mapped category / group identifier used by some targets. |
categoryName | string | — | Human-readable category / product type name. |
vendor | string | — | Vendor / manufacturer / brand label when present. |
tags | string[] | — | Searchable tags or labels. |
imageUrl | string · URL | — | Primary product image URL. |
currencyCode | string · ISO 4217 | — | 3-letter currency code. Needed by some write targets such as Square. |
Example object
{
"externalId": "prd_tee_black_m",
"name": "Organic Tee — Black / M",
"description": "100% organic cotton, garment dyed.",
"sku": "TEE-BLK-M",
"barcode": "840000012345",
"price": 32,
"cost": 11.4,
"active": true,
"taxable": true,
"stockOnHand": 142,
"categoryExternalId": "cat_apparel",
"categoryName": "Apparel",
"vendor": "Drift Basics",
"tags": [
"organic",
"core"
],
"currencyCode": "USD"
}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
curl "https://dev.flow.staging.linktoany.com/api/1.0/standalone-link-engine-service/unified/{accountId}/product?mappingKey={readKey}&pageSize=50" \
-H "authorization: Bearer <token>"curl -X POST "https://dev.flow.staging.linktoany.com/api/1.0/standalone-link-engine-service/unified/{accountId}/product?mappingKey={writeKey}" \
-H "authorization: Bearer <token>" \
-H "content-type: application/json" \
-d '{"externalId":"prd_tee_black_m","name":"Organic Tee — Black / M","description":"100% organic cotton, garment dyed.","sku":"TEE-BLK-M","barcode":"840000012345","price":32,"cost":11.4,"active":true,"taxable":true,"stockOnHand":142,"categoryExternalId":"cat_apparel","categoryName":"Apparel","vendor":"Drift Basics","tags":["organic","core"],"currencyCode":"USD"}'Supported systems
| System | Read | Write | Auth | Rate limit |
|---|---|---|---|---|
| Shopify | Yes | Yes | OAuth 2.0 | 1 req / s |
| Lightspeed X-Series | Yes | Yes | OAuth 2.0 | 10 req / s · 100 req / min |
| Lightspeed R-Series | Yes | Yes | OAuth 2.0 | 1 req / 10s |
| Square | Yes | Yes | OAuth 2.0 | 5 req / s |
| Clover (Asia Pacific) | Yes | Yes | API token | 10 req / s · 100 req / min |
Order · order
Portable POS order contract with source order identity, status, party references, and normalized line items. currencyCode and locationExternalId matter when targeting Square; lineItems[].productExternalId matters when targeting Lightspeed X-Series sales.
Restaurant
Menu, customer, order, and labor entities normalized across restaurant platforms — Square, Toast, Clover, and Lightspeed K-Series.