{"id":"a6380ab68630da420503a8713bce4529ef7861b78c8c4a0ef0e8c0c11e59b359","pubkey":"fd208ee8c8f283780a9552896e4823cc9dc6bfd442063889577106940fd927c1","created_at":1779386484,"kind":30817,"tags":[["d","payto-payment-targets-rfc-8905"],["title","payto: Payment Targets (RFC-8905)"],["client","nostrhub.io"]],"content":"# NIP-A3\n\n## payto: Payment Targets (RFC-8905)\n\n### Event Kind\n\nThis NIP defines `kind:10133` for payment target events. This kind is **replaceable**.\n\n`optional` `author:atxmj`\n\nThis NIP standardizes payment and tip invocations using the [RFC-8905 (payto:) URI scheme](https://www.rfc-editor.org/rfc/rfc8905.html) for payment targets.\n\n### Broadcasting\n\nClients *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.\n\n**Client Implementation:**\n1. Allow users to input `type` and `authority` pairs\n2. Validate inputs according to the rules below\n3. Optionally warn users if a `type` is not recognized (but allow submission)\n4. Broadcast the event with `payto` tags\n\n#### Tag Format\n\nPayment targets are specified using `payto` tags with the following structure:\n\n```text\n[\"payto\", \"<type>\", \"<authority>\", \"<optional_extra_1>\", \"<optional_extra_2>\", ...]\n```\n\nWhere:\n- The first element is always the literal string `\"payto\"`\n- The second element is the payment `type` (e.g., `\"bitcoin\"`, `\"lightning\"`)\n- The third element is the `authority` (e.g., address, username)\n- Additional elements are optional and reserved for future RFC-8905 features\n\nClients **must** understand elements 0–2; they **may ignore** any additional elements for forward compatibility.\n\n#### Validation\n\n- `type`: Lowercase letters (a-z), digits (0-9), and hyphens (-). Types are case-insensitive; normalize to lowercase.\n- `authority`: URL-safe; URL-encode special characters. Format depends on the payment system.\n- Clients may perform additional payment-system-specific validation for recognized types.\n\n### Broadcasting Example\n\n```json\n{\n  \"pubkey\": \"afc93622eb4d79c0fb75e56e0c14553f7214b0a466abeba14cb38968c6755e6a\",\n  \"kind\": 10133,\n  \"content\": \"\",\n  \"tags\": [\n    [\"payto\", \"bitcoin\", \"bc1qxq66e0t8d7ugdecwnmv58e90tpry23nc84pg9k\"],\n    [\"payto\", \"nano\", \"nano_1dctqbmqxfppo9pswbm6kg9d4s4mbraqn8i4m7ob9gnzz91aurmuho48jx3c\"],\n    [\"payto\", \"unknowntype\", \"l7tbta5b9xze6ckkfc99uohzxd009b0r\"]\n  ],\n  ...\n}\n```\n\n### Recommended Payment Target Types\n\n| Payment Target Type | Long Stylization  | Short Stylization | Symbol | References |\n| :------------------ | :---------------- | :---------------- | :----- | :--------- |\n| bitcoin             | Bitcoin           | BTC               | ₿      | https://bitcoin.design/ |\n| cashme              | Cash App          | Cash App          | $,£    | https://cash.app/press |\n| ethereum            | Ethereum          | ETH               | Ξ      | https://ethereum.org/assets/#brand |\n| lightning           | Lightning Network | LBTC              | 丰     | https://github.com/shocknet/bitcoin-lightning-logo |\n| monero              | Monero            | XMR               | ɱ      | https://www.getmonero.org/press-kit/ |\n| nano                | Nano              | XNO               | Ӿ      | https://nano.org/en/currency |\n| revolut             | Revolut           | Revolut           | N/A    | https://revolut.me |\n| venmo               | Venmo             | Venmo             | $      | https://venmo.com/pay |\n\n### Observation\n\nFor each `payto` tag in kind `10133` events, clients *should* assemble a `payto://<type>/<authority>` URI and render it as a button or link.\n\n**Client Implementation:**\n1. Parse each `payto` tag from the event\n2. Optionally validate `type` and `authority` fields and filter invalid tags\n3. Assemble full `payto://<type>/<authority>` URIs\n4. For **recognized** types, render with associated icons and stylization from the table above\n5. For **unrecognized** types, either ignore or use generic stylization\n6. If multiple targets exist, render the first one, all of them, or a dropdown selector\n\n### Observation Example\n\n```json\n{\n  \"pubkey\": \"afc93622eb4d79c0fb75e56e0c14553f7214b0a466abeba14cb38968c6755e6a\",\n  \"kind\": 10133,\n  \"content\": \"\",\n  \"tags\": [\n    [\"payto\", \"bitcoin\", \"bc1qxq66e0t8d7ugdecwnmv58e90tpry23nc84pg9k\"],\n    [\"payto\", \"nano\", \"nano_1dctqbmqxfppo9pswbm6kg9d4s4mbraqn8i4m7ob9gnzz91aurmuho48jx3c\"],\n    [\"payto\", \"unknowntype\", \"l7tbta5b9xze6ckkfc99uohzxd009b0r\"]\n  ],\n  ...\n}\n```\n\nAssembled URIs:\n- `payto://bitcoin/bc1qxq66e0t8d7ugdecwnmv58e90tpry23nc84pg9k` (recognized)\n- `payto://nano/nano_1dctqbmqxfppo9pswbm6kg9d4s4mbraqn8i4m7ob9gnzz91aurmuho48jx3c` (recognized)\n- `payto://unknowntype/l7tbta5b9xze6ckkfc99uohzxd009b0r` (unrecognized)\n\n## Implementation Notes\n\n### Integration with NIP-57 Zaps\n\nClients 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.\n\nExample:\n\n```json\n[\n  {\n    \"kind\": 0,\n    \"content\": \"{\\\"lud16\\\":\\\"user@wallet.example.com\\\"}\",\n    \"pubkey\": \"...\"\n  },\n  {\n    \"kind\": 10133,\n    \"content\": \"\",\n    \"tags\": [\n      [\"payto\", \"lightning\", \"user@wallet.example.com\"],\n      [\"payto\", \"bitcoin\", \"bc1q...\"]\n    ],\n    \"pubkey\": \"...\"\n  }\n]\n```","sig":"5c100de4fb556e338f8e119e602cf8718112dbad4bd447d756346cabf98db4370e267262eb56f4e611b6cb6c140da302a61e62e8c79c51518a76b69f48b53443"}