Open data

The wheel data, as JSON

All 36 preset wheels with their entries, slice counts and per-spin odds, in one file. No key, no signup, no rate limit, and CORS is open so you can call it straight from a browser. Free under CC-BY-4.0 if you credit the source.

Endpoints

EndpointReturns
/api/wheels.jsonEvery wheel, plus the licence, a count and a link to this page.
/api/wheels/<slug>One wheel, same object shape. Example: /api/wheels/what-to-eat

Both respond with content-type: application/json and access-control-allow-origin: *. Both are static files on a CDN, so they are fast and there is nothing to take down.

The shape of a wheel

{
  "slug": "what-to-eat",
  "title": "What Should I Eat Wheel",
  "description": "...",
  "category": "food",
  "entries": ["Pizza", "Tacos", "..."],
  "entryCount": 10,
  "chancePerSpin": 0.1,
  "url": "https://spinpicker.io/wheel/what-to-eat",
  "embedUrl": "https://spinpicker.io/embed/wheel/what-to-eat",
  "updatedAt": "2026-08-05"
}

chancePerSpin is 1 divided by entryCount, rounded to six decimal places. It is included so the arithmetic is stated rather than assumed; the fairness page covers how the draw actually achieves it.

Examples

curl

curl -s https://spinpicker.io/api/wheels.json

JavaScript

const res = await fetch("https://spinpicker.io/api/wheels.json");
const data = await res.json();

// Every wheel with fewer than ten slices
const small = data.wheels.filter((w) => w.entryCount < 10);
console.log(small.map((w) => `${w.title}: ${w.entryCount} slices`));

Python

import json, urllib.request

with urllib.request.urlopen("https://spinpicker.io/api/wheels.json") as r:
    data = json.load(r)

for wheel in data["wheels"]:
    print(wheel["slug"], wheel["entryCount"], wheel["chancePerSpin"])

Licence

Creative Commons Attribution 4.0 International (CC-BY-4.0). Use it, change it, ship it in a commercial product, all fine. The one requirement is credit:

Wheel data from SpinPicker (https://spinpicker.io), CC BY 4.0

Full licence text at https://creativecommons.org/licenses/by/4.0/.

Stability

Fields will be added, not renamed or removed. If that ever has to change, it goes in the changelog with a date. The dataset is small and hand-maintained on purpose, so it does not churn.

Frequently asked questions

Do I need an API key?

No. There is no key, no signup and no rate limit, because there is no server: the endpoints are static JSON files served from a CDN, exactly like the rest of the site.

Can I use this commercially?

Yes. CC BY 4.0 permits commercial use, redistribution and modification. The only condition is attribution: credit SpinPicker and link back to spinpicker.io.

How often does the data change?

Rarely. Wheels are added or edited by hand, not generated, so the updatedAt field on each wheel reflects the last real content change rather than the last deployment. Caching the response for a day is entirely reasonable.

Is there an endpoint for user-made wheels?

No, and there will not be. Wheels a visitor builds are never sent to a server in the first place; they live in the URL fragment of a share link. There is nothing on our side to expose.

Can I request a field or an endpoint?

Yes, through the contact form. The dataset is deliberately small and stable, so changes are additive: existing fields will not be renamed or removed without a note in the changelog.

Building something with this?

Everything on this page is free under CC-BY-4.0. Link back to spinpicker.io and you are done. If you would rather embed the working wheel than rebuild it, the embed guide is one iframe.