datarecovery.com

SeedCheck API & pricing

Pricing

ItemPrice
New account (one-time)$49 — includes 60 tokens
Top-ups…

What a token buys

ActionTokensNotes
Sweep (POST /api/check)1 per 500 addressesA standard Detect + Sweep is 1 token. Deep scan or Armory backups send more addresses and cost proportionally. Derivation is done in your browser; only public addresses are sent.
Address history (POST /api/history)1 per addressBalance plus full per-transaction history (height, time, confirmations, received / sent / net, fee, counterparties). Each "Scan older" page is another lookup.
Account scan (POST /api/{coin}/scan)1 per scanWhole-account gap scan from a descriptor or xpub: up to 1000 derived addresses checked, with UTXOs and next unused index per lane. A larger wallet continues with start and pays again.
Missing-word solve1 per 500 addressesCandidates are derived client-side and checked in one batch.
Failed requests0A request that errors out is refunded automatically.
Tokens never expire. All chains are served from our own full nodes and indexers — no third-party explorer sees your addresses.

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

HTTPMeaning
401missing or invalid key / not signed in
402not enough tokens (tokens_left is included) — top up under Account
429rate limited — slow down
© 2026 Datarecovery.com. All rights reserved. · Privacy Policy