Facebook Catalog context: WhatsApp Commerce operations work with a Facebook Catalog managed through Meta Business Manager. The catalogId is the numeric ID of the catalog shown under Commerce Manager > Catalog in Meta Business Suite.
When to Use
- Catalog linkage verification: A pre-flight check workflow calls this node before a nightly product sync to confirm that the correct Facebook Catalog is still linked to the WABA, preventing products from being pushed to the wrong catalog after a Business Manager reconfiguration.
- Multi-tenant storefronts: A SaaS platform with multiple merchant WABAs runs this node per merchant on startup to resolve each merchant's catalog ID and cache it, avoiding hard-coded IDs in product sync workflows.
- Post-onboarding validation: An onboarding workflow calls this node after a merchant connects their Meta account to confirm the catalog integration succeeded before enabling the commerce channel in the merchant dashboard.
- Audit and reporting: A weekly audit workflow calls this node to log catalog name and ID into a reporting table, providing a historical record that can detect unexpected catalog replacements.
- Error diagnostics: When a product message fails with an unknown catalog error, a support workflow calls this node to confirm whether the catalog ID stored in the workflow configuration still matches the catalog visible in Business Manager.
Configuration
Connection
| Field | Required | Description |
accessToken | Required | Permanent System User access token from Meta Business Manager. Store in BizFirst Credentials Manager and reference via {{ $credentials.whatsAppToken }}. |
phoneNumberId | Required | Numeric string ID of the WhatsApp Business phone number (e.g. 123456789012345). Used to identify the WABA context. |
apiVersion | Optional | Meta Graph API version, e.g. v18.0. Defaults to v18.0. |
Operation
| Field | Required | Description |
catalogId | Required | The numeric Facebook Catalog ID to retrieve. Found in Meta Commerce Manager under Catalog > Settings > Catalog ID (e.g. 987654321098765). |
Sample Configuration
{
"resource": "commerce",
"operation": "getCatalog",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"catalogId": "987654321098765"
}
Validation Errors
| Error | Cause |
accessToken is required | The accessToken field is empty or missing. |
catalogId is required | The catalogId field is empty or missing. |
100 (Meta) | Invalid catalog ID — the ID does not exist or the System User does not have access to it. |
200 (Meta) | Permissions error — the access token lacks catalog_management permission in Meta Business Manager. |
190 (Meta) | Access token is expired or has been revoked. Rotate the token in Meta Business Manager and update the credential. |
Output
Success Port
Fires when the Meta Graph API returns catalog data. The catalogId and name fields confirm the catalog is reachable and correctly linked.
| Field | Type | Description |
success | boolean | true on the success port. |
catalogId | string | The Facebook Catalog ID as confirmed by the API. |
name | string | The human-readable catalog display name as set in Meta Commerce Manager. |
status | string | "success" on the success port. |
errorCode | string | Empty on success. |
errorMessage | string | Empty on success. |
payload | string | Full raw JSON response from the Meta Graph API. |
Error Port
Fires when the API call fails due to an invalid catalog ID, insufficient permissions, or network error.
| Field | Type | Description |
success | boolean | false on the error port. |
status | string | "failed" or "error". |
errorCode | string | Meta error code or BizFirst internal validation code. |
errorMessage | string | Human-readable error description. |
payload | string | Raw API error response for diagnostics. |
Sample Output
{
"success": true,
"catalogId": "987654321098765",
"name": "BizFirst Retail Catalog",
"status": "success",
"errorCode": "",
"errorMessage": "",
"payload": "{\"id\":\"987654321098765\",\"name\":\"BizFirst Retail Catalog\"}"
}
Expression Reference
| Value | Expression | Notes |
| Catalog ID | {{ $output.getCatalog.catalogId }} | Use in downstream product sync nodes as the catalogId parameter. |
| Catalog name | {{ $output.getCatalog.name }} | Display in audit logs or workflow status messages to confirm which catalog is active. |
| Status | {{ $output.getCatalog.status }} | Use in an IfCondition node to gate the rest of the workflow on successful catalog resolution. |
| Error code | {{ $output.getCatalog.errorCode }} | Non-empty on error port. Log to a monitoring node or alert workflow. |
| Full API response | {{ $output.getCatalog.payload }} | Raw JSON string. Use a JsonTransform node to extract additional fields if Meta adds new properties. |
Node Policies & GuardRails
| Policy Area | Recommendation |
| Credential storage | Always store the access token in BizFirst Credentials Manager. Never paste raw tokens into node configuration fields. |
| Catalog sync frequency | Do not call this node more than once per minute for the same catalog. Cache the catalog ID result in a workflow variable for the duration of a sync run rather than calling it repeatedly inside a loop. |
| Permission scope | The System User token must have catalog_management and business_management permissions. Validate permissions in Meta Business Manager before deploying commerce workflows. |
| Catalog ID accuracy | Always resolve catalog IDs dynamically using this node rather than hard-coding them in workflow configurations. Catalogs can be deleted and recreated with new IDs after Business Manager changes. |
| Error port handling | Always connect the error port to a logging node. A missing catalog silently blocks all downstream product operations if the error is not caught early. |
| Multi-environment catalogs | Maintain separate catalog IDs for staging and production environments. Use environment-specific credential sets to prevent staging products from appearing in production catalogs. |
Examples
Pre-flight Catalog Validation Before Product Sync
{
"resource": "commerce",
"operation": "getCatalog",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"catalogId": "{{ $env.CATALOG_ID }}"
}
A scheduled sync workflow calls this node first. An IfCondition node checks {{ $output.getCatalog.status }} === "success" before proceeding to the product upload steps. If the catalog is unreachable, the workflow routes to an alert node that notifies the commerce team via Slack.
Dynamic Catalog ID Resolution for Multi-Tenant Platform
{
"resource": "commerce",
"operation": "getCatalog",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "{{ $input.merchantPhoneNumberId }}",
"catalogId": "{{ $input.merchantCatalogId }}"
}
In a multi-merchant SaaS platform, each merchant's catalog ID is stored in the tenant configuration table. This node verifies the catalog is still valid at the start of each merchant's sync job. The resolved catalogId and name are stored as workflow variables and used throughout the downstream product management nodes.
Catalog Audit Logging
{
"resource": "commerce",
"operation": "getCatalog",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"catalogId": "987654321098765"
}
A weekly audit workflow runs this node for each connected WABA and writes the result to a database table with a timestamp. The audit log detects unexpected catalog name changes or ID rotations that may indicate a Business Manager configuration issue. Compare {{ $output.getCatalog.name }} against the expected catalog name stored in the system to trigger an alert on mismatch.