@atproto/api
Version:
Client library for atproto and Bluesky
1,802 lines (1,800 loc) • 518 kB
text/typescript
/**
* GENERATED CODE - DO NOT MODIFY
*/
import {
type LexiconDoc,
Lexicons,
ValidationError,
type ValidationResult,
} from '@atproto/lexicon'
import { type $Typed, is$typed, maybe$typed } from './util.js'
export const schemaDict = {
ComAtprotoAdminDefs: {
lexicon: 1,
id: 'com.atproto.admin.defs',
defs: {
statusAttr: {
type: 'object',
required: ['applied'],
properties: {
applied: {
type: 'boolean',
},
ref: {
type: 'string',
},
},
},
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: {
type: 'unknown',
},
},
indexedAt: {
type: 'string',
format: 'datetime',
},
invitedBy: {
type: 'ref',
ref: 'lex:com.atproto.server.defs#inviteCode',
},
invites: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.server.defs#inviteCode',
},
},
invitesDisabled: {
type: 'boolean',
},
emailConfirmedAt: {
type: 'string',
format: 'datetime',
},
inviteNote: {
type: 'string',
},
deactivatedAt: {
type: 'string',
format: 'datetime',
},
threatSignatures: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#threatSignature',
},
},
},
},
repoRef: {
type: 'object',
required: ['did'],
properties: {
did: {
type: 'string',
format: 'did',
},
},
},
repoBlobRef: {
type: 'object',
required: ['did', 'cid'],
properties: {
did: {
type: 'string',
format: 'did',
},
cid: {
type: 'string',
format: 'cid',
},
recordUri: {
type: 'string',
format: 'at-uri',
},
},
},
threatSignature: {
type: 'object',
required: ['property', 'value'],
properties: {
property: {
type: 'string',
},
value: {
type: 'string',
},
},
},
},
},
ComAtprotoAdminDeleteAccount: {
lexicon: 1,
id: 'com.atproto.admin.deleteAccount',
defs: {
main: {
type: 'procedure',
description: 'Delete a user account as an administrator.',
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['did'],
properties: {
did: {
type: 'string',
format: 'did',
},
},
},
},
},
},
},
ComAtprotoAdminDisableAccountInvites: {
lexicon: 1,
id: 'com.atproto.admin.disableAccountInvites',
defs: {
main: {
type: 'procedure',
description:
'Disable an account from receiving new invite codes, but does not invalidate existing codes.',
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['account'],
properties: {
account: {
type: 'string',
format: 'did',
},
note: {
type: 'string',
description: 'Optional reason for disabled invites.',
},
},
},
},
},
},
},
ComAtprotoAdminDisableInviteCodes: {
lexicon: 1,
id: 'com.atproto.admin.disableInviteCodes',
defs: {
main: {
type: 'procedure',
description:
'Disable some set of codes and/or all codes associated with a set of users.',
input: {
encoding: 'application/json',
schema: {
type: 'object',
properties: {
codes: {
type: 'array',
items: {
type: 'string',
},
},
accounts: {
type: 'array',
items: {
type: 'string',
},
},
},
},
},
},
},
},
ComAtprotoAdminEnableAccountInvites: {
lexicon: 1,
id: 'com.atproto.admin.enableAccountInvites',
defs: {
main: {
type: 'procedure',
description: "Re-enable an account's ability to receive invite codes.",
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['account'],
properties: {
account: {
type: 'string',
format: 'did',
},
note: {
type: 'string',
description: 'Optional reason for enabled invites.',
},
},
},
},
},
},
},
ComAtprotoAdminGetAccountInfo: {
lexicon: 1,
id: 'com.atproto.admin.getAccountInfo',
defs: {
main: {
type: 'query',
description: 'Get details about an account.',
parameters: {
type: 'params',
required: ['did'],
properties: {
did: {
type: 'string',
format: 'did',
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#accountView',
},
},
},
},
},
ComAtprotoAdminGetAccountInfos: {
lexicon: 1,
id: 'com.atproto.admin.getAccountInfos',
defs: {
main: {
type: 'query',
description: 'Get details about some accounts.',
parameters: {
type: 'params',
required: ['dids'],
properties: {
dids: {
type: 'array',
items: {
type: 'string',
format: 'did',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['infos'],
properties: {
infos: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#accountView',
},
},
},
},
},
},
},
},
ComAtprotoAdminGetInviteCodes: {
lexicon: 1,
id: 'com.atproto.admin.getInviteCodes',
defs: {
main: {
type: 'query',
description: 'Get an admin view of invite codes.',
parameters: {
type: 'params',
properties: {
sort: {
type: 'string',
knownValues: ['recent', 'usage'],
default: 'recent',
},
limit: {
type: 'integer',
minimum: 1,
maximum: 500,
default: 100,
},
cursor: {
type: 'string',
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['codes'],
properties: {
cursor: {
type: 'string',
},
codes: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.server.defs#inviteCode',
},
},
},
},
},
},
},
},
ComAtprotoAdminGetSubjectStatus: {
lexicon: 1,
id: 'com.atproto.admin.getSubjectStatus',
defs: {
main: {
type: 'query',
description:
'Get the service-specific admin status of a subject (account, record, or blob).',
parameters: {
type: 'params',
properties: {
did: {
type: 'string',
format: 'did',
},
uri: {
type: 'string',
format: 'at-uri',
},
blob: {
type: 'string',
format: 'cid',
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['subject'],
properties: {
subject: {
type: 'union',
refs: [
'lex:com.atproto.admin.defs#repoRef',
'lex:com.atproto.repo.strongRef',
'lex:com.atproto.admin.defs#repoBlobRef',
],
},
takedown: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#statusAttr',
},
deactivated: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#statusAttr',
},
},
},
},
},
},
},
ComAtprotoAdminSearchAccounts: {
lexicon: 1,
id: 'com.atproto.admin.searchAccounts',
defs: {
main: {
type: 'query',
description: 'Get list of accounts that matches your search query.',
parameters: {
type: 'params',
properties: {
email: {
type: 'string',
},
cursor: {
type: 'string',
},
limit: {
type: 'integer',
minimum: 1,
maximum: 100,
default: 50,
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['accounts'],
properties: {
cursor: {
type: 'string',
},
accounts: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#accountView',
},
},
},
},
},
},
},
},
ComAtprotoAdminSendEmail: {
lexicon: 1,
id: 'com.atproto.admin.sendEmail',
defs: {
main: {
type: 'procedure',
description: "Send email to a user's account email address.",
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['recipientDid', 'content', 'senderDid'],
properties: {
recipientDid: {
type: 'string',
format: 'did',
},
content: {
type: 'string',
},
subject: {
type: 'string',
},
senderDid: {
type: 'string',
format: 'did',
},
comment: {
type: 'string',
description:
"Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers",
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['sent'],
properties: {
sent: {
type: 'boolean',
},
},
},
},
},
},
},
ComAtprotoAdminUpdateAccountEmail: {
lexicon: 1,
id: 'com.atproto.admin.updateAccountEmail',
defs: {
main: {
type: 'procedure',
description: "Administrative action to update an account's email.",
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['account', 'email'],
properties: {
account: {
type: 'string',
format: 'at-identifier',
description: 'The handle or DID of the repo.',
},
email: {
type: 'string',
},
},
},
},
},
},
},
ComAtprotoAdminUpdateAccountHandle: {
lexicon: 1,
id: 'com.atproto.admin.updateAccountHandle',
defs: {
main: {
type: 'procedure',
description: "Administrative action to update an account's handle.",
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['did', 'handle'],
properties: {
did: {
type: 'string',
format: 'did',
},
handle: {
type: 'string',
format: 'handle',
},
},
},
},
},
},
},
ComAtprotoAdminUpdateAccountPassword: {
lexicon: 1,
id: 'com.atproto.admin.updateAccountPassword',
defs: {
main: {
type: 'procedure',
description:
'Update the password for a user account as an administrator.',
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['did', 'password'],
properties: {
did: {
type: 'string',
format: 'did',
},
password: {
type: 'string',
},
},
},
},
},
},
},
ComAtprotoAdminUpdateAccountSigningKey: {
lexicon: 1,
id: 'com.atproto.admin.updateAccountSigningKey',
defs: {
main: {
type: 'procedure',
description:
"Administrative action to update an account's signing key in their Did document.",
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['did', 'signingKey'],
properties: {
did: {
type: 'string',
format: 'did',
},
signingKey: {
type: 'string',
format: 'did',
description: 'Did-key formatted public key',
},
},
},
},
},
},
},
ComAtprotoAdminUpdateSubjectStatus: {
lexicon: 1,
id: 'com.atproto.admin.updateSubjectStatus',
defs: {
main: {
type: 'procedure',
description:
'Update the service-specific admin status of a subject (account, record, or blob).',
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['subject'],
properties: {
subject: {
type: 'union',
refs: [
'lex:com.atproto.admin.defs#repoRef',
'lex:com.atproto.repo.strongRef',
'lex:com.atproto.admin.defs#repoBlobRef',
],
},
takedown: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#statusAttr',
},
deactivated: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#statusAttr',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['subject'],
properties: {
subject: {
type: 'union',
refs: [
'lex:com.atproto.admin.defs#repoRef',
'lex:com.atproto.repo.strongRef',
'lex:com.atproto.admin.defs#repoBlobRef',
],
},
takedown: {
type: 'ref',
ref: 'lex:com.atproto.admin.defs#statusAttr',
},
},
},
},
},
},
},
ComAtprotoIdentityDefs: {
lexicon: 1,
id: 'com.atproto.identity.defs',
defs: {
identityInfo: {
type: 'object',
required: ['did', 'handle', 'didDoc'],
properties: {
did: {
type: 'string',
format: 'did',
},
handle: {
type: 'string',
format: 'handle',
description:
"The validated handle of the account; or 'handle.invalid' if the handle did not bi-directionally match the DID document.",
},
didDoc: {
type: 'unknown',
description: 'The complete DID document for the identity.',
},
},
},
},
},
ComAtprotoIdentityGetRecommendedDidCredentials: {
lexicon: 1,
id: 'com.atproto.identity.getRecommendedDidCredentials',
defs: {
main: {
type: 'query',
description:
'Describe the credentials that should be included in the DID doc of an account that is migrating to this service.',
output: {
encoding: 'application/json',
schema: {
type: 'object',
properties: {
rotationKeys: {
description:
'Recommended rotation keys for PLC dids. Should be undefined (or ignored) for did:webs.',
type: 'array',
items: {
type: 'string',
},
},
alsoKnownAs: {
type: 'array',
items: {
type: 'string',
},
},
verificationMethods: {
type: 'unknown',
},
services: {
type: 'unknown',
},
},
},
},
},
},
},
ComAtprotoIdentityRefreshIdentity: {
lexicon: 1,
id: 'com.atproto.identity.refreshIdentity',
defs: {
main: {
type: 'procedure',
description:
'Request that the server re-resolve an identity (DID and handle). The server may ignore this request, or require authentication, depending on the role, implementation, and policy of the server.',
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['identifier'],
properties: {
identifier: {
type: 'string',
format: 'at-identifier',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'ref',
ref: 'lex:com.atproto.identity.defs#identityInfo',
},
},
errors: [
{
name: 'HandleNotFound',
description:
'The resolution process confirmed that the handle does not resolve to any DID.',
},
{
name: 'DidNotFound',
description:
'The DID resolution process confirmed that there is no current DID.',
},
{
name: 'DidDeactivated',
description:
'The DID previously existed, but has been deactivated.',
},
],
},
},
},
ComAtprotoIdentityRequestPlcOperationSignature: {
lexicon: 1,
id: 'com.atproto.identity.requestPlcOperationSignature',
defs: {
main: {
type: 'procedure',
description:
'Request an email with a code to in order to request a signed PLC operation. Requires Auth.',
},
},
},
ComAtprotoIdentityResolveDid: {
lexicon: 1,
id: 'com.atproto.identity.resolveDid',
defs: {
main: {
type: 'query',
description:
'Resolves DID to DID document. Does not bi-directionally verify handle.',
parameters: {
type: 'params',
required: ['did'],
properties: {
did: {
type: 'string',
format: 'did',
description: 'DID to resolve.',
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['didDoc'],
properties: {
didDoc: {
type: 'unknown',
description: 'The complete DID document for the identity.',
},
},
},
},
errors: [
{
name: 'DidNotFound',
description:
'The DID resolution process confirmed that there is no current DID.',
},
{
name: 'DidDeactivated',
description:
'The DID previously existed, but has been deactivated.',
},
],
},
},
},
ComAtprotoIdentityResolveHandle: {
lexicon: 1,
id: 'com.atproto.identity.resolveHandle',
defs: {
main: {
type: 'query',
description:
'Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.',
parameters: {
type: 'params',
required: ['handle'],
properties: {
handle: {
type: 'string',
format: 'handle',
description: 'The handle to resolve.',
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['did'],
properties: {
did: {
type: 'string',
format: 'did',
},
},
},
},
errors: [
{
name: 'HandleNotFound',
description:
'The resolution process confirmed that the handle does not resolve to any DID.',
},
],
},
},
},
ComAtprotoIdentityResolveIdentity: {
lexicon: 1,
id: 'com.atproto.identity.resolveIdentity',
defs: {
main: {
type: 'query',
description:
'Resolves an identity (DID or Handle) to a full identity (DID document and verified handle).',
parameters: {
type: 'params',
required: ['identifier'],
properties: {
identifier: {
type: 'string',
format: 'at-identifier',
description: 'Handle or DID to resolve.',
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'ref',
ref: 'lex:com.atproto.identity.defs#identityInfo',
},
},
errors: [
{
name: 'HandleNotFound',
description:
'The resolution process confirmed that the handle does not resolve to any DID.',
},
{
name: 'DidNotFound',
description:
'The DID resolution process confirmed that there is no current DID.',
},
{
name: 'DidDeactivated',
description:
'The DID previously existed, but has been deactivated.',
},
],
},
},
},
ComAtprotoIdentitySignPlcOperation: {
lexicon: 1,
id: 'com.atproto.identity.signPlcOperation',
defs: {
main: {
type: 'procedure',
description:
"Signs a PLC operation to update some value(s) in the requesting DID's document.",
input: {
encoding: 'application/json',
schema: {
type: 'object',
properties: {
token: {
description:
'A token received through com.atproto.identity.requestPlcOperationSignature',
type: 'string',
},
rotationKeys: {
type: 'array',
items: {
type: 'string',
},
},
alsoKnownAs: {
type: 'array',
items: {
type: 'string',
},
},
verificationMethods: {
type: 'unknown',
},
services: {
type: 'unknown',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['operation'],
properties: {
operation: {
type: 'unknown',
description: 'A signed DID PLC operation.',
},
},
},
},
},
},
},
ComAtprotoIdentitySubmitPlcOperation: {
lexicon: 1,
id: 'com.atproto.identity.submitPlcOperation',
defs: {
main: {
type: 'procedure',
description:
"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",
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['operation'],
properties: {
operation: {
type: 'unknown',
},
},
},
},
},
},
},
ComAtprotoIdentityUpdateHandle: {
lexicon: 1,
id: 'com.atproto.identity.updateHandle',
defs: {
main: {
type: 'procedure',
description:
"Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.",
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['handle'],
properties: {
handle: {
type: 'string',
format: 'handle',
description: 'The new handle.',
},
},
},
},
},
},
},
ComAtprotoLabelDefs: {
lexicon: 1,
id: 'com.atproto.label.defs',
defs: {
label: {
type: 'object',
description:
'Metadata tag on an atproto resource (eg, repo or record).',
required: ['src', 'uri', 'val', 'cts'],
properties: {
ver: {
type: 'integer',
description: 'The AT Protocol version of the label object.',
},
src: {
type: 'string',
format: 'did',
description: 'DID of the actor who created this label.',
},
uri: {
type: 'string',
format: 'uri',
description:
'AT URI of the record, repository (account), or other resource that this label applies to.',
},
cid: {
type: 'string',
format: 'cid',
description:
"Optionally, CID specifying the specific version of 'uri' resource this label applies to.",
},
val: {
type: 'string',
maxLength: 128,
description:
'The short string name of the value or type of this label.',
},
neg: {
type: 'boolean',
description:
'If true, this is a negation label, overwriting a previous label.',
},
cts: {
type: 'string',
format: 'datetime',
description: 'Timestamp when this label was created.',
},
exp: {
type: 'string',
format: 'datetime',
description:
'Timestamp at which this label expires (no longer applies).',
},
sig: {
type: 'bytes',
description: 'Signature of dag-cbor encoded label.',
},
},
},
selfLabels: {
type: 'object',
description:
'Metadata tags on an atproto record, published by the author within the record.',
required: ['values'],
properties: {
values: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.label.defs#selfLabel',
},
maxLength: 10,
},
},
},
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',
maxLength: 128,
description:
'The short string name of the value or type of this label.',
},
},
},
labelValueDefinition: {
type: 'object',
description:
'Declares a label value and its expected interpretations 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,
maxGraphemes: 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.",
knownValues: ['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.",
knownValues: ['content', 'media', 'none'],
},
defaultSetting: {
type: 'string',
description: 'The default setting for this label.',
knownValues: ['ignore', 'warn', 'hide'],
default: 'warn',
},
adultOnly: {
type: 'boolean',
description:
'Does the user need to have adult content enabled in order to configure this label?',
},
locales: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings',
},
},
},
},
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.',
maxGraphemes: 64,
maxLength: 640,
},
description: {
type: 'string',
description:
'A longer description of what the label means and why it might be applied.',
maxGraphemes: 10000,
maxLength: 100000,
},
},
},
labelValue: {
type: 'string',
knownValues: [
'!hide',
'!no-promote',
'!warn',
'!no-unauthenticated',
'dmca-violation',
'doxxing',
'porn',
'sexual',
'nudity',
'nsfl',
'gore',
],
},
},
},
ComAtprotoLabelQueryLabels: {
lexicon: 1,
id: 'com.atproto.label.queryLabels',
defs: {
main: {
type: 'query',
description:
'Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.',
parameters: {
type: 'params',
required: ['uriPatterns'],
properties: {
uriPatterns: {
type: 'array',
items: {
type: 'string',
},
description:
"List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI.",
},
sources: {
type: 'array',
items: {
type: 'string',
format: 'did',
},
description:
'Optional list of label sources (DIDs) to filter on.',
},
limit: {
type: 'integer',
minimum: 1,
maximum: 250,
default: 50,
},
cursor: {
type: 'string',
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['labels'],
properties: {
cursor: {
type: 'string',
},
labels: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.label.defs#label',
},
},
},
},
},
},
},
},
ComAtprotoLabelSubscribeLabels: {
lexicon: 1,
id: 'com.atproto.label.subscribeLabels',
defs: {
main: {
type: 'subscription',
description:
'Subscribe to stream of labels (and negations). Public endpoint implemented by mod services. Uses same sequencing scheme as repo event stream.',
parameters: {
type: 'params',
properties: {
cursor: {
type: 'integer',
description: 'The last known event seq number to backfill from.',
},
},
},
message: {
schema: {
type: 'union',
refs: [
'lex:com.atproto.label.subscribeLabels#labels',
'lex:com.atproto.label.subscribeLabels#info',
],
},
},
errors: [
{
name: 'FutureCursor',
},
],
},
labels: {
type: 'object',
required: ['seq', 'labels'],
properties: {
seq: {
type: 'integer',
},
labels: {
type: 'array',
items: {
type: 'ref',
ref: 'lex:com.atproto.label.defs#label',
},
},
},
},
info: {
type: 'object',
required: ['name'],
properties: {
name: {
type: 'string',
knownValues: ['OutdatedCursor'],
},
message: {
type: 'string',
},
},
},
},
},
ComAtprotoLexiconSchema: {
lexicon: 1,
id: 'com.atproto.lexicon.schema',
defs: {
main: {
type: 'record',
description:
"Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc).",
key: 'nsid',
record: {
type: 'object',
required: ['lexicon'],
properties: {
lexicon: {
type: 'integer',
description:
"Indicates the 'version' of the Lexicon language. Must be '1' for the current atproto/Lexicon schema system.",
},
},
},
},
},
},
ComAtprotoModerationCreateReport: {
lexicon: 1,
id: 'com.atproto.moderation.createReport',
defs: {
main: {
type: 'procedure',
description:
'Submit a moderation report regarding an atproto account or record. Implemented by moderation services (with PDS proxying), and requires auth.',
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['reasonType', 'subject'],
properties: {
reasonType: {
type: 'ref',
description:
'Indicates the broad category of violation the report is for.',
ref: 'lex:com.atproto.moderation.defs#reasonType',
},
reason: {
type: 'string',
maxGraphemes: 2000,
maxLength: 20000,
description:
'Additional context about the content and violation.',
},
subject: {
type: 'union',
refs: [
'lex:com.atproto.admin.defs#repoRef',
'lex:com.atproto.repo.strongRef',
],
},
modTool: {
type: 'ref',
ref: 'lex:com.atproto.moderation.createReport#modTool',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: [
'id',
'reasonType',
'subject',
'reportedBy',
'createdAt',
],
properties: {
id: {
type: 'integer',
},
reasonType: {
type: 'ref',
ref: 'lex:com.atproto.moderation.defs#reasonType',
},
reason: {
type: 'string',
maxGraphemes: 2000,
maxLength: 20000,
},
subject: {
type: 'union',
refs: [
'lex:com.atproto.admin.defs#repoRef',
'lex:com.atproto.repo.strongRef',
],
},
reportedBy: {
type: 'string',
format: 'did',
},
createdAt: {
type: 'string',
format: 'datetime',
},
},
},
},
},
modTool: {
type: 'object',
description:
'Moderation tool information for tracing the source of the action',
required: ['name'],
properties: {
name: {
type: 'string',
description:
"Name/identifier of the source (e.g., 'bsky-app/android', 'bsky-web/chrome')",
},
meta: {
type: 'unknown',
description: 'Additional arbitrary metadata about the source',
},
},
},
},
},
ComAtprotoModerationDefs: {
lexicon: 1,
id: 'com.atproto.moderation.defs',
defs: {
reasonType: {
type: 'string',
knownValues: [
'com.atproto.moderation.defs#reasonSpam',
'com.atproto.moderation.defs#reasonViolation',
'com.atproto.moderation.defs#reasonMisleading',
'com.atproto.moderation.defs#reasonSexual',
'com.atproto.moderation.defs#reasonRude',
'com.atproto.moderation.defs#reasonOther',
'com.atproto.moderation.defs#reasonAppeal',
],
},
reasonSpam: {
type: 'token',
description: 'Spam: frequent unwanted promotion, replies, mentions',
},
reasonViolation: {
type: 'token',
description: 'Direct violation of server rules, laws, terms of service',
},
reasonMisleading: {
type: 'token',
description: 'Misleading identity, affiliation, or content',
},
reasonSexual: {
type: 'token',
description: 'Unwanted or mislabeled sexual content',
},
reasonRude: {
type: 'token',
description:
'Rude, harassing, explicit, or otherwise unwelcoming behavior',
},
reasonOther: {
type: 'token',
description: 'Other: reports not falling under another report category',
},
reasonAppeal: {
type: 'token',
description: 'Appeal: appeal a previously taken moderation action',
},
subjectType: {
type: 'string',
description: 'Tag describing a type of subject that might be reported.',
knownValues: ['account', 'record', 'chat'],
},
},
},
ComAtprotoRepoApplyWrites: {
lexicon: 1,
id: 'com.atproto.repo.applyWrites',
defs: {
main: {
type: 'procedure',
description:
'Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.',
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['repo', 'writes'],
properties: {
repo: {
type: 'string',
format: 'at-identifier',
description:
'The handle or DID of the repo (aka, current account).',
},
validate: {
type: 'boolean',
description:
"Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons.",
},
writes: {
type: 'array',
items: {
type: 'union',
refs: [
'lex:com.atproto.repo.applyWrites#create',
'lex:com.atproto.repo.applyWrites#update',
'lex:com.atproto.repo.applyWrites#delete',
],
closed: true,
},
},
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',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: [],
properties: {
commit: {
type: 'ref',
ref: 'lex:com.atproto.repo.defs#commitMeta',
},
results: {
type: 'array',
items: {
type: 'union',
refs: [
'lex:com.atproto.repo.applyWrites#createResult',
'lex:com.atproto.repo.applyWrites#updateResult',
'lex:com.atproto.repo.applyWrites#deleteResult',
],
closed: true,
},
},
},
},
},
errors: [
{
name: 'InvalidSwap',
description:
"Indicates that the 'swapCommit' parameter did not match current commit.",
},
],
},
create: {
type: 'object',
description: 'Operation which creates a new record.',
required: ['collection', 'value'],
properties: {
collection: {
type: 'string',
format: 'nsid',
},
rkey: {
type: 'string',
maxLength: 512,
format: 'record-key',
description:
'NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.',
},
value: {
type: 'unknown',
},
},
},
update: {
type: 'object',
description: 'Operation which updates an existing record.',
required: ['collection', 'rkey', 'value'],
properties: {
collection: {
type: 'string',
format: 'nsid',
},
rkey: {
type: 'string',
format: 'record-key',
},
value: {
type: 'unknown',
},
},
},
delete: {
type: 'object',
description: 'Operation which deletes an existing record.',
required: ['collection', 'rkey'],
properties: {
collection: {
type: 'string',
format: 'nsid',
},
rkey: {
type: 'string',
format: 'record-key',
},
},
},
createResult: {
type: 'object',
required: ['uri', 'cid'],
properties: {
uri: {
type: 'string',
format: 'at-uri',
},
cid: {
type: 'string',
format: 'cid',
},
validationStatus: {
type: 'string',
knownValues: ['valid', 'unknown'],
},
},
},
updateResult: {
type: 'object',
required: ['uri', 'cid'],
properties: {
uri: {
type: 'string',
format: 'at-uri',
},
cid: {
type: 'string',
format: 'cid',
},
validationStatus: {
type: 'string',
knownValues: ['valid', 'unknown'],
},
},
},
deleteResult: {
type: 'object',
required: [],
properties: {},
},
},
},
ComAtprotoRepoCreateRecord: {
lexicon: 1,
id: 'com.atproto.repo.createRecord',
defs: {
main: {
type: 'procedure',
description:
'Create a single new repository record. Requires auth, implemented by PDS.',
input: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['repo', 'collection', 'record'],
properties: {
repo: {
type: 'string',
format: 'at-identifier',
description:
'The handle or DID of the repo (aka, current account).',
},
collection: {
type: 'string',
format: 'nsid',
description: 'The NSID of the record collection.',
},
rkey: {
type: 'string',
format: 'record-key',
description: 'The Record Key.',
maxLength: 512,
},
validate: {
type: 'boolean',
description:
"Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.",
},
record: {
type: 'unknown',
description: 'The record itself. Must contain a $type field.',
},
swapCommit: {
type: 'string',
format: 'cid',
description:
'Compare and swap with the previous commit by CID.',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['uri', 'cid'],
properties: {
uri: {
type: 'string',
format: 'at-uri',
},
cid: {
type: 'string',
format: 'cid',
},
commit: {
type: 'ref',
ref: 'lex:com.atproto.repo.defs#commitMeta',
},
validationStatus: {
type: 'string',
knownValues: ['valid', 'unknown'],
},
},
},
},
errors: [
{
name: 'InvalidSwap',
description:
"Indicates that 'swapCommit' didn't match current repo commit.",
},
],
},
},
},
ComAtprotoRepoDefs: {
lexicon: 1,
id: 'com.atproto.repo.defs',
defs: {
commitMeta: {
type: 'object',
required: ['cid', 'rev'],
properties: {
cid: {
type: 'string',
format: 'cid',
},
rev: {
type: 'string',
format: 'tid',
},
},
},
},
},
ComAtprotoRepoDeleteRecord: {
lexicon: 1,
id: 'com.atproto.repo.deleteRecord',
defs: {
main: {
type: 'procedure',
description:
"Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.",
input: {