WhatsApp Link API: wa.me & api.whatsapp.com Explained

WhatsApp Click-to-Chat Links

WhatsApp Link API: How wa.me y api.whatsapp.com Links Actually Work

A WhatsApp link is a URL, not an API. This guide gives you the exact wa.me y api.whatsapp.com/send formats, the text parameter, a free generator, and the point where the link stops and an actual integration has to start.
7-day free trial, no credit card required
Just a URL
No auth, no code
wa.me/1XXXXXXXXXX?text=Hi...
Hi! I have a question about your product. Pre-filled, still editable
Opens the chat. A human still has to press send.
Definición

What is a WhatsApp link API?

There is no WhatsApp link API. https://wa.me/<number> y https://api.whatsapp.com/send?phone=<number> are click-to-chat URLs: clicking one opens a conversation in WhatsApp. They require no authentication, no developer account and no code. The WhatsApp APIs are a separate layer, and they begin exactly where the link stops.
Criterio
A WhatsApp API
Format
APIAn authenticated HTTP endpoint
Configurar
APIAccount linking, an API key, a client library
What happens on click / call
APISends, receives and lists messages programmatically
Who acts
APIYour software acts on behalf of the linked account
Format

What is the exact wa.me link format?

The documented format is https://wa.me/<number>, where <number> is a full phone number in international format. WhatsApp's Help Center states you must omit any zeroes, brackets or dashes.
wa.me-format.txt
Use: https://wa.me/1XXXXXXXXXX Don't use: https://wa.me/+001-(XXX)XXXXXXX
What to keep
Country code plus subscriber number, digits only. No leading +.
What to strip
Leading zeroes, spaces, dashes, parentheses. None of them belong in the path.
Source: WhatsApp Help Center, "How to use click to chat"
Comparación

What is the difference between wa.me and api.whatsapp.com/send?

Both open the same conversation. wa.me/<number> is the short form documented in WhatsApp's Help Center, with the number in the path. api.whatsapp.com/send?phone=<number> is the long form, still in wide use, that carries the number as a query parameter.
URL anatomy, segment by segment
https://wa.me/1XXXXXXXXXX?text=Hi
https://api.whatsapp.com/send?phone=1XXXXXXXXXX&text=Hi
Host
Fixed path
The number
The message
Criterio
wa.me
api.whatsapp.com/send
Where the number lives
wa.meIn the URL path
api.whatsapp.comEn el phone query parameter
Documented in WhatsApp's Help Center
wa.meYes, this exact format
api.whatsapp.comNot on the current help page we could find
Observed behavior
wa.meOpens the chat
api.whatsapp.comOpens the same chat
A documentation gap, not a deprecation. We could not find a current, official WhatsApp or Meta page that documents api.whatsapp.com/send. That does not mean it stopped working: both formats redirect to the same conversation today. It means WhatsApp's own Help Center only covers wa.me. Build new links on the documented format.
The text parameter

How do you add a pre-filled message to a WhatsApp link?

Append ?text= followed by the URL-encoded message: https://wa.me/<number>?text=<urlencodedtext>. The text lands in the chat input field, pre-filled and editable.
prefilled-variants.txt
https://wa.me/1XXXXXXXXXX?text=I'm%20interested%20in%20your%20car%20for%20sale // no number: opens a contact picker instead https://wa.me/?text=I'm%20inquiring%20about%20the%20apartment%20listing
Without a number, WhatsApp opens the sender's contact list instead of a specific chat. The text still pre-fills once a contact is picked.
Encoding, the certain mappings
Character
Space
New line
&
#
Encoded as
%20
%0A
%26
%23
Also worth knowing: + encodes to %2B. For everything else, emoji included, don't build the table yourself: call encodeURIComponent() in JavaScript or urllib.parse.quote() in Python.
Build the link in code
build-link.js
// JavaScript const number = "1XXXXXXXXXX"; const text = "Hi! I have a question."; const link = `https://wa.me/${number}?text=${encodeURIComponent(text)}`;
build_link.py
# Python from urllib.parse import quote number, text = "1XXXXXXXXXX", "Hi! I have a question." link = f"https://wa.me/{number}?text={quote(text)}"
Free tool

Generate your WhatsApp link

