523 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			523 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| API overview
 | |
| ============
 | |
| 
 | |
| ## Contents
 | |
| 
 | |
| - [Available libraries](#available-libraries)
 | |
| - [Notes](#notes)
 | |
| - [Methods](#methods)
 | |
|   - [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)
 | |
|   - [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
 | |
| 
 | |
| - [For Ruby](https://github.com/tootsuite/mastodon-api)
 | |
| - [For Python](https://github.com/halcy/Mastodon.py)
 | |
| - [For JavaScript](https://github.com/Zatnosk/libodonjs)
 | |
| - [For JavaScript (Node.js)](https://github.com/jessicahayley/node-mastodon)
 | |
| 
 | |
| ___
 | |
| 
 | |
| ## Notes
 | |
| 
 | |
| ### 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.
 | |
| 
 | |
| ### 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
 | |
| 
 | |
| ### Accounts
 | |
| 
 | |
| #### Fetching an account:
 | |
| 
 | |
|     GET /api/v1/accounts/:id
 | |
| 
 | |
| Returns an [Account](#account).
 | |
| 
 | |
| #### Getting the current user:
 | |
| 
 | |
|     GET /api/v1/accounts/verify_credentials
 | |
| 
 | |
| Returns the authenticated user's [Account](#account).
 | |
| 
 | |
| #### Getting an account's followers:
 | |
| 
 | |
|     GET /api/v1/accounts/:id/followers
 | |
| 
 | |
| Returns an array of [Accounts](#account).
 | |
| 
 | |
| #### Getting who account is following:
 | |
| 
 | |
|     GET /api/v1/accounts/:id/following
 | |
| 
 | |
| Returns an array of [Accounts](#account).
 | |
| 
 | |
| #### Getting an account's statuses:
 | |
| 
 | |
|     GET /api/v1/accounts/:id/statuses
 | |
| 
 | |
| Query parameters:
 | |
| 
 | |
| - `only_media` (optional): Only return statuses that have media attachments
 | |
| - `exclude_replies` (optional): Skip statuses that reply to other statuses
 | |
| 
 | |
| Returns an array of [Statuses](#status).
 | |
| 
 | |
| #### Following/unfollowing an account:
 | |
| 
 | |
|     GET /api/v1/accounts/:id/follow
 | |
|     GET /api/v1/accounts/:id/unfollow
 | |
| 
 | |
| Returns the target [Account](#account).
 | |
| 
 | |
| #### Blocking/unblocking an account:
 | |
| 
 | |
|     GET /api/v1/accounts/:id/block
 | |
|     GET /api/v1/accounts/:id/unblock
 | |
| 
 | |
| Returns the target [Account](#account).
 | |
| 
 | |
| #### Muting/unmuting an account:
 | |
| 
 | |
|     GET /api/v1/accounts/:id/mute
 | |
|     GET /api/v1/accounts/:id/unmute
 | |
| 
 | |
| Returns the target [Account](#account).
 | |
| 
 | |
| #### 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:
 | |
| 
 | |
| - `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
 | |
| 
 | |
| 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).
 | |
| 
 | |
| 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.
 | |
| 
 | |
| ### Blocks
 | |
| 
 | |
| #### Fetching a user's blocks:
 | |
| 
 | |
|     GET /api/v1/blocks
 | |
| 
 | |
| Returns an array of [Accounts](#account) blocked by the authenticated user.
 | |
| 
 | |
| ### Favourites
 | |
| 
 | |
| #### Fetching a user's favourites:
 | |
| 
 | |
|     GET /api/v1/favourites
 | |
| 
 | |
| Returns an array of [Statuses](#status) favourited by the authenticated user.
 | |
| 
 | |
| ### Follow Requests
 | |
| 
 | |
| #### Fetching a list of follow requests:
 | |
| 
 | |
|     GET /api/v1/follow_requests
 | |
| 
 | |
| Returns an array of [Accounts](#account) which have requested to follow the authenticated user.
 | |
| 
 | |
| #### Authorizing or rejecting follow requests:
 | |
| 
 | |
|     POST /api/v1/follow_requests/authorize
 | |
|     POST /api/v1/follow_requests/reject
 | |
| 
 | |
| Form data:
 | |
| 
 | |
| - `id`: The id of the account to authorize or reject
 | |
| 
 | |
| Returns an empty object.
 | |
| 
 | |
| ### Follows
 | |
| 
 | |
| #### Following a remote user:
 | |
| 
 | |
|     POST /api/v1/follows
 | |
| 
 | |
| Form data:
 | |
| 
 | |
| - `uri`: `username@domain` of the person you want to follow
 | |
| 
 | |
| Returns the local representation of the followed account, as an [Account](#account).
 | |
| 
 | |
| ### Instances
 | |
| 
 | |
| #### Getting instance information:
 | |
| 
 | |
|     GET /api/v1/instance
 | |
| 
 | |
| Returns the current [Instance](#instance).
 | |
| Does not require authentication.
 | |
| 
 | |
| ### Media
 | |
| 
 | |
| #### Uploading a media attachment:
 | |
| 
 | |
|     POST /api/v1/media
 | |
| 
 | |
| Form data:
 | |
| 
 | |
| - `file`: Media to be uploaded
 | |
| 
 | |
| Returns an [Attachment](#attachment) that can be used when creating a status.
 | |
| 
 | |
| ### 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:
 | |
| 
 | |
|     POST /api/v1/notifications/clear
 | |
| 
 | |
| Deletes all notifications from the Mastodon server for the authenticated user.
 | |
| Returns an empty object.
 | |
| 
 | |
| ### Reports
 | |
| 
 | |
| #### Fetching a user's reports:
 | |
| 
 | |
|     GET /api/v1/reports
 | |
| 
 | |
| Returns a list of [Reports](#report) made by the authenticated user.
 | |
| 
 | |
| #### Reporting a user:
 | |
| 
 | |
|     POST /api/v1/reports
 | |
| 
 | |
| Form data:
 | |
| 
 | |
| - `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.
 | |
| 
 | |
| Returns the finished [Report](#report).
 | |
| 
 | |
| ### Search
 | |
| 
 | |
| #### Searching for content:
 | |
| 
 | |
|     GET /api/v1/search
 | |
| 
 | |
| Form data:
 | |
| 
 | |
| - `q`: The search query
 | |
| - `resolve`: Whether to resolve non-local accounts
 | |
| 
 | |
| 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.
 | |
| 
 | |
| ### Statuses
 | |
| 
 | |
| #### Fetching a status:
 | |
| 
 | |
|     GET /api/v1/statuses/:id
 | |
| 
 | |
| Returns a [Status](#status).
 | |
| 
 | |
| #### Getting status context:
 | |
| 
 | |
|     GET /api/v1/statuses/:id/context
 | |
| 
 | |
| Returns a [Context](#context).
 | |
| 
 | |
| #### Getting a card associated with a status:
 | |
| 
 | |
|     GET /api/v1/statuses/:id/card
 | |
| 
 | |
| Returns a [Card](#card).
 | |
| 
 | |
| #### Getting who reblogged/favourited a status:
 | |
| 
 | |
|     GET /api/v1/statuses/:id/reblogged_by
 | |
|     GET /api/v1/statuses/:id/favourited_by
 | |
| 
 | |
| Returns an array of [Accounts](#account).
 | |
| 
 | |
| #### Posting a new status:
 | |
| 
 | |
|     POST /api/v1/statuses
 | |
| 
 | |
| Form data:
 | |
| 
 | |
| - `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"
 | |
| 
 | |
| Returns the new [Status](#status).
 | |
| 
 | |
| #### 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
 | |
| 
 | |
| ### Account
 | |
| 
 | |
| | 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 |
 | |
| 
 | |
| ### 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`                     | 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 |
 |