diff --git a/content/en/api/entities.md b/content/en/api/entities.md
index c3f8c703..a3e7a9a7 100644
--- a/content/en/api/entities.md
+++ b/content/en/api/entities.md
@@ -5,3 +5,294 @@ menu:
parent: api
weight: 3
---
+
+- All IDs are encoded as strings
+- All datetimes are in ISO8601 format
+- All HTML strings are sanitized by the server
+- All language codes are in ISO6391 format
+
+## Account
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `id` | String |{{< no >}}|0.1.0|
+| `username` | String |{{< no >}}|0.1.0|
+| `acct` | String |{{< no >}}|0.1.0|
+| `display_name` | String |{{< no >}}|0.1.0|
+| `locked` | Boolean |{{< no >}}|0.1.0|
+| `created_at` | String (Datetime) |{{< no >}}|0.1.0|
+| `followers_count` | Number |{{< no >}}|0.1.0|
+| `following_count` | Number |{{< no >}}|0.1.0|
+| `statuses_count` | Number |{{< no >}}|0.1.0|
+| `note` | String |{{< no >}}|0.1.0|
+| `url` | String (URL) |{{< no >}}|0.1.0|
+| `avatar` | String (URL) |{{< no >}}|0.1.0|
+| `avatar_static` | String (URL) |{{< no >}}|1.1.2|
+| `header` | String (URL) |{{< no >}}|0.1.0|
+| `header_static` | String (URL) |{{< no >}}|1.1.2|
+| `emojis` | Array of [Emoji](#emoji) |{{< no >}}|2.4.0|
+| `moved` | [Account](#account) |{{< yes >}}|2.1.0|
+| `fields` | Array of [Hash](#field) |{{< yes >}}|2.4.0|
+| `bot` | Boolean |{{< yes >}}|2.4.0|
+
+### Field
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `name` | String |{{< no >}}|2.4.0|
+| `value` | String |{{< no >}}|2.4.0|
+| `verified_at` | String (Datetime) |{{< yes >}}|2.6.0|
+
+## Application
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `name` | String |{{< no >}}||
+| `website` | String (URL) |{{< yes >}}||
+
+## Attachment
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `id` | String |{{< no >}}||
+| `type` | [String (Enum)](#type) |{{< no >}}||
+| `url` | String (URL) |{{< no >}}||
+| `remote_url` | String (URL) |{{< yes >}}||
+| `preview_url` | String (URL) |{{< no >}}||
+| `text_url` | String (URL) |{{< yes >}}||
+| `meta` | [Hash](#meta) |{{< yes >}}||
+| `description` | String |{{< yes >}}||
+
+### Type
+
+- `unknown`
+- `image`
+- `gifv`
+- `video`
+
+### Meta
+
+May contain subtrees `small` and `original`.
+
+Images may contain `width`, `height`, `size`, `aspect`, while videos (including GIFV) may contain `width`, `height`, `frame_rate`, `duration` and `bitrate`.
+
+There may be another top-level object, `focus` with the coordinates `x` and `y`. These coordinates can be used for smart thumbnail cropping, [see this for reference](https://github.com/jonom/jquery-focuspoint#1-calculate-your-images-focus-point).
+
+## Card
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `url` | String (URL) |{{< no >}}||
+| `title` | String |{{< no >}}||
+| `description` | String |{{< no >}}||
+| `image` | String (URL) |{{< yes >}}||
+| `type` | [String (Enum)](#type-1) |{{< no >}}||
+| `author_name` | String |{{< yes >}}||
+| `author_url` | String (URL) |{{< yes >}}||
+| `provider_name` | String |{{< yes >}}||
+| `provider_url` | String (URL) |{{< yes >}}||
+| `html` | String (HTML) |{{< yes >}}||
+| `width` | Number |{{< yes >}}||
+| `height` | Number |{{< yes >}}||
+
+### Type
+
+- `link`
+- `photo`
+- `video`
+- `rich`
+
+## Context
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `ancestors` | Array of [Status](#status) |{{< no >}}||
+| `descendants` | Array of [Status](#status) |{{< no >}}||
+
+## Emoji
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `shortcode` | String |{{< no >}}||
+| `static_url` | String (URL) |{{< no >}}||
+| `url` | String (URL) |{{< no >}}||
+| `visible_in_picker` | Boolean |{{< no >}}||
+
+## Error
+
+The most important part of an error response is the HTTP status code. Standard semantics are followed. The body of an error is a JSON object with this structure:
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `error` | String |{{< no >}}||
+
+## Filter
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `id` | String |{{< no >}}|2.4.3|
+| `phrase` | String |{{< no >}}|2.4.3|
+| `context` | Array of [String (Enum)](#context) |{{< no >}}|2.4.3|
+| `expires_at` | String (Datetime) |{{< yes >}}|2.4.3|
+| `irreversible` | Boolean |{{< no >}}|2.4.3|
+| `whole_word` | Boolean |{{< no >}}|2.4.3|
+
+### Context
+
+- `home`
+- `notifications`
+- `public`
+- `thread`
+
+### Implementation notes
+
+If `whole_word` is true , client app should do:
+
+- Define 'word constituent character' for your app. In the official implementation, it's `[A-Za-z0-9_]` in JavaScript, and `[[:word:]]` in Ruby. In Ruby case it's the POSIX character class (Letter | Mark | Decimal_Number | Connector_Punctuation).
+- If the phrase starts with a word character, and if the previous character before matched range is a word character, its matched range should be treated to not match.
+- If the phrase ends with a word character, and if the next character after matched range is a word character, its matched range should be treated to not match.
+
+Please check `app/javascript/mastodon/selectors/index.js` and `app/lib/feed_manager.rb` in the Mastodon source code for more details.
+
+## Instance
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `uri` | String |{{< no >}}||
+| `title` | String |{{< no >}}||
+| `description` | String |{{< no >}}||
+| `email` | String |{{< no >}}||
+| `version` | String |{{< no >}}||
+| `urls` | [Hash](#urls) |{{< no >}}||
+| `languages` | Array of String (ISO6391) |{{< no >}}||
+| `contact_account` | [Account](#account) |{{< no >}}||
+
+### URLs
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+|`streaming_api`| String (URL) |{{< no >}}||
+
+## List
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `id` | String |{{< no >}}||
+| `title` | String |{{< no >}}||
+
+## Mention
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `url` | String (URL) |{{< no >}}||
+| `username` | String |{{< no >}}||
+| `acct` | String |{{< no >}}||
+| `id` | String |{{< no >}}||
+
+## Notification
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `id` | String |{{< no >}}|
+| `type` | [String (Enum)](#type-2) |{{< no >}}|
+| `created_at` | String (Datetime) |{{< no >}}|
+| `account` | [Account](#account) |{{< no >}}|
+| `status` | [Status](#status) |{{< yes >}}|
+
+### Type
+
+- `follow`
+- `mention`
+- `reblog`
+- `favourite`
+
+## Push subscription
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `id` | String |{{< no >}}||
+| `endpoint` | String (URL) |{{< no >}}||
+| `server_key` | String |{{< no >}}||
+| `alerts` | [Hash](#alerts) |{{< no >}}||
+
+### Alerts
+
+???
+
+## Relationship
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `id` | String |{{< no >}}||
+| `following` | Boolean |{{< no >}}||
+| `followed_by` | Boolean |{{< no >}}||
+| `blocking` | Boolean |{{< no >}}||
+| `muting` | Boolean |{{< no >}}||
+| `muting_notifications` | Boolean |{{< no >}}||
+| `requested` | Boolean |{{< no >}}||
+| `domain_blocking` | Boolean |{{< no >}}||
+| `showing_reblogs` | Boolean |{{< no >}}||
+| `endorsed` | Boolean |{{< no >}}|2.5.0|
+
+## Results
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `accounts` | Array of [Account](#account) |{{< no >}}||
+| `statuses` | Array of [Status](#status) |{{< no >}}||
+| `hashtags` | Array of String |{{< no >}}||
+
+> **Note:** The v2 API returns an array of [Tag](#tag) for the `hashtags` attribute.
+
+## Status
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `id` | String |{{< no >}}||
+| `uri` | String |{{< no >}}||
+| `url` | String (URL) |{{< yes >}}||
+| `account` | [Account](#account) |{{< no >}}||
+| `in_reply_to_id` | String |{{< yes >}}||
+| `in_reply_to_account_id` | String |{{< yes >}}||
+| `reblog` | [Status](#status) |{{< yes >}}||
+| `content` | String (HTML) |{{< no >}}||
+| `created_at` | String (Datetime) |{{< no >}}||
+| `emojis` | Array of [Emoji](#emoji) |{{< no >}}||
+| `replies_count` | Number |{{< no >}}||
+| `reblogs_count` | Number |{{< no >}}||
+| `favourites_count` | Number |{{< no >}}||
+| `reblogged` | Boolean |{{< yes >}}||
+| `favourited` | Boolean |{{< yes >}}||
+| `muted` | Boolean |{{< yes >}}||
+| `sensitive` | Boolean |{{< no >}}||
+| `spoiler_text` | String |{{< no >}}||
+| `visibility` | [String (Enum)](#visibility) |{{< no >}}||
+| `media_attachments` | Array of [Attachment](#attachment) |{{< no >}}||
+| `mentions` | Array of [Mention](#mention) |{{< no >}}||
+| `tags` | Array of [Tag](#tag) |{{< no >}}||
+| `application` | [Application](#application) |{{< no >}}||
+| `language` | String (ISO6391) |{{< yes >}}||
+| `pinned` | Boolean |{{< yes >}}||
+
+### Visibility
+
+- `public`
+- `unlisted`
+- `private`
+- `direct`
+
+## Tag
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `name` | String |{{< no >}}||
+| `url` | String (URL) |{{< no >}}||
+| `history` | Array of [History](#history) |{{< yes >}}|2.4.1|
+
+### History
+
+|Attribute|Type|Nullable|Added in|
+|---------|-----------|:------:|:------:|
+| `day` | String (UNIX timestamp) |{{< no >}}|2.4.1|
+| `uses` | Number |{{< no >}}|2.4.1|
+| `accounts` | Number |{{< no >}}|2.4.1|
diff --git a/content/en/usage/privacy.md b/content/en/usage/privacy.md
index 8f2647f6..da232d18 100644
--- a/content/en/usage/privacy.md
+++ b/content/en/usage/privacy.md
@@ -10,10 +10,10 @@ menu:
|Level|Public timelines|Permalink|Profile view|Home feeds|
|-----|:--------------:|:-------:|:----------:|:--------:|
-|Public|||||
-|Unlisted|||||
-|Private|||||
-|Direct|||||
+|Public|{{< yes >}}|{{< yes >}}|{{< yes >}}|{{< yes >}}|
+|Unlisted|{{< no >}}|{{< yes >}}|{{< yes >}}|{{< yes >}}|
+|Private|{{< no >}}|{{< no >}}|{{< no >}}|{{< yes >}}|
+|Direct|{{< no >}}|{{< no >}}|{{< no >}}|{{< no >}}|
No matter which level, every mentioned user can see the message in their notifications.
diff --git a/layouts/shortcodes/no.html b/layouts/shortcodes/no.html
new file mode 100644
index 00000000..95c81dae
--- /dev/null
+++ b/layouts/shortcodes/no.html
@@ -0,0 +1 @@
+
diff --git a/layouts/shortcodes/yes.html b/layouts/shortcodes/yes.html
new file mode 100644
index 00000000..5310d4d4
--- /dev/null
+++ b/layouts/shortcodes/yes.html
@@ -0,0 +1 @@
+