API endpoint: This operation calls GET /{qrCodeId} on the Meta Graph API and returns the full details for the specified QR code. The qrCodeId is the code string returned when the QR code was created.
When to Use
- Campaign asset retrieval: A print production workflow retrieves the QR code details and image URL for a specific campaign code stored in the database, then feeds it to a PDF generation node for inclusion in the finished artwork.
- QR code audit: A compliance workflow retrieves each QR code by its stored code ID to confirm the prefilled message content is still appropriate and has not been modified externally.
- Deep link reconstruction: A web portal workflow retrieves the QR code's
deepLinkUrl to display a live WhatsApp chat button for a specific campaign without storing the URL locally.
- Pre-update verification: Before calling
qr-code/update, a workflow retrieves the current prefilled message to confirm whether an update is actually needed, avoiding unnecessary API calls.
- Image URL refresh: Since image URLs may expire, a periodic workflow retrieves each QR code and checks whether the
qrImageUrl is still reachable, triggering a refresh if not.
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 that owns this QR code. |
apiVersion | Optional | Meta Graph API version. Defaults to v18.0. |
Operation
| Field | Required | Description |
qrCodeId | Required | The QR code identifier (the code string returned by qr-code/create). |
Sample Configuration
{
"resource": "qrcode",
"operation": "get",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"qrCodeId": "{{ $input.qrCode }}"
}
Validation Errors
| Error | Cause |
accessToken is required | The accessToken field is empty. |
phoneNumberId is required | No Phone Number ID supplied. |
qrCodeId is required | No QR code identifier provided. |
100 (Meta) | QR code not found — the code identifier does not exist or has been deleted. |
200 (Meta) | Insufficient permissions to read this QR code. |
Output
Success Port
| Field | Type | Description |
code | string | The QR code identifier. |
prefilledMessage | string | The prefilled message text currently stored for this QR code. |
deepLinkUrl | string | The https://wa.me/qr/{code} deep link URL. |
qrImageUrl | string | Hosted URL of the QR code image. May be null if no image was generated. |
status | string | "success". |
rawResponse | string | Full raw JSON from the Meta Graph API. |
Error Port
| Field | Type | Description |
code | string | The QR code identifier echoed from input. |
status | string | "failed" or "error". |
errorCode | string | Meta error code or "timeout". |
errorMessage | string | Human-readable error description. |
Sample Output
{
"code": "4RNL66ENMHZJ7A1",
"prefilledMessage": "Hi! I'd like to know more about your summer sale.",
"deepLinkUrl": "https://wa.me/qr/4RNL66ENMHZJ7A1",
"qrImageUrl": "https://scontent.whatsapp.net/v/qr/4RNL66ENMHZJ7A1.png",
"status": "success"
}
Expression Reference
| Value | Expression | Notes |
| Prefilled message | {{ $output.getQr.prefilledMessage }} | Compare against expected text to detect unauthorised modifications. |
| Deep link URL | {{ $output.getQr.deepLinkUrl }} | Use dynamically in web pages or emails to display an up-to-date chat link. |
| QR image URL | {{ $output.getQr.qrImageUrl }} | Use as an image source in print PDFs or marketing emails. |
Node Policies & GuardRails
| Policy Area | Recommendation |
| Credential storage | Store the access token in BizFirst Credentials Manager. |
| Image URL persistence | QR image URLs may not be permanent. Download the image to your own CDN storage on creation rather than relying on qrImageUrl long-term. |
| Error port | Connect the error port. A 100 not-found error is expected if the QR code has been deleted — handle this case in the error branch to avoid downstream failures. |
| Rate limiting | Do not query individual QR codes in a tight loop. Use qr-code/getMany to retrieve all codes at once if auditing more than a handful. |
Examples
Campaign Asset Retrieval for Print
{
"resource": "qrcode",
"operation": "get",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"qrCodeId": "{{ $input.campaignQrCode }}"
}
A print production workflow queries the QR code details for a campaign stored in the database. The qrImageUrl is passed to a PDF builder node which embeds it in the print layout. The deepLinkUrl is added as a hyperlink to the digital version of the same document.
Pre-Update Content Check
{
"resource": "qrcode",
"operation": "get",
"accessToken": "{{ $credentials.whatsAppToken }}",
"phoneNumberId": "123456789012345",
"qrCodeId": "{{ $item.qrCode }}"
}
Before a scheduled message refresh, this node retrieves the current prefilled text. An IfCondition compares {{ $output.getQr.prefilledMessage }} against the new intended message — if they match, the update is skipped. If different, the workflow proceeds to qr-code/update.