{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/enterprise-wikimedia-com/json-schema/enterprise-wikimedia-com-article-schema.json",
  "title": "article",
  "description": "Wikipedia or other Wikimedia project article. Snapshot, On-demand, and Realtime responses all share this shape",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/enterprise-wikimedia-com-openapi.yml#/components/schemas/article",
  "properties": {
    "event": {
      "$ref": "#/$defs/event"
    },
    "additional_entities": {
      "items": {
        "$ref": "#/$defs/entity"
      },
      "type": "array",
      "description": "Wikidata entities used on the article page, with the aspects of each entity that are used"
    },
    "article_body": {
      "$ref": "#/$defs/article_body"
    },
    "categories": {
      "items": {
        "$ref": "#/$defs/category"
      },
      "type": "array",
      "description": "Categories the article belongs to"
    },
    "date_modified": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp of when the article was last modified"
    },
    "identifier": {
      "type": "integer",
      "description": "Unique identifier of the article. This is the article's MediaWiki page ID, distinct from the revision identifier"
    },
    "in_language": {
      "$ref": "#/$defs/language",
      "description": "Language the article is written in"
    },
    "is_part_of": {
      "$ref": "#/$defs/project",
      "description": "Project the article belongs to. The [Available Projects endpoint](/docs/api/#tag/projects/GET/v2/projects) lists all projects"
    },
    "license": {
      "items": {
        "$ref": "#/$defs/license"
      },
      "type": "array",
      "description": "Licenses that apply to the article content"
    },
    "main_entity": {
      "$ref": "#/$defs/entity",
      "description": "Wikidata item ([QID](https://en.wikipedia.org/wiki/Help:Wikidata)) the article is connected to"
    },
    "name": {
      "type": "string",
      "description": "Name of the article, as displayed at the top of the article page"
    },
    "abstract": {
      "type": "string",
      "description": "Short plain-text summary of the article"
    },
    "namespace": {
      "$ref": "#/$defs/article_namespace",
      "description": "Namespace the article belongs to"
    },
    "protection": {
      "items": {
        "$ref": "#/$defs/protection"
      },
      "type": "array",
      "description": "Protections restricting who can edit or move the article. `null` or omitted when the article is unprotected"
    },
    "redirects": {
      "items": {
        "$ref": "#/$defs/redirect"
      },
      "type": "array",
      "description": "Articles that redirect to this article"
    },
    "templates": {
      "items": {
        "$ref": "#/$defs/template"
      },
      "type": "array",
      "description": "Wikitext templates used on the article"
    },
    "url": {
      "type": "string",
      "format": "uri",
      "description": "URL of the article"
    },
    "version": {
      "$ref": "#/$defs/version"
    },
    "visibility": {
      "$ref": "#/$defs/visibility"
    },
    "image": {
      "$ref": "#/$defs/image",
      "description": "Main image of the article. Distinct from the `images` arrays inside content parts, which hold images used within the article body"
    },
    "date_created": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp of when the article was first created"
    },
    "date_previously_modified": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp of the before-last revision"
    },
    "previous_version": {
      "$ref": "#/$defs/previous_version"
    },
    "watchers_count": {
      "type": "integer",
      "description": "Number of unique editors watching the page"
    }
  },
  "type": "object",
  "$defs": {
    "article_body": {
      "description": "Content of the article in HTML and wikitext. May be empty or omitted on `delete` and `visibility-change` events",
      "properties": {
        "html": {
          "type": "string",
          "description": "Parsed HTML of the article, following the [MediaWiki DOM spec](https://www.mediawiki.org/wiki/Specs/HTML)"
        },
        "wikitext": {
          "type": "string",
          "description": "Raw wikitext markup of the article"
        }
      },
      "type": "object"
    },
    "article_namespace": {
      "type": "object",
      "description": "Namespace the page belongs to",
      "properties": {
        "identifier": {
          "type": "number",
          "description": "Numeric identifier of the namespace. Names and descriptions are available from the Namespaces metadata endpoints"
        }
      }
    },
    "category": {
      "description": "Category the article belongs to. Categories aggregate articles around related topics",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the category"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the category page"
        }
      },
      "type": "object"
    },
    "editor": {
      "description": "Editor who made the revision, with signals that help contextualize their activity",
      "properties": {
        "date_started": {
          "type": "string",
          "format": "date-time",
          "description": "Timestamp of when the editor's account was registered. Anonymous editors (from before temporary accounts) carry the zero value `0001-01-01T00:00:00Z` rather than a real date"
        },
        "edit_count": {
          "type": "integer",
          "description": "Number of edits the editor has made"
        },
        "groups": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Editor groups the editor belongs to, such as `autoconfirmed` or `bot`"
        },
        "identifier": {
          "type": "integer",
          "description": "Unique MediaWiki identifier of the editor. Absent for anonymous editors"
        },
        "is_anonymous": {
          "type": "boolean",
          "description": "Whether the editor is anonymous. Since December 2025 all Wikimedia projects except Russian Wikipedia replaced anonymous editing with temporary accounts, so on those projects `is_anonymous` is always `false` and omitted"
        },
        "is_bot": {
          "type": "boolean",
          "description": "Whether the editor is a bot"
        },
        "name": {
          "type": "string",
          "description": "Username of the editor, which may be removed if deemed vandalism. For anonymous editors this is the editor's IP address. For [temporary accounts](https://en.wikipedia.org/wiki/Wikipedia:Temporary_accounts) it is a tilde, the account's creation year, and an auto-generated serial number in 5-digit groups, e.g. `~2026-59431-3`"
        },
        "is_admin": {
          "type": "boolean",
          "description": "Whether the editor has admin status"
        },
        "is_patroller": {
          "type": "boolean",
          "description": "Whether the editor has patroller status"
        },
        "has_advanced_rights": {
          "type": "boolean",
          "description": "Whether the editor has advanced rights"
        }
      },
      "type": "object"
    },
    "entity": {
      "type": "object",
      "description": "Wikidata entity connected to the article",
      "properties": {
        "aspects": {
          "$ref": "#/$defs/entity_aspects",
          "description": "Aspects of the entity that the article uses. Populated on `additional_entities`. Current payloads omit it on `main_entity`"
        },
        "identifier": {
          "type": "string",
          "description": "Wikidata identifier of the entity: QID for items (e.g. `Q42`), PID for properties (e.g. `P31`)"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the entity on Wikidata"
        }
      }
    },
    "entity_aspects": {
      "type": "array",
      "description": "Aspects of the entity that are used, from Wikibase entity usage\ntracking. Each value is an aspect code. The set is open, not a\nfixed vocabulary: modifier forms carry language codes and property\nids, and new codes can appear at any time. Well-known values:\n\n- `S` (\"sitelinks\"): the entity's sitelinks are used.\n- `L` (\"label\"): the entity's label is used.\n- `L.xx` (\"label in XX\"): the label aspect with a language modifier, e.g. `L.en`.\n- `T` (\"title\"): the title of the local page corresponding to the entity is used.\n- `O` (\"other\"): aspects other than sitelinks, labels, or titles - typically statements.\n- `X` (\"all\"): other aspects (such as statement data), or all aspects, are or may be used.\n- `D.xx` (\"description\"): the entity's description in language `xx` is used.\n- `A.xx` (\"alias\"): the entity's alias in language `xx` is used.\n- `C.Px` (\"statements\"): certain statements (identified by their property id) from the entity are used.\n\nSee the [Wikibase entity usage schema](https://www.mediawiki.org/wiki/Wikibase/Schema/wbc_entity_usage) for the full aspect grammar.",
      "items": {
        "type": "string"
      }
    },
    "event": {
      "type": "object",
      "description": "Event that triggered the change to the article or entity",
      "properties": {
        "identifier": {
          "type": "string",
          "description": "UUID of the event, usable to trace it through the Wikimedia Enterprise pipeline"
        },
        "type": {
          "type": "string",
          "description": "Type of event:\n- `update` - the article or entity changed\n- `delete` - the article or entity was deleted\n- `visibility-change` - the visibility of a revision changed; Realtime API only",
          "enum": [
            "update",
            "delete",
            "visibility-change"
          ]
        },
        "date_created": {
          "type": "string",
          "format": "date-time",
          "description": "Timestamp of when the event entered the Wikimedia Enterprise pipeline"
        },
        "date_published": {
          "type": "string",
          "format": "date-time",
          "description": "Timestamp of when the event was published to its partition. Realtime API only"
        },
        "partition": {
          "type": "integer",
          "description": "Partition of the event stream the event belongs to. Realtime API only"
        },
        "offset": {
          "type": "integer",
          "description": "Position of the event within its partition, increasing with each event. Realtime API only"
        }
      }
    },
    "image": {
      "type": "object",
      "description": "Image hosted on a Wikimedia project",
      "properties": {
        "content_url": {
          "description": "Image URL",
          "format": "uri",
          "type": "string"
        },
        "identifier": {
          "type": "string",
          "description": "Unique identifier for the image"
        },
        "name": {
          "type": "string",
          "description": "Filename of the image"
        },
        "width": {
          "description": "image width in pixels",
          "type": "integer"
        },
        "height": {
          "description": "image height in pixels",
          "type": "integer"
        },
        "thumbnail": {
          "$ref": "#/$defs/thumbnail",
          "description": "Thumbnail of the image"
        },
        "caption": {
          "type": "string",
          "description": "caption describing the image"
        },
        "alternative_text": {
          "type": "string",
          "description": "Alternative text description of the image for accessibility"
        },
        "encoding_format": {
          "type": "string",
          "format": "mime_type",
          "description": "MIME type or encoding format of the image, constructed from the url"
        },
        "media_type": {
          "type": "string",
          "enum": [
            "unknown",
            "bitmap",
            "drawing",
            "audio",
            "video",
            "multimedia",
            "office",
            "text",
            "executable",
            "archive"
          ],
          "description": "MediaWiki media type of the image"
        }
      }
    },
    "language": {
      "type": "object",
      "description": "Language of a Wikimedia project or article",
      "properties": {
        "identifier": {
          "type": "string",
          "description": "Wikimedia [language code](https://www.wikidata.org/wiki/Help:Wikimedia_language_codes/lists/all) of the language"
        },
        "name": {
          "type": "string",
          "description": "Full name of the language"
        },
        "alternate_name": {
          "type": "string",
          "description": "Alternate name of the language"
        },
        "direction": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "ltr",
            "rtl",
            null
          ],
          "description": "Direction the language is written in, `ltr` (left-to-right) or `rtl` (right-to-left)"
        }
      }
    },
    "license": {
      "type": "object",
      "description": "License that applies to the article content",
      "properties": {
        "identifier": {
          "type": "string",
          "description": "Unique identifier of the license"
        },
        "name": {
          "type": "string",
          "description": "Name of the license"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the license description"
        }
      }
    },
    "maintenance_tags": {
      "description": "Counts of maintenance templates in the article's wikitext. Editors add these templates to flag content needing attention",
      "properties": {
        "citation_needed_count": {
          "type": "integer",
          "description": "Number of Citation needed templates in the wikitext"
        },
        "pov_count": {
          "type": "integer",
          "description": "Number of point-of-view (POV) templates in the wikitext"
        },
        "clarification_needed_count": {
          "type": "integer",
          "description": "Number of Clarify templates in the wikitext"
        },
        "update_count": {
          "type": "integer",
          "description": "Number of Update templates in the wikitext"
        }
      },
      "type": "object"
    },
    "previous_version": {
      "type": "object",
      "description": "Metadata related to the before last revision of the article",
      "required": [
        "identifier"
      ],
      "properties": {
        "identifier": {
          "type": "integer",
          "description": "Identifier of the previous revision"
        },
        "number_of_characters": {
          "type": "integer",
          "description": "Number of characters in the previous revision, calculated from wikitext"
        }
      }
    },
    "project": {
      "type": "object",
      "description": "Wikimedia project a resource belongs to",
      "properties": {
        "identifier": {
          "type": "string",
          "description": "Unique identifier of the project, combining language and project code, e.g. `enwiki` for English Wikipedia"
        },
        "code": {
          "type": "string",
          "description": "Code of the project type, e.g. `wiki` for Wikipedia projects"
        },
        "name": {
          "type": "string",
          "description": "Name of the project"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the project"
        },
        "in_language": {
          "$ref": "#/$defs/language",
          "description": "Primary language of the project"
        }
      }
    },
    "protection": {
      "type": "object",
      "description": "Protection restricting who can perform an action on the article",
      "properties": {
        "expiry": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "infinite",
                "indefinite",
                "infinity",
                "never"
              ]
            },
            {
              "type": "string",
              "format": "date-time"
            }
          ],
          "description": "When the protection expires. One of the sentinel values `infinite`, `indefinite`, `infinity`, or `never` for protections that do not expire, otherwise a timestamp"
        },
        "level": {
          "type": "string",
          "description": "Editor status required to perform the action, such as `autoconfirmed` or `sysop`. The set of levels is project-specific"
        },
        "type": {
          "type": "string",
          "description": "Action the protection applies to, such as `edit` or `move`. The [siteinfo restrictions API](https://www.mediawiki.org/wiki/API:Siteinfo#Restrictions) lists each project's protection types and levels"
        }
      }
    },
    "redirect": {
      "description": "Article that redirects to this article",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the redirecting article, often an alternate spelling or a related title consolidated into this article"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the redirecting article"
        }
      },
      "type": "object"
    },
    "referenceneed": {
      "description": "Assessment of how much of the revision needs citations",
      "properties": {
        "reference_need_score": {
          "type": "number",
          "description": "Proportion of uncited sentences that need a citation, between 0 and 1. Available for Wikipedia articles (namespace 0) in `fa`, `it`, `zh`, `ru`, `pt`, `es`, `ja`, `de`, `fr`, and `en`. Omitted when `0.0`"
        }
      },
      "type": "object"
    },
    "referencerisk": {
      "description": "Assessment of the reliability of the revision's references",
      "properties": {
        "reference_risk_score": {
          "type": "number",
          "description": "Probability of a reference remaining in the article, derived from historical editorial activity on the web domains used as references. Serves as a proxy for source reliability. Omitted when `0.0`"
        }
      },
      "type": "object"
    },
    "revertrisk": {
      "description": "Prediction of whether the revision may be reverted",
      "properties": {
        "prediction": {
          "type": "boolean",
          "description": "Whether the model predicts the revision will be reverted. Omitted when `false`"
        },
        "probability": {
          "description": "Model probabilities behind the prediction",
          "properties": {
            "false": {
              "type": "number",
              "description": "Probability that the revision will not be reverted, between 0 and 1. Omitted when `0.0`"
            },
            "true": {
              "type": "number",
              "description": "Probability that the revision will be reverted, between 0 and 1. Omitted when `0.0`"
            }
          },
          "type": "object"
        }
      },
      "type": "object"
    },
    "scores": {
      "description": "Machine learning scores for the revision, produced by Wikimedia's LiftWing models",
      "properties": {
        "revertrisk": {
          "$ref": "#/$defs/revertrisk"
        },
        "referencerisk": {
          "$ref": "#/$defs/referencerisk"
        },
        "referenceneed": {
          "$ref": "#/$defs/referenceneed"
        }
      },
      "type": "object"
    },
    "size": {
      "type": "object",
      "description": "Size of a resource, in the unit given by `unit_text`.",
      "properties": {
        "unit_text": {
          "type": "string",
          "description": "`MB` on snapshots, chunks and batches: decimal megabytes, bytes divided by 1,000,000, to three decimals. `B` on article versions: bytes of wikitext."
        },
        "value": {
          "type": "number",
          "description": "Size in the unit given by `unit_text`. For the exact byte count of a download, use the `Content-Length` header from a HEAD request on its download endpoint."
        }
      }
    },
    "template": {
      "description": "Wikitext template used on the article, useful when parsing the wikitext directly",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the template"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the template page"
        }
      },
      "type": "object"
    },
    "thumbnail": {
      "type": "object",
      "description": "Thumbnail rendition of an image",
      "properties": {
        "contentUrl": {
          "type": "string",
          "format": "uri",
          "description": "Thumbnail URL"
        },
        "width": {
          "description": "Thumbnail width in pixels",
          "type": "integer"
        },
        "height": {
          "description": "Thumbnail height in pixels",
          "type": "integer"
        }
      }
    },
    "version": {
      "description": "Metadata about the latest revision of the article",
      "properties": {
        "comment": {
          "type": "string",
          "description": "Comment the editor left describing why they made the revision"
        },
        "editor": {
          "$ref": "#/$defs/editor"
        },
        "identifier": {
          "type": "integer",
          "description": "Unique identifier of the revision, distinct from the article identifier"
        },
        "is_flagged_stable": {
          "type": "boolean",
          "description": "Whether the revision was marked stable by the project community. Community approval processes vary per project; `true` typically indicates a reviewed revision"
        },
        "is_minor_edit": {
          "type": "boolean",
          "description": "Whether the editor marked the revision as minor. Minor revisions are typically small corrections such as grammar fixes; the flag is set by the editor and can lack consistency"
        },
        "is_breaking_news": {
          "type": "boolean",
          "description": "Whether the revision is considered breaking news"
        },
        "noindex": {
          "type": "boolean",
          "description": "Whether the revision is excluded from search engine indexing. Omitted when `false`"
        },
        "scores": {
          "$ref": "#/$defs/scores"
        },
        "maintenance_tags": {
          "$ref": "#/$defs/maintenance_tags"
        },
        "size": {
          "$ref": "#/$defs/size",
          "description": "Size of the revision's wikitext in bytes (`unit_text` is `B`), computed from `article_body.wikitext`."
        },
        "number_of_characters": {
          "type": "integer",
          "description": "Number of characters calculated from wikitext"
        },
        "tags": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "[Tags](https://www.mediawiki.org/wiki/Manual:Tags) attached to the revision, marking campaigns, project-run initiatives, tracked edit types, or other Wikimedia events"
        }
      },
      "type": "object"
    },
    "visibility": {
      "type": "object",
      "description": "Whether parts of this revision are visible. When the editing community flags a revision as containing potentially damaging content, it hides the affected part; `false` indicates the hidden part. Present only on `visibility-change` events in the Realtime API",
      "properties": {
        "comment": {
          "type": "boolean",
          "description": "Whether the edit comment of the revision is visible"
        },
        "text": {
          "type": "boolean",
          "description": "Whether the text of the revision is visible"
        },
        "editor": {
          "type": "boolean",
          "description": "Whether the editor name of the revision is visible"
        }
      }
    }
  }
}