Zetlyn

One field · the whole response · a webhook

Monitor a JSON API for changes

Watch one field of a JSON API, or the whole response, and get the value before and the value now by email, Telegram, Slack, Discord or a signed webhook when it changes.

api.example/tool/releases/latest

{

  "tag_name": "v1.8.2""v1.9.0",

  "name": "Tool 1.8.2""Tool 1.9.0",

  "draft": false,

  "prerelease": false

}

tag_name api.examplewatchingsent
Before–v1.8.2
Nowv1.8.2v1.9.0
Toyour webhook, signed

Zetlyn reads a JSON response as one line per value, each with its path beside it:

assets[0].name: zetlyn-v1.0.0-x86_64-unknown-linux-gnu.tar.gz
draft: false
tag_name: v1.0.0

Each value is a place you can watch, like a price on a web page.

Watch one field

Through the API:

curl -s https://zetlyn.com/api/v1/preview \
  -H "Authorization: Bearer $ZETLYN_KEY" -H "Content-Type: application/json" \
  -d '{"url": "https://api.github.com/repos/rust-lang/rust/releases/latest", "find": "tag_name"}'

The answer has the field's selector. Pass it to POST /watches, with a condition if you want one: {"below": 400}, {"above": 1000}, {"contains": "stable"}, {"not_contains": "1.99"}.

Watch the whole response

Without a selector Zetlyn compares the whole document line by line. Fields are in the order of their names, so an API that only reorders its fields is no change.

Get it as a webhook

Under Notifications, add a webhook: each change is posted to your address as JSON, signed with Zetlyn-Signature: t=…,v1=… (HMAC-SHA256 of t.body). The format is in the docs and in openapi.json.

Only public addresses are read; an API that needs a key of yours is not.

Watch your first page.
The first 3 days are free.