Eight Ball API
Free Magic 8 Ball API with no key: random fortune readings, a sentiment-biased variant that reacts to the question asked, and multi-language locales. Tested example.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Eight Ball API?
The Eight Ball API is a free, key-free fortune-telling endpoint. A GET returns a random Magic 8 Ball reading, a separate POST endpoint analyses the sentiment of a question and biases the answer accordingly, and a locale parameter switches the response language.
Two endpoints, and the difference between them matters more than it looks. `GET /api` returns a uniformly random reading and ignores any question you attach — passing `?question=...` is accepted and has no effect on the answer. `POST /api/biased` is the one that actually reads the question, runs sentiment analysis over it, and picks a reading weighted to match. Building a fortune feature on the GET endpoint and wondering why the answers feel disconnected from the question is the classic mistake here.
Two practical notes for wiring it up. The apex domain issues a 301 to `www`, so calling `eightballapi.com` costs you a redirect on every request — use the `www` host directly. And no allow-origin header is sent, which rules out calling it from browser JavaScript; you will need a small server-side proxy. The response itself could hardly be simpler: a `reading` string and a `locale`, and nothing else to parse.
Quick facts
- Base URL
https://www.eightballapi.com/api- Authentication
- No key or account. The documentation describes it as free to use with no registration.
- Rate limit
- No rate limit is published and no headers are returned. Responses are tiny, but cache or self-host if you intend to call it heavily.
- Pricing
- Free.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the Eight Ball API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Ask the Magic 8 Ball a question
GET https://www.eightballapi.com/api?question=Will%20this%20API%20still%20be%20free%20next%20year
curl 'https://www.eightballapi.com/api?question=Will%20this%20API%20still%20be%20free%20next%20year'const res = await fetch("https://www.eightballapi.com/api?question=Will%20this%20API%20still%20be%20free%20next%20year");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://www.eightballapi.com/api?question=Will%20this%20API%20still%20be%20free%20next%20year", timeout=20)
res.raise_for_status()
print(res.json()){
"reading": "Concentrate and ask again.",
"locale": "en"
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
question | query | Optional | Accepted on the plain `GET /api` endpoint but does not influence the answer. It only steers results on `POST /api/biased`. Will this API still be free next year |
locale | query | Optional | Response language, for example `en` or `fr`. Echoed back in the response. en |
lucky | body field | Optional | On `POST /api/biased`, adjusts how the sentiment weighting is applied. true |
(categories) | path | Optional | `GET /api/categories` returns every possible reading grouped by sentiment category. |
Response fields
readingstring- The fortune itself — one of the classic Magic 8 Ball responses such as `Concentrate and ask again.`
localestring- The language the reading was returned in, echoing your `locale` parameter or the default.
What you can build with the Eight Ball API
- Add a novelty fortune command to a Discord or Slack bot
- Build a Magic 8 Ball toy page or mobile widget
- Use as a tiny, predictable JSON endpoint when teaching fetch
- Generate playful copy for a 404 or empty-state page
- Demonstrate the difference between a GET and a POST endpoint in a workshop
Common errors and how to fix them
301 on every request
You called the apex domain instead of `www`.
Fix: Use `https://www.eightballapi.com/api` directly and skip the redirect.
Answers that ignore the question
The plain GET endpoint is uniformly random by design.
Fix: Use `POST /api/biased` with the question in the body if you want sentiment-weighted readings.
A CORS error in the browser
No allow-origin header is sent.
Fix: Proxy the call through your own backend. The response is small enough that caching a batch of readings works too.
Eight Ball API — frequently asked questions
Is there a free Magic 8 Ball API?
Yes. The Eight Ball API needs no key or account — a plain GET returns a random reading, and there is a separate endpoint that biases the answer based on the sentiment of the question you send.
Does the question actually change the answer?
Only on the biased endpoint. `GET /api` accepts a `question` parameter but returns a uniformly random reading regardless; `POST /api/biased` is the one that analyses sentiment and weights the response.
Can I get the full list of possible answers?
Yes — `GET /api/categories` returns every reading grouped by sentiment category. That is also the cheapest way to use the service at volume: fetch the list once and randomise locally.
Can I call it from browser JavaScript?
Not directly, as no cross-origin header is sent. Route it through your own server, or fetch the categories list once server-side and pick a reading in the client.
Tools that pair with this API
Random List Picker
Paste a list and pick random winners without repeats, or shuffle the whole list. A fair random name and item picker for giveaways, draws and raffles.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Random Number Generator
Generate random numbers in any range with cryptographically secure randomness. Multiple numbers, no-repeat mode, sorting, plus dice and coin presets.
Eight Ball API is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.