NIP-66 relay monitoring events use a defined set of tags to encode relay health, capabilities, and metadata. This page documents every tag used across the three NIP-66 event kinds: kind 10166 (monitor announcement), kind 30166 (relay status), and kind 1066 (relay status delta). For background on the event kinds themselves, see NIP-66 event kinds.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/sandwichfarm/nostr-watch/llms.txt
Use this file to discover all available pages before exploring further.
Kind 10166 tags — Monitor Announcement
These tags appear in kind 10166 events published by monitors to describe their configuration and capabilities.| Tag | Values | Required | Description |
|---|---|---|---|
frequency | seconds, e.g. 3600 | Yes | How often this monitor checks relays |
n | clearnet, tor, i2p | Yes | Networks this monitor covers — one tag per network |
c | open, read, write, ssl, dns, geo, info | Yes | Check types performed — one tag per check type |
timeout | check name + ms, e.g. open, 5000 | No | Timeout for the named check (multi-value tag) |
k | kind number, e.g. 30166 | No | Event kinds this monitor publishes |
g | geohash, e.g. u4pruyd | No | Geohash of the monitor’s physical location |
Check interval in seconds as a string. A monitor with
["frequency", "3600"] checks relays every hour. Use this to determine how stale monitor data may be.Network type the monitor covers. One tag per network. Valid values:
clearnet, tor, i2p.Check type performed. One tag per check. Valid values:
open— can the monitor open a WebSocket connection?read— does the relay respond to REQ messages?write— does the relay accept EVENT messages?ssl— is the TLS certificate valid?dns— does the hostname resolve?geo— what is the relay’s geographic location?info— what does the NIP-11 info document say?
Multi-value tag. First value is the check name; second is the timeout in milliseconds as a string. Example:
["timeout", "open", "5000"].Event kinds this monitor publishes as a result of its checks. Typically
30166 and optionally 1066.Geohash of the monitor’s physical location. Used for geographic coverage analysis. Longer geohashes indicate more precision.
Kind 30166 tags — Relay Status
These tags appear in kind 30166 events, which are the primary relay status events. One event exists per (relay URL, monitor pubkey) pair.| Tag | Values | Required | Description |
|---|---|---|---|
d | relay URL | Yes | Addressable identifier — makes this event parameterized replaceable |
r | relay URL | Yes | Queryable relay URL (used in #r filter) |
n | clearnet, tor, i2p | Yes | Network type of this relay |
R | capability flag | No | Relay capability/requirement flag (see R tag below) |
rtt-open | milliseconds | No | Round-trip time for WebSocket open in ms |
rtt-read | milliseconds | No | Round-trip time for read check in ms |
rtt-write | milliseconds | No | Round-trip time for write check in ms |
N | NIP number | No | Supported NIP — one tag per NIP |
k | kind number | No | Supported event kind — one tag per kind, max 21 |
p | hex pubkey | No | Relay operator pubkey (from NIP-11) |
s | software name | No | Relay software name (from NIP-11 software field) |
L | namespace | No | Label namespace declaration (NIP-32) |
l | value + namespace | No | Label value in the declared namespace (NIP-32) |
The relay’s WebSocket URL. Serves as the
d tag for parameterized replaceability: only the most recent event per (pubkey, d tag) is retained on relays.The relay’s WebSocket URL, also stored as a queryable
r tag. Use #r in REQ filters to match this tag.Network type of the relay being monitored. One of
clearnet, tor, or i2p.Relay capability flag. Values without a
! prefix are active; values with ! are not active.| Value | Meaning |
|---|---|
open | Accepted a WebSocket connection |
read | Responded to REQ |
write | Accepted EVENT |
ssl | TLS certificate is valid |
auth | Requires NIP-42 auth |
payment | Requires payment |
pow | Requires proof of work |
!auth | Does not require auth |
!payment | Does not require payment |
!pow | Does not require proof of work |
Round-trip time for the WebSocket open check in milliseconds, as a string. Example:
["rtt-open", "120"].Round-trip time for the read check in milliseconds, as a string.
Round-trip time for the write check in milliseconds, as a string.
A NIP number supported by this relay, as a string. One tag per NIP. Example:
["N", "42"]. Query with '#N': ['42'].An event kind supported by this relay, as a string. One tag per kind, with a maximum of 21 kinds listed. Example:
["k", "1"].The relay operator’s Nostr pubkey in hex, sourced from the NIP-11 info document’s
pubkey field.The relay software name sourced from the NIP-11
software field. Examples: strfry, nostr-rs-relay, nostream.NIP-32 label namespace declaration. Paired with one or more
l tags that declare values in this namespace. Example: ["L", "ISO-639-1"].NIP-32 label value in a declared namespace. Two values: the label and the namespace. Example:
["l", "en", "ISO-639-1"]. Also used for NIP-66 version labeling: ["l", "draft7", "nip66.draft"].Kind 1066 tags — Relay Status Delta
Kind 1066 events use a subset of kind 30166 tags. Only tags that changed since the last status event are included.| Tag | Values | Description |
|---|---|---|
r | relay URL | Which relay this delta applies to |
R | capability flags | Changed requirement/capability flags |
rtt-open | milliseconds | Changed open latency |
rtt-read | milliseconds | Changed read latency |
rtt-write | milliseconds | Changed write latency |
N | NIP number | Changed NIP support |
Content field by kind
| Kind | Content | Format |
|---|---|---|
| 10166 | Empty string | — |
| 30166 | NIP-11 info document | JSON string — parse with JSON.parse() |
| 1066 | Empty or partial NIP-11 diff | JSON string |
REQ filter patterns
NIP-01 REQ filters support tag matching with the#<tag-letter> syntax. Tag filter values are always strings, even when the tag contains a number.
Multiple values within a single tag filter use OR logic:
'#n': ['clearnet', 'tor'] matches events with either clearnet or tor. Multiple separate tag filters use AND logic: '#n': ['clearnet'], '#R': ['!auth'] matches events that are clearnet and do not require auth.