mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-12-21 16:15:51 -05:00
91 lines
3.2 KiB
Markdown
91 lines
3.2 KiB
Markdown
|
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:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"method": "<method-name>",
|
||
|
"params": ["<array>", "<of>", "<parameters>"]
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Then it should return a response in the format
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"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](./98.md) 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.
|