Wikibase/API

Please see d:api.php for a perfectly up to date copy.

Wikibase API for the repo part, that is the part running on the central database with its database. There is a separate API for the clients, or in Wikidata lingo the attached wiki sites. There can be browsers connected to both the repo and the clients.

Requests to the repo API that changes content should use token, use POST or GET requests according to module (use POST to avoid problem with non-behaving proxies), and be aware of and handle errors from the API. In the examples below the requests are shown as GET, but that will only work when debugging is turned on.

Modules
There are some parameters that are always available, and some that are nearly always available. Plural forms are used in those cases where a parameter can take several values.


 * id | ids : Identifies a specific entity or entities, most typical an item. Plural form is used in wbgetentities.
 * site ∩ title | sites ∩ titles : Identifies a single item or multiple items. Plural form is used in wbgetentities. Only one of sites and titles can have multiple values at the same time.
 * language | languages : The language is used as a filter mechanism to filter labels and descriptions in get actions or to identify a specific language for set actions.
 * format : Should always be set to json (or jsonfm for debugging), or xml (or xmlfm for debugging), no other form is supported.
 * summary : Adds a user specified summary instead of the system generated one. If not provided the module will generate its own summary, and if this fails the item itself will provide a summary.
 * token : An encrypted string the requester must pass on shall the request be fullfilled.
 * baserevid : An id for the last known revision that must be passed on shall the server be able to detect edit collisions.

Normally the return value either has a success key with a boolean cast as an integer or an error key with an object of two, optionally three, keys code, info and "*". The last one is additional information. Information about the action is either passed on the top level or under item if its one single item or items if its several. If it is several items each is found under a key with its own item id. See and.


 * Note that empty objects are returned as json arrays and not as objects.
 * Note that the parameters item and link is not supported anymore.
 * Note that empty parameters removes the actual entry from the item.

wbgetentities
Module to get the content of several entities, possibly with only parts of the entity included. Entities that are checked for existence, but not found, are reported (bugzilla:45509). During lookup both sites and titles can be a list, that is if the entities are items, but the shorter one is cycled to match the longer one. If one of the lists contain a single entry it will be used for all entries from the other list. If both lists are equally long the sitelinks will be well-formed pairs. getItems/getEntities( ( ids XOR ( sites, titles ) ), *props, *languages )
 * ids are numeric identifiers for existing entities, if the entities does not exist they will be marked as missing.
 * sites ∩ titles is pairs that identifies multiple existing entities (only items), if they do not exist they will be marked as missing.
 * props which list to report, possibly filtered by language if they are language specific. Possible values are labels, descriptions, sitelinks, claims. Note that sitelinks are not language specific.
 * sort
 * dir
 * languages are one or more languages to filter the list against. If it is missing all valid languages are reported.
 * languagefallback
 * normalize
 * ungroupedlist


 * Example of general lookup with id :
 * Example of limited lookup with site-title pair:

wbeditentity
''Note that this module is an interim solution to create and test items, and can change without further notice. The module itself can be removed in the final system. The solution is unsupported and any behavior is a feature or bug at the developers discretion. Especially note that the behavior of calls with empty or missing data can change. Also note that the only expected behavior is creation of new empty items.'' getItems( ( id XOR ( site, title ) ) OR baserevid, data, *clear, *summary )
 * id is the numeric identifier for an existing item, if the item does not exist an error is returned.
 * site ∩ title is a pair that identifies a single existing item, if the item does not exist an error is returned.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * data
 * clear is a marker to clear out the complete item and start from scratch.
 * new
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.
 * Example deletion of item [undocumented behavior]:
 * Empty an existing item, a minimum item is not defined, but it is likely that an item that is "empty" will be deleted during later processing.


 * Example creation of empty object :
 * Builds an "empty" item if not given an id, a minimum item is not defined, but it is likely that an item that is "empty" will be deleted during later processing.


 * Example creates a prefilled item [undocumented behavior]:
 * Builds an item with a few labels set, then returns the structure.


 * Example modifies an existing item [undocumented behavior]:
 * Extends an item with a few sitelinks set, then returns the new structure.

Note that setting sitelinks through this module bypasses normalization and verification. It is the sole responsibility of the user to do normalization and verification of the links before they are used.

New long format

 * This is examples of the new long format. This is closer to the internal representation and includes additional operations.

