nips/86.md
fiatjaf_ 73f65133fc
add NIP-86: Relay Management API (#1325)
Co-authored-by: Alex Gleason <alex@alexgleason.me>
2024-11-25 13:21:47 -03:00

3.2 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 format

{
  "result": {"<arbitrary>": "<value>"},
  "error": "<optional error message, if the call has errored>"
}

This is the list of methods that may be supported:

  • supportedmethods:
    • params: []
    • result: ["<method-name>", "<method-name>", ...] (an array with the names of all the other supported methods)
  • banpubkey:
    • params: ["<32-byte-hex-public-key>", "<optional-reason>"]
    • result: true (a boolean always set to true)
  • listbannedpubkeys:
    • params: []
    • result: [{"pubkey": "<32-byte-hex>", "reason": "<optional-reason>"}, ...], an array of objects
  • allowpubkey:
    • params: ["<32-byte-hex-public-key>", "<optional-reason>"]
    • result: true (a boolean always set to true)
  • listallowedpubkeys:
    • params: []
    • result: [{"pubkey": "<32-byte-hex>", "reason": "<optional-reason>"}, ...], an array of objects
  • listeventsneedingmoderation:
    • params: []
    • result: [{"id": "<32-byte-hex>", "reason": "<optional-reason>"}], an array of objects
  • allowevent:
    • params: ["<32-byte-hex-event-id>", "<optional-reason>"]
    • result: true (a boolean always set to true)
  • banevent:
    • params: ["<32-byte-hex-event-id>", "<optional-reason>"]
    • result: true (a boolean always set to true)
  • listbannedevents:
    • params: []
    • result: [{"id": "<32-byte hex>", "reason": "<optional-reason>"}, ...], an array of objects
  • changerelayname:
    • params: ["<new-name>"]
    • result: true (a boolean always set to true)
  • changerelaydescription:
    • params: ["<new-description>"]
    • result: true (a boolean always set to true)
  • changerelayicon:
    • params: ["<new-icon-url>"]
    • result: true (a boolean always set to true)
  • allowkind:
    • params: [<kind-number>]
    • result: true (a boolean always set to true)
  • disallowkind:
    • params: [<kind-number>]
    • result: true (a boolean always set to true)
  • listallowedkinds:
    • params: []
    • result: [<kind-number>, ...], an array of numbers
  • blockip:
    • params: ["<ip-address>", "<optional-reason>"]
    • result: true (a boolean always set to true)
  • unblockip:
    • params: ["<ip-address>"]
    • result: true (a boolean always set to true)
  • listblockedips:
    • 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.