1
0
Fork 0
atproto/openapi.json

15458 lines
424 KiB
JSON

{
"openapi": "3.1.0",
"info": {
"title": "AT Protocol XRPC API",
"summary": "An unofficial conversion of AT Protocol's lexicons to OpenAPI's schema format.",
"version": "0.0.0",
"license": {
"name": "MIT License",
"identifier": "MIT"
}
},
"servers": [
{
"url": "https://bsky.social/xrpc/",
"description": "AT Protocol PDS XRPC server"
},
{
"url": "https://api.bsky.app/xrpc/",
"description": "AT Protocol AppView XRPC server"
},
{
"url": "https://syu.is/xrpc/",
"description": "self-host server pds"
},
{
"url": "https://api.syu.is/xrpc/",
"description": "self-host server bsky"
}
],
"paths": {
"/app.bsky.actor.getPreferences": {
"get": {
"tags": [
"app.bsky.actor"
],
"summary": "Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth.",
"operationId": "app.bsky.actor.getPreferences",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"preferences"
],
"properties": {
"preferences": {
"$ref": "#/components/schemas/app.bsky.actor.defs.preferences"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.actor.getProfile": {
"get": {
"tags": [
"app.bsky.actor"
],
"summary": "Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.",
"operationId": "app.bsky.actor.getProfile",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actor",
"in": "query",
"description": "Handle or DID of account to fetch profile of.",
"required": true,
"schema": {
"type": "string",
"description": "Handle or DID of account to fetch profile of.",
"format": "at-identifier"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileViewDetailed"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.actor.getProfiles": {
"get": {
"tags": [
"app.bsky.actor"
],
"summary": "Get detailed profile views of multiple actors.",
"operationId": "app.bsky.actor.getProfiles",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actors",
"in": "query",
"required": true,
"schema": {
"type": "array",
"items": {
"type": "string",
"format": "at-identifier"
},
"maxItems": 25
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"profiles"
],
"properties": {
"profiles": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileViewDetailed"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.actor.getSuggestions": {
"get": {
"tags": [
"app.bsky.actor"
],
"summary": "Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding.",
"operationId": "app.bsky.actor.getSuggestions",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"actors"
],
"properties": {
"cursor": {
"type": "string"
},
"actors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.actor.putPreferences": {
"post": {
"tags": [
"app.bsky.actor"
],
"summary": "Set the private preferences attached to the account.",
"operationId": "app.bsky.actor.putPreferences",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"preferences"
],
"properties": {
"preferences": {
"$ref": "#/components/schemas/app.bsky.actor.defs.preferences"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.actor.searchActors": {
"get": {
"tags": [
"app.bsky.actor"
],
"summary": "Find actors (profiles) matching search criteria. Does not require auth.",
"operationId": "app.bsky.actor.searchActors",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "term",
"in": "query",
"description": "DEPRECATED: use 'q' instead.",
"required": false,
"schema": {
"type": "string",
"description": "DEPRECATED: use 'q' instead."
}
},
{
"name": "q",
"in": "query",
"description": "Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.",
"required": false,
"schema": {
"type": "string",
"description": "Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended."
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"actors"
],
"properties": {
"cursor": {
"type": "string"
},
"actors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.actor.searchActorsTypeahead": {
"get": {
"tags": [
"app.bsky.actor"
],
"summary": "Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth.",
"operationId": "app.bsky.actor.searchActorsTypeahead",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "term",
"in": "query",
"description": "DEPRECATED: use 'q' instead.",
"required": false,
"schema": {
"type": "string",
"description": "DEPRECATED: use 'q' instead."
}
},
{
"name": "q",
"in": "query",
"description": "Search query prefix; not a full query string.",
"required": false,
"schema": {
"type": "string",
"description": "Search query prefix; not a full query string."
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 10
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"actors"
],
"properties": {
"actors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileViewBasic"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getActorFeeds": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get a list of feeds (feed generator records) created by the actor (in the actor's repo).",
"operationId": "app.bsky.feed.getActorFeeds",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actor",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "at-identifier"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feeds"
],
"properties": {
"cursor": {
"type": "string"
},
"feeds": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.generatorView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getActorLikes": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get a list of posts liked by an actor. Does not require auth.",
"operationId": "app.bsky.feed.getActorLikes",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actor",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "at-identifier"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feed"
],
"properties": {
"cursor": {
"type": "string"
},
"feed": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.feedViewPost"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "BlockedActor"
},
{
"const": "BlockedByActor"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getAuthorFeed": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth.",
"operationId": "app.bsky.feed.getAuthorFeed",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actor",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "at-identifier"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "filter",
"in": "query",
"description": "Combinations of post/repost types to include in response.",
"required": false,
"schema": {
"type": "string",
"description": "Combinations of post/repost types to include in response.",
"default": "posts_with_replies",
"enum": [
"posts_with_replies",
"posts_no_replies",
"posts_with_media",
"posts_and_author_threads"
]
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feed"
],
"properties": {
"cursor": {
"type": "string"
},
"feed": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.feedViewPost"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "BlockedActor"
},
{
"const": "BlockedByActor"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getFeed": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get a hydrated feed from an actor's selected feed generator. Implemented by App View.",
"operationId": "app.bsky.feed.getFeed",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "feed",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "at-uri"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feed"
],
"properties": {
"cursor": {
"type": "string"
},
"feed": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.feedViewPost"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "UnknownFeed"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getFeedGenerator": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get information about a feed generator. Implemented by AppView.",
"operationId": "app.bsky.feed.getFeedGenerator",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "feed",
"in": "query",
"description": "AT-URI of the feed generator record.",
"required": true,
"schema": {
"type": "string",
"description": "AT-URI of the feed generator record.",
"format": "at-uri"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"view",
"isOnline",
"isValid"
],
"properties": {
"view": {
"$ref": "#/components/schemas/app.bsky.feed.defs.generatorView"
},
"isOnline": {
"type": "boolean",
"description": "Indicates whether the feed generator service has been online recently, or else seems to be inactive."
},
"isValid": {
"type": "boolean",
"description": "Indicates whether the feed generator service is compatible with the record declaration."
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getFeedGenerators": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get information about a list of feed generators.",
"operationId": "app.bsky.feed.getFeedGenerators",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "feeds",
"in": "query",
"required": true,
"schema": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feeds"
],
"properties": {
"feeds": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.generatorView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getLikes": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get like records which reference a subject (by AT-URI and CID).",
"operationId": "app.bsky.feed.getLikes",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "uri",
"in": "query",
"description": "AT-URI of the subject (eg, a post record).",
"required": true,
"schema": {
"type": "string",
"description": "AT-URI of the subject (eg, a post record).",
"format": "at-uri"
}
},
{
"name": "cid",
"in": "query",
"description": "CID of the subject record (aka, specific version of record), to filter likes.",
"required": false,
"schema": {
"type": "string",
"description": "CID of the subject record (aka, specific version of record), to filter likes.",
"format": "cid"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"uri",
"likes"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"cursor": {
"type": "string"
},
"likes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.getLikes.like"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getListFeed": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth.",
"operationId": "app.bsky.feed.getListFeed",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "list",
"in": "query",
"description": "Reference (AT-URI) to the list record.",
"required": true,
"schema": {
"type": "string",
"description": "Reference (AT-URI) to the list record.",
"format": "at-uri"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feed"
],
"properties": {
"cursor": {
"type": "string"
},
"feed": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.feedViewPost"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "UnknownList"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getPostThread": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests.",
"operationId": "app.bsky.feed.getPostThread",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "uri",
"in": "query",
"description": "Reference (AT-URI) to post record.",
"required": true,
"schema": {
"type": "string",
"description": "Reference (AT-URI) to post record.",
"format": "at-uri"
}
},
{
"name": "depth",
"in": "query",
"description": "How many levels of reply depth should be included in response.",
"required": false,
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 1000,
"default": 6
}
},
{
"name": "parentHeight",
"in": "query",
"description": "How many levels of parent (and grandparent, etc) post to include.",
"required": false,
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 1000,
"default": 80
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"thread"
],
"properties": {
"thread": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.feed.defs.threadViewPost"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.notFoundPost"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.blockedPost"
}
]
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "NotFound"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getPosts": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'.",
"operationId": "app.bsky.feed.getPosts",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "uris",
"in": "query",
"description": "List of post AT-URIs to return hydrated views for.",
"required": true,
"schema": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
},
"maxItems": 25
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"posts"
],
"properties": {
"posts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.postView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getRepostedBy": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get a list of reposts for a given post.",
"operationId": "app.bsky.feed.getRepostedBy",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "uri",
"in": "query",
"description": "Reference (AT-URI) of post record",
"required": true,
"schema": {
"type": "string",
"description": "Reference (AT-URI) of post record",
"format": "at-uri"
}
},
{
"name": "cid",
"in": "query",
"description": "If supplied, filters to reposts of specific version (by CID) of the post record.",
"required": false,
"schema": {
"type": "string",
"description": "If supplied, filters to reposts of specific version (by CID) of the post record.",
"format": "cid"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"uri",
"repostedBy"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"cursor": {
"type": "string"
},
"repostedBy": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getSuggestedFeeds": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get a list of suggested feeds (feed generators) for the requesting account.",
"operationId": "app.bsky.feed.getSuggestedFeeds",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feeds"
],
"properties": {
"cursor": {
"type": "string"
},
"feeds": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.generatorView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.getTimeline": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed.",
"operationId": "app.bsky.feed.getTimeline",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "algorithm",
"in": "query",
"description": "Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism.",
"required": false,
"schema": {
"type": "string",
"description": "Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism."
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feed"
],
"properties": {
"cursor": {
"type": "string"
},
"feed": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.feedViewPost"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.feed.searchPosts": {
"get": {
"tags": [
"app.bsky.feed"
],
"summary": "Find posts matching search criteria, returning views of those posts.",
"operationId": "app.bsky.feed.searchPosts",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "q",
"in": "query",
"description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.",
"required": true,
"schema": {
"type": "string",
"description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended."
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
}
},
{
"name": "cursor",
"in": "query",
"description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set.",
"required": false,
"schema": {
"type": "string",
"description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set."
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"posts"
],
"properties": {
"cursor": {
"type": "string"
},
"hitsTotal": {
"type": "integer"
},
"posts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.postView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "BadQueryString"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getBlocks": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Enumerates which accounts the requesting account is currently blocking. Requires auth.",
"operationId": "app.bsky.graph.getBlocks",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"blocks"
],
"properties": {
"cursor": {
"type": "string"
},
"blocks": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getFollowers": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Enumerates accounts which follow a specified account (actor).",
"operationId": "app.bsky.graph.getFollowers",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actor",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "at-identifier"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"subject",
"followers"
],
"properties": {
"subject": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
},
"cursor": {
"type": "string"
},
"followers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getFollows": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Enumerates accounts which a specified account (actor) follows.",
"operationId": "app.bsky.graph.getFollows",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actor",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "at-identifier"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"subject",
"follows"
],
"properties": {
"subject": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
},
"cursor": {
"type": "string"
},
"follows": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getList": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Gets a 'view' (with additional context) of a specified list.",
"operationId": "app.bsky.graph.getList",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "list",
"in": "query",
"description": "Reference (AT-URI) of the list record to hydrate.",
"required": true,
"schema": {
"type": "string",
"description": "Reference (AT-URI) of the list record to hydrate.",
"format": "at-uri"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"list",
"items"
],
"properties": {
"cursor": {
"type": "string"
},
"list": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listView"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listItemView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getListBlocks": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Get mod lists that the requesting account (actor) is blocking. Requires auth.",
"operationId": "app.bsky.graph.getListBlocks",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"lists"
],
"properties": {
"cursor": {
"type": "string"
},
"lists": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getListMutes": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth.",
"operationId": "app.bsky.graph.getListMutes",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"lists"
],
"properties": {
"cursor": {
"type": "string"
},
"lists": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getLists": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Enumerates the lists created by a specified account (actor).",
"operationId": "app.bsky.graph.getLists",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actor",
"in": "query",
"description": "The account (actor) to enumerate lists from.",
"required": true,
"schema": {
"type": "string",
"description": "The account (actor) to enumerate lists from.",
"format": "at-identifier"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"lists"
],
"properties": {
"cursor": {
"type": "string"
},
"lists": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getMutes": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Enumerates accounts that the requesting account (actor) currently has muted. Requires auth.",
"operationId": "app.bsky.graph.getMutes",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"mutes"
],
"properties": {
"cursor": {
"type": "string"
},
"mutes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.getSuggestedFollowsByActor": {
"get": {
"tags": [
"app.bsky.graph"
],
"summary": "Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account.",
"operationId": "app.bsky.graph.getSuggestedFollowsByActor",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "actor",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "at-identifier"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"suggestions"
],
"properties": {
"suggestions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.muteActor": {
"post": {
"tags": [
"app.bsky.graph"
],
"summary": "Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth.",
"operationId": "app.bsky.graph.muteActor",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"actor"
],
"properties": {
"actor": {
"type": "string",
"format": "at-identifier"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.muteActorList": {
"post": {
"tags": [
"app.bsky.graph"
],
"summary": "Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth.",
"operationId": "app.bsky.graph.muteActorList",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"list"
],
"properties": {
"list": {
"type": "string",
"format": "at-uri"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.unmuteActor": {
"post": {
"tags": [
"app.bsky.graph"
],
"summary": "Unmutes the specified account. Requires auth.",
"operationId": "app.bsky.graph.unmuteActor",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"actor"
],
"properties": {
"actor": {
"type": "string",
"format": "at-identifier"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.graph.unmuteActorList": {
"post": {
"tags": [
"app.bsky.graph"
],
"summary": "Unmutes the specified list of accounts. Requires auth.",
"operationId": "app.bsky.graph.unmuteActorList",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"list"
],
"properties": {
"list": {
"type": "string",
"format": "at-uri"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.labeler.getServices": {
"get": {
"tags": [
"app.bsky.labeler"
],
"summary": "Get information about a list of labeler services.",
"operationId": "app.bsky.labeler.getServices",
"parameters": [
{
"name": "dids",
"in": "query",
"required": true,
"schema": {
"type": "array",
"items": {
"type": "string",
"format": "did"
}
}
},
{
"name": "detailed",
"in": "query",
"required": false,
"schema": {
"type": "boolean"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"views"
],
"properties": {
"views": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.labeler.defs.labelerView"
},
{
"$ref": "#/components/schemas/app.bsky.labeler.defs.labelerViewDetailed"
}
]
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.notification.getUnreadCount": {
"get": {
"tags": [
"app.bsky.notification"
],
"summary": "Count the number of unread notifications for the requesting account. Requires auth.",
"operationId": "app.bsky.notification.getUnreadCount",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "seenAt",
"in": "query",
"required": false,
"schema": {
"type": "string",
"format": "date-time"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"count"
],
"properties": {
"count": {
"type": "integer"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.notification.listNotifications": {
"get": {
"tags": [
"app.bsky.notification"
],
"summary": "Enumerate notifications for the requesting account. Requires auth.",
"operationId": "app.bsky.notification.listNotifications",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "seenAt",
"in": "query",
"required": false,
"schema": {
"type": "string",
"format": "date-time"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"notifications"
],
"properties": {
"cursor": {
"type": "string"
},
"notifications": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.notification.listNotifications.notification"
}
},
"seenAt": {
"type": "string",
"format": "date-time"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.notification.registerPush": {
"post": {
"tags": [
"app.bsky.notification"
],
"summary": "Register to receive push notifications, via a specified service, for the requesting account. Requires auth.",
"operationId": "app.bsky.notification.registerPush",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"serviceDid",
"token",
"platform",
"appId"
],
"properties": {
"serviceDid": {
"type": "string",
"format": "did"
},
"token": {
"type": "string"
},
"platform": {
"type": "string",
"enum": [
"ios",
"android",
"web"
]
},
"appId": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.notification.updateSeen": {
"post": {
"tags": [
"app.bsky.notification"
],
"summary": "Notify server that the requesting account has seen notifications. Requires auth.",
"operationId": "app.bsky.notification.updateSeen",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"seenAt"
],
"properties": {
"seenAt": {
"type": "string",
"format": "date-time"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.unspecced.applyLabels": {
"post": {
"tags": [
"app.bsky.unspecced"
],
"summary": "Allow a labeler to apply labels directly.",
"operationId": "app.bsky.unspecced.applyLabels",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"labels"
],
"properties": {
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.unspecced.getPopular": {
"get": {
"tags": [
"app.bsky.unspecced"
],
"summary": "DEPRECATED: will be removed soon. Use a feed generator alternative.",
"operationId": "app.bsky.unspecced.getPopular",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "includeNsfw",
"in": "query",
"required": false,
"schema": {
"type": "boolean"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feed"
],
"properties": {
"cursor": {
"type": "string"
},
"feed": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.feedViewPost"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.unspecced.getPopularFeedGenerators": {
"get": {
"tags": [
"app.bsky.unspecced"
],
"summary": "An unspecced view of globally popular feed generators.",
"operationId": "app.bsky.unspecced.getPopularFeedGenerators",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "query",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"feeds"
],
"properties": {
"cursor": {
"type": "string"
},
"feeds": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.defs.generatorView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/app.bsky.unspecced.getTaggedSuggestions": {
"get": {
"tags": [
"app.bsky.unspecced"
],
"summary": "Get a list of suggestions (feeds and users) tagged with categories",
"operationId": "app.bsky.unspecced.getTaggedSuggestions",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"suggestions"
],
"properties": {
"suggestions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.unspecced.getTaggedSuggestions.suggestion"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.identity.getRecommendedDidCredentials": {
"get": {
"tags": [
"com.atproto.identity"
],
"summary": "Describe the credentials that should be included in the DID doc of an account that is migrating to this service.",
"operationId": "com.atproto.identity.getRecommendedDidCredentials",
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"rotationKeys": {
"type": "array",
"items": {
"type": "string"
}
},
"alsoKnownAs": {
"type": "array",
"items": {
"type": "string"
}
},
"verificationMethods": {},
"services": {}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.identity.requestPlcOperationSignature": {
"post": {
"tags": [
"com.atproto.identity"
],
"summary": "Request an email with a code to in order to request a signed PLC operation. Requires Auth.",
"operationId": "com.atproto.identity.requestPlcOperationSignature",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.identity.resolveHandle": {
"get": {
"tags": [
"com.atproto.identity"
],
"summary": "Resolves a handle (domain name) to a DID.",
"operationId": "com.atproto.identity.resolveHandle",
"parameters": [
{
"name": "handle",
"in": "query",
"description": "The handle to resolve.",
"required": true,
"schema": {
"type": "string",
"description": "The handle to resolve.",
"format": "handle"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.identity.signPlcOperation": {
"post": {
"tags": [
"com.atproto.identity"
],
"summary": "Signs a PLC operation to update some value(s) in the requesting DID's document.",
"operationId": "com.atproto.identity.signPlcOperation",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "A token received through com.atproto.identity.requestPlcOperationSignature"
},
"rotationKeys": {
"type": "array",
"items": {
"type": "string"
}
},
"alsoKnownAs": {
"type": "array",
"items": {
"type": "string"
}
},
"verificationMethods": {},
"services": {}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"operation"
],
"properties": {
"operation": {}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.identity.submitPlcOperation": {
"post": {
"tags": [
"com.atproto.identity"
],
"summary": "Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry",
"operationId": "com.atproto.identity.submitPlcOperation",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"operation"
],
"properties": {
"operation": {}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.identity.updateHandle": {
"post": {
"tags": [
"com.atproto.identity"
],
"summary": "Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.",
"operationId": "com.atproto.identity.updateHandle",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"handle"
],
"properties": {
"handle": {
"type": "string",
"description": "The new handle.",
"format": "handle"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.moderation.createReport": {
"post": {
"tags": [
"com.atproto.moderation"
],
"summary": "Submit a moderation report regarding an atproto account or record. Implemented by moderation services (with PDS proxying), and requires auth.",
"operationId": "com.atproto.moderation.createReport",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"reasonType",
"subject"
],
"properties": {
"reasonType": {
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonType"
},
"reason": {
"type": "string",
"description": "Additional context about the content and violation."
},
"subject": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.admin.defs.repoRef"
},
{
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
}
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"id",
"reasonType",
"subject",
"reportedBy",
"createdAt"
],
"properties": {
"id": {
"type": "integer"
},
"reasonType": {
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonType"
},
"reason": {
"type": "string",
"maxLength": 20000
},
"subject": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.admin.defs.repoRef"
},
{
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
}
]
},
"reportedBy": {
"type": "string",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.applyWrites": {
"post": {
"tags": [
"com.atproto.repo"
],
"summary": "Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.",
"operationId": "com.atproto.repo.applyWrites",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"repo",
"writes"
],
"properties": {
"repo": {
"type": "string",
"description": "The handle or DID of the repo (aka, current account).",
"format": "at-identifier"
},
"validate": {
"type": "boolean",
"description": "Can be set to 'false' to skip Lexicon schema validation of record data, for all operations.",
"default": true
},
"writes": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.repo.applyWrites.create"
},
{
"$ref": "#/components/schemas/com.atproto.repo.applyWrites.update"
},
{
"$ref": "#/components/schemas/com.atproto.repo.applyWrites.delete"
}
]
}
},
"swapCommit": {
"type": "string",
"description": "If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.",
"format": "cid"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "InvalidSwap"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.createRecord": {
"post": {
"tags": [
"com.atproto.repo"
],
"summary": "Create a single new repository record. Requires auth, implemented by PDS.",
"operationId": "com.atproto.repo.createRecord",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"repo",
"collection",
"record"
],
"properties": {
"repo": {
"type": "string",
"description": "The handle or DID of the repo (aka, current account).",
"format": "at-identifier"
},
"collection": {
"type": "string",
"description": "The NSID of the record collection.",
"format": "nsid"
},
"rkey": {
"type": "string",
"description": "The Record Key.",
"maxLength": 15
},
"validate": {
"type": "boolean",
"description": "Can be set to 'false' to skip Lexicon schema validation of record data.",
"default": true
},
"record": {},
"swapCommit": {
"type": "string",
"description": "Compare and swap with the previous commit by CID.",
"format": "cid"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"uri",
"cid"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "InvalidSwap"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.deleteRecord": {
"post": {
"tags": [
"com.atproto.repo"
],
"summary": "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.",
"operationId": "com.atproto.repo.deleteRecord",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"repo",
"collection",
"rkey"
],
"properties": {
"repo": {
"type": "string",
"description": "The handle or DID of the repo (aka, current account).",
"format": "at-identifier"
},
"collection": {
"type": "string",
"description": "The NSID of the record collection.",
"format": "nsid"
},
"rkey": {
"type": "string",
"description": "The Record Key."
},
"swapRecord": {
"type": "string",
"description": "Compare and swap with the previous record by CID.",
"format": "cid"
},
"swapCommit": {
"type": "string",
"description": "Compare and swap with the previous commit by CID.",
"format": "cid"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "InvalidSwap"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.describeRepo": {
"get": {
"tags": [
"com.atproto.repo"
],
"summary": "Get information about an account and repository, including the list of collections. Does not require auth.",
"operationId": "com.atproto.repo.describeRepo",
"parameters": [
{
"name": "repo",
"in": "query",
"description": "The handle or DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The handle or DID of the repo.",
"format": "at-identifier"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"handle",
"did",
"didDoc",
"collections",
"handleIsCorrect"
],
"properties": {
"handle": {
"type": "string",
"format": "handle"
},
"did": {
"type": "string",
"format": "did"
},
"didDoc": {},
"collections": {
"type": "array",
"items": {
"type": "string",
"format": "nsid"
}
},
"handleIsCorrect": {
"type": "boolean",
"description": "Indicates if handle is currently valid (resolves bi-directionally)"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.getRecord": {
"get": {
"tags": [
"com.atproto.repo"
],
"summary": "Get a single record from a repository. Does not require auth.",
"operationId": "com.atproto.repo.getRecord",
"parameters": [
{
"name": "repo",
"in": "query",
"description": "The handle or DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The handle or DID of the repo.",
"format": "at-identifier"
}
},
{
"name": "collection",
"in": "query",
"description": "The NSID of the record collection.",
"required": true,
"schema": {
"type": "string",
"description": "The NSID of the record collection.",
"format": "nsid"
}
},
{
"name": "rkey",
"in": "query",
"description": "The Record Key.",
"required": true,
"schema": {
"type": "string",
"description": "The Record Key."
}
},
{
"name": "cid",
"in": "query",
"description": "The CID of the version of the record. If not specified, then return the most recent version.",
"required": false,
"schema": {
"type": "string",
"description": "The CID of the version of the record. If not specified, then return the most recent version.",
"format": "cid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"uri",
"value"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"value": {}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.importRepo": {
"post": {
"tags": [
"com.atproto.repo"
],
"summary": "Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.",
"operationId": "com.atproto.repo.importRepo",
"requestBody": {
"required": true,
"content": {
"application/vnd.ipld.car": {}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.listMissingBlobs": {
"get": {
"tags": [
"com.atproto.repo"
],
"summary": "Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.",
"operationId": "com.atproto.repo.listMissingBlobs",
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"default": 500
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"blobs"
],
"properties": {
"cursor": {
"type": "string"
},
"blobs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.repo.listMissingBlobs.recordBlob"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.listRecords": {
"get": {
"tags": [
"com.atproto.repo"
],
"summary": "List a range of records in a repository, matching a specific collection. Does not require auth.",
"operationId": "com.atproto.repo.listRecords",
"parameters": [
{
"name": "repo",
"in": "query",
"description": "The handle or DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The handle or DID of the repo.",
"format": "at-identifier"
}
},
{
"name": "collection",
"in": "query",
"description": "The NSID of the record type.",
"required": true,
"schema": {
"type": "string",
"description": "The NSID of the record type.",
"format": "nsid"
}
},
{
"name": "limit",
"in": "query",
"description": "The number of records to return.",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "rkeyStart",
"in": "query",
"description": "DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)",
"required": false,
"schema": {
"type": "string",
"description": "DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)"
}
},
{
"name": "rkeyEnd",
"in": "query",
"description": "DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)",
"required": false,
"schema": {
"type": "string",
"description": "DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)"
}
},
{
"name": "reverse",
"in": "query",
"description": "Flag to reverse the order of the returned records.",
"required": false,
"schema": {
"type": "boolean",
"description": "Flag to reverse the order of the returned records."
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"records"
],
"properties": {
"cursor": {
"type": "string"
},
"records": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.repo.listRecords.record"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.putRecord": {
"post": {
"tags": [
"com.atproto.repo"
],
"summary": "Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.",
"operationId": "com.atproto.repo.putRecord",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"repo",
"collection",
"rkey",
"record"
],
"properties": {
"repo": {
"type": "string",
"description": "The handle or DID of the repo (aka, current account).",
"format": "at-identifier"
},
"collection": {
"type": "string",
"description": "The NSID of the record collection.",
"format": "nsid"
},
"rkey": {
"type": "string",
"description": "The Record Key.",
"maxLength": 15
},
"validate": {
"type": "boolean",
"description": "Can be set to 'false' to skip Lexicon schema validation of record data.",
"default": true
},
"record": {},
"swapRecord": {
"type": "string",
"description": "Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation",
"format": "cid"
},
"swapCommit": {
"type": "string",
"description": "Compare and swap with the previous commit by CID.",
"format": "cid"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"uri",
"cid"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "InvalidSwap"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.rebaseRepo": {
"post": {
"tags": [
"com.atproto.repo"
],
"summary": "Simple rebase of repo that deletes history",
"operationId": "com.atproto.repo.rebaseRepo",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"repo"
],
"properties": {
"repo": {
"type": "string",
"description": "The handle or DID of the repo.",
"format": "at-identifier"
},
"swapCommit": {
"type": "string",
"description": "Compare and swap with the previous commit by cid.",
"format": "cid"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "InvalidSwap"
},
{
"const": "ConcurrentWrites"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.repo.uploadBlob": {
"post": {
"tags": [
"com.atproto.repo"
],
"summary": "Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.",
"operationId": "com.atproto.repo.uploadBlob",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"*/*": {}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"blob"
],
"properties": {
"blob": {
"type": "string",
"format": "binary"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.activateAccount": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup.",
"operationId": "com.atproto.server.activateAccount",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.checkAccountStatus": {
"get": {
"tags": [
"com.atproto.server"
],
"summary": "Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself.",
"operationId": "com.atproto.server.checkAccountStatus",
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"activated",
"validDid",
"repoCommit",
"repoRev",
"repoBlocks",
"indexedRecords",
"privateStateValues",
"expectedBlobs",
"importedBlobs"
],
"properties": {
"activated": {
"type": "boolean"
},
"validDid": {
"type": "boolean"
},
"repoCommit": {
"type": "string",
"format": "cid"
},
"repoRev": {
"type": "string"
},
"repoBlocks": {
"type": "integer"
},
"indexedRecords": {
"type": "integer"
},
"privateStateValues": {
"type": "integer"
},
"expectedBlobs": {
"type": "integer"
},
"importedBlobs": {
"type": "integer"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.confirmEmail": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Confirm an email using a token from com.atproto.server.requestEmailConfirmation.",
"operationId": "com.atproto.server.confirmEmail",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"email",
"token"
],
"properties": {
"email": {
"type": "string"
},
"token": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "AccountNotFound"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "InvalidEmail"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.createAccount": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Create an account. Implemented by PDS.",
"operationId": "com.atproto.server.createAccount",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"handle"
],
"properties": {
"email": {
"type": "string"
},
"handle": {
"type": "string",
"description": "Requested handle for the account.",
"format": "handle"
},
"did": {
"type": "string",
"description": "Pre-existing atproto DID, being imported to a new account.",
"format": "did"
},
"inviteCode": {
"type": "string"
},
"verificationCode": {
"type": "string"
},
"verificationPhone": {
"type": "string"
},
"password": {
"type": "string",
"description": "Initial account password. May need to meet instance-specific password strength requirements."
},
"recoveryKey": {
"type": "string",
"description": "DID PLC rotation key (aka, recovery key) to be included in PLC creation operation."
},
"plcOp": {}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "Account login session returned on successful account creation.",
"required": [
"accessJwt",
"refreshJwt",
"handle",
"did"
],
"properties": {
"accessJwt": {
"type": "string"
},
"refreshJwt": {
"type": "string"
},
"handle": {
"type": "string",
"format": "handle"
},
"did": {
"type": "string",
"description": "The DID of the new account.",
"format": "did"
},
"didDoc": {}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "InvalidHandle"
},
{
"const": "InvalidPassword"
},
{
"const": "InvalidInviteCode"
},
{
"const": "HandleNotAvailable"
},
{
"const": "UnsupportedDomain"
},
{
"const": "UnresolvableDid"
},
{
"const": "IncompatibleDidDoc"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.createAppPassword": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Create an App Password.",
"operationId": "com.atproto.server.createAppPassword",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "A short name for the App Password, to help distinguish them."
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/com.atproto.server.createAppPassword.appPassword"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "AccountTakedown"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.createInviteCode": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Create an invite code.",
"operationId": "com.atproto.server.createInviteCode",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"useCount"
],
"properties": {
"useCount": {
"type": "integer"
},
"forAccount": {
"type": "string",
"format": "did"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.createInviteCodes": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Create invite codes.",
"operationId": "com.atproto.server.createInviteCodes",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"codeCount",
"useCount"
],
"properties": {
"codeCount": {
"type": "integer",
"default": 1
},
"useCount": {
"type": "integer"
},
"forAccounts": {
"type": "array",
"items": {
"type": "string",
"format": "did"
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"codes"
],
"properties": {
"codes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.server.createInviteCodes.accountCodes"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.createSession": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Create an authentication session.",
"operationId": "com.atproto.server.createSession",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"identifier",
"password"
],
"properties": {
"identifier": {
"type": "string",
"description": "Handle or other identifier supported by the server for the authenticating user."
},
"password": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"accessJwt",
"refreshJwt",
"handle",
"did"
],
"properties": {
"accessJwt": {
"type": "string"
},
"refreshJwt": {
"type": "string"
},
"handle": {
"type": "string",
"format": "handle"
},
"did": {
"type": "string",
"format": "did"
},
"didDoc": {},
"email": {
"type": "string"
},
"emailConfirmed": {
"type": "boolean"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "AccountTakedown"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.deactivateAccount": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host.",
"operationId": "com.atproto.server.deactivateAccount",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"deleteAfter": {
"type": "string",
"description": "A recommendation to server as to how long they should hold onto the deactivated account before deleting.",
"format": "date-time"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.deleteAccount": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Delete an actor's account with a token and password. Can only be called after requesting a deletion token. Requires auth.",
"operationId": "com.atproto.server.deleteAccount",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"did",
"password",
"token"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"password": {
"type": "string"
},
"token": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.deleteSession": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Delete the current session. Requires auth.",
"operationId": "com.atproto.server.deleteSession",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.describeServer": {
"get": {
"tags": [
"com.atproto.server"
],
"summary": "Describes the server's account creation requirements and capabilities. Implemented by PDS.",
"operationId": "com.atproto.server.describeServer",
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"did",
"availableUserDomains"
],
"properties": {
"inviteCodeRequired": {
"type": "boolean",
"description": "If true, an invite code must be supplied to create an account on this instance."
},
"phoneVerificationRequired": {
"type": "boolean",
"description": "If true, a phone verification token must be supplied to create an account on this instance."
},
"availableUserDomains": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"$ref": "#/components/schemas/com.atproto.server.describeServer.links"
},
"did": {
"type": "string",
"format": "did"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.getAccountInviteCodes": {
"get": {
"tags": [
"com.atproto.server"
],
"summary": "Get all invite codes for the current account. Requires auth.",
"operationId": "com.atproto.server.getAccountInviteCodes",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "includeUsed",
"in": "query",
"required": false,
"schema": {
"type": "boolean",
"default": true
}
},
{
"name": "createAvailable",
"in": "query",
"description": "Controls whether any new 'earned' but not 'created' invites should be created.",
"required": false,
"schema": {
"type": "boolean",
"description": "Controls whether any new 'earned' but not 'created' invites should be created.",
"default": true
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"codes"
],
"properties": {
"codes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.server.defs.inviteCode"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "DuplicateCreate"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.getServiceAuth": {
"get": {
"tags": [
"com.atproto.server"
],
"summary": "Get a signed token on behalf of the requesting DID for the requested service.",
"operationId": "com.atproto.server.getServiceAuth",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "aud",
"in": "query",
"description": "The DID of the service that the token will be used to authenticate with",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the service that the token will be used to authenticate with",
"format": "did"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"type": "string"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.getSession": {
"get": {
"tags": [
"com.atproto.server"
],
"summary": "Get information about the current auth session. Requires auth.",
"operationId": "com.atproto.server.getSession",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"handle",
"did"
],
"properties": {
"handle": {
"type": "string",
"format": "handle"
},
"did": {
"type": "string",
"format": "did"
},
"email": {
"type": "string"
},
"emailConfirmed": {
"type": "boolean"
},
"didDoc": {}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.listAppPasswords": {
"get": {
"tags": [
"com.atproto.server"
],
"summary": "List all App Passwords.",
"operationId": "com.atproto.server.listAppPasswords",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"passwords"
],
"properties": {
"passwords": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.server.listAppPasswords.appPassword"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "AccountTakedown"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.refreshSession": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Refresh an authentication session. Requires auth using the 'refreshJwt' (not the 'accessJwt').",
"operationId": "com.atproto.server.refreshSession",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"accessJwt",
"refreshJwt",
"handle",
"did"
],
"properties": {
"accessJwt": {
"type": "string"
},
"refreshJwt": {
"type": "string"
},
"handle": {
"type": "string",
"format": "handle"
},
"did": {
"type": "string",
"format": "did"
},
"didDoc": {}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "AccountTakedown"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.requestAccountDelete": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Initiate a user account deletion via email.",
"operationId": "com.atproto.server.requestAccountDelete",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.requestEmailConfirmation": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Request an email with a code to confirm ownership of email.",
"operationId": "com.atproto.server.requestEmailConfirmation",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.requestEmailUpdate": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Request a token in order to update email.",
"operationId": "com.atproto.server.requestEmailUpdate",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"tokenRequired"
],
"properties": {
"tokenRequired": {
"type": "boolean"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.requestPasswordReset": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Initiate a user account password reset via email.",
"operationId": "com.atproto.server.requestPasswordReset",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.reserveSigningKey": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented.",
"operationId": "com.atproto.server.reserveSigningKey",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"did": {
"type": "string",
"description": "The DID to reserve a key for.",
"format": "did"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"signingKey"
],
"properties": {
"signingKey": {
"type": "string",
"description": "The public key for the reserved signing key, in did:key serialization."
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.resetPassword": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Reset a user account password using a token.",
"operationId": "com.atproto.server.resetPassword",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"token",
"password"
],
"properties": {
"token": {
"type": "string"
},
"password": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.revokeAppPassword": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Revoke an App Password by name.",
"operationId": "com.atproto.server.revokeAppPassword",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.server.updateEmail": {
"post": {
"tags": [
"com.atproto.server"
],
"summary": "Update an account's email.",
"operationId": "com.atproto.server.updateEmail",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string"
},
"token": {
"type": "string",
"description": "Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed."
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "TokenRequired"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.getBlob": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS.",
"operationId": "com.atproto.sync.getBlob",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the account.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the account.",
"format": "did"
}
},
{
"name": "cid",
"in": "query",
"description": "The CID of the blob to fetch",
"required": true,
"schema": {
"type": "string",
"description": "The CID of the blob to fetch",
"format": "cid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.getBlocks": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS.",
"operationId": "com.atproto.sync.getBlocks",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the repo.",
"format": "did"
}
},
{
"name": "cids",
"in": "query",
"required": true,
"schema": {
"type": "array",
"items": {
"type": "string",
"format": "cid"
}
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/vnd.ipld.car": {}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.getCheckout": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "DEPRECATED - please use com.atproto.sync.getRepo instead",
"operationId": "com.atproto.sync.getCheckout",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the repo.",
"format": "did"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/vnd.ipld.car": {}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.getCommitPath": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "Gets the path of repo commits",
"operationId": "com.atproto.sync.getCommitPath",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the repo.",
"format": "did"
}
},
{
"name": "latest",
"in": "query",
"description": "The most recent commit",
"required": false,
"schema": {
"type": "string",
"description": "The most recent commit",
"format": "cid"
}
},
{
"name": "earliest",
"in": "query",
"description": "The earliest commit to start from",
"required": false,
"schema": {
"type": "string",
"description": "The earliest commit to start from",
"format": "cid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"commits"
],
"properties": {
"commits": {
"type": "array",
"items": {
"type": "string",
"format": "cid"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.getHead": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "DEPRECATED - please use com.atproto.sync.getLatestCommit instead",
"operationId": "com.atproto.sync.getHead",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the repo.",
"format": "did"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"root"
],
"properties": {
"root": {
"type": "string",
"format": "cid"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "HeadNotFound"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.getLatestCommit": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "Get the current commit CID & revision of the specified repo. Does not require auth.",
"operationId": "com.atproto.sync.getLatestCommit",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the repo.",
"format": "did"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"cid",
"rev"
],
"properties": {
"cid": {
"type": "string",
"format": "cid"
},
"rev": {
"type": "string"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "RepoNotFound"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.getRecord": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.",
"operationId": "com.atproto.sync.getRecord",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the repo.",
"format": "did"
}
},
{
"name": "collection",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "nsid"
}
},
{
"name": "rkey",
"in": "query",
"description": "Record Key",
"required": true,
"schema": {
"type": "string",
"description": "Record Key"
}
},
{
"name": "commit",
"in": "query",
"description": "An optional past commit CID.",
"required": false,
"schema": {
"type": "string",
"description": "An optional past commit CID.",
"format": "cid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/vnd.ipld.car": {}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.getRepo": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.",
"operationId": "com.atproto.sync.getRepo",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the repo.",
"format": "did"
}
},
{
"name": "since",
"in": "query",
"description": "The revision ('rev') of the repo to create a diff from.",
"required": false,
"schema": {
"type": "string",
"description": "The revision ('rev') of the repo to create a diff from."
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/vnd.ipld.car": {}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.listBlobs": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "List blob CIDso for an account, since some repo revision. Does not require auth; implemented by PDS.",
"operationId": "com.atproto.sync.listBlobs",
"parameters": [
{
"name": "did",
"in": "query",
"description": "The DID of the repo.",
"required": true,
"schema": {
"type": "string",
"description": "The DID of the repo.",
"format": "did"
}
},
{
"name": "since",
"in": "query",
"description": "Optional revision of the repo to list blobs since.",
"required": false,
"schema": {
"type": "string",
"description": "Optional revision of the repo to list blobs since."
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"default": 500
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"cids"
],
"properties": {
"cursor": {
"type": "string"
},
"cids": {
"type": "array",
"items": {
"type": "string",
"format": "cid"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.sync.listRepos": {
"get": {
"tags": [
"com.atproto.sync"
],
"summary": "Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay.",
"operationId": "com.atproto.sync.listRepos",
"parameters": [
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"default": 500
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"repos"
],
"properties": {
"cursor": {
"type": "string"
},
"repos": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.sync.listRepos.repo"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.temp.checkSignupQueue": {
"get": {
"tags": [
"com.atproto.temp"
],
"summary": "Check accounts location in signup queue.",
"operationId": "com.atproto.temp.checkSignupQueue",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"activated"
],
"properties": {
"activated": {
"type": "boolean"
},
"placeInQueue": {
"type": "integer"
},
"estimatedTimeMs": {
"type": "integer"
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.temp.requestPhoneVerification": {
"post": {
"tags": [
"com.atproto.temp"
],
"summary": "Request a verification code to be sent to the supplied phone number",
"operationId": "com.atproto.temp.requestPhoneVerification",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"phoneNumber"
],
"properties": {
"phoneNumber": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/com.atproto.temp.upgradeRepoVersion": {
"post": {
"tags": [
"com.atproto.temp"
],
"summary": "Upgrade a repo to v3",
"operationId": "com.atproto.temp.upgradeRepoVersion",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"force": {
"type": "boolean"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.communication.createTemplate": {
"post": {
"tags": [
"tools.ozone.communication"
],
"summary": "Administrative action to create a new, re-usable communication (email for now) template.",
"operationId": "tools.ozone.communication.createTemplate",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"subject",
"contentMarkdown",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Name of the template."
},
"contentMarkdown": {
"type": "string",
"description": "Content of the template, markdown supported, can contain variable placeholders."
},
"subject": {
"type": "string",
"description": "Subject of the message, used in emails."
},
"createdBy": {
"type": "string",
"description": "DID of the user who is creating the template.",
"format": "did"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/tools.ozone.communication.defs.templateView"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.communication.deleteTemplate": {
"post": {
"tags": [
"tools.ozone.communication"
],
"summary": "Delete a communication template.",
"operationId": "tools.ozone.communication.deleteTemplate",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.communication.listTemplates": {
"get": {
"tags": [
"tools.ozone.communication"
],
"summary": "Get list of all communication templates.",
"operationId": "tools.ozone.communication.listTemplates",
"security": [
{
"Bearer": []
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"communicationTemplates"
],
"properties": {
"communicationTemplates": {
"type": "array",
"items": {
"$ref": "#/components/schemas/tools.ozone.communication.defs.templateView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.communication.updateTemplate": {
"post": {
"tags": [
"tools.ozone.communication"
],
"summary": "Administrative action to update an existing communication template. Allows passing partial fields to patch specific fields only.",
"operationId": "tools.ozone.communication.updateTemplate",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the template to be updated."
},
"name": {
"type": "string",
"description": "Name of the template."
},
"contentMarkdown": {
"type": "string",
"description": "Content of the template, markdown supported, can contain variable placeholders."
},
"subject": {
"type": "string",
"description": "Subject of the message, used in emails."
},
"updatedBy": {
"type": "string",
"description": "DID of the user who is updating the template.",
"format": "did"
},
"disabled": {
"type": "boolean"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/tools.ozone.communication.defs.templateView"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.moderation.emitEvent": {
"post": {
"tags": [
"tools.ozone.moderation"
],
"summary": "Take a moderation action on an actor.",
"operationId": "tools.ozone.moderation.emitEvent",
"security": [
{
"Bearer": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"event",
"subject",
"createdBy"
],
"properties": {
"event": {
"oneOf": [
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventTakedown"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventAcknowledge"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventEscalate"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventComment"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventLabel"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventReport"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventMute"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventReverseTakedown"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventUnmute"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventEmail"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventTag"
}
]
},
"subject": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.admin.defs.repoRef"
},
{
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
}
]
},
"subjectBlobCids": {
"type": "array",
"items": {
"type": "string",
"format": "cid"
}
},
"createdBy": {
"type": "string",
"format": "did"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventView"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "SubjectHasAction"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.moderation.getEvent": {
"get": {
"tags": [
"tools.ozone.moderation"
],
"summary": "Get details about a moderation event.",
"operationId": "tools.ozone.moderation.getEvent",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventViewDetail"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.moderation.getRecord": {
"get": {
"tags": [
"tools.ozone.moderation"
],
"summary": "Get details about a record.",
"operationId": "tools.ozone.moderation.getRecord",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "uri",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "at-uri"
}
},
{
"name": "cid",
"in": "query",
"required": false,
"schema": {
"type": "string",
"format": "cid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.recordViewDetail"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "RecordNotFound"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.moderation.getRepo": {
"get": {
"tags": [
"tools.ozone.moderation"
],
"summary": "Get details about a repository.",
"operationId": "tools.ozone.moderation.getRepo",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "did",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "did"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.repoViewDetail"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
},
{
"const": "RepoNotFound"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.moderation.queryEvents": {
"get": {
"tags": [
"tools.ozone.moderation"
],
"summary": "List moderation events related to a subject.",
"operationId": "tools.ozone.moderation.queryEvents",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "types",
"in": "query",
"description": "The types of events (fully qualified string in the format of tools.ozone.moderation.defs#modEvent<name>) to filter by. If not specified, all events are returned.",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "createdBy",
"in": "query",
"required": false,
"schema": {
"type": "string",
"format": "did"
}
},
{
"name": "sortDirection",
"in": "query",
"description": "Sort direction for the events. Defaults to descending order of created at timestamp.",
"required": false,
"schema": {
"type": "string",
"description": "Sort direction for the events. Defaults to descending order of created at timestamp.",
"default": "desc"
}
},
{
"name": "createdAfter",
"in": "query",
"description": "Retrieve events created after a given timestamp",
"required": false,
"schema": {
"type": "string",
"description": "Retrieve events created after a given timestamp",
"format": "date-time"
}
},
{
"name": "createdBefore",
"in": "query",
"description": "Retrieve events created before a given timestamp",
"required": false,
"schema": {
"type": "string",
"description": "Retrieve events created before a given timestamp",
"format": "date-time"
}
},
{
"name": "subject",
"in": "query",
"required": false,
"schema": {
"type": "string",
"format": "uri"
}
},
{
"name": "includeAllUserRecords",
"in": "query",
"description": "If true, events on all record types (posts, lists, profile etc.) owned by the did are returned",
"required": false,
"schema": {
"type": "boolean",
"description": "If true, events on all record types (posts, lists, profile etc.) owned by the did are returned"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "hasComment",
"in": "query",
"description": "If true, only events with comments are returned",
"required": false,
"schema": {
"type": "boolean",
"description": "If true, only events with comments are returned"
}
},
{
"name": "comment",
"in": "query",
"description": "If specified, only events with comments containing the keyword are returned",
"required": false,
"schema": {
"type": "string",
"description": "If specified, only events with comments containing the keyword are returned"
}
},
{
"name": "addedLabels",
"in": "query",
"description": "If specified, only events where all of these labels were added are returned",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "removedLabels",
"in": "query",
"description": "If specified, only events where all of these labels were removed are returned",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "addedTags",
"in": "query",
"description": "If specified, only events where all of these tags were added are returned",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "removedTags",
"in": "query",
"description": "If specified, only events where all of these tags were removed are returned",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "reportTypes",
"in": "query",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"events"
],
"properties": {
"cursor": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.moderation.queryStatuses": {
"get": {
"tags": [
"tools.ozone.moderation"
],
"summary": "View moderation statuses of subjects (record or repo).",
"operationId": "tools.ozone.moderation.queryStatuses",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "subject",
"in": "query",
"required": false,
"schema": {
"type": "string",
"format": "uri"
}
},
{
"name": "comment",
"in": "query",
"description": "Search subjects by keyword from comments",
"required": false,
"schema": {
"type": "string",
"description": "Search subjects by keyword from comments"
}
},
{
"name": "reportedAfter",
"in": "query",
"description": "Search subjects reported after a given timestamp",
"required": false,
"schema": {
"type": "string",
"description": "Search subjects reported after a given timestamp",
"format": "date-time"
}
},
{
"name": "reportedBefore",
"in": "query",
"description": "Search subjects reported before a given timestamp",
"required": false,
"schema": {
"type": "string",
"description": "Search subjects reported before a given timestamp",
"format": "date-time"
}
},
{
"name": "reviewedAfter",
"in": "query",
"description": "Search subjects reviewed after a given timestamp",
"required": false,
"schema": {
"type": "string",
"description": "Search subjects reviewed after a given timestamp",
"format": "date-time"
}
},
{
"name": "reviewedBefore",
"in": "query",
"description": "Search subjects reviewed before a given timestamp",
"required": false,
"schema": {
"type": "string",
"description": "Search subjects reviewed before a given timestamp",
"format": "date-time"
}
},
{
"name": "includeMuted",
"in": "query",
"description": "By default, we don't include muted subjects in the results. Set this to true to include them.",
"required": false,
"schema": {
"type": "boolean",
"description": "By default, we don't include muted subjects in the results. Set this to true to include them."
}
},
{
"name": "reviewState",
"in": "query",
"description": "Specify when fetching subjects in a certain state",
"required": false,
"schema": {
"type": "string",
"description": "Specify when fetching subjects in a certain state"
}
},
{
"name": "ignoreSubjects",
"in": "query",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
}
},
{
"name": "lastReviewedBy",
"in": "query",
"description": "Get all subject statuses that were reviewed by a specific moderator",
"required": false,
"schema": {
"type": "string",
"description": "Get all subject statuses that were reviewed by a specific moderator",
"format": "did"
}
},
{
"name": "sortField",
"in": "query",
"required": false,
"schema": {
"type": "string",
"default": "lastReportedAt"
}
},
{
"name": "sortDirection",
"in": "query",
"required": false,
"schema": {
"type": "string",
"default": "desc"
}
},
{
"name": "takendown",
"in": "query",
"description": "Get subjects that were taken down",
"required": false,
"schema": {
"type": "boolean",
"description": "Get subjects that were taken down"
}
},
{
"name": "appealed",
"in": "query",
"description": "Get subjects in unresolved appealed status",
"required": false,
"schema": {
"type": "boolean",
"description": "Get subjects in unresolved appealed status"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "tags",
"in": "query",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "excludeTags",
"in": "query",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"subjectStatuses"
],
"properties": {
"cursor": {
"type": "string"
},
"subjectStatuses": {
"type": "array",
"items": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.subjectStatusView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/tools.ozone.moderation.searchRepos": {
"get": {
"tags": [
"tools.ozone.moderation"
],
"summary": "Find repositories based on a search term.",
"operationId": "tools.ozone.moderation.searchRepos",
"security": [
{
"Bearer": []
}
],
"parameters": [
{
"name": "term",
"in": "query",
"description": "DEPRECATED: use 'q' instead",
"required": false,
"schema": {
"type": "string",
"description": "DEPRECATED: use 'q' instead"
}
},
{
"name": "q",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "cursor",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"repos"
],
"properties": {
"cursor": {
"type": "string"
},
"repos": {
"type": "array",
"items": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.repoView"
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string",
"oneOf": [
{
"const": "InvalidRequest"
},
{
"const": "ExpiredToken"
},
{
"const": "InvalidToken"
}
]
},
"message": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"const": "AuthMissing"
},
"message": {
"type": "string"
}
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"app.bsky.actor.defs.profileViewBasic": {
"type": "object",
"required": [
"did",
"handle"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"displayName": {
"type": "string",
"maxLength": 640
},
"avatar": {
"type": "string"
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.actor.defs.viewerState"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
}
}
},
"app.bsky.actor.defs.profileView": {
"type": "object",
"required": [
"did",
"handle"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"displayName": {
"type": "string",
"maxLength": 640
},
"description": {
"type": "string",
"maxLength": 2560
},
"avatar": {
"type": "string"
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.actor.defs.viewerState"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
}
}
},
"app.bsky.actor.defs.profileViewDetailed": {
"type": "object",
"required": [
"did",
"handle"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"displayName": {
"type": "string",
"maxLength": 640
},
"description": {
"type": "string",
"maxLength": 2560
},
"avatar": {
"type": "string"
},
"banner": {
"type": "string"
},
"followersCount": {
"type": "integer"
},
"followsCount": {
"type": "integer"
},
"postsCount": {
"type": "integer"
},
"associated": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileAssociated"
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.actor.defs.viewerState"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
}
}
},
"app.bsky.actor.defs.profileAssociated": {
"type": "object",
"properties": {
"lists": {
"type": "integer"
},
"feedgens": {
"type": "integer"
},
"labeler": {
"type": "boolean"
}
}
},
"app.bsky.actor.defs.viewerState": {
"type": "object",
"description": "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.",
"properties": {
"muted": {
"type": "boolean"
},
"mutedByList": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listViewBasic"
},
"blockedBy": {
"type": "boolean"
},
"blocking": {
"type": "string",
"format": "at-uri"
},
"blockingByList": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listViewBasic"
},
"following": {
"type": "string",
"format": "at-uri"
},
"followedBy": {
"type": "string",
"format": "at-uri"
}
}
},
"app.bsky.actor.defs.preferences": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.actor.defs.adultContentPref"
},
{
"$ref": "#/components/schemas/app.bsky.actor.defs.contentLabelPref"
},
{
"$ref": "#/components/schemas/app.bsky.actor.defs.savedFeedsPref"
},
{
"$ref": "#/components/schemas/app.bsky.actor.defs.personalDetailsPref"
},
{
"$ref": "#/components/schemas/app.bsky.actor.defs.feedViewPref"
},
{
"$ref": "#/components/schemas/app.bsky.actor.defs.threadViewPref"
},
{
"$ref": "#/components/schemas/app.bsky.actor.defs.interestsPref"
},
{
"$ref": "#/components/schemas/app.bsky.actor.defs.mutedWordsPref"
},
{
"$ref": "#/components/schemas/app.bsky.actor.defs.hiddenPostsPref"
}
]
}
},
"app.bsky.actor.defs.adultContentPref": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
}
}
},
"app.bsky.actor.defs.contentLabelPref": {
"type": "object",
"required": [
"label",
"visibility"
],
"properties": {
"labelerDid": {
"type": "string",
"description": "Which labeler does this preference apply to? If undefined, applies globally.",
"format": "did"
},
"label": {
"type": "string"
},
"visibility": {
"type": "string",
"enum": [
"ignore",
"show",
"warn",
"hide"
]
}
}
},
"app.bsky.actor.defs.savedFeedsPref": {
"type": "object",
"required": [
"pinned",
"saved"
],
"properties": {
"pinned": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
},
"saved": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
},
"timelineIndex": {
"type": "integer"
}
}
},
"app.bsky.actor.defs.personalDetailsPref": {
"type": "object",
"properties": {
"birthDate": {
"type": "string",
"description": "The birth date of account owner.",
"format": "date-time"
}
}
},
"app.bsky.actor.defs.feedViewPref": {
"type": "object",
"required": [
"feed"
],
"properties": {
"feed": {
"type": "string",
"description": "The URI of the feed, or an identifier which describes the feed."
},
"hideReplies": {
"type": "boolean",
"description": "Hide replies in the feed."
},
"hideRepliesByUnfollowed": {
"type": "boolean",
"description": "Hide replies in the feed if they are not by followed users.",
"default": true
},
"hideRepliesByLikeCount": {
"type": "integer"
},
"hideReposts": {
"type": "boolean",
"description": "Hide reposts in the feed."
},
"hideQuotePosts": {
"type": "boolean",
"description": "Hide quote posts in the feed."
}
}
},
"app.bsky.actor.defs.threadViewPref": {
"type": "object",
"properties": {
"sort": {
"type": "string",
"description": "Sorting mode for threads.",
"enum": [
"oldest",
"newest",
"most-likes",
"random"
]
},
"prioritizeFollowedUsers": {
"type": "boolean",
"description": "Show followed users at the top of all replies."
}
}
},
"app.bsky.actor.defs.interestsPref": {
"type": "object",
"required": [
"tags"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 640
},
"maxItems": 100
}
}
},
"app.bsky.actor.defs.mutedWordTarget": {
"type": "string",
"maxLength": 640,
"enum": [
"content",
"tag"
]
},
"app.bsky.actor.defs.mutedWord": {
"type": "object",
"description": "A word that the account owner has muted.",
"required": [
"value",
"targets"
],
"properties": {
"value": {
"type": "string",
"description": "The muted word itself.",
"maxLength": 10000
},
"targets": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.mutedWordTarget"
}
}
}
},
"app.bsky.actor.defs.mutedWordsPref": {
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.mutedWord"
}
}
}
},
"app.bsky.actor.defs.hiddenPostsPref": {
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
}
}
},
"app.bsky.actor.defs.labelersPref": {
"type": "object",
"required": [
"labelers"
],
"properties": {
"labelers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.actor.defs.labelerPrefItem"
}
}
}
},
"app.bsky.actor.defs.labelerPrefItem": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"app.bsky.actor.profile": {
"type": "object",
"properties": {
"displayName": {
"type": "string",
"maxLength": 640
},
"description": {
"type": "string",
"description": "Free-form profile description text.",
"maxLength": 2560
},
"avatar": {
"type": "string",
"format": "binary",
"maxLength": 1000000
},
"banner": {
"type": "string",
"format": "binary",
"maxLength": 1000000
},
"labels": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.label.defs.selfLabels"
}
]
}
}
},
"app.bsky.embed.external": {
"type": "object",
"description": "A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).",
"required": [
"external"
],
"properties": {
"external": {
"$ref": "#/components/schemas/app.bsky.embed.external.external"
}
}
},
"app.bsky.embed.external.external": {
"type": "object",
"required": [
"uri",
"title",
"description"
],
"properties": {
"uri": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"thumb": {
"type": "string",
"format": "binary",
"maxLength": 1000000
}
}
},
"app.bsky.embed.external.view": {
"type": "object",
"required": [
"external"
],
"properties": {
"external": {
"$ref": "#/components/schemas/app.bsky.embed.external.viewExternal"
}
}
},
"app.bsky.embed.external.viewExternal": {
"type": "object",
"required": [
"uri",
"title",
"description"
],
"properties": {
"uri": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"thumb": {
"type": "string"
}
}
},
"app.bsky.embed.images": {
"type": "object",
"required": [
"images"
],
"properties": {
"images": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.embed.images.image"
},
"maxItems": 4
}
}
},
"app.bsky.embed.images.image": {
"type": "object",
"required": [
"image",
"alt"
],
"properties": {
"image": {
"type": "string",
"format": "binary",
"maxLength": 1000000
},
"alt": {
"type": "string",
"description": "Alt text description of the image, for accessibility."
},
"aspectRatio": {
"$ref": "#/components/schemas/app.bsky.embed.images.aspectRatio"
}
}
},
"app.bsky.embed.images.aspectRatio": {
"type": "object",
"description": "width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "integer",
"minimum": 1
},
"height": {
"type": "integer",
"minimum": 1
}
}
},
"app.bsky.embed.images.view": {
"type": "object",
"required": [
"images"
],
"properties": {
"images": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.embed.images.viewImage"
},
"maxItems": 4
}
}
},
"app.bsky.embed.images.viewImage": {
"type": "object",
"required": [
"thumb",
"fullsize",
"alt"
],
"properties": {
"thumb": {
"type": "string",
"description": "Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View."
},
"fullsize": {
"type": "string",
"description": "Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View."
},
"alt": {
"type": "string",
"description": "Alt text description of the image, for accessibility."
},
"aspectRatio": {
"$ref": "#/components/schemas/app.bsky.embed.images.aspectRatio"
}
}
},
"app.bsky.embed.record": {
"type": "object",
"required": [
"record"
],
"properties": {
"record": {
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
}
}
},
"app.bsky.embed.record.view": {
"type": "object",
"required": [
"record"
],
"properties": {
"record": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.embed.record.viewRecord"
},
{
"$ref": "#/components/schemas/app.bsky.embed.record.viewNotFound"
},
{
"$ref": "#/components/schemas/app.bsky.embed.record.viewBlocked"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.generatorView"
},
{
"$ref": "#/components/schemas/app.bsky.graph.defs.listView"
},
{
"$ref": "#/components/schemas/app.bsky.labeler.defs.labelerView"
}
]
}
}
},
"app.bsky.embed.record.viewRecord": {
"type": "object",
"required": [
"uri",
"cid",
"author",
"value",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"author": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileViewBasic"
},
"value": {},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
},
"embeds": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.embed.images.view"
},
{
"$ref": "#/components/schemas/app.bsky.embed.external.view"
},
{
"$ref": "#/components/schemas/app.bsky.embed.record.view"
},
{
"$ref": "#/components/schemas/app.bsky.embed.recordWithMedia.view"
}
]
}
},
"indexedAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.embed.record.viewNotFound": {
"type": "object",
"required": [
"uri",
"notFound"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"notFound": {
"type": "boolean",
"default": true
}
}
},
"app.bsky.embed.record.viewBlocked": {
"type": "object",
"required": [
"uri",
"blocked",
"author"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"blocked": {
"type": "boolean",
"default": true
},
"author": {
"$ref": "#/components/schemas/app.bsky.feed.defs.blockedAuthor"
}
}
},
"app.bsky.embed.recordWithMedia": {
"type": "object",
"required": [
"record",
"media"
],
"properties": {
"record": {
"$ref": "#/components/schemas/app.bsky.embed.record"
},
"media": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.embed.images"
},
{
"$ref": "#/components/schemas/app.bsky.embed.external"
}
]
}
}
},
"app.bsky.embed.recordWithMedia.view": {
"type": "object",
"required": [
"record",
"media"
],
"properties": {
"record": {
"$ref": "#/components/schemas/app.bsky.embed.record.view"
},
"media": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.embed.images.view"
},
{
"$ref": "#/components/schemas/app.bsky.embed.external.view"
}
]
}
}
},
"app.bsky.feed.defs.postView": {
"type": "object",
"required": [
"uri",
"cid",
"author",
"record",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"author": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileViewBasic"
},
"record": {},
"embed": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.embed.images.view"
},
{
"$ref": "#/components/schemas/app.bsky.embed.external.view"
},
{
"$ref": "#/components/schemas/app.bsky.embed.record.view"
},
{
"$ref": "#/components/schemas/app.bsky.embed.recordWithMedia.view"
}
]
},
"replyCount": {
"type": "integer"
},
"repostCount": {
"type": "integer"
},
"likeCount": {
"type": "integer"
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.feed.defs.viewerState"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
},
"threadgate": {
"$ref": "#/components/schemas/app.bsky.feed.defs.threadgateView"
}
}
},
"app.bsky.feed.defs.viewerState": {
"type": "object",
"description": "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.",
"properties": {
"repost": {
"type": "string",
"format": "at-uri"
},
"like": {
"type": "string",
"format": "at-uri"
},
"replyDisabled": {
"type": "boolean"
}
}
},
"app.bsky.feed.defs.feedViewPost": {
"type": "object",
"required": [
"post"
],
"properties": {
"post": {
"$ref": "#/components/schemas/app.bsky.feed.defs.postView"
},
"reply": {
"$ref": "#/components/schemas/app.bsky.feed.defs.replyRef"
},
"reason": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.feed.defs.reasonRepost"
}
]
}
}
},
"app.bsky.feed.defs.replyRef": {
"type": "object",
"required": [
"root",
"parent"
],
"properties": {
"root": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.feed.defs.postView"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.notFoundPost"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.blockedPost"
}
]
},
"parent": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.feed.defs.postView"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.notFoundPost"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.blockedPost"
}
]
}
}
},
"app.bsky.feed.defs.reasonRepost": {
"type": "object",
"required": [
"by",
"indexedAt"
],
"properties": {
"by": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileViewBasic"
},
"indexedAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.feed.defs.threadViewPost": {
"type": "object",
"required": [
"post"
],
"properties": {
"post": {
"$ref": "#/components/schemas/app.bsky.feed.defs.postView"
},
"parent": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.feed.defs.threadViewPost"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.notFoundPost"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.blockedPost"
}
]
},
"replies": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.feed.defs.threadViewPost"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.notFoundPost"
},
{
"$ref": "#/components/schemas/app.bsky.feed.defs.blockedPost"
}
]
}
}
}
},
"app.bsky.feed.defs.notFoundPost": {
"type": "object",
"required": [
"uri",
"notFound"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"notFound": {
"type": "boolean",
"default": true
}
}
},
"app.bsky.feed.defs.blockedPost": {
"type": "object",
"required": [
"uri",
"blocked",
"author"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"blocked": {
"type": "boolean",
"default": true
},
"author": {
"$ref": "#/components/schemas/app.bsky.feed.defs.blockedAuthor"
}
}
},
"app.bsky.feed.defs.blockedAuthor": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.actor.defs.viewerState"
}
}
},
"app.bsky.feed.defs.generatorView": {
"type": "object",
"required": [
"uri",
"cid",
"did",
"creator",
"displayName",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"did": {
"type": "string",
"format": "did"
},
"creator": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string",
"maxLength": 3000
},
"descriptionFacets": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.richtext.facet"
}
},
"avatar": {
"type": "string"
},
"likeCount": {
"type": "integer",
"minimum": 0
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.feed.defs.generatorViewerState"
},
"indexedAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.feed.defs.generatorViewerState": {
"type": "object",
"properties": {
"like": {
"type": "string",
"format": "at-uri"
}
}
},
"app.bsky.feed.defs.skeletonFeedPost": {
"type": "object",
"required": [
"post"
],
"properties": {
"post": {
"type": "string",
"format": "at-uri"
},
"reason": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.feed.defs.skeletonReasonRepost"
}
]
}
}
},
"app.bsky.feed.defs.skeletonReasonRepost": {
"type": "object",
"required": [
"repost"
],
"properties": {
"repost": {
"type": "string",
"format": "at-uri"
}
}
},
"app.bsky.feed.defs.threadgateView": {
"type": "object",
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"record": {},
"lists": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listViewBasic"
}
}
}
},
"app.bsky.feed.describeFeedGenerator.feed": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
}
}
},
"app.bsky.feed.describeFeedGenerator.links": {
"type": "object",
"properties": {
"privacyPolicy": {
"type": "string"
},
"termsOfService": {
"type": "string"
}
}
},
"app.bsky.feed.generator": {
"type": "object",
"required": [
"did",
"displayName",
"createdAt"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"displayName": {
"type": "string",
"maxLength": 240
},
"description": {
"type": "string",
"maxLength": 3000
},
"descriptionFacets": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.richtext.facet"
}
},
"avatar": {
"type": "string",
"format": "binary",
"maxLength": 1000000
},
"labels": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.label.defs.selfLabels"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.feed.getLikes.like": {
"type": "object",
"required": [
"indexedAt",
"createdAt",
"actor"
],
"properties": {
"indexedAt": {
"type": "string",
"format": "date-time"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"actor": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
},
"app.bsky.feed.like": {
"type": "object",
"required": [
"subject",
"createdAt"
],
"properties": {
"subject": {
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.feed.post": {
"type": "object",
"required": [
"text",
"createdAt"
],
"properties": {
"text": {
"type": "string",
"description": "The primary post content. May be an empty string, if there are embeds.",
"maxLength": 3000
},
"entities": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.feed.post.entity"
}
},
"facets": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.richtext.facet"
}
},
"reply": {
"$ref": "#/components/schemas/app.bsky.feed.post.replyRef"
},
"embed": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.embed.images"
},
{
"$ref": "#/components/schemas/app.bsky.embed.external"
},
{
"$ref": "#/components/schemas/app.bsky.embed.record"
},
{
"$ref": "#/components/schemas/app.bsky.embed.recordWithMedia"
}
]
},
"langs": {
"type": "array",
"items": {
"type": "string",
"format": "language"
},
"maxItems": 3
},
"labels": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.label.defs.selfLabels"
}
]
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 640
},
"maxItems": 8
},
"createdAt": {
"type": "string",
"description": "Client-declared timestamp when this post was originally created.",
"format": "date-time"
}
}
},
"app.bsky.feed.post.replyRef": {
"type": "object",
"required": [
"root",
"parent"
],
"properties": {
"root": {
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
},
"parent": {
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
}
}
},
"app.bsky.feed.post.entity": {
"type": "object",
"description": "Deprecated: use facets instead.",
"required": [
"index",
"type",
"value"
],
"properties": {
"index": {
"$ref": "#/components/schemas/app.bsky.feed.post.textSlice"
},
"type": {
"type": "string",
"description": "Expected values are 'mention' and 'link'."
},
"value": {
"type": "string"
}
}
},
"app.bsky.feed.post.textSlice": {
"type": "object",
"description": "Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings.",
"required": [
"start",
"end"
],
"properties": {
"start": {
"type": "integer",
"minimum": 0
},
"end": {
"type": "integer",
"minimum": 0
}
}
},
"app.bsky.feed.repost": {
"type": "object",
"required": [
"subject",
"createdAt"
],
"properties": {
"subject": {
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.feed.threadgate": {
"type": "object",
"required": [
"post",
"createdAt"
],
"properties": {
"post": {
"type": "string",
"description": "Reference (AT-URI) to the post record.",
"format": "at-uri"
},
"allow": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.feed.threadgate.mentionRule"
},
{
"$ref": "#/components/schemas/app.bsky.feed.threadgate.followingRule"
},
{
"$ref": "#/components/schemas/app.bsky.feed.threadgate.listRule"
}
]
},
"maxItems": 5
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.feed.threadgate.mentionRule": {
"type": "object",
"description": "Allow replies from actors mentioned in your post.",
"properties": {}
},
"app.bsky.feed.threadgate.followingRule": {
"type": "object",
"description": "Allow replies from actors you follow.",
"properties": {}
},
"app.bsky.feed.threadgate.listRule": {
"type": "object",
"description": "Allow replies from actors on a list.",
"required": [
"list"
],
"properties": {
"list": {
"type": "string",
"format": "at-uri"
}
}
},
"app.bsky.graph.block": {
"type": "object",
"required": [
"subject",
"createdAt"
],
"properties": {
"subject": {
"type": "string",
"description": "DID of the account to be blocked.",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.graph.defs.listViewBasic": {
"type": "object",
"required": [
"uri",
"cid",
"name",
"purpose"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"purpose": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listPurpose"
},
"avatar": {
"type": "string"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listViewerState"
},
"indexedAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.graph.defs.listView": {
"type": "object",
"required": [
"uri",
"cid",
"creator",
"name",
"purpose",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"creator": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"purpose": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listPurpose"
},
"description": {
"type": "string",
"maxLength": 3000
},
"descriptionFacets": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.richtext.facet"
}
},
"avatar": {
"type": "string"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listViewerState"
},
"indexedAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.graph.defs.listItemView": {
"type": "object",
"required": [
"uri",
"subject"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"subject": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
}
}
},
"app.bsky.graph.defs.listPurpose": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.graph.defs.modlist"
},
{
"$ref": "#/components/schemas/app.bsky.graph.defs.curatelist"
}
]
},
"app.bsky.graph.defs.modlist": {
"type": "string",
"format": "token",
"description": "A list of actors to apply an aggregate moderation action (mute/block) on."
},
"app.bsky.graph.defs.curatelist": {
"type": "string",
"format": "token",
"description": "A list of actors used for curation purposes such as list feeds or interaction gating."
},
"app.bsky.graph.defs.listViewerState": {
"type": "object",
"properties": {
"muted": {
"type": "boolean"
},
"blocked": {
"type": "string",
"format": "at-uri"
}
}
},
"app.bsky.graph.defs.notFoundActor": {
"type": "object",
"description": "indicates that a handle or DID could not be resolved",
"required": [
"actor",
"notFound"
],
"properties": {
"actor": {
"type": "string",
"format": "at-identifier"
},
"notFound": {
"type": "boolean",
"default": true
}
}
},
"app.bsky.graph.defs.relationship": {
"type": "object",
"description": "lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"following": {
"type": "string",
"description": "if the actor follows this DID, this is the AT-URI of the follow record",
"format": "at-uri"
},
"followedBy": {
"type": "string",
"description": "if the actor is followed by this DID, contains the AT-URI of the follow record",
"format": "at-uri"
}
}
},
"app.bsky.graph.follow": {
"type": "object",
"required": [
"subject",
"createdAt"
],
"properties": {
"subject": {
"type": "string",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.graph.list": {
"type": "object",
"required": [
"name",
"purpose",
"createdAt"
],
"properties": {
"purpose": {
"$ref": "#/components/schemas/app.bsky.graph.defs.listPurpose"
},
"name": {
"type": "string",
"description": "Display name for list; can not be empty.",
"minLength": 1,
"maxLength": 64
},
"description": {
"type": "string",
"maxLength": 3000
},
"descriptionFacets": {
"type": "array",
"items": {
"$ref": "#/components/schemas/app.bsky.richtext.facet"
}
},
"avatar": {
"type": "string",
"format": "binary",
"maxLength": 1000000
},
"labels": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.label.defs.selfLabels"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.graph.listblock": {
"type": "object",
"required": [
"subject",
"createdAt"
],
"properties": {
"subject": {
"type": "string",
"description": "Reference (AT-URI) to the mod list record.",
"format": "at-uri"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.graph.listitem": {
"type": "object",
"required": [
"subject",
"list",
"createdAt"
],
"properties": {
"subject": {
"type": "string",
"description": "The account which is included on the list.",
"format": "did"
},
"list": {
"type": "string",
"description": "Reference (AT-URI) to the list record (app.bsky.graph.list).",
"format": "at-uri"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.labeler.defs.labelerView": {
"type": "object",
"required": [
"uri",
"cid",
"creator",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"creator": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
},
"likeCount": {
"type": "integer",
"minimum": 0
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.labeler.defs.labelerViewerState"
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
}
}
},
"app.bsky.labeler.defs.labelerViewDetailed": {
"type": "object",
"required": [
"uri",
"cid",
"creator",
"policies",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"creator": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
},
"policies": {
"$ref": "#/components/schemas/app.bsky.labeler.defs.labelerPolicies"
},
"likeCount": {
"type": "integer",
"minimum": 0
},
"viewer": {
"$ref": "#/components/schemas/app.bsky.labeler.defs.labelerViewerState"
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
}
}
},
"app.bsky.labeler.defs.labelerViewerState": {
"type": "object",
"properties": {
"like": {
"type": "string",
"format": "at-uri"
}
}
},
"app.bsky.labeler.defs.labelerPolicies": {
"type": "object",
"required": [
"labelValues"
],
"properties": {
"labelValues": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.labelValue"
}
},
"labelValueDefinitions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.labelValueDefinition"
}
}
}
},
"app.bsky.labeler.service": {
"type": "object",
"required": [
"policies",
"createdAt"
],
"properties": {
"policies": {
"$ref": "#/components/schemas/app.bsky.labeler.defs.labelerPolicies"
},
"labels": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.label.defs.selfLabels"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"app.bsky.notification.listNotifications.notification": {
"type": "object",
"required": [
"uri",
"cid",
"author",
"reason",
"record",
"isRead",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"author": {
"$ref": "#/components/schemas/app.bsky.actor.defs.profileView"
},
"reason": {
"type": "string",
"description": "Expected values are 'like', 'repost', 'follow', 'mention', 'reply', and 'quote'.",
"enum": [
"like",
"repost",
"follow",
"mention",
"reply",
"quote"
]
},
"reasonSubject": {
"type": "string",
"format": "at-uri"
},
"record": {},
"isRead": {
"type": "boolean"
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
}
}
},
"app.bsky.richtext.facet": {
"type": "object",
"description": "Annotation of a sub-string within rich text.",
"required": [
"index",
"features"
],
"properties": {
"index": {
"$ref": "#/components/schemas/app.bsky.richtext.facet.byteSlice"
},
"features": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/app.bsky.richtext.facet.mention"
},
{
"$ref": "#/components/schemas/app.bsky.richtext.facet.link"
},
{
"$ref": "#/components/schemas/app.bsky.richtext.facet.tag"
}
]
}
}
}
},
"app.bsky.richtext.facet.mention": {
"type": "object",
"description": "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"app.bsky.richtext.facet.link": {
"type": "object",
"description": "Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "uri"
}
}
},
"app.bsky.richtext.facet.tag": {
"type": "object",
"description": "Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').",
"required": [
"tag"
],
"properties": {
"tag": {
"type": "string",
"maxLength": 640
}
}
},
"app.bsky.richtext.facet.byteSlice": {
"type": "object",
"description": "Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.",
"required": [
"byteStart",
"byteEnd"
],
"properties": {
"byteStart": {
"type": "integer",
"minimum": 0
},
"byteEnd": {
"type": "integer",
"minimum": 0
}
}
},
"app.bsky.unspecced.defs.skeletonSearchPost": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
}
}
},
"app.bsky.unspecced.defs.skeletonSearchActor": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"app.bsky.unspecced.getTaggedSuggestions.suggestion": {
"type": "object",
"required": [
"tag",
"subjectType",
"subject"
],
"properties": {
"tag": {
"type": "string"
},
"subjectType": {
"type": "string",
"enum": [
"actor",
"feed"
]
},
"subject": {
"type": "string",
"format": "uri"
}
}
},
"com.atproto.admin.defs.statusAttr": {
"type": "object",
"required": [
"applied"
],
"properties": {
"applied": {
"type": "boolean"
},
"ref": {
"type": "string"
}
}
},
"com.atproto.admin.defs.accountView": {
"type": "object",
"required": [
"did",
"handle",
"indexedAt"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"email": {
"type": "string"
},
"relatedRecords": {
"type": "array",
"items": {}
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"invitedBy": {
"$ref": "#/components/schemas/com.atproto.server.defs.inviteCode"
},
"invites": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.server.defs.inviteCode"
}
},
"invitesDisabled": {
"type": "boolean"
},
"emailConfirmedAt": {
"type": "string",
"format": "date-time"
},
"inviteNote": {
"type": "string"
}
}
},
"com.atproto.admin.defs.repoRef": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"com.atproto.admin.defs.repoBlobRef": {
"type": "object",
"required": [
"did",
"cid"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"cid": {
"type": "string",
"format": "cid"
},
"recordUri": {
"type": "string",
"format": "at-uri"
}
}
},
"com.atproto.label.defs.label": {
"type": "object",
"description": "Metadata tag on an atproto resource (eg, repo or record).",
"required": [
"src",
"uri",
"val",
"cts"
],
"properties": {
"ver": {
"type": "integer"
},
"src": {
"type": "string",
"description": "DID of the actor who created this label.",
"format": "did"
},
"uri": {
"type": "string",
"description": "AT URI of the record, repository (account), or other resource that this label applies to.",
"format": "uri"
},
"cid": {
"type": "string",
"description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to.",
"format": "cid"
},
"val": {
"type": "string",
"description": "The short string name of the value or type of this label.",
"maxLength": 128
},
"neg": {
"type": "boolean",
"description": "If true, this is a negation label, overwriting a previous label."
},
"cts": {
"type": "string",
"description": "Timestamp when this label was created.",
"format": "date-time"
},
"exp": {
"type": "string",
"description": "Timestamp at which this label expires (no longer applies).",
"format": "date-time"
},
"sig": {
"type": "string",
"format": "byte",
"description": "Signature of dag-cbor encoded label."
}
}
},
"com.atproto.label.defs.selfLabels": {
"type": "object",
"description": "Metadata tags on an atproto record, published by the author within the record.",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.selfLabel"
},
"maxItems": 10
}
}
},
"com.atproto.label.defs.selfLabel": {
"type": "object",
"description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.",
"required": [
"val"
],
"properties": {
"val": {
"type": "string",
"description": "The short string name of the value or type of this label.",
"maxLength": 128
}
}
},
"com.atproto.label.defs.labelValueDefinition": {
"type": "object",
"description": "Declares a label value and its expected interpertations and behaviors.",
"required": [
"identifier",
"severity",
"blurs",
"locales"
],
"properties": {
"identifier": {
"type": "string",
"description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
"maxLength": 100
},
"severity": {
"type": "string",
"description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
"enum": [
"inform",
"alert",
"none"
]
},
"blurs": {
"type": "string",
"description": "What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
"enum": [
"content",
"media",
"none"
]
},
"defaultSetting": {
"type": "string",
"description": "The default setting for this label.",
"default": "warn",
"enum": [
"ignore",
"warn",
"hide"
]
},
"adultOnly": {
"type": "boolean",
"description": "Does the user need to have adult content enabled in order to configure this label?"
},
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.labelValueDefinitionStrings"
}
}
}
},
"com.atproto.label.defs.labelValueDefinitionStrings": {
"type": "object",
"description": "Strings which describe the label in the UI, localized into a specific language.",
"required": [
"lang",
"name",
"description"
],
"properties": {
"lang": {
"type": "string",
"description": "The code of the language these strings are written in.",
"format": "language"
},
"name": {
"type": "string",
"description": "A short human-readable name for the label.",
"maxLength": 640
},
"description": {
"type": "string",
"description": "A longer description of what the label means and why it might be applied.",
"maxLength": 100000
}
}
},
"com.atproto.label.defs.labelValue": {
"type": "string",
"enum": [
"!hide",
"!no-promote",
"!warn",
"!no-unauthenticated",
"dmca-violation",
"doxxing",
"porn",
"sexual",
"nudity",
"nsfl",
"gore"
]
},
"com.atproto.label.subscribeLabels.labels": {
"type": "object",
"required": [
"seq",
"labels"
],
"properties": {
"seq": {
"type": "integer"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
}
}
},
"com.atproto.label.subscribeLabels.info": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"enum": [
"OutdatedCursor"
]
},
"message": {
"type": "string"
}
}
},
"com.atproto.moderation.defs.reasonType": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonSpam"
},
{
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonViolation"
},
{
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonMisleading"
},
{
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonSexual"
},
{
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonRude"
},
{
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonOther"
},
{
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonAppeal"
}
]
},
"com.atproto.moderation.defs.reasonSpam": {
"type": "string",
"format": "token",
"description": "Spam: frequent unwanted promotion, replies, mentions"
},
"com.atproto.moderation.defs.reasonViolation": {
"type": "string",
"format": "token",
"description": "Direct violation of server rules, laws, terms of service"
},
"com.atproto.moderation.defs.reasonMisleading": {
"type": "string",
"format": "token",
"description": "Misleading identity, affiliation, or content"
},
"com.atproto.moderation.defs.reasonSexual": {
"type": "string",
"format": "token",
"description": "Unwanted or mislabeled sexual content"
},
"com.atproto.moderation.defs.reasonRude": {
"type": "string",
"format": "token",
"description": "Rude, harassing, explicit, or otherwise unwelcoming behavior"
},
"com.atproto.moderation.defs.reasonOther": {
"type": "string",
"format": "token",
"description": "Other: reports not falling under another report category"
},
"com.atproto.moderation.defs.reasonAppeal": {
"type": "string",
"format": "token",
"description": "Appeal: appeal a previously taken moderation action"
},
"com.atproto.repo.applyWrites.create": {
"type": "object",
"description": "Operation which creates a new record.",
"required": [
"collection",
"value"
],
"properties": {
"collection": {
"type": "string",
"format": "nsid"
},
"rkey": {
"type": "string",
"maxLength": 15
},
"value": {}
}
},
"com.atproto.repo.applyWrites.update": {
"type": "object",
"description": "Operation which updates an existing record.",
"required": [
"collection",
"rkey",
"value"
],
"properties": {
"collection": {
"type": "string",
"format": "nsid"
},
"rkey": {
"type": "string"
},
"value": {}
}
},
"com.atproto.repo.applyWrites.delete": {
"type": "object",
"description": "Operation which deletes an existing record.",
"required": [
"collection",
"rkey"
],
"properties": {
"collection": {
"type": "string",
"format": "nsid"
},
"rkey": {
"type": "string"
}
}
},
"com.atproto.repo.listMissingBlobs.recordBlob": {
"type": "object",
"required": [
"cid",
"recordUri"
],
"properties": {
"cid": {
"type": "string",
"format": "cid"
},
"recordUri": {
"type": "string",
"format": "at-uri"
}
}
},
"com.atproto.repo.listRecords.record": {
"type": "object",
"required": [
"uri",
"cid",
"value"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"value": {}
}
},
"com.atproto.repo.strongRef": {
"type": "object",
"required": [
"uri",
"cid"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
}
}
},
"com.atproto.server.createAppPassword.appPassword": {
"type": "object",
"required": [
"name",
"password",
"createdAt"
],
"properties": {
"name": {
"type": "string"
},
"password": {
"type": "string"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"com.atproto.server.createInviteCodes.accountCodes": {
"type": "object",
"required": [
"account",
"codes"
],
"properties": {
"account": {
"type": "string"
},
"codes": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"com.atproto.server.defs.inviteCode": {
"type": "object",
"required": [
"code",
"available",
"disabled",
"forAccount",
"createdBy",
"createdAt",
"uses"
],
"properties": {
"code": {
"type": "string"
},
"available": {
"type": "integer"
},
"disabled": {
"type": "boolean"
},
"forAccount": {
"type": "string"
},
"createdBy": {
"type": "string"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"uses": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.server.defs.inviteCodeUse"
}
}
}
},
"com.atproto.server.defs.inviteCodeUse": {
"type": "object",
"required": [
"usedBy",
"usedAt"
],
"properties": {
"usedBy": {
"type": "string",
"format": "did"
},
"usedAt": {
"type": "string",
"format": "date-time"
}
}
},
"com.atproto.server.describeServer.links": {
"type": "object",
"properties": {
"privacyPolicy": {
"type": "string"
},
"termsOfService": {
"type": "string"
}
}
},
"com.atproto.server.listAppPasswords.appPassword": {
"type": "object",
"required": [
"name",
"createdAt"
],
"properties": {
"name": {
"type": "string"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"com.atproto.sync.listRepos.repo": {
"type": "object",
"required": [
"did",
"head",
"rev"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"head": {
"type": "string",
"description": "Current repo commit CID",
"format": "cid"
},
"rev": {
"type": "string"
}
}
},
"com.atproto.sync.subscribeRepos.commit": {
"type": "object",
"description": "Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature.",
"required": [
"seq",
"rebase",
"tooBig",
"repo",
"commit",
"rev",
"since",
"blocks",
"ops",
"blobs",
"time"
],
"properties": {
"seq": {
"type": "integer"
},
"rebase": {
"type": "boolean",
"description": "DEPRECATED -- unused"
},
"tooBig": {
"type": "boolean",
"description": "Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data."
},
"repo": {
"type": "string",
"description": "The repo this event comes from.",
"format": "did"
},
"commit": {
"type": "string",
"format": "cid-link"
},
"prev": {
"type": "string",
"format": "cid-link"
},
"rev": {
"type": "string",
"description": "The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event."
},
"since": {
"type": "string",
"description": "The rev of the last emitted commit from this repo (if any)."
},
"blocks": {
"type": "string",
"format": "byte",
"description": "CAR file containing relevant blocks, as a diff since the previous repo state.",
"maxLength": 1000000
},
"ops": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.sync.subscribeRepos.repoOp"
},
"maxItems": 200
},
"blobs": {
"type": "array",
"items": {
"type": "string",
"format": "cid-link"
}
},
"time": {
"type": "string",
"description": "Timestamp of when this message was originally broadcast.",
"format": "date-time"
}
}
},
"com.atproto.sync.subscribeRepos.identity": {
"type": "object",
"description": "Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache.",
"required": [
"seq",
"did",
"time"
],
"properties": {
"seq": {
"type": "integer"
},
"did": {
"type": "string",
"format": "did"
},
"time": {
"type": "string",
"format": "date-time"
}
}
},
"com.atproto.sync.subscribeRepos.handle": {
"type": "object",
"description": "Represents an update of the account's handle, or transition to/from invalid state. NOTE: Will be deprecated in favor of #identity.",
"required": [
"seq",
"did",
"handle",
"time"
],
"properties": {
"seq": {
"type": "integer"
},
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"time": {
"type": "string",
"format": "date-time"
}
}
},
"com.atproto.sync.subscribeRepos.migrate": {
"type": "object",
"description": "Represents an account moving from one PDS instance to another. NOTE: not implemented; account migration uses #identity instead",
"required": [
"seq",
"did",
"migrateTo",
"time"
],
"properties": {
"seq": {
"type": "integer"
},
"did": {
"type": "string",
"format": "did"
},
"migrateTo": {
"type": "string"
},
"time": {
"type": "string",
"format": "date-time"
}
}
},
"com.atproto.sync.subscribeRepos.tombstone": {
"type": "object",
"description": "Indicates that an account has been deleted. NOTE: may be deprecated in favor of #identity or a future #account event",
"required": [
"seq",
"did",
"time"
],
"properties": {
"seq": {
"type": "integer"
},
"did": {
"type": "string",
"format": "did"
},
"time": {
"type": "string",
"format": "date-time"
}
}
},
"com.atproto.sync.subscribeRepos.info": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"enum": [
"OutdatedCursor"
]
},
"message": {
"type": "string"
}
}
},
"com.atproto.sync.subscribeRepos.repoOp": {
"type": "object",
"description": "A repo operation, ie a mutation of a single record.",
"required": [
"action",
"path",
"cid"
],
"properties": {
"action": {
"type": "string",
"enum": [
"create",
"update",
"delete"
]
},
"path": {
"type": "string"
},
"cid": {
"type": "string",
"format": "cid-link"
}
}
},
"tools.ozone.communication.defs.templateView": {
"type": "object",
"required": [
"id",
"name",
"contentMarkdown",
"disabled",
"lastUpdatedBy",
"createdAt",
"updatedAt"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string",
"description": "Name of the template."
},
"subject": {
"type": "string",
"description": "Content of the template, can contain markdown and variable placeholders."
},
"contentMarkdown": {
"type": "string",
"description": "Subject of the message, used in emails."
},
"disabled": {
"type": "boolean"
},
"lastUpdatedBy": {
"type": "string",
"description": "DID of the user who last updated the template.",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": "string",
"format": "date-time"
}
}
},
"tools.ozone.moderation.defs.modEventView": {
"type": "object",
"required": [
"id",
"event",
"subject",
"subjectBlobCids",
"createdBy",
"createdAt"
],
"properties": {
"id": {
"type": "integer"
},
"event": {
"oneOf": [
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventTakedown"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventReverseTakedown"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventComment"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventReport"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventLabel"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventAcknowledge"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventEscalate"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventMute"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventEmail"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventResolveAppeal"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventDivert"
}
]
},
"subject": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.admin.defs.repoRef"
},
{
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
}
]
},
"subjectBlobCids": {
"type": "array",
"items": {
"type": "string"
}
},
"createdBy": {
"type": "string",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"creatorHandle": {
"type": "string"
},
"subjectHandle": {
"type": "string"
}
}
},
"tools.ozone.moderation.defs.modEventViewDetail": {
"type": "object",
"required": [
"id",
"event",
"subject",
"subjectBlobs",
"createdBy",
"createdAt"
],
"properties": {
"id": {
"type": "integer"
},
"event": {
"oneOf": [
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventTakedown"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventReverseTakedown"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventComment"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventReport"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventLabel"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventAcknowledge"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventEscalate"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventMute"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventEmail"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventResolveAppeal"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.modEventDivert"
}
]
},
"subject": {
"oneOf": [
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.repoView"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.repoViewNotFound"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.recordView"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.recordViewNotFound"
}
]
},
"subjectBlobs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.blobView"
}
},
"createdBy": {
"type": "string",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"tools.ozone.moderation.defs.subjectStatusView": {
"type": "object",
"required": [
"id",
"subject",
"createdAt",
"updatedAt",
"reviewState"
],
"properties": {
"id": {
"type": "integer"
},
"subject": {
"oneOf": [
{
"$ref": "#/components/schemas/com.atproto.admin.defs.repoRef"
},
{
"$ref": "#/components/schemas/com.atproto.repo.strongRef"
}
]
},
"subjectBlobCids": {
"type": "array",
"items": {
"type": "string",
"format": "cid"
}
},
"subjectRepoHandle": {
"type": "string"
},
"updatedAt": {
"type": "string",
"description": "Timestamp referencing when the last update was made to the moderation status of the subject",
"format": "date-time"
},
"createdAt": {
"type": "string",
"description": "Timestamp referencing the first moderation status impacting event was emitted on the subject",
"format": "date-time"
},
"reviewState": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.subjectReviewState"
},
"comment": {
"type": "string",
"description": "Sticky comment on the subject."
},
"muteUntil": {
"type": "string",
"format": "date-time"
},
"lastReviewedBy": {
"type": "string",
"format": "did"
},
"lastReviewedAt": {
"type": "string",
"format": "date-time"
},
"lastReportedAt": {
"type": "string",
"format": "date-time"
},
"lastAppealedAt": {
"type": "string",
"description": "Timestamp referencing when the author of the subject appealed a moderation action",
"format": "date-time"
},
"takendown": {
"type": "boolean"
},
"appealed": {
"type": "boolean",
"description": "True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators."
},
"suspendUntil": {
"type": "string",
"format": "date-time"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"tools.ozone.moderation.defs.subjectReviewState": {
"type": "string",
"enum": [
"#reviewOpen",
"#reviewEscalated",
"#reviewClosed",
"#reviewNone"
]
},
"tools.ozone.moderation.defs.reviewOpen": {
"type": "string",
"format": "token",
"description": "Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator"
},
"tools.ozone.moderation.defs.reviewEscalated": {
"type": "string",
"format": "token",
"description": "Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator"
},
"tools.ozone.moderation.defs.reviewClosed": {
"type": "string",
"format": "token",
"description": "Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator"
},
"tools.ozone.moderation.defs.reviewNone": {
"type": "string",
"format": "token",
"description": "Moderator review status of a subject: Unnecessary. Indicates that the subject does not need a review at the moment but there is probably some moderation related metadata available for it"
},
"tools.ozone.moderation.defs.modEventTakedown": {
"type": "object",
"description": "Take down a subject permanently or temporarily",
"properties": {
"comment": {
"type": "string"
},
"durationInHours": {
"type": "integer"
}
}
},
"tools.ozone.moderation.defs.modEventReverseTakedown": {
"type": "object",
"description": "Revert take down action on a subject",
"properties": {
"comment": {
"type": "string",
"description": "Describe reasoning behind the reversal."
}
}
},
"tools.ozone.moderation.defs.modEventResolveAppeal": {
"type": "object",
"description": "Resolve appeal on a subject",
"properties": {
"comment": {
"type": "string",
"description": "Describe resolution."
}
}
},
"tools.ozone.moderation.defs.modEventComment": {
"type": "object",
"description": "Add a comment to a subject",
"required": [
"comment"
],
"properties": {
"comment": {
"type": "string"
},
"sticky": {
"type": "boolean",
"description": "Make the comment persistent on the subject"
}
}
},
"tools.ozone.moderation.defs.modEventReport": {
"type": "object",
"description": "Report a subject",
"required": [
"reportType"
],
"properties": {
"comment": {
"type": "string"
},
"reportType": {
"$ref": "#/components/schemas/com.atproto.moderation.defs.reasonType"
}
}
},
"tools.ozone.moderation.defs.modEventLabel": {
"type": "object",
"description": "Apply/Negate labels on a subject",
"required": [
"createLabelVals",
"negateLabelVals"
],
"properties": {
"comment": {
"type": "string"
},
"createLabelVals": {
"type": "array",
"items": {
"type": "string"
}
},
"negateLabelVals": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"tools.ozone.moderation.defs.modEventAcknowledge": {
"type": "object",
"properties": {
"comment": {
"type": "string"
}
}
},
"tools.ozone.moderation.defs.modEventEscalate": {
"type": "object",
"properties": {
"comment": {
"type": "string"
}
}
},
"tools.ozone.moderation.defs.modEventMute": {
"type": "object",
"description": "Mute incoming reports on a subject",
"required": [
"durationInHours"
],
"properties": {
"comment": {
"type": "string"
},
"durationInHours": {
"type": "integer"
}
}
},
"tools.ozone.moderation.defs.modEventUnmute": {
"type": "object",
"description": "Unmute action on a subject",
"properties": {
"comment": {
"type": "string",
"description": "Describe reasoning behind the reversal."
}
}
},
"tools.ozone.moderation.defs.modEventEmail": {
"type": "object",
"description": "Keep a log of outgoing email to a user",
"required": [
"subjectLine"
],
"properties": {
"subjectLine": {
"type": "string",
"description": "The subject line of the email sent to the user."
},
"content": {
"type": "string",
"description": "The content of the email sent to the user."
},
"comment": {
"type": "string",
"description": "Additional comment about the outgoing comm."
}
}
},
"tools.ozone.moderation.defs.modEventDivert": {
"type": "object",
"description": "Divert a record's blobs to a 3rd party service for further scanning/tagging",
"properties": {
"comment": {
"type": "string"
}
}
},
"tools.ozone.moderation.defs.modEventTag": {
"type": "object",
"description": "Add/Remove a tag on a subject",
"required": [
"add",
"remove"
],
"properties": {
"add": {
"type": "array",
"items": {
"type": "string"
}
},
"remove": {
"type": "array",
"items": {
"type": "string"
}
},
"comment": {
"type": "string",
"description": "Additional comment about added/removed tags."
}
}
},
"tools.ozone.moderation.defs.repoView": {
"type": "object",
"required": [
"did",
"handle",
"relatedRecords",
"indexedAt",
"moderation"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"email": {
"type": "string"
},
"relatedRecords": {
"type": "array",
"items": {}
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"moderation": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.moderation"
},
"invitedBy": {
"$ref": "#/components/schemas/com.atproto.server.defs.inviteCode"
},
"invitesDisabled": {
"type": "boolean"
},
"inviteNote": {
"type": "string"
}
}
},
"tools.ozone.moderation.defs.repoViewDetail": {
"type": "object",
"required": [
"did",
"handle",
"relatedRecords",
"indexedAt",
"moderation"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"email": {
"type": "string"
},
"relatedRecords": {
"type": "array",
"items": {}
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"moderation": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.moderationDetail"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
},
"invitedBy": {
"$ref": "#/components/schemas/com.atproto.server.defs.inviteCode"
},
"invites": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.server.defs.inviteCode"
}
},
"invitesDisabled": {
"type": "boolean"
},
"inviteNote": {
"type": "string"
},
"emailConfirmedAt": {
"type": "string",
"format": "date-time"
}
}
},
"tools.ozone.moderation.defs.repoViewNotFound": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"tools.ozone.moderation.defs.recordView": {
"type": "object",
"required": [
"uri",
"cid",
"value",
"blobCids",
"indexedAt",
"moderation",
"repo"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"value": {},
"blobCids": {
"type": "array",
"items": {
"type": "string",
"format": "cid"
}
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"moderation": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.moderation"
},
"repo": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.repoView"
}
}
},
"tools.ozone.moderation.defs.recordViewDetail": {
"type": "object",
"required": [
"uri",
"cid",
"value",
"blobs",
"indexedAt",
"moderation",
"repo"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"value": {},
"blobs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.blobView"
}
},
"labels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/com.atproto.label.defs.label"
}
},
"indexedAt": {
"type": "string",
"format": "date-time"
},
"moderation": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.moderationDetail"
},
"repo": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.repoView"
}
}
},
"tools.ozone.moderation.defs.recordViewNotFound": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
}
}
},
"tools.ozone.moderation.defs.moderation": {
"type": "object",
"properties": {
"subjectStatus": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.subjectStatusView"
}
}
},
"tools.ozone.moderation.defs.moderationDetail": {
"type": "object",
"properties": {
"subjectStatus": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.subjectStatusView"
}
}
},
"tools.ozone.moderation.defs.blobView": {
"type": "object",
"required": [
"cid",
"mimeType",
"size",
"createdAt"
],
"properties": {
"cid": {
"type": "string",
"format": "cid"
},
"mimeType": {
"type": "string"
},
"size": {
"type": "integer"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"details": {
"oneOf": [
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.imageDetails"
},
{
"$ref": "#/components/schemas/tools.ozone.moderation.defs.videoDetails"
}
]
},
"moderation": {
"$ref": "#/components/schemas/tools.ozone.moderation.defs.moderation"
}
}
},
"tools.ozone.moderation.defs.imageDetails": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "integer"
},
"height": {
"type": "integer"
}
}
},
"tools.ozone.moderation.defs.videoDetails": {
"type": "object",
"required": [
"width",
"height",
"length"
],
"properties": {
"width": {
"type": "integer"
},
"height": {
"type": "integer"
},
"length": {
"type": "integer"
}
}
}
},
"securitySchemes": {
"Bearer": {
"type": "http",
"scheme": "bearer"
}
}
},
"tags": [
{
"name": "app.bsky.actor"
},
{
"name": "app.bsky.embed"
},
{
"name": "app.bsky.feed"
},
{
"name": "app.bsky.graph"
},
{
"name": "app.bsky.labeler"
},
{
"name": "app.bsky.notification"
},
{
"name": "app.bsky.richtext"
},
{
"name": "app.bsky.unspecced"
},
{
"name": "com.atproto.admin"
},
{
"name": "com.atproto.identity"
},
{
"name": "com.atproto.label"
},
{
"name": "com.atproto.moderation"
},
{
"name": "com.atproto.repo"
},
{
"name": "com.atproto.server"
},
{
"name": "com.atproto.sync"
},
{
"name": "com.atproto.temp"
},
{
"name": "tools.ozone.communication"
},
{
"name": "tools.ozone.moderation"
}
]
}