Add .btc name resolution to any wallet, explorer, or dApp. REST API, no key required. 8 endpoints, one standard.
BNRP adds a human-readable identity layer to any Bitcoin product. Here are the four main integration patterns.
Show satoshi.btc instead of bc1p.... Resolve when the user types a name in the send field. Reverse-resolve on the receive screen to confirm identity.
Display the name, avatar, and profile card on any inscription page. Link every UTXO owner to their verified .btc identity without any off-chain trust.
Use /.well-known/lnurlp/{name} to accept .btc names as Lightning payment targets. Compatible with any LNURL-pay wallet out of the box.
Sign in with Bitcoin (SIWB) gives you PSBT-challenge auth with no passwords and no OAuth. Agent namespace resolution handles machine-to-machine identity on Bitcoin.
No API key. No SDK required. Three patterns to get started in under 5 minutes.
// Resolve satoshi.btc const res = await fetch('https://api.bnrp.name/v1/resolve/satoshi.btc'); const data = await res.json(); // data.addresses.btc_taproot → "bc1p..." // data.addresses.lnurlp → "satoshi@getalby.com" // data.profile.avatar → "ord:a8b2c1...i0"
const res = await fetch('https://api.bnrp.name/v1/reverse/bc1p...'); const data = await res.json(); // data.name → "satoshi.btc"
import { resolve, reverse } from '@btc-native/bnrp'; const { addresses, profile } = await resolve('satoshi.btc'); const { name } = await reverse('bc1p...');
8 endpoints. No authentication. All responses are JSON.
GET https://api.bnrp.name/v1/resolve/satoshi.btc
{
"name": "satoshi.btc",
"owner": "bc1p...",
"inscription_id": "a8b2c1...i0",
"addresses": {
"btc_taproot": "bc1p...",
"btc_segwit": null,
"btc_p2sh": null,
"btc_legacy": null,
"eth": null,
"sol": null,
"spark": null,
"agent_address": null,
"lnurlp": "satoshi@getalby.com",
"nostr_pubkey": "npub1...",
"did": "did:btc:satoshi.btc"
},
"profile": {
"display": "Satoshi",
"description": "Bitcoin pioneer",
"avatar": "ord:a8b2c1...i0",
"url": "https://satoshi.org",
"com.twitter": "satoshi",
"com.github": "satoshi",
"com.nostr": "npub1...",
"com.telegram": "satoshi",
"com.discord": "satoshi#1234",
"com.farcaster": "satoshi",
"agent_instructions": null,
"payment_policy": null
},
"messaging": null,
"via": "bnrp-inscription",
"resolved_at": "2026-05-16T21:00:00.000Z"
}
GET https://api.bnrp.name/v1/reverse/bc1p...
{
"name": "satoshi.btc",
"verified": true,
"resolved_at": "2026-05-16T21:00:00.000Z"
}
POST https://api.bnrp.name/v1/batch
Content-Type: application/json
{
"names": ["satoshi.btc", "ordinals.btc", "bitmap.sats"]
}
{
"results": [
{ "name": "satoshi.btc", "addresses": { ... }, "profile": { ... } },
{ "name": "ordinals.btc", "addresses": { ... }, "profile": { ... } },
{ "name": "bitmap.sats", "error": "not_found" }
]
}
GET https://api.bnrp.name/v1/skill/agent.company.btc
{
"name": "agent.company.btc",
"pubkey": "npub1...",
"capabilities": ["payments", "signing"],
"payment_address": "bc1p...",
"instructions": "You are a payment agent for Company X...",
"payment_policy": { "max_sat": 100000, "require_approval": true }
}
GET https://api.bnrp.name/.well-known/lnurlp/satoshi
{
"tag": "payRequest",
"callback": "https://api.bnrp.name/v1/lnurlp/satoshi/callback",
"minSendable": 1000,
"maxSendable": 100000000000,
"metadata": "[[\"text/plain\",\"Pay satoshi.btc\"]]",
"commentAllowed": 255
}
GET https://api.bnrp.name/v1/lnurlp/satoshi/callback?amount=21000
{
"pr": "lnbc210n1...",
"routes": []
}
POST https://api.bnrp.name/v1/siwb/challenge
Content-Type: application/json
{
"domain": "yourapp.com",
"address": "bc1p...",
"btcName": "satoshi.btc",
"uri": "https://yourapp.com/login"
}
{
"message": "yourapp.com wants you to sign in with Bitcoin\n\nURI: https://yourapp.com/login\nNonce: a3f8b2...\nIssued At: 2026-05-16T21:00:00.000Z",
"nonce": "a3f8b2..."
}
POST https://api.bnrp.name/v1/siwb/verify
Content-Type: application/json
{
"message": "yourapp.com wants you to sign in...",
"signature": "H9f2k...",
"address": "bc1p...",
"btcName": "satoshi.btc"
}
{
"verified": true,
"name": "satoshi.btc",
"address": "bc1p...",
"profile": { "display": "Satoshi", "avatar": "ord:..." }
}
Five improvement proposals extending the core resolve schema. Each is a live spec with an open API endpoint and a demo page on btcnative.name.
Set a Lightning Address on your .btc name. Resolves as a standard LNURL-pay endpoint. On-chain taproot fallback when no Lightning node is set.
PSBT-challenge authentication for .btc names. Wallet signs a nonce. Server verifies ownership on-chain. No passwords, no OAuth, no ETH dependency.
agent.company.btc convention. Agent subnames carry a pubkey, capability declarations, payment address, and instructions for machine-to-machine identity on Bitcoin.
Extended cross-protocol identity schema. One inscription sets BTC address, Lightning, Nostr pubkey, DID, Farcaster, Telegram, and more.
Delegate namespace control to an operator. Root owner authorizes an address to issue *.name.btc at scale with clean-slate inheritance defaults.
Official packages and helpers. The core SDK wraps all 8 endpoints with full TypeScript types.
Wraps all 8 REST endpoints with TypeScript types, caching, and error handling. Works in Node.js, browsers, and edge runtimes.
Bring .btc name resolution into MetaMask. Lets users resolve names and sign SIWB challenges from the MetaMask extension.
Server-side helpers to create challenges and verify wallet signatures. Drop into any Node.js or edge function.
import { createChallenge, verifySignature } from '@btc-native/bnrp/siwb';
Load the SIWB helper from CDN and use it as window.SIWB in any plain HTML project, no bundler required.
<script src="https://btcnative.name/siwb.js"></script> // window.SIWB.createChallenge(...) // window.SIWB.verifySignature(...)