This NIP defines `30303`, a parameterized replaceable event [NIP-33], referred to as Relay Statuses. Relay Statuses use tags extensively and **may** have `.content` populated with Stringified JSON.
Relay status events have **two** (2) required tags and **eight** (8) optional tags. Relay status events introduce **one** (1) new indexable tag (NIP-12)
The tags should be used to represent the Relay's abilities and meta at a point in time. Below the `tags schema` is expressed using pseudo-types for reasons of communication and brevity, for example `tagDescriptor[]`.
1.`"d" == tagId[0]` The relay URL. The `#d` tag **must** be included in the `event.tags[]` array. `tagId[1]`**must** be the relay websocket URL. The URL **should** be normalized.
2.`"expiration" == tagExpiration[0]` [NIP-40]. The `tagExpiration[]` tag **must** be included in the `event.tags[]` array. `tagExpiration[1]`**should** be set to a future timestamp that correlates with the publisher's intended update frequency.
3.`"t" == tagTopic[0]` Topics relevant to the relay. `tagTopic[]`**may** be included in the `event.tags[]` array. `tagTopic[1]`**should** be string. There **should** be no more than **twenty (20)**`tagTopic[]` arrays.
4.`"g" == tagGeo[0]` Relay Geo Data. `tagGeo[]`**may** be included in the `event.tags[]` array. `tagGeo[1]`**must** be string and **should** be a geohash. There **may** be strings defined in the key range `2+` (`tagGeo[2...]`) and they **must** be strings if set. `tagGeo[]` items **should** be descending by precision. There **should** be no more than **one (1)**`tagGeo[]` per event.
5.`"read" == tagRead[0]` Was able to read from the relay. `tagRead[]`**may** be included in the `event.tags[]` array. `tagRead[1]`**must** be type string as exactly `true` or `false`
6.`"write" == tagWrite[0]` Was able to write to the relay. `tagWrite[]`**may** be included in the `event.tags[]` array. `tagWrite[1]`**must** be type string as exactly `true` or `false`
7.`"ssl" == tagSsl[0]` Is the relay's SSL valid. `tagSsl[]`**may** be included in the `event.tags[]` array. `tagSsl[1]`**must** be type string as exactly `true` or `false`
8.`"ip" == tagIp[0]` Relay IP. `tagIp[]`**may** be included in the `event.tags[]` array. `tagIp[1]`**must** be string. There **may** be more than one (1) `tagIp[]`
9.`"events" == tagEvents[0]` Number of events on relay. `tagEvents[]`**may** be included in the `event.tags[]` array. `tagEvents[1]`**must** be string. There **should** only be **one (1)**`tagEvents[]`
10.`"users" == tagUsers[0]` Number of users on relay. `tagUsers[]`**may** be included in the `event.tags[]` array. `tagUsers[1]`**must** be string. There **should** be no more than **one (1)**`tagUsers[]`
The `.content` of these events **may** be empty. `.content`**may** contain stringified JSON. The parsed JSON has a flexible schema, all members are optional. The parsed `.content` JSON **should** be extended by NIPs.
## Testing Criteria
The testing criteria to determine conditions defined in event's tags **may** be subjective and **may** vary between publishers.
The data in `30303`**may** be erroneous, intentionally or otherwise. Where accuracy is required, the data in `30303` events **should** be subscribed to by populating the `authors` filter array with the pubkeys of trusted **publishers**