Portal Community
API endpoint: This operation calls GET /{phoneNumberId}/message_qrdls and returns all QR codes associated with the phone number. Each entry contains code, prefilled_message, and deep_link_url.

When to Use

Configuration

Connection

FieldRequiredDescription
accessTokenRequiredPermanent System User access token. Store in BizFirst Credentials Manager.
phoneNumberIdRequiredNumeric string ID of the phone number whose QR codes are listed.
apiVersionOptionalMeta Graph API version. Defaults to v18.0.

Operation

No additional operation fields are required. The listing is automatically scoped to the connection phone number ID.

Sample Configuration

{
  "resource": "qrcode",
  "operation": "list",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345"
}

Validation Errors

ErrorCause
accessToken is requiredThe accessToken field is empty.
phoneNumberId is requiredNo Phone Number ID supplied.
100 (Meta)Invalid Phone Number ID or number is not registered.
200 (Meta)Insufficient permissions to list QR codes for this number.

Output

Success Port

FieldTypeDescription
qrCodesarrayArray of QR code objects. Each contains code, prefilledMessage, and deepLinkUrl.
countnumberTotal number of QR codes returned.
statusstring"success".
rawResponsestringFull raw JSON from the Meta Graph API.

Error Port

FieldTypeDescription
statusstring"failed" or "error".
errorCodestringMeta error code or "timeout".
errorMessagestringHuman-readable error description.

Sample Output

{
  "qrCodes": [
    {
      "code": "4RNL66ENMHZJ7A1",
      "prefilledMessage": "Hi! I'd like to know more about your summer sale.",
      "deepLinkUrl": "https://wa.me/qr/4RNL66ENMHZJ7A1"
    },
    {
      "code": "7XKPQ12MNBCD3E5",
      "prefilledMessage": "I need support for product SKU-1234",
      "deepLinkUrl": "https://wa.me/qr/7XKPQ12MNBCD3E5"
    }
  ],
  "count": 2,
  "status": "success"
}

Expression Reference

ValueExpressionNotes
All QR codes{{ $output.listQr.qrCodes }}Pipe into a SplitInBatches node to process each code individually.
Total count{{ $output.listQr.count }}Compare to the Meta per-number QR code limit to detect capacity issues.
First code ID{{ $output.listQr.qrCodes[0].code }}Use when the phone number has a single primary QR code.

Node Policies & GuardRails

Policy AreaRecommendation
Credential storageStore the access token in BizFirst Credentials Manager.
QR code limitsMeta limits the number of QR codes per phone number. Run this operation weekly to track usage and clean up expired campaign codes proactively.
Error portConnect the error port. An empty qrCodes array is a valid success response (no QR codes exist yet) — do not treat it as an error.
Sync reconciliationWhen reconciling against a local database, use the code field as the primary key — it is guaranteed unique per phone number at Meta.

Examples

Campaign QR Cleanup

{
  "resource": "qrcode",
  "operation": "list",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345"
}

A post-campaign cleanup workflow lists all QR codes. A Function node filters those whose prefilledMessage contains the campaign keyword "summer sale". A SplitInBatches node iterates the filtered list and calls qr-code/delete for each expired campaign code.

QR Code Limit Alert

{
  "resource": "qrcode",
  "operation": "list",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "{{ $env.PRIMARY_PHONE_ID }}"
}

A daily monitoring workflow retrieves the QR code list. An IfCondition checks whether {{ $output.listQr.count }} exceeds 80% of the Meta limit. If so, a Slack notification is sent to the campaign team requesting cleanup of unused codes before the limit is reached.