Nostr NIPS 86
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 format
{
"result": {"<arbitrary>": "<value>"},
"error": "<optional error message, if the call has errored>"
}
This is the list of methods that may be supported:
supportedmethods
Lists the methods supported by the relay. May be customized to match permissions assigned to the authenticated user.
- params:
[] - result:
["<method-name>", "<method-name>", ...](an array with the names of all the other supported methods)
banpubkey
Bans a pubkey from the relay. Should automatically remove the pubkey from the allow list.
- params:
["<32-byte-hex-public-key>", "<optional-reason>"] - result:
true(a boolean always set totrue)
unbanpubkey
Removes a pubkey from the relay’s ban list. Should not automatically add the pubkey to the allow list.
- params:
["<32-byte-hex-public-key>", "<optional-reason>"] - result:
true(a boolean always set totrue)
listbannedpubkeys
Lists pubkeys banned from the relay.
- params:
[] - result:
[{"pubkey": "<32-byte-hex>", "reason": "<optional-reason>"}, ...], an array of objects
allowpubkey
Adds a pubkey to the relay’s allow list. Should automatically remove the pubkey from the ban list.
- params:
["<32-byte-hex-public-key>", "<optional-reason>"] - result:
true(a boolean always set totrue)
unallowpubkey
Removes a pubkey from the relay’s allow list. Should not automatically add the pubkey to the ban list.
- params:
["<32-byte-hex-public-key>", "<optional-reason>"] - result:
true(a boolean always set totrue)
listallowedpubkeys
Lists pubkeys on the relay’s allow list.
- params:
[] - result:
[{"pubkey": "<32-byte-hex>", "reason": "<optional-reason>"}, ...], an array of objects
createrole
Creates a new role.
- params:
[id, label, description, color, order] - result:
true(boolean true)
editrole
Updates an existing role.
- params:
[id, label, description, color, order] - result:
true(boolean true)
deleterole
Deletes a role.
- params:
[id] - result:
true(boolean true)
assignrole
Assigns a role to a pubkey.
- params:
["<32-byte-hex-public-key>", "<role-id>"] - result:
true(a boolean always set totrue)
unassignrole
Removes a role from a pubkey.
- params:
["<32-byte-hex-public-key>", "<role-id>"] - result:
true(a boolean always set totrue)
listclaims
Lists NIP 43 invite codes currently accepted by the relay.
- params:
[] - result:
[claim, ...], an array of NIP 43 invite codes
createclaim
Creates a new NIP 43 invite code.
- params:
[claim] - result:
true(boolean true)
deleteclaim
Revokes a NIP 43 invite code.
- params:
[claim] - result:
true(boolean true)
listeventsneedingmoderation
Lists events awaiting moderation.
- params:
[] - result:
[{"id": "<32-byte-hex>", "reason": "<optional-reason>"}], an array of objects
allowevent
Adds an event to the relay’s allow list. Should automatically remove the event from the ban list.
- params:
["<32-byte-hex-event-id>", "<optional-reason>"] - result:
true(a boolean always set totrue)
unallowevent
Removes an event from the relay’s allow list. Should not automatically add the event to the ban list.
- params:
["<32-byte-hex-event-id>", "<optional-reason>"] - result:
true(a boolean always set totrue)
banevent
Bans an event from the relay. Should automatically remove the event from the allow list.
- params:
["<32-byte-hex-event-id>", "<optional-reason>"] - result:
true(a boolean always set totrue)
unbanevent
Removes an event from the relay’s ban list. Should not automatically add the event to the allow list.
- params:
["<32-byte-hex-event-id>", "<optional-reason>"] - result:
true(a boolean always set totrue)
listbannedevents
Lists events banned from the relay.
- params:
[] - result:
[{"id": "<32-byte hex>", "reason": "<optional-reason>"}, ...], an array of objects
listallowedevents
Lists events on the relay’s allow list.
- params:
[] - result:
[{"id": "<32-byte-hex>", "reason": "<optional-reason>"}, ...], an array of objects
changerelayname
Changes the relay’s name.
- params:
["<new-name>"] - result:
true(a boolean always set totrue)
changerelaydescription
Changes the relay’s description.
- params:
["<new-description>"] - result:
true(a boolean always set totrue)
changerelayicon
Changes the relay’s icon.
- params:
["<new-icon-url>"] - result:
true(a boolean always set totrue)
allowkind
Adds an event kind to the relay’s allow list.
- params:
[<kind-number>] - result:
true(a boolean always set totrue)
disallowkind
Disallows an event kind.
- params:
[<kind-number>] - result:
true(a boolean always set totrue)
listallowedkinds
Lists event kinds on the relay’s allow list.
- params:
[] - result:
[<kind-number>, ...], an array of numbers
listdisallowedkinds
Lists event kinds the relay disallows.
- params:
[] - result:
[<kind-number>, ...], an array of numbers
blockip
Adds an IP address to the relay’s block list.
- params:
["<ip-address>", "<optional-reason>"] - result:
true(a boolean always set totrue)
unblockip
Removes an IP address from the relay’s block list.
- params:
["<ip-address>"] - result:
true(a boolean always set totrue)
listblockedips
Lists IP addresses blocked by the relay.
- params:
[] - result:
[{"ip": "<ip-address>", "reason": "<optional-reason>"}, ...], an array of objects
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 401 response.
Source: nostr-protocol/nips/86.md version: 62d5fed 2026-09-23T18:14:11-07:00