API:Options
MediaWiki Action API |
---|
Basics |
Authentication |
Accounts and Users |
Page Operations |
|
Search |
Developer Utilities |
Tutorials |
v · d · e |
POST request to change preferences of the current user.
API documentation
[edit ]action=options
- This module requires read rights.
- This module requires write rights.
- This module only accepts POST requests.
- Source: MediaWiki
- License: GPL-2.0-or-later
Change preferences of the current user.
Only options which are registered in core or in one of installed extensions, or options with keys prefixed with userjs-
(intended to be used by user scripts), can be set.
- reset
Resets preferences to the site defaults.
- Type: boolean (details)
- resetkinds
List of types of options to reset when the reset option is set.
- Values (separate with | or alternative): all, registered, registered-checkmatrix, registered-multiselect, special, unused, userjs
- Default: all
- change
List of changes, formatted name=value (e.g. skin=vector). If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value. If any value passed contains the pipe character (|), use the alternative multiple-value separator for correct operation.
- Separate values with | or alternative.
- Maximum number of values is 50 (500 for clients that are allowed higher limits).
- optionname
The name of the option that should be set to the value given by optionvalue.
- optionvalue
The value for the option specified by optionname. When optionname is set but optionvalue is omitted, the option will be reset to its default value.
- global
What to do if the option was set globally using the GlobalPreferences extension.
- ignore: Do nothing. The option remains with its previous value.
- override: Add a local override.
- update: Update the option globally.
- One of the following values: ignore, override, update
- Default: ignore
- token
A "csrf" token retrieved from action=query&meta=tokens
- This parameter is required.
- Reset all preferences.
- api.php?action=options&reset=&token=123ABC [open in sandbox]
- Change skin and hideminor preferences.
- api.php?action=options&change=skin=vector|hideminor=1&token=123ABC [open in sandbox]
- Reset all preferences, then set skin and nickname.
- api.php?action=options&reset=&change=skin=monobook&optionname=nickname&optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC [open in sandbox]
Example
[edit ]Making any POST request is a multi-step process:
- Log in, via one of the methods described on API:Login .
- Get an Edit token .
- Send a POST request, with the CSRF token, to take action on a page.
The sample code below covers the final step in detail.
POST request
[edit ]Result |
---|
<?xml version="1.0" encoding="utf-8"?> <apioptions="success"/> |
Response
[edit ]{ "options":"success" }
Sample code
[edit ]Python
[edit ]#!/usr/bin/python3 """ change_user_options.py MediaWiki API Demos Demo of `Options` module: POST request to change three options for current user MIT license """ import requests S = requests.Session() URL = "https://test.wikipedia.org/w/api.php" # Step 1: GET request to fetch login token PARAMS_0 = { "action": "query", "meta": "tokens", "type": "login", "format": "json" } R = S.get(url=URL, params=PARAMS_0) DATA = R.json() LOGIN_TOKEN = DATA['query']['tokens']['logintoken'] # Step 2: POST request to log in. Use of main account for login is not # supported. Obtain credentials via Special:BotPasswords # (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword PARAMS_1 = { "action": "login", "lgname": "bot_user_name", "lgpassword": "bot_password", "lgtoken": LOGIN_TOKEN, "format": "json" } R = S.post(URL, data=PARAMS_1) # Step 3: GET request to fetch CSRF token PARAMS_2 = { "action": "query", "meta": "tokens", "format": "json" } R = S.get(url=URL, params=PARAMS_2) DATA = R.json() CSRF_TOKEN = DATA['query']['tokens']['csrftoken'] # Step 4: POST request to change user options # You can check out the large list of options you can change # at https://www.mediawiki.org/wiki/API:Options PARAMS_3 = { "action": "options", "format": "json", "token": CSRF_TOKEN, "change": "language=en|skin=vector", "optionname": "nickname", "optionvalue": "custom-signa|ture" } R = S.post(URL, data=PARAMS_3) DATA = R.json() print(DATA)
PHP
[edit ]<?php /* change_user_options.php MediaWiki API Demos Demo of `Options` module: POST request to change three options for current user MIT license */ $endPoint = "https://test.wikipedia.org/w/api.php"; $login_Token = getLoginToken(); // Step 1 loginRequest( $login_Token ); // Step 2 $csrf_Token = getCSRFToken(); // Step 3 change_options( $csrf_Token ); // Step 4 // Step 1: GET request to fetch login token function getLoginToken() { global $endPoint; $params1 = [ "action" => "query", "meta" => "tokens", "type" => "login", "format" => "json" ]; $url = $endPoint . "?" . http_build_query( $params1 ); $ch = curl_init( $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); $result = json_decode( $output, true ); return $result["query"]["tokens"]["logintoken"]; } // Step 2: POST request to log in. Use of main account for login is not // supported. Obtain credentials via Special:BotPasswords // (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword function loginRequest( $logintoken ) { global $endPoint; $params2 = [ "action" => "login", "lgname" => "bot_user_name", "lgpassword" => "bot_password", "lgtoken" => $logintoken, "format" => "json" ]; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $endPoint ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params2 ) ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); } // Step 3: GET request to fetch CSRF token function getCSRFToken() { global $endPoint; $params3 = [ "action" => "query", "meta" => "tokens", "format" => "json" ]; $url = $endPoint . "?" . http_build_query( $params3 ); $ch = curl_init( $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); $result = json_decode( $output, true ); return $result["query"]["tokens"]["csrftoken"]; } // Step 4: POST request to edit a page function change_options( $csrftoken ) { global $endPoint; $params4 = [ "action" => "options", "change" => "language=en|skin=timeless", "optionname" => "nickname", "optionvalue" => "custom-signa|ture", "token" => $csrftoken, "format" => "json" ]; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $endPoint ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params4 ) ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); echo ( $output ); }
JavaScript
[edit ]/* change_user_options.js MediaWiki API Demos Demo of `Options` module: POST request to change two options for current user MIT license */ varrequest=require('request').defaults({jar:true}), url="https://test.wikipedia.org/w/api.php"; // Step 1: GET request to fetch login token functiongetLoginToken(){ varparams_0={ action:"query", meta:"tokens", type:"login", format:"json" }; request.get({url:url,qs:params_0},function(error,res,body){ if(error){ return; } vardata=JSON.parse(body); loginRequest(data.query.tokens.logintoken); }); } // Step 2: POST request to log in. // Use of main account for login is not // supported. Obtain credentials via Special:BotPasswords // (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword functionloginRequest(login_token){ varparams_1={ action:"login", lgname:"bot_username", lgpassword:"bot_password", lgtoken:login_token, format:"json" }; request.post({url:url,form:params_1},function(error,res,body){ if(error){ return; } getCsrfToken(); }); } // Step 3: GET request to fetch CSRF token functiongetCsrfToken(){ varparams_2={ action:"query", meta:"tokens", format:"json" }; request.get({url:url,qs:params_2},function(error,res,body){ if(error){ return; } vardata=JSON.parse(body); change_options(data.query.tokens.csrftoken); }); } // Step 4: POST request to change the user options functionchange_options(csrf_token){ varparams_3={ action:"options", change:"language=en|skin=timeless", token:csrf_token, format:"json" }; request.post({url:url,form:params_3},function(error,res,body){ if(error){ return; } console.log(body); }); } // Start From Step 1 getLoginToken();
MediaWiki JS
[edit ]/* change_user_options.js MediaWiki API Demos Demo of `Options` module: POST request to change three options for current user MIT License */ varparams={ action:'options', change:'language=en|skin=monobook', optionname:'nickname', optionvalue:'custom-signa|ture', format:'json' }, api=newmw.Api(); api.postWithToken('csrf',params).done(function(data){ console.log(data); });
Available options
[edit ]/w/api.php?action=query&format=json&meta=userinfo&uiprop=options
for a English Wikipedia, MediaWiki 1.40.0-wmf.14 (c526317) (December 2022) account. Most of the options listed here are defined by various MediaWiki extensions, like Echo , VisualEditor , WikiLove , or Gadgets or GrowthExperiments , among others.enotifusertalkpages
: 0
vector-limited-width
: 1vector-page-tools-pinned
: 1flaggedrevssimpleui
: 1flaggedrevsstable
: 0flaggedrevseditdiffs
: Trueflaggedrevsviewdiffs
: Falseflaggedrevswatch
: Falseglobaluserpage
: Truercenhancedfilters-seen-highlight-button-counter
: 0advancedsearch-disable
: Falseusebetatoolbar
: 1wikieditor-realtimepreview
: 0usecodemirror
: 0betafeatures-auto-enroll
: Falsepopupsreferencepreviews
: 0popups-reference-previews
: 0visualeditor-autodisable
: 0visualeditor-betatempdisable
: 0visualeditor-editor
: wikitextvisualeditor-enable
: 1visualeditor-enable-experimental
: 0visualeditor-enable-language
: 0visualeditor-hidebetawelcome
: 0visualeditor-hidetabdialog
: 0visualeditor-newwikitext
: 0visualeditor-tabs
: remember-lastvisualeditor-visualdiffpage
: 0mobile-editor
:math
: mathmlecho-subscriptions-web-page-review
: Trueecho-subscriptions-email-page-review
: Falseecho-subscriptions-web-login-fail
: Trueecho-subscriptions-email-login-fail
: Trueecho-subscriptions-web-login-success
: Falseecho-subscriptions-email-login-success
: Trueecho-email-frequency
: 0echo-dont-email-read-notifications
: Falseecho-subscriptions-web-edit-thank
: Trueecho-subscriptions-email-edit-thank
: Falsediscussiontools-betaenable
: 0discussiontools-editmode
:discussiontools-newtopictool
: 1discussiontools-newtopictool-createpage
: 1discussiontools-replytool
: 1discussiontools-sourcemodetoolbar
: 1discussiontools-topicsubscription
: 1discussiontools-autotopicsub
: 0discussiontools-visualenhancements
: 1usecodeeditor
: 1revisionslider-disable
: Falsetwocolconflict-enabled
: 1eventlogging-display-web
: 0eventlogging-display-console
: 0uls-preferences
:compact-language-links
: 1echo-subscriptions-web-cx
: Truecx
: Falsecx-enable-entrypoints
: Truecx-entrypoint-fd-status
: notshowncx_campaign_newarticle_shown
: Falsercshowwikidata
: 0wlshowwikibase
: 0echo-subscriptions-web-oauth-owner
: Trueecho-subscriptions-email-oauth-owner
: Trueecho-subscriptions-web-oauth-admin
: Trueecho-subscriptions-email-oauth-admin
: Trueores-damaging-flag-rc
: FalseoresDamagingPref
: softrcOresDamagingPref
: softoresHighlight
: FalseoresRCHideNonDamaging
: FalseoresWatchlistHideNonDamaging
: Falseipinfo-use-agreement
: 0twl-notified
: Noneccmeonemails
: 0date
: defaultdiffonly
: 0disablemail
: 0editfont
: monospaceeditondblclick
: 0editsectiononrightclick
: 0email-allow-new-users
: 1enotifminoredits
: Falseenotifrevealaddr
: 0enotifwatchlistpages
: 0extendwatchlist
: 0fancysig
: 0forceeditsummary
: 0gender
: unknownhideminor
: 0hidepatrolled
: 0hidecategorization
: 1imagesize
: 2minordefault
: 0newpageshidepatrolled
: 0nickname
:pst-cssjs
: 1norollbackdiff
: 0previewonfirst
: 0previewontop
: 1rcdays
: 7rcenhancedfilters-disable
: 0rclimit
: 50search-match-redirect
: Truesearch-special-page
: Searchsearchlimit
: 20search-thumbnail-extra-namespaces
: Trueshowhiddencats
: Falseshownumberswatching
: 1showrollbackconfirmation
: 0skin
: vectorthumbsize
: 4underline
: 2uselivepreview
: 0usenewrc
: 0watchcreations
: Truewatchdefault
: 0watchdeletion
: 0watchuploads
: 1watchlistdays
: 3watchlisthideanons
: 0watchlisthidebots
: 0watchlisthideliu
: 0watchlisthideminor
: 0watchlisthideown
: 0watchlisthidepatrolled
: 0watchlisthidecategorization
: 1watchlistreloadautomatically
: 0watchlistunwatchlinks
: 0watchmoves
: 0watchrollback
: 0wlenhancedfilters-disable
: 0wllimit
: 250useeditwarning
: 1prefershttps
: 1requireemail
: 0skin-responsive
: 1wikilove-enabled
: 1echo-cross-wiki-notifications
: 1growthexperiments-addimage-desktop
: 1timecorrection
: System|0centralnotice-display-campaign-type-advocacy
: 1centralnotice-display-campaign-type-article-writing
: 1centralnotice-display-campaign-type-photography
: 1centralnotice-display-campaign-type-event
: 1centralnotice-display-campaign-type-fundraising
: 1centralnotice-display-campaign-type-governance
: 1centralnotice-display-campaign-type-maintenance
: 1centralnotice-display-campaign-type-special
: 1language
: envariant
: envariant-ban
: banvariant-en
: envariant-crh
: crhvariant-gan
: ganvariant-iu
: iuvariant-kk
: kkvariant-ku
: kuvariant-sh
: sh-latnvariant-shi
: shivariant-sr
: srvariant-tg
: tgvariant-tly
: tlyvariant-uz
: uzvariant-zh
: zhsearchNs0
: 1searchNs1
: 0searchNs2
: 0searchNs3
: 0searchNs4
: 0searchNs5
: 0searchNs6
: 0searchNs7
: 0searchNs8
: 0searchNs9
: 0searchNs10
: 0searchNs11
: 0searchNs12
: 0searchNs13
: 0searchNs14
: 0searchNs15
: 0searchNs100
: 0searchNs101
: 0searchNs118
: 0searchNs119
: 0searchNs710
: 0searchNs711
: 0searchNs828
: 0searchNs829
: 0searchNs2300
: 0searchNs2301
: 0searchNs2302
: 0searchNs2303
: 0multimediaviewer-enable
: 1mf_amc_optin
: 0gadget-modrollback
: 0gadget-confirmationRollback-mobile
: 1gadget-removeAccessKeys
: 0gadget-searchFocus
: 0gadget-GoogleTrans
: 0gadget-ImageAnnotator
: 0gadget-imagelinks
: 0gadget-Navigation_popups
: 0gadget-exlinks
: 0gadget-search-new-tab
: 0gadget-PrintOptions
: 0gadget-revisionjumper
: 0gadget-Twinkle
: 0gadget-HideCentralNotice
: 0gadget-ReferenceTooltips
: 1gadget-formWizard
: 1gadget-Prosesize
: 0gadget-find-archived-section
: 0gadget-geonotice
: 1gadget-watchlist-notice
: 1gadget-WatchlistBase
: 1gadget-WatchlistGreenIndicators
: 1gadget-WatchlistGreenIndicatorsMono
: 1gadget-WatchlistChangesBold
: 0gadget-SubtleUpdatemarker
: 1gadget-defaultsummaries
: 0gadget-citations
: 0gadget-DotsSyntaxHighlighter
: 0gadget-HotCat
: 0gadget-wikEdDiff
: 0gadget-ProveIt
: 0gadget-ProveIt-classic
: 0gadget-Shortdesc-helper
: 0gadget-wikEd
: 0gadget-afchelper
: 0gadget-charinsert
: 1gadget-legacyToolbar
: 0gadget-extra-toolbar-buttons
: 1gadget-refToolbar
: 1gadget-EditNoticesOnMobile
: 1gadget-edittop
: 0gadget-UTCLiveClock
: 0gadget-purgetab
: 0gadget-ExternalSearch
: 0gadget-CollapsibleNav
: 0gadget-MenuTabsToggle
: 0gadget-dropdown-menus
: 0gadget-CategoryAboveAll
: 0gadget-addsection-plus
: 0gadget-CommentsInLocalTime
: 0gadget-OldDiff
: 0gadget-NoAnimations
: 0gadget-disablesuggestions
: 0gadget-NoSmallFonts
: 0gadget-topalert
: 0gadget-metadata
: 0gadget-JustifyParagraphs
: 0gadget-righteditlinks
: 0gadget-PrettyLog
: 0gadget-switcher
: 1gadget-SidebarTranslate
: 0gadget-Blackskin
: 0gadget-dark-mode-toggle
: 0gadget-VectorClassic
: 0gadget-widensearch
: 0gadget-DisambiguationLinks
: 0gadget-markblocked
: 0gadget-responsiveContent
: 0gadget-responsiveContentTimeless
: 1gadget-HideInterwikiSearchResults
: 0gadget-XTools-ArticleInfo
: 0gadget-ShowMessageNames
: 0gadget-DebugMode
: 0gadget-contribsrange
: 0gadget-BugStatusUpdate
: 0gadget-RTRC
: 0gadget-script-installer
: 0gadget-XFDcloser
: 0gadget-mobile-sidebar
: 0gadget-addMe
: 0gadget-NewImageThumb
: 0gadget-StickyTableHeaders
: 0gadget-MobileMaps
: 0gadget-ShowJavascriptErrors
: 0gadget-PageDescriptions
: 0gadget-autonum
: 0gadget-wide-vector-2022
: 0gadget-dark-mode
: 0cirrussearch-pref-completion-profile
: fuzzypopups
: 0echo-email-format
: htmlecho-subscriptions-email-system
: Trueecho-subscriptions-web-system
: Trueecho-subscriptions-push-system
: Trueecho-subscriptions-email-system-noemail
: Falseecho-subscriptions-web-system-noemail
: Trueecho-subscriptions-push-system-noemail
: Trueecho-subscriptions-email-system-emailonly
: Falseecho-subscriptions-web-system-emailonly
: Trueecho-subscriptions-push-system-emailonly
: Trueecho-subscriptions-email-user-rights
: Trueecho-subscriptions-web-user-rights
: Trueecho-subscriptions-push-user-rights
: Trueecho-subscriptions-email-other
: Falseecho-subscriptions-web-other
: Trueecho-subscriptions-push-other
: Trueecho-subscriptions-email-edit-user-talk
: 0echo-subscriptions-web-edit-user-talk
: Trueecho-subscriptions-push-edit-user-talk
: Trueecho-subscriptions-email-reverted
: Falseecho-subscriptions-web-reverted
: Trueecho-subscriptions-push-reverted
: Trueecho-subscriptions-email-article-linked
: Falseecho-subscriptions-web-article-linked
: Falseecho-subscriptions-push-article-linked
: Falseecho-subscriptions-email-mention
: Falseecho-subscriptions-web-mention
: Trueecho-subscriptions-push-mention
: Trueecho-subscriptions-email-mention-failure
: Falseecho-subscriptions-web-mention-failure
: Falseecho-subscriptions-push-mention-failure
: Falseecho-subscriptions-email-mention-success
: Falseecho-subscriptions-web-mention-success
: Falseecho-subscriptions-push-mention-success
: Falseecho-subscriptions-email-emailuser
: Falseecho-subscriptions-web-emailuser
: Trueecho-subscriptions-push-emailuser
: Trueecho-subscriptions-email-thank-you-edit
: Falseecho-subscriptions-web-thank-you-edit
: Trueecho-subscriptions-push-thank-you-edit
: Trueecho-subscriptions-push-page-review
: Trueecho-subscriptions-push-login-fail
: Trueecho-subscriptions-push-login-success
: Trueecho-subscriptions-push-edit-thank
: Trueecho-subscriptions-email-dt-subscription
: Falseecho-subscriptions-web-dt-subscription
: Trueecho-subscriptions-push-dt-subscription
: Trueecho-subscriptions-email-dt-subscription-archiving
: Falseecho-subscriptions-web-dt-subscription-archiving
: Trueecho-subscriptions-push-dt-subscription-archiving
: Trueecho-subscriptions-email-cx
: Falseecho-subscriptions-push-cx
: Trueecho-subscriptions-email-ge-mentorship
: Falseecho-subscriptions-web-ge-mentorship
: Trueecho-subscriptions-push-ge-mentorship
: Trueecho-subscriptions-email-wikibase-action
: Falseecho-subscriptions-web-wikibase-action
: Trueecho-subscriptions-push-wikibase-action
: Truegrowthexperiments-help-panel-tog-help-panel
: Falsehomepage_mobile_discovery_notice_seen
: Truegrowthexperiments-homepage-suggestededits-guidance-blue-dot
: {"vector":{"link-recommendation":true,"image-recommendation":true},"minerva":{"link-recommendation":true,"image-recommendation":true}}growthexperiments-homepage-se-topic-filters-mode
: ORgrowthexperiments-homepage-enable
: Falsegrowthexperiments-homepage-pt-link
: Falsegrowthexperiments-tour-help-panel
: Truegrowthexperiments-tour-homepage-mentorship
: Truegrowthexperiments-tour-homepage-welcome
: Truegrowthexperiments-tour-homepage-discovery
: Truegrowthexperiments-tour-newimpact-discovery
: Falsegrowthexperiments-starred-mentees
:growthexperiments-mentor-dashboard-seen
: 0growthexperiments-mentor-dashboard-last-update
: Nonegrowthexperiments-mentee-overview-presets
: {"usersToShow":10,"filters":{"minedits":1,"maxedits":500}}growthexperiments-homepage-mentorship-enabled
: 1growthexperiments-mentorship-weight
: 2
Possible errors
[edit ]In addition to the usual stuff :
Code | Info |
---|---|
notloggedin | Anonymous users cannot change preferences |
nochanges | No changes were requested. |
Parameter history
[edit ]- 1.21: Introduced
resetkinds
Additional notes
[edit ]- This API is primarily intended for changing options which are registered by MediaWiki core or extensions and available on Special:Preferences.
- You can also use the API to set arbitrary user options that can be used by user scripts or external editors. These options must begin with the prefix
userjs-
. - There is currently no limit on the number of user options you can set at once. You can store data within a user option by encoding it as a
JSON
string. - Providing only names of options without equal sign results in resetting them (e.g.
hideminor|skin
). In the case of an arbitraryuserjs-
key/value pair, the resetting results in its deletion. - The
change
parameter cannot be used to set a value which contains a pipe character|
, as it is used by the API to separate options. If you need to set such a value (e.g., a user signature) use anoptionname
&optionvalue
pair. - The following limits apply to all user options:
- The byte length of the key must be <= 255.
- The byte length of the value must be <= 65535.
- The key must consist only of ASCII letters, numbers, hyphens and underscores (a-z, A-Z, 0-9, _, -).
See also
[edit ]- API:Userinfo - for reading existing options.