Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Wikimedia Enterprise Languages API
version: 2.0.0
description: 'The Wikimedia Enterprise API provides high-volume, read-only access to Wikipedia and other supported Wikimedia projects.
This single specification covers all Wikimedia Enterprise APIs:
- **Authentication** (`auth.enterprise.wikimedia.com`) - exchange credentials for JWT access and refresh tokens.
- **Metadata, Snapshot, and On-demand** (`api.enterprise.wikimedia.com`) - reference data, bulk downloads, and single-article lookups, plus Realtime (Batch) hourly files.
- **Realtime** (`realtime.enterprise.wikimedia.com`) - streaming article and Wikidata updates.
All data endpoints are read-only. Most accept either a `GET` request or a `POST` whose JSON body carries `fields`, `filters`, and `limit` to shape the response - the `POST` form never modifies data.
Authenticated endpoints expect a `Bearer` JWT access token in the `Authorization` header. Content is Wikimedia project text, licensed CC-BY-SA-4.0.'
license:
name: CC-BY-SA-4.0
url: https://creativecommons.org/licenses/by-sa/4.0/
contact:
name: Commercial Partnerships Division
url: https://enterprise.wikimedia.com/contact/
termsOfService: https://enterprise.wikimedia.com/terms/
servers:
- url: https://api.enterprise.wikimedia.com
description: Metadata, Snapshot, and On-demand APIs, plus Realtime (Batch) files
- url: https://auth.enterprise.wikimedia.com
description: Authentication API
- url: https://realtime.enterprise.wikimedia.com
description: Realtime streaming API
security:
- bearerAuth: []
tags:
- name: Languages
description: Language metadata.
paths:
/v2/languages:
summary: List all languages
servers:
- url: https://api.enterprise.wikimedia.com
description: Metadata, Snapshot, and On-demand APIs, plus Realtime (Batch) files
get:
summary: Languages Available
description: Lists of available languages. Includes language identifier, name, direction and other relevant metadata.
operationId: getLanguages
tags:
- Languages
parameters:
- in: query
name: fields
description: 'Select which fields to receive in your response, using JSON dot notation. Sent as one `fields` query parameter per field: `?fields=name&fields=identifier`. A comma-separated list in a single value is not supported.'
style: form
explode: true
schema:
type: array
items:
type: string
example: name
- in: query
name: filters
description: 'Select which projects and languages to receive in your response. Sent as one `filters` query parameter per filter, each a JSON object: `?filters={"field":"is_part_of.identifier","value":"enwiki"}&filters={"field":"namespace.identifier","value":0}`. Repeated filters combine as AND. A JSON array in a single value returns `422 Unprocessable Entity`.'
style: form
explode: true
schema:
type: array
items:
$ref: '#/components/schemas/filter'
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/language'
application/x-ndjson:
schema:
type: string
format: ndjson
example: '{"identifier": "string","name": "string","alternate_name": "string","direction": "string"}
{"identifier": "string","name": "string","alternate_name": "string","direction": "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}
'
post:
summary: Languages Available
description: Lists of available languages. Includes language identifier, name, direction and other relevant metadata.
operationId: queryLanguages
tags:
- Languages
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: identifier
value: en
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/language'
application/x-ndjson:
schema:
type: string
format: ndjson
example: '{"identifier": "string","name": "string","alternate_name": "string","direction": "string"}
{"identifier": "string","name": "string","alternate_name": "string","direction": "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}
'
/v2/languages/{identifier}:
summary: Receive info for one language
servers:
- url: https://api.enterprise.wikimedia.com
description: Metadata, Snapshot, and On-demand APIs, plus Realtime (Batch) files
get:
summary: Language Info
description: Information on specific language. Includes identifier, name, direction and other relevant metadata.
operationId: getLanguagesByIdentifier
tags:
- Languages
parameters:
- in: path
name: identifier
required: true
description: Identifier of the language.
schema:
type: string
minLength: 1
- in: query
name: fields
description: 'Select which fields to receive in your response, using JSON dot notation. Sent as one `fields` query parameter per field: `?fields=name&fields=identifier`. A comma-separated list in a single value is not supported.'
style: form
explode: true
schema:
type: array
items:
type: string
example: name
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/language'
application/x-ndjson:
schema:
type: string
format: ndjson
example: '{"identifier": "string","name": "string","alternate_name": "string","direction": "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}
'
post:
summary: Language Info
description: Information on specific language. Includes identifier, name, direction and other relevant metadata.
operationId: queryLanguagesByIdentifier
tags:
- Languages
parameters:
- in: path
name: identifier
required: true
description: Identifier of the language.
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/language'
application/x-ndjson:
schema:
type: string
format: ndjson
example: '{"identifier": "string","name": "string","alternate_name": "string","direction": "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}
'
components:
schemas:
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
example: en
name:
type: string
description: Full name of the language
example: English
alternate_name:
type: string
description: Alternate name of the language
example: English
direction:
type:
- string
- 'null'
enum:
- ltr
- rtl
- null
description: Direction the language is written in, `ltr` (left-to-right) or `rtl` (right-to-left)
example: ltr
error:
type: object
description: Error response returned when a request fails
properties:
message:
type: string
description: Human-readable description of the error
status:
type: integer
description: HTTP status code of the error
filter:
type: object
description: Filter condition applied to a POST request body, narrowing the response to records matching the value
properties:
field:
type: string
description: Field to filter on, in dot notation, e.g. `is_part_of.identifier`
example: is_part_of.identifier
value:
description: Value the field must equal. Use the field's own type - a number for numeric fields such as `namespace.identifier`, a string for text fields.
oneOf:
- type: string
- type: number
example: enwiki
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
externalDocs:
description: Wikimedia Enterprise API documentation
url: https://enterprise.wikimedia.com/docs/
x-tagGroups:
- name: Authentication
tags:
- authentication
- name: Metadata
tags:
- codes
- languages
- projects
- namespaces
- name: Snapshots
tags:
- snapshots
- structured-snapshots
- wikidata-snapshots
- name: On-demand
tags:
- articles
- structured-contents
- wikidata
- name: Realtime
tags:
- realtime-articles
- batches
- realtime-wikidata
- wikidata-batches