Skip to documentation
Notify Docs

Send an update

Send a useful message, file it into the inbox, and give the recipient a clear next step. Webhook and terminal examples below describe the same package-pickup workflow.

Send from a webhook

For a package-pickup alert, send a JSON object with body. The service supplies the sender title and other defaults. This example uses a placeholder token; substitute the URL saved during connection setup.

bash
curl -X POST https://notify.belweave.ai/hooks/whk_your_token -H 'Content-Type: application/json' -d '{"body":"Package PKG-42 is ready at the front desk."}'

Send from a terminal

Use notify send <body> for an update from a terminal. It targets active supported devices unless you specify routing. Set the sender title per call; sends with the same title are threaded together.

bash
notify send "Package PKG-42 is ready" \
  --title "Warehouse desk" \
  --image https://warehouse.example.com/icon.png \
  --url https://warehouse.example.com/packages/PKG-42
send flags
FlagTypeDescription
--titlestringSender name. Defaults to Notify.
--imageurlPublic HTTPS avatar, same rules as the webhook imageUrl.
--urlurlWeb URL, app deep link, or Shortcuts URL opened when tapped.
--deviceid, repeatableTarget eligible devices by stable ID. Included for free.
--projectstringFile the notification into a named project in the Notify app inbox.
--summarystringShort push/preview text for a long body. Bodies can hold up to 8,000 characters.
--markdownbooleanRecord the body as Markdown (same as --body-format markdown); V1 renders plain text.
--appapp idOpen this web app in Notify when tapped; --url must stay on its origin.
--idempotency-keystringSafe retries: replays return the original result without a second push.
--stdinbooleanMerge a JSON object from stdin under the explicit flags.
A connection’s sends use the same rate/usage accounting as webhook sends: a requester window and an account-wide window. Notifications have no monthly cap.

Organize longer messages

Use project to keep recurring updates together, for example Warehouse maintenance. Names are matched within an account after Unicode normalization and case folding: Warehouse maintenance and warehouse maintenance resolve to one project, with the first spelling kept for display. Unfiled messages appear under Other.

Put the full report in body and a short actionable digest in summary. The digest supplies banners and list previews; the complete body remains in the inbox detail. Clients currently show plain text and tappable links. bodyFormat: "markdown" stores the format metadata but does not enable Markdown rendering in V1.

The account limit is 500 projects. A send that introduces a name beyond this limit can still create the notification, unfiled, with a message explaining the fallback. Existing names continue to resolve.

Give the tap a destination

A destination belongs in url, either on the service or in the individual send. The recipient must tap to open it. A received push alone cannot launch a site, another app, or a shortcut.

  • Prefer a universal https:// link when the destination supports app and browser routes. On iOS, an installed associated app can handle it; otherwise the website opens.
  • A documented custom scheme can address an installed app directly, such as warehouse://packages/PKG-42. Without a handler, the destination cannot open.
  • URL-encode spaces and reserved characters in route names and query values. Shortcuts are an iOS-specific destination.
json
{
  "body": "Package PKG-42 is ready for collection.",
  "url": "warehouse://packages/PKG-42"
}

For an iPhone shortcut, follow Apple’s run-shortcut URL format. Match the saved shortcut’s name and encode its query values. input=text passes the text value; input=clipboard uses the device clipboard.

json
{
  "body": "Warehouse pickuped. Tap to run the follow-up.",
  "url": "shortcuts://run-shortcut?name=Package%20Pickup&input=text&text=collect%20PKG-42"
}
The device may ask the person to unlock or grant shortcut permissions. Notify cannot run a shortcut merely because a notification arrived. The server rejects executable or local schemes including javascript:, data:, file:, blob:, and about:.