> ## Documentation Index
> Fetch the complete documentation index at: https://docs.polymorfa.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Catalogs and commerce

> Manage catalogs, products, collections, carts, orders, visibility, and appeals.

Catalog reads can target the connected account or another supported business ID. Mutations apply to the connected WhatsApp Business App account.

## Console availability

The Console shows **Catalogs** only for teams with access. If the workspace is
not in your navigation, use the API operations in this guide. Existing Catalog
API access is unchanged.

## Catalogs and products

1. [Get business catalog](/api-reference/messaging/catalog-and-commerce/get-business-catalog?playground=open) to inspect products and pagination state.
2. [Create business catalog](/api-reference/messaging/catalog-and-commerce/create-business-catalog?playground=open) if the account has no catalog.
3. [Create business product](/api-reference/messaging/catalog-and-commerce/create-business-product?playground=open) or [Update business product](/api-reference/messaging/catalog-and-commerce/update-business-product?playground=open).
4. [Delete business product](/api-reference/messaging/catalog-and-commerce/delete-business-product?playground=open) when it is no longer sold.

Updating a business product replaces the complete product. Read the current
product and resend every optional value you want to keep. Omitted descriptions,
sale prices, retailer IDs, URLs, videos, and compliance fields are removed.

### Product request rules

| Fields | Accepted input |
| - | - |
| `images[].url`, `images[].base64`, `images[].mediaUrl` | Set exactly one source on each image. Zero sources or multiple sources on one image are rejected. |
| Image payload size | Each decoded base64 image or downloaded image accepts at most 16 MiB. |
| `images[].url` | Use an HTTPS URL. |
| `images[].mediaUrl` | Use an HTTPS URL on `whatsapp.net`, `fbcdn.net`, `facebook.com`, or their subdomains. |
| `price` and `currency` | Omit both, or provide both. A product with `price` must include its three-letter uppercase `currency` code. |
| `salePrice` | Provide only when `price` is present. Because `price` requires `currency`, a discounted product includes all three fields. |
| `videoUrls` | Use HTTPS URLs on `whatsapp.net`, `fbcdn.net`, `facebook.com`, or their subdomains. |

Product `price` and `salePrice` values are digit strings scaled in thousandths
of the selected currency. For example, `"12500"` represents 12.5 currency
units (12500 / 1000). Currency codes must be consistent anywhere totals are
calculated.

## Collections

Use [List business collections](/api-reference/messaging/catalog-and-commerce/get-business-collections?playground=open) and [Get business collection](/api-reference/messaging/catalog-and-commerce/get-business-collection?playground=open) for reads.

[Create business collection](/api-reference/messaging/catalog-and-commerce/create-business-collection?playground=open), [Update business collection](/api-reference/messaging/catalog-and-commerce/update-business-collection?playground=open), and [Reorder business collections](/api-reference/messaging/catalog-and-commerce/reorder-business-collections?playground=open) control collection membership and order.

### Collection request rules

| Operation | Accepted input |
| - | - |
| Create | Provide 1 through 100 unique product IDs. |
| Update | Provide a new `name`, at least one non-empty membership list, or both. Empty updates are rejected. Each product ID can appear in only one of the add or remove lists. |
| Reorder | Provide 1 through 100 moves. Each collection ID can appear in at most one move. |

## Visibility, appeals, and carts

* [Set product visibility](/api-reference/messaging/catalog-and-commerce/set-business-product-visibility?playground=open)
* [Appeal a product](/api-reference/messaging/catalog-and-commerce/appeal-business-product?playground=open)
* [Appeal a collection](/api-reference/messaging/catalog-and-commerce/appeal-business-collection?playground=open)
* [Set cart availability](/api-reference/messaging/catalog-and-commerce/set-business-cart-enabled?playground=open)

Appeal reasons are trimmed, cannot be blank, and accept at most 4096 UTF-8
bytes.

## Orders

[Get business order](/api-reference/messaging/catalog-and-commerce/get-business-order?playground=open)
requires the order ID and encrypted order token from the incoming order message.
Send the token only in the JSON request body; never place it in a URL, query
parameter, or log. The token must be nonblank and accepts at most 8192
characters. Treat the returned currency and prices as one atomic order
snapshot.

Structured `order_details` and `order_status` sends, including Pix payment
instructions, are unavailable through Graph messaging. They return capability
error `131026` before a provider send. An incoming order or payment callback
does not establish that money settled. Use your payment provider's verified
settlement record as the authority for a paid state.

For Official API Numbers, [List linked product catalogs](/api-reference/graph/catalog-and-commerce/list-linked-product-catalogs?playground=open) reads the catalogs associated with the Number's WhatsApp Business Account. Use the WABA ID of a Number in your project and a credential with `sessions:read`. Meta controls which catalogs the connected account can see and returns its permission error if the account lacks access. Pass `paging.cursors.after` as `after` to read the next page; `limit` accepts 1 to 100 and defaults to 25.

[List linked catalog products](/api-reference/graph/catalog-and-commerce/list-linked-catalog-products?playground=open) reads product IDs, retailer IDs, names, and availability from a catalog in that WABA's linked list. Pass the WABA ID and catalog ID, with `sessions:read`. When more products exist, the response includes `paging.cursors.after`; pass it as `after` to continue. The last page has no `paging` object. `limit` accepts 1–100 and defaults to 25. Meta controls which products the connected credential can read. This read does not prove that a product can be sent or that the account can transact.

### Send catalog products

Use [Send a message](/api-reference/graph/messages/send-a-message?playground=open) with an Official API Number, a credential with `messages:write`, and Meta access to its linked catalog. Set `type` to `interactive` and `interactive.type` to `product` for one item or `product_list` for sections of items. The `catalog_id` must appear in the Number's WABA catalog list. Polymorfa checks that association before dispatch; a missing grant or incomplete catalog read stops the send. Meta validates each `product_retailer_id` and remains the authority for product availability.

```json theme={null}
{
  "messaging_product": "whatsapp",
  "to": "15551234567",
  "type": "interactive",
  "interactive": {
    "type": "product",
    "action": {
      "catalog_id": "123456789012345",
      "product_retailer_id": "YOUR_PRODUCT_SKU"
    }
  }
}
```

For `product_list`, add a text header and body, then set `action.sections` to 1–10 sections. Each section needs a `product_items` array with at least one item, and the message accepts at most 30 items across all sections; each item has a `product_retailer_id`. Give every section a title when sending multiple sections. Linked Devices and simulated Numbers cannot send catalog products. For Hybrid sends, reconcile the operation status after an uncertain response and reuse the same idempotency key. Do not replay an uncertain send with a new key.

[Get commerce settings](/api-reference/graph/catalog-and-commerce/get-commerce-settings?playground=open) and [Update commerce settings](/api-reference/graph/catalog-and-commerce/update-commerce-settings?playground=open) expose the supported Meta-compatible settings for Official API Numbers. The catalog read does not create a catalog or link one to the WABA.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.