API
Create a key under
Account → API keys. Send it as
Authorization: Bearer sk_… (or
X-API-Key). Every response includes
tokens_charged and
tokens_left. Rate limit: 2 requests/second per IP on
/api/check.
Check addresses for activity
curl -s https://seedcheck.datarecovery.com/api/check \
-H "Authorization: Bearer sk_YOUR_KEY" -H "Content-Type: application/json" \
-d '{"addresses":[{"chain":"bitcoin","address":"1LvbyvmZM33e21hRp9poYLrCfv3WMNVJUa"},
{"chain":"ethereum","address":"0x0000000000000000000000000000000000000000"}]}'
{"results":{"bitcoin|1Lvby…":["USED","12 tx · 0.0021 BTC"], "ethereum|0x000…":["empty",""]},
"tokens_charged":1,"tokens_left":59}
Chains: bitcoin, litecoin, bitcoin-cash, dogecoin, dash, zcash (t-addr), ethereum. Up to 5000 addresses per call.
Address history
curl -s https://seedcheck.datarecovery.com/api/history \
-H "Authorization: Bearer sk_YOUR_KEY" -H "Content-Type: application/json" \
-d '{"text":"1LvbyvmZM33e21hRp9poYLrCfv3WMNVJUa"}' # any mix of addresses, auto-detected (max 25)
# or explicit: {"addresses":[{"chain":"bitcoin","address":"…"}], "limit":500, "before":<block height>}
{"results":[{"chain":"bitcoin","ticker":"BTC","address":"…","balance":"0.0021","tx_count":12,"tip":915000,
"txs":[{"txid":"…","height":812345,"time":1699999999,"confirmations":102655,
"received":"0.001","sent":"0","net":"0.001","fee":null,"counterparties":["bc1q…"]}]}],
"tokens_charged":1,"tokens_left":58}
Wallet API (per coin)
REST routes for wallet software, keyed by asset: bitcoin, litecoin, bitcoin-cash, dogecoin, dash, zcash, ethereum and the ERC-20s usdt, usdc, dai, usds, sai, wbtc. All amounts are integers in base units (sat / zat / wei / token units). Rate limit: 10 requests/second per IP (burst 30) — scan with the batch routes, never one address at a time.
GET /api/{coin}/address/{address} balance + usage free
POST /api/{coin}/addresses {"addresses":[…]} batch of up to 500, same objects in request order 1 token / 500
GET /api/{coin}/address/{address}/utxos unspent outputs (UTXO coins) free
POST /api/{coin}/utxos {"addresses":[…]} UTXOs of up to 200 addresses free
GET /api/{coin}/address/{address}/history per-transaction history 1 token
GET /api/{coin}/tx/{txid} /raw decoded tx / {"hex":…} free
GET /api/{coin}/fees fast / normal / slow in sat/vB (gas for ethereum) free
POST /api/{coin}/broadcast {"rawtx":"<hex>"} -> {"txid":…} free
GET /api/ethereum/address/{address}/nonce pending nonce (+ confirmed_nonce) free
GET /api/ethereum/address/{address}/confirmed_nonce mined nonce only -> {"nonce":…} free
GET /api/ethereum/address/{address}/tokens ERC-20 balances, each row with "verified": true|false free
GET /api/ethereum/known_tokens the curated ERC-20 registry {"tokens":[{contract,symbol,decimals}],"source"} free
GET /api/ethereum/tx/{txid}/status {"status":"pending"|"success"|"reverted"|"unknown","block_number","confirmations"} free
POST /api/ethereum/estimate_gas {"from","to","value"(wei),"data":"0x…"}
-> {"gas":…} or, if the node says it would fail, {"error":…,"would_revert":true} (HTTP 200) free
GET /api/ethereum/gasprice gas_price_wei, max_priority_fee_wei, base_fee_wei
POST /api/{coin}/scan {"descriptor":"wpkh(xpub…/<0;1>/*)"} or {"xpub":"…","families":["bip44","bip84"],"gap":20}
gap scan of a whole account in one call: used addresses, their UTXOs, next_index per lane 1 token
curl -s https://seedcheck.datarecovery.com/api/bitcoin/address/1LvbyvmZM33e21hRp9poYLrCfv3WMNVJUa -H "Authorization: Bearer sk_YOUR_KEY"
{"coin":"bitcoin","chain":"bitcoin","address":"1Lvby…","confirmed":210000,"unconfirmed":0,"tx_count":12,"used":true,
"tokens_charged":0,"tokens_left":59}
# ethereum objects add "nonce" and "tokens":[{"contract","symbol","decimals","balance","verified"}]; a token asset adds "symbol","contract","decimals","eth_balance","verified".
# "verified" is true when the contract is in our curated registry (GET /api/ethereum/known_tokens).
# dash: the node has no address index, so tx_count is null and used means "currently funded".
Account scan
One request per coin replaces the address batches: send an output descriptor (pkh(), sh(wpkh()), wpkh(), tr(), multipath <0;1> allowed) or a raw account key (xpub / ypub / zpub / Ltub …; SLIP-132 version bytes pin the script type, a plain xpub scans every family the coin has, or the families you list). The server derives receive and change addresses, checks them on our nodes and keeps going gap (default 20, max 100) past the last used one. Up to 1000 addresses are derived and checked per call; a bigger wallet comes back with "truncated":true and a resume map to send back as start. The key is used in memory for that one request and never stored or logged.
curl -s https://seedcheck.datarecovery.com/api/bitcoin/scan -H "Authorization: Bearer sk_YOUR_KEY" \
-d '{"descriptor":"wpkh([fd13aac9/84h/0h/0h]zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs/<0;1>/*)","gap":20}'
{"coin":"bitcoin","chain":"bitcoin","key":{"kind":"descriptor","depth":3,"fingerprint":"fd13aac9","script":"wpkh"},"gap":20,"families":["bip84"],
"used_definition":"ever_used","used_note":"address has any transaction history or a balance (Fulcrum/ElectrumX index)",
"used":[{"family":"bip84","chain":"0","index":0,"address":"bc1qcr8te…","confirmed":0,"unconfirmed":0,"tx_count":176,"used":true}, …],
"utxos":[{"address":"bc1q…","txid":"…","vout":1,"value":52000,"height":860000,"confirmations":41,"family":"bip84","chain":"0","index":7}, …],
"tip":860040,"next_index":{"bip84/0":94,"bip84/1":1},"scanned":160,"truncated":false,"resume":null,"tokens_charged":1,"tokens_left":58}
# lanes are "family/chain": chain 0 = receive, 1 = change; next_index = highest used index + 1 (0 when nothing was used).
# used_definition per coin: bitcoin/litecoin/bitcoin-cash/dogecoin/zcash "ever_used"; ethereum + tokens "nonce_or_balance" (token balances inline);
# dash "currently_funded" — spent-and-emptied Dash addresses look unused, so keep a local gap scan as the fallback there.
Errors
| HTTP | Meaning |
|---|
| 401 | missing or invalid key / not signed in |
| 402 | not enough tokens (tokens_left is included) — top up under Account |
| 429 | rate limited — slow down |