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
| Endpoint | Returns |
|---|---|
/api/wheels.json | Every 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.