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.

Channels

Connect your own Instagram professional account, then run per-channel operations.
Address a channel by its ID (ch_xxxxxxxx from channels list) or its @handle.
Pull the values your server needs, or check channel health:

Instagram commands

Use @handle anywhere a command asks for an Instagram channel.

Messages

Comments

Publish

Publish runs the full flow (create container, wait for processing, publish) and prints the permalink.
Media URLs must be public HTTPS. See Publish content for media requirements and quotas.

Insights

See Insights for the metric list and data caveats.

Receive webhooks

There are two ways to tell HookMyApp where to send inbound DMs for your own account. For local development, send DMs 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:

Sandbox

Test on Instagram 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

Every command takes --json for machine-clean output 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