Portal Community
WABA-level listing: This operation calls GET /{businessAccountId}/phone_numbers and returns all numbers registered under the supplied WABA ID. Fields returned per number: id, display_phone_number, verified_name, quality_rating, and code_verification_status.

When to Use

Configuration

Connection

FieldRequiredDescription
accessTokenRequiredPermanent System User access token. Store in BizFirst Credentials Manager.
phoneNumberIdRequiredAny phone number ID in the WABA — used to authenticate the request. The listing is scoped to the WABA, not a single number.
apiVersionOptionalMeta Graph API version. Defaults to v18.0.

Operation

FieldRequiredDescription
wabaIdRequiredThe WhatsApp Business Account ID (numeric string from Meta Business Manager). All phone numbers under this WABA are returned.

Sample Configuration

{
  "resource": "phone-number",
  "operation": "list",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345",
  "wabaId": "987654321098765"
}

Validation Errors

ErrorCause
accessToken is requiredThe accessToken field is empty.
wabaId is requiredNo WABA ID was provided in the operation fields.
100 (Meta)Invalid WABA ID — the account does not exist or the token has no access to it.
200 (Meta)Insufficient permissions — the access token lacks whatsapp_business_management.
timeoutThe Meta Graph API did not respond within the configured timeout.

Output

Success Port

FieldTypeDescription
phoneNumbersarrayArray of phone number objects. Each element contains id, displayPhoneNumber, verifiedName, qualityRating, and codeVerificationStatus.
countnumberTotal number of phone numbers returned.
statusstring"success".
rawResponsestringFull raw JSON from the Meta Graph API including the data array.

Error Port

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

Sample Output

{
  "phoneNumbers": [
    {
      "id": "123456789012345",
      "displayPhoneNumber": "+1 415-555-2671",
      "verifiedName": "Acme Corp Support",
      "qualityRating": "GREEN",
      "codeVerificationStatus": "VERIFIED"
    },
    {
      "id": "567890123456789",
      "displayPhoneNumber": "+44 20 7946 0958",
      "verifiedName": "Acme Corp UK",
      "qualityRating": "YELLOW",
      "codeVerificationStatus": "VERIFIED"
    }
  ],
  "count": 2,
  "status": "success"
}

Expression Reference

ValueExpressionNotes
All phone numbers{{ $output.listPhones.phoneNumbers }}Pipe into a SplitInBatches node to process each number individually.
Total count{{ $output.listPhones.count }}Use to confirm at least one number is registered before proceeding.
First number ID{{ $output.listPhones.phoneNumbers[0].id }}Useful when the WABA has a single primary sending number.
Filter by quality{{ $output.listPhones.phoneNumbers.filter(p => p.qualityRating === 'GREEN') }}Use in a Function node to select only GREEN-rated numbers for campaign dispatch.

Node Policies & GuardRails

Policy AreaRecommendation
Credential storageStore the access token in BizFirst Credentials Manager.
WABA ID managementStore the WABA ID as a workflow constant or environment variable rather than hardcoding it in each node configuration.
Paginated resultsMeta may paginate results for WABAs with many numbers. Check rawResponse for a paging.cursors.after field and implement cursor-based pagination if needed.
Error portConnect the error port. A 200 permission error is the most common failure for this operation — the System User token must include the WABA in its linked assets.
CachingThe phone number list changes infrequently. Cache the result in a workflow variable and refresh only when a provisioning event occurs rather than calling on every execution.

Examples

Bulk Quality Rating Audit

{
  "resource": "phone-number",
  "operation": "list",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "123456789012345",
  "wabaId": "987654321098765"
}

A Schedule trigger fires daily. This node retrieves all phone numbers. A SplitInBatches node iterates each entry. An IfCondition evaluates {{ $item.qualityRating }} — numbers rated RED are routed to a Function node that creates a ServiceNow incident for the operations team.

Dynamic Sender Selection for Campaign

{
  "resource": "phone-number",
  "operation": "list",
  "accessToken": "{{ $credentials.whatsAppToken }}",
  "phoneNumberId": "{{ $env.PRIMARY_PHONE_ID }}",
  "wabaId": "{{ $env.WABA_ID }}"
}

Before a campaign broadcasts, this node retrieves the number list. A Function node filters to numbers with qualityRating === "GREEN" and selects the first result as the sender ID. The downstream message/sendTemplate node uses this dynamic ID as its phoneNumberId.