Entertainment — entry 002 of 9

chucknorris.io

Verified Jul 2026

chucknorris.io is a free, keyless JSON API serving hand-curated Chuck Norris jokes, either fully random or filtered across 16 categories (career, dev, movie, political, sport, and more). It also supports free-text search over the joke corpus and returns each joke with a permalink and an icon-URL field for quick embedding. There's no rate limit, no signup, and no paid tier — it's run as a hobby project on Heroku behind Cloudflare.

chucknorris.io is a single keyless JSON API: a live probe of `GET /jokes/random` returned a fresh joke with no auth header of any kind, and `GET /jokes/categories` returned a live list of exactly 16 category strings (`animal`, `career`, `celebrity`, `dev`, `explicit`, `fashion`, `food`, `history`, `money`, `movie`, `music`, `political`, `religion`, `science`, `sport`, `travel`) to filter `random` by.

jokeschuck-norristriviakeylessfun
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/chucknorris-io/"><img src="https://greatapis.com/badge/chucknorris-io.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. No API key or signup required — a live GET to `/jokes/random` with no headers at all returned HTTP 200 with a joke body.
  2. There is no visible rate-limit contract: repeated live probes this run never returned a `RateLimit-*`, `X-RateLimit-*`, or `Retry-After` header on any response — plan accordingly since nothing here signals how close you are to any cap the provider may still enforce server-side.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Get a random joke from one category

GEThttps://api.chucknorris.io/jokes/random?category=dev

200 application/json

{"categories":["dev"],"created_at":"2020-01-05 13:42:19.104863","icon_url":"https://api.chucknorris.io/img/avatar/chuck-norris.png","id":"etd9c1v9smqxo2xonfm2lq","updated_at":"2020-01-05 13:42:19.104863","url":"https://api.chucknorris.io/jokes/etd9c1v9smqxo2xonfm2lq","value":"Chuck Norris doesn't need a debugger, he just stares down the bug until the code confesses."}

Captured byte-for-byte from this run's live probe — the `id` and `value` are whichever joke the `dev` category happened to return that request, not a fixed example; a repeat call returns a different joke from the same category.

Developer reference

Base URLhttps://api.chucknorris.io

Gotchas & limits

  • Filtering `/jokes/random` by an unknown category doesn't 400 — a live probe of `/jokes/random?category=zzzz` returned HTTP 404 with the JSON envelope `{"timestamp":"...","status":404,"error":"Not Found","path":"/jokes/random"}`, so check the category against `/jokes/categories` first rather than trusting a non-error response.
  • `/jokes/search` enforces a minimum query length — a live probe of `/jokes/search?query=zz` returned HTTP 400 with `{"message":"search.query: size must be between 3 and 120","violations":{"search.query":"size must be between 3 and 120"}}`; 2-character queries are rejected outright.
  • CORS is wide open: a live `OPTIONS` preflight with an `Origin` header against `/jokes/random` returned `Access-Control-Allow-Origin: *` and `Access-Control-Allow-Methods: GET`, so this API is callable directly from browser JS on any origin.
  • The stored category summary for this API claims "no rate limit" — this run's probes only confirm the absence of rate-limit *headers*, not the absence of any server-side cap, so don't repeat the stronger claim without a probe that actually triggers a 429.