4.6 KiB
NIP-86
Relay Management API
draft
optional
Relays may provide an API for performing management tasks. This is made available as a JSON-RPC-like request-response protocol over HTTP, on the same URI as the relay's websocket.
When a relay receives an HTTP(s) request with a Content-Type
header of application/nostr+json+rpc
to a URI supporting WebSocket upgrades, it should parse the request as a JSON document with the following fields:
{
"method": "<method-name>",
"params": ["<array>", "<of>", "<parameters>"]
}
Then it should return a response in the below format:
{
"result": {"<arbitrary>": "<value>"},
"error": "<optional error message, if the call has errored>"
}
Standard Methods
Here is a list of methods that MAY be supported:
supportedmethods
:- params:
[]
- result:
["<method-name>", "<method-name>", /* rest of method names... */ ]
- params:
Extra fields MAY be sent from the relay depending on implementation.
stats
:- params:
[]
- result:
{ "num_connections": <number>, "uptime": <uptime-in-seconds>, "bytes_received": <number>, "bytes_sent": <number>, "num_events": <number>, "event_bytes": <number>, "num_files": <number>, "file_bytes": <number> // and more... }
- params:
Extra fields MAY be sent from the relay depending on implementation.
listeventsneedingmoderation
:- params:
[]
- result:
[{ "id": "<32-byte-hex>", "reason": "<optional-reason>" }, ...]
- params:
Relay MAY return reported, muted profiles, and similar events as a result.
banpubkey
:- params:
["<32-byte-hex-public-key>", "<optional-reason>"]
- result:
true
(a boolean always set totrue
)
- params:
The relay MAY remove events sent by pubkey
and prevent new events from being written.
listbannedpubkeys
:- params:
[]
- result:
[{"pubkey": "<32-byte-hex>", "reason": "<optional-reason>"}, ...]
(an array of objects)
- params:
allowpubkey
:- params:
["<32-byte-hex-public-key>", "<optional-reason>"]
- result:
true
(a boolean always set totrue
)
- params:
listallowedpubkeys
:- params:
[]
- result:
[{"pubkey": "<32-byte-hex>", "reason": "<optional-reason>"}, ...]
(an array of objects)
- params:
banevent
:- params:
["<32-byte-hex-event-id>", "<optional-reason>"]
- result:
true
(a boolean always set totrue
)
- params:
Relay SHOULD delete and prevent re-broadcasting of event.
listbannedevents
:- params:
[]
- result:
[{"id": "<32-byte-hex>", "reason": "<optional-reason>"}, ...]
(an array of objects)
- params:
allowevent
:- params:
["<32-byte-hex-event-id>", "<optional-reason>"]
- result:
true
(a boolean always set totrue
)
- params:
listallowedevents
:- params:
[]
- result:
[{"id": "<32-byte-hex>", "reason": "<optional-reason>"}, ...]
(an array of objects)
- params:
allowkind
:- params:
[<kind-number>]
- result:
true
(a boolean always set totrue
)
- params:
disallowkind
:- params:
[<kind-number>]
- result:
true
(a boolean always set totrue
)
- params:
listdisallowedkinds
:- params:
[]
- result:
[<kind-number>, <another-kind-number>, /* and more... */]
(an array of objects)
- params:
listallowedkinds
:- params:
[]
- result:
[<kind-number>, <another-kind-number>, /* and more... */]
(an array of objects)
- params:
blockip
:- params:
["<ip-address>", "<optional-reason>"]
- result:
true
(a boolean always set totrue
)
- params:
unblockip
:- params:
["<ip-address>"]
- result:
true
(a boolean always set totrue
)
- params:
listblockedips
:- params:
[]
- result:
[{"ip": "<ip-address>", "reason": "<optional-reason>"}, ...]
(an array of objects)
- params:
grantadmin
:- params:
["<32-byte-hex-public-key>", { "allowed_methods": [...]}]
- result:
true
(a boolean always set totrue
)
- params:
If the admin right is already granted, the allowed methods list must be rewritten.
revokeadmin
:- params:
["<32-byte-hex-public-key>", { "disallowed_methods": [...]}]
- result:
true
(a boolean always set totrue
)
- params:
If the resulting allowed_methods
list for admin was empty, admin can be removed.
Authorization
The request MUST contain an Authorization
header with a valid NIP-98 event, except the payload
tag is REQUIRED. The u
tag is the relay URL.
If Authorization
is not provided or is invalid, the endpoint should return a response with a 401 status code.