Skip to content

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/single

Authentication: OAuth Token (service_account or user)

Permission: rorcex:products.view

Request Query Parameters

FieldTypeRequiredDescription
store_org_idstringYesTarget store organization hashkey (org_[A-Za-z0-9]{11}). Must be within the caller's org scope.
product_codestringNo*Product code to look up. Mutually exclusive with item_code.
item_codestringNo*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/lookup

Authentication: OAuth Token (service_account or user)

Permission: rorcex:products.view

Request Query Parameters

FieldTypeRequiredDescription
store_org_idstringYesTarget store organization hashkey.
codesstringYesCSV 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/changes

Authentication: OAuth Token (service_account or user)

Permission: rorcex:products.view

Request Query Parameters

FieldTypeRequiredDescription
store_org_idstringYesTarget store organization hashkey.
fromstringNoStart of date range (Y-m-d), inclusive.
tostringNoEnd of date range (Y-m-d), inclusive.
offsetintegerNoPagination offset. Must be ≥ 0. Defaults to 0.
limitintegerNoPage 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
DateChange
2026-06-11Initial publication.

ShopHero CommerceCore Platform