Docs

Quickstart

1. Get a hook URL

Open the app and create a hook. You get a URL that looks like this:

https://in.zhooky.app/h/PUT-YOUR-KEY-HERE

The part after /h/ is the hook key. It is 32 characters, and it is a bearer secret: anyone holding it can post to your hook, so treat it like a password. Regenerating the key stops the old one working immediately.

2. Send it a request

Any POST, PUT or GET to that URL is accepted.

curl -X POST https://in.zhooky.app/h/PUT-YOUR-KEY-HERE \
  -H 'content-type: application/json' \
  -d '{"title":"Payment failed","message":"card declined"}'

The response is the id of the stored request:

{ "id": "01a0a4ab-0cb8-7659-81e4-d64ffee7d889" }

3. What happens next

The request is stored and every subscribed device is notified. The notification carries the hook's handle — its channel-style name, written with a # — and a one-line summary of what arrived:

#demo
POST · 52 B

The hook's colour and title are what the notification shows. Reading a title and a message out of the request body is not wired up yet — for now the body is kept whole and shown in the inbox, where you can read it in full.

4. Sub-paths

Anything after the key is recorded and kept, so several sources can share one hook and stay apart in the inbox:

curl -X POST https://in.zhooky.app/h/PUT-YOUR-KEY-HERE/stripe -d '{}'
curl -X POST https://in.zhooky.app/h/PUT-YOUR-KEY-HERE/github -d '{}'

The key never appears in the stored path — only /stripe and /github do.

5. Limits

  • A request is deleted after 7 days.
  • Up to 1,000 requests are kept per hook. Past that the oldest one goes — the hook keeps accepting and keeps notifying either way.
  • A body may be up to 10 MB. Anything larger is rejected.
  • Bodies over 64 KB are moved to object storage and streamed back on demand.