Portal Community
Deep link and image returned: This operation calls POST /{phoneNumberId}/message_qrdls and returns a QR code identifier (code), a deep_link_url (the https://wa.me/... link equivalent), and optionally a qr_image_url pointing to a hosted PNG. Set generateQrImage to true to receive the image URL.

When to Use

Configuration

Connection

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

Operation

FieldRequiredDescription
prefilledMessageRequiredText that will be pre-populated in the user's WhatsApp message field when they scan the QR code. Max 512 characters.
generateQrImageOptionalImage format for the QR code image. Set to PNG or SVG to receive a qrImageUrl. Defaults to PNG if omitted.

Sample Configuration

{
  "resource": "qrcode",
  "operation": "create",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345",
  "prefilledMessage": "Hi! I'd like to know more about your summer sale.",
  "generateQrImage": "PNG"
}

Validation Errors

ErrorCause
accessToken is requiredThe accessToken field is empty.
phoneNumberId is requiredNo Phone Number ID supplied.
prefilledMessage is requiredNo prefilled message text was provided.
prefilledMessage too longThe message text exceeds 512 characters.
100 (Meta)Invalid Phone Number ID or the number is not registered.
200 (Meta)Insufficient permissions to create QR codes for this number.

Output

Success Port

FieldTypeDescription
codestringUnique identifier for this QR code. Use this code in qr-code/get, update, and delete.
prefilledMessagestringThe prefilled message text stored against this QR code.
deepLinkUrlstringThe https://wa.me/qr/{code} URL that opens WhatsApp when tapped on mobile.
qrImageUrlstringHosted URL of the QR code PNG/SVG image. Present when generateQrImage was set.
statusstring"created".
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

{
  "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": "created",
  "rawResponse": "{\"code\":\"4RNL66ENMHZJ7A1\",\"prefilled_message\":\"Hi!...\",\"deep_link_url\":\"https://wa.me/qr/4RNL66ENMHZJ7A1\",\"qr_image_url\":\"https://scontent.whatsapp.net/v/qr/4RNL66ENMHZJ7A1.png\"}"
}

Expression Reference

ValueExpressionNotes
QR code identifier{{ $output.createQr.code }}Store this for later update and delete operations.
Deep link URL{{ $output.createQr.deepLinkUrl }}Embed in emails, PDFs, or websites as a tap-to-chat link for mobile users.
QR image URL{{ $output.createQr.qrImageUrl }}Use as the src of an <img> tag in marketing email templates or pass to a PDF generation node.
Prefilled message{{ $output.createQr.prefilledMessage }}Confirm the prefilled text matches the campaign intent before storing the QR asset.

Node Policies & GuardRails

Policy AreaRecommendation
Credential storageStore the access token in BizFirst Credentials Manager.
QR code inventoryStore the returned code value in your database immediately. It is the only way to update or delete the QR code later. Meta does not provide a lookup by prefilled message text.
Message contentKeep prefilled messages short and generic. Do not include personalised customer data (names, account numbers) in prefilled messages — QR codes are static and visible to all scanners.
Image URL expiryThe qrImageUrl may have a limited validity window. Download and host the image in your own storage immediately if you need a permanent reference.
Cleanup unused codesUse qr-code/delete to remove QR codes when a campaign ends. Unused QR codes still consume quota against the phone number's QR code limit.

Examples

Campaign QR Code Generation with Image

{
  "resource": "qrcode",
  "operation": "create",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345",
  "prefilledMessage": "Hi, I'm interested in the {{ $input.campaignName }} offer.",
  "generateQrImage": "PNG"
}

A campaign launch workflow creates a QR code per campaign. The qrImageUrl is passed to a CDN upload node that hosts it as a permanent asset. The code and deepLinkUrl are stored in the campaigns database. The qrImageUrl is embedded in a Mailchimp template for the campaign email.

Product-Specific Support QR

{
  "resource": "qrcode",
  "operation": "create",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345",
  "prefilledMessage": "I need support for product SKU {{ $input.productSku }}",
  "generateQrImage": "PNG"
}

A product catalogue workflow generates one QR code per product SKU. Each QR code includes the SKU in the prefilled message so support agents immediately know which product the customer is contacting about. The code values are stored in the product table and the images are embedded in the product inserts print file.