4chan Indexes API

Per-board, per-page index document of threads (each with a posts array including the OP and a small number of preview replies).

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/4chan-indexes-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

4chan-indexes-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: 4chan Read-Only JSON Archive Indexes 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: Indexes
  description: Per-board, per-page index document of threads (each with a posts array including the OP and a small number of preview replies).
paths:
  /{board}/{page}.json:
    get:
      operationId: getBoardIndexPage
      summary: 4chan Get Board Index Page
      description: Returns a single index page for the given board. Each index page contains an array of threads, and each thread contains its OP plus a small number of preview replies. The maximum page number for a board comes from the `pages` field on the matching entry in `/boards.json`.
      tags:
      - Indexes
      parameters:
      - $ref: '#/components/parameters/BoardPath'
      - $ref: '#/components/parameters/PagePath'
      responses:
        '200':
          description: Successful response. Returns the page's threads.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndexPageResponse'
              examples:
                GetBoardIndexPage200Example:
                  summary: Default getBoardIndexPage 200 response
                  x-microcks-default: true
                  value:
                    threads:
                    - posts:
                      - false: 570368
                        sticky: 1
                        closed: 1
                        now: 12/31/18(Mon)17:05:48
                        name: Anonymous
                        sub: Welcome to /po/!
                        com: Welcome to /po/!
                        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
                        unique_ips: 1
        '304':
          description: Not Modified.
        '404':
          description: Board not found or page out of range.
        '503':
          description: Service Unavailable.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  parameters:
    PagePath:
      name: page
      in: path
      required: true
      description: Index page number, starting at `1`. The maximum value is the `pages` field on the matching entry in `/boards.json` (commonly 10 or 15).
      schema:
        type: integer
        minimum: 1
        maximum: 20
        example: 3
      example: 3
    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
  schemas:
    IndexPageResponse:
      type: object
      description: Top-level response from `/{board}/{page}.json`.
      required:
      - threads
      properties:
        threads:
          type: array
          description: Every thread visible on the requested index page.
          items:
            $ref: '#/components/schemas/IndexPageThread'
    IndexPageThread:
      type: object
      description: Wrapper around the posts visible for one thread inside an index-page response.
      required:
      - posts
      properties:
        posts:
          type: array
          description: OP plus preview replies for this thread.
          items:
            $ref: '#/components/schemas/Post'
    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'