BYTETOOLS

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.

No API key requiredHTTPSFree tier

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
curl 'https://www.eightballapi.com/api?question=Will%20this%20API%20still%20be%20free%20next%20year'
JavaScript (fetch)
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);
Python (requests)
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())
Response — HTTP 200
{
  "reading": "Concentrate and ask again.",
  "locale": "en"
}

Parameters

ParameterTypeRequiredDescription
questionqueryOptionalAccepted 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
localequeryOptionalResponse language, for example `en` or `fr`. Echoed back in the response. en
luckybody fieldOptionalOn `POST /api/biased`, adjusts how the sentiment weighting is applied. true
(categories)pathOptional`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

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.