NIP-73
======

External Content IDs
--------------------

`draft` `optional`

There are certain established global content identifiers such as [Book ISBNs](https://en.wikipedia.org/wiki/ISBN), [Podcast GUIDs](https://podcastnamespace.org/tag/guid), and [Movie ISANs](https://en.wikipedia.org/wiki/International_Standard_Audiovisual_Number) that are useful to reference in nostr events so that clients can query all the events assosiated with these ids.


`i` tags are used for referencing these external content ids, with `k` tags representing the external content id kind so that clients can query all the events for a specific kind.

## Supported IDs

| Type                   | `i` tag                                                    | `k` tag                  |
| ---                    | ---                                                        | ---                      |
| URLs                   | "`<URL, normalized, no fragment>`"                         | "web"                    |
| Books                  | "isbn:`<id, without hyphens>`"                             | "isbn"                   |
| Geohashes              | "geo:`<geohash, lowercase>`"                               | "geo"                    |
| Movies                 | "isan:`<id, without version part>`"                        | "isan"                   |
| Papers                 | "doi:`<id, lowercase>`"                                    | "doi"                    |
| Hashtags               | "#`<topic, lowercase>`"                                    | "#"                      |
| Podcast Feeds          | "podcast:guid:`<guid>`"                                    | "podcast:guid"           |
| Podcast Episodes       | "podcast:item:guid:`<guid>`"                               | "podcast:item:guid"      |
| Podcast Publishers     | "podcast:publisher:guid:`<guid>`"                          | "podcast:publisher:guid" |
| Blockchain Transaction | "`<blockchain>`:[`<chainId>`:]tx:`<txid, hex, lowercase>`" | "`<blockchain>`:tx"      |
| Blockchain Address     | "`<blockchain>`:[`<chainId>`:]address:`<address>`"         | "`<blockchain>`:address" |

---

## Examples


### Webpages

For the webpage "https://myblog.example.com/post/2012-03-27/hello-world" the "i" and "k" tags are:

```jsonc
[
  ["i", "https://myblog.example.com/post/2012-03-27/hello-world"],
  ["k", "web"]
]
```

### Books:

- Book ISBN: `["i", "isbn:9780765382030"]` - https://isbnsearch.org/isbn/9780765382030

Book ISBNs MUST be referenced _**without hyphens**_ as many book search APIs return the ISBNs without hyphens. Removing hypens from ISBNs is trivial, whereas adding the hyphens back in is non-trivial requiring a library.

### Podcasts:

- Podcast RSS Feed GUID: `["i", "podcast:guid:c90e609a-df1e-596a-bd5e-57bcc8aad6cc"]` - https://podcastindex.org/podcast/c90e609a-df1e-596a-bd5e-57bcc8aad6cc
- Podcast RSS Item GUID: `["i", "podcast:item:guid:d98d189b-dc7b-45b1-8720-d4b98690f31f"]`
- Podcast RSS Publisher GUID: `["i", "podcast:publisher:guid:18bcbf10-6701-4ffb-b255-bc057390d738"]`

### Movies:

- Movie ISAN: `["i", "isan:0000-0000-401A-0000-7"]` - https://web.isan.org/public/en/isan/0000-0000-401A-0000-7

Movie ISANs SHOULD be referenced  _**without the version part**_ as the versions / edits of movies are not relevant. More info on ISAN parts here -  https://support.isan.org/hc/en-us/articles/360002783131-Records-relations-and-hierarchies-in-the-ISAN-Registry

### Blockchain

`<blockchain>` can be any layer 1 chain (`bitcoin`, `ethereum`, `solana`, ...). If necessary (e.g. for ethereum), you can specify a `<chainId>`.

#### Bitcoin

```
bitcoin:address:<bech32, lowercase | base58, case sensitive>
bitcoin:tx:<txid, hex, lowercase>
```

E.g. https://blockstream.info/tx/a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

```jsonc
[
  ["i", "bitcoin:tx:a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d"],
  ["k", "bitcoin:tx"]
]
```

E.g. https://blockstream.info/address/1HQ3Go3ggs8pFnXuHVHRytPCq5fGG8Hbhx

```jsonc
[
  ["i", "bitcoin:address:1HQ3Go3ggs8pFnXuHVHRytPCq5fGG8Hbhx"],
  ["k", "bitcoin:address"]
]
```

#### Ethereum (and other EVM chains)

```
ethereum:<chainId, integer>:tx:<txHash, hex, lowercase>
ethereum:<chainId, integer>:address:<hex, lowercase>
```

E.g. https://etherscan.io/address/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045

```jsonc
[
  ["i", "ethereum:1:address:0xd8da6bf26964af9d7eed9e03e53415d37aa96045"],
  ["k", "ethereum:address"]
]
```

E.g. https://gnosisscan.io/tx/0x98f7812be496f97f80e2e98d66358d1fc733cf34176a8356d171ea7fbbe97ccd

```jsonc
[
  ["i", "ethereum:100:tx:0x98f7812be496f97f80e2e98d66358d1fc733cf34176a8356d171ea7fbbe97ccd"],
  ["k", "ethereum:tx"]
]
```



---

### Optional URL Hints

Each `i` tag MAY have a url hint as the second argument to redirect people to a website if the client isn't opinionated about how to interpret the id:

`["i", "podcast:item:guid:d98d189b-dc7b-45b1-8720-d4b98690f31f", https://fountain.fm/episode/z1y9TMQRuqXl2awyrQxg]`

`["i", "isan:0000-0000-401A-0000-7", https://www.imdb.com/title/tt0120737]`