API:Errors and warnings

From mediawiki.org
Revision as of 05:43, 23 September 2018 by Shirayuki (talk | contribs) (Protected "API:Errors and warnings": Excessive vandalism ([Edit=Allow only autoconfirmed users] (expires 05:43, 23 March 2019 (UTC)) [Move=Allow only autoconfirmed users] (expires 05:43, 23 March 2019 (UTC))))

If something goes wrong in an API request, an error or a warning will be thrown (although the HTTP response will usually still be 200 OK). Warnings are thrown for non-fatal conditions such as invalid parameters, whereas errors are only thrown for fatal conditions.

Warnings

Warnings are output in the following format:

<?xml version="1.0" encoding="utf-8"?>
<api>
  <warnings>
    <query>Warning text
Another warning</query>
    <info>A warning from prop=info</info>
  </warnings>
</api>

As shown in the example, warnings are grouped by the name of the module that caused them. Multiple warnings from the same module are separated by a newline.

Disabled submodules

Disabled action=query submodules will always throw the following warning:

  • The "modulename" module has been disabled.

Missing module warnings

If you specify a module in a multi-value list, such as a list, meta, or prop list of query submodules, and the module is not present on a wiki, for example it is implemented by an extension that isn't loaded, then requesting throws the warning "Unrecognized value for parameter ..." and possibly additional warnings for the submodule's parameters. For example for a list query submodule, raremodule, a query such as

Result
{
    "warnings": {
        "main": {
            "*": "Unrecognized parameter: 'rmparam'"
        },
        "query": {
            "*": "Unrecognized value for parameter 'list': raremodule"
        }
    }
}

returns

  • "Unrecognized value for parameter 'list': raremodule"

See also Missing module errors below

You can check to see if a module is available before invoking it, see [How do I] check if an API module is available? in the FAQ.

Parameter validation warnings

The MediaWiki API may return the following warnings when validating parameters of any API module. paramname is replaced by the name of the parameter.

  • Too many values supplied for parameter 'paramname': the limit is limit
  • Unrecognized value for parameter 'paramname': value
  • Unrecognized values for parameter 'paramname': value1, value2, value3

Errors

Error formats