Enter a number and a message. Get the wa.me link, the api.whatsapp.com equivalent, the encoded text, an HTML snippet and the official button, all at once.
Runs entirely in your browser. No number is ever sent to a server.
Full international number. No +, no 0, no spaces or dashes.
Optional. Lands in the chat input field, still editable by the sender.
wa.me link
https://wa.me/15550123456?text=Hi!%20I%20have%20a%20question%20about%20your%20product.
api.whatsapp.com equivalent
https://api.whatsapp.com/send?phone=15550123456&text=Hi!%20I%20have%20a%20question%20about%20your%20product.
text parameter, encoded
Hi!%20I%20have%20a%20question%20about%20your%20product.
HTML snippet, ready to paste
<a href="https://wa.me/15550123456?text=Hi!%20I%20have%20a%20question%20about%20your%20product." target="_blank" rel="noopener" aria-label="Chat on WhatsApp">Chat on WhatsApp</a>
Official "Chat on WhatsApp" button
Chat on WhatsApp
<a href="https://wa.me/15550123456?text=Hi!%20I%20have%20a%20question%20about%20your%20product." target="_blank" rel="noopener"><img src="whatsapp-icon.svg" alt=""> Chat on WhatsApp</a>
This link opens a chat. It does not send the message, and your product will not see the reply.

Does a WhatsApp link send the message?

No. A click-to-chat link opens the conversation and pre-fills the text field. Nothing is delivered until the person holding the phone presses send.
The honest part

What can a WhatsApp link not do?

A click-to-chat link is stateless. Your product never learns whether the link was clicked, whether the message was sent, or whether the recipient replied.
Where the link stops
Link clicked
Chat opens
Message pre-filled
Manual send
Enlacestopsaquí
Reply received
Conversation history
Webhook event
Per-user attribution
No delivery or read confirmation
No reply routed back to your application
No conversation history
No attachments
No server-side trigger. It takes a human and a click
No per-user attribution in a multi-tenant product
Silent failure if the number has no active WhatsApp account
Different behavior across desktop, WhatsApp Web and mobile
No group creation or management. A link only opens a one-to-one chat, see the WhatsApp Group API limits for anything group-related
A link cannot report clicks, replies or history. An API can. Build a real WhatsApp integration
Past the link

How do you get the reply back into your app?

You need an API that holds a WhatsApp session. Two routes exist: Meta's Cloud API, which requires a verified Business account, or a connected-account API such as Unipile, where the end user links their own WhatsApp account on behalf of the authenticated user, by QR code or pairing code.
API de Meta CloudVerified business
Requires a verified WhatsApp Business account
Billed per message since July 1, 2025, see the Precios de la API de WhatsApp Business breakdown
The 24-hour customer service window still exists, it determines what's free, not what's billed
Built for templated notifications at scale
Connected account, UnipileNo verification
Each end user links their own WhatsApp account, on behalf of the authenticated user
By QR code or pairing code, no Meta Business verification
Reads and sends from the actual linked inbox, replies included
Same connect, send, list, listen pattern as LinkedIn, Instagram, Telegram, Gmail, Outlook and IMAP
connected-account-flow.js
// 1. Link the account, on behalf of the authenticated user const { qrCodeString } = await cuenta.cliente.connectWhatsapp(); // 2. Send a message once linked POST /api/v1/chats/{chat_id}/messages { "texto": "Hi! Your order has shipped." } // 3. Receive replies through a webhook, no polling{ "evento": "message_received", "chat_id": "chat_182...", "mensaje": "Is this still available?"}
For the full sending guide, payloads and webhook handling, see how to send WhatsApp messages via API. Endpoint reference: developer.unipile.com/docs/whatsapp.
Decisión

Link, Cloud API or connected account: which one do you need?

Use a link when a human initiates the conversation from a page you control. Use the Cloud API when a verified business sends templated notifications at scale. Use a connected-account API when your product must read and send from the user's own WhatsApp inbox.
Criterio
Enlace
API de Meta Cloud
Cuenta conectada
Who initiates
EnlaceA human, from a page you control
API en la nubeYour business sends first, templated
Cuenta conectadaEither side, from the linked inbox
Autenticación obligatoria
EnlaceNinguno
API en la nubeVerified Meta Business account
Cuenta conectadaQR code or pairing code, no Business verification
Coste
EnlaceGratis
API en la nubePer message, since July 1, 2025
Cuenta conectadaUnipile plan pricing, not billed per message
Receives replies
EnlaceNo
API en la nubeYes, via webhook
Cuenta conectadaYes, via webhook
Conversation history
EnlaceNo
API en la nube
Cuenta conectada
Multi-tenant products
EnlaceBreaks, one hardcoded number
API en la nubeNeeds custom routing per business number
Cuenta conectadaNative, one linked account per end user
Tiempo de preparación
EnlaceActas
API en la nubeDays to weeks, Business verification
Cuenta conectadaMinutes to hours
Just need a link
Utilice la generator above. No account, no setup.
Sending templated notifications
Reading and sending per user
Most products outgrow the link within a week. Start where you'll actually end up. Empezar a construir
Implementación

