WhatsApp click-to-chat link (wa.me): how to make one, and what it can't do

How to build a wa.me link with a prefilled message, the number mistakes that break it (the + and the leading 0), a small code helper, and when you need the WhatsApp Business API instead.

October 26, 2026 · 4 min read

A click-to-chat link is the quickest way to let someone start a WhatsApp conversation with you from a website, an email signature or a QR code. No API, no approval, no developer setup. It is also easy to get wrong, and people often expect it to do things it does not do.

All phone numbers in this guide are made up for illustration. Do not message them.

The format

WhatsApp's own help page for click to chat gives these three forms (read 26 Oct 2026, WhatsApp Help Center: How to use click to chat):

  • Basic link: https://wa.me/<number>, where <number> is a full phone number in international format.
  • With a prefilled message: https://wa.me/whatsappphonenumber?text=urlencodedtext
  • A prefilled message with no number: https://wa.me/?text=urlencodedtext, which lets the person choose who to send it to.

The page says urlencodedtext is the URL-encoded prefilled message.

The same page says to omit any zeroes, brackets or dashes when adding the number in international format. Its examples are "Use: https://wa.me/1XXXXXXXXXX" and "Don't use: https://wa.me/+001-(XXX)XXXXXXX".

Our reading of that rule, for European numbers:

  1. No + in the link. Write 31612345678, not +31612345678. (This is different from the API, where the + is recommended. See phone number format for the API.)
  2. No leading 0 after the country code. A Dutch mobile written locally as 06 12345678 becomes 31612345678. A UK 07700 900123 becomes 447700900123. The trunk 0 is for dialling inside a country only. Italian landlines are the known exception, because they keep their 0; see the table in the phone number guide.

Spaces, brackets and dashes are removed as well. That gives you a digits-only string.

The prefilled message

Anything after ?text= is the text that appears in the person's message box. They still have to press send. Special characters must be URL-encoded: a space becomes %20, & becomes %26, and line breaks become %0A. For example:

https://wa.me/31612345678?text=Hi!%20I%20saw%20your%20offer%20%26%20have%20a%20question

Keep the prefilled text short and neutral. Because the customer is the one who sends it, the first message in the chat comes from them.

A small helper

This Node function strips a number to digits and encodes the text. It does not remove a trunk 0 for you: give it a number that is already in international form, or normalise it first with a library as described in the phone number guide.

// Builds a wa.me link. `international` must already be country code + number
// (the "+" and any spaces/dashes/brackets are stripped here).
export function waLink(international, text) {
  const digits = international.replace(/\D/g, "");
  const base = `https://wa.me/${digits}`;
  return text ? `${base}?text=${encodeURIComponent(text)}` : base;
}

waLink("+31 6 1234 5678", "Hi! I saw your offer & have a question");
// -> https://wa.me/31612345678?text=Hi!%20I%20saw%20your%20offer%20%26%20have%20a%20question

We ran this sample in Node on 26 Oct 2026 and the output matched the comment. A trunk 0 inside the input, as in +44 (0)7700 900123, is kept as typed (the helper returns 4407700900123), which is why the number must be normalised first. We did not open the links in WhatsApp for this guide.

  • It does not send anything. It opens a chat window. A person has to tap it and press send.
  • It is not the WhatsApp Business API. The link works with a regular WhatsApp number. It gives you no templates, no bulk sending, no API and no webhooks.
  • It cannot message people who haven't chosen to. You cannot use it to reach a list of customers. For that you need the API, opt-in and approved templates. See WhatsApp opt-in and the 24-hour window.
  • It does not track anything by itself. If you want to know which page or campaign a chat came from, put a short code in the prefilled text (for example Hi, I'm asking about the spring offer [web]) and read it when the message arrives. This is a convention you set up yourself, not a WhatsApp feature.
You want to... A wa.me link The Business API
Let visitors start a chat from your site or QR code Yes Not needed
Send order updates or reminders from your system No Yes
Send a campaign to a contact list No Yes (with opt-in and approved templates)
Answer automatically or route chats to a team No Yes

The usual path: start with a link so customers can reach you, and move to the API once you want to send things yourself.

If you do move to the API

With SendFromChat you connect your number through Facebook's own window, then send from Claude, ChatGPT, the dashboard or the REST API. See getting started. To look at the flow before connecting anything, the /try page is a simulated walkthrough: no sign-up and no number. Or start the 30-day free trial (no card).

What we did not test

  • We did not open the example links in WhatsApp, and we did not call any API for this guide.
  • The link formats come from WhatsApp's help page read on 26 Oct 2026. WhatsApp may change them.

Related: the 24-hour window, WhatsApp Business app vs API and opt-in.

SendFromChat is independent. It is not made by, or affiliated with, Meta or WhatsApp. "WhatsApp" is a trademark of Meta.

Do this from your AI assistant

SendFromChat connects Claude, ChatGPT, Cursor or any MCP client to the WhatsApp Business API — templates, bulk sends, inbox, chatbots and sequences, just by asking. 30 days free, no card.

Start free