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.