NIP-A3

This NIP standardizes payment and tip invocations using the RFC-8905 `payto:` URI scheme.

payto: Payment Targets (RFC-8905)

Event Kind

This NIP defines kind:10133 for payment target events. This kind is replaceable.

optional

This NIP standardizes payment and tip invocations using the RFC-8905 (payto:) URI scheme for payment targets.

Broadcasting

Clients may allow users to specify payment targets consisting of type and authority values to generate a kind 10133 event with payto tags for payment or tip invocations.

Client Implementation:

  1. Allow users to input type and authority pairs
  2. Validate inputs according to the rules below
  3. Optionally warn users if a type is not recognized (but allow submission)
  4. Broadcast the event with payto tags

Tag Format

Payment targets are specified using payto tags with the following structure:

["payto", "<type>", "<authority>", "<optional_extra_1>", "<optional_extra_2>", ...]

Where:

  • The first element is always the literal string "payto"
  • The second element is the payment type (e.g., "bitcoin", "lightning")
  • The third element is the authority (e.g., address, username)
  • Additional elements are optional and reserved for future RFC-8905 features

Clients must understand elements 0–2; they may ignore any additional elements for forward compatibility.

Validation

  • type: Lowercase letters (a-z), digits (0-9), and hyphens (-). Types are case-insensitive; normalize to lowercase.
  • authority: URL-safe; URL-encode special characters. Format depends on the payment system.
  • Clients may perform additional payment-system-specific validation for recognized types.

Broadcasting Example

{
  "pubkey": "afc93622eb4d79c0fb75e56e0c14553f7214b0a466abeba14cb38968c6755e6a",
  "kind": 10133,
  "content": "",
  "tags": [
    ["payto", "bitcoin", "bc1qxq66e0t8d7ugdecwnmv58e90tpry23nc84pg9k"],
    ["payto", "nano", "nano_1dctqbmqxfppo9pswbm6kg9d4s4mbraqn8i4m7ob9gnzz91aurmuho48jx3c"],
    ["payto", "unknowntype", "l7tbta5b9xze6ckkfc99uohzxd009b0r"]
  ],
  ...
}

Recommended Payment Target Types

Payment Target Type Long Stylization Short Stylization Symbol References
bitcoin Bitcoin BTC https://bitcoin.design/
cashme Cash App Cash App $,£ https://cash.app/press
ethereum Ethereum ETH Ξ https://ethereum.org/assets/#brand
lightning Lightning Network LBTC https://github.com/shocknet/bitcoin-lightning-logo
monero Monero XMR ɱ https://www.getmonero.org/press-kit/
nano Nano XNO Ӿ https://nano.org/en/currency
revolut Revolut Revolut N/A https://revolut.me
venmo Venmo Venmo $ https://venmo.com/pay

Observation

For each payto tag in kind 10133 events, clients should assemble a payto://<type>/<authority> URI and render it as a button or link.

Client Implementation:

  1. Parse each payto tag from the event
  2. Optionally validate type and authority fields and filter invalid tags
  3. Assemble full payto://<type>/<authority> URIs
  4. For recognized types, render with associated icons and stylization from the table above
  5. For unrecognized types, either ignore or use generic stylization
  6. If multiple targets exist, render the first one, all of them, or a dropdown selector

Observation Example

{
  "pubkey": "afc93622eb4d79c0fb75e56e0c14553f7214b0a466abeba14cb38968c6755e6a",
  "kind": 10133,
  "content": "",
  "tags": [
    ["payto", "bitcoin", "bc1qxq66e0t8d7ugdecwnmv58e90tpry23nc84pg9k"],
    ["payto", "nano", "nano_1dctqbmqxfppo9pswbm6kg9d4s4mbraqn8i4m7ob9gnzz91aurmuho48jx3c"],
    ["payto", "unknowntype", "l7tbta5b9xze6ckkfc99uohzxd009b0r"]
  ],
  ...
}

Assembled URIs:

  • payto://bitcoin/bc1qxq66e0t8d7ugdecwnmv58e90tpry23nc84pg9k (recognized)
  • payto://nano/nano_1dctqbmqxfppo9pswbm6kg9d4s4mbraqn8i4m7ob9gnzz91aurmuho48jx3c (recognized)
  • payto://unknowntype/l7tbta5b9xze6ckkfc99uohzxd009b0r (unrecognized)

Implementation Notes

Integration with NIP-57 Zaps

Clients may use payto lightning entries as an alternative or complement to lud16 for zap functionality. The authority field should contain a Lightning address (e.g., user@wallet.example.com) or LNURL.

Example:

[
  {
    "kind": 0,
    "content": "{\"lud16\":\"user@wallet.example.com\"}",
    "pubkey": "..."
  },
  {
    "kind": 10133,
    "content": "",
    "tags": [
      ["payto", "lightning", "user@wallet.example.com"],
      ["payto", "bitcoin", "bc1q..."]
    ],
    "pubkey": "..."
  }
]

Write a comment
No comments yet.