Skip to content
InfiQ glossary · Reference sheetCommerce & payments

Product Retailer ID

The ID a business gives each catalogue item (its content ID, usually the SKU), used by WhatsApp product messages and order webhooks to name a product.

Properties

Term
Product Retailer ID
Abbreviation
None
Level
Expert
Audience
Developers
Reviewed
Also called
product_retailer_id · Retailer ID · Content ID · retailer_id · Product SKU

01 · Definition

What is the product retailer ID?

The product retailer ID (product_retailer_id) is the identifier a business assigns to each item in the catalogue behind its WhatsApp catalog. Meta Commerce Manager shows it as the item's content ID, a product feed carries it in the id column, and the Catalog API calls it retailer_id; Meta recommends using your own SKU. On the WhatsApp Business Platform the same value appears as product_retailer_id — the field you put in a message to say which product to show, and the field WhatsApp sends back when a customer asks about or orders that product.

It is not the long numeric ID Meta assigns to every catalogue item, and it is not the catalog_id. Messages always pair the two: catalog_id says which catalogue, product_retailer_id says which item in it. A single-product message sends one in action.product_retailer_id, a multi-product message lists one per item in sections[].product_items, a single-product template takes the pair in a product header parameter, and a multi-product template lists IDs in its MPM button's action.sections at send time. If the pair matches no item in the connected catalogue, the API returns an error and nothing is sent.

On the way back the ID appears in two kinds of inbound payload on the messages webhook. An order message, the in-chat cart a customer sends, lists order.product_items[], each with product_retailer_id, quantity, item_price and currency. A text message the customer sends by tapping Message business on a product carries context.referred_product with the catalog_id and product_retailer_id of the item they were viewing. Because the business chose the ID, both payloads map straight onto its own stock, pricing and order records — as long as the ID never changes.

Key takeaways

  • The product retailer ID is the business's own ID for a catalogue item, its content ID and usually its SKU, not Meta's numeric item ID.
  • Every product message pairs catalog_id with product_retailer_id; an unknown ID makes a single-product send fail and is dropped from a multi-product list.
  • Order webhooks list product_retailer_id, quantity, item_price and currency per item, so a stable SKU maps orders straight onto stock.
  • Give each purchasable variant its own ID and never re-key the catalogue, or saved campaigns and in-flight carts stop resolving.

See InfiQ pricing

02 · Specifications

The product retailer ID: key facts and limits

Field in messages and webhooksproduct_retailer_id
Name in Commerce ManagerContent ID (feed column id)
Recommended valueYour SKU, one per purchasable variant
LengthUp to 100 characters (Meta feed spec)
UniquenessWithin one catalogue — always paired with catalog_id
Catalogues per WABA1, shared by its phone numbers
Returned inorder.product_items[] and context.referred_product

03 · Operation

How does the product retailer ID work?

  1. Assign the ID when the item is created

    Every item added in Commerce Manager, through a data feed or with the Catalog API gets a retailer ID. Use the SKU: unique within the catalogue, up to 100 characters in Meta's feed spec, and never reused for a different product.

  2. Connect the catalogue to the WhatsApp Business Account

    A WhatsApp Business Account can have only one catalogue connected, though that catalogue can serve several of its phone numbers. Every product_retailer_id you send resolves against that one catalogue.

  3. Reference it when you send

    Interactive product and product_list messages carry catalog_id plus one or more product_retailer_id values. A single-product template receives the pair in a product parameter of its header; a multi-product template takes the IDs, plus a thumbnail_product_retailer_id, in its MPM button's action.

  4. Read it back from webhooks

    Orders arrive as messages with type: "order" and order.product_items[].product_retailer_id; product enquiries arrive as text messages with context.referred_product.product_retailer_id.

  5. Join it to your own records

    Look the ID up in your product table, keyed by catalog_id and retailer ID, to check stock, re-price from your source of truth, route the chat to the right team and create the order.

04 · Code samples

The product retailer ID in code

curl -X POST "https://graph.facebook.com/v26.0/{PHONE_NUMBER_ID}/messages" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "919812345678",
"type": "interactive",
"interactive": {
"type": "product_list",
"header": { "type": "text", "text": "Kurtas in your size" },
"body": { "text": "Both colours are back in M." },
"action": {
"catalog_id": "{CATALOG_ID}",
"sections": [
{
"title": "Cotton kurtas",
"product_items": [
{ "product_retailer_id": "KUR-CHK-BLU-M" },
{ "product_retailer_id": "KUR-CHK-GRN-M" }
]
}
]
}
}
}'

A multi-product message: `catalog_id` once, then one `product_retailer_id` per item. Use your SKU, never Meta's numeric item ID.

05Playground

A working model of Product Retailer ID. Use its controls to replay it step by step.

Route product enquiries by their retailer ID

8 / 8

Only agents with the required skill are eligible; the least busy of them wins.

