Portal Community
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

Configuration

Connection

FieldRequiredDescription
accessTokenRequiredPermanent System User access token from Meta Business Manager. Store in BizFirst Credentials Manager and reference via {{ $credentials.whatsAppToken }}.
phoneNumberIdRequiredNumeric string ID of the WhatsApp Business phone number (e.g. 123456789012345). Used to identify the WABA context.
apiVersionOptionalMeta Graph API version, e.g. v18.0. Defaults to v18.0.

Operation

FieldRequiredDescription
catalogIdRequiredThe 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

ErrorCause
accessToken is requiredThe accessToken field is empty or missing.
catalogId is requiredThe 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.

FieldTypeDescription
successbooleantrue on the success port.
catalogIdstringThe Facebook Catalog ID as confirmed by the API.
namestringThe human-readable catalog display name as set in Meta Commerce Manager.
statusstring"success" on the success port.
errorCodestringEmpty on success.
errorMessagestringEmpty on success.
payloadstringFull 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.

FieldTypeDescription
successbooleanfalse on the error port.
statusstring"failed" or "error".
errorCodestringMeta error code or BizFirst internal validation code.
errorMessagestringHuman-readable error description.
payloadstringRaw 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

ValueExpressionNotes
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 AreaRecommendation
Credential storageAlways store the access token in BizFirst Credentials Manager. Never paste raw tokens into node configuration fields.
Catalog sync frequencyDo 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 scopeThe System User token must have catalog_management and business_management permissions. Validate permissions in Meta Business Manager before deploying commerce workflows.
Catalog ID accuracyAlways 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 handlingAlways 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 catalogsMaintain 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.