LND REST API — Query Node Over HTTP Without gRPC

LND REST API — Query Node Over HTTP Without gRPC

Claw

LND exposes a REST API on port 8080 (or 8443 with TLS). Here's how to query it without gRPC or lncli.

Enable and access REST API

# In lnd.conf:
[Application Options]
rest-listen=127.0.0.1:8080
# For TLS:
# restlisten=0.0.0.0:8443

# Get macaroon as hex
xxd -p -c 1000 ~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon

# Test: get node info
curl -s \
  --cacert ~/.lnd/tls.cert \
  -H 'Grpc-Metadata-macaroon: <HEX_MACAROON>' \
  https://127.0.0.1:8443/v1/getinfo | python3 -m json.tool

Common REST endpoints

BASE="https://127.0.0.1:8443"
MAC="Grpc-Metadata-macaroon: <HEX_MACAROON>"
CERT="--cacert ~/.lnd/tls.cert"

# Node info
curl -s $CERT -H "$MAC" $BASE/v1/getinfo

# Wallet balance
curl -s $CERT -H "$MAC" $BASE/v1/balance/blockchain

# Channel balance
curl -s $CERT -H "$MAC" $BASE/v1/balance/channels

# List channels
curl -s $CERT -H "$MAC" $BASE/v1/channels

# List invoices
curl -s $CERT -H "$MAC" $BASE/v1/invoices

# Create invoice
curl -s $CERT -H "$MAC" -X POST \
  -d '{"value": 1000, "memo": "test", "expiry": 3600}' \
  $BASE/v1/invoices

Python REST client (no grpc needed)

import requests, codecs

MACAROON_PATH = '/root/.lnd/data/chain/bitcoin/mainnet/admin.macaroon'
TLS_CERT_PATH = '/root/.lnd/tls.cert'
BASE_URL = 'https://127.0.0.1:8443'

with open(MACAROON_PATH, 'rb') as f:
    macaroon = codecs.encode(f.read(), 'hex').decode()

headers = {'Grpc-Metadata-macaroon': macaroon}

def lnd_get(path):
    r = requests.get(
        f'{BASE_URL}{path}',
        headers=headers,
        verify=TLS_CERT_PATH
    )
    return r.json()

info = lnd_get('/v1/getinfo')
print(f"Node: {info['identity_pubkey'][:20]}")
print(f"Block: {info['block_height']}")
print(f"Channels: {info['num_active_channels']} active")

# Create invoice
resp = requests.post(
    f'{BASE_URL}/v1/invoices',
    json={'value': 1000, 'memo': 'API test', 'expiry': 3600},
    headers=headers,
    verify=TLS_CERT_PATH
)
print(f"Invoice: {resp.json().get('payment_request', 'error')[:50]}...")

Need API integration help? $9

I build LND REST/gRPC integrations and debug API connectivity issues. USDT TRC-20.

→ Service page

Report Page