nips/200.md

47 lines
2.1 KiB
Markdown
Raw Normal View History

NIP-200
=======
Nostr relay communication over HTTP(s) (NoH)
--------------------------------------------
`draft` `optional` `author:yonle`
This NIP describes the basic of communicating to relays over HTTP(S) requests.
## Communication between clients and relays
Relays may expose NoH endpoints that client could reach. Client may make HTTP requests to each relays endpoint for specified tasks as specified in `noh` field at `/.well-known/nostr.json`. Relays MAY limit number of requests from specific IP/Client/etc.
### From client to relay: getting events and sending event
In `noh` field at `/.well-known/nostr.json`, Client could make a request to `req` or `publish` endpoint.
When fetching events, Client can optionally specify filters directly into the URI search query:
- `<req>?<filter>`
`<filter>` is a querystrings that determines what events will be received in that request. it can have the following attributes:
```
ids=<a list of event ids separated by commas>&
authors=<a list of lowercase pubkeys separated by commas>&
kinds=<a list of kinds numbers separated by commas>&
%23<single-letter (a-zA-Z)>=<a list of tag values separated by commas. for %23e a list of event ids, for %23p a list of event pubkeys>&
since=<an integer unix timestamp in seconds, events must be newer than this to pass>&
until=<an integer unix timestamp in seconds, events must be older than this to pass>&
limit=<maximum number of events relays SHOULD return in the initial query>
```
Request URL Examples:
- `https://my-relay.com/__nostr/req?kinds=0,1&limit=10`
- `https://my-relay.com/__nostr/req?authors=12345,67890`
To send event to relay, Client will need to make POST request to `publish` endpoint with POST body containing the JSON of the event.
### From relay to client: sending responses and notices
Every NoH response is a JSON body that contain the following JSON field:
- `status`: Request status code in integer. `0` means OK, `1` means invalid request, `2` means relay error.
- `results`: Array of relay response. Usually contain events requested by client.
- `notice`: Human readable error.