To make it easier to reuse information from other calls the structure in the request is (will be) made closer to the reply. Simple method-like requests will still be available as specific actions like wbsetlabel, wbsetdescription, wbsetaliases and wbsetsitelink. The changes are basically a shift from key-value pairs where the value is a single string, to a composite value that is an array. This will then contain the different parts and also possibly special actions. That complex structure is repeated for each value. Each of the repeated structures must also be according to the key if there is one, but it can be dismissed and the structures embedded in an array.

Note that the data arg {"labels":{"en":{"language":"en","value":"Foo"},"no":{"language":"no","value":"Bar"}}} and {"labels":[{"language":"en","value":"Foo"},{"language":"no","value":"Bar"}]} will produce the same effect on the stored values for labels, and similar {"descriptions":{"en":{"language":"en","value":"This is foo"},"no":{"language":"no","value":"This is bar"}}} and {"descriptions":[{"language":"en","value":"This is foo"},{"language":"no","value":"This is bar"}]} will produce the same effect on the stored values for descriptions.

There are to modifying operators that can be added as flags to the stored values. Those are add and remove. Setting them for individual elements will add or remove them, while not using them will be an overwrite operation. These operations/flags can be removed!


 * Define a simple item : Its not necessary to add flags for adding/setting, but adding in this context means overwriting the existing value.


 * Add a label : Its not necessary to add flags for adding/setting, but adding in this context means overwriting the existing value.


 * Remove a label : The label is removed if it is empty, and it is also removed if the "remove" flag is set. In the later case the actual value is neglected.


 * Aliases : The aliases are a list, but there are still single values in each object structure. All values with the same operation for the same language will be added, removed or set as one operation. The set operations are those without an explicit add' or remove'' flag.


 * Add sitelinks


 * Remove sitelinks

wbsetsitelink
Module to define new links to pages at external client sites. During processing of requests the module will query the external site to verify the existence of the page and to acquire the canonical form of the prefix and the pagename. linkSite( ( id XOR ( site, title ) ) OR baserevid, linksite, linktitle, *summary )
 * id is the numeric identifier for an existing item, if the item does not exist an error is returned.
 * site ∩ title is a pair that identifies a single existing item, if the item does not exist an error is returned.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * linksite is the site id for a client site that will be the target of the new link. The site will be queried during the call.
 * linktitle is the title of the page at the client site that will be the target of the new link. The site will be queried during the call.
 * badges
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.


 * Example with use of site-title pair :
 * Example with use of id :

wbsetaliases
Module to set, add and remove aliases from items. Aliases are alternate names for the items, that can be queried and used for lookup. setAliases( ( id XOR ( site, title ) ) OR baserevid, ( add OR remove ) XOR set, *summary )
 * id is the numeric identifier for an existing item, if the item does not exist an error is returned.
 * site ∩ title is a pair that identifies a single existing item, if the item does not exist an error is returned.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * set contains a list of strings that will be used as the new list of aliases. The values are normalized before they are used.
 * add contains a list of additional strings that will be used as aliases. The values are normalized before they are used.
 * remove contains a list of strings that will be removed from the the list of aliases. The values are normalized before they are used.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.
 * language


 * Example set Foo and Bar :
 * Example add Test :
 * Example remove Foo and Test :

wbcreateclaim

 * entity is the id of the entity you are adding the claim to
 * snaktype (value, novalue, somevalue)
 * property is the id of the snaks property
 * value of snak when creating a claim with a snak that has a value
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.

Add a claim with a string data value:

'action' => 'wbcreateclaim', 'entity' => 'Q82', 'property' => 'P4', 'snaktype' => 'value', 'value' => '"Cyqi3STlJtEJ"', 'bot' => 1,

Add a claim with a wikibase-item data value:

'action' => 'wbcreateclaim', 'entity' => 'Q82', 'property' => 'P2', 'snaktype' => 'value', 'value' => '{"entity-type":"item","numeric-id":63}', 'bot' => 1,

Add a claim with a time data value:

'action' => 'wbcreateclaim', 'entity' => 'Q82', 'property' => 'P11', 'snaktype' => 'value', 'value' => '{"time":"+00000002010-01-02T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"}', 'bot' => 1,

