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|
- 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>}}||