Appearance
Products
The Products API provides live read access to product lookups and retail price change history for a single store, proxied directly from the RORC lane. All endpoints require an active RORCex install for the target store and are subject to lane availability.
Look Up a Single Product
Retrieve a single product or item by its code. Exactly one of product_code or item_code must be supplied. Results are cached for 5 minutes.
GET /v1/products/lookup/singleAuthentication: OAuth Token (service_account or user)
Permission: rorcex:products.view
Request Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
store_org_id | string | Yes | Target store organization hashkey (org_[A-Za-z0-9]{11}). Must be within the caller's org scope. |
product_code | string | No* | Product code to look up. Mutually exclusive with item_code. |
item_code | string | No* | Item (UPC/barcode) code to look up. Mutually exclusive with product_code. |
*Exactly one of product_code or item_code is required.
Response
json
{
"store_org_id": "org_00000k1L2m3N4o5",
"kind": "product",
"data": {
"productCode": "100",
"itemDescription": "WRAPPED CANDY",
"posDescription": "WRAPPED CANDY",
"departmentCode": "045",
"departmentDescription": "CANDY",
"categoryCode": null,
"categoryDescription": null,
"brandName": null,
"unitOfMeasureCode": "EA",
"retailPack": 1,
"unitSize": 1,
"foodStampEligible": true,
"wicEligible": false,
"taxPlans": ["01"],
"retails": [],
"premiums": [],
"currentCost": 0,
"currentCostEffectiveDate": null,
"averageCost": 0,
"lastReceivedCost": 0,
"lastReceivedDate": null
}
}Status: 200 OK
The kind field indicates whether the match was resolved as a product or item. The product object is returned in camelCase, abridged above — the full record carries ~50 fields including merchandising attributes, eligibility flags (foodStampEligible, wicEligible), scale/tare configuration, the retails[] price-tier array, and the premiums[] promotion array. Responses are cached for 5 minutes.
Errors
See Errors for authentication, authorization, upstream proxy, and store_not_found error shapes.
Look Up Multiple Products
Retrieve multiple products by a CSV list of codes. Results are cached for 5 minutes.
GET /v1/products/lookupAuthentication: OAuth Token (service_account or user)
Permission: rorcex:products.view
Request Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
store_org_id | string | Yes | Target store organization hashkey. |
codes | string | Yes | CSV list of product codes to look up. Total length must not exceed 4096 characters. Codes are normalized (trimmed, deduplicated, sorted) before the request is forwarded to the lane. |
Response
json
{
"store_org_id": "org_00000k1L2m3N4o5",
"data": [
{
"productCode": "100",
"itemDescription": "WRAPPED CANDY",
"posDescription": "WRAPPED CANDY",
"departmentCode": "045",
"departmentDescription": "CANDY",
"unitOfMeasureCode": "EA",
"retailPack": 1,
"taxPlans": ["01"],
"retails": [],
"premiums": [],
"currentCost": 0,
"lastReceivedDate": null
}
]
}Status: 200 OK
Each row is the same camelCase product object returned by the single lookup (abridged above; the full record carries ~50 fields). Responses are cached for 5 minutes.
Errors
See Errors for authentication, authorization, upstream proxy, and store_not_found error shapes.
Retail Price Changes
Return a paged list of retail price change records within an optional date range.
GET /v1/products/retails/changesAuthentication: OAuth Token (service_account or user)
Permission: rorcex:products.view
Request Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
store_org_id | string | Yes | Target store organization hashkey. |
from | string | No | Start of date range (Y-m-d), inclusive. |
to | string | No | End of date range (Y-m-d), inclusive. |
offset | integer | No | Pagination offset. Must be ≥ 0. Defaults to 0. |
limit | integer | No | Page size. Must be between 1 and 500. Defaults to 100. |
Response
json
{
"store_org_id": "org_00000k1L2m3N4o5",
"data": [],
"total": 0,
"offset": null,
"limit": null
}Status: 200 OK
This is a paged envelope; data holds camelCase retail price-change records and total the full match count (the lane does not echo pagination cursors, so offset / limit are null). The validation lane returned no price-change rows for the queried range, so a populated row sample is not shown here.
Errors
See Errors for authentication, authorization, upstream proxy, and store_not_found error shapes.
Changelog
| Date | Change |
|---|---|
| 2026-06-11 | Initial publication. |