# n8n phone number checks

> Check WhatsApp, carrier, HLR and more in n8n workflows: our community node is coming soon; today, call the MobileValidate API from the HTTP Request node.

Canonical: https://mobilevalidate.com/integrations/n8n · Last updated: 2026-11-08

Our n8n community node, `n8n-nodes-mobilevalidate`, is coming soon; this page will say when it is published. You don't have to wait: n8n's built-in **HTTP Request** node calls the MobileValidate API today. One POST request checks a number against WhatsApp, carrier, HLR or any other check, and you pay only for conclusive answers. The setup is below.

**Status:** Coming soon

## Install the community node (once it is published)

**Status: coming soon.** The package is not published yet, so these steps don't work today. Use the HTTP Request node below in the meantime.

1. In n8n, open **Settings › Community nodes** and choose **Install**.
2. Enter the npm package name `n8n-nodes-mobilevalidate`, confirm that you understand the risks of installing unverified code, and choose **Install**.
3. Add a node, search for **MobileValidate**, and create a credential with your API key (a [test key](https://mobilevalidate.com/get-test-key) to start).

Installing packages from npm works on self-hosted n8n. On n8n Cloud, only community nodes that n8n has verified can be installed.

## Use the HTTP Request node today

1. Add an **HTTP Request** node. **Method:** `POST`. **URL:** `https://api.mobilevalidate.com/v1/lookup`.
2. **Authentication:** Generic Credential Type › **Header Auth**. Create a credential with **Name** `Authorization` and **Value** `Bearer ` followed by your API key.
3. Turn on **Send Body**, choose **JSON**, and enter the body below. Map the number from an earlier node with an expression, for example `{{ $json.phone }}`.

```json
{"numbers": ["+447700900001"], "checks": ["whatsapp", "carrier"], "wait": 20}
```

This is the same request as this `curl` call (it runs as pasted):

```bash
curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+447700900001"], "checks": ["whatsapp", "carrier"], "wait": 20}'
```

Response (real sandbox output, trimmed):

```json
{
  "object": "lookup",
  "status": "completed",
  "results": [{
    "e164": "+447700900001",
    "country": "GB",
    "number_status": "valid",
    "checks": {
      "whatsapp.registered": {"status": "completed", "registered": true, "checked_at": "2026-11-08T04:18:15.858Z", "billed": false},
      "network.carrier": {"status": "completed", "registered": true, "attributes": {"line_type": "mobile", "carrier": "Test Carrier", "country": "GB"}, "billed": false}
    }
  }],
  "billing": {"billed_units": 0, "cost": {"amount": "0", "currency": "USD"}},
  "next": null
}
```

Read these fields from the response: `results[0].checks["whatsapp.registered"].registered` (`true`, `false`, or `null` when the answer is not conclusive) and `results[0].checks["network.carrier"].attributes.line_type`. If `status` is `"pending"`, an answer took longer than `wait`: call the URL in `next.poll_url` (GET, same header) after a short delay, or send the numbers as a [bulk job](https://mobilevalidate.com/docs/bulk-jobs) instead.

- **Test first.** The example uses the public sandbox key, which answers only the [documented test numbers](https://mobilevalidate.com/docs/test-values) and is never billed. Use your own test key, then a live key, from the [dashboard](https://app.mobilevalidate.com).
- **Cost.** You pay per conclusive check; unknown, unsupported, invalid and duplicate results are free, and a repeat check within the freshness window is answered from cache at no charge. See [pricing](https://mobilevalidate.com/pricing).
- **Lists.** For more than a few hundred numbers, send one [bulk job](https://mobilevalidate.com/docs/bulk-jobs) (`POST /v1/jobs`, bulk price) instead of one request per number.
- **Errors.** Errors return JSON with `error.code`, `error.message` and `error.retryable`; the [error catalog](https://mobilevalidate.com/docs/errors) lists every code.

## Get a key for your workflow

Start with a test key and the test numbers, then switch to a live key. You pay only for conclusive answers.

- [Start free (20 free real checks)](https://mobilevalidate.com/request-access)
- [Get a test key](https://mobilevalidate.com/get-test-key)
- [Lookup API reference](https://mobilevalidate.com/docs/lookups)

## Related

- [Real-time lookups](https://mobilevalidate.com/docs/lookups.md)
- [Bulk jobs](https://mobilevalidate.com/docs/bulk-jobs.md)
- [Webhooks](https://mobilevalidate.com/docs/webhooks.md)
- [Authentication](https://mobilevalidate.com/docs/authentication.md)
- [Errors](https://mobilevalidate.com/docs/errors.md)

## Frequently asked questions

### Is the MobileValidate n8n node available?

Not yet: it is coming soon, and this page will be updated when it is published. Until then, the HTTP Request node calls the same API with the request shown on this page.

### Does it work on n8n Cloud?

The HTTP Request node does, on every plan. Community nodes installed from npm need self-hosted n8n; n8n Cloud offers only the community nodes n8n has verified.

### How do I check a whole list in n8n?

For a few hundred numbers, put up to 100 in one request's `numbers` array. For larger lists, create a [bulk job](https://mobilevalidate.com/docs/bulk-jobs) with `POST /v1/jobs`, then read the results when the `job.completed` [webhook](https://mobilevalidate.com/docs/webhooks) arrives. A Webhook node can receive it.

### What do I pay?

Only conclusive checks, at the [prices](https://mobilevalidate.com/pricing) on our site: unknown, unsupported, invalid and duplicate results are free. n8n itself is priced by n8n.

_Platform and brand names are used only to describe which service a check refers to. MobileValidate is not affiliated with, endorsed by or sponsored by any of these companies; all trademarks belong to their owners._
