The 30-second summary

Random.org generates random numbers from atmospheric noise — a true hardware entropy source operated by a trusted third party since 1998. Provable.io generates random numbers from a seeded HMAC-SHA256 stream and publishes a hash of the server seed before the result, so anyone can independently re-derive and verify the outcome after the fact.

The difference is the trust model. Random.org asks you to trust the operator; Provable.io asks you to trust the math. Both are legitimate answers — they're just answers to different questions.

Feature matrix

CapabilityProvable.ioRandom.org
Entropy sourceHMAC-SHA256 over a committed server seed + client seedAtmospheric noise (radio)
Public verifiability of a past drawYes — publish serverHash, then reveal seed; anyone can re-deriveSigned API responses (paid tier) — verifier must trust Random.org's keypair
Free tierFree, unauthenticated and authenticatedFree quota of bits per day per IP; paid for higher volume
Open-source generatorYes — provable-core on GitHubNo — proprietary backend
Reproducible from a seedYes (that's the whole point)No — by design, each call is fresh entropy
Commit-reveal flowFirst-class: /api/commit + /api/revealNot applicable
Game-style primitivesfloats, ints, dice (3d6), shuffle, weighted pick, bytes, distributionsintegers, sequences, strings, gaussians
WebhooksYes (HMAC-signed)No
Streaming (SSE)Yes, with Last-Event-ID resumeNo
Self-hostableYes — the core library runs offlineNo

When Random.org is the right answer

Random.org wins anywhere the requirement is literally "non-deterministic, hardware-sourced randomness drawn at the moment of the call." That includes:

When Provable.io is the right answer

Provable.io wins anywhere a third party — a user, an auditor, a regulator, your future self — needs to check that the result you reported is the result the algorithm actually produced. That includes:

Try a verifiable draw right now

This is the equivalent of Random.org's "give me five integers between 1 and 100" — except the response includes a serverHash you can paste into /verify to confirm the result wasn't fabricated.

curl "https://api.provable.io/api/ints?clientSeed=compare-random-org&count=5&min=1&max=100"

How verification actually works

Provable.io commits a hash of the next server seed before you call it. When the call happens, the response includes the seed in plaintext and the corresponding hash. You (or anyone) can:

  1. Confirm sha256(serverSeed) === serverHash.
  2. Replay HMAC_SHA256(serverSeed, clientSeed + ":" + cursor + ":" + nonce) to derive the bytes.
  3. Apply the same uniform-integer mapping to confirm the published outcome.

The whole pipeline is in the open-source provable-core npm package — you don't have to trust our server to run it. See How provably fair works for the full walkthrough.

FAQ

Is Provable.io's HMAC stream as "random" as atmospheric noise?

For practical purposes, yes. HMAC-SHA256 with a strong server seed is computationally indistinguishable from uniform randomness — it's the same primitive that backs TLS session keys. The tradeoff is the seed: someone who knows it can re-derive the stream, which is exactly what makes verification possible.

Can I use both?

Sure. A common pattern is to use Random.org to mint your client seed (so the seed is provably not influenced by you), then call Provable.io with that seed. The combination gives you fresh entropy plus public verifiability.

What about latency and rate limits?

Provable.io is free and unauthenticated up to a generous rate limit, with per-account daily quotas above that. Random.org meters by random bits per day per IP and charges for higher volumes. For most app workloads, both are comfortably fast (tens of milliseconds).

Next steps