Incoming · 0 left

  1. All 8 conversations have been routed.

Conversation 8 of 8 · Skills-based

No referred_productgoes toFarah

No skill needed, so the least-busy agent, Farah, takes it.

  • Meera

    3 of 3 open

    Full
    • Sarees
    1. SAR-KAN-014needs Sarees
    2. SAR-BAN-002needs Sarees
    3. SAR-CHN-031needs Sarees
  • Arjun

    2 of 2 open

    Full
    • Kurtas
    1. KUR-CHK-BLU-Mneeds Kurtas
    2. KUR-LIN-WHT-Lneeds Kurtas
  • Farah

    2 of 2 open

    Full
    • Footwear
    • Kurtas
    1. JUT-MOJ-07needs Footwear
    2. No referred_product

Waiting · 1

  1. 88231 (old feed ID)needs Unmapped ID
Same 8 conversations, each strategy
StrategyRoutedWaitingSkill mismatches
Skills-based710
Round-robin713
Each enquiry from a product message carries the product_retailer_id of the item in context.referred_product. Step through skills-based routing by ID prefix, then switch to round-robin to see what ignoring the ID costs.

Conversation 8 of 8, No referred_product: No skill needed, so the least-busy agent, Farah, takes it.

06 · Worked example: A re-keyed catalogue in Surat

Example: A re-keyed catalogue in Surat

An ethnic-wear seller in Surat moves its online store to a new platform, and the new feed exports numeric IDs instead of the old style-colour-size SKUs. Overnight, every multi-product message saved in its campaign tool fails with a product-not-found error, and carts from messages sent the day before list IDs its warehouse system cannot match. The fix is to set the feed's id back to the SKU and keep a temporary old-to-new map in the order handler, so in-flight carts still resolve while the catalogue settles.

07 · Cautions

Common mistakes with the product retailer ID

  • Sending Meta's item ID instead

    The long number in a Commerce Manager item URL is Meta's own object ID. Messages expect the retailer ID you assigned; send the other one and the API reports that no matching product exists.

  • Re-keying the catalogue

    A platform migration or feed rebuild that generates new IDs breaks saved campaigns, template sends and carts already in customers' chats. Keep IDs stable, and if a change is unavoidable, map old IDs to new ones in your order handler for a transition period.

  • One ID for several variants

    If every size of a kurta shares one retailer ID, the order webhook cannot tell M from L. Give each purchasable variant its own ID and group variants with the feed's item_group_id instead.

  • Trusting the webhook price

    item_price reflects the catalogue when the cart was built, and catalogues can lag your store. Re-price and check stock from your own records before you ask for payment.

  • Case and whitespace drift

    Treat the ID as an exact string. A spreadsheet export that lower-cases values or adds a trailing space creates IDs that look identical to a person but match nothing; normalise them at export time.

08 · Rationale

Why does the product retailer ID matter?

The retailer ID is the join key between WhatsApp and the rest of your commerce stack. Make it your stable SKU, the same value your website, ads events and warehouse use, and every order webhook and product enquiry lands on the right stock record, price and team without a lookup table. Let it drift when a feed is rebuilt and carts start arriving that name products your systems have never heard of.

09 · Recommended practice

Best practices for the product retailer ID

  • Use the same value as content_ids in your Meta Pixel and Conversions API events, so ads and WhatsApp share one product identity.
  • Prefer readable, structured SKUs such as line-style-colour-size: logs, alerts and routing rules become legible at a glance.
  • Store catalog_id with every order so a later catalogue switch never orphans your order history.
  • Route product enquiries by the ID's product line — the chat already says which item the customer means.

10 · Questions and answers

Product Retailer ID FAQs

Is the product retailer ID the same as the SKU?
Usually, but only because businesses choose it that way: it is whatever you set as the item's content ID. Meta recommends the SKU, and any stable value that is unique within the catalogue works.
Where do I find an item's retailer ID?
In Commerce Manager, look for the item's content ID. In a product feed it is the id column, and through the Catalog API it is the product item's retailer_id field.
What happens if I send an ID that is not in the catalogue?
A single-product message fails with an error and is not sent. In a multi-product message, unmatched items are left out of the list and the rest can still go out; if none match, the send fails. Either way, treat the error as a sign your sender and catalogue have drifted apart.
Can two catalogues use the same retailer ID?
Yes. Uniqueness is only required within one catalogue, which is why every message and webhook pairs product_retailer_id with catalog_id.
Why does the API say my product does not exist?
Almost always because the ID and catalogue do not match. Check that you sent your own retailer ID rather than Meta's numeric item ID, that catalog_id is the catalogue connected to this WhatsApp Business Account, and that the string matches exactly, including case and trailing spaces.

Put Product Retailer ID to work

InfiQ is an official Meta Business Partner. Start a 7-day free trial — no card needed — and see this running on your own number.