nips/200.md
Yonle 0d3573e0f5 or probably nope.
Signed-off-by: Yonle <yonle@lecturify.net>
2024-01-08 20:20:08 +07:00

2.2 KiB

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 NIP-11. Relays MAY limit number of requests from specific IP/Client/etc.

Relays must ensure that the NoH endpoints MUST be served with Access-Control-Allow-Origin: * header to ensure it can be validated by pure JS apps running in modern browsers.

From client to relay: getting events and sending event

Client could make a request to req or publish endpoint that were specified in /.well-known/nostr.json

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 blob of the event.

From relay to client: sending responses and notices

Every NoH response is a JSON body that contain the following JSON field:

  • results: Array of relay response. Usually contain events requested by client.
  • notice: Human readable error.

Relay may also respond with HTTP status code:

  • 200: OK / Success
  • 400: Invalid Request
  • 500: Relay/Server error