Since MediaWiki 1.29 errors are localizable, and available in multiple formats. An error (or warning) is expected to consist of a message, an error code (an arbitrary string, usually generated from the message key; see also #Standard error messages below), and optional extra data (an associative array). An API response with errors will look like this (assuming format=json&formatversion=2):

{
    "errors": [
        {
            "code": "error-code",
            ...error message...,
            "data": [...any extra data...],
            "module": "path to the API module that generated the error"
        },
        ...more errors...
    ],
    "docref": "<human-readable message on where to find help>"
}

(The data key will be missing if there is no extra data to display.)

The way the error message is returned to the client is controlled by the errorformat API parameter:

  • html: intended for human display in HTML-capable clients.
        "html": "<the message, interpreted as wikitext and parsed into HTML>",
    
  • wikitext:
        "text": "<the message as-is, with parameter substitution but without any parsing>",
    
  • plaintext: intended for human display in HTML-incapable clients.
        "text": "<like wikitext, but with added plaintext conversion>",
    
    Plaintext conversion is a minimal, best-effort transformation to make the message (assumed to contain wikitext) more readable: tags are removed, HTML entities are replaced, certain HTML tags are intelligently replaced with punctuation.
  • raw: intended as a machine-readable format (note that the error key is more unique than the error code).
        "key": "<message key>",
        "params": [...message parameters...],
    
    Parameters can themselves be objects with key and params fields.
  • none: no message information at all.

For the formatting modes which involve message lookup (html, wikitext and plaintext) the API parameter errorlang can be used to set the language (only needed when different from the content language) and errorsuselocal to set whether the MediaWiki: namespace can be used to override default error messages.

Error codes are also returned in the MediaWiki-API-Error response HTTP header, separated by commas when there are multiple errors.

For an example error response or to test your client's error handling, visit https://en.wikipedia.org/w/api.php?action=blah&errorformat=plaintext&format=jsonfm&formatversion=2

When errorformat is not set (or set to bc), errors will be displayed in the legacy format instead.

Legacy format

In the legacy error format, there is always at most one error; additional ones are discarded. The response looks like this:

{
    "error": {
        "code": "error-code",
        "info": "<the message as-is, with parameter substitution but without any parsing>",
        ...any extra data...
    }
}

(ie. extra data is spliced into the object instead of being under the data key).

With format=xml it looks like this:

<error code="error-code" info="...." />

Error messages in the documentation

Error messages are documented as follows:

Code Info
apparams prlevel may not be used without prtype

Which corresponds to:

<error code="apparams" info="prlevel may not be used without prtype" />

for XML or:

"error": {
    "code": "maxlagapparams",
    "info": "prlevel may not be used without prtype",
    "*": "See https://www.mediawiki.org/w/api.php for API usage."
}

for json. When using a different formatversion than 1 with json, the "*" field will be named "docref" instead.

Disabled modules

Disabled action= modules will always fail with the following error:

Code Info
moduledisabled The modulename module has been disabled.

Missing module errors

If you specify a module as the single value of a parameter such as action and it is not present on a wiki, for example it is implemented by an extension that isn't loaded, then the request throws the error

Code Info
unknown_action Unrecognized value for parameter 'action': modulename

You can check to see if a module is available before invoking it, see [How do I] check if an API module is available? in the FAQ.

See also Missing module warnings above.

Parameter validation errors

The MediaWiki API can "throw" the following errors when validating parameters of any API modules.

Code Info
multival_paramname Only one of 'value1', 'value2', 'value3' is allowed for parameter 'paramname'
unknown_paramname Unrecognized value for parameter paramname: value.
paramname paramname may not be less than min (set to value).
paramname paramname may not be over max (set to value) for bots or sysops.
paramname paramname may not be over max (set to value) for users.
badtimestamp_paramname Invalid value "value" for timestamp parameter paramname.
baduser_paramname Invalid value "value" for user parameter paramname.
invalidparammix The parameters param1, param2, param3 cannot be used together
missingparam One of the parameters param1, param2, param3 is required
_badcontinue Invalid continue param. You should pass the original value returned by the previous query

Standard error messages

Some generic error messages are shared among modules. If a module can throw these errors, that's explicitly mentioned in its Possible errors section.

Code Info
unknownerror Unknown error: This usually means something crazy like a rare race condition occurred. If you get this error, retry your request until it succeeds or returns a more informative error message
unknownerror Unknown error: "errorcode"
unknownerror-nocode Unknown error
unsupportednamespace Pages in the Special namespace can't be edited
protectednamespace-interface You're not allowed to edit interface messages
protectednamespace You're not allowed to edit pages in the "namespace" namespace
customcssjsprotected You're not allowed to edit custom CSS and JavaScript pages
cascadeprotected The page you're trying to edit is protected because it's included in a cascade-protected page
protectedpage The "right" right is required to edit this page
permissiondenied Permission denied
confirmemail You must confirm your e-mail address before you can edit
blocked You have been blocked from editing
autoblocked Your IP address has been blocked automatically, because it was used by a blocked user
ratelimited You've exceeded your rate limit. Please wait some time and try again
readonly The wiki is currently in read-only mode
badtoken Invalid token (did you remember to urlencode it?)
missingtitle The page you requested doesn't exist
mustbeposted Type of your HTTP request message must be POST
hookaborted The modification you tried to make was aborted by an extension hook
nosuchpageid There is no page with ID id
nosuchrevid There is no revision with ID id
nosuchrcid There is no change with rcid "id"
nosuchuser The user you specified doesn't exist
invalidtitle Bad title "title"
invaliduser Invalid username "username"
assertbotfailed "assert=bot" has been used, but logged in user is not a bot
assertuserfailed "assert=user" has been used, but user is not logged in
readapidenied You need read permission to use this module
noapiwrite Editing of this wiki through the API is disabled. Make sure the $wgEnableWriteAPI=true; statement is included in the wiki's LocalSettings.php file