chainpeek (Tanod) Lightning invoice decoder: BOLT11 payment request to amount, payee, p…
chainpeek (Tanod) Lightning invoice decoder: BOLT11 payment request to amount, payee, payment hash, expiry and route hints. Pure computation. Use when an agent must read a Lightning invoice (lnbc...) before paying it: amount, payee, expiry, payment hash.
by tanod.dev · discovered, not yet claimed by its owner · updated 2026-10-13
Mirrored from Coinbase's public x402 Bazaar. The description is the provider's own text and has not been reviewed here; the payment requirements are copied as published.
What it does
chainpeek (Tanod) Lightning invoice decoder: BOLT11 payment request to amount, payee, payment hash, expiry and route hints. Pure computation. Use when an agent must read a Lightning invoice (lnbc...) before paying it: amount, payee, expiry, payment hash.
Tags: chainpeek · chain · bolt11 · decode · ens · bazaar · builder-code · erc20ApprovalGasSponsoring · payment-identifier
Call contract
- Method
- POST
- Input
- json
- Output
- json
- Last paid call
- 2026-10-13
{
"invoice": "lnbc2500u1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdq5xysxxatsyp3k7enxv4jsxqzpuaztrnwngzn3kdzw5hydlzf03qdgm2hdq27cqv3agm2awhz5se903vruatfhq77w3ls4evs3ch9zw97j25emudupq63nyw24cg27h2rspfj9srp"
}{
"amount_btc": "0.00250000000",
"amount_msat": 250000000,
"amount_sat": 250000,
"created_at": "2017-06-01T10:57:38Z",
"description": "1 cup coffee",
"description_hash": null,
"expired": true,
"expires_at": "2017-06-01T10:58:38Z",
"expires_in_seconds": -295534882,
"expiry_explicit": true,
"expiry_seconds": 60,
"fallback_address_count": 0,
"features": [],
"has_payment_secret": false,
"min_final_cltv_expiry_delta": 18,
"min_final_cltv_expiry_explicit": false,
"network": "bitcoin",
"note": "Decoded from the invoice itself; nothing was paid or looked up. The payee is recovered from the invoice signature (signature_valid is false when it cannot be read or does not match the n field; the key proves who signed, not who the payee is in the real world). The description is text chosen by the invoice's author: untrusted. The payment secret is not echoed. Times are compared with the server clock.",
"payee_pubkey": "03e7156ae33b0a208d0744199163177e909e80176e55d97a2f221ede0f934dd9ad",
"payee_pubkey_source": "recovered_from_signature",
"payment_hash": "0001020304050607080900010203040506070809000102030405060708090102",
"payment_metadata": null,
"prefix": "lnbc",
"route_hint_count": 0,
"route_hints": [],
"server_time": "2026-10-13T00:00:00Z",
"signature_valid": true,
"timestamp": 1496314658,
"unknown_field_tags": []
}Use with an agent
- Discover. Agents find this listing with
GET https://bazaar.saylorinnovations.com/discovery/search?query=…, the MCP toolsearch_resources, or/discovery/resources. - Inspect. Fetch
/resources/57635.jsonfor the price and payment options. - Pay. Call
GET https://tanod.dev/v1/chain/bolt11/decode. The provider answers402with its payment requirements. An x402 client signs one of the options below and retries withPAYMENT-SIGNATURE. - Execute. The provider returns
200with the data. Agent Bazaar is not in the request path and never sees your payment.
For humans
You don't need an account or an API key; you need a wallet holding a small amount of USDC on Base, Polygon, Solana, eip155:56, Arbitrum One, and an x402-capable client (see the examples below). Call the endpoint unpaid first to see exactly what it asks for.
Pricing & payment
- Price
- $0.001 / request
- Protocol
- x402 v2
- Auth
- No account or API key. Pay per request.
- Networks
- Base, Polygon, Solana, eip155:56, Arbitrum One
- Demand
- 1 calls · 1 unique payers in 30d (public x402 Bazaar data)
x402 payment requirements
| Scheme | Network | Asset | Amount | Pay to | Timeout |
|---|---|---|---|---|---|
| exact | Base eip155:8453 | USDC | $0.001 | 0x593857A4a4F619543ea12394137C3004ce841720 | 300s |
| exact | Polygon eip155:137 | USDC | $0.001 | 0x593857A4a4F619543ea12394137C3004ce841720 | 300s |
| exact | Solana solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp | USDC | $0.001 | RMk9k3VC8dr4hhjgFh88rGhjAbzfBzHxJJ5n2fTcqus | 300s |
| exact | eip155:56 eip155:56 | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d | 1000000000000000 | 0x593857A4a4F619543ea12394137C3004ce841720 | 300s |
| exact | Arbitrum One eip155:42161 | USDC | $0.001 | 0x593857A4a4F619543ea12394137C3004ce841720 | 300s |
| exact | Base eip155:8453 | USDC | $0.001 | 0x593857A4a4F619543ea12394137C3004ce841720 | 604900s |
| exact | Polygon eip155:137 | USDC | $0.001 | 0x593857A4a4F619543ea12394137C3004ce841720 | 604900s |
accepts[] (raw JSON)
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "1000",
"amountUsd": 0.001,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:137",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"amount": "1000",
"amountUsd": 0.001,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "RMk9k3VC8dr4hhjgFh88rGhjAbzfBzHxJJ5n2fTcqus",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": "1000",
"amountUsd": 0.001,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:56",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
"amount": "1000000000000000",
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:42161",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"amount": "1000",
"amountUsd": 0.001,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "1000",
"amountUsd": 0.001,
"maxTimeoutSeconds": 604900
},
{
"scheme": "exact",
"network": "eip155:137",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"amount": "1000",
"amountUsd": 0.001,
"maxTimeoutSeconds": 604900
}
]Schemas
Output schema (JSON Schema)
{
"properties": {
"example": {
"description": "Abridged to fit the header. Full example: the 402 JSON body. Full schema: https://tanod.dev/openapi.json POST /v1/chain/bolt11/decode",
"properties": {
"amount_btc": {
"type": [
"string",
"null"
]
},
"amount_msat": {
"type": [
"integer",
"null"
]
},
"amount_sat": {
"type": [
"number",
"null"
]
},
"created_at": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"description_hash": {
"type": [
"string",
"null"
]
},
"expired": {
"type": "boolean"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": "integer"
},
"expiry_explicit": {
"type": "boolean"
},
"expiry_seconds": {
"type": "integer"
},
"fallback_address_count": {
"type": "integer"
},
"features": {
"type": "array"
},
"has_payment_secret": {
"type": "boolean"
},
"min_final_cltv_expiry_delta": {
"type": "integer"
},
"min_final_cltv_expiry_explicit": {
"type": "boolean"
},
"network": {},
"note": {
"type": "string"
},
"payee_pubkey": {
"type": [
"string",
"null"
]
},
"payee_pubkey_source": {},
"payment_hash": {
"type": [
"string",
"null"
]
},
"payment_metadata": {
"type": [
"string",
"null"
]
},
"prefix": {
"type": "string"
},
"route_hint_count": {
"type": "integer"
},
"route_hints": {
"type": "array"
},
"server_time": {
"type": [
"string",
"null"
]
},
"signature_valid": {
"type": [
"boolean",
"null"
]
},
"timestamp": {
"type": "integer"
},
"unknown_field_tags": {
"type": "array"
},
"warnings": {
"type": "array"
}
},
"required": [
"network",
"amount_msat",
"created_at",
"expiry_seconds",
"expires_at",
"expired",
"payee_pubkey",
"signature_valid",
"payment_hash",
"route_hint_count",
"features",
"note"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}Example shape — generated from the schema, not a captured live response
{
"example": {
"amount_btc": "string",
"amount_msat": 0,
"amount_sat": 0,
"created_at": "string",
"description": "string",
"description_hash": "string",
"expired": true,
"expires_at": "string",
"expires_in_seconds": 0,
"expiry_explicit": true,
"expiry_seconds": 0,
"fallback_address_count": 0,
"features": [
"value"
],
"has_payment_secret": true,
"min_final_cltv_expiry_delta": 0,
"min_final_cltv_expiry_explicit": true,
"network": null,
"note": "string",
"payee_pubkey": "string",
"payee_pubkey_source": null,
"payment_hash": "string",
"payment_metadata": "string",
"prefix": "string",
"route_hint_count": 0,
"route_hints": [
"value"
],
"server_time": "string",
"signature_valid": true,
"timestamp": 0,
"unknown_field_tags": [
"value"
],
"warnings": [
"value"
]
},
"type": "string"
}Examples
curl "https://tanod.dev/v1/chain/bolt11/decode"
# -> 402 Payment Required, accepts[] lists how to pay
# retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paidconst res = await fetch("https://tanod.dev/v1/chain/bolt11/decode");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}import httpx
res = httpx.get("https://tanod.dev/v1/chain/bolt11/decode")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerDetails
- Provider
- tanod.dev
- Endpoint
- https://tanod.dev/v1/chain/bolt11/decode
- Machine-readable
/resources/57635.json