LibChain Docs Lib Testnet

Reference

Faucet API

Check whether an address can get test tLIB, request a drip, and follow the live block and drip feed.

Base URL: https://faucet.libchain.tech. JSON in and out, CORS open. Addresses are 0x; convert lib1 first.

#GET /api/v1/status

Whether an address can request now.

Terminal
curl -s "https://faucet.libchain.tech/api/v1/status?address=0xYourAddress&chainId=54210"
JSON
{
  "chainId": 54210,
  "available": false,
  "nextAvailableAt": "2026-11-06T04:12:09.000Z",
  "cooldownSeconds": 86400,
  "drips": [{ "symbol": "tLIB", "amount": "10000000000000000000", "decimals": 18, "token": null }]
}

#POST /api/v1/drip

Send 10 tLIB to an address.

Terminal
curl -s -X POST https://faucet.libchain.tech/api/v1/drip \
  -H 'content-type: application/json' \
  -d '{"address":"0xYourAddress","chainId":54210}'
JSON
{ "txHashes": ["0x…"] }

The transaction is sent at once and is usually final within two seconds.

#Errors

StatusWhen
400Invalid JSON, invalid address, or a chainId other than 54210
413Request body over 4 KB
429The address or IP received coins in the last 24 hours, the faucet's hourly cap was reached, or more than 6 calls a minute. The body has retryAfterSeconds
503The faucet is low on funds and is waiting for a refill

Errors look like {"error": "Already received testnet coins recently. Try again later.", "retryAfterSeconds": 80122}.

#GET /api/v1/live

A server-sent events stream: one snapshot, then an event for each new block, drip and stats update. LibChain's own sites use it for their live block counters.

TypeScript
const live = new EventSource('https://faucet.libchain.tech/api/v1/live')

live.addEventListener('snapshot', (e) => {
  const s = JSON.parse(e.data)
  // { chainId, symbol, dripAmount, cooldownSeconds, blockPeriodSeconds,
  //   emptyBlockPeriodSeconds, faucetBalance, blocks: [...], drips: [...], stats, serverTime }
})
live.addEventListener('block', (e) => {
  const { block, faucetBalance } = JSON.parse(e.data)
  // block: { number, hash, timestamp, baseFeePerGas, txCount, txs }
})
live.addEventListener('drip', (e) => console.log(JSON.parse(e.data))) // { to, hash, at }
live.addEventListener('stats', (e) => console.log(JSON.parse(e.data))) // { totalTransactions, totalAddresses }

The stream is shared by everyone, so it's lighter on the network than polling the RPC yourself. It caps at 1,000 open viewers.

Updated 5 November 2026LibChain Docs · Lib Testnet