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
- Campaign QR inventory audit: A monthly audit workflow lists all QR codes for the phone number and reconciles them against the campaign database to identify orphaned or outdated codes for cleanup.
- Bulk prefilled message review: A content compliance workflow lists all QR codes and checks each prefilled message for prohibited keywords or expired offer text.
- QR code limit monitoring: Meta imposes a limit on QR codes per phone number. A daily check workflow lists all codes and alerts the team when approaching the limit so they can clean up unused ones.
- Campaign teardown: At the end of a campaign season, a cleanup workflow retrieves all codes, filters for those with campaign-specific text, and deletes them via
qr-code/delete.
- Database synchronisation: A sync workflow lists all QR codes from Meta and reconciles them against the internal QR code table, adding missing records and flagging codes that exist at Meta but not locally.
Configuration
Connection
| Field | Required | Description |
accessToken | Required | Permanent System User access token. Store in BizFirst Credentials Manager. |
phoneNumberId | Required | Numeric string ID of the phone number whose QR codes are listed. |
apiVersion | Optional | Meta 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
| Error | Cause |
accessToken is required | The accessToken field is empty. |
phoneNumberId is required | No 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
| Field | Type | Description |
qrCodes | array | Array of QR code objects. Each contains code, prefilledMessage, and deepLinkUrl. |
count | number | Total number of QR codes returned. |
status | string | "success". |
rawResponse | string | Full raw JSON from the Meta Graph API. |
Error Port
| Field | Type | Description |
status | string | "failed" or "error". |
errorCode | string | Meta error code or "timeout". |
errorMessage | string | Human-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
| Value | Expression | Notes |
| 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 Area | Recommendation |
| Credential storage | Store the access token in BizFirst Credentials Manager. |
| QR code limits | Meta limits the number of QR codes per phone number. Run this operation weekly to track usage and clean up expired campaign codes proactively. |
| Error port | Connect 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 reconciliation | When 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.