npm install to a webhook receiving real WhatsApp messages on your laptop.
What you’ll have
In a few minutes you’ll be sending and receiving real WhatsApp messages from your own app, running on your laptop. WhatsApp a test number from your phone, watch the message land in your code in under a second, and reply right back.Install and authenticate
hookmyapp login opens a browser tab. After sign-in, the CLI writes a credential token to a local file in your config directory.
Start a sandbox session
wa.me link on the same phone to auto-fill the message.
The sandbox is a test WhatsApp number you can use right away. It removes Meta paperwork: no Business Manager, no verified phone, no access token of your own.
Clone and run the starter kit
POST /webhook/whatsapp and POST /webhook/instagram (it serves both channels at once), per-channel send(to, text) helpers, an auto-reply you can customize, and an .env.example the CLI fills in. hookmyapp sandbox env --write .env writes the sandbox proxy URL, your session activation code, the test number’s phone ID, and a VERIFY_TOKEN for HMAC verification.
Open the tunnel
http://localhost:3000/webhook/whatsapp. The tunnel lives as long as the CLI process runs.
Send a test message
WhatsApp the test number from your pinned phone. Your receiver logs the inbound webhook. The starter kit’s auto-reply lands back on your phone. You can also send a one-shot test from the CLI:From the sandbox to your own number
When you’re ready for your own WhatsApp number, the dev loop stays the same: same receiver code, same local tunnel, just a real channel.Connect your WhatsApp number
ch_xxxxxxxx). Confirm with:
Pull your number’s env
.env with your own number’s. Your own number sets META_GRAPH_API_URL (the HookMyApp gateway, <gateway>/<graph-version>) instead of the sandbox’s WHATSAPP_API_URL, a scoped gateway access token (hmat_…) in WHATSAPP_ACCESS_TOKEN, your WHATSAPP_PHONE_NUMBER_ID, WHATSAPP_WABA_ID, and HOOKMYAPP_CHANNEL_ID. Both base URLs point at the gateway, which swaps the hmat_ token for the real Meta token server-side. The receiver code does not change; point your sender at whichever base-URL variable is set.
Listen locally against your number
hookmyapp sandbox listen, but on your own channel. Opens a secure tunnel from a HookMyApp-managed hostname to localhost:3000/webhook/whatsapp and points Meta at it while the CLI runs. Stop the CLI (Ctrl-C) and the tunnel is reclaimed; Meta’s webhook URL reverts to whatever was set before.
Real WhatsApp messages to your verified number now arrive on your laptop. The same auto-reply works.
Set your own webhook URL (when you deploy)
When your receiver is deployed behind a stable public URL, replace the tunnel with that URL:override_callback_uri via the Graph API.
Next steps
- Connect WhatsApp: New or existing number, and the duplicate-workspace rule.
- Send messages: The send call, curl and Node examples, templates.
- Receive webhooks: Verify the signature and acknowledge fast.
- Build with AI: Let Cursor, Codex, or Claude Code do this for you.