Wikipedia / MediaWiki structured-snapshots API

(BETA) Structured Contents Snapshot API

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/wikipedia-structured-snapshots-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

wikipedia-structured-snapshots-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: MediaWiki Action articles structured-snapshots API
  description: 'The MediaWiki Action API is the original programmatic interface to MediaWiki, exposed under /w/api.php on every MediaWiki installation. All operations dispatch via the ?action= query parameter. The API supports JSON, XML, and PHP serialization; JSON is the recommended format.


    Wikimedia projects strongly recommend serial (not parallel) calls, the use of maxlag for non-interactive jobs, and a contactable User-Agent header. The Action API remains the primary write interface (edit, upload, login, patrol) even where the Core REST API is also available.'
  version: '1.45'
  x-generated-from: documentation
  x-source-url: https://www.mediawiki.org/wiki/API:Main_page
  x-last-validated: '2026-05-29'
  contact:
    name: Wikimedia Foundation
    url: https://www.mediawiki.org/wiki/API:Etiquette
  license:
    name: CC BY-SA 4.0
    url: https://creativecommons.org/licenses/by-sa/4.0/
servers:
- url: https://en.wikipedia.org/w
  description: English Wikipedia
- url: https://{lang}.wikipedia.org/w
  description: Per-language Wikipedia
  variables:
    lang:
      default: en
      description: Language code
- url: https://commons.wikimedia.org/w
  description: Wikimedia Commons
- url: https://www.wikidata.org/w
  description: Wikidata
- url: https://www.mediawiki.org/w
  description: MediaWiki.org
tags:
- name: structured-snapshots
  description: (BETA) Structured Contents Snapshot API
  externalDocs:
    description: enterprise docs - structured snapshot api
    url: https://enterprise.wikimedia.com/docs/snapshot/
