Send push notifications to your phone or desktop using PUT/POST
Full LLM thinking from the 4-phase benchmark pipeline.
{
"service_type": "platform",
"base_url": "https://ntfy.sh",
"auth_method": "none",
"auth_config": {
"note": "Public server ntfy.sh allows unauthenticated publishing/subscribing to public topics. Self-hosted instances and the paid ntfy Pro tier support access control via username/password (HTTP Basic) and Bearer tokens. Topic-level ACLs can also be configured on self-hosted servers."
},
"endpoints": [
{
"name": "Publish notification (simple)",
"method": "POST",
"path": "/{topic}",
"description": "Publish a message to a topic. Body is the message content. Response is JSON with notification details.",
"example": "curl -d 'Backup finished' ntfy.sh/mytopic"
},
{
"name": "Publish notification (with headers)",
"method": "PUT",
"path": "/{topic}",
"description": "Publish a message using HTTP headers for title, priority, tags, click, actions, attachments, etc.",
"headers": {
"Title": "Notification title",
"Priority": "min|low|default|high|max or 1-5",
"Tags": "Comma-separated emoji shortcodes or tags",
"Click": "URL to open when notification is tapped",
"Actions": "Action buttons (view, http, broadcast)",
"Attach": "Attachment URL",
"Markdown": "Set to 'yes' to enable Markdown formatting",
"Filename": "Attachment filename"
},
"example": "curl -H 'Title: Backup done' -H 'Priority: high' -H 'Tags: warning,cd' -d 'Backup finished' ntfy.sh/mytopic"
},
{
"name": "Publish as JSON",
"method": "POST",
"path": "/",
"description": "Publish a message using a JSON body with topic and message fields plus optional metadata.",
"body_schema": {
"topic": "string (required)",
"message": "string",
"title": "string",
"priority": "int (1-5)",
"tags": "array of strings",
"click": "string (URL)",
"attach": "string (URL)",
"actions": "array of action objects",
"markdown": "boolean",
"delay": "duration string",
"email": "string"
},
"example": "curl -d '{\"topic\":\"mytopic\",\"message\":\"Hello\",\"title\":\"Greeting\"}' ntfy.sh"
},
{
"name": "Subscribe to topic (JSON stream)",
"method": "GET",
"path": "/{topic}/json",
"description": "Stream messages from a topic as newline-delimited JSON. Keeps the connection open.",
"example": "curl -s ntfy.sh/mytopic/json"
},
{
"name": "Subscribe to topic (SSE)",
"method": "GET",
"path": "/{topic}/sse",
"description": "Server-Sent Events stream of messages for browser clients.",
"example": "curl -s ntfy.sh/mytopic/sse"
},
{
"name": "Subscribe to topic (raw)",
"method": "GET",
"path": "/{topic}/raw",
"description": "Stream raw message bodies only, one per line.",
"example": "curl -s ntfy.sh/mytopic/raw"
},
{
"name": "Fetch cached messages",
"method": "GET",
"path": "/{topic}/json?poll=1&since=<duration|timestamp>",
"description": "Poll for messages since a given time (e.g. 10m, 30s, Unix timestamp, or 'all').",
"example": "curl -s 'ntfy.sh/mytopic/json?poll=1&since=10m'"
},
{
"name": "Server health",
"method": "GET",
"path": "/v1/health",
"description": "Health check endpoint returning {\"healthy\":true}."
},
{
"name": "Server configuration",
"method": "GET",
"path": "/v1/config",
"description": "Returns server configuration and capabilities (e.g. attachment limits, auth status)."
},
{
"name": "Account endpoints (ntfy Pro / self-hosted)",
"method": "GET/POST/PUT/DELETE",
"path": "/v1/account",
"description": "Manage user accounts, tokens, and subscriptions when authentication is enabled."
},
{
"name": "Attachment upload (self-hosted)",
"method": "PUT",
"path": "/{topic}",
"description": "Publish a message with a file attachment by sending the file as the request body and setting filename/attach headers.",
"example": "curl -T image.jpg -H 'Filename: image.jpg' ntfy.sh/mytopic"
}
],
"pricing_model": {
"type": "freemium",
"details": {
"free_public_server": "ntfy.sh public server is free to use for public topics. Rate-limited per client IP.",
"ntfy_pro": "Paid hosted tier (~$6.50/month or yearly) adds account-based access control, private topics, higher limits, and reserved topics.",
"self_hosted": "Open-source (Apache 2.0 / GPL for Android app) and free to self-host via Docker, binary, apt/rpm packages.",
"notes": "No vendor lock-in; all functionality available self-hosted."
}
},
"rate_limits": {
"public_server": "Per-IP rate limiting on the public ntfy.sh instance. Defaults roughly: ~60 requests per visitor per hour for publishing, and limited concurrent subscriptions. Exact val1/3 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| website_uptime | GET / | 200 | 294ms |
| robots_txt | GET /robots.txt | 404 | 302ms |
| llms_txt | GET /llms.txt | 404 | 192ms |
{
"overall": 72,
"dimensions": {
"token_efficiency": 9.0,
"first_try_success": 8.5,
"response_parseability": 8.0,
"error_clarity": 6.5,
"doc_quality": 7.5,
"auth_simplicity": 9.0,
"latency": 9.5,
"consistency": 7.5
},
"pricing_normalized": {
"model": "open-source-self-hosted / freemium hosted",
"free_tier": "generous (self-host unlimited)",
"paid_tier": "ntfy.sh Pro (per-topic subscriptions)"
},
"issues": [
"Missing robots.txt (404) — search/agent crawlers get no guidance",
"Missing llms.txt (404) — no structured agent-facing documentation entry point",
"No security headers detected in uptime response",
"Auth model not surfaced in provided metadata (API access requires topic naming discipline to stay simple)",
"No structured API schema/capabilities JSON exposed at root"
],
"recommendations": [
"Publish llms.txt with concise API summary (PUT/POST to https://ntfy.sh/<topic>) and auth notes",
"Add robots.txt to allow agent/docs crawling",
"Add security headers (HSTS, CSP, X-Content-Type-Options) for trust signals",
"Expose an OpenAPI/JSON schema for the publish endpoint to improve response_parseability",
"Document rate limits and message-size limits prominently for error_clarity"
]
}Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.
<a href="https://prowl.world/service/ntfy">
<img src="https://prowl.world/badge/ntfy.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard