Social — entry 001 of 39
4chan
4chan's API serves the same read-only board and thread data every page renders — board lists, catalogs, threads, and posts — as plain JSON from the dedicated a.4cdn.org host, with no registration, key, or authentication of any kind required. Media referenced by posts is served from the sibling i.4cdn.org host, and the project's own GitHub repository (4chan/4chan-API) hosts the reference client and doubles as the canonical documentation, including the rule to cap requests at one per second. Cross-origin use from a browser is limited in practice: both the docs and a live probe confirm the API's CORS policy only allows requests originating from 4chan's own board pages, so a third-party site must proxy requests server-side rather than call it directly from client-side JavaScript.
4chan publishes the same read-only board and thread listings its own web UI renders as plain static JSON from a dedicated CDN host, a.4cdn.org, with no registration, key, or authentication of any kind. A live GET this run against `/po/threads.json` returned a genuine, purely numeric thread-index payload -- `no`, `last_modified`, and `replies` per thread, no post text -- matching the shape 4chan's own GitHub docs (4chan/4chan-API) describe.
GreatAPIs Score
Auth quickstart
- No API key, signup, or credit card required. A live GET this run against `/po/threads.json` returned genuine JSON with no credentials of any kind. The only rule the docs impose is etiquette, not auth: cap requests at one per second and prefer conditional `If-Modified-Since` requests (see gotchas) over polling blind.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
List a board's active threads
GEThttps://a.4cdn.org/po/threads.json
[{"page":1,"threads":[{"no":627472,"last_modified":1745615405,"replies":3},{"no":629632,"last_modified":1785472455,"replies":3},{"no":625863,"last_modified":1785462002,"replies":35},{"...":"12 more threads on page 1, same shape"}]},{"...":"10 more pages, same shape"}]`/po/` (Papercraft & Origami) is the board 4chan's own docs use as their canonical example. The response is a purely numeric thread index meant for building a catalog view -- no post text, subjects, or filenames appear in this endpoint; those live in `/po/thread/{no}.json` per-thread, which this quickstart deliberately does not fetch or quote (see gotchas).
Try it
Developer reference
https://a.4cdn.org- GET/boards.json
- GET/{board}/threads.json
- GET/{board}/thread/{no}.json
Gotchas & limits
- CORS is hard-locked to 4chan's own board pages, not the caller's origin -- a live GET this run with `Origin: https://example.com` against `/po/threads.json` still returned `access-control-allow-origin: http://boards.4chan.org` (never the request's own origin), alongside `access-control-allow-methods: GET, OPTIONS` and `access-control-allow-headers: Range, If-Modified-Since`. A third-party browser app can never call this API directly from client-side JavaScript; it must proxy the request server-side.
- Conditional GET is the documented etiquette, not an optional optimization -- a live GET this run captured the `last-modified` response header from `/po/threads.json`, then echoed that exact value back as `If-Modified-Since` on a second request and received **HTTP 304** with an empty body. Poll with `If-Modified-Since` rather than re-fetching the full payload every second.
- An unknown board 404s with a JSON content-type but a **completely empty body** -- a live GET this run against `/nosuchboard/threads.json` returned `HTTP 404` with `content-type: application/json` and zero bytes of content. Do not assume a 404 response here is JSON-parseable.
- An unknown thread number likewise 404s -- a live GET this run against `/po/thread/1.json` (a thread number long since pruned from the board) returned `HTTP 404`.
- Media referenced by posts (images, thumbnails) is never inline in this JSON -- it lives on the sibling `i.4cdn.org` host, built from the board/thread/filename fields the JSON does return; this API never serves image bytes itself.
- This quickstart deliberately quotes only structural, numeric fields (`no`, `last_modified`, `replies`) from live 4chan data -- never post bodies, subjects (`sub`), comments (`com`), or filenames, which `/po/thread/{no}.json` additionally carries per-post.