How it works
Three steps. No account. No backend of your own.
-
01
Open Noti
Install the iOS app and allow notifications. Your device gets a private webhook URL.
-
02
Copy the URL
One tap in the app. That URL is your credential — keep it in secrets, not in git.
-
03
POST JSON
Send
title+bodyfrom CI, Zapier, cron, or an agent. Push lands on your phone.
Send in one request
Same endpoint. Pick the flavor you already use.
curl -X POST https://api-noti.oksocool.com/api/notify/YOUR_DEVICE_ID \
-H "Content-Type: application/json" \
-d '{"title":"Build failed","body":"main · exit 1"}'
- name: Notify Noti
if: failure()
run: |
curl -X POST "${{ secrets.NOTI_WEBHOOK_URL }}" \
-H "Content-Type: application/json" \
-d "{\"title\":\"CI Failed\",\"body\":\"${{ github.repository }} · ${{ github.ref_name }}\"}"
await fetch(process.env.NOTI_WEBHOOK_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
title: "Deploy complete",
body: "production is live",
url: "https://example.com",
}),
});
What arrives
A real iOS push — banner, sound, optional image, deep link, and actions.
main · tests failed on auth-service
Tap opens your url. Actions use the labels you send.
Built for real alerts
The same webhook covers CI, automation, and ops — wherever you already work.
-
CI / GitHub Actions
Know the second a workflow fails — without opening the Actions tab.
{ "title": "CI Failed", "body": "noti · main" } -
Zapier & no-code
New order, form submit, CRM update — POST the webhook as the last step.
{ "title": "New order", "body": "#12345 · Dunk" } -
Servers & cron
Disk full, backup done, temperature spike — one curl from any shell.
{ "title": "Disk warning", "body": "/data at 92%" }
Built for agents
Hand ChatGPT, Claude, or Cursor a prompt plus your webhook — they wire Noti into your project.
You are helping me integrate Noti, an iOS push notification webhook. Context: - I have the Noti iOS app installed. - My personal webhook URL is: PASTE_YOUR_NOTI_WEBHOOK_URL_HERE - Docs: https://noti.oksocool.com/docs API rules: - Method: POST - Header: Content-Type: application/json - Required JSON fields: "title" (string), "body" (string) - Optional: "subtitle", "sound", "image" (public https URL), "url", "actions" (string[]) - No API key. The webhook URL is the secret — use env vars / secrets. Task: 1) Find the best place to notify (CI failure, deploy, error, cron, form submit). 2) Add a minimal integration using NOTI_WEBHOOK_URL. 3) Show how to set the secret and test with one curl. 4) Keep changes small. Do not add a new backend.
Full field reference lives in the docs.
What you can send
Start with title + body. Layer on richness when it helps.
-
Title & body
The only required fields. Enough for most alerts.
-
Subtitle
Branch names, order IDs, environments — a second line of context.
-
Rich image
Public HTTPS image URL. Noti downloads and attaches it on device.
-
Deep link
Tap the push to open a dashboard, PR, invoice, or any URL.
-
Action buttons
Pass labels like
View/Dismissfor banner actions. -
Sound
Defaults to
default. Quiet when you need it.
Works with
Anything that can fire an HTTP request.
GitHub Actions Zapier Make curl Node Python cron Home Assistant Uptime Kuma any script
FAQ
Short answers. Details in the docs and privacy policy.
What is Noti?
Noti is a free iOS app that turns a personal HTTPS webhook into Apple Push Notification (APNs) alerts on your iPhone. Paste the URL into Zapier, GitHub Actions, or any script — no account and no custom backend required.
Do I need an account?
No. Open the app, copy your webhook, start posting. No email, no signup.
Is the webhook the password?
Yes. Anyone with the URL can send you pushes. Store it in secrets / env vars and treat it like an API key.
Is it free?
The basic webhook endpoint is free. You bring the iPhone; we handle APNs delivery.
Which platforms?
Noti is an iOS app today. The API is plain HTTPS — any client can call it.
What data do you store?
Device UUID, APNs token, and light activity metadata so we can deliver pushes. See the privacy policy.