๐Ÿ“˜ BruteFather Documentation

Public reference for the Bitcoin Puzzle catalog, free open API, and on-site features.

Free No API key CORS open Edge-cached Read-only

Introduction

BruteFather is a public reference resource for the 160 Bitcoin Puzzle transaction (created in 2015, extended in 2017 and 2019). Every page on this site is backed by a free, read-only HTTP API you can call from any client โ€” browser, Telegram bot, Discord widget, mobile app, terminal script.

This documentation covers the public surface only. No authentication is required for any endpoint listed below. Cabinet-only features (mining stats, withdrawals, settings) are documented inside the user cabinet after Telegram login.

What is the Bitcoin Puzzle?

The Bitcoin Puzzle is a single transaction that locks 1000 BTC into 160 separate outputs, one per bit-length from 1 to 160. The private key for output N is a random integer in the half-open interval [2^(N-1), 2^N).

Solving puzzle N means finding that scalar. The smaller bits (1..70) have already been solved by various researchers. The larger bits (71..160) remain open and carry growing prize pools.

Status terminology

solvedPrivate key revealed; address balance fully spent or near zero. exposedPublic key has been published on-chain via a prior spend, but the private key is still secret. These puzzles are vulnerable to Pollard's Rho / Kangaroo. unsolvedOnly the address (P2PKH hash160) is known. The public key has never been revealed.

Public API v1

Base URL: https://brutefather.ru/api/v1/

All responses are JSON unless a download is explicitly requested. CORS is open to every origin. Every successful response includes a catalog_version field so clients can detect when the dataset has been updated.

Endpoints

GET /api/v1/puzzles Full catalog of all 160 puzzles. Query params: status = solved/exposed/unsolved; min_bit, max_bit (1..160); refresh=1 bypasses the edge cache.
GET /api/v1/puzzle/{bit} Single puzzle by bit number (1..160). Returns address, prize, status, hash160, public key (if exposed), private key (if solved), live balance.
GET /api/v1/address/{addr} Reverse lookup: same payload as /puzzle/{bit} when the address belongs to one of the 160 puzzles, 404 otherwise.
GET /api/v1/stats Aggregate counters: how many puzzles are solved, exposed, unsolved, plus total prize and live unspent BTC.
GET /api/v1/export/puzzles.json Download the entire dataset as a single pretty-printed JSON file.
GET /api/v1/export/puzzles.csv Same dataset as CSV (10 columns, header row included).
GET /api/puzzles/stream Server-Sent Events. One event per catalog change (status flip, balance delta, new exposure). Keep the connection open.
GET /puzzle/{bit} Server-rendered HTML detail page for a single puzzle. Includes proper OpenGraph / Twitter meta so links unfurl nicely in Telegram, X, Discord, Slack.

Code examples

curl

# list all unsolved puzzles in the 71..80 range
curl -s 'https://brutefather.ru/api/v1/puzzles?status=unsolved&min_bit=71&max_bit=80'

# one puzzle
curl -s 'https://brutefather.ru/api/v1/puzzle/71'

# by address
curl -s 'https://brutefather.ru/api/v1/address/1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU'

JavaScript (browser, no key)

const res = await fetch('https://brutefather.ru/api/v1/puzzle/71');
const data = await res.json();
console.log(data.address, data.balance_btc, data.ui_status);

Python

import requests
r = requests.get('https://brutefather.ru/api/v1/stats', timeout=10)
print(r.json()['counts'])

Telegram bot snippet

# Fetch the next unsolved puzzle and post it to a chat
import requests
js = requests.get('https://brutefather.ru/api/v1/puzzles?status=unsolved').json()
for p in js['items'][:5]:
    print(f"#{p['bit']:>3}  {p['address']}  {p['btc']} BTC")

Bulk downloads

Two static-style endpoints serve the entire catalog as a single file with proper Content-Disposition headers:

Both are cached at the edge for 60 seconds. Schedule your re-downloads accordingly.

Live SSE stream

For real-time dashboards, subscribe to /api/puzzles/stream. The stream emits an event whenever the catalog version increments โ€” i.e. balance changes, a new public key is exposed, or a puzzle gets solved.

const es = new EventSource('https://brutefather.ru/api/puzzles/stream');
es.onmessage = (e) => {
  const ev = JSON.parse(e.data);
  console.log('catalog updated', ev);
};

Keep-alive comments (:keepalive) are sent every 30 seconds so corporate proxies don't drop the connection.

Response fields

Every puzzle object follows the same shape:

bit integer 1..160 — puzzle number address P2PKH Bitcoin address hash160 RIPEMD-160(SHA-256(pubkey)) hex, 40 chars btc prize size in BTC at puzzle creation balance_btc live unspent balance (refreshed via mempool.space) status raw status: unsolved, solved, exposed ui_status same as status, used by the UI badge color pubkey compressed secp256k1 public key (66 hex chars) — only if exposed private_key scalar in hex (64 chars) — only if solved & published updated_at unix timestamp of last on-chain check

Rate limits & caching

  • Soft limit: ~30 requests/sec per IP across /api/. Bursts up to 40 are allowed.
  • Edge cache: 30 s for /api/v1/puzzles, /puzzle/{bit}, /api/v1/stats. 60 s for exports. Use ?refresh=1 to force a fresh on-chain check (do not abuse).
  • Every response includes X-Cache-Status (HIT/MISS/BYPASS) and standard Cache-Control headers.
  • If you need higher throughput or guaranteed freshness, run a local mirror by replaying the SSE stream.

Per-puzzle pages

Each puzzle has its own URL at https://brutefather.ru/puzzle/{bit} (1..160). These are full, self-contained HTML pages with:

  • Live balance auto-refreshed every 30 seconds via JS.
  • Cryptographic data block (address, hash160, public key, private key, key range 2^(bit-1) โ‰ค k < 2^bit).
  • Verify-on-chain links to mempool.space, blockstream.info, blockchain.com, and privatekeys.pw.
  • OpenGraph + Twitter Card meta tags — share a link in Telegram/Discord/Slack and you get a proper preview.
  • Canonical URL pointing back to itself; all 160 pages are in sitemap.xml so search engines can index them.

Examples: #66 ยท #71 ยท #130

Scan modes (BruteFather software)

This site also distributes the BruteFather scanner — a Rust-based, GPU-accelerated address scanner with 17 modes. A short reference:

  • Random — uniform random scalars across the full 256-bit space.
  • Sequential — linear sweep starting from a configurable offset.
  • Puzzle — targeted scan inside [2^(bit-1), 2^bit) for a chosen puzzle.
  • Brain wallet — hashed-passphrase derivations against a wordlist.
  • BIP39 — mnemonic recovery (full + partial seeds).
  • Hybrid / Markov / Dictionary — mixed strategies for weak-key research.
  • Kangaroo — Pollard's lambda for puzzles with exposed public keys.

See /modes for the full list with descriptions, performance numbers, and (soon) animated demos.

Contact & community

This API is provided as a public reference. We do not store or process any personal data from API consumers. Cached responses contain only public on-chain information.