Realtime API Documentation
Receive real-time event updates from all supported Wikimedia projects using the streaming (firehose) endpoint, or via batch file endpoints that are generated hourly with changes throughout the day.
Streaming supports server-sent events (SSE) by default or NDJSON when you pass the Accept: application/x-ndjson header. Batch files return NDJSON in a tarball (.tar.gz).
Event types are: update, delete, visibility-change:
- An
updateevent type is sent when an article is created, its content is updated, or its name or namespace is changed. - A
deleteevent type is sent when an article has been deleted. - A
visibility-changeevent type is sent when the visibility of an article’s editor, comment, or content is changed by community volunteers
For access to Realtime endpoints, contact our sales team.
Blog: Realtime API Parallel Connections and Restart Support
Streaming Article Updates
Returns a stream of article updates, deletions, and visibility changes across all supported projects. The event type is found in the article.event.type field. Possible values are update, delete, and visibility-change.
since- string
- Optional
- A timestamp in RFC3339 format (e.g. '2006-01-02T15:04:05Z') that specifies the start time for the data you want to receive.
fields- array
- Optional
- A list of fields to receive in your response (e.g.
version.*will return all version object fields). filters- array
- Optional
- Specify how you want to filter your data.
parts- array
- Optional
- This parameter is used when opening parallel connections to the realtime API. Using parts, one can target subsets of partitions in each of the parallel connections. The max allowed number of parallel connections is 10, i.e., the parts can take 0 through 9. Each of these parts represent 1/10th of the subsequent partition. For instance, parts 0 correspond to partitions 0 through 4; parts 1 correspond to partitions 5 through 9 and so on.
offsets- object
- Optional
- Use the
offsetsparameter to resume from a specific point in a partition's event stream when reconnecting. This object should be a map of partition numbers to the specific offsets you want to resume from. This indicates the offset from which the Realtime API should start sending events for a specific partition. If theoffsetsmap includes a partition not represented in thepartsparameter, it will be ignored. If theoffsetsmap does not include a partition that is represented in thepartsparameter, events from that partition will be delivered in live mode (as they happen). since_per_partition- object
- Optional
- Use the
since_per_partitionparameter when reconnecting to the Realtime API. This object should be a map of partition numbers to timestamps (in RFC3339 format) you want to resume from. Find the timestamp for the most recently received event in theevent.date_publishedresponse field. This indicates the timestamp from which the Realtime API should start sending events for a specific partition. If thesince_per_partitionmap includes a partition not represented in thepartsparameter, it will be ignored. If thesince_per_partitionmap does not include a partition that is represented in thepartsparamter, events from that partition will be delivered in live mode (as they happen).
-
text/event-stream
{ "event": { "identifier": "f7c737db-4b50-4982-8804-7c2b9fa89020", "type": "update", "date_created": "2026-03-18T12:38:23.437225Z", "date_published": "2026-03-18T12:38:23.437225Z", "partition": 42, "offset": 3593806 }, "additional_entities": "array", "article_body": { "html": "string", "wikitext": "string" }, "categories": "array", "date_modified": "string", "identifier": "integer", "in_language": { "identifier": "en", "name": "English" }, "is_part_of": { "date_modified": "2018-02-03T02:52:06Z", "identifier": "enwiki", "in_language": { "identifier": "en", "name": "English" }, "name": "Wikipedia", "size": { "unit_text": "B", "value": 76760 }, "url": "https://en.wikipedia.org", "version": "string" }, "license": "array", "main_entity": { "aspects": "array", "identifier": "string", "url": "string" }, "name": "string", "abstract": "string", "namespace": { "identifier": 0 }, "protection": "array", "redirects": "array", "templates": "array", "url": "string", "version": { "comment": "string", "editor": { "date_started": "string", "edit_count": "integer", "groups": "array", "identifier": "integer", "is_anonymous": "boolean", "is_bot": "boolean", "name": "string" }, "identifier": "integer", "is_flagged_stable": "boolean", "is_minor_edit": "boolean", "is_breaking_news": "boolean", "noindex": "boolean", "scores": { "revertrisk": { "prediction": "boolean", "probability": "object" }, "referencerisk": { "reference_risk_score": "number" }, "referenceneed": { "reference_need_score": "number" } }, "maintenance_tags": { "citation_needed_count": "integer", "pov_count": "integer", "clarification_needed_count": "integer", "update_count": "integer" }, "tags": "array" }, "visibility": { "comment": true, "text": true, "user": false } } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
-
text/event-stream
{ "event": { "identifier": "f7c737db-4b50-4982-8804-7c2b9fa89020", "type": "update", "date_created": "2026-03-18T12:38:23.437225Z", "date_published": "2026-03-18T12:38:23.437225Z", "partition": 42, "offset": 3593806 }, "additional_entities": "array", "article_body": { "html": "string", "wikitext": "string" }, "categories": "array", "date_modified": "string", "identifier": "integer", "in_language": { "identifier": "en", "name": "English" }, "is_part_of": { "date_modified": "2018-02-03T02:52:06Z", "identifier": "enwiki", "in_language": { "identifier": "en", "name": "English" }, "name": "Wikipedia", "size": { "unit_text": "B", "value": 76760 }, "url": "https://en.wikipedia.org", "version": "string" }, "license": "array", "main_entity": { "aspects": "array", "identifier": "string", "url": "string" }, "name": "string", "abstract": "string", "namespace": { "identifier": 0 }, "protection": "array", "redirects": "array", "templates": "array", "url": "string", "version": { "comment": "string", "editor": { "date_started": "string", "edit_count": "integer", "groups": "array", "identifier": "integer", "is_anonymous": "boolean", "is_bot": "boolean", "name": "string" }, "identifier": "integer", "is_flagged_stable": "boolean", "is_minor_edit": "boolean", "is_breaking_news": "boolean", "noindex": "boolean", "scores": { "revertrisk": { "prediction": "boolean", "probability": "object" }, "referencerisk": { "reference_risk_score": "number" }, "referenceneed": { "reference_need_score": "number" } }, "maintenance_tags": { "citation_needed_count": "integer", "pov_count": "integer", "clarification_needed_count": "integer", "update_count": "integer" }, "tags": "array" }, "visibility": { "comment": true, "text": true, "user": false } } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
Streaming Wikidata Updates (Beta)
Returns a stream of Wikidata item updates, deletions, and visibility changes in real-time.
since- string
- Optional
- A timestamp in RFC3339 format (e.g. '2006-01-02T15:04:05Z') that specifies the start time for the data you want to receive.
fields- array
- Optional
- A list of fields to receive in your response (e.g.
version.*will return all version object fields). filters- array
- Optional
- Specify how you want to filter your data.
parts- array
- Optional
- This parameter is used when opening parallel connections to the realtime API. Using parts, one can target subsets of partitions in each of the parallel connections. The max allowed number of parallel connections is 10, i.e., the parts can take 0 through 9. Each of these parts represent 1/10th of the subsequent partition. For instance, parts 0 correspond to partitions 0 through 4; parts 1 correspond to partitions 5 through 9 and so on.
since_per_partition- object
- Optional
- Use the
since_per_partitionparameter when reconnecting to the Realtime API. This object should be a map of partition numbers to timestamps (in RFC3339 format) you want to resume from. Find the timestamp for the most recently received event in theevent.date_publishedresponse field. This indicates the timestamp from which the Realtime API should start sending events for a specific partition. If thesince_per_partitionmap includes a partition not represented in thepartsparameter, it will be ignored. If thesince_per_partitionmap does not include a partition that is represented in thepartsparamter, events from that partition will be delivered in live mode (as they happen).
-
text/event-stream
{ "name": "P31", "identifier": 104546757, "date_created": "2024-04-01T12:00:00Z", "date_modified": "2024-06-01T12:00:00Z", "date_previously_modified": "2024-05-01T12:00:00Z", "protection": { "expiry": "infinity", "level": "extendedconfirmed", "type": "edit" }, "url": "https://www.wikidata.org/wiki/Q109388644", "namespace": { "identifier": 0 }, "is_part_of": { "date_modified": "2018-02-03T02:52:06Z", "identifier": "enwiki", "in_language": { "identifier": "en", "name": "English" }, "name": "Wikipedia", "size": { "unit_text": "B", "value": 76760 }, "url": "https://en.wikipedia.org", "version": "string" }, "entity": { "identifier": "Q42", "type": "item", "labels": { "ce": "\u041e\u044c\u0437\u043b\u0435\u0440", "en": "\u00d6zler" }, "descriptions": { "en": "Championship held at Balbir Singh Juneja Indoor Stadium" }, "aliases": { "eo": [ "Douglas ADAMS", "Douglas Noel ADAMS" ] }, "statements": [ { "identifier": "Q56603478$B070CCDB-B608-492C-B15A-4ABC5CED7AF6", "rank": "normal", "property": { "identifier": "P31", "data_type": "external-id", "labels": { "en": "instance of", "de": "Instanz von", "fr": "instance de" } }, "value": { "content": "Adams, Douglas (1952-2001)", "type": "wikibase-item", "content_data": { "after": "0", "before": "0", "Calendarmodel": "http://www.wikidata.org/entity/Q1985727", "precision": "9", "Time": "+1861-00-00T00:00:00Z", "timezone": "0" }, "labels": { "ce": "\u041e\u044c\u0437\u043b\u0435\u0440", "en": "\u00d6zler" } }, "qualifiers": { "property": { "identifier": "P31", "data_type": "external-id", "labels": { "en": "instance of", "de": "Instanz von", "fr": "instance de" } }, "value": { "content": "Adams, Douglas (1952-2001)", "type": "wikibase-item", "content_data": { "after": "0", "before": "0", "Calendarmodel": "http://www.wikidata.org/entity/Q1985727", "precision": "9", "Time": "+1861-00-00T00:00:00Z", "timezone": "0" }, "labels": { "ce": "\u041e\u044c\u0437\u043b\u0435\u0440", "en": "\u00d6zler" } } }, "references": { "identifier": "63309730314f4c20bf6b1008fe8ffd2b155272b3", "parts": "array" } } ], "sitelinks": { "title": "Pentominium", "badges": [ "Q17437796", "Q6540326" ], "url": "https://de.wikipedia.org/wiki/Pentominium" } }, "visibility": { "comment": true, "text": true, "user": false }, "license": { "identifier": "CC-BY-SA-4.0", "name": "Creative Commons Attribution-ShareAlike License 4.0", "url": "https://creativecommons.org/licenses/by-sa/4.0/" }, "event": { "identifier": "f7c737db-4b50-4982-8804-7c2b9fa89020", "type": "update", "date_created": "2026-03-18T12:38:23.437225Z", "date_published": "2026-03-18T12:38:23.437225Z", "partition": 42, "offset": 3593806 } } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
-
text/event-stream
{ "name": "P31", "identifier": 104546757, "date_created": "2024-04-01T12:00:00Z", "date_modified": "2024-06-01T12:00:00Z", "date_previously_modified": "2024-05-01T12:00:00Z", "protection": { "expiry": "infinity", "level": "extendedconfirmed", "type": "edit" }, "url": "https://www.wikidata.org/wiki/Q109388644", "namespace": { "identifier": 0 }, "is_part_of": { "date_modified": "2018-02-03T02:52:06Z", "identifier": "enwiki", "in_language": { "identifier": "en", "name": "English" }, "name": "Wikipedia", "size": { "unit_text": "B", "value": 76760 }, "url": "https://en.wikipedia.org", "version": "string" }, "entity": { "identifier": "Q42", "type": "item", "labels": { "ce": "\u041e\u044c\u0437\u043b\u0435\u0440", "en": "\u00d6zler" }, "descriptions": { "en": "Championship held at Balbir Singh Juneja Indoor Stadium" }, "aliases": { "eo": [ "Douglas ADAMS", "Douglas Noel ADAMS" ] }, "statements": [ { "identifier": "Q56603478$B070CCDB-B608-492C-B15A-4ABC5CED7AF6", "rank": "normal", "property": { "identifier": "P31", "data_type": "external-id", "labels": { "en": "instance of", "de": "Instanz von", "fr": "instance de" } }, "value": { "content": "Adams, Douglas (1952-2001)", "type": "wikibase-item", "content_data": { "after": "0", "before": "0", "Calendarmodel": "http://www.wikidata.org/entity/Q1985727", "precision": "9", "Time": "+1861-00-00T00:00:00Z", "timezone": "0" }, "labels": { "ce": "\u041e\u044c\u0437\u043b\u0435\u0440", "en": "\u00d6zler" } }, "qualifiers": { "property": { "identifier": "P31", "data_type": "external-id", "labels": { "en": "instance of", "de": "Instanz von", "fr": "instance de" } }, "value": { "content": "Adams, Douglas (1952-2001)", "type": "wikibase-item", "content_data": { "after": "0", "before": "0", "Calendarmodel": "http://www.wikidata.org/entity/Q1985727", "precision": "9", "Time": "+1861-00-00T00:00:00Z", "timezone": "0" }, "labels": { "ce": "\u041e\u044c\u0437\u043b\u0435\u0440", "en": "\u00d6zler" } } }, "references": { "identifier": "63309730314f4c20bf6b1008fe8ffd2b155272b3", "parts": "array" } } ], "sitelinks": { "title": "Pentominium", "badges": [ "Q17437796", "Q6540326" ], "url": "https://de.wikipedia.org/wiki/Pentominium" } }, "visibility": { "comment": true, "text": true, "user": false }, "license": { "identifier": "CC-BY-SA-4.0", "name": "Creative Commons Attribution-ShareAlike License 4.0", "url": "https://creativecommons.org/licenses/by-sa/4.0/" }, "event": { "identifier": "f7c737db-4b50-4982-8804-7c2b9fa89020", "type": "update", "date_created": "2026-03-18T12:38:23.437225Z", "date_published": "2026-03-18T12:38:23.437225Z", "partition": 42, "offset": 3593806 } } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
Hourly Batch Files Available
Returns a list of available Realtime (Batch) bundles by date and hour (00, 01, …, 23). Includes identifiers, file sizes and other relevant metadata.
date- string
- Required
hour- string
- Required
fields- array
- Optional
- Select which fields to receive in your response, using JSON dot notation.
filters- array
- Optional
- Select which projects and languages to receive in your response.
-
application/json
[ { "identifier": "string", "name": "string", "version": "string", "in_language": { "identifier": "en", "name": "English", "alternate_name": "English", "direction": "ltr" }, "is_part_of": { "identifier": "enwiki", "code": "wiki", "name": "Wikipedia", "url": "https://en.wikipedia.org", "in_language": { "identifier": "en", "name": "English", "alternate_name": "English", "direction": "ltr" } }, "namespace": { "identifier": 0 }, "size": { "unit_text": "B", "value": 76760 } } ] -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
date- string
- Required
hour- string
- Required
fields- array
filters- array
application/json{ "fields": [ "name", "identifier" ], "filters": [ { "field": "namespace.identifier", "value": 0 } ] }
-
application/json
[ { "identifier": "string", "name": "string", "version": "string", "in_language": { "identifier": "en", "name": "English", "alternate_name": "English", "direction": "ltr" }, "is_part_of": { "identifier": "enwiki", "code": "wiki", "name": "Wikipedia", "url": "https://en.wikipedia.org", "in_language": { "identifier": "en", "name": "English", "alternate_name": "English", "direction": "ltr" } }, "namespace": { "identifier": 0 }, "size": { "unit_text": "B", "value": 76760 } } ] -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
Hourly Batch File Info
Information on specific hourly batch. Includes identifier, file size and other relevant metadata.
date- string
- Required
hour- string
- Required
identifier- string
- Required
- Batch identifier.
fields- array
- Optional
- Select which fields to receive in your response, using JSON dot notation.
-
application/json
{ "identifier": "string", "name": "string", "version": "string", "in_language": { "identifier": "en", "name": "English", "alternate_name": "English", "direction": "ltr" }, "is_part_of": { "identifier": "enwiki", "code": "wiki", "name": "Wikipedia", "url": "https://en.wikipedia.org", "in_language": { "identifier": "en", "name": "English", "alternate_name": "English", "direction": "ltr" } }, "namespace": { "identifier": 0 }, "size": { "unit_text": "B", "value": 76760 } } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
date- string
- Required
hour- string
- Required
identifier- string
- Required
- Batch identifier.
fields- array
application/json{ "fields": [ "name", "identifier" ] }
-
application/json
{ "identifier": "string", "name": "string", "version": "string", "in_language": { "identifier": "en", "name": "English", "alternate_name": "English", "direction": "ltr" }, "is_part_of": { "identifier": "enwiki", "code": "wiki", "name": "Wikipedia", "url": "https://en.wikipedia.org", "in_language": { "identifier": "en", "name": "English", "alternate_name": "English", "direction": "ltr" } }, "namespace": { "identifier": 0 }, "size": { "unit_text": "B", "value": 76760 } } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
Hourly Batch File Download
Downloadable bundle of updated articles by project, namespace, date, and hour. Generated hourly starting at 00:00 UTC each day.
date- string
- Required
hour- string
- Required
identifier- string
- Required
- Batch identifier.
Range- string
- Optional
- The Range HTTP request header indicates the part of a document that the server should return.
-
application/gzip
{} -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
Set of headers that describe the hourly download.
date- string
- Required
hour- string
- Required
identifier- string
- Required
- Batch identifier.
-
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" } -
application/json
{ "message": "string", "status": "integer" }
