A sweepstakes API provider for auditable draws

Provable.io provides REST endpoints for sweepstakes winner selection, not entrant collection, prize fulfillment, or legal administration. Integrate it with your existing campaign platform to draw an entry number or pick directly from a frozen entrant list, then retain the response as a reproducible audit receipt.

Sweepstakes API integration and audit trail

When entries close, freeze and digest the eligible entrant list, publish the serverHash from a fresh commit, then reveal the winner within the 10-minute commit window. Retain the client seed, revealed server seed, winning entry, and outcome permalink together. Third parties can use the draw verifier to audit the result. Your sweepstakes platform remains responsible for participant data, eligibility, consent, and regulatory retention.

What it is

A sweepstakes-grade winner picker built on /api/ints (for entry-number draws) and /api/pick (for direct entrant lists). One call returns the winning entry plus a serverHash that any third party — your legal team, an administrator, a state regulator, an annoyed Reddit thread — can paste into /verify to confirm the draw wasn't re-rolled.

A draw and its proof

This is what anyone can check. The three values in the steps are all a verifier needs, and the replay button recomputes the draw right here, without calling Provable.

GET /api/ints?clientSeed=sweepstakes_summer_2026_main&count=1&min=1&max=15842Example record
{
  "clientSeed": "sweepstakes_summer_2026_main",
  "nonce": 0,
  "serverHash": "84de0465b5c79dc42c66f30bd18c91de0a60c44ee5c4d0abbbedf6170f01e730",
  "outcome": [12665]
}
  1. Before the draw, the server commits to a seedPublish this hash before the draw, so the seed can't be swapped afterwards.serverHash = sha256(serverSeed) = 84de0465b5c79dc42c66f30bd18c91de0a60c44ee5c4d0abbbedf6170f01e730
  2. The draw is a pure function of both seedsHMAC-SHA256(serverSeed, "sweepstakes_summer_2026_main:0:0") → 1 integer in 1–15842 = [12665]
  3. After the draw, the seed is revealed and anyone can replay itserverSeed = 5d3e3ef33e1ec28262c18eb48b123cb46319ca602be7d9cdb673dca4a59f07be

Try it live — draw entry #X out of N

Most sweepstakes assign entrants sequential entry numbers. Draw a winning entry number directly:

curl "https://api.provable.io/api/ints?clientSeed=sweepstakes_summer_2026_main&count=1&min=1&max=15842"

Or draw a runner-up + 5 alternates from the same seed (the API auto-advances the cursor so each call returns a distinct draw):

curl "https://api.provable.io/api/ints?clientSeed=sweepstakes_summer_2026_alts&count=5&min=1&max=15842"

Integration snippet

// 1. Entries close: freeze the entrant list and number it 1..N.
const entrants = await db.entrants.findAll({ where: { campaignId }, order: ["id"] });
const total = entrants.length;
publishEntrantDigest(sha256(toCsv(entrants))); // proves the pool before the draw

// 2. Commit. Provable keeps the server seed secret and returns its hash.
const commit = await fetch("https://api.provable.io/api/commit", {
  method: "POST",
  headers: { "x-api-key": process.env.PROVABLE_KEY }
}).then((r) => r.json());
publishToRulesPage(commit.serverHash);

// 3. Reveal within 10 minutes (commits expire) with a client seed nobody
//    knew at commit time, e.g. a public block hash produced after step 2.
const draw = await fetch("https://api.provable.io/api/reveal", {
  method: "POST",
  headers: { "x-api-key": process.env.PROVABLE_KEY, "content-type": "application/json" },
  body: JSON.stringify({
    commitId: commit.commitId,
    clientSeed: `sweeps_${campaignId}_${blockHash}`,
    endpoint: "ints",
    params: { count: 1, min: 1, max: total }
  })
}).then((r) => r.json());
const winner = entrants[draw.outcome[0] - 1];

// 4. The audit packet: serverHash, the revealed serverSeed, clientSeed,
//    winning entry number, and the CSV whose digest you published in step 1.

Why this clears compliance

Where it fits

Related

FAQ

Is Provable.io a sweepstakes administrator?

No. Provable.io runs the random draw and gives you its proof. Entry collection, eligibility, official rules, prize fulfillment and winner notification stay with your platform or your administrator.

Do I have to send entrant personal data?

No. Number the frozen entrant list 1 to N and draw an entry number. Only the entry count leaves your system; names and emails stay in your database.

How far ahead can I commit a draw?

Commits expire after 10 minutes, so commit when entries close and reveal right after. Publish the draw time and rules in advance; the commitment that protects the result is the one made before the client seed exists.

What does an auditor need to re-check a draw?

The server seed hash published before the draw, the revealed server seed, the client seed, the entry count and the frozen entrant list. With those, anyone can rerun the draw with the open-source provable-core library or the provably fair calculator at provable.io/tools/provably-fair-calculator and get the same winning entry.

Can sweepstakes casinos use it?

For games you build yourself, yes: dice, crash, plinko or card games can draw from the API and give players a seed pair they can check. Provable.io is not a game aggregator and does not supply third-party slot content.