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 number: the two mistakes that break most links
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:
- No
+in the link. Write31612345678, not+31612345678. (This is different from the API, where the+is recommended. See phone number format for the API.) - No leading 0 after the country code. A Dutch mobile written locally as
06 12345678becomes31612345678. A UK07700 900123becomes447700900123. 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.
What a click-to-chat link does not do
- 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.
When a link is enough, and when it isn't
| 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 freeMore guides
WhatsApp API phone number format for European numbers (E.164, the leading 0 and the missing +)
How to write a customer's phone number for the WhatsApp Business API: the + and country code, which European countries drop the leading 0, why Italy keeps it, and how to normalise numbers in code.
Add WhatsApp to your app with Claude Code: connect it, then review four things
Connect Claude Code to SendFromChat with one command, ask it to add WhatsApp order notifications, then check what it wrote: where the key lives, retries, STOP replies and templates.
Questions to ask a WhatsApp provider before you sign: who owns your account, number and templates
Three questions to put to any WhatsApp Business API provider (BSP or Tech Provider) before you sign — who owns the WhatsApp Business Account, whether you can leave with your number and templates, and who bills Meta's charges.
Build a WhatsApp reply assistant with Claude (with a human hand-off)
Answer customer WhatsApp messages about your own business with the Claude API. A webhook, a restricted system prompt, a hand-off to a person, STOP respected and replies sent inside the 24-hour window.