Integrate HookTap in Minutes
Send HTTP POST requests to your personal URL and receive them as real-time push notifications on your iPhone.
What is HookTap?
HookTap turns your iPhone into a real-time webhook receiver. Every HTTP POST request sent to your personal URL is instantly delivered as a push notification to your device – no server, no polling, no extra setup.
Create your webhook
Install the app
Download HookTap from the App Store. On first launch, an anonymous account is created automatically – no email or password needed.
→ App StoreCopy your URL
Your personal webhook URL is shown immediately inside the app. Copy it and use it anywhere that can send HTTP requests.
Your personal webhook URL
https://hooks.hooktap.me/webhook/YOUR_IDNo registration. No password. Ready instantly.
Send your first event
POST a JSON payload to your webhook URL. The event arrives on your iPhone within seconds.
curl -X POST https://hooks.hooktap.me/webhook/YOUR_ID \
-H "Content-Type: application/json" \
-d '{
"type": "build",
"title": "CI succeeded",
"body": "Staging deploy is live"
}'Payload fields
typeEvent label – any string, e.g. "build", "deploy", "alert"titleNotification title displayed on the lock screenbodyNotification body textOfficial command-line tool
Install the HookTap CLI to send events from scripts, open a terminal UI, configure profiles, and get notified when commands finish.
Install
Install with one command
Use the curl installer for macOS and Linux, or install from the Homebrew tap.
# macOS / Linux
curl -fsSL https://hooktap.me/install.sh | sh
# Homebrew
brew install HookTap/tap/hooktapSetup
Connect with a pairing code
Generate a one-time code in the iPhone app and run setup. Manual webhook IDs and named CI profiles still work.
# Guided setup
hooktap setup --code 123456
# Manual setup
hooktap setup
# Non-interactive setup
hooktap setup --name ci --hook https://hooks.hooktap.me/webhook/YOUR_ID --type pushTerminal UI
Send from a full-screen UI
Open HookTap in the terminal to compose events, inspect profiles, view snippets, and run basic diagnostics.
# Open the terminal UI
hooktap
hooktap tui
# Keyboard
# 1-4 switch screens · Tab moves inputs · Ctrl+T cycles type · Ctrl+S sendsWatch
Notify when commands finish
Wrap builds, deploys, migrations, and scripts. Output streams normally, and the final exit code is preserved.
# Notify when a command exits
hooktap watch -- npm run build
# Custom title
hooktap watch --title "Production deploy" -- make deploySend your first event
# Save your webhook id once
hooktap config set hook_id YOUR_ID
# Send an event (push is the default)
hooktap send "Build finished"
# Pipe any command's output straight to your phone
make deploy | hooktap send "Deploy" --type push
# Check the service is reachable
hooktap pingConnect any service directly
Services like GitHub, Stripe, or Grafana send their own fixed JSON format. Field mapping lets you point HookTap at any path inside that payload – no wrapper script or middleware needed.
Plain dot-notation
Extract a value from a nested JSON path using dot-notation.
// Incoming JSON (sent by GitHub)
{
"repository": { "full_name": "acme/backend" },
"workflow_run": {
"name": "Deploy to production",
"conclusion": "success",
"head_branch": "main"
}
}
// fieldMapping – set on the webhook document in Firestore
{
"title": "workflow_run.name",
"nody": "workflow_run.conclusion",
"type": "push"
}
// → Notification
// Title: "Deploy to production"
// Body: "success"Template syntax
Wrap paths in {curly braces} to combine static text, emojis, and multiple fields in one string.
// fieldMapping with template syntax
// Anything inside {…} is resolved as a dot-notation path.
// Everything outside is treated as a literal.
{
"title": "🚀 {repository.full_name}",
"body": "{workflow_run.conclusion} on {workflow_run.head_branch}",
"type": "push"
}
// Same GitHub payload as above
// → Notification
// Title: "🚀 acme/backend"
// Body: "success on main"Deep paths
Any depth of nesting is supported – useful for Stripe, Grafana, or custom webhook payloads.
// Incoming JSON (sent by Stripe)
{
"type": "payment_intent.succeeded",
"data": {
"object": {
"amount": 4900,
"currency": "eur",
"receipt_email": "user@example.com"
}
}
}
// fieldMapping
{
"title": "{type}",
"body": "€{data.object.amount} · {data.object.receipt_email}",
"type": "feed"
}
// → Notification
// Title: "payment_intent.succeeded"
// Body: "€4900 · user@example.com"Deep Link (optional)
The optional Deep Link field accepts a dot-notation path to a URL within your payload. Tapping the notification or event will open this URL directly. Example: pull_request.html_url.
// Incoming JSON (sent by GitHub)
{
"action": "opened",
"pull_request": {
"title": "Fix memory leak",
"html_url": "https://github.com/acme/repo/pull/42"
}
}
// fieldMapping
{
"title": "PR {action}: {pull_request.title}",
"deepLink": "pull_request.html_url"
}
// → Action
// Tapping the notification opens:
// "https://github.com/acme/repo/pull/42"How events are delivered
Every incoming webhook is processed through all three channels simultaneously.
pushPush Notification
Appears instantly on the lock screen and as a banner. Works even when the app is in the background or closed.
feedEvent Log
Stored chronologically in the in-app feed with full payload, timestamp, and read status.
widgetWidget Update
The latest event updates your Home Screen and Lock Screen widget (Pro).
Automatic Status Detection
HookTap automatically detects the status of your events based on keywords in the body or title and adjusts the color of the Live Activities accordingly.
Live Activity Design (Keywords)
success · passed · completed · deployed · ok · healthy · 200 · erfolgreich · abgeschlossen · bestanden · fertig · bereit · gesund
error · failed · failure · critical · down · crash · 500 · urgent · dringend · exception · alert · fehler · fehlgeschlagen · kritisch · absturz · ausgefallen
warning · pending · timeout · slow · degraded · 401 · 403 · important · wichtig · warnung · ausstehend · zeitüberschreitung · langsam · beeinträchtigt
started · running · triggered · queued · info · gestartet · läuft · ausgelöst · warteschlange
Urgent Delivery (Time-Sensitive)
Events with the following keywords are marked as 'Time-Sensitive'. They break through Focus mode and are delivered with priority:
error · fehler · failure · failed · fehlgeschlagen · exception · critical · kritisch · down · crash · 500 · ausgefallen · absturz · urgent · dringend · alert · warning · warnung · timeout · zeitüberschreitung · degraded · beeinträchtigt · 401 · 403 · important · wichtig
Available on all your devices
HookTap works on iPhone and extends to your desktop via native Mac and Windows apps.
iOS
The primary app. Receives webhook events, shows push notifications, manages your URLs, and displays the full event feed.
iPhone · iOS 16+
macOS
Native Mac app that connects to your iPhone via a 6-digit pairing code. Displays events in real time with macOS system notifications.
macOS 13 Ventura+ · .dmg download
Windows
Native Windows app with the same real-time event display and system notifications. Pairs with your iPhone app in seconds.
Windows 10 / 11 · .exe download
Ready-made recipes for your stack
Copy-paste examples for the tools you already use. No extra setup.
GitHub Actions
Notify on CI pass/fail, deploys, and releases.
GitLab CI
Pipeline notifications with a single job snippet.
Python
Zero-dependency helper, requests examples, exception decorator.
Node.js / TypeScript
CommonJS and ESM helpers, withNotification() wrapper.
Shell / cron
Wrap any command, disk alerts, bashrc helper function.
Docker
Compose health checks, container lifecycle events.
Go · PHP · Ruby
Stdlib-only snippets, ready to drop into any project.
Zapier · Make · n8n
No-code automation with step-by-step setup guides.
Monitoring
Uptime checks, CPU alerts, Sentry and Grafana integration.