Browse Source

Merge pull request #765 from marrus-sh/mastodon-API-update

Update API docs
closed-social-v3
Eugen 7 years ago
committed by GitHub
parent
commit
92a0b3d73a
1 changed files with 392 additions and 196 deletions
  1. +392
    -196
      docs/Using-the-API/API.md

+ 392
- 196
docs/Using-the-API/API.md View File

@ -6,25 +6,36 @@ API overview
- [Available libraries](#available-libraries) - [Available libraries](#available-libraries)
- [Notes](#notes) - [Notes](#notes)
- [Methods](#methods) - [Methods](#methods)
- Posting a status
- Uploading media
- Retrieving a timeline
- Retrieving notifications
- Following a remote user
- Fetching data
- Deleting a status
- Reblogging a status
- Favouriting a status
- Threads (status context)
- Who reblogged/favourited a status
- Following/unfollowing accounts
- Blocking/unblocking accounts
- Getting instance information
- Creating OAuth apps
- [Accounts](#accounts)
- [Apps](#apps)
- [Blocks](#blocks)
- [Favourites](#favourites)
- [Follow Requests](#follow-requests)
- [Follows](#follows)
- [Instances](#instances)
- [Media](#media)
- [Mutes](#mutes)
- [Notifications](#notifications)
- [Reports](#reports)
- [Search](#search)
- [Statuses](#statuses)
- [Timelines](#timelines)
- [Entities](#entities) - [Entities](#entities)
- Status
- Account
- [Pagination](#pagination)
- [Account](#account)
- [Application](#application)
- [Attachment](#attachment)
- [Card](#card)
- [Context](#context)
- [Error](#error)
- [Instance](#instance)
- [Mention](#mention)
- [Notification](#notification)
- [Relationships](#relationships)
- [Results](#results)
- [Status](#status)
- [Tag](#tag)
___
## Available libraries ## Available libraries
@ -33,295 +44,480 @@ API overview
- [For JavaScript](https://github.com/Zatnosk/libodonjs) - [For JavaScript](https://github.com/Zatnosk/libodonjs)
- [For JavaScript (Node.js)](https://github.com/jessicahayley/node-mastodon) - [For JavaScript (Node.js)](https://github.com/jessicahayley/node-mastodon)
___
## Notes ## Notes
When an array parameter is mentioned, the Rails convention of specifying array parameters in query strings is meant. For example, a ruby array like `foo = [1, 2, 3]` can be encoded in the params as `foo[]=1&foo[]=2&foo[]=3`. Square brackets can be indexed but can also be empty.
### Parameter types
When an array parameter is mentioned, the Rails convention of specifying array parameters in query strings is meant.
For example, a ruby array like `foo = [1, 2, 3]` can be encoded in the params as `foo[]=1&foo[]=2&foo[]=3`.
Square brackets can be indexed but can also be empty.
When a file parameter is mentioned, a form-encoded upload is expected. When a file parameter is mentioned, a form-encoded upload is expected.
### Selecting ranges
For most `GET` operations that return arrays, the query parameters `max_id` and `since_id` can be used to specify the range of IDs to return.
API methods that return collections of items can return a `Link` header containing URLs for the `next` and `prev` pages.
See the [Link header RFC](https://tools.ietf.org/html/rfc5988) for more information.
### Errors
If the request you make doesn't go through, Mastodon will usually respond with an [Error](#error).
___
## Methods ## Methods
### Posting a new status
**POST /api/v1/statuses**
### Accounts
Form data:
#### Fetching an account:
- `status`: The text of the status
- `in_reply_to_id` (optional): local ID of the status you want to reply to
- `media_ids` (optional): array of media IDs to attach to the status (maximum 4)
- `sensitive` (optional): set this to mark the media of the status as NSFW
- `visibility` (optional): either `private`, `unlisted` or `public`
- `spoiler_text` (optional): text to be shown as a warning before the actual content
GET /api/v1/accounts/:id
Returns the new status.
Returns an [Account](#account).
**POST /api/v1/media**
#### Getting the current user:
Form data:
GET /api/v1/accounts/verify_credentials
Returns the authenticated user's [Account](#account).
#### Getting an account's followers:
GET /api/v1/accounts/:id/followers
- `file`: Image to be uploaded
Returns an array of [Accounts](#account).
Returns a media object with an ID that can be attached when creating a status (see above).
#### Getting who account is following:
### Retrieving a timeline
GET /api/v1/accounts/:id/following
**GET /api/v1/timelines/home**
**GET /api/v1/timelines/public**
**GET /api/v1/timelines/tag/:hashtag**
Returns an array of [Accounts](#account).
Returns statuses, most recent ones first. Home timeline is statuses from people you follow, mentions timeline is all statuses that mention you. Public timeline is "whole known network", and the last is the hashtag timeline.
#### Getting an account's statuses:
GET /api/v1/accounts/:id/statuses
Query parameters: Query parameters:
- `max_id` (optional): Skip statuses younger than ID (e.g. navigate backwards in time)
- `since_id` (optional): Skip statuses older than ID (e.g. check for updates)
- `only_media` (optional): Only return statuses that have media attachments
- `exclude_replies` (optional): Skip statuses that reply to other statuses
Query parameters for public and tag timelines only:
Returns an array of [Statuses](#status).
- `local` (optional): Only return statuses originating from this instance
#### Following/unfollowing an account:
### Notifications
GET /api/v1/accounts/:id/follow
GET /api/v1/accounts/:id/unfollow
**GET /api/v1/notifications**
Returns the target [Account](#account).
Returns notifications for the authenticated user. Each notification has an `id`, a `type` (mention, reblog, favourite, follow), an `account` which it came *from*, and in case of mention, reblog and favourite also a `status`.
#### Blocking/unblocking an account:
**GET /api/v1/notifications/:id**
GET /api/v1/accounts/:id/block
GET /api/v1/accounts/:id/unblock
Returns single notification.
Returns the target [Account](#account).
**POST /api/v1/notifications/clear**
#### Muting/unmuting an account:
Clears all of user's notifications.
GET /api/v1/accounts/:id/mute
GET /api/v1/accounts/:id/unmute
### Following a remote user
Returns the target [Account](#account).
**POST /api/v1/follows**
#### Getting an account's relationships:
GET /api/v1/accounts/relationships
Query parameters:
- `id` (can be array): Account IDs
Returns an array of [Relationships](#relationships) of the current user to a list of given accounts.
#### Searching for accounts:
GET /api/v1/accounts/search
Query parameters:
- `q`: What to search for
- `limit`: Maximum number of matching accounts to return (default: `40`)
Returns an array of matching [Accounts](#accounts).
Will lookup an account remotely if the search term is in the `username@domain` format and not yet in the database.
### Apps
#### Registering an application:
POST /api/v1/apps
Form data: Form data:
- uri: username@domain of the person you want to follow
- `client_name`: Name of your application
- `redirect_uris`: Where the user should be redirected after authorization (for no redirect, use `urn:ietf:wg:oauth:2.0:oob`)
- `scopes`: This can be a space-separated list of the following items: "read", "write" and "follow" (see [this page](OAuth-details.md) for details on what the scopes do)
- `website`: (optional) URL to the homepage of your app
Returns the local representation of the followed account.
Creates a new OAuth app.
Returns `id`, `client_id` and `client_secret` which can be used with [OAuth authentication in your 3rd party app](Testing-with-cURL.md).
### Fetching data
These values should be requested in the app itself from the API for each new app install + mastodon domain combo, and stored in the app for future requests.
**GET /api/v1/statuses/:id**
### Blocks
Returns status.
#### Fetching a user's blocks:
**GET /api/v1/accounts/:id**
GET /api/v1/blocks
Returns account.
Returns an array of [Accounts](#account) blocked by the authenticated user.
**GET /api/v1/accounts/verify_credentials**
### Favourites
Returns authenticated user's account.
#### Fetching a user's favourites:
**GET /api/v1/accounts/:id/statuses**
GET /api/v1/favourites
Returns statuses by user.
Returns an array of [<span class="nt">Statuses](#status) favourited by the authenticated user.
Query parameters:
### Follow Requests
- `max_id` (optional): Skip statuses younger than ID (e.g. navigate backwards in time)
- `since_id` (optional): Skip statuses older than ID (e.g. check for updates)
- `only_media` (optional): Only return statuses that have media attachments
- `exclude_replies` (optional): Skip statuses that reply to other statuses
#### Fetching a list of follow requests:
**GET /api/v1/accounts/:id/following**
GET /api/v1/follow_requests
Returns users the given user is following.
Returns an array of [Accounts](#account) which have requested to follow the authenticated user.
**GET /api/v1/accounts/:id/followers**
#### Authorizing or rejecting follow requests:
Returns users the given user is followed by.
POST /api/v1/follow_requests/authorize
POST /api/v1/follow_requests/reject
**GET /api/v1/accounts/relationships**
Form data:
Returns relationships (`following`, `followed_by`, `blocking`, `muting`, `requested`) of the current user to a list of given accounts.
- `id`: The id of the account to authorize or reject
Query parameters:
Returns an empty object.
- `id` (can be array): Account IDs
### Follows
**GET /api/v1/accounts/search**
#### Following a remote user:
Returns matching accounts. Will lookup an account remotely if the search term is in the username@domain format and not yet in the database.
POST /api/v1/follows
Query parameters:
Form data:
- `uri`: `username@domain` of the person you want to follow
- `q`: what to search for
- `limit`: maximum number of matching accounts to return
Returns the local representation of the followed account, as an [Account](#account).
**GET /api/v1/blocks**
### Instances
Returns accounts blocked by authenticated user.
#### Getting instance information:
**GET /api/v1/mutes**
GET /api/v1/instance
Returns accounts muted by authenticated user.
Returns the current [Instance](#instance).
Does not require authentication.
**GET /api/v1/follow_requests**
### Media
Returns accounts that want to follow the authenticated user but are waiting for approval.
#### Uploading a media attachment:
**GET /api/v1/favourites**
POST /api/v1/media
Returns statuses favourited by authenticated user.
Form data:
### Deleting a status
- `file`: Media to be uploaded
**DELETE /api/v1/statuses/:id**
Returns an [Attachment](#attachment) that can be used when creating a status.
Returns an empty object.
### Mutes
#### Fetching a user's mutes:
GET /api/v1/mutes
Returns an array of [Accounts](#account) muted by the authenticated user.
### Notifications
#### Fetching a user's notifications:
GET /api/v1/notifications
Returns a list of [Notifications](#notification) for the authenticated user.
#### Getting a single notification:
GET /api/v1/notifications/:id
Returns the [Notification](#notification).
#### Clearing notifications:
### Reblogging a status
POST /api/v1/notifications/clear
**POST /api/v1/statuses/:id/reblog**
Deletes all notifications from the Mastodon server for the authenticated user.
Returns an empty object.
Returns a new status that wraps around the reblogged one.
### Reports
### Unreblogging a status
#### Fetching a user's reports:
**POST /api/v1/statuses/:id/unreblog**
GET /api/v1/reports
Returns the status that used to be reblogged.
Returns a list of [Reports](#report) made by the authenticated user.
### Favouriting a status
#### Reporting a user:
**POST /api/v1/statuses/:id/favourite**
POST /api/v1/reports
Returns the target status.
Form data:
### Unfavouriting a status
- `account_id`: The ID of the account to report
- `status_ids`: The IDs of statuses to report (can be an array)
- `comment`: A comment to associate with the report.
**POST /api/v1/statuses/:id/unfavourite**
Returns the finished [Report](#report).
Returns the target status.
### Search
### Threads
#### Searching for content:
**GET /api/v1/statuses/:id/context**
GET /api/v1/search
Returns `ancestors` and `descendants` of the status.
Form data:
### Who reblogged/favourited a status
- `q`: The search query
- `resolve`: Whether to resolve non-local accounts
**GET /api/v1/statuses/:id/reblogged_by**
**GET /api/v1/statuses/:id/favourited_by**
Returns [Results](#results).
If `q` is a URL, Mastodon will attempt to fetch the provided account or status.
Otherwise, it will do a local account and hashtag search.
Returns list of accounts.
### Statuses
### Following and unfollowing users
#### Fetching a status:
**POST /api/v1/accounts/:id/follow**
**POST /api/v1/accounts/:id/unfollow**
GET /api/v1/statuses/:id
Returns the updated relationship to the user.
Returns a [Status](#status).
### Blocking and unblocking users
#### Getting status context:
**POST /api/v1/accounts/:id/block**
**POST /api/v1/accounts/:id/unblock**
GET /api/v1/statuses/:id/contexts
Returns the updated relationship to the user.
Returns a [Context](#context).
### Getting instance information
#### Getting a card associated with a status:
**GET /api/v1/instance**
GET /api/v1/statuses/:id/card
Returns an object containing the `title`, `description`, `email` and `uri` of the instance. Does not require authentication.
Returns a [Card](#card).
# Muting and unmuting users
#### Getting who reblogged/favourited a status:
**POST /api/v1/accounts/:id/mute**
**POST /api/v1/accounts/:id/unmute**
GET /api/v1/statuses/:id/reblogged_by
GET /api/v1/statuses/:id/favourited_by
Returns the updated relationship to the user.
Returns an array of [Accounts](#account).
### OAuth apps
#### Posting a new status:
**POST /api/v1/apps**
POST /api/v1/statuses
Form data: Form data:
- `client_name`: Name of your application
- `redirect_uris`: Where the user should be redirected after authorization (for no redirect, use `urn:ietf:wg:oauth:2.0:oob`)
- `scopes`: This can be a space-separated list of the following items: "read", "write" and "follow" (see [this page](OAuth-details.md) for details on what the scopes do)
- `website`: (optional) URL to the homepage of your app
- `status`: The text of the status
- `in_reply_to_id` (optional): local ID of the status you want to reply to
- `media_ids` (optional): array of media IDs to attach to the status (maximum 4)
- `sensitive` (optional): set this to mark the media of the status as NSFW
- `spoiler_text` (optional): text to be shown as a warning before the actual content
- `visibility` (optional): either "direct", "private", "unlisted" or "public"
Creates a new OAuth app. Returns `id`, `client_id` and `client_secret` which can be used with [OAuth authentication in your 3rd party app](Testing-with-cURL.md).
Returns the new [Status](#status).
These values should be requested in the app itself from the API for each new app install + mastodon domain combo, and stored in the app for future requests.
#### Deleting a status:
DELETE /api/v1/statuses/:id
Returns an empty object.
#### Reblogging/unreblogging a status:
POST /api/vi/statuses/:id/reblog
POST /api/vi/statuses/:id/unreblog
Returns the target [Status](#status).
#### Favouriting/unfavouriting a status:
POST /api/vi/statuses/:id/favourite
POST /api/vi/statuses/:id/unfavourite
Returns the target [Status](#status).
### Timelines
#### Retrieving a timeline:
GET /api/v1/timelines/home
GET /api/v1/timelines/public
GET /api/v1/timelines/tag/:hashtag
Query parameters:
- `local` (optional; public and tag timelines only): Only return statuses originating from this instance
Returns an array of [Statuses](#status), most recent ones first.
___ ___
## Entities ## Entities
### Status
### Account
| Attribute | Description |
|---------------------|-------------|
| `id` ||
| `uri` | fediverse-unique resource ID |
| `url` | URL to the status page (can be remote) |
| `account` | Account |
| `in_reply_to_id` | null or ID of status it replies to |
| `reblog` | null or Status|
| `content` | Body of the status. This will contain HTML (remote HTML already sanitized) |
| `created_at` ||
| `reblogs_count` ||
| `favourites_count` ||
| `reblogged` | Boolean for authenticated user |
| `favourited` | Boolean for authenticated user |
| `sensitive` | Boolean, true if media attachments should be hidden by default |
| `spoiler_text` | If not empty, warning text that should be displayed before the actual content |
| `visibility` | Either `public`, `unlisted` or `private` |
| `media_attachments` | array of MediaAttachments |
| `mentions` | array of Mentions |
| `application` | Application from which the status was posted |
Media Attachment:
| Attribute | Description |
|---------------------|-------------|
| `url` | URL of the original image (can be remote) |
| `preview_url` | URL of the preview image |
| `type` | Image or video |
Mention:
| Attribute | Description |
|---------------------|-------------|
| `url` | URL of user's profile (can be remote) |
| `acct` | Username for local or username@domain for remote users |
| `id` | Account ID |
Application:
| Attribute | Description |
|---------------------|-------------|
| `name` | Name of the app |
| `website` | Homepage URL of the app |
| Attribute | Description |
| ------------------------ | ----------- |
| `id` | The ID of the account |
| `username` | The username of the account |
| `acct` | Equals `username` for local users, includes `@domain` for remote ones |
| `display_name` | The account's display name |
| `note` | Biography of user |
| `url` | URL of the user's profile page (can be remote) |
| `avatar` | URL to the avatar image |
| `header` | URL to the header image |
| `locked` | Boolean for when the account cannot be followed without waiting for approval first |
| `created_at` | The time the account was created |
| `followers_count` | The number of followers for the account |
| `following_count` | The number of accounts the given account is following |
| `statuses_count` | The number of statuses the account has made |
### Application
| Attribute | Description |
| ------------------------ | ----------- |
| `name` | Name of the app |
| `website` | Homepage URL of the app |
### Attachment
| Attribute | Description |
| ------------------------ | ----------- |
| `id` | ID of the attachment |
| `type` | One of: "image", "video", "gifv" |
| `url` | URL of the locally hosted version of the image |
| `remote_url` | For remote images, the remote URL of the original image |
| `preview_url` | URL of the preview image |
| `text_url` | Shorter URL for the image, for insertion into text (only present on local images) |
### Card
| Attribute | Description |
| ------------------------ | ----------- |
| `url` | The url associated with the card |
| `title` | The title of the card |
| `description` | The card description |
| `image` | The image associated with the card, if any |
### Context
| Attribute | Description |
| ------------------------ | ----------- |
| `ancestors` | The ancestors of the status in the conversation, as a list of [Statuses](#status) |
| `descendants` | The descendants of the status in the conversation, as a list of [Statuses](#status) |
### Error
| Attribute | Description |
| ------------------------ | ----------- |
| `error` | A textual description of the error |
### Instance
| Attribute | Description |
| ------------------------ | ----------- |
| `uri` | URI of the current instance |
| `title` | The instance's title |
| `description` | A description for the instance |
| `email` | An email address which can be used to contact the instance administrator |
### Mention
| Attribute | Description |
| ------------------------ | ----------- |
| `url` | URL of user's profile (can be remote) |
| `username` | The username of the account |
| `acct` | Equals `username` for local users, includes `@domain` for remote ones |
| `id` | Account ID |
### Account
### Notifications
| Attribute | Description |
| ------------------------ | ----------- |
| `id` | The notification ID |
| `type` | One of: "mention", "reblog", "favourite", "follow" |
| `created_at` | The time the notification was created |
| `account` | The [Account](#account) sending the notification to the user |
| `status` | The [Status](#status) associated with the notification, if applicible |
### Relationships
| Attribute | Description |
| ------------------------ | ----------- |
| `following` | Whether the user is currently following the account |
| `followed_by` | Whether the user is currently being followed by the account |
| `blocking` | Whether the user is currently blocking the account |
| `muting` | Whether the user is currently muting the account |
| `requested` | Whether the user has requested to follow the account |
### Report
| Attribute | Description |
| ------------------------ | ----------- |
| `id` | The ID of the report |
| `action_taken` | The action taken in response to the report |
### Results
| Attribute | Description |
| ------------------------ | ----------- |
| `accounts` | An array of matched [Accounts](#account) |
| `statuses` | An array of matchhed [Statuses](#status) |
| `hashtags` | An array of matched hashtags, as strings |
### Status
| Attribute | Description |
|-------------------|-------------|
| `id` ||
| `username` ||
| `acct` | Equals username for local users, includes @domain for remote ones |
| `display_name` ||
| `note` | Biography of user |
| `url` | URL of the user's profile page (can be remote) |
| `avatar` | URL to the avatar image |
| `header` | URL to the header image |
| `locked` | Boolean for when the account cannot be followed without waiting for approval first |
| `followers_count` ||
| `following_count` ||
| `statuses_count` ||
## Pagination
API methods that return collections of items can return a `Link` header containing URLs for the `next` and `prev` pages. [Link header RFC](https://tools.ietf.org/html/rfc5988)
| Attribute | Description |
| ------------------------ | ----------- |
| `id` | The ID of the status |
| `uri` | A Fediverse-unique resource ID |
| `url` | URL to the status page (can be remote) |
| `account` | The [Account](#account) which posted the status |
| `in_reply_to_id` | `null` or the ID of the status it replies to |
| `in_reply_to_account_id` | `null` or the ID of the account it replies to |
| `reblog` | `null` or the reblogged [Status](#status) |
| `content` | Body of the status; this will contain HTML (remote HTML already sanitized) |
| `created_at` | The time the status was created |
| `reblogs_count` | The number of reblogs for the status |
| `favourites_count` | The number of favourites for the status |
| `reblogged` | Whether the authenticated user has reblogged the status |
| `favourited` | Whether the authenticated user has favourited the status |
| `sensitive` | Whether media attachments should be hidden by default |
| `spoiler_text` | If not empty, warning text that should be displayed before the actual content |
| `visibility` | One of: `public`, `unlisted`, `private`, `direct` |
| `media_attachments` | An array of [Attachments](#attachment) |
| `mentions` | An array of [Mentions](#mention) |
| `tags` | An array of [Tags](#tag) |
| `application` | [Application](#application) from which the status was posted |
### Tags
| Attribute | Description |
| ------------------------ | ----------- |
| `name` | The hashtag, not including the preceding `#` |
| `url` | The URL of the hashtag |

Loading…
Cancel
Save