# Log in and test webhooks from the terminal

Source: https://joinsimplesms.com/changelog/2026-10-05-log-in-and-test-webhooks-from-the-terminal
Index: https://joinsimplesms.com/llms.txt

October 5, 2026

- **`npx joinsimplesms login`** opens the console for you to approve and
  stores a new test key for the machine, then prints your sandbox number. No
  key to copy. Test keys only; `login --key` still stores one you have.
  See [CLI](/docs/cli).
- **`npx joinsimplesms listen --forward-to http://localhost:3000/webhooks`**
  replays your events to a local server, signed like real webhooks with a
  secret it prints. No tunnel. Your configured endpoints are not touched. See
  [Test locally](/docs/webhooks#test-locally).
- **`npx joinsimplesms trigger message.received`** fires a sandbox event.
- **Webhook endpoints over the API**: `POST /v1/webhooks` (returns the
  signing secret once), `GET` / `PATCH` / `DELETE /v1/webhooks/{id}`,
  and `webhooks.create / get / update / delete` in the Node and Python
  SDKs (2.1.0). Restricted keys need the new `webhooks:write` scope; the
  existing `webhooks` scope stays read-only.
- **`GET /v1/events/wait`**: long-poll for new events (`events.wait` in
  the SDKs).
- **JSON errors on the API host**: an unknown path on
  `api.joinsimplesms.com` now answers `404` with
  `{"error":{"code":"not_found",...}}` instead of an HTML page, and an
  unsupported method answers `405` `method_not_allowed` with an
  `Allow` header instead of an empty body.
