API:Tag

POST request to add or remove tags from individual revisions or log entries.

MediaWiki version:
1.25

API documentation

action=tag

(main | tag)
  • This module requires read rights.
  • This module requires write rights.
  • This module only accepts POST requests.
  • Source: MediaWiki
  • License: GPL-2.0-or-later

Add or remove change tags from individual revisions or log entries.

Specific parameters:
Other general parameters are available.
rcid

One or more recent changes IDs from which to add or remove the tag.

Type: list of integers
Separate values with | or alternative.
Maximum number of values is 50 (500 for clients that are allowed higher limits).
revid

One or more revision IDs from which to add or remove the tag.

Type: list of integers
Separate values with | or alternative.
Maximum number of values is 50 (500 for clients that are allowed higher limits).
logid

One or more log entry IDs from which to add or remove the tag.

Type: list of integers
Separate values with | or alternative.
Maximum number of values is 50 (500 for clients that are allowed higher limits).
add

Tags to add. Only manually defined tags can be added.

Values (separate with | or alternative): AWB, convenient-discussions
remove

Tags to remove. Only tags that are either manually defined or completely undefined can be removed.

Separate values with | or alternative.
Maximum number of values is 50 (500 for clients that are allowed higher limits).
reason

Reason for the change.

Default: (empty)
tags

Tags to apply to the log entry that will be created as a result of this action.

Values (separate with | or alternative): AWB, convenient-discussions
token

A "csrf" token retrieved from action=query&meta=tokens

This parameter is required.
Examples:
Add the vandalism tag to revision ID 123 without specifying a reason
api.php?action=tag&revid=123&add=vandalism&token=123ABC [open in sandbox]
Remove the spam tag from log entry ID 123 with the reason Wrongly applied
api.php?action=tag&logid=123&remove=spam&reason=Wrongly+applied&token=123ABC [open in sandbox]


Example

Making any POST request is a multi-step process:

  1. Log in, via one of the methods described on API:Login .
  2. GET an edit/CSRF token as shown here API:Tokens
  3. Send a POST request, with the CSRF token, to add or remove tags from individual revisions or log entries.

The sample codes below cover these steps.

POST request

Remove the spam tag from log entry ID 123 with the reason Wrongly applied.

Response

{
    "tag": [
        {
            "logid": 123,
            "status": "success",
            "noop": ""
        }
    ]
}

Sample code

Python

#!/usr/bin/python3

"""
    tag.py

    MediaWiki API Demos
    Demo of `Tag` module: Remove the spam tag from log entry ID 123 with the reason Wrongly 
    applied

    MIT license
"""
import requests

S = requests.Session()

URL = "https://test.wikipedia.org/w/api.php"

# Step 1: Retrieve a login token
PARAMS_1 = {
    "action": "query",
    "meta": "tokens",
    "type": "login",
    "format": "json"
}

R = S.get(url=URL, params=PARAMS_1)
DATA = R.json()

LOGIN_TOKEN = DATA['query']['tokens']['logintoken']

# Step 2: Send a POST request to log in. For this login
# method, obtain credentials by first visiting
# https://www.test.wikipedia.org/wiki/Manual:Bot_passwords
# See https://www.mediawiki.org/wiki/API:Login for more
# information on log in methods.
PARAMS_2 = {
    "action": "login",
    "lgname": "user_name",
    "lgpassword": "password",
    "format": "json",
    "lgtoken": LOGIN_TOKEN
}

R = S.post(URL, data=PARAMS_2)
DATA = R.json()

# Step 3: While logged in, retrieve a CSRF token
PARAMS_3 = {
    "action": "query",
    "meta": "tokens",
    "format": "json"
}

R = S.get(url=URL, params=PARAMS_3)
DATA = R.json()

CSRF_TOKEN = DATA["query"]["tokens"]["csrftoken"]

# Step 4: Send a POST request to remove the spam tag from log entry ID 123
# with the reason Wrongly applied

PARAMS_4 = {
    "token":CSRF_TOKEN,
    "action":"tag",
    "format":"json",
    "logid":"123",
    "remove":"spam",
    "reason":"Wrongly applied"
    }

R = S.post(URL, data=PARAMS_4)
DATA = R.text

print(DATA)

PHP

<?php

/*
    tag.php

    MediaWiki API Demos
    Demo of `Tag` module: Remove the spam tag from log entry ID 123 with the reason Wrongly 
    applied

    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
stashEdit( $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: Send a POST request  to remove the spam tag from log entry ID 123 
// with the reason Wrongly applied
function stashEdit( $csrftoken ) {
	global $endPoint;
	
	$params4 = [
		"action" => "tag",
		"format" => "json",
                "token" => $csrftoken,
                "logid" => "123",
                "remove" => "spam",
                "reason" => "Wrongly applied"

	];
  
	$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" );

	$response = curl_exec($ch);
	curl_close($ch);

	echo ($response);
}

JavaScript

/*
    tag.js

    MediaWiki API Demos
    Demo of `Tag` module: Remove the spam tag from log entry ID 123 with the reason Wrongly 
    applied

    MIT license
*/
var request = require("request").defaults({jar: true}),
url = "https://test.wikipedia.org/w/api.php";

// Step 1: GET Request to fetch login token
function getLoginToken() {
    var params_0 = {
        action: "query",
        meta: "tokens",
        type: "login",
        format: "json"
    };
    request.get({ url: url, qs: params_0 }, function (error, res, body) {
        if (error) {
            return;
        }
        var data = 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
function loginRequest(login_token) {
    var params_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
function getCsrfToken() {
    var params_2 = {
        action: "query",
        meta: "tokens",
        format: "json"
    };
    request.get({ url: url, qs: params_2 }, function(error, res, body) {
        if (error) {
            return;
        }
        var data = JSON.parse(body);
        stashEdit(data.query.tokens.csrftoken);
    });
}

// Step 4: remove the spam tag from log entry ID 123 with the reason Wrongly applied
function stashEdit(csrf_token) {
    var params_3 = {
        action: "compare",
        format: "json",
        token: csrf_token,
        logid: "123",
        remove: "spam",
        reason: "Wrongly applied"
    };
    request.post({ url: url, form: params_3 }, function(error, res, body) {
        if (error) {
            return;
        }
        console.log(body);
    });
}

// Start From Step 1
getLoginToken();

MediaWiki JS

/*
    tag.js

    MediaWiki API Demos
    Demo of `Tag` module: Remove the spam tag from log entry ID 123 with the reason Wrongly 
    applied

    MIT license
*/

var params = {
    
    action: "compare",
    format: "json",
    token: csrf_token,
    logid: "123",
    remove: "spam",
    reason: "Wrongly applied"
},
api = new mw.Api();

api.postWithToken( 'csrf', params ).done( function ( data ) {
console.log( data );
} );

Possible errors

Code Info
apierror-blocked You have been blocked from editing.
apierror-nosuchlogid There is no log entry with ID logid.
apierror-nosuchrcid There is no recent change with ID rcid.
apierror-nosuchrevid There is no revision with ID revid.

Parameter history

  • v1.29: Introduced tags