How do you embed a WhatsApp link in a product?

Generate the link server-side, per user, and never hardcode a phone number in a multi-tenant product. The link is just an anchor, so it belongs in your template layer, not in your API layer.
chat-button.html
<!-- template layer, not your API layer --> <a href="https://wa.me/{{ user.whatsapp_number }}?text={{ prefilled_text | url_encode }}" target="_blank" rel="noopener" aria-label="Chat on WhatsApp"> Chat on WhatsApp </a>
Official button
WhatsApp publishes a ready-made "Chat on WhatsApp" badge, green and white, in a few fixed sizes, meant to be used without modification.
Chat on WhatsApp
Código QR
Any QR code generator that accepts a URL turns a wa.me link into a scannable code for print, packaging or in-person signage.
Móvil Opens the WhatsApp app directly, with the chat and pre-filled text ready.
Desktop, app installed Opens the WhatsApp desktop app instead of the browser.
Desktop, no app Opens WhatsApp Web in the browser, and prompts a QR sign-in if the session isn't already active.
Why the link breaks in multi-tenant products: a single hardcoded number cannot tell your customers apart. Generate the link from the specific user or workspace record every time, so it carries whichever number that user actually owns, not a number pasted once into a template.
Solución de problemas

Why is my WhatsApp link not working?

The two most common causes are a phone number that is not in plain international format, and a text parameter that was not URL-encoded.
CausaPhone number not in plain international format
ArreglaUse the full international number, digits only: no +, no leading 0, no spaces, dashes or brackets.
CausaThe text parameter was not URL-encoded
ArreglaRun the message through encodeURIComponent() in JavaScript or urllib.parse.quote() in Python before appending it.
CausaThe number has no active WhatsApp account
ArreglaThe link still opens, but the chat fails silently. Verify the number is actually registered on WhatsApp first.
CausaOpened inside a third-party app's in-app browser
ArreglaIn-app browsers from social or ad platforms sometimes block or mishandle the redirect. Open the link in the system browser instead.
CausaA link preview crawler rewrote the URL
ArreglaSome platforms wrap outbound links in their own redirect, which can drop the query string. Test the raw wa.me URL directly.

WhatsApp Link API - FAQ

Everything developers ask about wa.me, api.whatsapp.com, the text parameter, and where the link stops.

No single WhatsApp link API exists. wa.me y api.whatsapp.com/send are click-to-chat URLs: opening one starts a conversation in WhatsApp, with no authentication, developer account or code required. WhatsApp's own APIs are a separate layer that begins exactly where the link stops, once a person has to reply.

The documented format is https://wa.me/<number>, where <number> is the full phone number in international format. WhatsApp's Help Center instructs omitting any leading zeroes, brackets, spaces or dashes, for example https://wa.me/1XXXXXXXXXX.

Both open the same conversation. wa.me/<number> is the short form documented in WhatsApp's Help Center, with the number in the URL path. api.whatsapp.com/send?phone=<number> is the long form, still widely used, that carries the number as a query parameter instead.

No. A click-to-chat link opens the conversation and can pre-fill the text field, but nothing is delivered until the person holding the phone presses send.

Yes. Append ?text= followed by a URL-encoded message, for example https://wa.me/1XXXXXXXXXX?text=Hi%2C%20I%20have%20a%20question. The text lands in the chat input field, pre-filled and still editable before sending. Try it in the generator above.

The two most common causes are a phone number that isn't in plain international format and a text parameter that wasn't URL-encoded. Also check that the number has an active WhatsApp account and that the link wasn't opened inside a third-party app's in-app browser.

No. A wa.me o api.whatsapp.com/send link requires no Business account, no verification and no API access. The WhatsApp Business Platform, or Cloud API, is a separate verified product for businesses that need to send templated notifications at scale or receive replies programmatically. See the complete WhatsApp API guide.

A link itself cannot report replies back to your app, it is stateless. To read and send from an actual inbox, you need an API that holds a WhatsApp session: either Meta's Cloud API with a verified Business account, or a connected-account API such as Unipile, where each end user links their own WhatsApp account on behalf of the authenticated user, by QR code or pairing code. See how to send WhatsApp messages via API.

Still not sure whether you need a link or an API? Our team can help you decide.

Hable con un experto
es_ESES