Quickstarts
Quickstart with cURL
Make your first API call from the command line in under a minute.
QuickstartQuickstart with Node.js
Generate and verify random outcomes from a Node.js server using fetch.
QuickstartQuickstart with Python
Call the API from Python using the requests library, with verification examples.
QuickstartQuickstart with Go
Call the API from Go using net/http — no third-party dependencies required.
QuickstartConcepts & Guides
How Provably Fair Works
The cryptographic technique behind verifiable randomness, explained without the jargon.
ConceptMigrating from Math.random()
Before/after snippets for range ints, weighted pick, and shuffle — plus a feature-flag rollout plan.
GuideVerifying an Outcome
Step-by-step guide to verifying that a Provable.io outcome is genuine.
GuideAuditing the Transparency Log
Daily Merkle roots, inclusion proofs, and how to audit them yourself.
GuideThe Commit-Reveal Flow
How POST /api/commit + POST /api/reveal lets the server prove it didn't pick the outcome after seeing your bet.
GuideIdempotency
How Idempotency-Key headers prevent duplicate outcomes on retried requests.
GuideWebhooks
Subscribe to outcome events with signed webhook delivery and retries.
GuideStreaming Outcomes
Use the SSE endpoint to receive outcomes in real time, with Last-Event-ID resume.
GuideTest-Mode Keys
Use pk_test_* keys for playgrounds and CI — outcomes don't touch live seed state.
GuideAPI Key Restrictions
Per-key IP and Referer allowlists for safer key sharing.
GuideUse cases
Dice Roller API
Verifiable dice rolls in standard NdM notation.
Use caseRaffle Picker API
Draw winners from a list with a publishable proof.
Use caseCard Shuffler API
A verifiable Fisher-Yates shuffle in one HTTP call.
Use caseLottery API
Pre-committed lottery draws anyone can replay.
Use caseSweepstakes API
Compliance-ready winner selection with a paper trail.
Use caseNFT Mint Randomizer API
Gas-free, off-chain trait and reveal-order randomness.
Use caseGenerating NFT Traits
Mint-time trait assignment holders can independently verify — no "team got the rares."
Use caseCompare
vs Random.org
How Provable.io's verifiable model compares to Random.org's hardware entropy.
Comparevs Chainlink VRF
The off-chain alternative when you don't need randomness inside a smart contract.
Comparevs crypto.randomUUID()
When the language CSPRNG is right, and when you need a publicly verifiable RNG instead.
Comparevs Math.random()
Why JavaScript's non-cryptographic PRNG fails the moment a draw needs verification.
Comparevs crypto.getRandomValues()
Web Crypto's CSPRNG is right for tokens. Here's where it stops being enough.
Comparevs Python secrets.token_bytes()
The Python stdlib CSPRNG vs an HTTP API with a published proof.
Comparevs openssl rand
The shell-script CLI vs a verifiable RNG you can curl instead.
vs nanoid
Local ID generator vs verifiable RNG API — different jobs, often confused.
Comparevs UUID v7
Time-ordered IDs vs verifiable random outcomes.
Comparevs drand
Distributed randomness beacon vs per-call commit-reveal API.
Comparevs Cloudflare randomness beacon
Cloudflare's drand endpoint vs a per-call API with richer primitives.
Comparevs RANDOM.ORG paid API
Operator-signed responses vs open-source seed re-derivation.
Comparevs AWS KMS GenerateRandom
HSM-sourced bytes vs verifiable bytes — pick by audience.
Comparevs GCP Cloud KMS random
Google HSM bytes vs publicly verifiable RNG.
Comparevs CSPRNG-as-a-Service
Generic black-box RNG SaaS vs a commit-reveal API anyone can verify.
Compare