Add a claim with a globe-coordinate data value:


 * Note: value parameters "globe" and "precision" are optional. Default for "globe" is "http://www.wikidata.org/entity/Q2" (earth).

'action' => 'wbcreateclaim', 'entity' => 'Q9188', 'property' => 'P625', 'snaktype' => 'value', 'value' => '{"latitude":40.748433,"longitude":-73.985656,"globe":"http://www.wikidata.org/entity/Q2"}', 'bot' => 1,

Add a claim with a quantity data value:


 * Note: ... 

'action' => 'wbcreateclaim', 'entity' => 'Q556', 'property' => 'P1086', 'snaktype' => 'value', 'value' => '...', 'bot' => 1,

wbgetclaims
Module for getting Wikibase claims.


 * entity is Id of the entity from which to obtain claims.
 * property is optional filter to only return claims with a main snak that has the specified property.
 * claim a GUID identifying the claim. Required unless entity is provided.
 * rank is optional filter to return only the claims that have the specified rank. (deprecated, normal, preferred)
 * props which list to report, possibly filtered by language if they are language specific. Note that sitelinks are not language specific.


 * Example of general lookup with id :

wbremoveclaims
Module for removing Wikibase claims.


 * claim a GUID identifying the claim.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.


 * Example of removing a claim with a GUID :

wbsetclaimvalue
Module for setting the value of a Wikibase claim.


 * claim a GUID identifying the claim. Required.
 * snaktype (value, novalue, somevalue).
 * value of snak when setting a claim with a snak that has a value.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.


 * Example of setting a claim with GUID :

wbsetreference
Module for creating a reference or setting the value of an existing one.


 * statement a GUID identifying the statement. Required.
 * snaks
 * snaks-order
 * reference a hash of the reference that should be updated.
 * index
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.

action:wbsetreference format:json statement:q76$D4FDE516-F20C-4154-ADCE-7C5B609DFDFF snaks:{"p143":[{"snaktype":"value","property":"p143","datavalue":{"type":"wikibase-entityid","value":{"entity-type":"item","numeric-id":11696}}}]} baserevid:779 token:+\