paths:
  /v2/snapshots/structured-contents:
    summary: Structured Contents Snapshots Available (Beta)
    description: Returns a list of available project structured contents snapshots.
    get:
      tags:
      - structured-snapshots
      parameters:
      - in: query
        name: fields
        description: Select which fields to receive in your response, using JSON dot notation.
        schema:
          type: array
          items:
            type: string
            example: name
      - in: query
        name: filters
        description: Select which projects and languages to receive in your response.
        schema:
          type: array
          items:
            $ref: '#/components/schemas/filter'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/snapshot'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"identifier": "string", "version": "string", "date_modified": "string" , "is_part_of":{"identifier":"string"},"namespace":{"identifier":0},"in_language":{"identifier":"string"}, "size": {"value": "float" , "unit_text": "string"}} {"identifier": "string", "version": "string", "date_modified": "string" , "is_part_of":{"identifier":"string"},"namespace":{"identifier":0},"in_language":{"identifier":"string"}, "size": {"value": "float" , "unit_text": "string"}}

                  '
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 401}

                  '
        403:
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 403}

                  '
        422:
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":422}

                  '
        500:
          description: Internal Server Error, Retry Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":500}

                  '
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      tags:
      - structured-snapshots
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                fields:
                  type: array
                  example: '["name","identifier"]'
                  description: Select which fields to receive in your response, using JSON dot notation.
                  items:
                    type: string
                filters:
                  type: array
                  description: Select which projects and languages to receive in your response.
                  items:
                    $ref: '#/components/schemas/filter'
                  example: '[{"field": "is_part_of.identifier","value": "enwiki"}]'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/snapshot'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"identifier": "string", "version": "string", "date_modified": "string" , "is_part_of":{"identifier":"string"},"namespace":{"identifier":0},"in_language":{"identifier":"string"}, "size": {"value": "float" , "unit_text": "string"}} {"identifier": "string", "version": "string", "date_modified": "string" , "is_part_of":{"identifier":"string"},"namespace":{"identifier":0},"in_language":{"identifier":"string"}, "size": {"value": "float" , "unit_text": "string"}}

                  '
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 401}

                  '
        403:
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 403}

                  '
        422:
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":422}

                  '
        500:
          description: Internal Server Error, Retry Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":500}

                  '
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v2/snapshots/structured-contents/{identifier}:
    summary: Structured Contents Snapshot Info (Beta)
    description: Information on a specific structured contents snapshot bundle.
    get:
      tags:
      - structured-snapshots
      parameters:
      - in: path
        name: identifier
        description: 'Structured Contents Snapshot identifier looks like `<language><project_name>_namespace_<number>`, examples: `dewiki_namespace_0` downloads structured_contents used in de.wikipedia.org, `enwiki_namespace_0` downloads articles used in en.wikipedia.org. Note: the Structured Contents Beta supports nine projects: `enwiki_namespace_0`, `dewiki_namespace_0`, `frwiki_namespace_0`, `eswiki_namespace_0`, `ptwiki_namespace_0`, `itwiki_namespace_0`, `nlwiki_namespace_0`, `cywiki_namespace_0`, and `idwiki_namespace_0`.'
        required: true
        schema:
          type: string
          minLength: 1
      - in: query
        name: fields
        description: Select which fields to receive in your response, using JSON dot notation.
        schema:
          type: array
          items:
            type: string
            example: name
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/snapshot'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
              example: '{"identifier": "string", "version": "string", "date_modified": "string" , "is_part_of":{"identifier":"string"},"namespace":{"identifier":0},"in_language":{"identifier":"string"}, "size": {"value": "float" , "unit_text": "string"}}

                '
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 401}

                  '
        403:
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 403}

                  '
        404:
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 404}

                  '
        422:
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":422}

                  '
        500:
          description: Internal Server Error, Retry Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":500}

                  '
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      tags:
      - structured-snapshots
      parameters:
      - in: path
        name: identifier
        description: 'Structured Contents Snapshot identifier looks like `<language><project_name>_namespace_<number>`, examples: `dewiki_namespace_0` downloads structured_contents used in de.wikipedia.org, `enwiki_namespace_0` downloads articles used in en.wikipedia.org. Note: the Structured Contents Beta supports nine projects: `enwiki_namespace_0`, `dewiki_namespace_0`, `frwiki_namespace_0`, `eswiki_namespace_0`, `ptwiki_namespace_0`, `itwiki_namespace_0`, `nlwiki_namespace_0`, `cywiki_namespace_0`, and `idwiki_namespace_0`.'
        required: true
        schema:
          type: string
          minLength: 1
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                fields:
                  type: array
                  example: '["name","identifier"]'
                  description: Select which fields to receive in your response, using JSON dot notation.
                  items:
                    type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/snapshot'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
              example: '{"identifier": "string", "version": "string", "date_modified": "string" , "is_part_of":{"identifier":"string"},"namespace":{"identifier":0},"in_language":{"identifier":"string"}, "size": {"value": "float" , "unit_text": "string"}}

                '
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 401}

                  '
        403:
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 403}

                  '
        404:
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 404}

                  '
        422:
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":422}

                  '
        500:
          description: Internal Server Error, Retry Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":500}

                  '
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v2/snapshots/structured-contents/{identifier}/download:
    summary: Structured Contents Snapshot Download (Beta)
    description: Downloadable bundle of structured contents of all current revisions in a specified project and namespace. Updated daily at 12:00 UTC.
    head:
      summary: Wikimedia Enterprise Project Structured Contents Snapshot Headers
      description: Set of headers that describe the structured contents snapshot download.
      tags:
      - structured-snapshots
      parameters:
      - in: path
        name: identifier
        description: 'Snapshot identifier looks like `<language><project_name>_namespace_<number>`, examples: `dewiki_namespace_14` downloads categories used in de.wikipedia.org, `enwiki_namespace_0` downloads articles used in en.wikipedia.org, `frwikivoyage_namespace_10` downloads wikitext templates used in fr.wikivoyage.org. See our Metadata Endpoints for language, projects, and namespaces available for configuration.'
        required: true
        schema:
          type: string
          minLength: 1
      responses:
        200:
          description: OK
          headers:
            Accept-Ranges:
              schema:
                type: string
              description: HTTP response header is a marker used by the server to advertise its support for partial requests.
            Last-Modified:
              schema:
                type: string
              description: Response HTTP header contains a date and time when the origin server believes the resource was last modified.
            Content-Length:
              schema:
                type: string
              description: Header indicates the size of the message body, in bytes, sent to the recipient.
            ETag:
              schema:
                type: string
              description: Entity tag - HTTP response header is an identifier for a specific version of a resource.
            Content-Disposition:
              schema:
                type: string
              description: Header indicating if the content is expected to be displayed in the browser  or as an attachment, that is downloaded and saved locally.
            Content-Encoding:
              schema:
                type: string
              description: Lists any encodings that have been applied to the representation (message payload), and in what order.
            Content-Type:
              schema:
                type: string
              description: Indicates the original media type of the resource (prior to any content encoding applied for sending).
            Expires:
              schema:
                type: string
              description: Contains the date/time after which the response is considered expired.
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 401}

                  '
        403:
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 403}

                  '
        404:
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 404}

                  '
        422:
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":422}

                  '
        500:
          description: Internal Server Error, Retry Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":500}

                  '
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    get:
      tags:
      - structured-snapshots
      parameters:
      - in: path
        name: identifier
        description: 'Structured Contents Snapshot identifier looks like `<language><project_name>_namespace_<number>`, examples: `dewiki_namespace_0` downloads structured_contents used in de.wikipedia.org, `enwiki_namespace_0` downloads articles used in en.wikipedia.org. Note: the Structured Contents Beta supports nine projects: `enwiki_namespace_0`, `dewiki_namespace_0`, `frwiki_namespace_0`, `eswiki_namespace_0`, `ptwiki_namespace_0`, `itwiki_namespace_0`, `nlwiki_namespace_0`, `cywiki_namespace_0`, and `idwiki_namespace_0`.'
        required: true
        schema:
          type: string
          minLength: 1
      - in: header
        name: Range
        description: The Range HTTP request header indicates the part of a document that the server should return.
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/gzip:
              schema:
                type: string
                format: binary
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 401}

                  '
        403:
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 403}

                  '
        404:
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status": 404}

                  '
        422:
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":422}

                  '
        500:
          description: Internal Server Error, Retry Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
            application/x-ndjson:
              schema:
                type: string
                format: ndjson
                example: '{"message":"string","status":500}

                  '
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    filter:
      type: object
      properties:
        field:
          type: string
        value:
          type: string
    error:
      type: object
      properties:
        message:
          type: string
        status:
          type: integer
    article_namespace:
      type: object
      properties:
        identifier:
          type: number
          example: 0
    language:
      type: object
      properties:
        identifier:
          type: string
          example: en
        name:
          type: string
          example: English
        alternate_name:
          type: string
          example: English
        direction:
          type: string
          example: ltr
    snapshot:
      type: object
      properties:
        identifier:
          type: string
        version:
          type: string
        date_modified:
          type: string
        in_language:
          $ref: '#/components/schemas/language'
        is_part_of:
          $ref: '#/components/schemas/project'
        namespace:
          $ref: '#/components/schemas/article_namespace'
        size:
          $ref: '#/components/schemas/size'
        chunks:
          type: array
          items:
            type: string
    size:
      type: object
      properties:
        unit_text:
          type: string
          example: B
        value:
          type: number
          example: 76760
    project:
      type: object
      properties:
        identifier:
          type: string
          example: enwiki
        code:
          type: string
          example: wiki
        name:
          type: string
          example: Wikipedia
        url:
          type: string
          example: https://en.wikipedia.org
        in_language:
          $ref: '#/components/schemas/language'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: OAuth 2.0 bearer token from meta.wikimedia.org
    CookieAuth:
      type: apiKey
      in: cookie
      name: '{wiki}wikiUserID'
      description: Session cookie obtained via action=login or action=clientlogin