diff --git a/deps.hex b/deps.hex index 663ad2c..be48d29 100755 --- a/deps.hex +++ b/deps.hex @@ -10,3 +10,4 @@ geo = "~> 3.3" zest = "~> 0.1" dataloader = "~> 2.0.0" absinthe_relay = "~> 1.5.2" +apical = "~> 0.2.1" \ No newline at end of file diff --git a/lib/rest/masto_compatible/masto_compatible.ex b/lib/rest/masto_compatible/masto_compatible.ex new file mode 100644 index 0000000..752a2e1 --- /dev/null +++ b/lib/rest/masto_compatible/masto_compatible.ex @@ -0,0 +1,3 @@ +defmodule Bonfire.API.MastoCompatible do + use Bonfire.UI.Common.Web, :controller +end diff --git a/lib/rest/rest_adapter.ex b/lib/rest/rest_adapter.ex index 272dfd9..bfcff5c 100644 --- a/lib/rest/rest_adapter.ex +++ b/lib/rest/rest_adapter.ex @@ -14,14 +14,15 @@ defmodule Bonfire.API.GraphQL.RestAdapter do } end - def return(name, ret, conn) do + def return(name, ret, conn, transform_fun \\ nil) do case ret do %{data: data, errors: errors} -> + # TODO: include in response? error(errors, "partial_graphql_errors") - {:ok, ret_data(data, name)} + {:ok, ret_data(data, name) |> transform_data(transform_fun)} %{data: data} -> - {:ok, ret_data(data, name)} + {:ok, ret_data(data, name) |> transform_data(transform_fun)} %{errors: errors} -> error(errors) @@ -42,13 +43,12 @@ defmodule Bonfire.API.GraphQL.RestAdapter do end end - defp transform_response(response, conn, transform_fun \\ nil) - defp transform_response({:ok, response}, conn, _), do: success_fn(response, conn) - defp transform_response({:error, response}, conn, _), do: error_fn(response, conn) + defp transform_response({:ok, response}, conn), do: success_fn(response, conn) + defp transform_response({:error, response}, conn), do: error_fn(response, conn) def success_fn(response, conn) do # Plug.Conn.send_resp(conn, 200, Jason.encode!(transform_data(response))) - Phoenix.Controller.json(conn, transform_data(response)) + Phoenix.Controller.json(conn, response) end def error_fn(response, conn) do @@ -56,6 +56,13 @@ defmodule Bonfire.API.GraphQL.RestAdapter do Plug.Conn.send_resp(conn, 500, Jason.encode!(transform_data(response))) end + def transform_data(data, transform_fun) when is_function(transform_fun, 1) do + transform_fun.(data) + |> transform_data() + end + + def transform_data(data, _), do: transform_data(data) + def transform_data(data) when is_binary(data), do: data def transform_data(%{} = data), do: Enums.maybe_to_map(data, true) def transform_data(data) when is_list(data), do: Enum.map(data, &transform_data/1) diff --git a/lib/web/router.ex b/lib/web/graphql_router.ex old mode 100755 new mode 100644 similarity index 100% rename from lib/web/router.ex rename to lib/web/graphql_router.ex diff --git a/lib/web/masto_compatible_router.ex b/lib/web/masto_compatible_router.ex new file mode 100644 index 0000000..6fed1e3 --- /dev/null +++ b/lib/web/masto_compatible_router.ex @@ -0,0 +1,27 @@ +defmodule Bonfire.API.GraphQL.MastoCompatible.Router do + @api_spec Path.join(:code.priv_dir(:bonfire_api_graphql), "specs/akkoma-openapi.json") + + defmacro include_masto_api do + quote do + scope "/" do + pipe_through(:basic_json) + pipe_through(:load_current_auth) + + # add here to override wrong priority order of routes + get "/api/v1/accounts/verify_credentials", + Bonfire.API.MastoCompatible.AccountController, + :verify_credentials + + get "/api/v1/accounts/:id", Bonfire.API.MastoCompatible.AccountController, :show + + # require Apical + # Apical.router_from_file(unquote(@api_spec), + # controller: Bonfire.API.MastoCompatible, + # nest_all_json: false, # If enabled, nest all json request body payloads under the "_json" key. Otherwise objects payloads will be merged into `conn.params`. + # root: "/", + # dump: :all # temp: ony for debug + # ) + end + end + end +end diff --git a/priv/specs/akkoma-openapi.json b/priv/specs/akkoma-openapi.json new file mode 100644 index 0000000..6d22369 --- /dev/null +++ b/priv/specs/akkoma-openapi.json @@ -0,0 +1,28301 @@ +{ + "components": { + "parameters": { + "accountIdOrNickname": { + "description": "Account ID or nickname", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + }, + "responses": {}, + "schemas": { + "FrontendInstallRequest": { + "properties": { + "build_dir": { + "type": "string" + }, + "build_url": { + "type": "string" + }, + "file": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "FrontendInstallRequest", + "type": "object" + }, + "RemoteInteractionRequest": { + "description": "POST body for remote interaction", + "properties": { + "ap_id": { + "description": "Profile or status ActivityPub ID", + "type": "string" + }, + "profile": { + "description": "Remote profile webfinger", + "type": "string" + } + }, + "required": [ + "ap_id", + "profile" + ], + "title": "RemoteInteractionRequest", + "type": "object" + }, + "Invite": { + + "properties": { + "expires_at": { + "format": "date", + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + }, + "invite_type": { + "enum": [ + "one_time", + "reusable", + "date_limited", + "reusable_date_limited" + ], + "type": "string" + }, + "max_use": { + "nullable": true, + "type": "integer" + }, + "token": { + "type": "string" + }, + "used": { + "type": "boolean" + }, + "uses": { + "type": "integer" + } + }, + "title": "Invite", + "type": "object" + }, + "ArrayOfLists": { + "description": "Response schema for lists", + + "items": { + "$ref": "#/components/schemas/List" + }, + "title": "ArrayOfLists", + "type": "array" + }, + "DeleteAliasRequest": { + "description": "PUT body for deleting aliases", + "properties": { + "alias": { + "description": "The nickname of the account to delete from aliases", + "type": "string" + } + }, + "required": [ + "alias" + ], + "title": "DeleteAliasRequest", + "type": "object" + }, + "AppCreateRequest": { + "description": "POST body for creating an app", + "example": { + "client_name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "website": "https://myapp.com/" + }, + "properties": { + "client_name": { + "description": "A name for your application.", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "default": "read", + "description": "Space separated list of scopes", + "type": "string" + }, + "website": { + "description": "A URL to the homepage of your app", + "nullable": true, + "type": "string" + } + }, + "required": [ + "client_name", + "redirect_uris" + ], + "title": "AppCreateRequest", + "type": "object" + }, + "MoveAccountRequest": { + "description": "POST body for moving the account", + "properties": { + "password": { + "description": "Current password", + "type": "string" + }, + "target_account": { + "description": "The nickname of the target account to move to", + "type": "string" + } + }, + "required": [ + "password", + "target_account" + ], + "title": "MoveAccountRequest", + "type": "object" + }, + "AccountFollowsRequest": { + "description": "POST body for muting an account", + "properties": { + "uri": { + "format": "uri", + "nullable": true, + "type": "string" + } + }, + "required": [ + "uri" + ], + "title": "AccountFollowsRequest", + "type": "object" + }, + "ChangePasswordRequest": { + "description": "POST body for changing the account's password", + "properties": { + "new_password": { + "description": "New password", + "type": "string" + }, + "new_password_confirmation": { + "description": "New password, confirmation", + "type": "string" + }, + "password": { + "description": "Current password", + "type": "string" + } + }, + "required": [ + "password", + "new_password", + "new_password_confirmation" + ], + "title": "ChangePasswordRequest", + "type": "object" + }, + "EmojiPack": { + "example": { + "files": { + "emacs": "emacs.png", + "guix": "guix.png" + }, + "pack": { + "can-download": true, + "description": "Test description", + "download-sha256": "57482F30674FD3DE821FF48C81C00DA4D4AF1F300209253684ABA7075E5FC238", + "homepage": "https://pleroma.social", + "license": "Test license", + "share-files": true + } + }, + "properties": { + "files": { + "additionalProperties": { + "type": "string" + }, + "description": "Object with emoji names as keys and filenames as values", + "type": "object" + }, + "pack": { + "properties": { + "can-download": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "download-sha256": { + "type": "string" + }, + "homepage": { + "format": "uri", + "type": "string" + }, + "license": { + "type": "string" + }, + "share-files": { + "type": "boolean" + } + }, + "type": "object" + } + }, + "title": "EmojiPack", + "type": "object" + }, + "FilterUpdateRequest": { + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "properties": { + "context": { + "description": "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire.", + "nullable": true, + "type": "integer" + }, + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Should the server irreversibly drop matching entities from home and notifications?", + "nullable": true + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Consider word boundaries?", + "nullable": true + } + }, + "required": [ + "phrase", + "context" + ], + "title": "FilterUpdateRequest", + "type": "object" + }, + "Status": { + "description": "Response schema for a status", + "properties": { + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "quote_id": { + "description": "ID of the status being quoted", + "nullable": true, + "type": "string" + }, + "akkoma": { + "properties": { + "source": { + "nullable": true, + "oneOf": [ + { + "example": [ + 112, + 108, + 97, + 105, + 110, + 116, + 101, + 120, + 116, + 32, + 99, + 111, + 110, + 116, + 101, + 110, + 116 + ], + "type": "string" + }, + { + "properties": { + "content": { + "description": "The source content of the status", + "nullable": true, + "type": "string" + }, + "mediaType": { + "description": "The source MIME type of the status", + "example": "text/plain", + "nullable": true, + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "type": "object" + }, + "content": { + "description": "HTML-encoded status content", + "format": "html", + "type": "string" + }, + "muted": { + "description": "Have you muted notifications for this status's conversation?", + "type": "boolean" + }, + "url": { + "description": "A link to the status's HTML representation", + "format": "uri", + "nullable": true, + "type": "string" + }, + "mentions": { + "description": "Mentions of users within the status content", + "items": { + "properties": { + "acct": { + "description": "The webfinger acct: URI of the mentioned user. Equivalent to `username` for local users, or `username@domain` for remote users.", + "type": "string" + }, + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "The account id of the mentioned user" + }, + "url": { + "description": "The location of the mentioned user's profile", + "format": "uri", + "type": "string" + }, + "username": { + "description": "The username of the mentioned user", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "quote": { + "allOf": [ + { + "$ref": "#/components/schemas/Status" + } + ], + "description": "Quoted status (if any)", + "nullable": true + }, + "created_at": { + "description": "The date when this status was created", + "format": "date-time", + "type": "string" + }, + "sensitive": { + "description": "Is this status marked as sensitive content?", + "type": "boolean" + }, + "favourited": { + "description": "Have you favourited this status?", + "type": "boolean" + }, + "text": { + "description": "Original unformatted content in plain text", + "nullable": true, + "type": "string" + }, + "in_reply_to_account_id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "ID of the account being replied to", + "nullable": true + }, + "language": { + "description": "Primary language of this status", + "nullable": true, + "type": "string" + }, + "pinned": { + "description": "Have you pinned this status? Only appears if the status is pinnable.", + "type": "boolean" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/Tag" + }, + "type": "array" + }, + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + } + ], + "description": "The account that authored this status" + }, + "application": { + "description": "The application used to post this status", + "nullable": true, + "properties": { + "name": { + "type": "string" + }, + "website": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "visibility": { + "allOf": [ + { + "$ref": "#/components/schemas/VisibilityScope" + } + ], + "description": "Visibility of this status" + }, + "in_reply_to_id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "ID of the status being replied", + "nullable": true + }, + "reblogs_count": { + "description": "How many boosts this status has received", + "type": "integer" + }, + "reblogged": { + "description": "Have you boosted this status?", + "type": "boolean" + }, + "spoiler_text": { + "description": "Subject or summary line, below which status content is collapsed until expanded", + "type": "string" + }, + "pleroma": { + "properties": { + "content": { + "additionalProperties": { + "type": "string" + }, + "description": "A map consisting of alternate representations of the `content` property with the key being it's mimetype. Currently the only alternate representation supported is `text/plain`", + "type": "object" + }, + "context": { + "description": "The thread identifier the status is associated with", + "type": "string" + }, + "conversation_id": { + "deprecated": true, + "description": "The ID of the AP context the status is associated with (if any); deprecated, please use `context` instead", + "type": "integer" + }, + "direct_conversation_id": { + "description": "The ID of the Mastodon direct message conversation the status is associated with (if any)", + "nullable": true, + "type": "integer" + }, + "emoji_reactions": { + "description": "A list with emoji / reaction maps. Contains no information about the reacting users, for that use the /statuses/:id/reactions endpoint.", + "items": { + "properties": { + "count": { + "type": "integer" + }, + "me": { + "type": "boolean" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "expires_at": { + "description": "A datetime (ISO 8601) that states when the post will expire (be deleted automatically), or empty if the post won't expire", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "in_reply_to_account_acct": { + "description": "The `acct` property of User entity for replied user (if any)", + "nullable": true, + "type": "string" + }, + "local": { + "description": "`true` if the post was made on the local instance", + "type": "boolean" + }, + "parent_visible": { + "description": "`true` if the parent post is visible to the user", + "type": "boolean" + }, + "pinned_at": { + "description": "A datetime (ISO 8601) that states when the post was pinned or `null` if the post is not pinned", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "spoiler_text": { + "additionalProperties": { + "type": "string" + }, + "description": "A map consisting of alternate representations of the `spoiler_text` property with the key being it's mimetype. Currently the only alternate representation supported is `text/plain`.", + "type": "object" + }, + "thread_muted": { + "description": "`true` if the thread the post belongs to is muted", + "type": "boolean" + } + }, + "type": "object" + }, + "replies_count": { + "description": "How many replies this status has received", + "type": "integer" + }, + "card": { + "description": "Preview card for links included within status content", + "nullable": true, + "properties": { + "description": { + "description": "Description of preview", + "type": "string" + }, + "image": { + "description": "Preview thumbnail", + "format": "uri", + "nullable": true, + "type": "string" + }, + "provider_name": { + "description": "The provider of the original resource", + "nullable": true, + "type": "string" + }, + "provider_url": { + "description": "A link to the provider of the original resource", + "format": "uri", + "type": "string" + }, + "title": { + "description": "Title of linked resource", + "type": "string" + }, + "type": { + "description": "The type of the preview card", + "enum": [ + "link", + "photo", + "video", + "rich" + ], + "type": "string" + }, + "url": { + "description": "Location of linked resource", + "format": "uri", + "type": "string" + } + }, + "required": [ + "url", + "title", + "description", + "type" + ], + "type": "object" + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/Status" + } + ], + "description": "The status being reblogged", + "nullable": true + }, + "emojis": { + "description": "Custom emoji to be used when rendering status content", + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "bookmarked": { + "description": "Have you bookmarked this status?", + "type": "boolean" + }, + "favourites_count": { + "description": "How many favourites this status has received", + "type": "integer" + }, + "edited_at": { + "description": "The date when this status was last edited", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/Poll" + } + ], + "description": "The poll attached to the status", + "nullable": true + }, + "media_attachments": { + "description": "Media that is attached to this status", + "items": { + "$ref": "#/components/schemas/Attachment" + }, + "type": "array" + }, + "uri": { + "description": "URI of the status used for federation", + "format": "uri", + "type": "string" + } + }, + "title": "Status", + "type": "object" + }, + "CustomEmoji": { + "allOf": [ + { + "$ref": "#/components/schemas/Emoji" + }, + { + "properties": { + "category": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + ], + "description": "Schema for a CustomEmoji", + "example": { + "category": "Fun", + "shortcode": "aaaa", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/007/118/static/aaaa.png", + "tags": [ + "Gif", + "Fun" + ], + "url": "https://files.mastodon.social/custom_emojis/images/000/007/118/original/aaaa.png", + "visible_in_picker": true + }, + "title": "CustomEmoji" + }, + "EmojiReaction": { + + "properties": { + "accounts": { + "description": "Array of accounts reacted with this emoji", + "items": { + "$ref": "#/components/schemas/Account" + }, + "type": "array" + }, + "count": { + "description": "Count of reactions with this emoji", + "type": "integer" + }, + "me": { + "description": "Did I react with this emoji?", + "type": "boolean" + }, + "name": { + "description": "Emoji", + "type": "string" + }, + "url": { + "description": "URL of the emoji if it's custom - otherwise null", + "format": "url", + "nullable": true, + "type": "string" + } + }, + "title": "EmojiReaction", + "type": "object" + }, + "StatusCreateRequest": { + "example": { + "poll": { + "expires_in": 420, + "options": [ + "Cofe", + "Adventure" + ] + }, + "sensitive": "false", + "status": "What time is it?" + }, + "properties": { + "content_type": { + "description": "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "The number of seconds the posted activity should expire in. When a posted activity expires it will be deleted from the server, and a delete request for it will be federated. This needs to be longer than an hour.", + "nullable": true, + "type": "integer" + }, + "in_reply_to_conversation_id": { + "description": "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`.", + "nullable": true, + "type": "string" + }, + "in_reply_to_id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "ID of the status being replied to, if status is a reply", + "nullable": true + }, + "language": { + "description": "ISO 639 language code for this status.", + "nullable": true, + "type": "string" + }, + "media_ids": { + "description": "Array of Attachment ids to be attached as media.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "preview": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "If set to `true` the post won't be actually posted, but the status entitiy would still be rendered back. This could be useful for previewing rich text/custom emoji, for example", + "nullable": true + }, + "quote_id": { + "description": "Will quote a given status.", + "nullable": true, + "type": "string" + }, + "scheduled_at": { + "description": "ISO 8601 Datetime at which to schedule a status. Providing this paramter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "sensitive": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Mark status and attached media as sensitive?", + "nullable": true + }, + "spoiler_text": { + "description": "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided.", + "nullable": true, + "type": "string" + }, + "to": { + "description": "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "visibility": { + "anyOf": [ + { + "$ref": "#/components/schemas/VisibilityScope" + }, + { + "description": "`list:LIST_ID`", + "example": "LIST:123", + "type": "string" + } + ], + "description": "Visibility of the posted status. Besides standard MastoAPI values (`direct`, `private`, `unlisted` or `public`) it can be used to address a List by setting it to `list:LIST_ID`", + "nullable": true + } + }, + "title": "StatusCreateRequest", + "type": "object" + }, + "InstanceDocument": { + "example": { + "url": "https://example.com/static/terms-of-service.html" + }, + "properties": { + "url": { + "type": "string" + } + }, + "title": "InstanceDocument", + "type": "object" + }, + "ReportResponse": { + + "properties": { + "action_taken": { + "description": "Is action taken?", + "type": "boolean" + }, + "id": { + "description": "Report ID", + "type": "string" + } + }, + "title": "ReportResponse", + "type": "object" + }, + "FlakeID": { + "description": "Pleroma uses 128-bit ids as opposed to Mastodon's 64 bits. However just like Mastodon's ids they are lexically sortable strings", + "title": "FlakeID", + "type": "string" + }, + "Emoji": { + "description": "Response schema for an emoji", + "example": { + "shortcode": "fatyoshi", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/023/920/static/e57ecb623faa0dc9.png", + "url": "https://files.mastodon.social/custom_emojis/images/000/023/920/original/e57ecb623faa0dc9.png", + "visible_in_picker": true + }, + "properties": { + "shortcode": { + "type": "string" + }, + "static_url": { + "format": "uri", + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + }, + "visible_in_picker": { + "type": "boolean" + } + }, + "title": "Emoji", + "type": "object" + }, + "MarkersUpsertRequest": { + "description": "Request schema for marker upsert", + "example": { + "home": { + "last_read_id": "103194548672408537", + "updated_at": "2019-11-24T19:39:39.337Z", + "version": 462 + } + }, + "properties": { + "home": { + "nullable": true, + "properties": { + "last_read_id": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "notifications": { + "nullable": true, + "properties": { + "last_read_id": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + } + }, + "title": "MarkersUpsertRequest", + "type": "object" + }, + "AccountRelationship": { + "description": "Relationship between current account and requested account", + + "properties": { + "blocked_by": { + "description": "Represents being blocked by this user. Always false.", + "type": "boolean" + }, + "blocking": { + "type": "boolean" + }, + "domain_blocking": { + "type": "boolean" + }, + "endorsed": { + "type": "boolean" + }, + "followed_by": { + "type": "boolean" + }, + "following": { + "type": "boolean" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "muting": { + "type": "boolean" + }, + "muting_notifications": { + "type": "boolean" + }, + "note": { + "type": "string" + }, + "notifying": { + "type": "boolean" + }, + "requested": { + "type": "boolean" + }, + "showing_reblogs": { + "type": "boolean" + }, + "subscribing": { + "type": "boolean" + } + }, + "title": "AccountRelationship", + "type": "object" + }, + "Status history": { + "description": "Response schema for history of a status", + "items": { + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + } + ], + "description": "The account that authored this status" + }, + "content": { + "description": "HTML-encoded status content", + "format": "html", + "type": "string" + }, + "created_at": { + "description": "The date when this status was created", + "format": "date-time", + "type": "string" + }, + "emojis": { + "description": "Custom emoji to be used when rendering status content", + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "media_attachments": { + "description": "Media that is attached to this status", + "items": { + "$ref": "#/components/schemas/Attachment" + }, + "type": "array" + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/Poll" + } + ], + "description": "The poll attached to the status", + "nullable": true + }, + "sensitive": { + "description": "Is this status marked as sensitive content?", + "type": "boolean" + }, + "spoiler_text": { + "description": "Subject or summary line, below which status content is collapsed until expanded", + "type": "string" + } + }, + "type": "object" + }, + "title": "Status history", + "type": "array" + }, + "Poll": { + "description": "Represents a poll attached to a status", + + "properties": { + "emojis": { + "description": "Custom emoji to be used for rendering poll options.", + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "expired": { + "description": "Is the poll currently expired?", + "type": "boolean" + }, + "expires_at": { + "description": "When the poll ends", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "multiple": { + "description": "Does the poll allow multiple-choice answers?", + "type": "boolean" + }, + "options": { + "description": "Possible answers for the poll.", + "items": { + "properties": { + "title": { + "type": "string" + }, + "votes_count": { + "type": "integer" + } + }, + "title": "PollOption", + "type": "object" + }, + "type": "array" + }, + "voted": { + "description": "When called with a user token, has the authorized user voted? Boolean, or null if no current user.", + "nullable": true, + "type": "boolean" + }, + "voters_count": { + "description": "How many unique accounts have voted. Number.", + "type": "integer" + }, + "votes_count": { + "description": "How many votes have been received. Number.", + "type": "integer" + } + }, + "title": "Poll", + "type": "object" + }, + "Account": { + "description": "Account view for admins", + "properties": { + "acct": { + "type": "string" + }, + "akkoma": { + "properties": { + "instance": { + "nullable": true, + "properties": { + "favicon": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "name": { + "type": "string" + }, + "nodeinfo": { + "nullable": true, + "type": "object" + } + }, + "type": "object" + }, + "permit_followback": { + "type": "boolean" + }, + "status_ttl_days": { + "nullable": true, + "type": "integer" + } + }, + "type": "object" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "avatar_static": { + "format": "uri", + "type": "string" + }, + "bot": { + "type": "boolean" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "emojis": { + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "follow_requests_count": { + "type": "integer" + }, + "followers_count": { + "type": "integer" + }, + "following_count": { + "type": "integer" + }, + "header": { + "format": "uri", + "type": "string" + }, + "header_static": { + "format": "uri", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "is_active": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "locked": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "note": { + "format": "html", + "type": "string" + }, + "pleroma": { + "properties": { + "allow_following_move": { + "description": "whether the user allows automatically follow moved following accounts", + "type": "boolean" + }, + "also_known_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ap_id": { + "type": "string" + }, + "background_image": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "favicon": { + "description": "Favicon image of the user's instance", + "format": "uri", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "type": "boolean" + }, + "hide_followers": { + "description": "whether the user has follower hiding enabled", + "type": "boolean" + }, + "hide_followers_count": { + "description": "whether the user has follower stat hiding enabled", + "type": "boolean" + }, + "hide_follows": { + "description": "whether the user has follow hiding enabled", + "type": "boolean" + }, + "hide_follows_count": { + "description": "whether the user has follow stat hiding enabled", + "type": "boolean" + }, + "is_admin": { + "description": "whether the user is an admin of the local instance", + "type": "boolean" + }, + "is_confirmed": { + "description": "whether the user account is waiting on email confirmation to be activated", + "type": "boolean" + }, + "is_moderator": { + "description": "whether the user is a moderator of the local instance", + "type": "boolean" + }, + "notification_settings": { + "properties": { + "block_from_strangers": { + "type": "boolean" + }, + "hide_notification_contents": { + "type": "boolean" + } + }, + "type": "object" + }, + "relationship": { + "allOf": [ + { + "$ref": "#/components/schemas/AccountRelationship" + } + ], + "nullable": true + }, + "settings_store": { + "description": "A generic map of settings for frontends. Opaque to the backend. Only returned in `verify_credentials` and `update_credentials`", + "type": "object" + }, + "skip_thread_containment": { + "type": "boolean" + }, + "tags": { + "description": "List of tags being used for things like extra roles or moderation(ie. marking all media as nsfw all).", + "items": { + "type": "string" + }, + "type": "array" + }, + "unread_conversation_count": { + "description": "The count of unread conversations. Only returned to the account owner.", + "type": "integer" + } + }, + "type": "object" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "source": { + "properties": { + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "note": { + "description": "Plaintext version of the bio without formatting applied by the backend, used for editing the bio.", + "type": "string" + }, + "pleroma": { + "properties": { + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "discoverable": { + "description": "whether the user allows indexing / listing of the account by external services (search engines etc.).", + "type": "boolean" + }, + "no_rich_text": { + "description": "whether the HTML tags for rich-text formatting are stripped from all statuses requested from the API.", + "type": "boolean" + }, + "show_role": { + "description": "whether the user wants their role (e.g admin, moderator) to be shown", + "type": "boolean" + } + }, + "type": "object" + }, + "privacy": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "sensitive": { + "type": "boolean" + } + }, + "type": "object" + }, + "statuses_count": { + "type": "integer" + }, + "url": { + "format": "uri", + "type": "string" + }, + "username": { + "type": "string" + } + }, + "title": "Account", + "type": "object" + }, + "AnnouncementChangeRequest": { + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "title": "AnnouncementChangeRequest", + "type": "object" + }, + "Frontend Setting Profile": { + "properties": { + "settings": { + "description": "Settings of the profile", + "example": { + "locale": "en", + "theme": "dark" + }, + "type": "object" + }, + "version": { + "description": "Version of the profile, must increment by 1 each time", + "example": 1, + "type": "integer" + } + }, + "required": [ + "version", + "settings" + ], + "title": "Frontend Setting Profile", + "type": "object" + }, + "AccountUpdateCredentialsRequest": { + "description": "POST body for creating an account", + "example": { + "accepts_direct_messages_from": "everybody", + "actor_type": "Person", + "allow_following_move": false, + "also_known_as": [ + "https://foo.bar/users/foo" + ], + "bot": false, + "default_scope": "private", + "discoverable": false, + "display_name": "cofe", + "fields_attributes": [ + { + "name": "foo", + "value": "bar" + } + ], + "hide_favorites": false, + "hide_followers": true, + "hide_followers_count": false, + "hide_follows": false, + "hide_follows_count": false, + "no_rich_text": false, + "note": "foobar", + "permit_followback": true, + "pleroma_settings_store": { + "pleroma-fe": { + "key": "val" + } + }, + "show_role": false, + "skip_thread_containment": false, + "status_ttl_days": 30 + }, + "properties": { + "accepts_direct_messages_from": { + "description": "Who to accept DMs from", + "enum": [ + "everybody", + "nobody", + "people_i_follow" + ], + "nullable": true, + "type": "string" + }, + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "allow_following_move": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allows automatically follow moved following accounts", + "nullable": true + }, + "also_known_as": { + "description": "List of alternate ActivityPub IDs", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "avatar": { + "description": "Avatar image encoded using multipart/form-data", + "format": "binary", + "nullable": true, + "type": "string" + }, + "bot": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether the account has a bot flag.", + "nullable": true + }, + "default_scope": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "discoverable": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Discovery (listing, indexing) of this account by external services (search bots etc.) is allowed.", + "nullable": true + }, + "display_name": { + "description": "The display name to use for the profile.", + "nullable": true, + "type": "string" + }, + "fields_attributes": { + "nullable": true, + "oneOf": [ + { + "items": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "type": "object" + } + ] + }, + "header": { + "description": "Header image encoded using multipart/form-data", + "format": "binary", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's favorites timeline will be hidden", + "nullable": true + }, + "hide_followers": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's followers will be hidden", + "nullable": true + }, + "hide_followers_count": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follower count will be hidden", + "nullable": true + }, + "hide_follows": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follows will be hidden", + "nullable": true + }, + "hide_follows_count": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follow count will be hidden", + "nullable": true + }, + "locked": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether manual approval of follow requests is required.", + "nullable": true + }, + "no_rich_text": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "html tags are stripped from all statuses requested from the API", + "nullable": true + }, + "note": { + "description": "The account bio.", + "type": "string" + }, + "permit_followback": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether follow requests from accounts the user is already following are auto-approved (when locked).", + "nullable": true + }, + "pleroma_background_image": { + "description": "Sets the background image of the user.", + "format": "binary", + "nullable": true, + "type": "string" + }, + "pleroma_settings_store": { + "description": "Opaque user settings to be saved on the backend.", + "nullable": true, + "type": "object" + }, + "show_role": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's role (e.g admin, moderator) will be exposed to anyone in the\n API", + "nullable": true + }, + "skip_thread_containment": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Skip filtering out broken threads", + "nullable": true + }, + "status_ttl_days": { + "description": "Number of days after which statuses will be deleted. Set to -1 to disable.", + "nullable": true, + "type": "integer" + } + }, + "title": "AccountUpdateCredentialsRequest", + "type": "object" + }, + "MarkersResponse": { + "description": "Response schema for markers", + "example": { + "home": { + "last_read_id": "103206604258487607", + "pleroma": { + "unread_count": 10 + }, + "updated_at": "2019-11-26T22:37:25.235Z", + "version": 468 + }, + "notifications": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 0 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + } + }, + "items": { + "type": "string" + }, + "properties": { + "home": { + "allOf": [ + { + "description": "Schema for a marker", + "example": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 5 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + }, + "properties": { + "last_read_id": { + "type": "string" + }, + "pleroma": { + "properties": { + "unread_count": { + "type": "integer" + } + }, + "type": "object" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "title": "Marker", + "type": "object" + } + ], + "nullable": true + }, + "notifications": { + "allOf": [ + { + "description": "Schema for a marker", + "example": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 5 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + }, + "properties": { + "last_read_id": { + "type": "string" + }, + "pleroma": { + "properties": { + "unread_count": { + "type": "integer" + } + }, + "type": "object" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "title": "Marker", + "type": "object" + } + ], + "nullable": true + } + }, + "title": "MarkersResponse", + "type": "object" + }, + "Conversation": { + "description": "Represents a conversation with \"direct message\" visibility.", + "properties": { + "accounts": { + "description": "Participants in the conversation", + "items": { + "$ref": "#/components/schemas/Account" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "last_status": { + "allOf": [ + { + "$ref": "#/components/schemas/Status" + } + ], + "description": "The last status in the conversation, to be used for optional display" + }, + "unread": { + "description": "Is the conversation currently marked as unread?", + "type": "boolean" + } + }, + "required": [ + "id", + "accounts", + "unread" + ], + "title": "Conversation", + "type": "object" + }, + "ActorType": { + "enum": [ + "Application", + "Group", + "Organization", + "Person", + "Service" + ], + "title": "ActorType", + "type": "string" + }, + "oAuthApp": { + + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "redirect_uri": { + "type": "string" + }, + "trusted": { + "type": "boolean" + }, + "website": { + "nullable": true, + "type": "string" + } + }, + "title": "oAuthApp", + "type": "object" + }, + "Attachment": { + "description": "Represents a file or media attachment that can be added to a status.", + + "properties": { + "description": { + "description": "Alternate text that describes what is in the media attachment, to be used for the visually impaired or when media attachments do not load", + "nullable": true, + "type": "string" + }, + "id": { + "description": "The ID of the attachment in the database.", + "type": "string" + }, + "pleroma": { + "properties": { + "mime_type": { + "description": "mime type of the attachment", + "type": "string" + } + }, + "type": "object" + }, + "preview_url": { + "description": "The location of a scaled-down preview of the attachment", + "format": "uri", + "type": "string" + }, + "remote_url": { + "description": "The location of the full-size original attachment on the remote website. String (URL), or null if the attachment is local", + "format": "uri", + "nullable": true, + "type": "string" + }, + "text_url": { + "description": "A shorter URL for the attachment", + "format": "uri", + "type": "string" + }, + "type": { + "description": "The type of the attachment", + "enum": [ + "image", + "video", + "audio", + "unknown" + ], + "type": "string" + }, + "url": { + "description": "The location of the original full-size attachment", + "format": "uri", + "type": "string" + } + }, + "title": "Attachment", + "type": "object" + }, + "Marker": { + "description": "Schema for a marker", + "example": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 5 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + }, + "properties": { + "last_read_id": { + "type": "string" + }, + "pleroma": { + "properties": { + "unread_count": { + "type": "integer" + } + }, + "type": "object" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "title": "Marker", + "type": "object" + }, + "PushSubscription": { + "description": "Response schema for a push subscription", + + "properties": { + "alerts": { + "description": "Which alerts should be delivered to the endpoint.", + "properties": { + "favourite": { + "description": "Receive a push notification when a status you created has been favourited by someone else?", + "type": "boolean" + }, + "follow": { + "description": "Receive a push notification when someone has followed you?", + "type": "boolean" + }, + "mention": { + "description": "Receive a push notification when someone else has mentioned you in a status?", + "type": "boolean" + }, + "poll": { + "description": "Receive a push notification when a poll you voted in or created has ended? ", + "type": "boolean" + }, + "reblog": { + "description": "Receive a push notification when a status you created has been boosted by someone else?", + "type": "boolean" + } + }, + "type": "object" + }, + "endpoint": { + "description": "Where push alerts will be sent to.", + "type": "string" + }, + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "The id of the push subscription in the database." + }, + "server_key": { + "description": "The streaming server's VAPID key.", + "type": "string" + } + }, + "title": "PushSubscription", + "type": "object" + }, + "ChangeEmailRequest": { + "description": "POST body for changing the account's email", + "properties": { + "email": { + "description": "New email. Set to blank to remove the user's email.", + "type": "string" + }, + "password": { + "description": "Current password", + "type": "string" + } + }, + "required": [ + "email", + "password" + ], + "title": "ChangeEmailRequest", + "type": "object" + }, + "ArrayOfRelationships": { + "description": "Response schema for account relationships", + + "items": { + "$ref": "#/components/schemas/AccountRelationship" + }, + "title": "ArrayOfRelationships", + "type": "array" + }, + "BooleanLike": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "The following values will be treated as `false`:\n - false\n - 0\n - \"0\",\n - \"f\",\n - \"F\",\n - \"false\",\n - \"FALSE\",\n - \"off\",\n - \"OFF\"\n\nAll other non-null values will be treated as `true`\n", + "title": "BooleanLike" + }, + "oAuthAppCreateRequest": { + "example": { + "name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "scopes": [ + "read", + "write" + ], + "trusted": true, + "website": "https://myapp.com/" + }, + "properties": { + "name": { + "description": "Application Name", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "description": "oAuth scopes", + "items": { + "type": "string" + }, + "type": "array" + }, + "trusted": { + "default": false, + "description": "Is the app trusted?", + "nullable": true, + "type": "boolean" + }, + "website": { + "description": "A URL to the homepage of the app", + "nullable": true, + "type": "string" + } + }, + "required": [ + "name", + "redirect_uris" + ], + "title": "oAuthAppCreateRequest", + "type": "object" + }, + "AccountField": { + "description": "Response schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com", + "verified_at": "2019-08-29T04:14:55.571+00:00" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "format": "html", + "type": "string" + }, + "verified_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "title": "AccountField", + "type": "object" + }, + "Tag": { + "description": "Represents a hashtag used within the content of a status", + "example": { + "following": false, + "name": "cofe", + "url": "https://lain.com/tag/cofe" + }, + "properties": { + "following": { + "description": "Whether the authenticated user is following the hashtag", + "type": "boolean" + }, + "history": { + "description": "A list of historical uses of the hashtag (not implemented, for compatibility only)", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "The value of the hashtag after the # sign", + "type": "string" + }, + "url": { + "description": "A link to the hashtag on the instance", + "format": "uri", + "type": "string" + } + }, + "title": "Tag", + "type": "object" + }, + "ScheduledStatus": { + "description": "Represents a status that will be published at a future scheduled date.", + + "properties": { + "id": { + "type": "string" + }, + "media_attachments": { + "items": { + "$ref": "#/components/schemas/Attachment" + }, + "type": "array" + }, + "params": { + "properties": { + "expires_in": { + "nullable": true, + "type": "integer" + }, + "in_reply_to_id": { + "nullable": true, + "type": "string" + }, + "media_ids": { + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "scheduled_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "sensitive": { + "nullable": true, + "type": "boolean" + }, + "spoiler_text": { + "nullable": true, + "type": "string" + }, + "text": { + "nullable": true, + "type": "string" + }, + "visibility": { + "allOf": [ + { + "$ref": "#/components/schemas/VisibilityScope" + } + ], + "nullable": true + } + }, + "required": [ + "text", + "visibility" + ], + "type": "object" + }, + "scheduled_at": { + "format": "date-time", + "type": "string" + } + }, + "required": [ + "id", + "scheduled_at", + "params" + ], + "title": "ScheduledStatus", + "type": "object" + }, + "SearchResults": { + "properties": { + "accounts": { + "description": "Accounts which match the given query", + "items": { + "$ref": "#/components/schemas/Account" + }, + "type": "array" + }, + "hashtags": { + "description": "Hashtags which match the given query", + "items": { + "$ref": "#/components/schemas/Tag" + }, + "type": "array" + }, + "statuses": { + "description": "Statuses which match the given query", + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + }, + "title": "SearchResults", + "type": "object" + }, + "oAuthAppUpdateRequest": { + "example": { + "name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "scopes": [ + "read", + "write" + ], + "trusted": true, + "website": "https://myapp.com/" + }, + "properties": { + "name": { + "description": "Application Name", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "description": "oAuth scopes", + "items": { + "type": "string" + }, + "type": "array" + }, + "trusted": { + "default": false, + "description": "Is the app trusted?", + "nullable": true, + "type": "boolean" + }, + "website": { + "description": "A URL to the homepage of the app", + "nullable": true, + "type": "string" + } + }, + "title": "oAuthAppUpdateRequest", + "type": "object" + }, + "AccountAttributeField": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "Notification": { + "description": "Response schema for a notification", + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + } + ], + "description": "The account that performed the action that generated the notification." + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "type": "string" + }, + "pleroma": { + "properties": { + "is_muted": { + "type": "boolean" + }, + "is_seen": { + "type": "boolean" + } + }, + "type": "object" + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/Status" + } + ], + "description": "Status that was the object of the notification, e.g. in mentions, reblogs, favourites, or polls.", + "nullable": true + }, + "type": { + "description": "The type of event that resulted in the notification.\n\n- `follow` - Someone followed you\n- `mention` - Someone mentioned you in their status\n- `reblog` - Someone boosted one of your statuses\n- `favourite` - Someone favourited one of your statuses\n- `poll` - A poll you have voted in or created has ended\n- `move` - Someone moved their account\n- `pleroma:emoji_reaction` - Someone reacted with emoji to your status\n- `pleroma:report` - Someone was reported\n", + "enum": [ + "follow", + "favourite", + "reblog", + "mention", + "pleroma:emoji_reaction", + "pleroma:report", + "move", + "follow_request", + "poll" + ], + "type": "string" + } + }, + "title": "Notification", + "type": "object" + }, + "Backup": { + "description": "Response schema for a backup", + "example": { + "content_type": "application/zip", + "file_name": "https://cofe.fe:4000/media/backups/archive-foobar-20200908T164207-Yr7vuT5Wycv-sN3kSN2iJ0k-9pMo60j9qmvRCdDqIew.zip", + "file_size": 4105, + "inserted_at": "2020-09-08T16:42:07.000Z", + "processed": true + }, + "properties": { + "content_type": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "file_size": { + "type": "integer" + }, + "inserted_at": { + "format": "date-time", + "type": "string" + }, + "processed": { + "type": "boolean" + } + }, + "title": "Backup", + "type": "object" + }, + "VisibilityScope": { + "description": "Status visibility", + "enum": [ + "public", + "unlisted", + "local", + "private", + "direct", + "list" + ], + "title": "VisibilityScope", + "type": "string" + }, + "SubscriptionUpdateRequest": { + "example": { + "data": { + "alerts": { + "favourite": true, + "follow": true, + "mention": true, + "poll": true, + "reblog": true + } + } + }, + "properties": { + "data": { + "nullable": true, + "properties": { + "alerts": { + "nullable": true, + "properties": { + "favourite": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive favourite notifications?", + "nullable": true + }, + "follow": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive follow notifications?", + "nullable": true + }, + "mention": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive mention notifications?", + "nullable": true + }, + "pleroma:emoji_reaction": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive emoji reaction notifications?", + "nullable": true + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive poll notifications?", + "nullable": true + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive reblog notifications?", + "nullable": true + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "title": "SubscriptionUpdateRequest", + "type": "object" + }, + "AccountDeleteRequest": { + "description": "POST body for deleting one's own account", + "example": { + "password": "prettyp0ony1313" + }, + "properties": { + "password": { + "description": "The user's own password for confirmation.", + "format": "password", + "type": "string" + } + }, + "title": "AccountDeleteRequest", + "type": "object" + }, + "AnnouncementCreateRequest": { + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "required": [ + "content" + ], + "title": "AnnouncementCreateRequest", + "type": "object" + }, + "AccountCreateResponse": { + "description": "Response schema for an account", + "example": { + "access_token": "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", + "created_at": 1585918714, + "expires_in": 600, + "me": "https://gensokyo.2hu/users/raymoo", + "refresh_token": "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzz", + "scope": "read write follow push", + "token_type": "Bearer" + }, + "properties": { + "access_token": { + "type": "string" + }, + "created_at": { + "format": "date-time", + "type": "integer" + }, + "expires_in": { + "type": "integer" + }, + "identifier": { + "type": "string" + }, + "me": { + "type": "string" + }, + "message": { + "type": "string" + }, + "refresh_token": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "token_type": { + "type": "string" + } + }, + "title": "AccountCreateResponse", + "type": "object" + }, + "UpdateRequest": { + "description": "POST body for uploading the file", + "properties": { + "file": { + "description": "The file to be uploaded, using multipart form data.", + "format": "binary", + "type": "string" + } + }, + "required": [ + "file" + ], + "title": "UpdateRequest", + "type": "object" + }, + "PollOption": { + "properties": { + "title": { + "type": "string" + }, + "votes_count": { + "type": "integer" + } + }, + "title": "PollOption", + "type": "object" + }, + "AddAliasRequest": { + "description": "PUT body for adding aliases", + "properties": { + "alias": { + "description": "The nickname of the account to add to aliases", + "type": "string" + } + }, + "required": [ + "alias" + ], + "title": "AddAliasRequest", + "type": "object" + }, + "ArrayOfFilters": { + "description": "Array of Filters", + + "items": { + + "properties": { + "context": { + "description": "The contexts in which the filter should be applied.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "type": "string" + }, + "irreversible": { + "description": "Should matching entities in home and notifications be dropped by the server?", + "type": "boolean" + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "description": "Should the filter consider word boundaries?", + "type": "boolean" + } + }, + "title": "Filter", + "type": "object" + }, + "title": "ArrayOfFilters", + "type": "array" + }, + "StatusTranslation": { + "description": "The translation of a status.", + "properties": { + "detected_language": { + "description": "The detected language of the text", + "type": "string" + }, + "text": { + "description": "The translated text", + "type": "string" + } + }, + "required": [ + "detected_language", + "text" + ], + "title": "StatusTranslation", + "type": "object" + }, + "AccountCreateRequest": { + "description": "POST body for creating an account", + "example": { + "agreement": "true", + "bio": "☕️", + "email": "cofe@example.com", + "password": "secret", + "username": "cofe" + }, + "properties": { + "agreement": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether the user agrees to the local rules, terms, and policies. These should be presented to the user in order to allow them to consent before setting this parameter to TRUE." + }, + "bio": { + "default": "", + "description": "Bio", + "nullable": true, + "type": "string" + }, + "captcha_answer_data": { + "description": "Provider-specific captcha data", + "nullable": true, + "type": "string" + }, + "captcha_solution": { + "description": "Provider-specific captcha solution", + "nullable": true, + "type": "string" + }, + "captcha_token": { + "description": "Provider-specific captcha token", + "nullable": true, + "type": "string" + }, + "email": { + "description": "The email address to be used for login. Required when `account_activation_required` is enabled.", + "format": "email", + "nullable": true, + "type": "string" + }, + "fullname": { + "description": "Full name", + "nullable": true, + "type": "string" + }, + "language": { + "description": "User's preferred language for emails", + "nullable": true, + "type": "string" + }, + "locale": { + "description": "The language of the confirmation email that will be sent", + "nullable": true, + "type": "string" + }, + "password": { + "description": "The password to be used for login", + "format": "password", + "type": "string" + }, + "reason": { + "description": "Text that will be reviewed by moderators if registrations require manual approval", + "nullable": true, + "type": "string" + }, + "token": { + "description": "Invite token required when the registrations aren't public", + "nullable": true, + "type": "string" + }, + "username": { + "description": "The desired username for the account", + "type": "string" + } + }, + "required": [ + "username", + "password", + "agreement" + ], + "title": "AccountCreateRequest", + "type": "object" + }, + "ArrayOfAccounts": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "title": "ArrayOfAccounts", + "type": "array" + }, + "ApiError": { + "description": "Response schema for API error", + "example": { + "error": "Something went wrong" + }, + "properties": { + "error": { + "type": "string" + } + }, + "title": "ApiError", + "type": "object" + }, + "ReportCreateRequest": { + "description": "POST body for creating a report", + "example": { + "account_id": "123", + "comment": "bad status!", + "forward": "false", + "status_ids": [ + "1337" + ] + }, + "properties": { + "account_id": { + "description": "ID of the account to report", + "type": "string" + }, + "comment": { + "description": "Reason for the report", + "nullable": true, + "type": "string" + }, + "forward": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "If the account is remote, should the report be forwarded to the remote admin?", + "nullable": true + }, + "status_ids": { + "description": "Array of Statuses to attach to the report, for context", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "required": [ + "account_id" + ], + "title": "ReportCreateRequest", + "type": "object" + }, + "MediaCreateRequest": { + "description": "POST body for creating an attachment", + "properties": { + "description": { + "description": "A plain-text description of the media, for accessibility purposes.", + "type": "string" + }, + "file": { + "description": "The file to be attached, using multipart form data.", + "format": "binary", + "type": "string" + }, + "focus": { + "description": "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0.", + "type": "string" + } + }, + "required": [ + "file" + ], + "title": "MediaCreateRequest", + "type": "object" + }, + "Filter": { + + "properties": { + "context": { + "description": "The contexts in which the filter should be applied.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "type": "string" + }, + "irreversible": { + "description": "Should matching entities in home and notifications be dropped by the server?", + "type": "boolean" + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "description": "Should the filter consider word boundaries?", + "type": "boolean" + } + }, + "title": "Filter", + "type": "object" + }, + "Announcement": { + "description": "Response schema for an announcement", + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "emojis": { + "type": "array" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "mentions": { + "type": "array" + }, + "pleroma": { + "properties": { + "raw_content": { + "type": "string" + } + }, + "type": "object" + }, + "published_at": { + "format": "date-time", + "type": "string" + }, + "reactions": { + "type": "array" + }, + "read": { + "type": "boolean" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "statuses": { + "type": "array" + }, + "tags": { + "type": "array" + }, + "updated_at": { + "format": "date-time", + "type": "string" + } + }, + "title": "Announcement", + "type": "object" + }, + "AccountMuteRequest": { + "description": "POST body for muting an account", + "example": { + "expires_in": 86400, + "notifications": true + }, + "properties": { + "expires_in": { + "default": 0, + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "nullable": true, + "type": "integer" + }, + "notifications": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Mute notifications in addition to statuses? Defaults to true.", + "nullable": true + } + }, + "title": "AccountMuteRequest", + "type": "object" + }, + "StatusUpdateRequest": { + "example": { + "poll": { + "expires_in": 420, + "options": [ + "Cofe", + "Adventure" + ] + }, + "sensitive": "false", + "status": "What time is it?" + }, + "properties": { + "content_type": { + "description": "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint.", + "nullable": true, + "type": "string" + }, + "media_ids": { + "description": "Array of Attachment ids to be attached as media.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "sensitive": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Mark status and attached media as sensitive?", + "nullable": true + }, + "spoiler_text": { + "description": "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided.", + "nullable": true, + "type": "string" + }, + "to": { + "description": "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "title": "StatusUpdateRequest", + "type": "object" + }, + "MediaUpdateRequest": { + "description": "POST body for updating an attachment", + "properties": { + "description": { + "description": "A plain-text description of the media, for accessibility purposes.", + "type": "string" + }, + "file": { + "description": "The file to be attached, using multipart form data.", + "format": "binary", + "type": "string" + }, + "focus": { + "description": "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0.", + "type": "string" + } + }, + "title": "MediaUpdateRequest", + "type": "object" + }, + "App": { + "description": "Response schema for an app", + + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "redirect_uri": { + "type": "string" + }, + "vapid_key": { + "type": "string" + }, + "website": { + "nullable": true, + "type": "string" + } + }, + "title": "App", + "type": "object" + }, + "ArrayOfStatuses": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "title": "ArrayOfStatuses", + "type": "array" + }, + "CustomEmojisResponse": { + "description": "Response schema for custom emojis", + "example": [ + { + "category": "Fun", + "shortcode": "blank", + "static_url": "https://lain.com/emoji/blank.png", + "tags": [ + "Fun" + ], + "url": "https://lain.com/emoji/blank.png", + "visible_in_picker": false + }, + { + "category": "Gif,Fun", + "shortcode": "firefox", + "static_url": "https://lain.com/emoji/Firefox.gif", + "tags": [ + "Gif", + "Fun" + ], + "url": "https://lain.com/emoji/Firefox.gif", + "visible_in_picker": true + }, + { + "category": "pack:mixed", + "shortcode": "sadcat", + "static_url": "https://lain.com/emoji/mixed/sadcat.png", + "tags": [ + "pack:mixed" + ], + "url": "https://lain.com/emoji/mixed/sadcat.png", + "visible_in_picker": true + } + ], + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/Emoji" + }, + { + "properties": { + "category": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + ], + "description": "Schema for a CustomEmoji", + "example": { + "category": "Fun", + "shortcode": "aaaa", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/007/118/static/aaaa.png", + "tags": [ + "Gif", + "Fun" + ], + "url": "https://files.mastodon.social/custom_emojis/images/000/007/118/original/aaaa.png", + "visible_in_picker": true + }, + "title": "CustomEmoji" + }, + "title": "CustomEmojisResponse", + "type": "array" + }, + "List": { + "description": "Represents a list of users", + "properties": { + "id": { + "description": "The internal database ID of the list", + "type": "string" + }, + "title": { + "description": "The user-defined title of the list", + "type": "string" + } + }, + "title": "List", + "type": "object" + }, + "AccountNoteRequest": { + "description": "POST body for adding a note for an account", + "example": { + "comment": "Example note" + }, + "properties": { + "comment": { + "description": "Account note body", + "type": "string" + } + }, + "title": "AccountNoteRequest", + "type": "object" + }, + "FilterCreateRequest": { + "allOf": [ + { + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "properties": { + "context": { + "description": "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire.", + "nullable": true, + "type": "integer" + }, + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Should the server irreversibly drop matching entities from home and notifications?", + "nullable": true + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Consider word boundaries?", + "nullable": true + } + }, + "required": [ + "phrase", + "context" + ], + "title": "FilterUpdateRequest", + "type": "object" + }, + { + "properties": { + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "Should the server irreversibly drop matching entities from home and notifications?" + } + }, + "type": "object" + } + ], + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "title": "FilterCreateRequest" + }, + "SubscriptionCreateRequest": { + "description": "POST body for creating a push subscription", + "example": { + "data": { + "alerts": { + "follow": true, + "mention": true, + "poll": false + } + }, + "subscription": { + "endpoint": "https://example.com/example/1234", + "keys": { + "auth": "8eDyX_uCN0XRhSbY5hs7Hg==", + "p256dh": "BCIWgsnyXDv1VkhqL2P7YRBvdeuDnlwAPT2guNhdIoW3IP7GmHh1SMKPLxRf7x8vJy6ZFK3ol2ohgn_-0yP7QQA=" + } + } + }, + "properties": { + "data": { + "nullable": true, + "properties": { + "alerts": { + "nullable": true, + "properties": { + "favourite": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive favourite notifications?", + "nullable": true + }, + "follow": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive follow notifications?", + "nullable": true + }, + "mention": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive mention notifications?", + "nullable": true + }, + "pleroma:emoji_reaction": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive emoji reaction notifications?", + "nullable": true + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive poll notifications?", + "nullable": true + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive reblog notifications?", + "nullable": true + } + }, + "type": "object" + } + }, + "type": "object" + }, + "subscription": { + "properties": { + "endpoint": { + "description": "Endpoint URL that is called when a notification event occurs.", + "type": "string" + }, + "keys": { + "properties": { + "auth": { + "description": "Auth secret. Base64 encoded string of 16 bytes of random data.", + "type": "string" + }, + "p256dh": { + "description": "User agent public key. Base64 encoded string of public key of ECDH key using `prime256v1` curve.", + "type": "string" + } + }, + "required": [ + "p256dh", + "auth" + ], + "type": "object" + } + }, + "required": [ + "endpoint", + "keys" + ], + "type": "object" + } + }, + "required": [ + "subscription" + ], + "title": "SubscriptionCreateRequest", + "type": "object" + }, + "StatusContext": { + "description": "Represents the tree around a given status. Used for reconstructing threads of statuses.", + "properties": { + "ancestors": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + }, + "descendants": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + }, + "required": [ + "ancestors", + "descendants" + ], + "title": "StatusContext", + "type": "object" + }, + "Unprocessable Entity": { + "allOf": [ + { + "$ref": "#/components/schemas/ApiError" + } + ], + "example": { + "error": "Record not found" + }, + "title": "Unprocessable Entity" + } + }, + "securitySchemes": { + "oAuth": { + "flows": { + "password": { + "authorizationUrl": "/oauth/authorize", + "scopes": { + "follow": "Manage relationships", + "push": "Web Push API subscriptions", + "read": "Read everything", + "write": "Write everything" + }, + "tokenUrl": "/oauth/token" + } + }, + "type": "oauth2" + } + } + }, + "info": { + "description": "This is auto-generated documentation for the Akkoma API. Most of the endpoints and entities come\nfrom Mastodon API and have custom extensions on top.\n\nWhile this document aims to be a complete guide to the client API Akkoma exposes,\nit may not be complete. Some endpoints may have incomplete or poorly worded documentation.\nYou might want to check the following resources if something is not clear:\n- [Legacy Pleroma-specific endpoint documentation](https://docs-develop.pleroma.social/backend/development/API/pleroma_api/)\n- [Mastodon API documentation](https://docs.joinmastodon.org/client/intro/)\n- [Differences in Mastodon API responses from vanilla Mastodon](https://docs.akkoma.dev/stable/development/API/differences_in_mastoapi_responses/)\n\nPlease report such occurrences on our [issue tracker](https://akkoma.dev/AkkomaGang/akkoma). Feel free to submit API questions or proposals there too!\n", + "title": "Akkoma API", + "version": "3.11.0-0-ga03f3a9" + }, + "openapi": "3.1.0", + "paths": { + "/api/v0/pleroma/reports/{id}": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.ReportController.show", + "parameters": [ + { + "description": "Report ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "account": { + "$ref": "#/components/schemas/Account" + }, + "actor": { + "$ref": "#/components/schemas/Account" + }, + "content": { + "type": "string" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "state": { + "enum": [ + "open", + "closed", + "resolved" + ], + "type": "string" + }, + "statuses": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Report" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:reports" + ] + } + ], + "summary": "Get an individual report", + "tags": [ + "Reports" + ] + } + }, + "/api/v1/notifications/{id}": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View information about a notification with a given ID.", + "operationId": "NotificationController.show", + "parameters": [ + { + "description": "Notification ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for a notification", + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + } + ], + "description": "The account that performed the action that generated the notification." + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "type": "string" + }, + "pleroma": { + "properties": { + "is_muted": { + "type": "boolean" + }, + "is_seen": { + "type": "boolean" + } + }, + "type": "object" + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/Status" + } + ], + "description": "Status that was the object of the notification, e.g. in mentions, reblogs, favourites, or polls.", + "nullable": true + }, + "type": { + "description": "The type of event that resulted in the notification.\n\n- `follow` - Someone followed you\n- `mention` - Someone mentioned you in their status\n- `reblog` - Someone boosted one of your statuses\n- `favourite` - Someone favourited one of your statuses\n- `poll` - A poll you have voted in or created has ended\n- `move` - Someone moved their account\n- `pleroma:emoji_reaction` - Someone reacted with emoji to your status\n- `pleroma:report` - Someone was reported\n", + "enum": [ + "follow", + "favourite", + "reblog", + "mention", + "pleroma:emoji_reaction", + "pleroma:report", + "move", + "follow_request", + "poll" + ], + "type": "string" + } + }, + "title": "Notification", + "type": "object" + } + } + }, + "description": "Notification" + } + }, + "security": [ + { + "oAuth": [ + "read:notifications" + ] + } + ], + "summary": "Retrieve a notification", + "tags": [ + "Notifications" + ] + } + }, + "/api/pleroma/change_email": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.change_email", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for changing the account's email", + "properties": { + "email": { + "description": "New email. Set to blank to remove the user's email.", + "type": "string" + }, + "password": { + "description": "Current password", + "type": "string" + } + }, + "required": [ + "email", + "password" + ], + "title": "ChangeEmailRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for changing the account's email", + "properties": { + "email": { + "description": "New email. Set to blank to remove the user's email.", + "type": "string" + }, + "password": { + "description": "Current password", + "type": "string" + } + }, + "required": [ + "email", + "password" + ], + "title": "ChangeEmailRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for changing the account's email", + "properties": { + "email": { + "description": "New email. Set to blank to remove the user's email.", + "type": "string" + }, + "password": { + "description": "Current password", + "type": "string" + } + }, + "required": [ + "email", + "password" + ], + "title": "ChangeEmailRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Change account email", + "tags": [ + "Account credentials" + ] + } + }, + "/api/v1/statuses/{id}/unmute": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Start receiving notifications again for the thread that this status is part of", + "operationId": "StatusController.unmute_conversation", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:mutes" + ] + } + ], + "summary": "Unmute conversation", + "tags": [ + "Status actions" + ] + } + }, + "/api/pleroma/notification_settings": { + "put": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.update_notificaton_settings", + "parameters": [ + { + "description": "blocks notifications from accounts you do not follow", + "in": "query", + "name": "block_from_strangers", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "removes the contents of a message from the push notification", + "in": "query", + "name": "hide_notification_contents", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Update Notification Settings", + "tags": [ + "Accounts" + ] + } + }, + "/api/v1/suggestions": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "SuggestionController.index", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": [], + "items": { + "example": {}, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Empty array" + } + }, + "summary": "Follow suggestions (Not implemented)", + "tags": [ + "Suggestions" + ] + } + }, + "/api/v1/pleroma/admin/users/deactivate": { + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.deactivate", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "user": { + "items": { + "properties": { + "actor_type": { + "type": "string" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_approved": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "registration_reason": { + "nullable": true, + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:accounts" + ] + } + ], + "summary": "Deactivates multiple users", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/lists/{id}/accounts": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "ListController.remove_from_list", + "parameters": [ + { + "description": "List ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Array of account IDs", + "in": "query", + "name": "account_ids", + "required": false, + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for adding/removing accounts to/from a List", + "properties": { + "account_ids": { + "description": "Array of account IDs", + "items": { + "$ref": "#/components/schemas/FlakeID" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for adding/removing accounts to/from a List", + "properties": { + "account_ids": { + "description": "Array of account IDs", + "items": { + "$ref": "#/components/schemas/FlakeID" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for adding/removing accounts to/from a List", + "properties": { + "account_ids": { + "description": "Array of account IDs", + "items": { + "$ref": "#/components/schemas/FlakeID" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "security": [ + { + "oAuth": [ + "write:lists" + ] + } + ], + "summary": "Remove accounts from list", + "tags": [ + "Lists" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "ListController.list_accounts", + "parameters": [ + { + "description": "List ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Account" + }, + "type": "array" + } + } + }, + "description": "Array of Account" + } + }, + "security": [ + { + "oAuth": [ + "read:lists" + ] + } + ], + "summary": "Retrieve accounts in list", + "tags": [ + "Lists" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Add accounts to the given list.", + "operationId": "ListController.add_to_list", + "parameters": [ + { + "description": "List ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for adding/removing accounts to/from a List", + "properties": { + "account_ids": { + "description": "Array of account IDs", + "items": { + "$ref": "#/components/schemas/FlakeID" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for adding/removing accounts to/from a List", + "properties": { + "account_ids": { + "description": "Array of account IDs", + "items": { + "$ref": "#/components/schemas/FlakeID" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for adding/removing accounts to/from a List", + "properties": { + "account_ids": { + "description": "Array of account IDs", + "items": { + "$ref": "#/components/schemas/FlakeID" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "security": [ + { + "oAuth": [ + "write:lists" + ] + } + ], + "summary": "Add accounts to list", + "tags": [ + "Lists" + ] + } + }, + "/api/v1/accounts/verify_credentials": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Test to make sure that the user token works.", + "operationId": "AccountController.verify_credentials", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Account" + } + } + }, + "description": "Account" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Verify account credentials", + "tags": [ + "Account credentials" + ] + } + }, + "/api/v1/lists": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Fetch all lists that the user owns", + "operationId": "ListController.index", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for lists", + + "items": { + "$ref": "#/components/schemas/List" + }, + "title": "ArrayOfLists", + "type": "array" + } + } + }, + "description": "Array of List" + } + }, + "security": [ + { + "oAuth": [ + "read:lists" + ] + } + ], + "summary": "Retrieve a list of lists", + "tags": [ + "Lists" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Fetch the list with the given ID. Used for verifying the title of a list.", + "operationId": "ListController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating or updating a List", + "properties": { + "title": { + "description": "List title", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating or updating a List", + "properties": { + "title": { + "description": "List title", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating or updating a List", + "properties": { + "title": { + "description": "List title", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/List" + } + } + }, + "description": "List" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:lists" + ] + } + ], + "summary": "Create a list", + "tags": [ + "Lists" + ] + } + }, + "/api/v1/accounts/relationships": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Find out whether a given account is followed, blocked, muted, etc.", + "operationId": "AccountController.relationships", + "parameters": [ + { + "description": "Account IDs", + "example": "123", + "in": "query", + "name": "id", + "required": false, + "schema": { + "oneOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for account relationships", + + "items": { + "$ref": "#/components/schemas/AccountRelationship" + }, + "title": "ArrayOfRelationships", + "type": "array" + } + } + }, + "description": "Account" + } + }, + "security": [ + { + "oAuth": [ + "read:follows" + ] + } + ], + "summary": "Relationship with current account", + "tags": [ + "Retrieve account information" + ] + } + }, + "/api/v1/statuses/{id}/unreblog": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Undo a reshare of a status", + "operationId": "StatusController.unreblog", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "write:statuses" + ] + } + ], + "summary": "Undo reblog", + "tags": [ + "Status actions" + ] + } + }, + "/api/v1/pleroma/healthcheck": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.healthcheck", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Healthy" + }, + "503": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Disabled or Unhealthy" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Quick status check on the instance", + "tags": [ + "Accounts" + ] + } + }, + "/api/v1/pleroma/remote_interaction": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.remote_interaction", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for remote interaction", + "properties": { + "ap_id": { + "description": "Profile or status ActivityPub ID", + "type": "string" + }, + "profile": { + "description": "Remote profile webfinger", + "type": "string" + } + }, + "required": [ + "ap_id", + "profile" + ], + "title": "RemoteInteractionRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for remote interaction", + "properties": { + "ap_id": { + "description": "Profile or status ActivityPub ID", + "type": "string" + }, + "profile": { + "description": "Remote profile webfinger", + "type": "string" + } + }, + "required": [ + "ap_id", + "profile" + ], + "title": "RemoteInteractionRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for remote interaction", + "properties": { + "ap_id": { + "description": "Profile or status ActivityPub ID", + "type": "string" + }, + "profile": { + "description": "Remote profile webfinger", + "type": "string" + } + }, + "required": [ + "ap_id", + "profile" + ], + "title": "RemoteInteractionRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Remote interaction URL" + } + }, + "summary": "Remote interaction", + "tags": [ + "Accounts" + ] + } + }, + "/api/v1/pleroma/admin/reports": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.ReportController.index", + "parameters": [ + { + "description": "Filter by report state", + "in": "query", + "name": "state", + "required": false, + "schema": { + "enum": [ + "open", + "closed", + "resolved" + ], + "type": "string" + } + }, + { + "description": "The number of records to retrieve", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" + } + }, + { + "description": "Number number of log entries per page", + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "reports": { + "items": { + "properties": { + "account": { + "description": "Account view for admins", + "properties": { + "acct": { + "type": "string" + }, + "akkoma": { + "properties": { + "instance": { + "nullable": true, + "properties": { + "favicon": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "name": { + "type": "string" + }, + "nodeinfo": { + "nullable": true, + "type": "object" + } + }, + "type": "object" + }, + "permit_followback": { + "type": "boolean" + }, + "status_ttl_days": { + "nullable": true, + "type": "integer" + } + }, + "type": "object" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "avatar_static": { + "format": "uri", + "type": "string" + }, + "bot": { + "type": "boolean" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "emojis": { + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "follow_requests_count": { + "type": "integer" + }, + "followers_count": { + "type": "integer" + }, + "following_count": { + "type": "integer" + }, + "header": { + "format": "uri", + "type": "string" + }, + "header_static": { + "format": "uri", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "is_active": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "locked": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "note": { + "format": "html", + "type": "string" + }, + "pleroma": { + "properties": { + "allow_following_move": { + "description": "whether the user allows automatically follow moved following accounts", + "type": "boolean" + }, + "also_known_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ap_id": { + "type": "string" + }, + "background_image": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "favicon": { + "description": "Favicon image of the user's instance", + "format": "uri", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "type": "boolean" + }, + "hide_followers": { + "description": "whether the user has follower hiding enabled", + "type": "boolean" + }, + "hide_followers_count": { + "description": "whether the user has follower stat hiding enabled", + "type": "boolean" + }, + "hide_follows": { + "description": "whether the user has follow hiding enabled", + "type": "boolean" + }, + "hide_follows_count": { + "description": "whether the user has follow stat hiding enabled", + "type": "boolean" + }, + "is_admin": { + "description": "whether the user is an admin of the local instance", + "type": "boolean" + }, + "is_confirmed": { + "description": "whether the user account is waiting on email confirmation to be activated", + "type": "boolean" + }, + "is_moderator": { + "description": "whether the user is a moderator of the local instance", + "type": "boolean" + }, + "notification_settings": { + "properties": { + "block_from_strangers": { + "type": "boolean" + }, + "hide_notification_contents": { + "type": "boolean" + } + }, + "type": "object" + }, + "relationship": { + "allOf": [ + { + "$ref": "#/components/schemas/AccountRelationship" + } + ], + "nullable": true + }, + "settings_store": { + "description": "A generic map of settings for frontends. Opaque to the backend. Only returned in `verify_credentials` and `update_credentials`", + "type": "object" + }, + "skip_thread_containment": { + "type": "boolean" + }, + "tags": { + "description": "List of tags being used for things like extra roles or moderation(ie. marking all media as nsfw all).", + "items": { + "type": "string" + }, + "type": "array" + }, + "unread_conversation_count": { + "description": "The count of unread conversations. Only returned to the account owner.", + "type": "integer" + } + }, + "type": "object" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "source": { + "properties": { + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "note": { + "description": "Plaintext version of the bio without formatting applied by the backend, used for editing the bio.", + "type": "string" + }, + "pleroma": { + "properties": { + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "discoverable": { + "description": "whether the user allows indexing / listing of the account by external services (search engines etc.).", + "type": "boolean" + }, + "no_rich_text": { + "description": "whether the HTML tags for rich-text formatting are stripped from all statuses requested from the API.", + "type": "boolean" + }, + "show_role": { + "description": "whether the user wants their role (e.g admin, moderator) to be shown", + "type": "boolean" + } + }, + "type": "object" + }, + "privacy": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "sensitive": { + "type": "boolean" + } + }, + "type": "object" + }, + "statuses_count": { + "type": "integer" + }, + "url": { + "format": "uri", + "type": "string" + }, + "username": { + "type": "string" + } + }, + "title": "Account", + "type": "object" + }, + "actor": { + "description": "Account view for admins", + "properties": { + "acct": { + "type": "string" + }, + "akkoma": { + "properties": { + "instance": { + "nullable": true, + "properties": { + "favicon": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "name": { + "type": "string" + }, + "nodeinfo": { + "nullable": true, + "type": "object" + } + }, + "type": "object" + }, + "permit_followback": { + "type": "boolean" + }, + "status_ttl_days": { + "nullable": true, + "type": "integer" + } + }, + "type": "object" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "avatar_static": { + "format": "uri", + "type": "string" + }, + "bot": { + "type": "boolean" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "emojis": { + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "follow_requests_count": { + "type": "integer" + }, + "followers_count": { + "type": "integer" + }, + "following_count": { + "type": "integer" + }, + "header": { + "format": "uri", + "type": "string" + }, + "header_static": { + "format": "uri", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "is_active": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "locked": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "note": { + "format": "html", + "type": "string" + }, + "pleroma": { + "properties": { + "allow_following_move": { + "description": "whether the user allows automatically follow moved following accounts", + "type": "boolean" + }, + "also_known_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ap_id": { + "type": "string" + }, + "background_image": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "favicon": { + "description": "Favicon image of the user's instance", + "format": "uri", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "type": "boolean" + }, + "hide_followers": { + "description": "whether the user has follower hiding enabled", + "type": "boolean" + }, + "hide_followers_count": { + "description": "whether the user has follower stat hiding enabled", + "type": "boolean" + }, + "hide_follows": { + "description": "whether the user has follow hiding enabled", + "type": "boolean" + }, + "hide_follows_count": { + "description": "whether the user has follow stat hiding enabled", + "type": "boolean" + }, + "is_admin": { + "description": "whether the user is an admin of the local instance", + "type": "boolean" + }, + "is_confirmed": { + "description": "whether the user account is waiting on email confirmation to be activated", + "type": "boolean" + }, + "is_moderator": { + "description": "whether the user is a moderator of the local instance", + "type": "boolean" + }, + "notification_settings": { + "properties": { + "block_from_strangers": { + "type": "boolean" + }, + "hide_notification_contents": { + "type": "boolean" + } + }, + "type": "object" + }, + "relationship": { + "allOf": [ + { + "$ref": "#/components/schemas/AccountRelationship" + } + ], + "nullable": true + }, + "settings_store": { + "description": "A generic map of settings for frontends. Opaque to the backend. Only returned in `verify_credentials` and `update_credentials`", + "type": "object" + }, + "skip_thread_containment": { + "type": "boolean" + }, + "tags": { + "description": "List of tags being used for things like extra roles or moderation(ie. marking all media as nsfw all).", + "items": { + "type": "string" + }, + "type": "array" + }, + "unread_conversation_count": { + "description": "The count of unread conversations. Only returned to the account owner.", + "type": "integer" + } + }, + "type": "object" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "source": { + "properties": { + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "note": { + "description": "Plaintext version of the bio without formatting applied by the backend, used for editing the bio.", + "type": "string" + }, + "pleroma": { + "properties": { + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "discoverable": { + "description": "whether the user allows indexing / listing of the account by external services (search engines etc.).", + "type": "boolean" + }, + "no_rich_text": { + "description": "whether the HTML tags for rich-text formatting are stripped from all statuses requested from the API.", + "type": "boolean" + }, + "show_role": { + "description": "whether the user wants their role (e.g admin, moderator) to be shown", + "type": "boolean" + } + }, + "type": "object" + }, + "privacy": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "sensitive": { + "type": "boolean" + } + }, + "type": "object" + }, + "statuses_count": { + "type": "integer" + }, + "url": { + "format": "uri", + "type": "string" + }, + "username": { + "type": "string" + } + }, + "title": "Account", + "type": "object" + }, + "content": { + "type": "string" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "notes": { + "items": { + "properties": { + "content": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "inserted_at": { + "format": "date-time", + "type": "string" + }, + "user_id": { + "$ref": "#/components/schemas/FlakeID" + } + }, + "type": "object" + }, + "type": "array" + }, + "state": { + "enum": [ + "open", + "closed", + "resolved" + ], + "type": "string" + }, + "statuses": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:read:reports" + ] + } + ], + "summary": "Retrieve a list of reports", + "tags": [ + "Report managment" + ] + }, + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.ReportController.update", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "reports": { + + "items": { + "properties": { + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "Required, report ID" + }, + "state": { + "description": "Required, the new state. Valid values are `open`, `closed` and `resolved`", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "reports" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "reports": { + + "items": { + "properties": { + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "Required, report ID" + }, + "state": { + "description": "Required, the new state. Valid values are `open`, `closed` and `resolved`", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "reports" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "reports": { + + "items": { + "properties": { + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "Required, report ID" + }, + "state": { + "description": "Required, the new state. Valid values are `open`, `closed` and `resolved`", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "reports" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "204": { + "content": { + "application/json": { + "schema": { + "example": "", + "type": "string" + } + } + }, + "description": "No Content" + }, + "400": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "error": { + "description": "Error message", + "type": "string" + }, + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "Report ID" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:reports" + ] + } + ], + "summary": "Change state of specified reports", + "tags": [ + "Report managment" + ] + } + }, + "/api/v1/statuses/{id}/unpin": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Unfeature a status from the top of your profile", + "operationId": "StatusController.unpin", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "400": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ApiError" + } + ], + "example": { + "error": "You have already pinned the maximum number of statuses" + }, + "title": "Unprocessable Entity" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ApiError" + } + ], + "example": { + "error": "Record not found" + }, + "title": "Unprocessable Entity" + } + } + }, + "description": "Not found" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Unpin from profile", + "tags": [ + "Status actions" + ] + } + }, + "/api/v1/pleroma/admin/statuses": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.StatusController.index", + "parameters": [ + { + "description": "Allows to see private statuses", + "in": "query", + "name": "godmode", + "required": false, + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Excludes remote statuses", + "in": "query", + "name": "local_only", + "required": false, + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Allows to see reblogs", + "in": "query", + "name": "with_reblogs", + "required": false, + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Page", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" + } + }, + { + "description": "Number of statuses to return", + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/Status" + }, + { + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + }, + { + "properties": { + "avatar": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "is_active": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "type": "object" + } + ] + }, + "type": "array" + } + } + }, + "description": "Array of statuses" + } + }, + "security": [ + { + "oAuth": [ + "admin:read:statuses" + ] + } + ], + "summary": "Get all statuses", + "tags": [ + "Status administration" + ] + } + }, + "/api/v1/tags/{id}/follow": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Follow a hashtag", + "operationId": "TagController.follow", + "parameters": [ + { + "description": "Name of the hashtag", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Tag" + } + } + }, + "description": "Hashtag" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "write:follows" + ] + } + ], + "summary": "Follow a hashtag", + "tags": [ + "Tags" + ] + } + }, + "/api/v1/pleroma/admin/reports/{id}": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.ReportController.show", + "parameters": [ + { + "description": "Report ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "account": { + "description": "Account view for admins", + "properties": { + "acct": { + "type": "string" + }, + "akkoma": { + "properties": { + "instance": { + "nullable": true, + "properties": { + "favicon": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "name": { + "type": "string" + }, + "nodeinfo": { + "nullable": true, + "type": "object" + } + }, + "type": "object" + }, + "permit_followback": { + "type": "boolean" + }, + "status_ttl_days": { + "nullable": true, + "type": "integer" + } + }, + "type": "object" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "avatar_static": { + "format": "uri", + "type": "string" + }, + "bot": { + "type": "boolean" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "emojis": { + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "follow_requests_count": { + "type": "integer" + }, + "followers_count": { + "type": "integer" + }, + "following_count": { + "type": "integer" + }, + "header": { + "format": "uri", + "type": "string" + }, + "header_static": { + "format": "uri", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "is_active": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "locked": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "note": { + "format": "html", + "type": "string" + }, + "pleroma": { + "properties": { + "allow_following_move": { + "description": "whether the user allows automatically follow moved following accounts", + "type": "boolean" + }, + "also_known_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ap_id": { + "type": "string" + }, + "background_image": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "favicon": { + "description": "Favicon image of the user's instance", + "format": "uri", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "type": "boolean" + }, + "hide_followers": { + "description": "whether the user has follower hiding enabled", + "type": "boolean" + }, + "hide_followers_count": { + "description": "whether the user has follower stat hiding enabled", + "type": "boolean" + }, + "hide_follows": { + "description": "whether the user has follow hiding enabled", + "type": "boolean" + }, + "hide_follows_count": { + "description": "whether the user has follow stat hiding enabled", + "type": "boolean" + }, + "is_admin": { + "description": "whether the user is an admin of the local instance", + "type": "boolean" + }, + "is_confirmed": { + "description": "whether the user account is waiting on email confirmation to be activated", + "type": "boolean" + }, + "is_moderator": { + "description": "whether the user is a moderator of the local instance", + "type": "boolean" + }, + "notification_settings": { + "properties": { + "block_from_strangers": { + "type": "boolean" + }, + "hide_notification_contents": { + "type": "boolean" + } + }, + "type": "object" + }, + "relationship": { + "allOf": [ + { + "$ref": "#/components/schemas/AccountRelationship" + } + ], + "nullable": true + }, + "settings_store": { + "description": "A generic map of settings for frontends. Opaque to the backend. Only returned in `verify_credentials` and `update_credentials`", + "type": "object" + }, + "skip_thread_containment": { + "type": "boolean" + }, + "tags": { + "description": "List of tags being used for things like extra roles or moderation(ie. marking all media as nsfw all).", + "items": { + "type": "string" + }, + "type": "array" + }, + "unread_conversation_count": { + "description": "The count of unread conversations. Only returned to the account owner.", + "type": "integer" + } + }, + "type": "object" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "source": { + "properties": { + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "note": { + "description": "Plaintext version of the bio without formatting applied by the backend, used for editing the bio.", + "type": "string" + }, + "pleroma": { + "properties": { + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "discoverable": { + "description": "whether the user allows indexing / listing of the account by external services (search engines etc.).", + "type": "boolean" + }, + "no_rich_text": { + "description": "whether the HTML tags for rich-text formatting are stripped from all statuses requested from the API.", + "type": "boolean" + }, + "show_role": { + "description": "whether the user wants their role (e.g admin, moderator) to be shown", + "type": "boolean" + } + }, + "type": "object" + }, + "privacy": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "sensitive": { + "type": "boolean" + } + }, + "type": "object" + }, + "statuses_count": { + "type": "integer" + }, + "url": { + "format": "uri", + "type": "string" + }, + "username": { + "type": "string" + } + }, + "title": "Account", + "type": "object" + }, + "actor": { + "description": "Account view for admins", + "properties": { + "acct": { + "type": "string" + }, + "akkoma": { + "properties": { + "instance": { + "nullable": true, + "properties": { + "favicon": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "name": { + "type": "string" + }, + "nodeinfo": { + "nullable": true, + "type": "object" + } + }, + "type": "object" + }, + "permit_followback": { + "type": "boolean" + }, + "status_ttl_days": { + "nullable": true, + "type": "integer" + } + }, + "type": "object" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "avatar_static": { + "format": "uri", + "type": "string" + }, + "bot": { + "type": "boolean" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "emojis": { + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "follow_requests_count": { + "type": "integer" + }, + "followers_count": { + "type": "integer" + }, + "following_count": { + "type": "integer" + }, + "header": { + "format": "uri", + "type": "string" + }, + "header_static": { + "format": "uri", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "is_active": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "locked": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "note": { + "format": "html", + "type": "string" + }, + "pleroma": { + "properties": { + "allow_following_move": { + "description": "whether the user allows automatically follow moved following accounts", + "type": "boolean" + }, + "also_known_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ap_id": { + "type": "string" + }, + "background_image": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "favicon": { + "description": "Favicon image of the user's instance", + "format": "uri", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "type": "boolean" + }, + "hide_followers": { + "description": "whether the user has follower hiding enabled", + "type": "boolean" + }, + "hide_followers_count": { + "description": "whether the user has follower stat hiding enabled", + "type": "boolean" + }, + "hide_follows": { + "description": "whether the user has follow hiding enabled", + "type": "boolean" + }, + "hide_follows_count": { + "description": "whether the user has follow stat hiding enabled", + "type": "boolean" + }, + "is_admin": { + "description": "whether the user is an admin of the local instance", + "type": "boolean" + }, + "is_confirmed": { + "description": "whether the user account is waiting on email confirmation to be activated", + "type": "boolean" + }, + "is_moderator": { + "description": "whether the user is a moderator of the local instance", + "type": "boolean" + }, + "notification_settings": { + "properties": { + "block_from_strangers": { + "type": "boolean" + }, + "hide_notification_contents": { + "type": "boolean" + } + }, + "type": "object" + }, + "relationship": { + "allOf": [ + { + "$ref": "#/components/schemas/AccountRelationship" + } + ], + "nullable": true + }, + "settings_store": { + "description": "A generic map of settings for frontends. Opaque to the backend. Only returned in `verify_credentials` and `update_credentials`", + "type": "object" + }, + "skip_thread_containment": { + "type": "boolean" + }, + "tags": { + "description": "List of tags being used for things like extra roles or moderation(ie. marking all media as nsfw all).", + "items": { + "type": "string" + }, + "type": "array" + }, + "unread_conversation_count": { + "description": "The count of unread conversations. Only returned to the account owner.", + "type": "integer" + } + }, + "type": "object" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "source": { + "properties": { + "fields": { + "items": { + "$ref": "#/components/schemas/AccountField" + }, + "type": "array" + }, + "note": { + "description": "Plaintext version of the bio without formatting applied by the backend, used for editing the bio.", + "type": "string" + }, + "pleroma": { + "properties": { + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "discoverable": { + "description": "whether the user allows indexing / listing of the account by external services (search engines etc.).", + "type": "boolean" + }, + "no_rich_text": { + "description": "whether the HTML tags for rich-text formatting are stripped from all statuses requested from the API.", + "type": "boolean" + }, + "show_role": { + "description": "whether the user wants their role (e.g admin, moderator) to be shown", + "type": "boolean" + } + }, + "type": "object" + }, + "privacy": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "sensitive": { + "type": "boolean" + } + }, + "type": "object" + }, + "statuses_count": { + "type": "integer" + }, + "url": { + "format": "uri", + "type": "string" + }, + "username": { + "type": "string" + } + }, + "title": "Account", + "type": "object" + }, + "content": { + "type": "string" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "notes": { + "items": { + "properties": { + "content": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "inserted_at": { + "format": "date-time", + "type": "string" + }, + "user_id": { + "$ref": "#/components/schemas/FlakeID" + } + }, + "type": "object" + }, + "type": "array" + }, + "state": { + "enum": [ + "open", + "closed", + "resolved" + ], + "type": "string" + }, + "statuses": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Report" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:read:reports" + ] + } + ], + "summary": "Retrieve a report", + "tags": [ + "Report managment" + ] + } + }, + "/api/v1/pleroma/admin/users/invite_token": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.InviteController.create", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "expires_at": { + "example": "2020-04-20", + "format": "date", + "type": "string" + }, + "max_use": { + "type": "integer" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "expires_at": { + "example": "2020-04-20", + "format": "date", + "type": "string" + }, + "max_use": { + "type": "integer" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "expires_at": { + "example": "2020-04-20", + "format": "date", + "type": "string" + }, + "max_use": { + "type": "integer" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "expires_at": { + "format": "date", + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + }, + "invite_type": { + "enum": [ + "one_time", + "reusable", + "date_limited", + "reusable_date_limited" + ], + "type": "string" + }, + "max_use": { + "nullable": true, + "type": "integer" + }, + "token": { + "type": "string" + }, + "used": { + "type": "boolean" + }, + "uses": { + "type": "integer" + } + }, + "title": "Invite", + "type": "object" + } + } + }, + "description": "Invite" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:invites" + ] + } + ], + "summary": "Create an account registration invite token", + "tags": [ + "Invites" + ] + } + }, + "/api/v1/pleroma/admin/announcements/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.AnnouncementController.delete", + "parameters": [ + { + "description": "announcement id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Delete one announcement", + "tags": [ + "Announcement managment" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.AnnouncementController.show", + "parameters": [ + { + "description": "announcement id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Announcement" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:read" + ] + } + ], + "summary": "Display one announcement", + "tags": [ + "Announcement managment" + ] + }, + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.AnnouncementController.change", + "parameters": [ + { + "description": "announcement id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "title": "AnnouncementChangeRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "title": "AnnouncementChangeRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "title": "AnnouncementChangeRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Announcement" + } + } + }, + "description": "Response" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Change one announcement", + "tags": [ + "Announcement managment" + ] + } + }, + "/api/v1/pleroma/emoji/packs/archive": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.EmojiPackController.archive", + "parameters": [ + { + "description": "Pack Name", + "example": "cofe", + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/octet-stream": { + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "description": "Archive file" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Requests a local pack archive from the instance", + "tags": [ + "Emoji packs" + ] + } + }, + "/api/v1/pleroma/admin/frontends": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.FrontendController.index", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "build_url": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "git": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "installed": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:read" + ] + } + ], + "summary": "Retrieve a list of available frontends", + "tags": [ + "Frontend managment" + ] + } + }, + "/api/v1/pleroma/admin/users/unfollow": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.unfollow", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "followed": { + "description": "Followed nickname", + "type": "string" + }, + "follower": { + "description": "Follower nickname", + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "followed": { + "description": "Followed nickname", + "type": "string" + }, + "follower": { + "description": "Follower nickname", + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "followed": { + "description": "Followed nickname", + "type": "string" + }, + "follower": { + "description": "Follower nickname", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:follows" + ] + } + ], + "summary": "Unfollow", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/pleroma/emoji": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.emoji", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "properties": { + "image_url": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "example": { + "firefox": { + "image_url": "/emoji/firefox.png", + "tag": [ + "Fun" + ] + } + }, + "type": "object" + } + } + }, + "description": "List" + } + }, + "summary": "List all custom emojis", + "tags": [ + "Emojis" + ] + } + }, + "/api/v1/followed_tags": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View a list of hashtags the currently authenticated user is following", + "operationId": "TagController.show_followed", + "parameters": [ + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Tag" + }, + "type": "array" + } + } + }, + "description": "Hashtags" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:follows" + ] + } + ], + "summary": "Followed hashtags", + "tags": [ + "Tags" + ] + } + }, + "/api/v1/bookmarks": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Statuses the user has bookmarked", + "operationId": "StatusController.bookmarks", + "parameters": [ + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + } + }, + "description": "Array of Statuses" + } + }, + "security": [ + { + "oAuth": [ + "read:bookmarks" + ] + } + ], + "summary": "Bookmarked statuses", + "tags": [ + "Timelines" + ] + } + }, + "/api/v1/preferences": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Preferences defined by the user in their account settings.", + "operationId": "AccountController.preferences", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Account" + } + } + }, + "description": "Preferences" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Preferred common behaviors to be shared across clients.", + "tags": [ + "Account Preferences" + ] + } + }, + "/api/v1/pleroma/admin/users/{nickname}/toggle_activation": { + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.toggle_activation", + "parameters": [ + { + "description": "User nickname", + "in": "path", + "name": "nickname", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "actor_type": { + "type": "string" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_approved": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "registration_reason": { + "nullable": true, + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:accounts" + ] + } + ], + "summary": "Toggle user activation", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/akkoma/translation/languages": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View the translation of a given status", + "operationId": "AkkomaAPI.TranslationController.languages", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "source": { + "items": { + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "target": { + "items": { + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "source", + "target" + ], + "type": "object" + } + } + }, + "description": "Translation" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Translate status", + "tags": [ + "Retrieve status translation" + ] + } + }, + "/api/v2/search": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "SearchController.search2", + "parameters": [ + { + "description": "If provided, statuses returned will be authored only by this account", + "in": "query", + "name": "account_id", + "required": false, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Search type", + "in": "query", + "name": "type", + "required": false, + "schema": { + "enum": [ + "accounts", + "hashtags", + "statuses" + ], + "type": "string" + } + }, + { + "description": "What to search for", + "in": "query", + "name": "q", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Attempt WebFinger lookup", + "in": "query", + "name": "resolve", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Only include accounts that the user is following", + "in": "query", + "name": "following", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Embed relationships into accounts. **If this parameter is not set account's `pleroma.relationship` is going to be `null`.**", + "in": "query", + "name": "with_relationships", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "accounts": { + "description": "Accounts which match the given query", + "items": { + "$ref": "#/components/schemas/Account" + }, + "type": "array" + }, + "hashtags": { + "description": "Hashtags which match the given query", + "items": { + "$ref": "#/components/schemas/Tag" + }, + "type": "array" + }, + "statuses": { + "description": "Statuses which match the given query", + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + }, + "title": "SearchResults", + "type": "object" + } + } + }, + "description": "Results" + } + }, + "security": [ + { + "oAuth": [ + "read:search" + ] + } + ], + "summary": "Search results", + "tags": [ + "Search" + ] + } + }, + "/api/v1/statuses/{id}/history": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View history of a status", + "operationId": "StatusController.show_history", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for history of a status", + "items": { + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + } + ], + "description": "The account that authored this status" + }, + "content": { + "description": "HTML-encoded status content", + "format": "html", + "type": "string" + }, + "created_at": { + "description": "The date when this status was created", + "format": "date-time", + "type": "string" + }, + "emojis": { + "description": "Custom emoji to be used when rendering status content", + "items": { + "$ref": "#/components/schemas/Emoji" + }, + "type": "array" + }, + "media_attachments": { + "description": "Media that is attached to this status", + "items": { + "$ref": "#/components/schemas/Attachment" + }, + "type": "array" + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/Poll" + } + ], + "description": "The poll attached to the status", + "nullable": true + }, + "sensitive": { + "description": "Is this status marked as sensitive content?", + "type": "boolean" + }, + "spoiler_text": { + "description": "Subject or summary line, below which status content is collapsed until expanded", + "type": "string" + } + }, + "type": "object" + }, + "title": "Status history", + "type": "array" + } + } + }, + "description": "Status History" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Status history", + "tags": [ + "Retrieve status history" + ] + } + }, + "/api/v1/pleroma/admin/media_proxy_caches/delete": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.MediaProxyCacheController.delete", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "urls": { + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "urls" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "urls": { + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "urls" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "urls": { + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "urls" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": {}, + "type": "object" + } + } + }, + "description": "Empty object" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:media_proxy_caches" + ] + } + ], + "summary": "Remove a banned MediaProxy URL", + "tags": [ + "MediaProxy cache" + ] + } + }, + "/api/v1/accounts/{id}/mute": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Mute the given account. Clients should filter statuses and notifications from this account, if received (e.g. due to a boost in the Home timeline).", + "operationId": "AccountController.mute", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + }, + { + "description": "Mute notifications in addition to statuses? Defaults to `true`.", + "in": "query", + "name": "notifications", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true + } + }, + { + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "in": "query", + "name": "expires_in", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for muting an account", + "example": { + "expires_in": 86400, + "notifications": true + }, + "properties": { + "expires_in": { + "default": 0, + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "nullable": true, + "type": "integer" + }, + "notifications": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Mute notifications in addition to statuses? Defaults to true.", + "nullable": true + } + }, + "title": "AccountMuteRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for muting an account", + "example": { + "expires_in": 86400, + "notifications": true + }, + "properties": { + "expires_in": { + "default": 0, + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "nullable": true, + "type": "integer" + }, + "notifications": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Mute notifications in addition to statuses? Defaults to true.", + "nullable": true + } + }, + "title": "AccountMuteRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for muting an account", + "example": { + "expires_in": 86400, + "notifications": true + }, + "properties": { + "expires_in": { + "default": 0, + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "nullable": true, + "type": "integer" + }, + "notifications": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Mute notifications in addition to statuses? Defaults to true.", + "nullable": true + } + }, + "title": "AccountMuteRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:mutes" + ] + } + ], + "summary": "Mute", + "tags": [ + "Account actions" + ] + } + }, + "/api/v1/directory": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "DirectoryController.index", + "parameters": [ + { + "description": "Order by recent activity or account creation", + "in": "query", + "name": "order", + "schema": { + "type": "string" + } + }, + { + "description": "Include local users only", + "in": "query", + "name": "local", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "title": "ArrayOfAccounts", + "type": "array" + } + } + }, + "description": "Accounts" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Profile directory", + "tags": [ + "Directory" + ] + } + }, + "/api/pleroma/move_account": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.move_account", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for moving the account", + "properties": { + "password": { + "description": "Current password", + "type": "string" + }, + "target_account": { + "description": "The nickname of the target account to move to", + "type": "string" + } + }, + "required": [ + "password", + "target_account" + ], + "title": "MoveAccountRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for moving the account", + "properties": { + "password": { + "description": "Current password", + "type": "string" + }, + "target_account": { + "description": "The nickname of the target account to move to", + "type": "string" + } + }, + "required": [ + "password", + "target_account" + ], + "title": "MoveAccountRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for moving the account", + "properties": { + "password": { + "description": "Current password", + "type": "string" + }, + "target_account": { + "description": "The nickname of the target account to move to", + "type": "string" + } + }, + "required": [ + "password", + "target_account" + ], + "title": "MoveAccountRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Move account", + "tags": [ + "Account credentials" + ] + } + }, + "/api/v1/accounts/{id}/identity_proofs": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Not implemented", + "operationId": "AccountController.identity_proofs", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": [], + "items": { + "example": {}, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Empty array" + } + }, + "summary": "Identity proofs", + "tags": [ + "Retrieve account information" + ] + } + }, + "/api/v1/akkoma/preferred_frontend": { + "put": { + "callbacks": {}, + "deprecated": false, + "description": "Store preferred frontend in cookies", + "operationId": "AkkomaAPI.FrontendSettingsController.update_preferred_frontend", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "frontend_name": { + "description": "Frontend name", + "type": "string" + } + }, + "required": [ + "frontend_name" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "frontend_name": { + "description": "Frontend name", + "type": "string" + } + }, + "required": [ + "frontend_name" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "frontend_name": { + "description": "Frontend name", + "type": "string" + } + }, + "required": [ + "frontend_name" + ], + "type": "object" + } + } + }, + "description": "Frontend", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "frontend_name": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Frontends" + } + }, + "summary": "Update preferred frontend setting", + "tags": [ + "Frontends" + ] + } + }, + "/api/v1/pleroma/admin/statuses/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.StatusController.delete", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": {}, + "type": "object" + } + } + }, + "description": "Empty object" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:statuses" + ] + } + ], + "summary": "Delete status", + "tags": [ + "Status adminitration)" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.StatusController.show", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/Status" + }, + { + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + }, + { + "properties": { + "avatar": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "is_active": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "type": "object" + } + ] + } + } + }, + "description": "Status" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:read:statuses" + ] + } + ], + "summary": "Get status", + "tags": [ + "Status adminitration)" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.StatusController.update", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "sensitive": "false", + "visibility": "private" + }, + "properties": { + "sensitive": { + "description": "Mark status and attached media as sensitive?", + "type": "boolean" + }, + "visibility": { + "$ref": "#/components/schemas/VisibilityScope" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "example": { + "sensitive": "false", + "visibility": "private" + }, + "properties": { + "sensitive": { + "description": "Mark status and attached media as sensitive?", + "type": "boolean" + }, + "visibility": { + "$ref": "#/components/schemas/VisibilityScope" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "example": { + "sensitive": "false", + "visibility": "private" + }, + "properties": { + "sensitive": { + "description": "Mark status and attached media as sensitive?", + "type": "boolean" + }, + "visibility": { + "$ref": "#/components/schemas/VisibilityScope" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:statuses" + ] + } + ], + "summary": "Change the scope of a status", + "tags": [ + "Status adminitration)" + ] + } + }, + "/api/v1/pleroma/admin/users/unsuggest": { + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.unsuggest", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for removing multiple suggested users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for removing multiple suggested users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for removing multiple suggested users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "user": { + "items": { + "properties": { + "actor_type": { + "type": "string" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_approved": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "registration_reason": { + "nullable": true, + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:accounts" + ] + } + ], + "summary": "Unsuggest multiple users", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/pleroma/statuses/{id}/reactions/{emoji}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "EmojiReactionController.delete", + "parameters": [ + { + "description": "Status ID", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "A single character unicode emoji, or a :shortcode: format emoji name", + "in": "path", + "name": "emoji", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + } + }, + "security": [ + { + "oAuth": [ + "write:statuses" + ] + } + ], + "summary": "Remove a reaction to a post with either a unicode or custom emoji", + "tags": [ + "Emoji reactions" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "EmojiReactionController.index (2)", + "parameters": [ + { + "description": "Status ID", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Filter by a single unicode emoji", + "in": "path", + "name": "emoji", + "schema": { + "type": "string" + } + }, + { + "description": "Include reactions from muted acccounts.", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + + "properties": { + "accounts": { + "description": "Array of accounts reacted with this emoji", + "items": { + "$ref": "#/components/schemas/Account" + }, + "type": "array" + }, + "count": { + "description": "Count of reactions with this emoji", + "type": "integer" + }, + "me": { + "description": "Did I react with this emoji?", + "type": "boolean" + }, + "name": { + "description": "Emoji", + "type": "string" + }, + "url": { + "description": "URL of the emoji if it's custom - otherwise null", + "format": "url", + "nullable": true, + "type": "string" + } + }, + "title": "EmojiReaction", + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Array of Emoji reactions" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Get an object of emoji to account mappings with accounts that reacted to the post", + "tags": [ + "Emoji reactions" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "operationId": "EmojiReactionController.create (2)", + "parameters": [ + { + "description": "Status ID", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "A single character unicode emoji, or a :shortcode: format emoji name", + "in": "path", + "name": "emoji", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "write:statuses" + ] + } + ], + "summary": "React to a post with either a unicode or custom emoji", + "tags": [ + "Emoji reactions" + ] + } + }, + "/api/v1/pleroma/accounts/{id}/favourites": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Only returns data if the user has opted into sharing it. See `hide_favorites` in [Update account credentials](#operation/AccountController.update_credentials).", + "operationId": "PleromaAPI.AccountController.favourites", + "parameters": [ + { + "description": "Account ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + } + }, + "description": "Array of Statuses" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:favourites" + ] + } + ], + "summary": "Favorites", + "tags": [ + "Retrieve account information" + ] + } + }, + "/api/v1/accounts/lookup": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AccountController.lookup", + "parameters": [ + { + "description": "User nickname", + "in": "query", + "name": "acct", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Account" + } + } + }, + "description": "Account" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "summary": "Find a user by nickname", + "tags": [ + "Account lookup" + ] + } + }, + "/api/v1/statuses/{id}/unbookmark": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Remove a status from your private bookmarks", + "operationId": "StatusController.unbookmark", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + } + }, + "security": [ + { + "oAuth": [ + "write:bookmarks" + ] + } + ], + "summary": "Undo bookmark", + "tags": [ + "Status actions" + ] + } + }, + "/api/v1/pleroma/accounts/{id}/subscribe": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Receive notifications for all statuses posted by the account.", + "operationId": "PleromaAPI.AccountController.subscribe", + "parameters": [ + { + "description": "Account ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:follows" + ] + } + ], + "summary": "Subscribe", + "tags": [ + "Account actions" + ] + } + }, + "/api/pleroma/follow_import": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UserImportController.follow", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": "ok", + "type": "string" + } + } + }, + "description": "Ok" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:follow" + ] + } + ], + "summary": "Import follows", + "tags": [ + "Data import" + ] + } + }, + "/api/v1/pleroma/admin/users/approve": { + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.approve", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for approving multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for approving multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for approving multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "user": { + "items": { + "properties": { + "actor_type": { + "type": "string" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_approved": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "registration_reason": { + "nullable": true, + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:accounts" + ] + } + ], + "summary": "Approve multiple users", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/accounts/{id}/followers": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Accounts which follow the given account, if network is not hidden by the account owner.", + "operationId": "AccountController.followers", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + }, + { + "description": "Embed relationships into accounts. **If this parameter is not set account's `pleroma.relationship` is going to be `null`.**", + "in": "query", + "name": "with_relationships", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "title": "ArrayOfAccounts", + "type": "array" + } + } + }, + "description": "Accounts" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Followers", + "tags": [ + "Retrieve account information" + ] + } + }, + "/api/v1/favourites": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Statuses the user has favourited. Please note that you have to use the link headers to paginate this. You can not build the query parameters yourself.", + "operationId": "StatusController.favourites", + "parameters": [ + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + } + }, + "description": "Array of Statuses" + } + }, + "security": [ + { + "oAuth": [ + "read:favourites" + ] + } + ], + "summary": "Favourited statuses", + "tags": [ + "Timelines" + ] + } + }, + "/api/v1/filters/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "FilterController.delete", + "parameters": [ + { + "description": "Filter ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Empty object", + "type": "object" + } + } + }, + "description": "Filter" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:filters" + ] + } + ], + "summary": "Remove a filter", + "tags": [ + "Filters" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "FilterController.show", + "parameters": [ + { + "description": "Filter ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "context": { + "description": "The contexts in which the filter should be applied.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "type": "string" + }, + "irreversible": { + "description": "Should matching entities in home and notifications be dropped by the server?", + "type": "boolean" + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "description": "Should the filter consider word boundaries?", + "type": "boolean" + } + }, + "title": "Filter", + "type": "object" + } + } + }, + "description": "Filter" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:filters" + ] + } + ], + "summary": "Filter", + "tags": [ + "Filters" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "operationId": "FilterController.update", + "parameters": [ + { + "description": "Filter ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "properties": { + "context": { + "description": "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire.", + "nullable": true, + "type": "integer" + }, + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Should the server irreversibly drop matching entities from home and notifications?", + "nullable": true + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Consider word boundaries?", + "nullable": true + } + }, + "required": [ + "phrase", + "context" + ], + "title": "FilterUpdateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "properties": { + "context": { + "description": "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire.", + "nullable": true, + "type": "integer" + }, + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Should the server irreversibly drop matching entities from home and notifications?", + "nullable": true + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Consider word boundaries?", + "nullable": true + } + }, + "required": [ + "phrase", + "context" + ], + "title": "FilterUpdateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "properties": { + "context": { + "description": "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire.", + "nullable": true, + "type": "integer" + }, + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Should the server irreversibly drop matching entities from home and notifications?", + "nullable": true + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Consider word boundaries?", + "nullable": true + } + }, + "required": [ + "phrase", + "context" + ], + "title": "FilterUpdateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "context": { + "description": "The contexts in which the filter should be applied.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "type": "string" + }, + "irreversible": { + "description": "Should matching entities in home and notifications be dropped by the server?", + "type": "boolean" + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "description": "Should the filter consider word boundaries?", + "type": "boolean" + } + }, + "title": "Filter", + "type": "object" + } + } + }, + "description": "Filter" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:filters" + ] + } + ], + "summary": "Update a filter", + "tags": [ + "Filters" + ] + } + }, + "/api/v1/accounts/{id}/note": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Create a note for the given account.", + "operationId": "AccountController.note", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + }, + { + "description": "Account note body", + "in": "query", + "name": "comment", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for adding a note for an account", + "example": { + "comment": "Example note" + }, + "properties": { + "comment": { + "description": "Account note body", + "type": "string" + } + }, + "title": "AccountNoteRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for adding a note for an account", + "example": { + "comment": "Example note" + }, + "properties": { + "comment": { + "description": "Account note body", + "type": "string" + } + }, + "title": "AccountNoteRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for adding a note for an account", + "example": { + "comment": "Example note" + }, + "properties": { + "comment": { + "description": "Account note body", + "type": "string" + } + }, + "title": "AccountNoteRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:accounts" + ] + } + ], + "summary": "Set a private note about a user.", + "tags": [ + "Account actions" + ] + } + }, + "/api/v0/pleroma/reports": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.ReportController.index", + "parameters": [ + { + "description": "Filter by report state", + "in": "query", + "name": "state", + "required": false, + "schema": { + "enum": [ + "open", + "closed", + "resolved" + ], + "type": "string" + } + }, + { + "description": "The number of records to retrieve", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" + } + }, + { + "description": "Number number of log entries per page", + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "default": 50, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "reports": { + "items": { + "properties": { + "account": { + "$ref": "#/components/schemas/Account" + }, + "actor": { + "$ref": "#/components/schemas/Account" + }, + "content": { + "type": "string" + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "$ref": "#/components/schemas/FlakeID" + }, + "state": { + "enum": [ + "open", + "closed", + "resolved" + ], + "type": "string" + }, + "statuses": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:reports" + ] + } + ], + "summary": "Get a list of your own reports", + "tags": [ + "Reports" + ] + } + }, + "/api/v1/pleroma/admin/config/descriptions": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.ConfigController.descriptions", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "children": { + "items": { + "properties": { + "description": { + "type": "string" + }, + "key": { + "type": "string" + }, + "suggestions": { + "type": "array" + }, + "type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array" + } + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "key": { + "type": "string" + }, + "type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array" + } + ] + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Config Descriptions" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "admin:read" + ] + } + ], + "summary": "Retrieve config description", + "tags": [ + "Instance configuration" + ] + } + }, + "/api/v1/statuses/{id}/reblogged_by": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View who reblogged a given status", + "operationId": "StatusController.reblogged_by", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "title": "ArrayOfAccounts", + "type": "array" + } + } + }, + "description": "Array of Accounts" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Reblogged by", + "tags": [ + "Retrieve status information" + ] + } + }, + "/api/v1/follow_requests/{id}/reject": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "FollowRequestController.reject", + "parameters": [ + { + "description": "Conversation ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:follows" + ] + } + ], + "summary": "Reject follow request", + "tags": [ + "Follow requests" + ] + } + }, + "/api/v1/suggestions/{account_id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "SuggestionController.dismiss", + "parameters": [ + { + "description": "Account to dismiss", + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": {}, + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "summary": "Remove a suggestion", + "tags": [ + "Suggestions" + ] + } + }, + "/api/v1/pleroma/emoji/packs/import": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.EmojiPackController.import", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "description": "Array of imported pack names" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Imports packs from filesystem", + "tags": [ + "Emoji pack administration" + ] + } + }, + "/api/v1/mutes": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Accounts the user has muted.", + "operationId": "AccountController.mutes", + "parameters": [ + { + "description": "Embed relationships into accounts. **If this parameter is not set account's `pleroma.relationship` is going to be `null`.**", + "in": "query", + "name": "with_relationships", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "title": "ArrayOfAccounts", + "type": "array" + } + } + }, + "description": "Accounts" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "read:mutes" + ] + } + ], + "summary": "Retrieve list of mutes", + "tags": [ + "Blocks and mutes" + ] + } + }, + "/api/pleroma/aliases": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.delete_alias", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "PUT body for deleting aliases", + "properties": { + "alias": { + "description": "The nickname of the account to delete from aliases", + "type": "string" + } + }, + "required": [ + "alias" + ], + "title": "DeleteAliasRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "PUT body for deleting aliases", + "properties": { + "alias": { + "description": "The nickname of the account to delete from aliases", + "type": "string" + } + }, + "required": [ + "alias" + ], + "title": "DeleteAliasRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "PUT body for deleting aliases", + "properties": { + "alias": { + "description": "The nickname of the account to delete from aliases", + "type": "string" + } + }, + "required": [ + "alias" + ], + "title": "DeleteAliasRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Delete an alias from this account", + "tags": [ + "Account credentials" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.list_aliases", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "aliases": { + "example": [ + "foo@example.org" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "List account aliases", + "tags": [ + "Account credentials" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.add_alias", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "PUT body for adding aliases", + "properties": { + "alias": { + "description": "The nickname of the account to add to aliases", + "type": "string" + } + }, + "required": [ + "alias" + ], + "title": "AddAliasRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "PUT body for adding aliases", + "properties": { + "alias": { + "description": "The nickname of the account to add to aliases", + "type": "string" + } + }, + "required": [ + "alias" + ], + "title": "AddAliasRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "PUT body for adding aliases", + "properties": { + "alias": { + "description": "The nickname of the account to add to aliases", + "type": "string" + } + }, + "required": [ + "alias" + ], + "title": "AddAliasRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Add an alias to this account", + "tags": [ + "Account credentials" + ] + } + }, + "/api/v1/statuses/{id}/translations/{language}": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View the translation of a given status", + "operationId": "StatusController.translation", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "ISO 639 language code", + "example": "en", + "in": "path", + "name": "language", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "ISO 639 language code", + "example": "en", + "in": "query", + "name": "from", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The translation of a status.", + "properties": { + "detected_language": { + "description": "The detected language of the text", + "type": "string" + }, + "text": { + "description": "The translated text", + "type": "string" + } + }, + "required": [ + "detected_language", + "text" + ], + "title": "StatusTranslation", + "type": "object" + } + } + }, + "description": "Translation" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Translate status", + "tags": [ + "Retrieve status translation" + ] + } + }, + "/api/v1/domain_blocks": { + "delete": { + "callbacks": {}, + "deprecated": false, + "description": "Remove a domain block, if it exists in the user's array of blocked domains.", + "operationId": "DomainBlockController.delete", + "parameters": [ + { + "description": "Domain name", + "in": "query", + "name": "domain", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "example": { + "domain": "facebook.com" + }, + "schema": { + "properties": { + "domain": { + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "example": { + "domain": "facebook.com" + }, + "schema": { + "properties": { + "domain": { + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "example": { + "domain": "facebook.com" + }, + "schema": { + "properties": { + "domain": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:blocks" + ] + } + ], + "summary": "Unblock a domain", + "tags": [ + "Domain blocks" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "DomainBlockController.index", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for domain blocks", + "example": [ + "google.com", + "facebook.com" + ], + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "description": "Domain blocks" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "read:blocks" + ] + } + ], + "summary": "Retrieve a list of blocked domains", + "tags": [ + "Domain blocks" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Block a domain to:\n\n- hide all public posts from it\n- hide all notifications from it\n- remove all followers from it\n- prevent following new users from it (but does not remove existing follows)\n", + "operationId": "DomainBlockController.create", + "parameters": [ + { + "description": "Domain name", + "in": "query", + "name": "domain", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "example": { + "domain": "facebook.com" + }, + "schema": { + "properties": { + "domain": { + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "example": { + "domain": "facebook.com" + }, + "schema": { + "properties": { + "domain": { + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "example": { + "domain": "facebook.com" + }, + "schema": { + "properties": { + "domain": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": {}, + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:blocks" + ] + } + ], + "summary": "Block a domain", + "tags": [ + "Domain blocks" + ] + } + }, + "/api/v1/pleroma/backups": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.BackupController.index", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "description": "Response schema for a backup", + "example": { + "content_type": "application/zip", + "file_name": "https://cofe.fe:4000/media/backups/archive-foobar-20200908T164207-Yr7vuT5Wycv-sN3kSN2iJ0k-9pMo60j9qmvRCdDqIew.zip", + "file_size": 4105, + "inserted_at": "2020-09-08T16:42:07.000Z", + "processed": true + }, + "properties": { + "content_type": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "file_size": { + "type": "integer" + }, + "inserted_at": { + "format": "date-time", + "type": "string" + }, + "processed": { + "type": "boolean" + } + }, + "title": "Backup", + "type": "object" + }, + "type": "array" + } + } + }, + "description": "An array of backups" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "read:backups" + ] + } + ], + "summary": "List backups", + "tags": [ + "Backups" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.BackupController.create", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "description": "Response schema for a backup", + "example": { + "content_type": "application/zip", + "file_name": "https://cofe.fe:4000/media/backups/archive-foobar-20200908T164207-Yr7vuT5Wycv-sN3kSN2iJ0k-9pMo60j9qmvRCdDqIew.zip", + "file_size": 4105, + "inserted_at": "2020-09-08T16:42:07.000Z", + "processed": true + }, + "properties": { + "content_type": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "file_size": { + "type": "integer" + }, + "inserted_at": { + "format": "date-time", + "type": "string" + }, + "processed": { + "type": "boolean" + } + }, + "title": "Backup", + "type": "object" + }, + "type": "array" + } + } + }, + "description": "An array of backups" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "read:backups" + ] + } + ], + "summary": "Create a backup", + "tags": [ + "Backups" + ] + } + }, + "/api/v1/pleroma/admin/reports/{id}/notes": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.ReportController.notes_create", + "parameters": [ + { + "description": "Report ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "content": { + "description": "The message", + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "content": { + "description": "The message", + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "content": { + "description": "The message", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "204": { + "content": { + "application/json": { + "schema": { + "example": "", + "type": "string" + } + } + }, + "description": "No Content" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:reports" + ] + } + ], + "summary": "Add a note to the report", + "tags": [ + "Report managment" + ] + } + }, + "/api/v1/pleroma/admin/users/invites": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.InviteController.index", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "invites": { + "items": { + + "properties": { + "expires_at": { + "format": "date", + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + }, + "invite_type": { + "enum": [ + "one_time", + "reusable", + "date_limited", + "reusable_date_limited" + ], + "type": "string" + }, + "max_use": { + "nullable": true, + "type": "integer" + }, + "token": { + "type": "string" + }, + "used": { + "type": "boolean" + }, + "uses": { + "type": "integer" + } + }, + "title": "Invite", + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Invites" + } + }, + "security": [ + { + "oAuth": [ + "admin:read:invites" + ] + } + ], + "summary": "Get a list of generated invites", + "tags": [ + "Invites" + ] + } + }, + "/api/v1/media": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Creates an attachment to be used with a new status.", + "operationId": "MediaController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating an attachment", + "properties": { + "description": { + "description": "A plain-text description of the media, for accessibility purposes.", + "type": "string" + }, + "file": { + "description": "The file to be attached, using multipart form data.", + "format": "binary", + "type": "string" + }, + "focus": { + "description": "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0.", + "type": "string" + } + }, + "required": [ + "file" + ], + "title": "MediaCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating an attachment", + "properties": { + "description": { + "description": "A plain-text description of the media, for accessibility purposes.", + "type": "string" + }, + "file": { + "description": "The file to be attached, using multipart form data.", + "format": "binary", + "type": "string" + }, + "focus": { + "description": "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0.", + "type": "string" + } + }, + "required": [ + "file" + ], + "title": "MediaCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating an attachment", + "properties": { + "description": { + "description": "A plain-text description of the media, for accessibility purposes.", + "type": "string" + }, + "file": { + "description": "The file to be attached, using multipart form data.", + "format": "binary", + "type": "string" + }, + "focus": { + "description": "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0.", + "type": "string" + } + }, + "required": [ + "file" + ], + "title": "MediaCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Attachment" + } + } + }, + "description": "Media" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Media" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Media" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Media" + } + }, + "security": [ + { + "oAuth": [ + "write:media" + ] + } + ], + "summary": "Upload media as attachment", + "tags": [ + "Media attachments" + ] + } + }, + "/api/v1/pleroma/admin/users/email_invite": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.InviteController.email", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "email": { + "format": "email", + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "email" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "email": { + "format": "email", + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "email" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "email": { + "format": "email", + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "email" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "204": { + "content": { + "application/json": { + "schema": { + "example": "", + "type": "string" + } + } + }, + "description": "No Content" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:invites" + ] + } + ], + "summary": "Sends registration invite via email", + "tags": [ + "Invites" + ] + } + }, + "/api/v1/accounts/update_credentials": { + "patch": { + "callbacks": {}, + "deprecated": false, + "description": "Update the user's display and preferences.", + "operationId": "AccountController.update_credentials", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating an account", + "example": { + "accepts_direct_messages_from": "everybody", + "actor_type": "Person", + "allow_following_move": false, + "also_known_as": [ + "https://foo.bar/users/foo" + ], + "bot": false, + "default_scope": "private", + "discoverable": false, + "display_name": "cofe", + "fields_attributes": [ + { + "name": "foo", + "value": "bar" + } + ], + "hide_favorites": false, + "hide_followers": true, + "hide_followers_count": false, + "hide_follows": false, + "hide_follows_count": false, + "no_rich_text": false, + "note": "foobar", + "permit_followback": true, + "pleroma_settings_store": { + "pleroma-fe": { + "key": "val" + } + }, + "show_role": false, + "skip_thread_containment": false, + "status_ttl_days": 30 + }, + "properties": { + "accepts_direct_messages_from": { + "description": "Who to accept DMs from", + "enum": [ + "everybody", + "nobody", + "people_i_follow" + ], + "nullable": true, + "type": "string" + }, + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "allow_following_move": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allows automatically follow moved following accounts", + "nullable": true + }, + "also_known_as": { + "description": "List of alternate ActivityPub IDs", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "avatar": { + "description": "Avatar image encoded using multipart/form-data", + "format": "binary", + "nullable": true, + "type": "string" + }, + "bot": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether the account has a bot flag.", + "nullable": true + }, + "default_scope": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "discoverable": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Discovery (listing, indexing) of this account by external services (search bots etc.) is allowed.", + "nullable": true + }, + "display_name": { + "description": "The display name to use for the profile.", + "nullable": true, + "type": "string" + }, + "fields_attributes": { + "nullable": true, + "oneOf": [ + { + "items": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "type": "object" + } + ] + }, + "header": { + "description": "Header image encoded using multipart/form-data", + "format": "binary", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's favorites timeline will be hidden", + "nullable": true + }, + "hide_followers": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's followers will be hidden", + "nullable": true + }, + "hide_followers_count": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follower count will be hidden", + "nullable": true + }, + "hide_follows": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follows will be hidden", + "nullable": true + }, + "hide_follows_count": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follow count will be hidden", + "nullable": true + }, + "locked": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether manual approval of follow requests is required.", + "nullable": true + }, + "no_rich_text": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "html tags are stripped from all statuses requested from the API", + "nullable": true + }, + "note": { + "description": "The account bio.", + "type": "string" + }, + "permit_followback": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether follow requests from accounts the user is already following are auto-approved (when locked).", + "nullable": true + }, + "pleroma_background_image": { + "description": "Sets the background image of the user.", + "format": "binary", + "nullable": true, + "type": "string" + }, + "pleroma_settings_store": { + "description": "Opaque user settings to be saved on the backend.", + "nullable": true, + "type": "object" + }, + "show_role": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's role (e.g admin, moderator) will be exposed to anyone in the\n API", + "nullable": true + }, + "skip_thread_containment": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Skip filtering out broken threads", + "nullable": true + }, + "status_ttl_days": { + "description": "Number of days after which statuses will be deleted. Set to -1 to disable.", + "nullable": true, + "type": "integer" + } + }, + "title": "AccountUpdateCredentialsRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating an account", + "example": { + "accepts_direct_messages_from": "everybody", + "actor_type": "Person", + "allow_following_move": false, + "also_known_as": [ + "https://foo.bar/users/foo" + ], + "bot": false, + "default_scope": "private", + "discoverable": false, + "display_name": "cofe", + "fields_attributes": [ + { + "name": "foo", + "value": "bar" + } + ], + "hide_favorites": false, + "hide_followers": true, + "hide_followers_count": false, + "hide_follows": false, + "hide_follows_count": false, + "no_rich_text": false, + "note": "foobar", + "permit_followback": true, + "pleroma_settings_store": { + "pleroma-fe": { + "key": "val" + } + }, + "show_role": false, + "skip_thread_containment": false, + "status_ttl_days": 30 + }, + "properties": { + "accepts_direct_messages_from": { + "description": "Who to accept DMs from", + "enum": [ + "everybody", + "nobody", + "people_i_follow" + ], + "nullable": true, + "type": "string" + }, + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "allow_following_move": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allows automatically follow moved following accounts", + "nullable": true + }, + "also_known_as": { + "description": "List of alternate ActivityPub IDs", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "avatar": { + "description": "Avatar image encoded using multipart/form-data", + "format": "binary", + "nullable": true, + "type": "string" + }, + "bot": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether the account has a bot flag.", + "nullable": true + }, + "default_scope": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "discoverable": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Discovery (listing, indexing) of this account by external services (search bots etc.) is allowed.", + "nullable": true + }, + "display_name": { + "description": "The display name to use for the profile.", + "nullable": true, + "type": "string" + }, + "fields_attributes": { + "nullable": true, + "oneOf": [ + { + "items": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "type": "object" + } + ] + }, + "header": { + "description": "Header image encoded using multipart/form-data", + "format": "binary", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's favorites timeline will be hidden", + "nullable": true + }, + "hide_followers": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's followers will be hidden", + "nullable": true + }, + "hide_followers_count": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follower count will be hidden", + "nullable": true + }, + "hide_follows": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follows will be hidden", + "nullable": true + }, + "hide_follows_count": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follow count will be hidden", + "nullable": true + }, + "locked": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether manual approval of follow requests is required.", + "nullable": true + }, + "no_rich_text": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "html tags are stripped from all statuses requested from the API", + "nullable": true + }, + "note": { + "description": "The account bio.", + "type": "string" + }, + "permit_followback": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether follow requests from accounts the user is already following are auto-approved (when locked).", + "nullable": true + }, + "pleroma_background_image": { + "description": "Sets the background image of the user.", + "format": "binary", + "nullable": true, + "type": "string" + }, + "pleroma_settings_store": { + "description": "Opaque user settings to be saved on the backend.", + "nullable": true, + "type": "object" + }, + "show_role": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's role (e.g admin, moderator) will be exposed to anyone in the\n API", + "nullable": true + }, + "skip_thread_containment": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Skip filtering out broken threads", + "nullable": true + }, + "status_ttl_days": { + "description": "Number of days after which statuses will be deleted. Set to -1 to disable.", + "nullable": true, + "type": "integer" + } + }, + "title": "AccountUpdateCredentialsRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating an account", + "example": { + "accepts_direct_messages_from": "everybody", + "actor_type": "Person", + "allow_following_move": false, + "also_known_as": [ + "https://foo.bar/users/foo" + ], + "bot": false, + "default_scope": "private", + "discoverable": false, + "display_name": "cofe", + "fields_attributes": [ + { + "name": "foo", + "value": "bar" + } + ], + "hide_favorites": false, + "hide_followers": true, + "hide_followers_count": false, + "hide_follows": false, + "hide_follows_count": false, + "no_rich_text": false, + "note": "foobar", + "permit_followback": true, + "pleroma_settings_store": { + "pleroma-fe": { + "key": "val" + } + }, + "show_role": false, + "skip_thread_containment": false, + "status_ttl_days": 30 + }, + "properties": { + "accepts_direct_messages_from": { + "description": "Who to accept DMs from", + "enum": [ + "everybody", + "nobody", + "people_i_follow" + ], + "nullable": true, + "type": "string" + }, + "actor_type": { + "$ref": "#/components/schemas/ActorType" + }, + "allow_following_move": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allows automatically follow moved following accounts", + "nullable": true + }, + "also_known_as": { + "description": "List of alternate ActivityPub IDs", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "avatar": { + "description": "Avatar image encoded using multipart/form-data", + "format": "binary", + "nullable": true, + "type": "string" + }, + "bot": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether the account has a bot flag.", + "nullable": true + }, + "default_scope": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "discoverable": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Discovery (listing, indexing) of this account by external services (search bots etc.) is allowed.", + "nullable": true + }, + "display_name": { + "description": "The display name to use for the profile.", + "nullable": true, + "type": "string" + }, + "fields_attributes": { + "nullable": true, + "oneOf": [ + { + "items": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": { + "description": "Request schema for account custom fields", + "example": { + "name": "Website", + "value": "https://pleroma.com" + }, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "AccountAttributeField", + "type": "object" + }, + "type": "object" + } + ] + }, + "header": { + "description": "Header image encoded using multipart/form-data", + "format": "binary", + "nullable": true, + "type": "string" + }, + "hide_favorites": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's favorites timeline will be hidden", + "nullable": true + }, + "hide_followers": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's followers will be hidden", + "nullable": true + }, + "hide_followers_count": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follower count will be hidden", + "nullable": true + }, + "hide_follows": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follows will be hidden", + "nullable": true + }, + "hide_follows_count": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's follow count will be hidden", + "nullable": true + }, + "locked": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether manual approval of follow requests is required.", + "nullable": true + }, + "no_rich_text": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "html tags are stripped from all statuses requested from the API", + "nullable": true + }, + "note": { + "description": "The account bio.", + "type": "string" + }, + "permit_followback": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether follow requests from accounts the user is already following are auto-approved (when locked).", + "nullable": true + }, + "pleroma_background_image": { + "description": "Sets the background image of the user.", + "format": "binary", + "nullable": true, + "type": "string" + }, + "pleroma_settings_store": { + "description": "Opaque user settings to be saved on the backend.", + "nullable": true, + "type": "object" + }, + "show_role": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "user's role (e.g admin, moderator) will be exposed to anyone in the\n API", + "nullable": true + }, + "skip_thread_containment": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Skip filtering out broken threads", + "nullable": true + }, + "status_ttl_days": { + "description": "Number of days after which statuses will be deleted. Set to -1 to disable.", + "nullable": true, + "type": "integer" + } + }, + "title": "AccountUpdateCredentialsRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Account" + } + } + }, + "description": "Account" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "413": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Update account credentials", + "tags": [ + "Account credentials" + ] + } + }, + "/api/pleroma/disable_account": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.disable_account", + "parameters": [ + { + "description": "Password", + "in": "query", + "name": "password", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Disable Account", + "tags": [ + "Account credentials" + ] + } + }, + "/api/v1/pleroma/apps": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "List the OAuth applications for the current user", + "operationId": "AppController.index", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/App" + }, + "type": "array" + } + } + }, + "description": "Array of App" + } + }, + "summary": "List applications", + "tags": [ + "Applications" + ] + } + }, + "/api/v1/statuses": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "StatusController.index", + "parameters": [ + { + "description": "Array of status IDs", + "in": "query", + "name": "ids", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/FlakeID" + }, + "type": "array" + } + }, + { + "description": "Include reactions from muted acccounts.", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + } + }, + "description": "Array of Status" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Multiple statuses", + "tags": [ + "Retrieve status information" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Post a new status", + "operationId": "StatusController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "poll": { + "expires_in": 420, + "options": [ + "Cofe", + "Adventure" + ] + }, + "sensitive": "false", + "status": "What time is it?" + }, + "properties": { + "content_type": { + "description": "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "The number of seconds the posted activity should expire in. When a posted activity expires it will be deleted from the server, and a delete request for it will be federated. This needs to be longer than an hour.", + "nullable": true, + "type": "integer" + }, + "in_reply_to_conversation_id": { + "description": "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`.", + "nullable": true, + "type": "string" + }, + "in_reply_to_id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "ID of the status being replied to, if status is a reply", + "nullable": true + }, + "language": { + "description": "ISO 639 language code for this status.", + "nullable": true, + "type": "string" + }, + "media_ids": { + "description": "Array of Attachment ids to be attached as media.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "preview": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "If set to `true` the post won't be actually posted, but the status entitiy would still be rendered back. This could be useful for previewing rich text/custom emoji, for example", + "nullable": true + }, + "quote_id": { + "description": "Will quote a given status.", + "nullable": true, + "type": "string" + }, + "scheduled_at": { + "description": "ISO 8601 Datetime at which to schedule a status. Providing this paramter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "sensitive": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Mark status and attached media as sensitive?", + "nullable": true + }, + "spoiler_text": { + "description": "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided.", + "nullable": true, + "type": "string" + }, + "to": { + "description": "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "visibility": { + "anyOf": [ + { + "$ref": "#/components/schemas/VisibilityScope" + }, + { + "description": "`list:LIST_ID`", + "example": "LIST:123", + "type": "string" + } + ], + "description": "Visibility of the posted status. Besides standard MastoAPI values (`direct`, `private`, `unlisted` or `public`) it can be used to address a List by setting it to `list:LIST_ID`", + "nullable": true + } + }, + "title": "StatusCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "example": { + "poll": { + "expires_in": 420, + "options": [ + "Cofe", + "Adventure" + ] + }, + "sensitive": "false", + "status": "What time is it?" + }, + "properties": { + "content_type": { + "description": "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "The number of seconds the posted activity should expire in. When a posted activity expires it will be deleted from the server, and a delete request for it will be federated. This needs to be longer than an hour.", + "nullable": true, + "type": "integer" + }, + "in_reply_to_conversation_id": { + "description": "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`.", + "nullable": true, + "type": "string" + }, + "in_reply_to_id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "ID of the status being replied to, if status is a reply", + "nullable": true + }, + "language": { + "description": "ISO 639 language code for this status.", + "nullable": true, + "type": "string" + }, + "media_ids": { + "description": "Array of Attachment ids to be attached as media.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "preview": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "If set to `true` the post won't be actually posted, but the status entitiy would still be rendered back. This could be useful for previewing rich text/custom emoji, for example", + "nullable": true + }, + "quote_id": { + "description": "Will quote a given status.", + "nullable": true, + "type": "string" + }, + "scheduled_at": { + "description": "ISO 8601 Datetime at which to schedule a status. Providing this paramter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "sensitive": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Mark status and attached media as sensitive?", + "nullable": true + }, + "spoiler_text": { + "description": "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided.", + "nullable": true, + "type": "string" + }, + "to": { + "description": "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "visibility": { + "anyOf": [ + { + "$ref": "#/components/schemas/VisibilityScope" + }, + { + "description": "`list:LIST_ID`", + "example": "LIST:123", + "type": "string" + } + ], + "description": "Visibility of the posted status. Besides standard MastoAPI values (`direct`, `private`, `unlisted` or `public`) it can be used to address a List by setting it to `list:LIST_ID`", + "nullable": true + } + }, + "title": "StatusCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "example": { + "poll": { + "expires_in": 420, + "options": [ + "Cofe", + "Adventure" + ] + }, + "sensitive": "false", + "status": "What time is it?" + }, + "properties": { + "content_type": { + "description": "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "The number of seconds the posted activity should expire in. When a posted activity expires it will be deleted from the server, and a delete request for it will be federated. This needs to be longer than an hour.", + "nullable": true, + "type": "integer" + }, + "in_reply_to_conversation_id": { + "description": "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`.", + "nullable": true, + "type": "string" + }, + "in_reply_to_id": { + "allOf": [ + { + "$ref": "#/components/schemas/FlakeID" + } + ], + "description": "ID of the status being replied to, if status is a reply", + "nullable": true + }, + "language": { + "description": "ISO 639 language code for this status.", + "nullable": true, + "type": "string" + }, + "media_ids": { + "description": "Array of Attachment ids to be attached as media.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "preview": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "If set to `true` the post won't be actually posted, but the status entitiy would still be rendered back. This could be useful for previewing rich text/custom emoji, for example", + "nullable": true + }, + "quote_id": { + "description": "Will quote a given status.", + "nullable": true, + "type": "string" + }, + "scheduled_at": { + "description": "ISO 8601 Datetime at which to schedule a status. Providing this paramter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "sensitive": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Mark status and attached media as sensitive?", + "nullable": true + }, + "spoiler_text": { + "description": "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided.", + "nullable": true, + "type": "string" + }, + "to": { + "description": "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "visibility": { + "anyOf": [ + { + "$ref": "#/components/schemas/VisibilityScope" + }, + { + "description": "`list:LIST_ID`", + "example": "LIST:123", + "type": "string" + } + ], + "description": "Visibility of the posted status. Besides standard MastoAPI values (`direct`, `private`, `unlisted` or `public`) it can be used to address a List by setting it to `list:LIST_ID`", + "nullable": true + } + }, + "title": "StatusCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/Status" + }, + { + "$ref": "#/components/schemas/ScheduledStatus" + } + ] + } + } + }, + "description": "Status. When `scheduled_at` is present, ScheduledStatus is returned instead" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request / MRF Rejection" + } + }, + "security": [ + { + "oAuth": [ + "write:statuses" + ] + } + ], + "summary": "Publish new status", + "tags": [ + "Status actions" + ] + } + }, + "/api/v1/endorsements": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Not implemented", + "operationId": "AccountController.endorsements", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": [], + "items": { + "example": {}, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Empty array" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Endorsements", + "tags": [ + "Retrieve account information" + ] + } + }, + "/api/v1/conversations/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "ConversationController.delete", + "parameters": [ + { + "description": "Conversation ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": {}, + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "security": [ + { + "oAuth": [ + "write:conversations" + ] + } + ], + "summary": "Remove conversation", + "tags": [ + "Conversations" + ] + } + }, + "/api/v1/push/subscription": { + "delete": { + "callbacks": {}, + "deprecated": false, + "description": "Removes the current Web Push API subscription.", + "operationId": "SubscriptionController.delete", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Empty object" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "push" + ] + } + ], + "summary": "Remove current subscription", + "tags": [ + "Push subscriptions" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View the PushSubscription currently associated with this access token.", + "operationId": "SubscriptionController.show", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PushSubscription" + } + } + }, + "description": "Push subscription" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "push" + ] + } + ], + "summary": "Get current subscription", + "tags": [ + "Push subscriptions" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Add a Web Push API subscription to receive notifications. Each access token can have one push subscription. If you create a new subscription, the old subscription is deleted.", + "operationId": "SubscriptionController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating a push subscription", + "example": { + "data": { + "alerts": { + "follow": true, + "mention": true, + "poll": false + } + }, + "subscription": { + "endpoint": "https://example.com/example/1234", + "keys": { + "auth": "8eDyX_uCN0XRhSbY5hs7Hg==", + "p256dh": "BCIWgsnyXDv1VkhqL2P7YRBvdeuDnlwAPT2guNhdIoW3IP7GmHh1SMKPLxRf7x8vJy6ZFK3ol2ohgn_-0yP7QQA=" + } + } + }, + "properties": { + "data": { + "nullable": true, + "properties": { + "alerts": { + "nullable": true, + "properties": { + "favourite": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive favourite notifications?", + "nullable": true + }, + "follow": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive follow notifications?", + "nullable": true + }, + "mention": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive mention notifications?", + "nullable": true + }, + "pleroma:emoji_reaction": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive emoji reaction notifications?", + "nullable": true + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive poll notifications?", + "nullable": true + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive reblog notifications?", + "nullable": true + } + }, + "type": "object" + } + }, + "type": "object" + }, + "subscription": { + "properties": { + "endpoint": { + "description": "Endpoint URL that is called when a notification event occurs.", + "type": "string" + }, + "keys": { + "properties": { + "auth": { + "description": "Auth secret. Base64 encoded string of 16 bytes of random data.", + "type": "string" + }, + "p256dh": { + "description": "User agent public key. Base64 encoded string of public key of ECDH key using `prime256v1` curve.", + "type": "string" + } + }, + "required": [ + "p256dh", + "auth" + ], + "type": "object" + } + }, + "required": [ + "endpoint", + "keys" + ], + "type": "object" + } + }, + "required": [ + "subscription" + ], + "title": "SubscriptionCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating a push subscription", + "example": { + "data": { + "alerts": { + "follow": true, + "mention": true, + "poll": false + } + }, + "subscription": { + "endpoint": "https://example.com/example/1234", + "keys": { + "auth": "8eDyX_uCN0XRhSbY5hs7Hg==", + "p256dh": "BCIWgsnyXDv1VkhqL2P7YRBvdeuDnlwAPT2guNhdIoW3IP7GmHh1SMKPLxRf7x8vJy6ZFK3ol2ohgn_-0yP7QQA=" + } + } + }, + "properties": { + "data": { + "nullable": true, + "properties": { + "alerts": { + "nullable": true, + "properties": { + "favourite": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive favourite notifications?", + "nullable": true + }, + "follow": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive follow notifications?", + "nullable": true + }, + "mention": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive mention notifications?", + "nullable": true + }, + "pleroma:emoji_reaction": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive emoji reaction notifications?", + "nullable": true + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive poll notifications?", + "nullable": true + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive reblog notifications?", + "nullable": true + } + }, + "type": "object" + } + }, + "type": "object" + }, + "subscription": { + "properties": { + "endpoint": { + "description": "Endpoint URL that is called when a notification event occurs.", + "type": "string" + }, + "keys": { + "properties": { + "auth": { + "description": "Auth secret. Base64 encoded string of 16 bytes of random data.", + "type": "string" + }, + "p256dh": { + "description": "User agent public key. Base64 encoded string of public key of ECDH key using `prime256v1` curve.", + "type": "string" + } + }, + "required": [ + "p256dh", + "auth" + ], + "type": "object" + } + }, + "required": [ + "endpoint", + "keys" + ], + "type": "object" + } + }, + "required": [ + "subscription" + ], + "title": "SubscriptionCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating a push subscription", + "example": { + "data": { + "alerts": { + "follow": true, + "mention": true, + "poll": false + } + }, + "subscription": { + "endpoint": "https://example.com/example/1234", + "keys": { + "auth": "8eDyX_uCN0XRhSbY5hs7Hg==", + "p256dh": "BCIWgsnyXDv1VkhqL2P7YRBvdeuDnlwAPT2guNhdIoW3IP7GmHh1SMKPLxRf7x8vJy6ZFK3ol2ohgn_-0yP7QQA=" + } + } + }, + "properties": { + "data": { + "nullable": true, + "properties": { + "alerts": { + "nullable": true, + "properties": { + "favourite": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive favourite notifications?", + "nullable": true + }, + "follow": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive follow notifications?", + "nullable": true + }, + "mention": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive mention notifications?", + "nullable": true + }, + "pleroma:emoji_reaction": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive emoji reaction notifications?", + "nullable": true + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive poll notifications?", + "nullable": true + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive reblog notifications?", + "nullable": true + } + }, + "type": "object" + } + }, + "type": "object" + }, + "subscription": { + "properties": { + "endpoint": { + "description": "Endpoint URL that is called when a notification event occurs.", + "type": "string" + }, + "keys": { + "properties": { + "auth": { + "description": "Auth secret. Base64 encoded string of 16 bytes of random data.", + "type": "string" + }, + "p256dh": { + "description": "User agent public key. Base64 encoded string of public key of ECDH key using `prime256v1` curve.", + "type": "string" + } + }, + "required": [ + "p256dh", + "auth" + ], + "type": "object" + } + }, + "required": [ + "endpoint", + "keys" + ], + "type": "object" + } + }, + "required": [ + "subscription" + ], + "title": "SubscriptionCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PushSubscription" + } + } + }, + "description": "Push subscription" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "push" + ] + } + ], + "summary": "Subscribe to push notifications", + "tags": [ + "Push subscriptions" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "description": "Updates the current push subscription. Only the data part can be updated. To change fundamentals, a new subscription must be created instead.", + "operationId": "SubscriptionController.update", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "data": { + "alerts": { + "favourite": true, + "follow": true, + "mention": true, + "poll": true, + "reblog": true + } + } + }, + "properties": { + "data": { + "nullable": true, + "properties": { + "alerts": { + "nullable": true, + "properties": { + "favourite": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive favourite notifications?", + "nullable": true + }, + "follow": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive follow notifications?", + "nullable": true + }, + "mention": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive mention notifications?", + "nullable": true + }, + "pleroma:emoji_reaction": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive emoji reaction notifications?", + "nullable": true + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive poll notifications?", + "nullable": true + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive reblog notifications?", + "nullable": true + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "title": "SubscriptionUpdateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "example": { + "data": { + "alerts": { + "favourite": true, + "follow": true, + "mention": true, + "poll": true, + "reblog": true + } + } + }, + "properties": { + "data": { + "nullable": true, + "properties": { + "alerts": { + "nullable": true, + "properties": { + "favourite": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive favourite notifications?", + "nullable": true + }, + "follow": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive follow notifications?", + "nullable": true + }, + "mention": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive mention notifications?", + "nullable": true + }, + "pleroma:emoji_reaction": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive emoji reaction notifications?", + "nullable": true + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive poll notifications?", + "nullable": true + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive reblog notifications?", + "nullable": true + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "title": "SubscriptionUpdateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "example": { + "data": { + "alerts": { + "favourite": true, + "follow": true, + "mention": true, + "poll": true, + "reblog": true + } + } + }, + "properties": { + "data": { + "nullable": true, + "properties": { + "alerts": { + "nullable": true, + "properties": { + "favourite": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive favourite notifications?", + "nullable": true + }, + "follow": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive follow notifications?", + "nullable": true + }, + "mention": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive mention notifications?", + "nullable": true + }, + "pleroma:emoji_reaction": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive emoji reaction notifications?", + "nullable": true + }, + "poll": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive poll notifications?", + "nullable": true + }, + "reblog": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Receive reblog notifications?", + "nullable": true + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "title": "SubscriptionUpdateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PushSubscription" + } + } + }, + "description": "Push subscription" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "push" + ] + } + ], + "summary": "Change types of notifications", + "tags": [ + "Push subscriptions" + ] + } + }, + "/api/v1/statuses/{id}/mute": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Do not receive notifications for the thread that this status is part of.", + "operationId": "StatusController.mute_conversation", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "in": "query", + "name": "expires_in", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "expires_in": { + "default": 0, + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "expires_in": { + "default": 0, + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "expires_in": { + "default": 0, + "description": "Expire the mute in `expires_in` seconds. Default 0 for infinity", + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:mutes" + ] + } + ], + "summary": "Mute conversation", + "tags": [ + "Status actions" + ] + } + }, + "/api/v1/pleroma/admin/announcements": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.AnnouncementController.index", + "parameters": [ + { + "description": "the maximum number of announcements to return", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "minimum": 1, + "type": "integer" + } + }, + { + "description": "the offset of the first announcement to return", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "minimum": 0, + "type": "integer" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Announcement" + }, + "type": "array" + } + } + }, + "description": "Response" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:read" + ] + } + ], + "summary": "Retrieve a list of announcements", + "tags": [ + "Announcement managment" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.AnnouncementController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "required": [ + "content" + ], + "title": "AnnouncementCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "required": [ + "content" + ], + "title": "AnnouncementCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "all_day": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "ends_at": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "starts_at": { + "format": "date-time", + "nullable": true, + "type": "string" + } + }, + "required": [ + "content" + ], + "title": "AnnouncementCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Announcement" + } + } + }, + "description": "Response" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Create one announcement", + "tags": [ + "Announcement managment" + ] + } + }, + "/api/v1/statuses/{id}/favourited_by": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View who favourited a given status", + "operationId": "StatusController.favourited_by", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "title": "ArrayOfAccounts", + "type": "array" + } + } + }, + "description": "Array of Accounts" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Favourited by", + "tags": [ + "Retrieve status information" + ] + } + }, + "/api/v1/pleroma/admin/relay": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.RelayController.unfollow", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "force": { + "default": false, + "type": "boolean" + }, + "relay_url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "force": { + "default": false, + "type": "boolean" + }, + "relay_url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "force": { + "default": false, + "type": "boolean" + }, + "relay_url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": "http://mastodon.example.org/users/admin", + "type": "string" + } + } + }, + "description": "Status" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:follows" + ] + } + ], + "summary": "Unfollow a relay", + "tags": [ + "Relays" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.RelayController.index", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "relays": { + "items": { + "properties": { + "actor": { + "example": "https://example.com/relay", + "type": "string" + }, + "followed_back": { + "description": "Is relay followed back by this actor?", + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Response" + } + }, + "security": [ + { + "oAuth": [ + "admin:read" + ] + } + ], + "summary": "Retrieve a list of relays", + "tags": [ + "Relays" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.RelayController.follow", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "relay_url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "relay_url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "relay_url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "actor": { + "example": "https://example.com/relay", + "type": "string" + }, + "followed_back": { + "description": "Is relay followed back by this actor?", + "type": "boolean" + } + }, + "type": "object" + } + } + }, + "description": "Status" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:follows" + ] + } + ], + "summary": "Follow a relay", + "tags": [ + "Relays" + ] + } + }, + "/api/v1/accounts": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Creates a user and account records. Returns an account access token for the app that initiated the request. The app should save this token for later, and should wait for the user to confirm their account by clicking a link in their email inbox.", + "operationId": "AccountController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating an account", + "example": { + "agreement": "true", + "bio": "☕️", + "email": "cofe@example.com", + "password": "secret", + "username": "cofe" + }, + "properties": { + "agreement": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether the user agrees to the local rules, terms, and policies. These should be presented to the user in order to allow them to consent before setting this parameter to TRUE." + }, + "bio": { + "default": "", + "description": "Bio", + "nullable": true, + "type": "string" + }, + "captcha_answer_data": { + "description": "Provider-specific captcha data", + "nullable": true, + "type": "string" + }, + "captcha_solution": { + "description": "Provider-specific captcha solution", + "nullable": true, + "type": "string" + }, + "captcha_token": { + "description": "Provider-specific captcha token", + "nullable": true, + "type": "string" + }, + "email": { + "description": "The email address to be used for login. Required when `account_activation_required` is enabled.", + "format": "email", + "nullable": true, + "type": "string" + }, + "fullname": { + "description": "Full name", + "nullable": true, + "type": "string" + }, + "language": { + "description": "User's preferred language for emails", + "nullable": true, + "type": "string" + }, + "locale": { + "description": "The language of the confirmation email that will be sent", + "nullable": true, + "type": "string" + }, + "password": { + "description": "The password to be used for login", + "format": "password", + "type": "string" + }, + "reason": { + "description": "Text that will be reviewed by moderators if registrations require manual approval", + "nullable": true, + "type": "string" + }, + "token": { + "description": "Invite token required when the registrations aren't public", + "nullable": true, + "type": "string" + }, + "username": { + "description": "The desired username for the account", + "type": "string" + } + }, + "required": [ + "username", + "password", + "agreement" + ], + "title": "AccountCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating an account", + "example": { + "agreement": "true", + "bio": "☕️", + "email": "cofe@example.com", + "password": "secret", + "username": "cofe" + }, + "properties": { + "agreement": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether the user agrees to the local rules, terms, and policies. These should be presented to the user in order to allow them to consent before setting this parameter to TRUE." + }, + "bio": { + "default": "", + "description": "Bio", + "nullable": true, + "type": "string" + }, + "captcha_answer_data": { + "description": "Provider-specific captcha data", + "nullable": true, + "type": "string" + }, + "captcha_solution": { + "description": "Provider-specific captcha solution", + "nullable": true, + "type": "string" + }, + "captcha_token": { + "description": "Provider-specific captcha token", + "nullable": true, + "type": "string" + }, + "email": { + "description": "The email address to be used for login. Required when `account_activation_required` is enabled.", + "format": "email", + "nullable": true, + "type": "string" + }, + "fullname": { + "description": "Full name", + "nullable": true, + "type": "string" + }, + "language": { + "description": "User's preferred language for emails", + "nullable": true, + "type": "string" + }, + "locale": { + "description": "The language of the confirmation email that will be sent", + "nullable": true, + "type": "string" + }, + "password": { + "description": "The password to be used for login", + "format": "password", + "type": "string" + }, + "reason": { + "description": "Text that will be reviewed by moderators if registrations require manual approval", + "nullable": true, + "type": "string" + }, + "token": { + "description": "Invite token required when the registrations aren't public", + "nullable": true, + "type": "string" + }, + "username": { + "description": "The desired username for the account", + "type": "string" + } + }, + "required": [ + "username", + "password", + "agreement" + ], + "title": "AccountCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating an account", + "example": { + "agreement": "true", + "bio": "☕️", + "email": "cofe@example.com", + "password": "secret", + "username": "cofe" + }, + "properties": { + "agreement": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Whether the user agrees to the local rules, terms, and policies. These should be presented to the user in order to allow them to consent before setting this parameter to TRUE." + }, + "bio": { + "default": "", + "description": "Bio", + "nullable": true, + "type": "string" + }, + "captcha_answer_data": { + "description": "Provider-specific captcha data", + "nullable": true, + "type": "string" + }, + "captcha_solution": { + "description": "Provider-specific captcha solution", + "nullable": true, + "type": "string" + }, + "captcha_token": { + "description": "Provider-specific captcha token", + "nullable": true, + "type": "string" + }, + "email": { + "description": "The email address to be used for login. Required when `account_activation_required` is enabled.", + "format": "email", + "nullable": true, + "type": "string" + }, + "fullname": { + "description": "Full name", + "nullable": true, + "type": "string" + }, + "language": { + "description": "User's preferred language for emails", + "nullable": true, + "type": "string" + }, + "locale": { + "description": "The language of the confirmation email that will be sent", + "nullable": true, + "type": "string" + }, + "password": { + "description": "The password to be used for login", + "format": "password", + "type": "string" + }, + "reason": { + "description": "Text that will be reviewed by moderators if registrations require manual approval", + "nullable": true, + "type": "string" + }, + "token": { + "description": "Invite token required when the registrations aren't public", + "nullable": true, + "type": "string" + }, + "username": { + "description": "The desired username for the account", + "type": "string" + } + }, + "required": [ + "username", + "password", + "agreement" + ], + "title": "AccountCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for an account", + "example": { + "access_token": "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", + "created_at": 1585918714, + "expires_in": 600, + "me": "https://gensokyo.2hu/users/raymoo", + "refresh_token": "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzz", + "scope": "read write follow push", + "token_type": "Bearer" + }, + "properties": { + "access_token": { + "type": "string" + }, + "created_at": { + "format": "date-time", + "type": "integer" + }, + "expires_in": { + "type": "integer" + }, + "identifier": { + "type": "string" + }, + "me": { + "type": "string" + }, + "message": { + "type": "string" + }, + "refresh_token": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "token_type": { + "type": "string" + } + }, + "title": "AccountCreateResponse", + "type": "object" + } + } + }, + "description": "Account" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "summary": "Register an account", + "tags": [ + "Account credentials" + ] + } + }, + "/api/v1/timelines/direct": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View statuses with a “direct” scope addressed to the account. Using this endpoint is discouraged, please use [conversations](#tag/Conversations).", + "operationId": "TimelineController.direct", + "parameters": [ + { + "description": "Include activities by muted users", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "title": "ArrayOfStatuses", + "type": "array" + } + } + }, + "description": "Array of Status" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Direct timeline", + "tags": [ + "Timelines" + ] + } + }, + "/api/v1/pleroma/admin/reports/{report_id}/notes/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.ReportController.notes_delete", + "parameters": [ + { + "description": "Report ID", + "in": "path", + "name": "report_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Note ID", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "content": { + "application/json": { + "schema": { + "example": "", + "type": "string" + } + } + }, + "description": "No Content" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:reports" + ] + } + ], + "summary": "Delete note attached to the report", + "tags": [ + "Report managment" + ] + } + }, + "/api/v1/pleroma/admin/users/activate": { + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.activate", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "user": { + "items": { + "properties": { + "actor_type": { + "type": "string" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_approved": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "registration_reason": { + "nullable": true, + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:accounts" + ] + } + ], + "summary": "Activate multiple users", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/notifications/clear": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Clear all notifications from the server.", + "operationId": "NotificationController.clear", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": {}, + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "security": [ + { + "oAuth": [ + "write:notifications" + ] + } + ], + "summary": "Dismiss all notifications", + "tags": [ + "Notifications" + ] + } + }, + "/api/v1/pleroma/admin/media_proxy_caches": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.MediaProxyCacheController.index", + "parameters": [ + { + "description": "Page", + "in": "query", + "name": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Page", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" + } + }, + { + "description": "Number of statuses to return", + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "urls": { + "items": { + "description": "MediaProxy URLs", + "format": "uri", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Array of MediaProxy URLs" + } + }, + "security": [ + { + "oAuth": [ + "admin:read:media_proxy_caches" + ] + } + ], + "summary": "Retrieve a list of banned MediaProxy URLs", + "tags": [ + "MediaProxy cache" + ] + } + }, + "/api/v1/tags/{id}": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View a hashtag", + "operationId": "TagController.show", + "parameters": [ + { + "description": "Name of the hashtag", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Tag" + } + } + }, + "description": "Hashtag" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read" + ] + } + ], + "summary": "Hashtag", + "tags": [ + "Tags" + ] + } + }, + "/api/pleroma/mutes_import": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UserImportController.mutes", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": "ok", + "type": "string" + } + } + }, + "description": "Ok" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:mutes" + ] + } + ], + "summary": "Import mutes", + "tags": [ + "Data import" + ] + } + }, + "/api/v1/markers": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "MarkerController.index", + "parameters": [ + { + "description": "Array of markers to fetch. If not provided, an empty object will be returned.", + "in": "query", + "name": "timeline", + "required": false, + "schema": { + "items": { + "enum": [ + "home", + "notifications" + ], + "type": "string" + }, + "type": "array" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for markers", + "example": { + "home": { + "last_read_id": "103206604258487607", + "pleroma": { + "unread_count": 10 + }, + "updated_at": "2019-11-26T22:37:25.235Z", + "version": 468 + }, + "notifications": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 0 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + } + }, + "items": { + "type": "string" + }, + "properties": { + "home": { + "allOf": [ + { + "description": "Schema for a marker", + "example": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 5 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + }, + "properties": { + "last_read_id": { + "type": "string" + }, + "pleroma": { + "properties": { + "unread_count": { + "type": "integer" + } + }, + "type": "object" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "title": "Marker", + "type": "object" + } + ], + "nullable": true + }, + "notifications": { + "allOf": [ + { + "description": "Schema for a marker", + "example": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 5 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + }, + "properties": { + "last_read_id": { + "type": "string" + }, + "pleroma": { + "properties": { + "unread_count": { + "type": "integer" + } + }, + "type": "object" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "title": "Marker", + "type": "object" + } + ], + "nullable": true + } + }, + "title": "MarkersResponse", + "type": "object" + } + } + }, + "description": "Marker" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Get saved timeline position", + "tags": [ + "Markers" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "MarkerController.upsert", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "Request schema for marker upsert", + "example": { + "home": { + "last_read_id": "103194548672408537", + "updated_at": "2019-11-24T19:39:39.337Z", + "version": 462 + } + }, + "properties": { + "home": { + "nullable": true, + "properties": { + "last_read_id": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "notifications": { + "nullable": true, + "properties": { + "last_read_id": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + } + }, + "title": "MarkersUpsertRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "Request schema for marker upsert", + "example": { + "home": { + "last_read_id": "103194548672408537", + "updated_at": "2019-11-24T19:39:39.337Z", + "version": 462 + } + }, + "properties": { + "home": { + "nullable": true, + "properties": { + "last_read_id": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "notifications": { + "nullable": true, + "properties": { + "last_read_id": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + } + }, + "title": "MarkersUpsertRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "Request schema for marker upsert", + "example": { + "home": { + "last_read_id": "103194548672408537", + "updated_at": "2019-11-24T19:39:39.337Z", + "version": 462 + } + }, + "properties": { + "home": { + "nullable": true, + "properties": { + "last_read_id": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "notifications": { + "nullable": true, + "properties": { + "last_read_id": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + } + }, + "title": "MarkersUpsertRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for markers", + "example": { + "home": { + "last_read_id": "103206604258487607", + "pleroma": { + "unread_count": 10 + }, + "updated_at": "2019-11-26T22:37:25.235Z", + "version": 468 + }, + "notifications": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 0 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + } + }, + "items": { + "type": "string" + }, + "properties": { + "home": { + "allOf": [ + { + "description": "Schema for a marker", + "example": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 5 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + }, + "properties": { + "last_read_id": { + "type": "string" + }, + "pleroma": { + "properties": { + "unread_count": { + "type": "integer" + } + }, + "type": "object" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "title": "Marker", + "type": "object" + } + ], + "nullable": true + }, + "notifications": { + "allOf": [ + { + "description": "Schema for a marker", + "example": { + "last_read_id": "35098814", + "pleroma": { + "unread_count": 5 + }, + "updated_at": "2019-11-26T22:37:25.239Z", + "version": 361 + }, + "properties": { + "last_read_id": { + "type": "string" + }, + "pleroma": { + "properties": { + "unread_count": { + "type": "integer" + } + }, + "type": "object" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "title": "Marker", + "type": "object" + } + ], + "nullable": true + } + }, + "title": "MarkersResponse", + "type": "object" + } + } + }, + "description": "Marker" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:blocks" + ] + } + ], + "summary": "Save position in timeline", + "tags": [ + "Markers" + ] + } + }, + "/api/v1/filters": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "FilterController.index", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Array of Filters", + + "items": { + + "properties": { + "context": { + "description": "The contexts in which the filter should be applied.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "type": "string" + }, + "irreversible": { + "description": "Should matching entities in home and notifications be dropped by the server?", + "type": "boolean" + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "description": "Should the filter consider word boundaries?", + "type": "boolean" + } + }, + "title": "Filter", + "type": "object" + }, + "title": "ArrayOfFilters", + "type": "array" + } + } + }, + "description": "Filters" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:filters" + ] + } + ], + "summary": "All filters", + "tags": [ + "Filters" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "FilterController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "properties": { + "context": { + "description": "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire.", + "nullable": true, + "type": "integer" + }, + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Should the server irreversibly drop matching entities from home and notifications?", + "nullable": true + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Consider word boundaries?", + "nullable": true + } + }, + "required": [ + "phrase", + "context" + ], + "title": "FilterUpdateRequest", + "type": "object" + }, + { + "properties": { + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "Should the server irreversibly drop matching entities from home and notifications?" + } + }, + "type": "object" + } + ], + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "title": "FilterCreateRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "allOf": [ + { + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "properties": { + "context": { + "description": "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire.", + "nullable": true, + "type": "integer" + }, + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Should the server irreversibly drop matching entities from home and notifications?", + "nullable": true + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Consider word boundaries?", + "nullable": true + } + }, + "required": [ + "phrase", + "context" + ], + "title": "FilterUpdateRequest", + "type": "object" + }, + { + "properties": { + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "Should the server irreversibly drop matching entities from home and notifications?" + } + }, + "type": "object" + } + ], + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "title": "FilterCreateRequest" + } + }, + "multipart/form-data": { + "schema": { + "allOf": [ + { + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "properties": { + "context": { + "description": "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "nullable": true, + "type": "string" + }, + "expires_in": { + "description": "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire.", + "nullable": true, + "type": "integer" + }, + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Should the server irreversibly drop matching entities from home and notifications?", + "nullable": true + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Consider word boundaries?", + "nullable": true + } + }, + "required": [ + "phrase", + "context" + ], + "title": "FilterUpdateRequest", + "type": "object" + }, + { + "properties": { + "irreversible": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "Should the server irreversibly drop matching entities from home and notifications?" + } + }, + "type": "object" + } + ], + "example": { + "context": [ + "home" + ], + "phrase": "knights" + }, + "title": "FilterCreateRequest" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "context": { + "description": "The contexts in which the filter should be applied.", + "items": { + "enum": [ + "home", + "notifications", + "public", + "thread" + ], + "type": "string" + }, + "type": "array" + }, + "expires_at": { + "description": "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "type": "string" + }, + "irreversible": { + "description": "Should matching entities in home and notifications be dropped by the server?", + "type": "boolean" + }, + "phrase": { + "description": "The text to be filtered", + "type": "string" + }, + "whole_word": { + "description": "Should the filter consider word boundaries?", + "type": "boolean" + } + }, + "title": "Filter", + "type": "object" + } + } + }, + "description": "Filter" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:filters" + ] + } + ], + "summary": "Create a filter", + "tags": [ + "Filters" + ] + } + }, + "/api/v1/pleroma/mascot": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.MascotController.show", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "id": { + "type": "string" + }, + "pleroma": { + "properties": { + "mime_type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Mascot" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Retrieve mascot", + "tags": [ + "Mascot" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "description": "Behaves exactly the same as `POST /api/v1/upload`. Can only accept images - any attempt to upload non-image files will be met with `HTTP 415 Unsupported Media Type`.", + "operationId": "PleromaAPI.MascotController.update", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "file": { + "format": "binary", + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "file": { + "format": "binary", + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "file": { + "format": "binary", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "id": { + "type": "string" + }, + "pleroma": { + "properties": { + "mime_type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Mascot" + }, + "415": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Unsupported Media Type" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Set or clear mascot", + "tags": [ + "Mascot" + ] + } + }, + "/api/v1/pleroma/admin/oauth_app": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.OAuthAppController.index", + "parameters": [ + { + "description": "App name", + "in": "query", + "name": "name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Client ID", + "in": "query", + "name": "client_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Page", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" + } + }, + { + "description": "Trusted apps", + "in": "query", + "name": "trusted", + "required": false, + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Number of apps to return", + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "apps": { + "items": { + + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "redirect_uri": { + "type": "string" + }, + "trusted": { + "type": "boolean" + }, + "website": { + "nullable": true, + "type": "string" + } + }, + "title": "oAuthApp", + "type": "object" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "page_size": { + "type": "integer" + } + }, + "type": "object" + } + } + }, + "description": "List of apps" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Retrieve a list of OAuth applications", + "tags": [ + "OAuth application managment" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.OAuthAppController.create", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "scopes": [ + "read", + "write" + ], + "trusted": true, + "website": "https://myapp.com/" + }, + "properties": { + "name": { + "description": "Application Name", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "description": "oAuth scopes", + "items": { + "type": "string" + }, + "type": "array" + }, + "trusted": { + "default": false, + "description": "Is the app trusted?", + "nullable": true, + "type": "boolean" + }, + "website": { + "description": "A URL to the homepage of the app", + "nullable": true, + "type": "string" + } + }, + "required": [ + "name", + "redirect_uris" + ], + "title": "oAuthAppCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "example": { + "name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "scopes": [ + "read", + "write" + ], + "trusted": true, + "website": "https://myapp.com/" + }, + "properties": { + "name": { + "description": "Application Name", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "description": "oAuth scopes", + "items": { + "type": "string" + }, + "type": "array" + }, + "trusted": { + "default": false, + "description": "Is the app trusted?", + "nullable": true, + "type": "boolean" + }, + "website": { + "description": "A URL to the homepage of the app", + "nullable": true, + "type": "string" + } + }, + "required": [ + "name", + "redirect_uris" + ], + "title": "oAuthAppCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "example": { + "name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "scopes": [ + "read", + "write" + ], + "trusted": true, + "website": "https://myapp.com/" + }, + "properties": { + "name": { + "description": "Application Name", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "description": "oAuth scopes", + "items": { + "type": "string" + }, + "type": "array" + }, + "trusted": { + "default": false, + "description": "Is the app trusted?", + "nullable": true, + "type": "boolean" + }, + "website": { + "description": "A URL to the homepage of the app", + "nullable": true, + "type": "string" + } + }, + "required": [ + "name", + "redirect_uris" + ], + "title": "oAuthAppCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "redirect_uri": { + "type": "string" + }, + "trusted": { + "type": "boolean" + }, + "website": { + "nullable": true, + "type": "string" + } + }, + "title": "oAuthApp", + "type": "object" + } + } + }, + "description": "App" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Create an OAuth application", + "tags": [ + "OAuth application managment" + ] + } + }, + "/api/v1/pleroma/admin/users": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.delete", + "parameters": [ + { + "description": "User nickname", + "in": "query", + "name": "nickname", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for deleting multiple users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Array of nicknames", + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:accounts" + ] + } + ], + "summary": "Removes a single or multiple users", + "tags": [ + "User administration" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.index", + "parameters": [ + { + "description": "Comma separated list of filters", + "in": "query", + "name": "filters", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Search users query", + "in": "query", + "name": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Search by display name", + "in": "query", + "name": "name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Search by email", + "in": "query", + "name": "email", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Page Number", + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Number of users to return per page", + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Filter by actor type", + "in": "query", + "name": "actor_types", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/ActorType" + }, + "type": "array" + } + }, + { + "description": "Filter by tags", + "in": "query", + "name": "tags", + "required": false, + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "users": { + "items": { + "properties": { + "actor_type": { + "type": "string" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_approved": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "registration_reason": { + "nullable": true, + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:read:accounts" + ] + } + ], + "summary": "List users", + "tags": [ + "User administration" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.create", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating users", + "properties": { + "users": { + "items": { + "properties": { + "email": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating users", + "properties": { + "users": { + "items": { + "properties": { + "email": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating users", + "properties": { + "users": { + "items": { + "properties": { + "email": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "properties": { + "email": { + "format": "email", + "type": "string" + }, + "nickname": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "409": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "properties": { + "email": { + "format": "email", + "type": "string" + }, + "nickname": { + "type": "string" + } + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Conflict" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:accounts" + ] + } + ], + "summary": "Create a single or multiple users", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/instance": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Information about the server", + "operationId": "InstanceController.show", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": { + "avatar_upload_limit": 2000000, + "background_image": "/static/image.png", + "background_upload_limit": 4000000, + "banner_upload_limit": 4000000, + "description": "Akkoma: The cooler fediverse server", + "email": "lain@lain.com", + "languages": [ + "en" + ], + "max_toot_chars": 5000, + "poll_limits": { + "max_expiration": 31536000, + "max_option_chars": 200, + "max_options": 20, + "min_expiration": 0 + }, + "registrations": false, + "stats": { + "domain_count": 2996, + "status_count": 15802, + "user_count": 5 + }, + "thumbnail": "https://lain.com/instance/thumbnail.jpeg", + "title": "lain.com", + "upload_limit": 16000000, + "uri": "https://lain.com", + "urls": { + "streaming_api": "wss://lain.com" + }, + "version": "2.7.2 (compatible; Akkoma 3.9.3-232-g6fde75e1-develop)" + }, + "properties": { + "avatar_upload_limit": { + "description": "The title of the website", + "type": "integer" + }, + "background_image": { + "description": "The background image for the website", + "format": "uri", + "type": "string" + }, + "background_upload_limit": { + "description": "The title of the website", + "type": "integer" + }, + "banner_upload_limit": { + "description": "The title of the website", + "type": "integer" + }, + "description": { + "description": "Admin-defined description of the Pleroma site", + "type": "string" + }, + "email": { + "description": "An email that may be contacted for any inquiries", + "format": "email", + "type": "string" + }, + "languages": { + "description": "Primary langauges of the website and its staff", + "items": { + "type": "string" + }, + "type": "array" + }, + "max_toot_chars": { + "description": ": Posts character limit (CW/Subject included in the counter)", + "type": "integer" + }, + "poll_limits": { + "description": "A map with poll limits for local polls", + "properties": { + "max_expiration": { + "description": "Maximum expiration time (in seconds).", + "type": "integer" + }, + "max_option_chars": { + "description": "Maximum number of characters per option.", + "type": "integer" + }, + "max_options": { + "description": "Maximum number of options.", + "type": "integer" + }, + "min_expiration": { + "description": "Minimum expiration time (in seconds).", + "type": "integer" + } + }, + "type": "object" + }, + "registrations": { + "description": "Whether registrations are enabled", + "type": "boolean" + }, + "stats": { + "description": "Statistics about how much information the instance contains", + "properties": { + "domain_count": { + "description": "Domains federated with this instance", + "type": "integer" + }, + "status_count": { + "description": "Statuses authored by users on instance", + "type": "integer" + }, + "user_count": { + "description": "Users registered on this instance", + "type": "integer" + } + }, + "type": "object" + }, + "thumbnail": { + "description": "Banner image for the website", + "nullable": true, + "type": "string" + }, + "title": { + "description": "The title of the website", + "type": "string" + }, + "upload_limit": { + "description": "File size limit of uploads (except for avatar, background, banner)", + "type": "integer" + }, + "uri": { + "description": "The domain name of the instance", + "type": "string" + }, + "urls": { + "description": "URLs of interest for clients apps", + "properties": { + "streaming_api": { + "description": "Websockets address for push streaming", + "type": "string" + } + }, + "type": "object" + }, + "version": { + "description": "The version of Pleroma installed on the instance", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Instance" + } + }, + "summary": "Retrieve instance information", + "tags": [ + "Instance" + ] + } + }, + "/api/v1/custom_emojis": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Returns custom emojis that are available on the server.", + "operationId": "CustomEmojiController.index", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for custom emojis", + "example": [ + { + "category": "Fun", + "shortcode": "blank", + "static_url": "https://lain.com/emoji/blank.png", + "tags": [ + "Fun" + ], + "url": "https://lain.com/emoji/blank.png", + "visible_in_picker": false + }, + { + "category": "Gif,Fun", + "shortcode": "firefox", + "static_url": "https://lain.com/emoji/Firefox.gif", + "tags": [ + "Gif", + "Fun" + ], + "url": "https://lain.com/emoji/Firefox.gif", + "visible_in_picker": true + }, + { + "category": "pack:mixed", + "shortcode": "sadcat", + "static_url": "https://lain.com/emoji/mixed/sadcat.png", + "tags": [ + "pack:mixed" + ], + "url": "https://lain.com/emoji/mixed/sadcat.png", + "visible_in_picker": true + } + ], + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/Emoji" + }, + { + "properties": { + "category": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + ], + "description": "Schema for a CustomEmoji", + "example": { + "category": "Fun", + "shortcode": "aaaa", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/007/118/static/aaaa.png", + "tags": [ + "Gif", + "Fun" + ], + "url": "https://files.mastodon.social/custom_emojis/images/000/007/118/original/aaaa.png", + "visible_in_picker": true + }, + "title": "CustomEmoji" + }, + "title": "CustomEmojisResponse", + "type": "array" + } + } + }, + "description": "Custom Emojis" + } + }, + "summary": "Retrieve a list of custom emojis", + "tags": [ + "Custom emojis" + ] + } + }, + "/api/v1/statuses/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "description": "Delete one of your own statuses", + "operationId": "StatusController.delete", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "write:statuses" + ] + } + ], + "summary": "Delete", + "tags": [ + "Status actions" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View information about a status", + "operationId": "StatusController.show", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Include reactions from muted acccounts.", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Status", + "tags": [ + "Retrieve status information" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "description": "Change the content of a status", + "operationId": "StatusController.update", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "poll": { + "expires_in": 420, + "options": [ + "Cofe", + "Adventure" + ] + }, + "sensitive": "false", + "status": "What time is it?" + }, + "properties": { + "content_type": { + "description": "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint.", + "nullable": true, + "type": "string" + }, + "media_ids": { + "description": "Array of Attachment ids to be attached as media.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "sensitive": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Mark status and attached media as sensitive?", + "nullable": true + }, + "spoiler_text": { + "description": "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided.", + "nullable": true, + "type": "string" + }, + "to": { + "description": "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "title": "StatusUpdateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "example": { + "poll": { + "expires_in": 420, + "options": [ + "Cofe", + "Adventure" + ] + }, + "sensitive": "false", + "status": "What time is it?" + }, + "properties": { + "content_type": { + "description": "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint.", + "nullable": true, + "type": "string" + }, + "media_ids": { + "description": "Array of Attachment ids to be attached as media.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "sensitive": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Mark status and attached media as sensitive?", + "nullable": true + }, + "spoiler_text": { + "description": "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided.", + "nullable": true, + "type": "string" + }, + "to": { + "description": "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "title": "StatusUpdateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "example": { + "poll": { + "expires_in": 420, + "options": [ + "Cofe", + "Adventure" + ] + }, + "sensitive": "false", + "status": "What time is it?" + }, + "properties": { + "content_type": { + "description": "The MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint.", + "nullable": true, + "type": "string" + }, + "media_ids": { + "description": "Array of Attachment ids to be attached as media.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "poll": { + "nullable": true, + "properties": { + "expires_in": { + "description": "Duration the poll should be open, in seconds. Must be provided with `poll[options]`", + "nullable": true, + "type": "integer" + }, + "hide_totals": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Hide vote counts until the poll ends?", + "nullable": true + }, + "multiple": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Allow multiple choices?", + "nullable": true + }, + "options": { + "description": "Array of possible answers. Must be provided with `poll[expires_in]`.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options", + "expires_in" + ], + "type": "object" + }, + "sensitive": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "description": "Mark status and attached media as sensitive?", + "nullable": true + }, + "spoiler_text": { + "description": "Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided.", + "nullable": true, + "type": "string" + }, + "to": { + "description": "A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "title": "StatusUpdateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "write:statuses" + ] + } + ], + "summary": "Update status", + "tags": [ + "Update status" + ] + } + }, + "/api/v1/polls/{id}": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PollController.show", + "parameters": [ + { + "description": "Poll ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Poll" + } + } + }, + "description": "Poll" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "View a poll", + "tags": [ + "Polls" + ] + } + }, + "/api/v1/pleroma/admin/users/{nickname}": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.show", + "parameters": [ + { + "description": "User nickname or ID", + "in": "path", + "name": "nickname", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "actor_type": { + "type": "string" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_approved": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "registration_reason": { + "nullable": true, + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:read:accounts" + ] + } + ], + "summary": "Show user", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/pleroma/admin/media_proxy_caches/purge": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.MediaProxyCacheController.purge", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "ban": { + "default": true, + "type": "boolean" + }, + "urls": { + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "urls" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "ban": { + "default": true, + "type": "boolean" + }, + "urls": { + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "urls" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "ban": { + "default": true, + "type": "boolean" + }, + "urls": { + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "urls" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": {}, + "type": "object" + } + } + }, + "description": "Empty object" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:media_proxy_caches" + ] + } + ], + "summary": "Purge a URL from MediaProxy cache and optionally ban it", + "tags": [ + "MediaProxy cache" + ] + } + }, + "/api/v1/pleroma/emoji/packs/files": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.EmojiPackController.delete_file", + "parameters": [ + { + "description": "Pack Name", + "example": "cofe", + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "File shortcode", + "example": "cofe", + "in": "query", + "name": "shortcode", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "description": "Object with emoji names as keys and filenames as values", + "type": "object" + } + } + }, + "description": "Files Object" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Delete emoji file from pack", + "tags": [ + "Emoji pack administration" + ] + }, + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.EmojiPackController.update_file", + "parameters": [ + { + "description": "Pack Name", + "example": "cofe", + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "force": { + "default": false, + "description": "With true value to overwrite existing emoji with new shortcode", + "type": "boolean" + }, + "new_filename": { + "description": "New filename for emoji file", + "type": "string" + }, + "new_shortcode": { + "description": "New emoji file shortcode", + "type": "string" + }, + "shortcode": { + "description": "Emoji file shortcode", + "type": "string" + } + }, + "required": [ + "shortcode", + "new_shortcode", + "new_filename" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "force": { + "default": false, + "description": "With true value to overwrite existing emoji with new shortcode", + "type": "boolean" + }, + "new_filename": { + "description": "New filename for emoji file", + "type": "string" + }, + "new_shortcode": { + "description": "New emoji file shortcode", + "type": "string" + }, + "shortcode": { + "description": "Emoji file shortcode", + "type": "string" + } + }, + "required": [ + "shortcode", + "new_shortcode", + "new_filename" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "force": { + "default": false, + "description": "With true value to overwrite existing emoji with new shortcode", + "type": "boolean" + }, + "new_filename": { + "description": "New filename for emoji file", + "type": "string" + }, + "new_shortcode": { + "description": "New emoji file shortcode", + "type": "string" + }, + "shortcode": { + "description": "Emoji file shortcode", + "type": "string" + } + }, + "required": [ + "shortcode", + "new_shortcode", + "new_filename" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "description": "Object with emoji names as keys and filenames as values", + "type": "object" + } + } + }, + "description": "Files Object" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Conflict" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Add new file to the pack", + "tags": [ + "Emoji pack administration" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.EmojiPackController.add_file", + "parameters": [ + { + "description": "Pack Name", + "example": "cofe", + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "file": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "format": "uri", + "type": "string" + } + ], + "description": "File needs to be uploaded with the multipart request or link to remote file" + }, + "filename": { + "description": "New emoji file name. If not specified will be taken from original filename.", + "type": "string" + }, + "shortcode": { + "description": "Shortcode for new emoji, must be unique for all emoji. If not sended, shortcode will be taken from original filename.", + "type": "string" + } + }, + "required": [ + "file" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "file": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "format": "uri", + "type": "string" + } + ], + "description": "File needs to be uploaded with the multipart request or link to remote file" + }, + "filename": { + "description": "New emoji file name. If not specified will be taken from original filename.", + "type": "string" + }, + "shortcode": { + "description": "Shortcode for new emoji, must be unique for all emoji. If not sended, shortcode will be taken from original filename.", + "type": "string" + } + }, + "required": [ + "file" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "file": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "format": "uri", + "type": "string" + } + ], + "description": "File needs to be uploaded with the multipart request or link to remote file" + }, + "filename": { + "description": "New emoji file name. If not specified will be taken from original filename.", + "type": "string" + }, + "shortcode": { + "description": "Shortcode for new emoji, must be unique for all emoji. If not sended, shortcode will be taken from original filename.", + "type": "string" + } + }, + "required": [ + "file" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "description": "Object with emoji names as keys and filenames as values", + "type": "object" + } + } + }, + "description": "Files Object" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Conflict" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Unprocessable Entity" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Add new file to the pack", + "tags": [ + "Emoji pack administration" + ] + } + }, + "/api/v1/pleroma/admin/oauth_app/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.OAuthAppController.delete", + "parameters": [ + { + "description": "App ID", + "example": 1337, + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "content": { + "application/json": { + "schema": { + "example": "", + "type": "string" + } + } + }, + "description": "No Content" + }, + "400": { + "content": { + "application/json": { + "schema": { + "example": "", + "type": "string" + } + } + }, + "description": "No Content" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Delete OAuth application", + "tags": [ + "OAuth application managment" + ] + }, + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.OAuthAppController.update", + "parameters": [ + { + "description": "App ID", + "example": 1337, + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "scopes": [ + "read", + "write" + ], + "trusted": true, + "website": "https://myapp.com/" + }, + "properties": { + "name": { + "description": "Application Name", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "description": "oAuth scopes", + "items": { + "type": "string" + }, + "type": "array" + }, + "trusted": { + "default": false, + "description": "Is the app trusted?", + "nullable": true, + "type": "boolean" + }, + "website": { + "description": "A URL to the homepage of the app", + "nullable": true, + "type": "string" + } + }, + "title": "oAuthAppUpdateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "example": { + "name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "scopes": [ + "read", + "write" + ], + "trusted": true, + "website": "https://myapp.com/" + }, + "properties": { + "name": { + "description": "Application Name", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "description": "oAuth scopes", + "items": { + "type": "string" + }, + "type": "array" + }, + "trusted": { + "default": false, + "description": "Is the app trusted?", + "nullable": true, + "type": "boolean" + }, + "website": { + "description": "A URL to the homepage of the app", + "nullable": true, + "type": "string" + } + }, + "title": "oAuthAppUpdateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "example": { + "name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "scopes": [ + "read", + "write" + ], + "trusted": true, + "website": "https://myapp.com/" + }, + "properties": { + "name": { + "description": "Application Name", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "description": "oAuth scopes", + "items": { + "type": "string" + }, + "type": "array" + }, + "trusted": { + "default": false, + "description": "Is the app trusted?", + "nullable": true, + "type": "boolean" + }, + "website": { + "description": "A URL to the homepage of the app", + "nullable": true, + "type": "string" + } + }, + "title": "oAuthAppUpdateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "redirect_uri": { + "type": "string" + }, + "trusted": { + "type": "boolean" + }, + "website": { + "nullable": true, + "type": "string" + } + }, + "title": "oAuthApp", + "type": "object" + } + } + }, + "description": "App" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ApiError" + }, + { + "type": "string" + } + ] + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Update OAuth application", + "tags": [ + "OAuth application managment" + ] + } + }, + "/api/v1/lists/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "ListController.delete", + "parameters": [ + { + "description": "List ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "security": [ + { + "oAuth": [ + "write:lists" + ] + } + ], + "summary": "Delete a list", + "tags": [ + "Lists" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Fetch the list with the given ID. Used for verifying the title of a list.", + "operationId": "ListController.show", + "parameters": [ + { + "description": "List ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/List" + } + } + }, + "description": "List" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:lists" + ] + } + ], + "summary": "Retrieve a list", + "tags": [ + "Lists" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "description": "Change the title of a list", + "operationId": "ListController.update", + "parameters": [ + { + "description": "List ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating or updating a List", + "properties": { + "title": { + "description": "List title", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating or updating a List", + "properties": { + "title": { + "description": "List title", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating or updating a List", + "properties": { + "title": { + "description": "List title", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/List" + } + } + }, + "description": "List" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:lists" + ] + } + ], + "summary": "Update a list", + "tags": [ + "Lists" + ] + } + }, + "/api/v1/statuses/{id}/context": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View statuses above and below this status in the thread", + "operationId": "StatusController.context", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Represents the tree around a given status. Used for reconstructing threads of statuses.", + "properties": { + "ancestors": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + }, + "descendants": { + + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + }, + "required": [ + "ancestors", + "descendants" + ], + "title": "StatusContext", + "type": "object" + } + } + }, + "description": "Context" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Parent and child statuses", + "tags": [ + "Retrieve status information" + ] + } + }, + "/api/v1/pleroma/conversations/read": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.ConversationController.mark_as_read", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Conversation" + }, + "type": "array" + } + } + }, + "description": "Array of Conversations that were marked as read" + } + }, + "security": [ + { + "oAuth": [ + "write:conversations" + ] + } + ], + "summary": "Marks all conversations as read", + "tags": [ + "Conversations" + ] + } + }, + "/api/v2/suggestions": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "SuggestionController.index2", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": [], + "items": { + "example": {}, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Empty array" + } + }, + "summary": "Follow suggestions", + "tags": [ + "Suggestions" + ] + } + }, + "/main/ostatus": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.show_subscribe_form", + "parameters": [], + "responses": { + "200": { + "content": { + "test/html": { + "schema": { + "type": "string" + } + } + }, + "description": "Web Page" + } + }, + "summary": "Show remote subscribe form", + "tags": [ + "Accounts" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.remote_subscribe", + "parameters": [], + "responses": { + "200": { + "content": { + "test/html": { + "schema": { + "type": "string" + } + } + }, + "description": "Web Page" + } + }, + "summary": "Remote Subscribe", + "tags": [ + "Accounts" + ] + } + }, + "/api/v1/notifications": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Notifications concerning the user. This API returns Link headers containing links to the next/previous page. However, the links can also be constructed dynamically using query params and `id` values.", + "operationId": "NotificationController.index", + "parameters": [ + { + "description": "Array of types to exclude", + "in": "query", + "name": "exclude_types", + "required": false, + "schema": { + "items": { + "description": "The type of event that resulted in the notification.\n\n- `follow` - Someone followed you\n- `mention` - Someone mentioned you in their status\n- `reblog` - Someone boosted one of your statuses\n- `favourite` - Someone favourited one of your statuses\n- `poll` - A poll you have voted in or created has ended\n- `move` - Someone moved their account\n- `pleroma:emoji_reaction` - Someone reacted with emoji to your status\n- `pleroma:report` - Someone was reported\n", + "enum": [ + "follow", + "favourite", + "reblog", + "mention", + "pleroma:emoji_reaction", + "pleroma:report", + "move", + "follow_request", + "poll" + ], + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Return only notifications received from this account", + "in": "query", + "name": "account_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Exclude the notifications for activities with the given visibilities", + "in": "query", + "name": "exclude_visibilities", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "type": "array" + } + }, + { + "description": "Include the notifications for activities with the given types", + "in": "query", + "name": "include_types", + "required": false, + "schema": { + "items": { + "description": "The type of event that resulted in the notification.\n\n- `follow` - Someone followed you\n- `mention` - Someone mentioned you in their status\n- `reblog` - Someone boosted one of your statuses\n- `favourite` - Someone favourited one of your statuses\n- `poll` - A poll you have voted in or created has ended\n- `move` - Someone moved their account\n- `pleroma:emoji_reaction` - Someone reacted with emoji to your status\n- `pleroma:report` - Someone was reported\n", + "enum": [ + "follow", + "favourite", + "reblog", + "mention", + "pleroma:emoji_reaction", + "pleroma:report", + "move", + "follow_request", + "poll" + ], + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Include the notifications from muted users", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "description": "Response schema for a notification", + + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + } + ], + "description": "The account that performed the action that generated the notification." + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "type": "string" + }, + "pleroma": { + "properties": { + "is_muted": { + "type": "boolean" + }, + "is_seen": { + "type": "boolean" + } + }, + "type": "object" + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/Status" + } + ], + "description": "Status that was the object of the notification, e.g. in mentions, reblogs, favourites, or polls.", + "nullable": true + }, + "type": { + "description": "The type of event that resulted in the notification.\n\n- `follow` - Someone followed you\n- `mention` - Someone mentioned you in their status\n- `reblog` - Someone boosted one of your statuses\n- `favourite` - Someone favourited one of your statuses\n- `poll` - A poll you have voted in or created has ended\n- `move` - Someone moved their account\n- `pleroma:emoji_reaction` - Someone reacted with emoji to your status\n- `pleroma:report` - Someone was reported\n", + "enum": [ + "follow", + "favourite", + "reblog", + "mention", + "pleroma:emoji_reaction", + "pleroma:report", + "move", + "follow_request", + "poll" + ], + "type": "string" + } + }, + "title": "Notification", + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Array of notifications" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:notifications" + ] + } + ], + "summary": "Retrieve a list of notifications", + "tags": [ + "Notifications" + ] + } + }, + "/api/v1/timelines/tag/{tag}": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View public statuses containing the given hashtag", + "operationId": "TimelineController.hashtag", + "parameters": [ + { + "description": "Content of a #hashtag, not including # symbol.", + "in": "path", + "name": "tag", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Statuses that also includes any of these tags", + "in": "query", + "name": "any", + "required": false, + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Statuses that also includes all of these tags", + "in": "query", + "name": "all", + "required": false, + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Statuses that do not include these tags", + "in": "query", + "name": "none", + "required": false, + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Show only local statuses?", + "in": "query", + "name": "local", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Show only statuses with media attached?", + "in": "query", + "name": "only_media", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Show only remote statuses?", + "in": "query", + "name": "remote", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Include activities by muted users", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Exclude the statuses with the given visibilities", + "in": "query", + "name": "exclude_visibilities", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "type": "array" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Status" + }, + "title": "ArrayOfStatuses", + "type": "array" + } + } + }, + "description": "Array of Status" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Hashtag timeline", + "tags": [ + "Timelines" + ] + } + }, + "/api/v1/accounts/{id}/remove_from_followers": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Remove the given account from followers", + "operationId": "AccountController.remove_from_followers", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:follows" + ] + } + ], + "summary": "Remove from followers", + "tags": [ + "Account actions" + ] + } + }, + "/api/v1/pleroma/admin/users/suggest": { + "patch": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.suggest", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for adding multiple suggested users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for adding multiple suggested users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for adding multiple suggested users", + "properties": { + "nicknames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "user": { + "items": { + "properties": { + "actor_type": { + "type": "string" + }, + "avatar": { + "format": "uri", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_approved": { + "type": "boolean" + }, + "is_confirmed": { + "type": "boolean" + }, + "local": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "registration_reason": { + "nullable": true, + "type": "string" + }, + "roles": { + "properties": { + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + }, + "type": "object" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:accounts" + ] + } + ], + "summary": "Suggest multiple users", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/accounts/{id}/block": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Block the given account. Clients should filter statuses from this account if received (e.g. due to a boost in the Home timeline)", + "operationId": "AccountController.block", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:blocks" + ] + } + ], + "summary": "Block", + "tags": [ + "Account actions" + ] + } + }, + "/api/v1/instance/peers": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "InstanceController.peers", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": [ + "pleroma.site", + "lain.com", + "bikeshed.party" + ], + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "description": "Array of domains" + } + }, + "summary": "Retrieve list of known instances", + "tags": [ + "Instance" + ] + } + }, + "/api/v1/accounts/{id}/unblock": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Unblock the given account.", + "operationId": "AccountController.unblock", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:blocks" + ] + } + ], + "summary": "Unblock", + "tags": [ + "Account actions" + ] + } + }, + "/api/v1/scheduled_statuses/{id}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "ScheduledActivity.delete", + "parameters": [ + { + "description": "Poll ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Empty object" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:statuses" + ] + } + ], + "summary": "Cancel a scheduled status", + "tags": [ + "Scheduled statuses" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "ScheduledActivity.show", + "parameters": [ + { + "description": "Poll ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledStatus" + } + } + }, + "description": "Scheduled Status" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "View a single scheduled status", + "tags": [ + "Scheduled statuses" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "operationId": "ScheduledActivity.update", + "parameters": [ + { + "description": "Poll ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "scheduled_at": { + "description": "ISO 8601 Datetime at which the status will be published. Must be at least 5 minutes into the future.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "scheduled_at": { + "description": "ISO 8601 Datetime at which the status will be published. Must be at least 5 minutes into the future.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "scheduled_at": { + "description": "ISO 8601 Datetime at which the status will be published. Must be at least 5 minutes into the future.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledStatus" + } + } + }, + "description": "Scheduled Status" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:statuses" + ] + } + ], + "summary": "Schedule a status", + "tags": [ + "Scheduled statuses" + ] + } + }, + "/api/pleroma/blocks_import": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UserImportController.blocks", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "list": { + "anyOf": [ + { + "format": "binary", + "type": "string" + }, + { + "type": "string" + } + ], + "description": "STRING or FILE containing a whitespace-separated list of accounts to import." + } + }, + "required": [ + "list" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": "ok", + "type": "string" + } + } + }, + "description": "Ok" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:blocks" + ] + } + ], + "summary": "Import blocks", + "tags": [ + "Data import" + ] + } + }, + "/api/v1/accounts/{id}": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View information about a profile.", + "operationId": "AccountController.show", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + }, + { + "description": "Embed relationships into accounts. **If this parameter is not set account's `pleroma.relationship` is going to be `null`.**", + "in": "query", + "name": "with_relationships", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Account" + } + } + }, + "description": "Account" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "summary": "Account", + "tags": [ + "Retrieve account information" + ] + } + }, + "/api/v1/pleroma/captcha": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.captcha", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Success" + } + }, + "summary": "Get a captcha", + "tags": [] + } + }, + "/api/v1/pleroma/admin/users/follow": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.UserController.follow", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "followed": { + "description": "Followed nickname", + "type": "string" + }, + "follower": { + "description": "Follower nickname", + "type": "string" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "followed": { + "description": "Followed nickname", + "type": "string" + }, + "follower": { + "description": "Follower nickname", + "type": "string" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "followed": { + "description": "Followed nickname", + "type": "string" + }, + "follower": { + "description": "Follower nickname", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:write:follows" + ] + } + ], + "summary": "Follow", + "tags": [ + "User administration" + ] + } + }, + "/api/v1/accounts/{id}/statuses": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Statuses posted to the given account. Public (for public statuses only), or user token + `read:statuses` (for private statuses the user is authorized to see)", + "operationId": "AccountController.statuses", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + }, + { + "description": "Include only pinned statuses", + "in": "query", + "name": "pinned", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "With tag", + "in": "query", + "name": "tagged", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Include only statuses with media attached", + "in": "query", + "name": "only_media", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Include statuses from muted accounts.", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Exclude reblogs", + "in": "query", + "name": "exclude_reblogs", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Exclude replies", + "in": "query", + "name": "exclude_replies", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Exclude visibilities", + "in": "query", + "name": "exclude_visibilities", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "type": "array" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Status" + }, + "title": "ArrayOfStatuses", + "type": "array" + } + } + }, + "description": "Statuses" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "summary": "Statuses", + "tags": [ + "Retrieve account information" + ] + } + }, + "/api/v1/pleroma/emoji/packs/download": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.EmojiPackController.download", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "as": { + "description": "Save as", + "format": "uri", + "type": "string" + }, + "name": { + "description": "Pack Name", + "format": "uri", + "type": "string" + }, + "url": { + "description": "URL of the instance to download from", + "format": "uri", + "type": "string" + } + }, + "required": [ + "url", + "name" + ], + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "as": { + "description": "Save as", + "format": "uri", + "type": "string" + }, + "name": { + "description": "Pack Name", + "format": "uri", + "type": "string" + }, + "url": { + "description": "URL of the instance to download from", + "format": "uri", + "type": "string" + } + }, + "required": [ + "url", + "name" + ], + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "as": { + "description": "Save as", + "format": "uri", + "type": "string" + }, + "name": { + "description": "Pack Name", + "format": "uri", + "type": "string" + }, + "url": { + "description": "URL of the instance to download from", + "format": "uri", + "type": "string" + } + }, + "required": [ + "url", + "name" + ], + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": "ok", + "type": "string" + } + } + }, + "description": "Ok" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Download pack from another instance", + "tags": [ + "Emoji pack administration" + ] + } + }, + "/api/v1/akkoma/preferred_frontend/available": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "List frontend setting profiles", + "operationId": "AkkomaAPI.FrontendSettingsController.available_frontends", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "description": "Frontends" + } + }, + "summary": "Frontend Settings Profiles", + "tags": [ + "Frontends" + ] + } + }, + "/api/v1/accounts/{id}/unmute": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Unmute the given account.", + "operationId": "AccountController.unmute", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:mutes" + ] + } + ], + "summary": "Unmute", + "tags": [ + "Account actions" + ] + } + }, + "/api/v1/apps": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Create a new application to obtain OAuth2 credentials", + "operationId": "AppController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating an app", + "example": { + "client_name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "website": "https://myapp.com/" + }, + "properties": { + "client_name": { + "description": "A name for your application.", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "default": "read", + "description": "Space separated list of scopes", + "type": "string" + }, + "website": { + "description": "A URL to the homepage of your app", + "nullable": true, + "type": "string" + } + }, + "required": [ + "client_name", + "redirect_uris" + ], + "title": "AppCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating an app", + "example": { + "client_name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "website": "https://myapp.com/" + }, + "properties": { + "client_name": { + "description": "A name for your application.", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "default": "read", + "description": "Space separated list of scopes", + "type": "string" + }, + "website": { + "description": "A URL to the homepage of your app", + "nullable": true, + "type": "string" + } + }, + "required": [ + "client_name", + "redirect_uris" + ], + "title": "AppCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating an app", + "example": { + "client_name": "My App", + "redirect_uris": "https://myapp.com/auth/callback", + "website": "https://myapp.com/" + }, + "properties": { + "client_name": { + "description": "A name for your application.", + "type": "string" + }, + "redirect_uris": { + "description": "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter.", + "type": "string" + }, + "scopes": { + "default": "read", + "description": "Space separated list of scopes", + "type": "string" + }, + "website": { + "description": "A URL to the homepage of your app", + "nullable": true, + "type": "string" + } + }, + "required": [ + "client_name", + "redirect_uris" + ], + "title": "AppCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/App" + } + } + }, + "description": "App" + }, + "422": { + "content": { + "application/json": { + "schema": { + "description": "If a required parameter is missing or improperly formatted, the request will fail.", + "example": { + "error": "Validation failed: Redirect URI must be an absolute URI." + }, + "properties": { + "error": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create an application", + "tags": [ + "Applications" + ] + } + }, + "/api/v1/pleroma/emoji/packs/remote": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.EmojiPackController.remote", + "parameters": [ + { + "description": "URL of the instance", + "in": "query", + "name": "url", + "required": true, + "schema": { + "format": "uri", + "type": "string" + } + }, + { + "description": "Page", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" + } + }, + { + "description": "Number of emoji to return", + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "default": 30, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": { + "count": 4, + "packs": { + "emojos": { + "files": { + "emacs": "emacs.png", + "guix": "guix.png" + }, + "pack": { + "can-download": true, + "description": "Test description", + "download-sha256": "57482F30674FD3DE821FF48C81C00DA4D4AF1F300209253684ABA7075E5FC238", + "homepage": "https://pleroma.social", + "license": "Test license", + "share-files": true + } + } + } + }, + "properties": { + "count": { + "type": "integer" + }, + "packs": { + "additionalProperties": { + "example": { + "files": { + "emacs": "emacs.png", + "guix": "guix.png" + }, + "pack": { + "can-download": true, + "description": "Test description", + "download-sha256": "57482F30674FD3DE821FF48C81C00DA4D4AF1F300209253684ABA7075E5FC238", + "homepage": "https://pleroma.social", + "license": "Test license", + "share-files": true + } + }, + "properties": { + "files": { + "additionalProperties": { + "type": "string" + }, + "description": "Object with emoji names as keys and filenames as values", + "type": "object" + }, + "pack": { + "properties": { + "can-download": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "download-sha256": { + "type": "string" + }, + "homepage": { + "format": "uri", + "type": "string" + }, + "license": { + "type": "string" + }, + "share-files": { + "type": "boolean" + } + }, + "type": "object" + } + }, + "title": "EmojiPack", + "type": "object" + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "Object with pack names as keys and pack contents as values" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Make request to another instance for emoji packs list", + "tags": [ + "Emoji pack administration" + ] + } + }, + "/api/v1/timelines/bubble": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "TimelineController.bubble", + "parameters": [ + { + "description": "Show only statuses with media attached?", + "in": "query", + "name": "only_media", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Show only remote statuses?", + "in": "query", + "name": "remote", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Include activities by muted users", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Exclude the statuses with the given visibilities", + "in": "query", + "name": "exclude_visibilities", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "type": "array" + } + }, + { + "description": "Filter replies. Possible values: without parameter (default) shows all replies, `following` - replies directed to you or users you follow, `self` - replies directed to you.", + "in": "query", + "name": "reply_visibility", + "required": false, + "schema": { + "enum": [ + "following", + "self" + ], + "type": "string" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Status" + }, + "title": "ArrayOfStatuses", + "type": "array" + } + } + }, + "description": "Array of Status" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Bubble timeline", + "tags": [ + "Timelines" + ] + } + }, + "/api/v1/conversations": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "ConversationController.index", + "parameters": [ + { + "description": "Only return conversations with the given recipients (a list of user ids)", + "in": "query", + "name": "recipients", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/FlakeID" + }, + "type": "array" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Conversation" + }, + "type": "array" + } + } + }, + "description": "Array of Conversation" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "List of conversations", + "tags": [ + "Conversations" + ] + } + }, + "/api/v1/timelines/home": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View statuses from followed users", + "operationId": "TimelineController.home", + "parameters": [ + { + "description": "Show only local statuses?", + "in": "query", + "name": "local", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Show only remote statuses?", + "in": "query", + "name": "remote", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Show only statuses with media attached?", + "in": "query", + "name": "only_media", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Include activities by muted users", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Exclude the statuses with the given visibilities", + "in": "query", + "name": "exclude_visibilities", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "type": "array" + } + }, + { + "description": "Filter replies. Possible values: without parameter (default) shows all replies, `following` - replies directed to you or users you follow, `self` - replies directed to you.", + "in": "query", + "name": "reply_visibility", + "required": false, + "schema": { + "enum": [ + "following", + "self" + ], + "type": "string" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Status" + }, + "title": "ArrayOfStatuses", + "type": "array" + } + } + }, + "description": "Array of Status" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Home timeline", + "tags": [ + "Timelines" + ] + } + }, + "/api/v1/accounts/{id}/unfollow": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Unfollow the given account", + "operationId": "AccountController.unfollow", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:follows" + ] + } + ], + "summary": "Unfollow", + "tags": [ + "Account actions" + ] + } + }, + "/api/v1/pleroma/notifications/read": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Query parameters are mutually exclusive.", + "operationId": "PleromaAPI.NotificationController.mark_as_read", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "description": "A single notification ID to read", + "type": "integer" + }, + "max_id": { + "description": "Read all notifications up to this ID", + "type": "integer" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "id": { + "description": "A single notification ID to read", + "type": "integer" + }, + "max_id": { + "description": "Read all notifications up to this ID", + "type": "integer" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "id": { + "description": "A single notification ID to read", + "type": "integer" + }, + "max_id": { + "description": "Read all notifications up to this ID", + "type": "integer" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "items": { + "description": "Response schema for a notification", + + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + } + ], + "description": "The account that performed the action that generated the notification." + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "type": "string" + }, + "pleroma": { + "properties": { + "is_muted": { + "type": "boolean" + }, + "is_seen": { + "type": "boolean" + } + }, + "type": "object" + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/Status" + } + ], + "description": "Status that was the object of the notification, e.g. in mentions, reblogs, favourites, or polls.", + "nullable": true + }, + "type": { + "description": "The type of event that resulted in the notification.\n\n- `follow` - Someone followed you\n- `mention` - Someone mentioned you in their status\n- `reblog` - Someone boosted one of your statuses\n- `favourite` - Someone favourited one of your statuses\n- `poll` - A poll you have voted in or created has ended\n- `move` - Someone moved their account\n- `pleroma:emoji_reaction` - Someone reacted with emoji to your status\n- `pleroma:report` - Someone was reported\n", + "enum": [ + "follow", + "favourite", + "reblog", + "mention", + "pleroma:emoji_reaction", + "pleroma:report", + "move", + "follow_request", + "poll" + ], + "type": "string" + } + }, + "title": "Notification", + "type": "object" + }, + "type": "array" + }, + { + "description": "Response schema for a notification", + + "properties": { + "account": { + "allOf": [ + { + "$ref": "#/components/schemas/Account" + } + ], + "description": "The account that performed the action that generated the notification." + }, + "created_at": { + "format": "date-time", + "type": "string" + }, + "id": { + "type": "string" + }, + "pleroma": { + "properties": { + "is_muted": { + "type": "boolean" + }, + "is_seen": { + "type": "boolean" + } + }, + "type": "object" + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/Status" + } + ], + "description": "Status that was the object of the notification, e.g. in mentions, reblogs, favourites, or polls.", + "nullable": true + }, + "type": { + "description": "The type of event that resulted in the notification.\n\n- `follow` - Someone followed you\n- `mention` - Someone mentioned you in their status\n- `reblog` - Someone boosted one of your statuses\n- `favourite` - Someone favourited one of your statuses\n- `poll` - A poll you have voted in or created has ended\n- `move` - Someone moved their account\n- `pleroma:emoji_reaction` - Someone reacted with emoji to your status\n- `pleroma:report` - Someone was reported\n", + "enum": [ + "follow", + "favourite", + "reblog", + "mention", + "pleroma:emoji_reaction", + "pleroma:report", + "move", + "follow_request", + "poll" + ], + "type": "string" + } + }, + "title": "Notification", + "type": "object" + } + ] + } + } + }, + "description": "A Notification or array of Notifications" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "write:notifications" + ] + } + ], + "summary": "Mark notifications as read", + "tags": [ + "Notifications" + ] + } + }, + "/api/v1/conversations/{id}/read": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "ConversationController.mark_as_read", + "parameters": [ + { + "description": "Conversation ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Conversation" + } + } + }, + "description": "Conversation" + } + }, + "security": [ + { + "oAuth": [ + "write:conversations" + ] + } + ], + "summary": "Mark conversation as read", + "tags": [ + "Conversations" + ] + } + }, + "/api/v1/pleroma/accounts/{id}/unsubscribe": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Stop receiving notifications for all statuses posted by the account.", + "operationId": "PleromaAPI.AccountController.unsubscribe", + "parameters": [ + { + "description": "Account ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:follows" + ] + } + ], + "summary": "Unsubscribe", + "tags": [ + "Account actions" + ] + } + }, + "/api/v1/statuses/{id}/unfavourite": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Remove a status from your favourites list", + "operationId": "StatusController.unfavourite", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "write:favourites" + ] + } + ], + "summary": "Undo favourite", + "tags": [ + "Status actions" + ] + } + }, + "/api/v1/akkoma/frontend_settings/{frontend_name}/{profile_name}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "description": "Delete frontend setting profile", + "operationId": "AkkomaAPI.FrontendSettingsController.delete_profile", + "parameters": [ + { + "description": "Frontend name", + "example": "pleroma-fe", + "in": "path", + "name": "frontend_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Profile name", + "example": "mobile", + "in": "path", + "name": "profile_name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Empty" + }, + "404": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Delete frontend Settings Profile", + "tags": [ + "Frontends" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Get frontend setting profile", + "operationId": "AkkomaAPI.FrontendSettingsController.get_profile", + "parameters": [ + { + "description": "Frontend name", + "example": "pleroma-fe", + "in": "path", + "name": "frontend_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Profile name", + "example": "mobile", + "in": "path", + "name": "profile_name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "settings": { + "additionalProperties": true, + "type": "object" + }, + "version": { + "type": "integer" + } + }, + "type": "object" + } + } + }, + "description": "Profile" + }, + "404": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Frontend Settings Profile", + "tags": [ + "Frontends" + ] + }, + "put": { + "callbacks": {}, + "deprecated": false, + "description": "Update frontend setting profile", + "operationId": "AkkomaAPI.FrontendSettingsController.update_profile_operation", + "parameters": [ + { + "description": "Frontend name", + "example": "pleroma-fe", + "in": "path", + "name": "frontend_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Profile name", + "example": "mobile", + "in": "path", + "name": "profile_name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "settings": { + "description": "Settings of the profile", + "example": { + "locale": "en", + "theme": "dark" + }, + "type": "object" + }, + "version": { + "description": "Version of the profile, must increment by 1 each time", + "example": 1, + "type": "integer" + } + }, + "required": [ + "version", + "settings" + ], + "title": "Frontend Setting Profile", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "settings": { + "description": "Settings of the profile", + "example": { + "locale": "en", + "theme": "dark" + }, + "type": "object" + }, + "version": { + "description": "Version of the profile, must increment by 1 each time", + "example": 1, + "type": "integer" + } + }, + "required": [ + "version", + "settings" + ], + "title": "Frontend Setting Profile", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "settings": { + "description": "Settings of the profile", + "example": { + "locale": "en", + "theme": "dark" + }, + "type": "object" + }, + "version": { + "description": "Version of the profile, must increment by 1 each time", + "example": 1, + "type": "integer" + } + }, + "required": [ + "version", + "settings" + ], + "title": "Frontend Setting Profile", + "type": "object" + } + } + }, + "description": "Settings", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Settings" + }, + "422": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Invalid" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Frontend Settings Profile", + "tags": [ + "Frontends" + ] + } + }, + "/api/v1/notifications/{id}/dismiss": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Clear a single notification from the server.", + "operationId": "NotificationController.dismiss", + "parameters": [ + { + "description": "Notification ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": {}, + "type": "object" + } + } + }, + "description": "Empty object" + } + }, + "security": [ + { + "oAuth": [ + "write:notifications" + ] + } + ], + "summary": "Dismiss a notification", + "tags": [ + "Notifications" + ] + } + }, + "/api/v1/pleroma/admin/frontends/install": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.FrontendController.install", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "build_dir": { + "type": "string" + }, + "build_url": { + "type": "string" + }, + "file": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "FrontendInstallRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "build_dir": { + "type": "string" + }, + "build_url": { + "type": "string" + }, + "file": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "FrontendInstallRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "build_dir": { + "type": "string" + }, + "build_url": { + "type": "string" + }, + "file": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "FrontendInstallRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "build_url": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "git": { + "format": "uri", + "nullable": true, + "type": "string" + }, + "installed": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Response" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + } + }, + "security": [ + { + "oAuth": [ + "admin:read" + ] + } + ], + "summary": "Install a frontend", + "tags": [ + "Frontend managment" + ] + } + }, + "/api/v1/pleroma/conversations/{id}/statuses": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "PleromaAPI.ConversationController.statuses", + "parameters": [ + { + "description": "Conversation ID", + "example": "123", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Status" + }, + "type": "array" + } + } + }, + "description": "Array of Statuses" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Timeline for conversation", + "tags": [ + "Conversations" + ] + } + }, + "/api/v1/follow_requests": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "FollowRequestController.index", + "parameters": [ + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "type": "array" + } + } + }, + "description": "Array of Account" + } + }, + "security": [ + { + "oAuth": [ + "read:follows", + "follow" + ] + } + ], + "summary": "Retrieve follow requests", + "tags": [ + "Follow requests" + ] + } + }, + "/api/v1/accounts/search": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "SearchController.account_search", + "parameters": [ + { + "description": "What to search for", + "in": "query", + "name": "q", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Maximum number of results", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 40, + "type": "integer" + } + }, + { + "description": "Attempt WebFinger lookup. Use this when `q` is an exact address.", + "in": "query", + "name": "resolve", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Only include accounts that the user is following", + "in": "query", + "name": "following", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "title": "ArrayOfAccounts", + "type": "array" + } + } + }, + "description": "Array of Account" + } + }, + "summary": "Search for matching accounts by username or display name", + "tags": [ + "Search" + ] + } + }, + "/api/v1/statuses/{id}/bookmark": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Privately bookmark a status", + "operationId": "StatusController.bookmark", + "parameters": [ + { + "description": "Status ID", + "example": "9umDrYheeY451cQnEe", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + }, + "description": "Status" + } + }, + "security": [ + { + "oAuth": [ + "write:bookmarks" + ] + } + ], + "summary": "Bookmark", + "tags": [ + "Status actions" + ] + } + }, + "/api/pleroma/delete_account": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.delete_account", + "parameters": [ + { + "description": "Password", + "in": "query", + "name": "password", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for deleting one's own account", + "example": { + "password": "prettyp0ony1313" + }, + "properties": { + "password": { + "description": "The user's own password for confirmation.", + "format": "password", + "type": "string" + } + }, + "title": "AccountDeleteRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for deleting one's own account", + "example": { + "password": "prettyp0ony1313" + }, + "properties": { + "password": { + "description": "The user's own password for confirmation.", + "format": "password", + "type": "string" + } + }, + "title": "AccountDeleteRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for deleting one's own account", + "example": { + "password": "prettyp0ony1313" + }, + "properties": { + "password": { + "description": "The user's own password for confirmation.", + "format": "password", + "type": "string" + } + }, + "title": "AccountDeleteRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Delete Account", + "tags": [ + "Account credentials" + ] + } + }, + "/api/v1/akkoma/frontend_settings/{frontend_name}": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "List frontend setting profiles", + "operationId": "AkkomaAPI.FrontendSettingsController.list_profiles", + "parameters": [ + { + "description": "Frontend name", + "example": "pleroma-fe", + "in": "path", + "name": "frontend_name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Profiles" + } + }, + "security": [ + { + "oAuth": [ + "read:accounts" + ] + } + ], + "summary": "Frontend Settings Profiles", + "tags": [ + "Frontends" + ] + } + }, + "/api/v2/media": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Creates an attachment to be used with a new status.", + "operationId": "MediaController.create2", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating an attachment", + "properties": { + "description": { + "description": "A plain-text description of the media, for accessibility purposes.", + "type": "string" + }, + "file": { + "description": "The file to be attached, using multipart form data.", + "format": "binary", + "type": "string" + }, + "focus": { + "description": "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0.", + "type": "string" + } + }, + "required": [ + "file" + ], + "title": "MediaCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating an attachment", + "properties": { + "description": { + "description": "A plain-text description of the media, for accessibility purposes.", + "type": "string" + }, + "file": { + "description": "The file to be attached, using multipart form data.", + "format": "binary", + "type": "string" + }, + "focus": { + "description": "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0.", + "type": "string" + } + }, + "required": [ + "file" + ], + "title": "MediaCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating an attachment", + "properties": { + "description": { + "description": "A plain-text description of the media, for accessibility purposes.", + "type": "string" + }, + "file": { + "description": "The file to be attached, using multipart form data.", + "format": "binary", + "type": "string" + }, + "focus": { + "description": "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0.", + "type": "string" + } + }, + "required": [ + "file" + ], + "title": "MediaCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Attachment" + } + } + }, + "description": "Media" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Media" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Media" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Media" + } + }, + "security": [ + { + "oAuth": [ + "write:media" + ] + } + ], + "summary": "Upload media as attachment (v2)", + "tags": [ + "Media attachments" + ] + } + }, + "/api/v1/pleroma/admin/config": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.ConfigController.show", + "parameters": [ + { + "description": "Get only saved in database settings", + "in": "query", + "name": "only_db", + "required": false, + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "configs": { + "items": { + "properties": { + "group": { + "type": "string" + }, + "key": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "array" + }, + { + "type": "object" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "boolean" + } + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "need_reboot": { + "description": "If `need_reboot` is `true`, instance must be restarted, so reboot time settings can take effect", + "type": "boolean" + } + }, + "type": "object" + } + } + }, + "description": "Config" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "admin:read" + ] + } + ], + "summary": "Retrieve instance configuration", + "tags": [ + "Instance configuration" + ] + }, + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.ConfigController.update", + "parameters": [ + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "configs": { + "items": { + "properties": { + "delete": { + "type": "boolean" + }, + "group": { + "type": "string" + }, + "key": { + "type": "string" + }, + "subkeys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "value": { + "oneOf": [ + { + "type": "array" + }, + { + "type": "object" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "boolean" + } + ] + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "configs": { + "items": { + "properties": { + "delete": { + "type": "boolean" + }, + "group": { + "type": "string" + }, + "key": { + "type": "string" + }, + "subkeys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "value": { + "oneOf": [ + { + "type": "array" + }, + { + "type": "object" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "boolean" + } + ] + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "configs": { + "items": { + "properties": { + "delete": { + "type": "boolean" + }, + "group": { + "type": "string" + }, + "key": { + "type": "string" + }, + "subkeys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "value": { + "oneOf": [ + { + "type": "array" + }, + { + "type": "object" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "boolean" + } + ] + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "configs": { + "items": { + "properties": { + "group": { + "type": "string" + }, + "key": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "array" + }, + { + "type": "object" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "boolean" + } + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "need_reboot": { + "description": "If `need_reboot` is `true`, instance must be restarted, so reboot time settings can take effect", + "type": "boolean" + } + }, + "type": "object" + } + } + }, + "description": "Config" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Update instance configuration", + "tags": [ + "Instance configuration" + ] + } + }, + "/api/v1/reports": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Report problematic users to your moderators", + "operationId": "ReportController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for creating a report", + "example": { + "account_id": "123", + "comment": "bad status!", + "forward": "false", + "status_ids": [ + "1337" + ] + }, + "properties": { + "account_id": { + "description": "ID of the account to report", + "type": "string" + }, + "comment": { + "description": "Reason for the report", + "nullable": true, + "type": "string" + }, + "forward": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "If the account is remote, should the report be forwarded to the remote admin?", + "nullable": true + }, + "status_ids": { + "description": "Array of Statuses to attach to the report, for context", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "required": [ + "account_id" + ], + "title": "ReportCreateRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for creating a report", + "example": { + "account_id": "123", + "comment": "bad status!", + "forward": "false", + "status_ids": [ + "1337" + ] + }, + "properties": { + "account_id": { + "description": "ID of the account to report", + "type": "string" + }, + "comment": { + "description": "Reason for the report", + "nullable": true, + "type": "string" + }, + "forward": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "If the account is remote, should the report be forwarded to the remote admin?", + "nullable": true + }, + "status_ids": { + "description": "Array of Statuses to attach to the report, for context", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "required": [ + "account_id" + ], + "title": "ReportCreateRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for creating a report", + "example": { + "account_id": "123", + "comment": "bad status!", + "forward": "false", + "status_ids": [ + "1337" + ] + }, + "properties": { + "account_id": { + "description": "ID of the account to report", + "type": "string" + }, + "comment": { + "description": "Reason for the report", + "nullable": true, + "type": "string" + }, + "forward": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "If the account is remote, should the report be forwarded to the remote admin?", + "nullable": true + }, + "status_ids": { + "description": "Array of Statuses to attach to the report, for context", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "required": [ + "account_id" + ], + "title": "ReportCreateRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "properties": { + "action_taken": { + "description": "Is action taken?", + "type": "boolean" + }, + "id": { + "description": "Report ID", + "type": "string" + } + }, + "title": "ReportResponse", + "type": "object" + } + } + }, + "description": "Report" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Report" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:reports" + ] + } + ], + "summary": "File a report", + "tags": [ + "Reports" + ] + } + }, + "/api/pleroma/change_password": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "UtilController.change_password", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "POST body for changing the account's password", + "properties": { + "new_password": { + "description": "New password", + "type": "string" + }, + "new_password_confirmation": { + "description": "New password, confirmation", + "type": "string" + }, + "password": { + "description": "Current password", + "type": "string" + } + }, + "required": [ + "password", + "new_password", + "new_password_confirmation" + ], + "title": "ChangePasswordRequest", + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "description": "POST body for changing the account's password", + "properties": { + "new_password": { + "description": "New password", + "type": "string" + }, + "new_password_confirmation": { + "description": "New password, confirmation", + "type": "string" + }, + "password": { + "description": "Current password", + "type": "string" + } + }, + "required": [ + "password", + "new_password", + "new_password_confirmation" + ], + "title": "ChangePasswordRequest", + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "description": "POST body for changing the account's password", + "properties": { + "new_password": { + "description": "New password", + "type": "string" + }, + "new_password_confirmation": { + "description": "New password, confirmation", + "type": "string" + }, + "password": { + "description": "Current password", + "type": "string" + } + }, + "required": [ + "password", + "new_password", + "new_password_confirmation" + ], + "title": "ChangePasswordRequest", + "type": "object" + } + } + }, + "description": "Parameters", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Success" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Change account password", + "tags": [ + "Account credentials" + ] + } + }, + "/api/v1/pleroma/statuses/{id}/reactions": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "EmojiReactionController.index", + "parameters": [ + { + "description": "Status ID", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/FlakeID" + } + }, + { + "description": "Filter by a single unicode emoji", + "in": "path", + "name": "emoji", + "schema": { + "type": "string" + } + }, + { + "description": "Include reactions from muted acccounts.", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + + "properties": { + "accounts": { + "description": "Array of accounts reacted with this emoji", + "items": { + "$ref": "#/components/schemas/Account" + }, + "type": "array" + }, + "count": { + "description": "Count of reactions with this emoji", + "type": "integer" + }, + "me": { + "description": "Did I react with this emoji?", + "type": "boolean" + }, + "name": { + "description": "Emoji", + "type": "string" + }, + "url": { + "description": "URL of the emoji if it's custom - otherwise null", + "format": "url", + "nullable": true, + "type": "string" + } + }, + "title": "EmojiReaction", + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Array of Emoji reactions" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Get an object of emoji to account mappings with accounts that reacted to the post", + "tags": [ + "Emoji reactions" + ] + } + }, + "/api/v1/pleroma/federation_status": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "Information about instances deemed unreachable by the server", + "operationId": "PleromaInstances.show", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": { + "unreachable": { + "consistently-unreachable.name": "2020-10-14 22:07:58.216473" + } + }, + "properties": { + "unreachable": { + "properties": { + "hostname": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "PleromaInstances" + } + }, + "summary": "Retrieve federation status", + "tags": [ + "Instance" + ] + } + }, + "/api/v1/accounts/{id}/lists": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "User lists that you have added this account to.", + "operationId": "AccountController.lists", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Response schema for lists", + + "items": { + "$ref": "#/components/schemas/List" + }, + "title": "ArrayOfLists", + "type": "array" + } + } + }, + "description": "Lists" + } + }, + "security": [ + { + "oAuth": [ + "read:lists" + ] + } + ], + "summary": "Lists containing this account", + "tags": [ + "Retrieve account information" + ] + } + }, + "/api/v1/timelines/public": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "TimelineController.public", + "parameters": [ + { + "description": "Show only local statuses?", + "in": "query", + "name": "local", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Show only statuses from the given domain", + "in": "query", + "name": "instance", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Show only statuses with media attached?", + "in": "query", + "name": "only_media", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Show only remote statuses?", + "in": "query", + "name": "remote", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false + } + }, + { + "description": "Include activities by muted users", + "in": "query", + "name": "with_muted", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Exclude the statuses with the given visibilities", + "in": "query", + "name": "exclude_visibilities", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/VisibilityScope" + }, + "type": "array" + } + }, + { + "description": "Filter replies. Possible values: without parameter (default) shows all replies, `following` - replies directed to you or users you follow, `self` - replies directed to you.", + "in": "query", + "name": "reply_visibility", + "required": false, + "schema": { + "enum": [ + "following", + "self" + ], + "type": "string" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Status" + }, + "title": "ArrayOfStatuses", + "type": "array" + } + } + }, + "description": "Array of Status" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "Public timeline", + "tags": [ + "Timelines" + ] + } + }, + "/api/v1/scheduled_statuses": { + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "ScheduledActivity.index", + "parameters": [ + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ScheduledStatus" + }, + "type": "array" + } + } + }, + "description": "Array of ScheduledStatus" + } + }, + "security": [ + { + "oAuth": [ + "read:statuses" + ] + } + ], + "summary": "View scheduled statuses", + "tags": [ + "Scheduled statuses" + ] + } + }, + "/api/v1/announcements/{id}/dismiss": { + "post": { + "callbacks": {}, + "deprecated": false, + "operationId": "MastodonAPI.AnnouncementController.mark_read", + "parameters": [ + { + "description": "announcement id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Response" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "write:accounts" + ] + } + ], + "summary": "Mark one announcement as read", + "tags": [ + "Announcement" + ] + } + }, + "/api/v1/blocks": { + "get": { + "callbacks": {}, + "deprecated": false, + "description": "View your blocks. See also accounts/:id/{block,unblock}", + "operationId": "AccountController.blocks", + "parameters": [ + { + "description": "Embed relationships into accounts. **If this parameter is not set account's `pleroma.relationship` is going to be `null`.**", + "in": "query", + "name": "with_relationships", + "required": false, + "schema": { + "$ref": "#/components/schemas/BooleanLike" + } + }, + { + "description": "Return items older than this ID", + "in": "query", + "name": "max_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the oldest items newer than this ID", + "in": "query", + "name": "min_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return the newest items newer than this ID", + "in": "query", + "name": "since_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return items past this number of items", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of items to return. Will be ignored if it's more than 40", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + + "items": { + "$ref": "#/components/schemas/Account" + }, + "title": "ArrayOfAccounts", + "type": "array" + } + } + }, + "description": "Accounts" + } + }, + "security": [ + { + "oAuth": [ + "read:blocks" + ] + } + ], + "summary": "Retrieve list of blocks", + "tags": [ + "Blocks and mutes" + ] + } + }, + "/api/v1/accounts/{id}/follow": { + "post": { + "callbacks": {}, + "deprecated": false, + "description": "Follow the given account", + "operationId": "AccountController.follow", + "parameters": [ + { + "$ref": "#/components/parameters/accountIdOrNickname" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "notify": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "Receive notifications for all statuses posted by the account? Defaults to false." + }, + "reblogs": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Receive this account's reblogs in home timeline? Defaults to true." + } + }, + "type": "object" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "properties": { + "notify": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "Receive notifications for all statuses posted by the account? Defaults to false." + }, + "reblogs": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Receive this account's reblogs in home timeline? Defaults to true." + } + }, + "type": "object" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "notify": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": false, + "description": "Receive notifications for all statuses posted by the account? Defaults to false." + }, + "reblogs": { + "allOf": [ + { + "$ref": "#/components/schemas/BooleanLike" + } + ], + "default": true, + "description": "Receive this account's reblogs in home timeline? Defaults to true." + } + }, + "type": "object" + } + } + }, + "description": "Parameters", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountRelationship" + } + } + }, + "description": "Relationship" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Error" + } + }, + "security": [ + { + "oAuth": [ + "follow", + "write:follows" + ] + } + ], + "summary": "Follow", + "tags": [ + "Account actions" + ] + } + }, + "/api/v1/pleroma/admin/instance_document/{name}": { + "delete": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.InstanceDocumentController.delete", + "parameters": [ + { + "description": "The document name", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": { + "url": "https://example.com/static/terms-of-service.html" + }, + "properties": { + "url": { + "type": "string" + } + }, + "title": "InstanceDocument", + "type": "object" + } + } + }, + "description": "InstanceDocument" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "oAuth": [ + "admin:write" + ] + } + ], + "summary": "Delete an instance document", + "tags": [ + "Instance documents" + ] + }, + "get": { + "callbacks": {}, + "deprecated": false, + "operationId": "AdminAPI.InstanceDocumentController.show", + "parameters": [ + { + "description": "The document name", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Allows authorization via admin token.", + "in": "query", + "name": "admin_token", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "text/html": { + "schema": { + "example": "
i have approximate knowledge of many things. perpetual student. (nb/ace/they)
xmpp/email: a@trwnh.com
https://trwnh.com
help me live: https://liberapay.com/at or https://paypal.me/trwnh
- my triggers are moths and glitter
- i have all notifs except mentions turned off, so please interact if you wanna be friends! i literally will not notice otherwise
- dm me if i did something wrong, so i can improve
- purest person on fedi, do not lewd in my presence
- #1 ami cole fan account
:fatyoshi:
' + # url: 'https://mastodon.social/@trwnh' + # avatar: 'https://files.mastodon.social/accounts/avatars/000/014/715/original/34aa222f4ae2e0a9.png' + # avatar_static: 'https://files.mastodon.social/accounts/avatars/000/014/715/original/34aa222f4ae2e0a9.png' + # header: 'https://files.mastodon.social/accounts/headers/000/014/715/original/5c6fc24edb3bb873.jpg' + # header_static: 'https://files.mastodon.social/accounts/headers/000/014/715/original/5c6fc24edb3bb873.jpg' + # followers_count: 821 + # following_count: 178 + # statuses_count: 33120 + # last_status_at: '2019-11-24T15:49:42.251Z' + # source: + # privacy: public + # sensitive: false + # language: '' + # note: "i have approximate knowledge of many things. perpetual student. (nb/ace/they)\r\n\r\nxmpp/email: a@trwnh.com\r\nhttps://trwnh.com\r\nhelp me live: https://liberapay.com/at or https://paypal.me/trwnh\r\n\r\n- my triggers are moths and glitter\r\n- i have all notifs except mentions turned off, so please interact if you wanna be friends! i literally will not notice otherwise\r\n- dm me if i did something wrong, so i can improve\r\n- purest person on fedi, do not lewd in my presence\r\n- #1 ami cole fan account\r\n\r\n:fatyoshi:" + # fields: + # - name: Website + # value: 'https://trwnh.com' + # verified_at: '2019-08-29T04:14:55.571+00:00' + # - name: Sponsor + # value: 'https://liberapay.com/at' + # verified_at: '2019-11-15T10:06:15.557+00:00' + # - name: 'Fan of:' + # value: 'Punk-rock and post-hardcore (Circa Survive, letlive., La Dispute, THE FEVER 333)Manga (Yu-Gi-Oh!, One Piece, JoJo''s Bizarre Adventure, Death Note, Shaman King)Platformers and RPGs (Banjo-Kazooie, Boktai, Final Fantasy Crystal Chronicles)' + # verified_at: null + # - name: 'Main topics:' + # value: 'systemic analysis, design patterns, anticapitalism, info/tech freedom, theory and philosophy, and otherwise being a genuine and decent wholesome poster. i''m just here to hang out and talk to cool people!' + # verified_at: null + # follow_requests_count: 0 + # emojis: + # - shortcode: fatyoshi + # url: 'https://files.mastodon.social/custom_emojis/images/000/023/920/original/e57ecb623faa0dc9.png' + # static_url: 'https://files.mastodon.social/custom_emojis/images/000/023/920/static/e57ecb623faa0dc9.png' + # visible_in_picker: true + # fields: + # - name: Website + # value: 'https://trwnh.com' + # verified_at: '2019-08-29T04:14:55.571+00:00' + # - name: Sponsor + # value: 'https://liberapay.com/at' + # verified_at: '2019-11-15T10:06:15.557+00:00' + # - name: 'Fan of:' + # value: 'Punk-rock and post-hardcore (Circa Survive, letlive., La Dispute, THE FEVER 333)Manga (Yu-Gi-Oh!, One Piece, JoJo's Bizarre Adventure, Death Note, Shaman King)Platformers and RPGs (Banjo-Kazooie, Boktai, Final Fantasy Crystal Chronicles)' + # verified_at: null + # - name: 'Main topics:' + # value: 'systemic analysis, design patterns, anticapitalism, info/tech freedom, theory and philosophy, and otherwise being a genuine and decent wholesome poster. i'm just here to hang out and talk to cool people!' + # verified_at: null + '401': + $ref: '#/components/responses/Invalid-Authentication-Token' + '403': + description: 'Your user account is currently disabled, missing a confirmed email address, or pending approval.' + content: + application/json: + schema: + type: object + properties: + error: + type: string + # examples: + # Account is disabled: + # value: + # error: Your login is currently disabled + # Account is unconfirmed: + # value: + # error: Your login is missing a confirmed e-mail address + # Account is unapproved: + # value: + # error: Your login is currently pending approval + operationId: get-api-v1-accounts-verify_credentials + security: + - user-token-auth: + - read + - 'read:accounts' + parameters: [] + description: Test to make sure that the user token works. + /api/v1/accounts/update_credentials: + patch: + summary: Update account credentials + tags: + - Accounts + responses: + '200': + description: Fields were saved successfully. + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/Account' + - type: object + properties: + source: + $ref: '#/components/schemas/Source' + required: + - source + '401': + $ref: '#/components/responses/Invalid-Authentication-Token' + operationId: patch-api-v1-accounts-update_credentials + description: |- + Update the user's display and preferences. + + You should use `/api/v1/apps/verify_credentials` to first obtain plaintext representations from within the `source` parameter, then allow the user to edit these plaintext representations before submitting them through this API. The server will generate the corresponding HTML. + security: + - user-token-auth: + - 'write:accounts' + - write + parameters: [] + # requestBody: + # content: + # application/x-www-form-urlencoded: + # schema: + # type: object + # properties: + # discoverable: + # type: boolean + # description: Whether the account should be shown in the user profile directory. + # bot: + # type: boolean + # description: Whether the account has a bot flag. + # display_name: + # type: string + # description: The display name to use for the profile. + # note: + # type: string + # description: The account bio. + # avatar: + # type: string + # description: Avatar image encoded using multipart / form data. + # header: + # type: string + # description: Header image encoded using multipart / form data. + # locked: + # type: boolean + # description: Whether manual approval of follow requests is required. + # source: + # type: object + # properties: + # privacy: + # type: string + # description: Default post privacy for authored statuses. + # sensitive: + # type: boolean + # description: Whether to mark authored statuses as sensitive by default. + # language: + # type: string + # description: Default language to use for authored statuses (ISO 6391). + # fields_attributes: + # type: array + # description: 'Profile metadata `name` and `value`. (By default, max 4 fields and 255 characters per property / value).' + # items: + # type: object + # properties: + # name: + # type: string + # description: Name of the field. + # value: + # type: string + # description: Value of the field. + # description: '' + '/api/v1/accounts/{id}': + # parameters: + # - schema: + # type: string + # name: id + # in: path + # required: true + # description: The id of the account in the database. + get: + summary: Get account profile + tags: + - Accounts + responses: + '200': + description: Account record will be returned. Note that `acct` of local users does not include the domain name. + content: + application/json: + schema: + $ref: '#/components/schemas/Account' + # examples: + # Local user: + # value: + # id: '1' + # username: Gargron + # acct: Gargron + # display_name: Eugen + # locked: false + # bot: false + # created_at: '2016-03-16T14:34:26.392Z' + # note: 'Developer of Mastodon and administrator of mastodon.social. I post service announcements, development updates, and personal stuff.
' + # url: 'https://mastodon.social/@Gargron' + # avatar: 'https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg' + # avatar_static: 'https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg' + # header: 'https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png' + # header_static: 'https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png' + # followers_count: 318699 + # following_count: 453 + # statuses_count: 61013 + # last_status_at: '2019-11-30T20:02:08.277Z' + # emojis: [] + # fields: + # - name: Patreon + # value: 'https://www.patreon.com/mastodon' + # verified_at: null + # - name: Homepage + # value: 'https://zeonfederated.com' + # verified_at: '2019-07-15T18:29:57.191+00:00' + # Remote user: + # value: + # id: '23634' + # username: noiob + # acct: noiob@awoo.space + # display_name: shork + # locked: false + # bot: false + # created_at: '2017-02-08T02:00:53.274Z' + # note: ':ms_rainbow_flag: :ms_bisexual_flag: :ms_nonbinary_flag: #awoo.space #admin ~ #bi ~ #nonbinary ~ compsci student ~ likes video #games and weird/ old electronics and will post obsessively about both ~ avatar by @dzuk
' + # url: 'https://awoo.space/@noiob' + # avatar: 'https://files.mastodon.social/accounts/avatars/000/023/634/original/6ca8804dc46800ad.png' + # avatar_static: 'https://files.mastodon.social/accounts/avatars/000/023/634/original/6ca8804dc46800ad.png' + # header: 'https://files.mastodon.social/accounts/headers/000/023/634/original/256eb8d7ac40f49a.png' + # header_static: 'https://files.mastodon.social/accounts/headers/000/023/634/original/256eb8d7ac40f49a.png' + # followers_count: 553 + # following_count: 405 + # statuses_count: 28982 + # last_status_at: '2019-12-01T00:39:57.264Z' + # emojis: + # - shortcode: ms_rainbow_flag + # url: 'https://files.mastodon.social/custom_emojis/images/000/028/691/original/6de008d6281f4f59.png' + # static_url: 'https://files.mastodon.social/custom_emojis/images/000/028/691/static/6de008d6281f4f59.png' + # visible_in_picker: true + # - shortcode: ms_bisexual_flag + # url: 'https://files.mastodon.social/custom_emojis/images/000/050/744/original/02f94a5fca7eaf78.png' + # static_url: 'https://files.mastodon.social/custom_emojis/images/000/050/744/static/02f94a5fca7eaf78.png' + # visible_in_picker: true + # - shortcode: ms_nonbinary_flag + # url: 'https://files.mastodon.social/custom_emojis/images/000/105/099/original/8106088bd4782072.png' + # static_url: 'https://files.mastodon.social/custom_emojis/images/000/105/099/static/8106088bd4782072.png' + # visible_in_picker: true + # fields: + # - name: Pronouns + # value: they/them + # verified_at: null + # - name: Alt + # value: '@noiob' + # verified_at: null + # - name: Bots + # value: '@darksouls, @nierautomata, code for @awoobot' + # verified_at: null + # - name: Website + # value: 'http://shork.xyz' + # verified_at: '2019-11-23T20:25:47.907+00:00' + # Suspended user: + # value: + # id: '14' + # username: stigatle + # acct: stigatle@quitter.no + # display_name: '' + # locked: false + # bot: false + # discoverable: false + # group: false + # created_at: '2016-03-18T10:04:51.700Z' + # note: '' + # url: 'https://quitter.no/stigatle' + # avatar: 'https://mastodon.social/avatars/original/missing.png' + # avatar_static: 'https://mastodon.social/avatars/original/missing.png' + # header: 'https://mastodon.social/headers/original/missing.png' + # header_static: 'https://mastodon.social/headers/original/missing.png' + # followers_count: 0 + # following_count: 0 + # statuses_count: 0 + # last_status_at: null + # suspended: true + # emojis: [] + # fields: [] + '401': + $ref: '#/components/responses/Invalid-Authentication-Token' + '404': + description: Account does not exist + content: + application/json: + schema: + type: object + properties: + error: + type: string + # examples: + # Example 1: + # value: + # error: Record not found + '410': + description: Account is suspended + operationId: get-api-v1-accounts-id + description: View information about a profile. + '/api/v1/accounts/{id}/statuses': + # parameters: + # - schema: + # type: string + # name: id + # in: path + # required: true + # description: The id of the account in the database. + get: + summary: Statuses for user + tags: + - Statuses + - Accounts + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Status' + '401': + description: 'Instance is in whitelist mode or running a version of Mastodon older than 2.7.0, and the Authorization header is invalid or missing.' + content: + application/json: + schema: + type: object + properties: + error: + type: string + required: + - error + # examples: + # whitelist: + # value: + # error: This API requires an authenticated user. + # pre-2.7.0: + # value: + # error: The access token is invalid + '404': + description: Account is deleted or does not exist. + content: + application/json: + schema: + type: object + properties: + error: + type: string + required: + - error + # examples: + # Example 1: + # value: + # error: Record not found + '410': + description: Account is suspended. + operationId: get-api-v1-accounts-id-statuses + description: |- + Statuses posted to the given account. + + Public for public statuses only, or user_token + read:statuses (for private statuses the user is authorized to see). + security: + - user-token-auth: + - 'read:statuses' + parameters: [] + '/api/v1/accounts/{id}/followers': + # parameters: + # - schema: + # type: string + # name: id + # in: path + # required: true + # description: The id of the account in the database. + get: + summary: Get account's followers. + tags: + - Accounts + responses: + '200': + description: Success + headers: + Link: + schema: + type: string + description: 'Because the ID of follow relationships is not generally used or provided with any API calls, an HTTP `Link` header is used instead to indicate next and previous pages. You will have to parse this header yourself to extract the paging URLs. Format:SF reader, editor, and writer.
' + # url: 'https://mastodon.social/@gautambhatia' + # avatar: 'https://files.mastodon.social/accounts/avatars/000/963/410/original/d8e0fd5cefcf9687.jpg' + # avatar_static: 'https://files.mastodon.social/accounts/avatars/000/963/410/original/d8e0fd5cefcf9687.jpg' + # header: 'https://mastodon.social/headers/original/missing.png' + # header_static: 'https://mastodon.social/headers/original/missing.png' + # followers_count: 1900 + # following_count: 52 + # statuses_count: 183 + # last_status_at: '2019-12-02T17:52:39.463Z' + # emojis: [] + # fields: [] + # - id: '1007400' + # username: seafrog + # acct: seafrog@glitterkitten.co.uk + # display_name: "\U0001F413\U0001F983 Heck Partridge \U0001F920 \U0001F986" + # locked: false + # bot: false + # created_at: '2019-11-19T18:46:49.977Z' + # note: 'hi im elise!! this is scribblefrog''s new account
she/her, 27
' + # url: 'https://glitterkitten.co.uk/@seafrog' + # avatar: 'https://files.mastodon.social/accounts/avatars/001/007/400/original/306cd22c1b118693.png' + # avatar_static: 'https://files.mastodon.social/accounts/avatars/001/007/400/original/306cd22c1b118693.png' + # header: 'https://files.mastodon.social/accounts/headers/001/007/400/original/fd9728559f7265f5.jpeg' + # header_static: 'https://files.mastodon.social/accounts/headers/001/007/400/original/fd9728559f7265f5.jpeg' + # followers_count: 168 + # following_count: 223 + # statuses_count: 944 + # last_status_at: '2019-12-04T00:44:08.603Z' + # emojis: [] + # fields: + # - name: gotdamb + # value: frog + # verified_at: null + # - name: whomst lov + # value: the oceane + # verified_at: null + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + properties: + error: + type: string + required: + - error + # examples: + # header: + # value: + # error: The access token is invalid + # whitelist: + # value: + # error: This API requires an authenticated user + '404': + description: Account is deleted or does not exist. + content: + application/json: + schema: + type: object + properties: + error: + type: string + required: + - error + # examples: + # Example 1: + # value: + # error: Record not found + '410': + description: Account is suspended. + operationId: get-api-v1-accounts-id-following + description: 'Accounts which the given account is following, if network is not hidden by the account owner.' + security: + - client-auth: + - 'read:accounts' + # requestBody: + # content: + # application/x-www-form-urlencoded: + # schema: + # type: object + # properties: + # max_id: + # type: string + # description: '**Internal parameter**. Use HTTP `Link` header for pagination.' + # since_id: + # type: string + # description: '**Internal parameter**. Use HTTP `Link` header for pagination.' + # limit: + # type: integer + # default: 40 + # description: Maximum number of results to return. + '/api/v1/accounts/{id}/featured_tags': + # parameters: + # - schema: + # type: string + # name: id + # in: path + # required: true + get: + summary: Featured tags + tags: + - Tags + - Accounts + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Featured-Tag' + '401': + $ref: '#/components/responses/Invalid-Authentication-Token' + operationId: get-api-v1-accounts-id-featured_tags + description: Tags featured by this account. + security: + - user-token-auth: + - 'read:accounts' + parameters: [] + '/api/v1/accounts/{id}/lists': + # parameters: + # - schema: + # type: string + # name: id + # in: path + # required: true + get: + summary: Lists containing this account + tags: + - Lists + - Accounts + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + description: 'If the account is part of any lists, those entities will be returned. If the account is not part of any of your lists, then an empty array will be returned.' + items: + $ref: '#/components/schemas/List' + # examples: + # Part of lists: + # value: + # - id: '13694' + # title: dev + # Not in any lists.: + # value: [] + '401': + $ref: '#/components/responses/Invalid-Authentication-Token' + '404': + description: Account with given id does not exist or is deleted. + content: + application/json: + schema: + type: object + properties: + error: + type: string + required: + - error + # examples: + # Example 1: + # value: + # error: Record not found + '410': + description: Account with given id is suspended. + operationId: get-api-v1-accounts-id-lists + description: User lists that you have added this account to. + security: + - user-token-auth: + - 'read:lists' + parameters: [] + '/api/v1/accounts/{id}/identity_proofs': + # parameters: + # - schema: + # type: string + # name: id + # in: path + # required: true + # description: The id of the account in the database. + get: + summary: Identity proofs for account + tags: + - Identity Proofs + - Accounts + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Identity-Proof' + # examples: + # Example 1: + # value: + # - provider: Keybase + # provider_username: gargron + # updated_at: '2019-07-21T20:14:39.596Z' + # proof_url: 'https://keybase.io/gargron/sigchain#5cfc20c7018f2beefb42a68836da59a792e55daa4d118498c9b1898de7e845690f' + # profile_url: 'https://keybase.io/gargron' + '404': + description: Account with given id is deleted or does not exist + content: + application/json: + schema: + type: object + properties: + error: + type: string + # examples: + # Example 1: + # value: + # error: Record not found + '410': + description: Account with given id is suspended. + '422': + description: '' + content: + application/json: + schema: + type: object + # x-examples: + # Example 1: + # error: This method requires an authenticated user + properties: + error: + type: string + required: + - error + # examples: + # Example 1: + # value: + # error: This method requires an authenticated user + operationId: get-api-v1-accounts-id-identity_proofs + security: + - user-token-auth: [] + description: Get the identity proofs for an account. + '/api/v1/accounts/{id}/follow': + # parameters: + # - schema: + # type: string + # name: id + # in: path + # required: true + # description: The id of the account in the database. + post: + summary: Follow account + tags: + - Accounts + responses: + '200': + description: 'Successfully followed, or account was already followed.' + content: + application/json: + schema: + $ref: '#/components/schemas/Relationship' + '403': + description: Trying to follow someone that you block or that blocks you. + content: + application/json: + schema: + type: object + properties: + error: + type: string + required: + - error + # examples: + # Example 1: + # value: + # error: This action is not allowed + operationId: post-api-v1-accounts-id-follow + security: + - user-token-auth: + - 'write:follows' + - follow + parameters: [] + # requestBody: + # content: + # application/x-www-form-urlencoded: + # schema: + # type: object + # properties: + # reblogs: + # type: boolean + # description: Receive this account's reblogs in home timeline? + # default: true + # notify: + # type: boolean + # default: false + # description: Receive notifications when this account posts a status? + description: Follows the given account. Can be used to update whether ot show reblogs or enable notifications. + '/api/v1/accounts/{id}/unfollow': + # parameters: + # - schema: + # type: string + # name: id + # in: path + # required: true + # description: The id of the account in the database. + post: + summary: Unfollow + tags: + - Accounts + responses: + '200': + description: 'Successfully unfollowed, or account was already not followed.' + content: + application/json: + schema: + $ref: '#/components/schemas/Relationship' + # examples: + # Example 1: + # value: + # id: '3' + # following: false + # showing_reblogs: false + # notifying: false + # followed_by: false + # blocking: false + # blocked_by: false + # muting: false + # muting_notifications: false + # requested: false + # domain_blocking: false + # endorsed: false + '401': + description: Invalid or missing Authorization header. + content: + application/json: + schema: + type: object + properties: + error: + type: string + required: + - error + # examples: + # Example 1: + # value: + # error: The access token is invalid + operationId: post-api-v1-accounts-id-unfollow + description: Unfollow the given account. + security: + - user-token-auth: + - 'write:follows' + - follow + parameters: [] +components: + schemas: + Access-Token: + title: App-Token + # x-stoplight: + # id: ncqgsrz14ym19 + type: object + properties: + access_token: + type: string + description: An OAuth token to be used for authorization. + token_type: + type: string + description: The OAuth token type. Mastodon uses `Bearer` tokens. + enum: + - Bearer + scope: + type: string + description: 'The OAuth scopes granted by this token, space-separated.' + created_at: + type: number + description: When the token was generated (UNIX Timestamp). + required: + - access_token + - token_type + - scope + - created_at + Account: + title: Account + # x-stoplight: + # id: 9bgeu11t3p4j6 + type: object + properties: + id: + type: string + description: The account id `header`. Cast from an integer but not guaranteed to be a number. + example: '23634' + username: + type: string + description: 'The username of the account, **not including the domain**.' + acct: + type: string + description: 'The webfinger account URI. Equal to `username` for local users, or `username@domain` for remote users.' + url: + type: string + description: The location of the user's profile page (HTTPS URI). + format: uri + moved: + $ref: '#/components/schemas/Account' + fields: + $ref: '#/components/schemas/Field' + bot: + type: boolean + description: 'A presentational flag. Indicates that the account may perform automated actions, may not be monitored, or identifies as a robot.' + suspended: + type: boolean + description: An extra entity returned when an account is suspended. + mute_expires_at: + type: string + format: date-time + description: 'When a timed mute will expire, if applicable (ISO 8601 Datetime).' + created_at: + type: string + format: date-time + description: When the account was created (ISO 8601 Datetime). + last_status_at: + type: string + format: date-time + description: When the most recent status was posted (ISO 8601 Datetime). + statuses_count: + type: number + description: How many statuses are attached to this account. + minimum: 0 + followers_count: + type: number + description: The reported followers of this profile. + minimum: 0 + following_count: + type: number + description: The reported follows of this profile. + minimum: 0 + display_name: + type: string + description: The profile's display name. + note: + type: string + description: The profile's bio / description (HTML string). + avatar: + type: string + description: An image icon that is shown next to statuses and in the profile. + format: uri + avatar_static: + type: string + description: A static version of the avatar. Equal to `avatar` if its value is a static image; different if `avatar` is an animated GIF. + format: uri + header: + type: string + description: An image banner that is shown above the profile and in profile cards. + format: uri + header_static: + type: string + description: A static version of the header. Equal to `header` if its value is a static image; different if `header` is an animated GIF. + format: uri + locked: + type: boolean + description: Whether the account manually approves follow requests. + emojis: + type: array + description: 'Custom emoji entities to be used when rendering the profile. If none, an empty array will be returned.' + items: + $ref: '#/components/schemas/Emoji' + discoverable: + type: string + description: Whether the account has opted into discovery features such as the profile directory. + required: + - id + - username + - acct + - url + - created_at + - statuses_count + - followers_count + - following_count + - display_name + - note + - avatar + - avatar_static + - header + - header_static + - locked + - emojis + - discoverable + x-tags: + - Accounts + Activity: + title: Activity + # x-stoplight: + # id: laoulmz8wkrfh + type: object + description: Represents a weekly bucket of instance activity. + properties: + week: + type: string + description: Midnight at the first day of the week. UNIX timestamp. + statuses: + description: Statuses created since the week began. String cast from an integer. + type: string + logins: + type: string + description: User logins since the week began. String cast from an integer. + registrations: + type: string + description: User registrations since the week began. String cast from an integer. + required: + - week + - statuses + - logins + - registrations + Application: + title: Application + # x-stoplight: + # id: s0e4fxq0juzns + type: object + properties: + name: + type: string + description: The name of your application. + website: + type: string + nullable: true + description: The website associated with your application. + format: uri + vapid_key: + type: string + description: ' Used for Push Streaming API. Returned with POST /api/v1/apps. Equivalent to PushSubscription#server_key.' + required: + - name + description: Represents an application that interfaces with the REST API to access accounts or post statuses. + x-tags: + - Applications + Attachment: + title: Attachment + # x-stoplight: + # id: kyesjtrexbuw4 + type: object + properties: + id: + type: string + description: The ID of the attachment in the database. Cast from integer but not guaranteed to be a number. + url: + type: string + format: uri + description: The location of the original full-size attachment. + preview_url: + type: string + format: uri + description: The location of a scaled-down preview of the attachment. + remote_url: + type: string + format: uri + description: The location of the full-size original attachment on the remote website. Null if the attachment is local. + description: + type: string + description: 'Alternate text that describes what is in the media attachment, to be used for the visually impaired or when media attachments do not load.' + blurhash: + type: string + description: 'A hash computed by the BlurHash algorithm, for generating colorful preview thumbnails when media has not been downloaded yet.' + required: + - id + - url + - preview_url + Card: + title: Card + # x-stoplight: + # id: 3rnsdy0r7wiyc + description: Represents a rich preview card that is generated using OpenGraph tags from a URL. + properties: + url: + type: string + format: uri + description: Location of linked resource. + title: + type: string + description: Title of linked resource. + description: + type: string + description: Description of preview. + type: + type: string + enum: + - link + - photo + - video + - rich + description: |- + The type of preview card. + - `link` = Link OEmbed + - `photo` = Photo OEmbed + - `video` = Video OEmbed + - `rich` = iFrame OEmbed. Not currently accepted, so won't show up in practice. + author_name: + type: string + description: The author of the original resource. + author_url: + type: string + format: uri + description: A link to the author of the original resource. + provider_name: + type: string + description: The provider of the original resource. + provider_url: + type: string + format: uri + description: A link to the provider of the original resource. + html: + type: string + description: HTML to be used for generating the preview card. + width: + type: integer + description: 'Width of preview, in pixels.' + height: + type: integer + description: 'Height of preview, in pixels.' + image: + type: string + format: uri + description: Preview thumbnail. + embed_url: + type: string + format: uri + description: 'Used for photo embeds, instead of custom `html`.' + blurhash: + type: string + description: 'A hash compute by the BlurHash algorithm, for generating colorful preview thumbnails when media has not been downloaded yet.' + required: + - url + - title + - description + - type + # examples: + # - url: 'https://www.youtube.com/watch?v=OMv_EPMED8Y' + # title: ♪ Brand New Friend (Christmas Song!) + # description: '' + # type: video + # author_name: YOGSCAST Lewis & Simon + # author_url: 'https://www.youtube.com/user/BlueXephos' + # provider_name: YouTube + # provider_url: 'https://www.youtube.com/' + # html: '' + # width: 480 + # height: 270 + # image: 'https://files.mastodon.social/preview_cards/images/014/179/145/original/9cf4b7cf5567b569.jpeg' + # embed_url: '' + # blurhash: 'UvK0HNkV,:s9xBR%njog0fo2W=WBS5ozofV@' + # - url: 'https://www.flickr.com/photos/tomfenskephotography/49088768431/' + # title: Oregon + # description: '' + # type: photo + # author_name: Tom Fenske Photography + # author_url: 'https://www.flickr.com/photos/tomfenskephotography/' + # provider_name: Flickr + # provider_url: 'https://www.flickr.com/' + # html: '' + # width: 1024 + # height: 427 + # image: 'https://files.mastodon.social/preview_cards/images/014/287/139/original/651b1c6976817824.jpeg' + # embed_url: 'https://live.staticflickr.com/65535/49088768431_6a4322b3bb_b.jpg' + # blurhash: 'UnE{@jt6M_oIAhjYs+ayT2WBf9ayRkkDXAj[' + # - url: 'https://www.theguardian.com/money/2019/dec/07/i-lost-my-193000-inheritance-with-one-wrong-digit-on-my-sort-code' + # title: '‘I lost my £193,000 inheritance – with one wrong digit on my sort code’' + # description: 'When Peter Teich’s money went to another Barclays customer, the bank offered £25 as a token gesture' + # type: link + # author_name: '' + # author_url: '' + # provider_name: '' + # provider_url: '' + # html: '' + # width: 0 + # height: 0 + # image: null + # embed_url: '' + # blurhash: null + Client-Credentials: + title: Client-Credentials + # x-stoplight: + # id: nvyokwqza0vca + type: object + properties: + client_id: + type: string + description: 'Client ID key, to be used for obtaining OAuth tokens.' + client_secret: + type: string + description: 'Client secret key, to be used for obtaining OAuth tokens.' + required: + - client_id + - client_secret + description: Client credentials returned when creating an app. + # examples: + # - client_id: TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM + # client_secret: ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw + x-tags: + - Applications + Emoji: + title: Emoji + # x-stoplight: + # id: x8px3r5ceivxr + type: object + properties: + shortcode: + type: string + description: The name of the custom emoji. + url: + type: string + format: uri + description: A link to the custom emoji. + static_url: + type: string + format: uri + description: A link to a static copy of the custom emoji. + visible_in_picker: + type: boolean + description: Whether this Emoji should be visible in the picker or unlisted. + category: + type: string + description: Used for sorting custom emoji in the picker. + required: + - shortcode + - url + - static_url + - visible_in_picker + description: Represents a custom emoji. + # examples: + # - shortcode: blobaww + # url: 'https://files.mastodon.social/custom_emojis/images/000/011/739/original/blobaww.png' + # static_url: 'https://files.mastodon.social/custom_emojis/images/000/011/739/static/blobaww.png' + # visible_in_picker: true + # category: Blobs + x-tags: + - Emojis + Featured-Tag: + title: Featured-Tag + # x-stoplight: + # id: 28qu5cwm6edgw + type: object + description: Represents a hashtag that is featured on a profile. + properties: + id: + type: string + description: The internal ID of the featured tag in the database. Cast from integer but not guaranteed to be a number. + name: + type: string + description: The name of the hashtag being featured. + url: + type: string + description: A link to all statuses by a user that contain this hashtag. + format: uri + statuses_count: + type: integer + description: The number of authored statuses containing this hashtag. + last_status_at: + type: string + description: The timestamp of the last authored status containing this hashtag.ISO 8601 Datetime. + format: date-time + required: + - id + - name + - url + - statuses_count + - last_status_at + Field: + title: Field + # x-stoplight: + # id: z0seiqzqx3san + type: object + description: Represents a profile field as name-value pair with optional verification. + properties: + name: + type: string + description: The key of a given field's key-value pair. + value: + type: string + description: The value associated with the `name` key (HTML). + verified_at: + type: string + format: date-time + description: 'Timestamp of when the server verified a URL value for a rel="me" link (ISO 8601 Datetime). Only defined if `value` is a verified URL. Otherwise, null.' + required: + - name + - value + # examples: + # - name: Website + # value: 'https://trwnh.com' + # verified_at: '2019-08-29T04:14:55.571+00:00' + # - name: Sponsor + # value: 'https://liberapay.com/at' + # verified_at: '2019-11-15T10:06:15.557+00:00' + # - name: 'Fan of:' + # value: 'Punk-rock and post-hardcore (Circa Survive, letlive., La Dispute, THE FEVER 333)Manga (Yu-Gi-Oh!, One Piece, JoJo''s Bizarre Adventure, Death Note, Shaman King)Platformers and RPGs (Banjo-Kazooie, Boktai, Final Fantasy Crystal Chronicles)' + # verified_at: null + # - name: 'Main topics:' + # value: 'systemic analysis, design patterns, anticapitalism, info/tech freedom, theory and philosophy, and otherwise being a genuine and decent wholesome poster. i''m just here to hang out and talk to cool people!' + # verified_at: null + x-tags: + - Accounts + History: + title: History + # x-stoplight: + # id: gnd8vp9n6jpa3 + x-tags: + - Tags + type: object + description: Represents daily usage history of a hashtag. + properties: + day: + type: string + description: UNIX timestamp on midnight of the given day. + uses: + type: string + description: The counted usage of the tag within that day. Cast from integer. + accounts: + type: string + description: The total of accounts using the tag within that day. Cast from integer. + required: + - day + - uses + - accounts + # examples: + # - day: string + # uses: string + # accounts: string + Identity-Proof: + title: Identity-Proof + # x-stoplight: + # id: nbj1lnwz95tt3 + type: object + properties: + provider: + type: string + description: The name of the identity provider. + provider_username: + type: string + description: The account owner's username on the identity provider's service. + profile_url: + type: string + format: uri + description: The account owner's profile URL on the identity provider. + proof_url: + type: string + format: uri + description: 'A link to a statement of identity proof, hosted by the identity provider.' + updated_at: + type: string + description: When the identity proof was last updated. ISO 8601 DateTime. + format: date-time + required: + - provider + - provider_username + - profile_url + - proof_url + - updated_at + description: Represents a proof from an external identity provider. + List: + title: List + # x-stoplight: + # id: iz3xezwcfiyi5 + type: object + description: Represents a list of some users that the authenticated user follows. + properties: + id: + type: string + description: 'The internal database ID of the list. Cast from an integer, but not guaranteed to be a number.' + title: + type: string + description: The user-defined title of the list. + replies_policy: + type: string + enum: + - followed + - list + - none + description: |- + The user-defined title of the list. + + - `followed` = Show replies to any followed user. + - `list` = Show replies to members of the list. + - `none` = Show replies to no one. + required: + - id + - title + Mention: + title: Mention + # x-stoplight: + # id: ephprj9etl86y + type: object + properties: + id: + type: string + description: 'The account id of the mentioned user. Cast from an integer, but not guaranteed to be a number.' + username: + type: string + description: The username of the mentioned user. + acct: + type: string + description: 'The webfinger acct: URI of the mentioned user. Equivalent to `username` for local users, or `username@domain` for remote users.' + url: + type: string + description: The location of the mentioned user's profile. + format: uri + required: + - id + - username + - acct + - url + description: Represents a mention of a user within the content of a status. + # examples: + # - id: '952529' + # username: alayna + # url: 'https://desvox.es/users/alayna' + # acct: alayna@desvox.es + # - id: '14715' + # username: trwnh + # url: 'https://mastodon.social/@trwnh' + # acct: trwnh + Poll: + title: Poll + # x-stoplight: + # id: eck898dvd4y4a + description: Represents a poll attached to a status. + type: object + properties: + id: + type: string + description: The ID of the poll in the database. Cast from an integer but not guaranteed to be a number. + expires_at: + type: string + description: When the poll ends. ISO8601 DateTime or null if the poll does not end. + expired: + type: boolean + description: Is the poll currently expired? + multiple: + type: boolean + description: Does the poll allow multiple-choice answers? + votes_count: + type: integer + description: How many votes have been recieved. + voters_count: + type: integer + description: How many unique accounts have voted on a multiple choice poll. Null if `multiple` is false. + voted: + type: boolean + description: 'When called with a user token, has the authorized user voted?' + own_votes: + type: array + description: 'When called with a user token, which options has the authorized user chosen? Contains an array of index values for `options`.' + items: + type: integer + options: + type: array + description: Possible answers for the poll. + items: + type: object + properties: + title: + type: string + description: The text value of the poll option. + votes_count: + type: integer + description: 'The number of votes received for this option. Number, or null if results are not published yet.' + minimum: 0 + required: + - title + emojis: + type: array + description: Custom emoji to be used for rendering poll options. + items: + $ref: '#/components/schemas/Emoji' + required: + - id + - expired + - multiple + - votes_count + - options + - emojis + Relationship: + title: Relationship + # x-stoplight: + # id: m55gcfa8jpe5r + description: 'Represents the relationship between accounts, such as following / blocking / muting / etc.' + properties: + id: + type: string + description: 'The account id. Cast from an integer, but not guaranteed to be a number.' + following: + type: boolean + description: Are you following this user? + requested: + type: boolean + description: Do you have a pending follow request for this user? + followed_by: + type: boolean + description: Are you followed by this user? + muting: + type: boolean + description: Are you muting this user? + muting_notifications: + type: boolean + description: Are you muting notifications from this user? + showing_reblogs: + type: boolean + description: Are you receiving this user's boosts in your home timeline? + notifying: + type: boolean + description: Have you enabled notifications for this user? + blocking: + type: boolean + description: Are you blocking this user? + domain_blocking: + type: boolean + description: Are you blocking this user's domain? + blocked_by: + type: boolean + description: Is this user blocking you? + note: + type: string + description: This user's profile bio + required: + - id + - following + - requested + - followed_by + - muting + - muting_notifications + - showing_reblogs + - notifying + - blocking + - domain_blocking + - blocked_by + Source: + title: Source + # x-stoplight: + # id: jmpm6jpiz2lfq + type: object + description: 'Represents display or publishing preferences of user''s own account. Returned as an additional entity when verifying and updated credentials, as an attribute of `Account`.' + properties: + note: + type: string + description: Profile bio. + fields: + type: array + description: Metadata about the account. + items: + $ref: '#/components/schemas/Field' + privacy: + type: string + description: 'The default post privacy to be used for new statuses. `public` = Public post, `unlisted` = unlisted post, `private` = followers-only post, and `direct` = direct post.' + enum: + - public + - unlisted + - private + - direct + sensitive: + type: boolean + description: Whether new statuses should be marked sensitive by default. + language: + type: string + description: The default posting langauge for new statuses (ISO 639-1 language two-letter code). + follower_requests_count: + type: number + description: The number of pending follow requests. + required: + - note + - fields + x-tags: + - Accounts + Status: + title: Status + # x-stoplight: + # id: 7bz8wiw45jg0v + type: object + properties: + id: + type: string + description: ID of the status in the database. Cast from integer but not guaranteed to be a number. + uri: + type: string + format: uri + description: URI of the status used for federation. + created_at: + type: string + description: The date when this status was created (ISO 8601 DateTime). + format: date-time + account: + $ref: '#/components/schemas/Account' + content: + type: string + description: HTML-encoded status content. + visibility: + type: string + description: |- + Visibility of this status. + - `public` = Visible to everyone, shown in public timelines. + - `unlisted` = Visible to public, but not included in public timelines. + - `private` = Visible to followers only, and to any mentioned users. + - `direct` = Visible only to mentioned users. + enum: + - public + - unlisted + - private + - direct + sensitive: + type: boolean + description: Is the status marked as sensitive content? + spoiler_text: + type: string + description: 'Subject or summary line, below which status content is collapsed until expanded.' + media_attachements: + type: array + description: Media that is attached to this status. + items: + $ref: '#/components/schemas/Attachment' + application: + $ref: '#/components/schemas/Application' + url: + type: string + format: uri + description: A link to the status's HTML representation. + in_reply_to_id: + type: string + description: ID of the status being replied. Cast from an integer but not guaranteed to be a number. + in_reply_to_account_id: + type: string + description: ID of the account being replied to. Cast from integer but not guaranteed to be a number. + reblog: + $ref: '#/components/schemas/Status' + poll: + $ref: '#/components/schemas/Poll' + card: + $ref: '#/components/schemas/Card' + language: + type: string + description: Primary langauge of this status. ISO 639 Part 1 two-letter langauge code. + text: + type: string + description: 'Plain-text source of a status. Returned instead of `content` when status is deleted, so the user may redraft from the source text without the client having to reverse-engineer the original text from the HTML content.' + mentions: + type: array + description: Mentions of users within the status content. + items: + $ref: '#/components/schemas/Mention' + tags: + type: array + description: Hashtags used within the status content. + items: + $ref: '#/components/schemas/Tag' + emojis: + type: array + description: Custom emoji to be used while rendering status content. + items: + $ref: '#/components/schemas/Emoji' + reblogs_count: + type: integer + minimum: 0 + description: How many boosts this status has received. + favourites_count: + type: integer + minimum: 0 + description: How many favourites this status has received. + replies_count: + type: integer + minimum: 0 + description: How many replies this status has received. + favourited: + type: boolean + description: Have you favourited this status? + reblogged: + type: boolean + description: Have you boosted this status? + muted: + type: string + description: Have you muted notifications for this status's conversation? + bookmarked: + type: string + description: Have you bookmarked this status? + pinned: + type: string + description: Have you pinned this status? Only appears if the status is pinnable. + required: + - id + - uri + - created_at + - account + - content + - visibility + - sensitive + - spoiler_text + - media_attachements + - application + - mentions + - tags + - emojis + - reblogs_count + - favourites_count + - replies_count + Tag: + title: Tag + # x-stoplight: + # id: vrpd11pw1tt8t + type: object + # examples: + # - name: nowplaying + # url: 'https://mastodon.social/tags/nowplaying' + # history: + # - day: '1574553600' + # uses: '200' + # accounts: '31' + # - day: '1574467200' + # uses: '272' + # accounts: '39' + # - day: '1574380800' + # uses: '345' + # accounts: '40' + # - day: '1574294400' + # uses: '366' + # accounts: '46' + # - day: '1574208000' + # uses: '226' + # accounts: '32' + # - day: '1574121600' + # uses: '217' + # accounts: '42' + # - day: '1574035200' + # uses: '214' + # accounts: '34' + description: Represents a hashtag used within the content of a status. + x-tags: + - Tags + properties: + name: + type: string + description: 'The value of the hashtag after the # sign.' + url: + type: string + format: uri + description: A link to the hashtag on the instance. + history: + type: array + description: Usage statistics for given days. + items: + $ref: '#/components/schemas/History' + required: + - name + - url + Admin-Account: + title: 'Admin::Account' + # x-stoplight: + # id: xyakm7mxo0kti + type: object + description: Admin-level information about a given account. + properties: + id: + type: string + description: 'The ID of the account in the database. Cast from an integer, but not guaranteed to be a number.' + username: + type: string + description: The username of the account. + domain: + type: string + description: The domain of the account. + created_at: + type: string + format: date-time + description: When the account was first discovered + email: + type: string + description: The email address associated with the account. + format: email + ip: + type: string + description: The IP address last used to login to this account. + locale: + type: string + description: The locale of the account. ISO 639 Part 1 two-letter language code. + invite_request: + type: string + description: Invite request text ??? + role: + type: string + description: The current role of the account. + confirmed: + type: boolean + description: Whether the account has confirmed their email address. + approved: + type: boolean + description: Whether the account is currently approved. + disabled: + type: boolean + description: Whether the account is currently disabled. + silenced: + type: boolean + description: Whether the account is currently silenced. + suspended: + type: boolean + description: Whether the account is currently suspended. + account: + $ref: '#/components/schemas/Account' + created_by_application_id: + type: string + description: 'The ID of the application that created this account. Cast from an integer, but not guaranteed to be a number.' + invited_by_account_id: + type: string + description: 'The ID of the account that invited this user. Cast from an integer, but not guaranteed to be a number.' + required: + - id + - username + - domain + - created_at + - email + - ip + - locale + - invite_request + - role + - confirmed + - approved + - disabled + - silenced + - suspended + - account + Admin-Report: + title: 'Admin::Report' + # x-stoplight: + # id: s42ye786vcvq0 + type: object + description: Admin-level information about a filed report. + properties: + id: + type: string + description: The ID of the report in the database. + action_taken: + type: string + description: The action taken to resolve this report. + comment: + type: string + description: An optional reason for reporting. + created_at: + type: string + format: date-time + description: The time the report was filed. + updated_at: + type: string + description: The time of last action on this report. + format: date-time + account: + $ref: '#/components/schemas/Account' + target_account: + $ref: '#/components/schemas/Account' + assigned_account: + $ref: '#/components/schemas/Account' + action_taken_by_account: + type: string + description: The action taken by the moderator who handled the report. + statuses: + type: + - string + - array + description: 'Statuses attached to the report, for context.' + items: + $ref: '#/components/schemas/Status' + required: + - id + - created_at + - updated_at + - account + - target_account + - assigned_account + - action_taken_by_account + - statuses + Announcement: + title: Announcement + # x-stoplight: + # id: tq7a9r3zs770w + type: object + description: Represents an announcement set by an administrator. + properties: + id: + type: string + description: The announcement id. + text: + type: string + description: The content of the announcement. + published: + type: boolean + description: Whether the announcement is currently active. + all_day: + type: boolean + description: Whether the announcement has a start/end time. + created_at: + type: string + description: When the announcement was created. + format: date-time + updated_at: + type: string + description: When the announcement was updated. + format: date-time + read: + description: Whether the announcement has been read by the user. + type: boolean + reactions: + type: array + description: Emoji reactions attached to the announcement. + items: + $ref: '#/components/schemas/Announcement-Reaction' + scheduled_at: + type: string + format: date-time + description: When the future annouoncement was scheduled. + starts_at: + type: string + format: date-time + description: When the future announcement will start. + ends_at: + type: string + format: date-time + description: When the future announcement will end. + required: + - id + - text + - published + - all_day + - created_at + - updated_at + - read + - reactions + # examples: + # - id: '8' + # content: 'Looks like there was an issue processing audio attachments without embedded art since yesterday due to an experimental new feature. That issue has now been fixed, so you may see older posts with audio from other servers pop up in your feeds now as they are being finally properly processed. Sorry!
' + # starts_at: null + # ends_at: null + # all_day: false + # published_at: '2020-07-03T01:27:38.726Z' + # updated_at: '2020-07-03T01:27:38.752Z' + # read: true + # mentions: [] + # statuses: [] + # tags: [] + # emojis: [] + # reactions: + # - name: bongoCat + # count: 9 + # me: false + # url: 'https://files.mastodon.social/custom_emojis/images/000/067/715/original/fdba57dff7576d53.png' + # static_url: 'https://files.mastodon.social/custom_emojis/images/000/067/715/static/fdba57dff7576d53.png' + # - name: thonking + # count: 1 + # me: false + # url: 'https://files.mastodon.social/custom_emojis/images/000/098/690/original/a8d36edc4a7032e8.png' + # static_url: 'https://files.mastodon.social/custom_emojis/images/000/098/690/static/a8d36edc4a7032e8.png' + # - name: AAAAAA + # count: 1 + # me: false + # url: 'https://files.mastodon.social/custom_emojis/images/000/071/387/original/AAAAAA.png' + # static_url: 'https://files.mastodon.social/custom_emojis/images/000/071/387/static/AAAAAA.png' + # - name: "\U0001F914" + # count: 1 + # me: true + Announcement-Reaction: + title: Announcement-Reaction + # x-stoplight: + # id: 6kf3k3lzqaqdt + type: object + properties: + name: + type: string + description: 'The emoji used for the reaction. Either a unicode emoji, or a custom emoji''s shortcode.' + count: + type: integer + description: The total number of users who have added this reaction. + me: + type: boolean + description: Whether the authorized user has added this reaction to the announcement. + url: + type: string + description: A link to the custom emoji. + static_url: + type: string + description: A link to a non-animated version of the custom emoji. + required: + - name + - count + - me + Context: + title: Context + # x-stoplight: + # id: ok2jn797msj53 + type: object + description: Represents the tree around a given status. Used for reconstructing threads of statuses. + properties: + ancestors: + type: array + description: Parents in the thread. + items: + $ref: '#/components/schemas/Status' + descendants: + type: array + description: Children in the thread. + items: + $ref: '#/components/schemas/Status' + required: + - ancestors + - descendants + Conversation: + title: Conversation + # x-stoplight: + # id: k5x3so2ok8b48 + type: object + description: Represents a conversation with "direct message" visibility. + properties: + id: + type: string + description: Local database ID of the conversation. + accounts: + type: array + description: Participants in the conversation. + items: + $ref: '#/components/schemas/Account' + unread: + type: boolean + description: Is the conversation currently marked as unread? + last_status: + $ref: '#/components/schemas/Status' + required: + - id + - accounts + - unread + Filter: + title: Filter + # x-stoplight: + # id: gkc9qhjrql1nl + type: object + description: |- + Represents a user-defined filter for determining which statuses should not be shown to the user. + + ## Implementation notes + If `whole_word` is true, cient app should: + + - Define 'word constituent character' for your app. In the official implementation, it's `[A-Za-z0-9_]` in JavaScript, and `[[:word]]` in Ruby. Ruby uses 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. + properties: + id: + type: string + description: The ID of the filter in the database. + phrase: + type: string + description: The text to be filtered. + context: + type: array + description: |- + The contexts in which the filter should be applied. + + - `home` = home timeline and lists. + - `notifications` = notifications timeline + - `public` = public timelines + - `thread` = expanded thread of a detailed status. + items: + type: string + enum: + - home + - notifications + - public + - thread + expires_at: + type: string + description: When the filter should no longer be applied + format: date-time + irreversible: + type: boolean + description: Should matching entities in home and notifications be dropped by the server? + whole_word: + type: boolean + description: Should the filter consider word boundaries? + required: + - id + - phrase + - context + - expires_at + - irreversible + - whole_word + Instance: + type: object + # x-examples: + # example-1: + # uri: mastodon.social + # title: Mastodon + # short_description: "Server run by the main developers of the project It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!" + # description: "Server run by the main developers of the project It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!" + # email: staff@mastodon.social + # version: 3.0.1 + # urls: + # streaming_api: 'wss://mastodon.social' + # stats: + # user_count: 415526 + # status_count: 17085754 + # domain_count: 11834 + # thumbnail: 'https://files.mastodon.social/site_uploads/files/000/000/001/original/vlcsnap-2018-08-27-16h43m11s127.png' + # languages: + # - en + # registrations: true + # approval_required: false + # contact_account: + # id: '1' + # username: Gargron + # acct: Gargron + # display_name: Eugen + # locked: false + # bot: false + # created_at: '2016-03-16T14:34:26.392Z' + # note: 'Developer of Mastodon and administrator of mastodon.social. I post service announcements, development updates, and personal stuff.
' + # url: 'https://mastodon.social/@Gargron' + # avatar: 'https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg' + # avatar_static: 'https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg' + # header: 'https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png' + # header_static: 'https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png' + # followers_count: 317112 + # following_count: 453 + # statuses_count: 60903 + # last_status_at: '2019-11-26T21:14:44.522Z' + # emojis: [] + # fields: + # - name: Patreon + # value: 'https://www.patreon.com/mastodonhttps://zeonfederated.com It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!" + # description: "Server run by the main developers of the project It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!" + # email: staff@mastodon.social + # version: 3.0.1 + # urls: + # streaming_api: 'wss://mastodon.social' + # stats: + # user_count: 415526 + # status_count: 17085754 + # domain_count: 11834 + # thumbnail: 'https://files.mastodon.social/site_uploads/files/000/000/001/original/vlcsnap-2018-08-27-16h43m11s127.png' + # languages: + # - en + # registrations: true + # approval_required: false + # contact_account: + # id: '1' + # username: Gargron + # acct: Gargron + # display_name: Eugen + # locked: false + # bot: false + # created_at: '2016-03-16T14:34:26.392Z' + # note: 'Developer of Mastodon and administrator of mastodon.social. I post service announcements, development updates, and personal stuff.
' + # url: 'https://mastodon.social/@Gargron' + # avatar: 'https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg' + # avatar_static: 'https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg' + # header: 'https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png' + # header_static: 'https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png' + # followers_count: 317112 + # following_count: 453 + # statuses_count: 60903 + # last_status_at: '2019-11-26T21:14:44.522Z' + # emojis: [] + # fields: + # - name: Patreon + # value: 'https://www.patreon.com/mastodonhttps://zeonfederated.com