{"service":"HALOWERK nostrwerk","endpoint":"/relay-health","method":"POST","content_type":"application/json","inputSchema":{"type":"object","additionalProperties":false,"properties":{"relays":{"type":"array","maxItems":12,"minItems":1,"items":{"type":"string"},"description":"wss relay addresses. Left empty, ten measured default relays are used."},"timeout_ms":{"type":"integer","minimum":500,"maximum":6000,"default":4000,"description":"Time limit per relay in milliseconds."},"probe_kind":{"type":"integer","minimum":0,"maximum":65535,"default":1,"description":"Event kind used for the probe query."},"read_nip11":{"type":"boolean","default":true,"description":"Also read the NIP-11 information document over https."}}},"requestExample":{"timeout_ms":4000,"probe_kind":1,"read_nip11":true},"operations":[{"method":"POST","inputSchema":{"type":"object","additionalProperties":false,"properties":{"relays":{"type":"array","maxItems":12,"minItems":1,"items":{"type":"string"},"description":"wss relay addresses. Left empty, ten measured default relays are used."},"timeout_ms":{"type":"integer","minimum":500,"maximum":6000,"default":4000,"description":"Time limit per relay in milliseconds."},"probe_kind":{"type":"integer","minimum":0,"maximum":65535,"default":1,"description":"Event kind used for the probe query."},"read_nip11":{"type":"boolean","default":true,"description":"Also read the NIP-11 information document over https."}}},"requestExample":{"timeout_ms":4000,"probe_kind":1,"read_nip11":true}}],"example_request":{"timeout_ms":4000,"probe_kind":1,"read_nip11":true},"serviceName":"nostr_relay_health","tags":["nostr","relay","monitoring"],"outputSchema":{"type":"object"},"outputExample":{"measured_at":"2026-10-22T23:37:34.515Z","relays":[{"relay":"wss://nos.lol","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":5,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: nos.lol","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: nos.lol"}},{"relay":"wss://relay.primal.net","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":2,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: relay.primal.net","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: relay.primal.net"}},{"relay":"wss://nostr.mom","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":2,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: nostr.mom","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: nostr.mom"}},{"relay":"wss://relay.snort.social","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":2,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: relay.snort.social","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: relay.snort.social"}},{"relay":"wss://purplerelay.com","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":2,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: purplerelay.com","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: purplerelay.com"}},{"relay":"wss://relay.nostr.net","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":1,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: relay.nostr.net","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: relay.nostr.net"}},{"relay":"wss://offchain.pub","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":1,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: offchain.pub","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: offchain.pub"}},{"relay":"wss://nostr.oxtr.dev","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":1,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: nostr.oxtr.dev","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: nostr.oxtr.dev"}},{"relay":"wss://relay.nostrplebs.com","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":1,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: relay.nostrplebs.com","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: relay.nostrplebs.com"}},{"relay":"wss://relay.mostr.pub","verdict":"unreachable","reachable":false,"connect_ms":null,"eose":false,"total_ms":0,"events_returned":0,"auth_required":false,"error":"Name nicht auflösbar: relay.mostr.pub","notice":null,"resolved_addresses":null,"nip11":{"available":false,"reason":"Name nicht auflösbar: relay.mostr.pub"}}],"summary":{"total":10,"healthy":0,"auth_required":0,"unreachable":10,"median_connect_ms":null,"fastest":null,"recommended":[]},"verdict_scale":{"healthy":"connected, answered the REQ query with EOSE and returned at least one event","healthy_paid":"as healthy, but the NIP-11 document declares payment_required","reachable_but_empty":"connected and reached EOSE, but returned no event for the probe kind","answers_without_eose":"connected and sent events, but never reached end of stored events within the limit","auth_required":"demands NIP-42 authentication; without it this relay returns nothing","unreachable":"no connection, name unresolvable, or closed before an answer"},"method":"One WebSocket REQ query plus one https NIP-11 read per relay, all relays in parallel, single point in time from one location.","max_relays":12}}