This browser cannot display the page correctly. Please update your browser to the latest version.

Miharu

Webhook Integration Guide

When you set up a Webhook, Miharu sends its monitoring results (System Alerts) to a URL you specify as an HTTP POST with a JSON body. You can connect it to Zapier, Make, n8n, your own server, and more to process notifications however you like.

This feature is for developers and power users. A receiving endpoint is required on your side.

1. Setup

  1. 1In the app, open “External Notifications” → “Webhook”.
  2. 2Enter the destination Webhook URL (must start with https://).
  3. 3Optionally set the notification filter (e.g., only a specific Monitoring Group).
  4. 4On save, one test notification confirming the setup is delivered.

2. HTTP Specification

Method
POST
Body
JSON (UTF-8)
Key headers
Content-Type: application/json; charset=utf-8 User-Agent: Miharu-Webhook/1.0 X-Miharu-Event: <event> (event type) X-Miharu-Notification-Id: <id> (unique notification ID)
Timeout
10 seconds
Success
Return an HTTP 2xx status
Return 2xx promptly. If a non-2xx response occurs 10 times in a row, sending to that Webhook stops automatically (re-enable by reconfiguring in the app). Do heavy processing asynchronously after responding.

No signature (e.g., HMAC) header is sent. The Webhook URL itself is the secret (see Security below).

3. Payload (common fields)

source stringConstant "miharu"
version stringPayload spec version (currently "1")
id stringUnique notification ID (UUID). The same event keeps the same id on retries (use it to deduplicate).
timestamp stringEvent time (ISO 8601, UTC)
language stringLanguage code (en/ja/de/pt/es/fr/ko)
event stringEvent type (table below)
monitor object / nullMonitored page {id, name, url}. null for system events.
message objectDisplay text {body, label}. label is null when not applicable.
detail objectPer-event details (below)

4. Event types and detail

page_changedChange Detection (page content changed since last check){ diff: [...], truncated: bool }
keyword_hitKeyword Detection{ hits: [{ keywords: [...], excerpts: [...] }] }
new_linkNew Link Detection{ links: [{ text, url }] }
price_changedPrice/Value change{ target_name, before, after }
text_changedText change{ target_name, before, after }
systemSystem notification (setup complete, monitoring paused, etc.){ kind: string } (a string identifying the kind)

The diff for page_changed

diff is an array of changes. Each element is one of:

If truncated is true, the diff was large and partially omitted.

5. Examples

Change Detection (page_changed)

JSON
{
  "source": "miharu",
  "version": "1",
  "id": "5c2e1b7a-9f3d-5a6b-8c4e-1d2f3a4b5c6d",
  "timestamp": "2026-05-22T01:23:45Z",
  "language": "en",
  "event": "page_changed",
  "monitor": { "id": "abc123", "name": "Product page", "url": "https://example.com/item" },
  "message": { "body": "The page has been updated.", "label": "Update" },
  "detail": {
    "diff": [
      { "op": "replaced", "before": "Out of stock", "after": "In stock" },
      { "op": "added", "text": "Restocked today" }
    ],
    "truncated": false
  }
}

Keyword Detection (keyword_hit)

JSON
{
  "source": "miharu", "version": "1", "id": "…",
  "timestamp": "2026-05-22T01:23:45Z", "language": "en",
  "event": "keyword_hit",
  "monitor": { "id": "abc123", "name": "Stock page", "url": "https://example.com/stock" },
  "message": { "body": "A keyword has been detected.", "label": "Keyword" },
  "detail": { "hits": [ { "keywords": ["restock"], "excerpts": ["…restocked today…"] } ] }
}

New Link Detection (new_link)

JSON
{
  "…": "…",
  "event": "new_link",
  "message": { "body": "A new link has been detected.", "label": "New Link" },
  "detail": { "links": [ { "text": "New product announcement", "url": "https://example.com/news/123" } ] }
}

Price/Value change (price_changed)

JSON
{
  "…": "…",
  "event": "price_changed",
  "message": { "body": "“Price” has changed.\n\n1980 → 1480", "label": "Price/Value" },
  "detail": { "target_name": "Price", "before": "1980", "after": "1480" }
}

6. Idempotency (deduplication)

The same event always arrives with the same id, even on retries (the same value is also in the X-Miharu-Notification-Id header). Use id on your side to avoid processing duplicates.

7. Security

8. Integrations

Generate a receiving URL in your service and set it as the Webhook URL in Miharu.

9. Limitations

10. Troubleshooting


Share your feedback via “Feedback & Suggestions” in the app.

Every notification channel is set up from the app.Get the app