action:wbsetreference format:json statement:q76$D4FDE516-F20C-4154-ADCE-7C5B609DFDFF snaks:{"p888":[{"snaktype":"value","property":"p888","datavalue":{"type":"string","value":"00905364"}}} baserevid:779 token:+\

wbremovereferences
Module for removing one or more references of the same statement.


 * statement a GUID identifying the statement. Required.
 * references a hash of the reference that should be updated.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.


 * Example of removing a reference with hash from claim with GUID :

wbremovequalifiers
Module for removing a qualifier from a claim.


 * claim a GUID identifying the claim. Required.
 * qualifiers a hash of the qualifier that should be removed.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.


 * Remove qualifier with hash "1eb8793c002b1d9820c833d234a1b54c8e94187e" from claim with GUID of "q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F" :

wbsetqualifier
Module for creating a qualifier or setting the value of an existing one.


 * claim a GUID identifying the claim. Required.
 * property Id of the snaks property
 * value
 * snaktype
 * snakhash
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.

In this example, p4 is a string property:

'format' => 'json', 'action' => 'wbsetqualifier', 'claim' => 'q2$4554c0f4-47b2-1cd9-2db9-aa270064c9f3', 'property' => 'p4', 'value' => '"GdyjxP8I6XB3"', 'snaktype' => 'value', 'token' => 'f18s833ctn49799614c4o747521237c27+\\'

Add a qualifier with a wikibase-item data value:

'format' => 'json', 'action' => 'wbsetqualifier', 'claim' => 'q2$4554c0f4-47b2-1cd9-2db9-aa270064c9f3', 'property' => 'p2', 'snaktype' => 'value', 'value' => '{"entity-type":"item","numeric-id":63}', 'token' => 'f18s833ctn49799614c4o747521237c27+\\'

Add a qualifier with a time data value:

'format' => 'json', 'action' => 'wbsetqualifier', 'claim' => 'q102865$94797627-7ec6-47fd-9207-b615ccd682eb', 'property' => 'p580', 'snaktype' => 'value', 'value' => '{"time":"-00000000363-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"}', 'token' => 'f18s833ctn49799614c4o747521237c27+\\'

wbsearchentities
Module to search for entities.


 * search is the text string to search for
 * language is the language to search in
 * type is the type of entities to return
 * limit is the maximum number of results to return (default 7)
 * continue offset to continue the query from a previous search


 * Search for "abc" in English language, with defaults for type and limit :
 * Search for "abc" in English language with a limit of 2 :
 * Search for "alphabet" in English language for type property :

wbsetlabel
Module to set a label for a single Wikibase entity.


 * id is the numeric identifier for an existing item, if the item does not exist an error is returned.
 * site ∩ title is a pair that identifies a single existing item, if the item does not exist an error is returned.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.
 * language is the language for the label. The language must be a valid identifier.
 * value is the value of the label


 * Set the string "Wikimedia" for page with id "Q42" as a label in English language :
 * Set the English language label to "Earth" for the item with site link enwiki => "Earth" :

wbsetdescription
Module to set a description for a single Wikibase entity.


 * id is the numeric identifier for an existing item, if the item does not exist an error is returned.
 * site ∩ title is a pair that identifies a single existing item, if the item does not exist an error is returned.
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.
 * language is the language for the description. The language must be a valid identifier.
 * value is the value of the description.

English language : page with a sitelink to enwiki:Wikipedia :
 * Set the string "An encyclopedia that everyone can edit" for page with id "Q42" as a description in
 * Set the string "An encyclopedia that everyone can edit" as a description in English language for

wbsetclaim
Module for creating or updating an entire Claim.


 * claim a claim in json form
 * index
 * baserevid is the page revision to use for further processing. Will be used for lookup of the item if id or site and title fails.
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.


 * Example :

wblinktitles
Module to associate two articles on two different wikis with a Wikibase item.


 * tosite ∩ totitle is pair that identifies first sitelink
 * fromsite ∩ fromtitle is pair that identifies second sitelink


 * Add a link "Hydrogen" from the English page to "Wasserstoff" at the German page :

wbmergeitems
Module to merge two Wikibase items.


 * fromid is the numeric identifier for the item to merge from
 * toid is the numeric identifier for the item to merge to
 * ignoreconflicts Array of elements of the item to ignore conflicts for, can only contain values of "label" and or "description" and or "sitelink"
 * summary is a user entered string that is used in addition to an autocomment generated by the module itself.


 * Example:

wbparsevalue
Module to parse strings using a backend ValueParser.


 * parser
 * values
 * options



wbformatvalue
Module for formatting DataValues.


 * generate
 * datavalue
 * datatype
 * options



Time

 * Calendar model
 * Q1985727 - Gregorian calendar
 * Q1985786 - Julian calendar

Token
See also Manual:Edit token.

Revision
The API uses revision ids for edit collision detection. If the revision id is known from an previous reply, page load or similar, then pass on the revision to the edit. Without the revision id it is not possible to detect edit collisions in a reliable way. If there is an edit collision the requester must acquire a newer revision id to be able to continue. This typically involves requesting wbgetentities for the item in question, and then storing (and using) the revision from the entry.

Errors
Possible errors for all modules can be found at  eg. wbeditentity

If the error condition is prepared and expected, and a format is defined, the error messages will have a standardized form.

The servedby is given unconditionally for error messages, but could be missing for some less than fatal errors. In some cases error messages can be appended to a success and be called warning(s).
 * example :

All error messages from the Wikibase modules should be internationalized (i18n) and localized (l10n), but note that error messages from the base API system will usually not be localized. The user language for the logged in user (usually the same as in the web interface) will be the default for error messages. This can be overridden by putting uselang in the URL.

Do not depend on the info string for testing, use the code as this will remain independent of localization.

An internationalized error message that isn't localized as it should will have additional angle brackets.

With correctly localized error message the angle brackets will go away and the info string will print out in clear text. Assuming the user is logged in and use English language it will print as something like the following. Switching to Norwegian in the Special:Preferences or by appending  it will change the text of the info string to a localized variant, while the code string remains constant. A lot of error messages are not properly localized.
 * example :

Success
Can be removed since all normal calls will return data of some kind, unless there is an error condition.

If a success is achieved it will have the following form when the The interpretation of the value for success can be dependent on the actual parameters in the call, but usually it is a boolean that is type casted to an integer. Its meaning is that every previous tests evaluated to true. If the number is 0 (zero) any additional values might be wrong.

There might be additional values in the structure after a successful call.