Crypto - Bitcoin

Free Bitcoin Balance API Endpoint

The free Bitcoin balance API endpoint reads the confirmed balance of any address on the public chain and hands it back in BTC and in satoshis. One GET request. No key, no account, nothing to sign up for.

  • No API key
  • One GET request
  • BTC and sats
  • Read only

Check a balance

GET/bitcoin/balance/{address}

https://aisenseapi.com/services/v1/bitcoin/balance/{address}

Call the free Bitcoin balance API endpoint

The address goes in the path. Nothing else is required, and there is no header to set.

curl https://aisenseapi.com/services/v1/bitcoin/balance/1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
{"wallet":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa","final_balance_btc":107.36782465,"final_balance_sats":10736782465}

That address is the genesis block address, the first Bitcoin address that ever existed. It makes an excellent public example. Everyone can look it up, nobody has to borrow a stranger's address for a screenshot, and the figure is easy to check against any block explorer.

Balances move. The number above was correct when this page was written, and the genesis address in particular keeps collecting small tribute payments from people who want their transaction in that ledger. Treat any figure in documentation, including this one, as a snapshot rather than a constant to assert in a test.

Response fields

Three fields come back, and all three are always present on a successful call.

FieldTypeDescription
walletstringThe address you asked about, echoed back so a response can be matched to its request when several are in flight.
final_balance_btcnumberConfirmed balance expressed in BTC.
final_balance_satsnumberThe same balance in satoshis, the integer base unit. 1 BTC is 100000000 sats.

Any address works, not only famous ones. A second example, one of the largest publicly known addresses on the chain:

curl https://aisenseapi.com/services/v1/bitcoin/balance/12ib7dApVFvg82TXKycWBNpN8kFyiAN1dr
{"wallet":"12ib7dApVFvg82TXKycWBNpN8kFyiAN1dr","final_balance_btc":31000.07643255,"final_balance_sats":3100007643255}

Two units, so nobody divides by 100000000

Both units are returned deliberately. A caller should never have to remember which one they were handed, and should never have to do the conversion themselves.

Use final_balance_sats for anything that adds, compares, sorts or stores a balance. It is a whole number and it stays exact.

Use final_balance_btc for display. It is a decimal number in JSON, and the moment a JSON parser turns it into a double it inherits the usual binary floating point rounding. Rendering it is safe. Doing arithmetic on it is how rounding errors get into a ledger.

The relationship is fixed forever: 1 BTC is 100000000 satoshis. In the genesis example above, 107.36782465 BTC and 10736782465 sats are the same amount written two ways.

Read only, and safe for any address

This endpoint takes an address and nothing else. An address is public information by design, so there is no secret to leak and no risk in calling it for an address you care about.

That is worth stating plainly, because the neighbouring endpoint is a different matter. The Bitcoin Wallet API endpoint creates a private key on a remote server and sends it back over the network, which makes every key it produces test material and never a place for real funds. Generation involves a secret. Balance lookup does not.

The free Bitcoin balance API endpoint never sees a private key, because it never needs one. It reads what the chain already publishes. Watching an address is not the same as controlling it, and nothing here moves value in any direction.

What an unrecognised address returns

A string that is not a valid address does not resolve to a route, so the service answers with HTTP 404 and a short pointer to the reference.

curl https://aisenseapi.com/services/v1/bitcoin/balance/notanaddress
{"error":"Unknown endpoint. See https:\/\/www.aisense.no\/free-public-apis for the reference."}

Check the status code, not the shape of the body. A 200 means the three balance fields are there. Anything else means they are not, and your code should say so rather than reading a missing field as zero. An address with no history and an address that was typed wrong are very different situations, and only the status code tells them apart.

Common uses

Watch only dashboards

Poll public addresses for confirmed balances and show them on a panel, doing the arithmetic in the integer sats field.

Balance alerts

Compare the sats value against a threshold on a schedule and raise a notification when it crosses.

Donation counters

Read the balance of a published donation address and render a running total on a page.

Teaching material

Show a class the genesis address in one request and let them see BTC and satoshis side by side.

Agent tools

Give a language model a single unauthenticated call that answers a plain question about a public address.

Reconciliation checks

Cross check a figure from your own indexer against an independent read of the same address.

Privacy and limits

The address travels in the URL path, so it appears in request logs along the way. For a public chain address that is not a secret, but it does connect an IP to an interest in that particular address. Worth knowing if you are polling something you would rather not advertise.

Every call to the free Bitcoin balance API endpoint counts against one service wide budget: 5000 requests per IP per 24 hours, with no API key and no account. Balances only change when a block confirms, roughly every ten minutes, so cache a result for a few minutes instead of polling in a tight loop. Do that and you will never come near the ceiling.

The base URL for everything here is https://aisenseapi.com/services/v1. The same limit and the same open access apply across the whole catalogue of free public REST APIs.