Skip to main content

Install

Requires Node.js 20 or newer.

Authenticate

For terminal-only sessions, use hookmyapp login --email <you@example.com>.

Workspaces

A workspace is the tenancy boundary for every other command.
Pick one before you connect channels.
Manage who has access:

Channels

Connect your own WhatsApp number, then run per-channel operations.
Address a channel by its ID (ch_xxxxxxxx from channels list) or its phone number (15551234567).
Pull the values your server needs, or check channel health:

WhatsApp commands

Use the phone number anywhere a command asks for a WhatsApp channel.

Messages

Templates

Manage templates on the WABA behind the channel. Templates must be approved by Meta before you can send them.
Example template.json:
Create returns Template created. in human mode. Use --json when you need Meta’s raw create response in a script.

Media

Upload media first, then use the returned media ID in message payloads. HookMyApp passes the media through to Meta. It does not store the file.
Typical upload output:
media get returns Meta media metadata, including the short-lived download URL. media download --out - streams bytes to stdout:

Business profile

Read or update the WhatsApp Business profile customers see in WhatsApp.
Example profile.json:
WhatsApp allows at most two website URLs. Updates return Profile updated. in human mode. Use --json for the raw Meta response.

Receive webhooks

There are two ways to tell HookMyApp where to send inbound messages for your own number. For local development, send messages to your laptop while the CLI runs:
For a deployed receiver, point Meta at your own public URL:
Use one message destination per channel: either channels listen for local testing or a deployed webhook URL. Read the delivery history. Copy the delivery ID (wd_...) from the list output to open one delivery:

Sandbox

Test on WhatsApp with no Meta setup.
See Sandbox for the full flow.
The sandbox webhook URL works like a channel webhook URL:

Alerts

Your own alert phone: where we reach you if something stops working.
We send a 6-digit code to confirm the number, and set asks for it. In a script there is no prompt: run set with --json, then finish with alerts phone verify <code>. Alerts are on once the number is verified.

Notifications

Notifications from HookMyApp delivered straight to your AI agent, like Claude Code, ChatGPT, or Codex: failing webhooks, disconnected channels, usage limits, and product announcements.
Acknowledging records that the notification was read. It does not mean the problem is fixed.

Billing

Config

Persistent CLI settings.

Output formats

Most commands take --json for machine-clean output (notifications go to stderr) and --human to force human formatting when stdout is not a TTY.
In --json mode, errors use the envelope {"error":{"code":"...","message":"...","status":NNN}}.
Other global flags: --workspace <slug> overrides the active workspace for one command, and --debug logs the HTTP requests the CLI makes.

Help

Next steps

  • Sandbox: Start a sandbox session and pull env values.
  • Connect WhatsApp: Connect your own WhatsApp number via embedded signup.