As a developer I want to be able to create a new Wikidata item in it's entirety
POST rest.php/wikibase/v0/entities/items
**Acceptance criteria**
- At least adding a label or a description in one language is mandatory
- 201 response code on success and location header in the successful creation response
- Ignore HTTP conditional request headers
- ETag, last-modified and location (URI of the newly created item) as response headers.
- Handle user authentication/authorization like in `POST /entities/items/{item_id}/statements`
- Client can provide additional edit metadata: mediawiki tags, edit summary text to append to the automated summary, and a bot edit flag, like in POST /entities/items/{item_id}/statements
**Error cases to consider**
<table>
<tr>
<th>
</th>
<th>HTTP response code</th>
<th>response payload</th>
</tr>
<tr>
<td>Invalid edit tag</td>
<td>400</td>
<td>
`"code": "invalid-edit-tag"`
`"message": "Invalid MediaWiki tag: {tag}"`
</td>
</tr>
<tr>
<td>Comment too long</td>
<td>400</td>
<td>
`"code": "comment-too-long"`
`"message": "Comment must not be longer than {limit} characters"`
</td>
</tr>
<tr>
<td>Invalid data in field</td>
<td>400</td>
<td>
`"code": "item-data-invalid-field"`
`"message": "Invalid input for '{field}'"`
`"context": {`
` "path": "{field}",`
` "value": "{value}"`
`}`
</td>
</tr>
<tr>
<td>When label, description or alias fields are selected but not filled (aka, empty)</td>
<td>400</td>
<td>
`"code": "label/description/alias-empty"`
`"message": "Label/Description/Alias list must not be empty"`
</td>
</tr>
<tr>
<td> Label and description have same value</td>
<td>400</td>
<td>
` "code": "label-description-same-value"`,
`"message": "Label and description for language code '{language}' can not have the same value"`
`"context": {"language": "{language}" }`
</td>
</tr>
<tr>
<td> Label/description/alias too long</td>
<td>400</td>
<td>
`"code": "label/description/alias-too-long"`
`"message": "Description/label/alias must be no more than {limit} characters long"`
` "context": {"value": "{description/label/alias}","character-limit": "{limit}"}`
</td>
</tr>
<tr>
<td> Label/description/alias invalid</td>
<td>400</td>
<td>
`"code": "invalid-description/label/alias"`
`"message": "Not a valid description/label/alias: {description/label/alias}"`
</td>
</tr>
<tr>
<td> Invalid language code</td>
<td>400</td>
<td>
`"code": "invalid-language-code"`
`"message": "Not a valid language code: {language_code}"`
</td>
</tr>
<tr>
<td> Duplicate alias</td>
<td>400</td>
<td>
`"code": "duplicate-alias"`
`"message": "Alias list contains a duplicate alias: '{alias}'"`
`"context": {"alias": "{alias}"}`
</td>
</tr>
<tr>
<td> Item with label and description already exists</td>
<td>400</td>
<td>
`"code": "item-label-description-duplicate"`
`"message": "Item '{duplicate_item_id}' already has label '{label}' associated with language code '{language}', using the same description text"`
`"context": { "language": "{language}", "label": "{label}","description": "{description}","matching-item-id": "{duplicate_item_id}"}`
</td>
</tr>
<tr>
<td>Sitelink conflict</td>
<td>409</td>
<td>
`{"code": "sitelink-conflict", "message": "Sitelink is already being used on {other_item_id}"}`
</td>
</tr>
<tr>
<td>sitelink title field not provided</td>
<td>400</td>
<td>
`{ "code": "sitelink-data-missing-title", "message": "Mandatory sitelink title missing"}`
</td>
</tr>
<tr>
<td>title is empty</td>
<td>400</td>
<td> `{"code": "title-field-empty", "message": "Title must not be empty"}`
</td>
</tr>
<tr>
<td>Invalid title</td>
<td>400</td>
<td> `{"code": "invalid-title-field", "message": "Not a valid input for title field'"}`
</tr>
<tr>
<td>value provided as a badge is not an item ID</td>
<td>400</td>
<td>`{"code": "invalid-input-sitelink-badge", "message": "Badge input is not an item ID: {value}"}`
</td>
</tr>
<tr>
<td>item provided is not allowed as a site link badge </td>
<td>400</td>
<td>`{"code": "item-not-a-badge", "message": "Item ID provided as badge is not allowed as a badge: {item_id}"}`
</td>
</tr>
<tr>
<td>value of badges field is not a list</td>
<td>400</td>
<td>`{"code": "invalid-sitelink-badges-format", "message": "Value of badges field is not a list" }`
</td>
</tr>
<tr>
<td>Title does not exist on the given site</td>
<td>400</td>
<td>`{"code": "title-does-not-exist", "message": "Page with title {title} does not exist on the given site" }`</td>
</tr>
</table>
**Notes**
- Automated edit summary to be of the type: `/* wbeditentity-create-item:0| */`
- How Action API does it: https://www.wikidata.org/w/api.php?action=help&modules=wbeditentity