4chan Catalog API
Per-board catalog snapshot containing every OP and its preview replies, grouped by index page.
Per-board catalog snapshot containing every OP and its preview replies, grouped by index page.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/4chan-catalog-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: 4chan Read-Only JSON Archive Catalog API
description: 'Read-only JSON API for the 4chan and 4channel imageboards, originally launched in September 2012. All endpoints are served as static JSON documents from `a.4cdn.org` over `http://` or `https://`. The API exposes only the public, anonymous read surface of the site: board metadata, board catalogs, board threadlists, archive listings, board index pages, and individual thread documents.
There is no authentication, no posting, and no per-user write surface. Only `GET`, `HEAD`, and `OPTIONS` are accepted. CORS is enabled only for origins `boards.4chan.org` and `boards.4channel.org`.
Clients MUST send no more than one request per second, MUST set thread-polling intervals to at least 10 seconds (preferably higher), and SHOULD use `If-Modified-Since` so that unchanged threads return `304 Not Modified`.'
version: '2026-05-28'
termsOfService: https://github.com/4chan/4chan-API#api-terms-of-service
contact:
name: 4chan API
email: api@4chan.org
url: https://github.com/4chan/4chan-API
license:
name: 4chan API Terms of Service
url: https://github.com/4chan/4chan-API#api-terms-of-service
x-generated-from: documentation
x-source-url: https://github.com/4chan/4chan-API
x-last-validated: '2026-05-28'
servers:
- url: https://a.4cdn.org
description: Production 4chan read-only JSON API (HTTPS).
- url: http://a.4cdn.org
description: Production 4chan read-only JSON API (HTTP, legacy clients only).
tags:
- name: Catalog
description: Per-board catalog snapshot containing every OP and its preview replies, grouped by index page.
paths:
/{board}/catalog.json:
get:
operationId: getBoardCatalog
summary: 4chan Get Board Catalog
description: 'Returns the full catalog snapshot for the given board: every OP with its attributes and a short list of preview replies, grouped by index page. This is the largest per-board document and mirrors the public catalog page at `boards.4channel.org/{board}/catalog`.'
tags:
- Catalog
parameters:
- $ref: '#/components/parameters/BoardPath'
responses:
'200':
description: Successful response. Returns the catalog as an array of pages.
content:
application/json:
schema:
$ref: '#/components/schemas/CatalogResponse'
examples:
GetBoardCatalog200Example:
summary: Default getBoardCatalog 200 response
x-microcks-default: true
value:
- page: 1
threads:
- false: 570368
sticky: 1
closed: 1
now: 12/31/18(Mon)17:05:48
name: Anonymous
sub: Welcome to /po/!
com: Welcome to /po/! We specialize in origami, papercraft, and everything that's relevant to paper engineering.
filename: yotsuba_folding
ext: .png
w: 530
h: 449
tn_w: 250
tn_h: 211
tim: 1546293948883
time: 1546293948
md5: uZUeZeB14FVR+Mc2ScHvVA==
fsize: 516657
resto: 0
capcode: mod
semantic_url: welcome-to-po
replies: 2
images: 2
omitted_posts: 0
omitted_images: 0
last_replies:
- false: 570371
now: 12/31/18(Mon)17:21:29
name: Anonymous
com: FAQ reply.
time: 1546294889
resto: 570368
last_modified: 1546294897
'304':
description: Not Modified.
'404':
description: Board not found.
'503':
description: Service Unavailable.
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
components:
schemas:
Post:
type: object
description: A single post — either an OP (when `resto == 0`) or a reply (when `resto` is the OP id). Many fields appear only on OPs (`replies`, `images`, `sticky`, `closed`, `archived`, …) or only on posts with an attached file.
required:
- 'no'
- resto
- now
- time
- name
properties:
'no':
type: integer
description: Numeric post ID.
example: 570368
resto:
type: integer
description: For replies, the OP ID this post replies to. For OPs, `0`.
example: 0
sticky:
type: integer
description: '`1` if the thread is pinned to the top of the board (OP only).'
enum:
- 0
- 1
example: 1
closed:
type: integer
description: '`1` if the thread is closed to new replies (OP only).'
enum:
- 0
- 1
example: 1
now:
type: string
description: Localized post timestamp in `MM/DD/YY(Day)HH:MM` (or `HH:MM:SS`) format, EST/EDT.
example: 12/31/18(Mon)17:05:48
time:
type: integer
description: UNIX timestamp the post was created.
example: 1546293948
name:
type: string
description: Display name used for the post (defaults to `Anonymous`).
example: Anonymous
trip:
type: string
description: User tripcode in the form `!tripcode` or `!!securetripcode`.
example: '!K.WeEabc'
id:
type: string
description: Poster ID (8 chars) — present only when the board has per-thread poster IDs enabled.
example: ABcd1234
capcode:
type: string
description: Staff capcode on the post.
enum:
- mod
- admin
- admin_highlight
- manager
- developer
- founder
example: mod
country:
type: string
description: ISO 3166-1 alpha-2 country code of the poster, or `XX` if unknown.
example: US
country_name:
type: string
description: Human-readable country name of the poster.
example: United States
board_flag:
type: string
description: Board-specific flag code (only on boards with board flags enabled).
example: AB
flag_name:
type: string
description: Board-specific flag display name.
example: Flag Name AB
sub:
type: string
description: OP subject (OP only, when set).
example: Welcome to /po/!
com:
type: string
description: Post comment as HTML-escaped string.
example: Welcome to /po/! We specialize in origami, papercraft, and everything that's relevant to paper engineering.
tim:
type: integer
description: UNIX timestamp + microtime that the attachment was uploaded — also the file ID for `i.4cdn.org`.
example: 1546293948883
filename:
type: string
description: Original filename of the attachment as uploaded.
example: yotsuba_folding
ext:
type: string
description: Attachment file extension.
enum:
- .jpg
- .png
- .gif
- .pdf
- .swf
- .webm
example: .png
fsize:
type: integer
description: Attachment file size, in bytes.
example: 516657
md5:
type: string
description: 24-character packed base64 MD5 hash of the attachment.
example: uZUeZeB14FVR+Mc2ScHvVA==
w:
type: integer
description: Attachment width in pixels.
example: 530
h:
type: integer
description: Attachment height in pixels.
example: 449
tn_w:
type: integer
description: Thumbnail width in pixels.
example: 250
tn_h:
type: integer
description: Thumbnail height in pixels.
example: 211
filedeleted:
type: integer
description: '`1` if the post had a file and that file has been deleted.'
enum:
- 0
- 1
example: 0
spoiler:
type: integer
description: '`1` if the attachment is spoilered.'
enum:
- 0
- 1
example: 0
custom_spoiler:
type: integer
description: Custom spoiler ID `1-10` (only on boards with custom spoilers).
minimum: 1
maximum: 10
example: 1
replies:
type: integer
description: Total number of replies in the thread (OP only).
example: 2
images:
type: integer
description: Total number of image replies in the thread (OP only).
example: 2
bumplimit:
type: integer
description: '`1` once the thread has reached its bump limit (OP only).'
enum:
- 0
- 1
example: 0
imagelimit:
type: integer
description: '`1` once the thread has reached its image-reply limit (OP only).'
enum:
- 0
- 1
example: 0
tag:
type: string
description: Category of `.swf` upload on `/f/` (OP only, `/f/` only).
example: Game
semantic_url:
type: string
description: SEO-friendly URL slug for the thread (OP only).
example: welcome-to-po
since4pass:
type: integer
description: Year the poster bought a 4chan Pass (only when the poster opted in).
example: 2018
unique_ips:
type: integer
description: Number of unique posters in the thread (OP only, only when the thread is live).
example: 1
m_img:
type: integer
description: '`1` if a mobile-optimized variant of the attachment exists.'
enum:
- 0
- 1
example: 1
archived:
type: integer
description: '`1` once the thread has been archived (OP only).'
enum:
- 0
- 1
example: 1
archived_on:
type: integer
description: UNIX timestamp the thread was archived (OP only).
example: 1566530948
omitted_posts:
type: integer
description: Replies omitted from a catalog/index preview (OP only on catalog/index responses).
example: 1
omitted_images:
type: integer
description: Image replies omitted from a catalog/index preview (OP only on catalog/index responses).
example: 1
last_modified:
type: integer
description: UNIX timestamp the thread was last modified (OP only on catalog/threadlist responses).
example: 1566530948
last_replies:
type: array
description: Most recent reply objects shown in a catalog preview (OP only on catalog responses).
items:
$ref: '#/components/schemas/Post'
CatalogPage:
type: object
description: One index page in a catalog response.
required:
- page
- threads
properties:
page:
type: integer
description: Index page number this catalog page entry belongs to.
example: 1
threads:
type: array
description: Catalog thread entries (each is an OP `Post` object enriched with `last_replies`).
items:
$ref: '#/components/schemas/Post'
CatalogResponse:
type: array
description: Top-level response from `/{board}/catalog.json` — an array of pages, each containing OP threads with preview replies.
items:
$ref: '#/components/schemas/CatalogPage'
parameters:
BoardPath:
name: board
in: path
required: true
description: Board directory short name (e.g. `a`, `b`, `g`, `pol`, `po`, `v`). The full list of valid values is the `board` field on each entry in `/boards.json`.
schema:
type: string
pattern: ^[a-z0-9]+$
minLength: 1
maxLength: 8
example: po
example: po