<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-newbold-at-architecture-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="AT Architecture">Authenticated Transfer: Architecture Overview</title>
    <seriesInfo name="Internet-Draft" value="draft-newbold-at-architecture-00"/>
    <author fullname="Bryan Newbold">
      <organization>Bluesky Social</organization>
      <address>
        <email>bryan@blueskyweb.xyz</email>
      </address>
    </author>
    <author fullname="Daniel Holmgren">
      <organization>Bluesky Social</organization>
      <address>
        <email>daniel@blueskyweb.xyz</email>
      </address>
    </author>
    <date year="2025" month="September" day="14"/>
    <area>Applications and Real-Time Area</area>
    <abstract>
      <?line 194?>

<t>Authenticated Transfer (AT) is a collection of protocol components that together provide a generic framework for interoperable social web applications, using global aggregations of interlinked, self-certifying data records.</t>
      <t>This informational document provides an overview of the entire system, as implemented in late 2025. Some of those components may be in scope as work for the IETF, while other components may not. Many components are general-purpose and may find use outside of the context of AT. The intent of this document is to provide context for how all the components can fit together for certain use cases.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-newbold-at-architecture/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/bluesky-social/ietf-drafts"/>.</t>
    </note>
  </front>
  <middle>
    <?line 200?>

<section anchor="intro">
      <name>Introduction and Background</name>
      <t>Authenticated Transfer (AT) is a generic protocol framework for interoperable social web applications, using global aggregations of interlinked, self-certifying data records. Authority and authenticity of user-generated content are rooted in persistent user-controlled account identifiers, as opposed to network locations, which allows end users to migrate between hosting providers without impacting social graph links.</t>
      <t>Applications interoperate by reusing data records hosted in public user repositories. Records often include references to records in other repositories. In aggregate, they form a global graph of interconnected structured data. Records conform to machine-readable data schemas (Lexicons). Lexicon schemas are also published as records and can be resolved as such. A composable annotation layer (labels) separates many aspects of content moderation from the operation of the underlying network infrastructure.</t>
      <t>The design goals for the system are to enable “big world” social web applications with features and user experience competitive with modern commercial platforms, but with stronger end-user control over public identity and published data, and with no single party in exclusive control of any aspect of the overall network. As a principle, it should be possible to substitute providers for each service role in the network with minimal disruption, and barriers to entry for new providers should be minimized.</t>
      <t>Users participate in the network by authenticating a client application to their current account hosting provider (Personal Data Server, or PDS). They publish content (including social interactions, for example, a “follow” or “emoji reaction”) by creating typed data records in their public data repository. Signed repository operations are broadcast by the PDS over a firehose event stream (a WebSocket). Repository operations are cryptographically authenticated, which allows intermediate services to aggregate and redistribute event streams. Indexing services (”AppViews”) receive event streams and provide opinionated, application-specific views and aggregations of the network, such as reaction counts or full text search. Client applications make authenticated API requests to AppViews and other network services on behalf of users. Moderation services publish signed annotations (labels), which may be aggregated by AppViews and included in API responses based on request headers provided by client applications.</t>
      <t>The AT framework itself does not specify common social media conventions like "follows" or "avatars", leaving these to application-level schemas. Client developers can choose to reuse existing schemas (and data) or declare their own. Use cases include traditional web document publishing (articles and pages), short-form video, collaborative coding, reviews, photo sharing, microblogging, business listings, etc.</t>
    </section>
    <section anchor="ident">
      <name>Network Identity</name>
      <t>Individual accounts in the AT network are referenced by both a permanent account identifier and a mutable "handle". The permanent identifier is intended for machine use and enables persistent references and social graph relationships. It is controlled by the end user and does not change if the account migrates between hosting providers. The handle is intended for display and human recognition.</t>
      <t>Network identity may be pseudonymous and unlinked to offline identity. Users may have a single account and identity used across all applications, or multiple identities for distinct use-cases or personas.</t>
      <section anchor="ident-did">
        <name>Permanent Account Identifiers (DIDs)</name>
        <t>Permanent account identifiers are Decentralized Identifier (DID), as specified in <xref target="W3CDID"/>. For the purpose of AT, DIDs are string identifiers (URIs) that be universally resolved to a DID document, which is a JSON document with a standard structure. The DID document contains identifier references ("alsoKnownAs"), public cryptographic key declarations ("verificationMethod"), and service endpoint declarations ("service"). The DID framework allows for many distinct resolution mechanisms ("methods"), each with their own design trade-offs around cost, latency, consistency, etc. Method types are indicated in the string identifier itself. To ensure interoperability, in the AT framework only a small number of "blessed" DID methods may be used; however new methods may be supported in the future as an evolvability mechanism.</t>
        <t>The two supported DID methods are:</t>
        <ul spacing="normal">
          <li>
            <t>did:web (eg, <tt>did:web:example.com</tt>), a W3C draft specification (<xref target="DIDWEB"/>) based on an HTTPS well-known endpoint. In the context of AT, path segments are not allowed.</t>
          </li>
          <li>
            <t>did:plc (eg, <tt>did:plc:ewvi7nxzyoun6zhxrhs64oiz</tt>), an independent specification (<xref target="DIDPLC"/>) based on self-authenticating operation logs, with authority rooted in rotatable cryptographic keys.</t>
          </li>
        </ul>
        <t>Control of an AT network account is rooted in control of the DID, over the full lifetime of the account. DID document contents can be changed, but the identifier (and thus DID method) can not be changed, merged, or split.</t>
        <t>See <xref target="appendix-did"/> for AT-specific details.</t>
      </section>
      <section anchor="ident-handle">
        <name>Handles</name>
        <t>Account handles are DNS hostnames. Handles must be bidirectionally validated: the handle must resolve to the DID, and the same DID must resolve to the handle. Accounts can have at most one valid handle at a time, but they can change. Handles are human-readable, intended for display in end-user applications, and may contain additional semantics, such as implying a degree of affiliation or control between an account and the party controlling a registered domain name. Handles are sometimes displayed with the <tt>@</tt> prefix, like <tt>@handle.example.com</tt>.</t>
        <t>DID documents reference a handle with a URI entry in the <tt>alsoKnownAs</tt> array. The format is the string <tt>at://</tt> followed by the handle. Only the first value with the <tt>at://</tt> prefix is considered.</t>
        <t>Handles can resolve to DIDs using either of the following two mechanisms, both demonstrating control of the DNS hostname:</t>
        <ul spacing="normal">
          <li>
            <t>a DNS TXT record at the hostname with the additional prefix part <tt>_atproto</tt> (for example, <tt>_atproto.handle.example.com</tt> for the handle <tt>example.com</tt>). The TXT record value is in key/value syntax with the key name <tt>did</tt>, like <tt>did=did:web:example.com</tt>.</t>
          </li>
          <li>
            <t>an HTTPS well-known endpoint at <tt>/.well-known/atproto-did</tt>. The response should have Content-Type text/plain, and include the full DID with no additional prefix or suffix.</t>
          </li>
        </ul>
        <t>If an account's handle fails to validate for any reason, it should not be displayed to end users. Instead, the <tt>handle.invalid</tt> pseudo-handle may be used, or the account DID may be displayed.</t>
      </section>
    </section>
    <section anchor="repo">
      <name>Data Repositories</name>
      <t>Public AT data records are stored in per-account data repositories. The repository data structure is a key/value content-addressed Merkle Search Tree (MST, originally described in <xref target="MST"/>), which functions as a key/value store. The top of the tree is referenced by a signed commit object, which includes a revision code to prevent accidental out-of-order processing. Commits, tree nodes, and data records are all serialized with a deterministic flavor of CBOR. Updates to repositories, including a new commit, can be expressed as verifiable diff operations. Records may be deleted, leaving no long-term observable state in the repository, and deletion events are broadcast the same as other repository operations. Entire repositories can be serialized in a simple appended-blocks file format (CAR files).</t>
      <t>Details of the repository structure and mechanisms for synchronizing repositories across the network are expanded in <xref target="ATREPO"/>.</t>
      <t>Media files, including images, audio, video, and long-form text, are not included directly in repositories but are instead stored as separate "blobs" and referenced by content hash, size, and content type.</t>
      <t>Repositories can contain records of many schemas and for many distinct applications and use-cases. In live network use, they can contain anywhere from a handful to millions of distinct records, and have overall sizes of kilobytes to hundreds of megabytes. Individual CBOR records are usually hundreds to thousands of bytes in size. Service operators may enforce limits on the rate of repo operations and the size of individual records.</t>
      <section anchor="repo-model">
        <name>Data Model</name>
        <t>Records are structured data objects that can be represented in both JSON and a deterministic profile of CBOR. The AT data model defines a subset of values and data structures that can be reliably round-tripped between the two serialization formats. JSON representation is used in web applications and HTTP APIs, while CBOR is used for hashing, signatures, and storage in repositories.</t>
        <t>The deterministic CBOR encoding used is specified in <xref section="4.2" sectionFormat="of" target="CBOR"/>, with map key ordering following the original specification in <xref section="3.9" sectionFormat="of" target="RFC7049"/> for historical compatibility. More encoding details are described in <xref target="ATREPO"/>.</t>
        <t>Some data types that have no direct representation in JSON are encoded as compound objects. For example, binary data is encoded in base64 using a reserved <tt>$bytes</tt> property:</t>
        <sourcecode type="json"><![CDATA[
{
  "exampleBytesField": {
    "$bytes": "nFERjvLLiw9qm45JrqH9QTzyC2Lu1Xb4ne6+sBrCzI0"
  }
}
]]></sourcecode>
        <t>Content references by hash can be expressed as strings without any special structure, or encoded as a binary link using a reserved <tt>$link</tt> property:</t>
        <sourcecode type="json"><![CDATA[
{
  "exampleLinkField": {
    "$link": "bafyreiff4hvcmjwrrhg7477umwkl7p2bwbppqxftfjw6sk56mp2lrk6cse"
  }
}
]]></sourcecode>
        <t>References to media files (blobs) are represented in both JSON and CBOR using a reserved <tt>blob</tt> object structure. Note that blob references can be parsed and identified out of generic record data without knowing the overall record schema.</t>
        <sourcecode type="json"><![CDATA[
{
  "exampleBlobField": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreibjfgx2gprinfvicegelk5kosd6y2frmqpqzwqkg7usac74l3t2v4"
    },
    "mimeType": "image/jpeg",
    "size": 54321
  }
}
]]></sourcecode>
      </section>
      <section anchor="repo-uri">
        <name>AT References (URIs)</name>
        <t>In the context of an AT repository, keys (or paths) are simple strings with the format <tt>&lt;collection&gt;/&lt;record-key&gt;</tt>. For example, <tt>app.example.blog.post/3kghpsza2uu2j</tt>. The collection part describes the data schema of the record, and the record key identifies the specific record. Depending on the data schema, the record key may have a fixed value if only a single instance is expected (eg, <tt>self</tt>), a compact sortable timestamp format (called Timestamp Identifier, or TID), or a more open-ended or application-specific string syntax (which is still URL-safe).</t>
        <t>Individual records can be globally referenced using a URI schema, <tt>at://</tt>. The structure of these references is:</t>
        <artwork><![CDATA[
at:// <did> / <collection> / <record-key>
]]></artwork>
        <t>For example:</t>
        <artwork><![CDATA[
at://did:plc:ewvi7nxzyoun6zhxrhs64oiz/app.example.blog.post/3kjbtzlhayo2p
]]></artwork>
      </section>
      <section anchor="repo-ref">
        <name>Cross-Repository References</name>
        <t>Records frequently reference other records through AT-URI references. The referenced record might reside in the same repository or any other repository in the network. Sometimes AT-URI references are complemented with the content hash of the target record to disambiguate the specific version being referenced, or to provide an integrity check.</t>
        <t>Verifiable links between records across the network facilitate rich application semantics. To give an example from a comment thread use-case, when one account replies to a post authored by another account, the reply is created in the replying account’s repository and includes a cross-repository AT-URI pointing to the original post. Application indexes (<xref target="net-appview"/>) that monitor both repositories can observe these references and construct complete interaction threads by correlating the original post with its replies.</t>
      </section>
      <section anchor="repo-schema">
        <name>Data Schemas</name>
        <t>AT record data types can be described with a schema definition language named Lexicon. The Lexicon language is outside the scope of this overview document. It has many features and properties in common with JSON Schemas (<xref target="JSONSCHEMA"/>), but includes a global schema namespace system, an "open union" data type for third-party schema extensibility, and rules for evolving schemas over time without breaking existing data or applications.</t>
        <t>Lexicon schemas are identified by Namespace Identifiers (NSIDs), which have authority rooted in the global DNS system. NSID syntax is to take a DNS hostname, reverse the order of parts, and then append a single additional name. The set of all NSIDs which differ only by the final part is referred to as a "group". For example, the NSID <tt>app.example.blog.post</tt> has the group <tt>app.example.blog</tt> and final name <tt>blog</tt>; it corresponds to the hostname <tt>blog.example.app</tt>.</t>
        <t>AT specifies a mechanism for resolving NSIDs to public schema documents, using the AT system itself. The hostname corresponding to a group can have a DNS TXT record registered with the part prefix <tt>_lexicon</tt>, and value indicating a DID (with prefix <tt>did=</tt>, same as with handle resolution). The account indicated by the DID then publishes in their public repository a record with the collection <tt>com.atproto.lexicon.schema</tt>, and the record key is the full NSID of the schema. A complete AT Reference may look like:</t>
        <artwork><![CDATA[
at://did:plc:ewvi7nxzyoun6zhxrhs64oiz/com.atproto.lexicon.schema/app.example.blog.post
]]></artwork>
        <t>This provides a mechanism for validating data records of any type in the global network if needed. Most network services are not expected to resolve and validate schemas at runtime. Instead, the schema system allows independent parties to interoperate and reuse public data without explicit permission or prior coordination.</t>
      </section>
    </section>
    <section anchor="net">
      <name>Network Architecture</name>
      <t>The Network Identity and Data Repository components provide a mechanism for any party to authenticate data repositories that they may have obtained a copy of. This section of the document describes the current network architecture and service roles that facilitate the distribution of repository data. However, note that alternative transports and architectures are possible.</t>
      <t>Transfer of repositories between any two hosts in the network uses the same synchronization protocol, regardless of the host roles in the network, with the client or “downstream” host initiating the transfer process (”pull” versus “push”). Details of the synchronization mechanism are described in <xref target="ATREPO"/>.</t>
      <t>A key principle of AT is that any party can resolve, fetch, and authenticate the full data repository for any account in the network at any time, without prior permission or authentication. Individual data records may be deleted at any time, and entire accounts may be deactivated (pausing redistribution) or deleted.</t>
      <t>Most APIs in the network are simple JSON over HTTP. API endpoints can be specified using the Lexicon schema language, in a system called “XRPC”. Such an endpoint specified by a schema named <tt>com.example.getContent</tt> could be requested at the path <tt>/xrpc/com.example.getContent</tt>. Some of the endpoints that are part of the AT system itself are specified using XRPC. Using the XRPC system improves interoperability across organizational boundaries, but it is not mandatory for all network services.</t>
      <section anchor="net-pds">
        <name>Personal Data Server (PDS)</name>
        <t>Each account in the network is hosted on a Personal Data Server (PDS), which may host one or many accounts. The PDS hosts the data repository, holds the signing key used to authenticate repository updates and external API requests, and often has enough control of the account's network identity to facilitate simple changes like handle updates.</t>
        <t>PDS instances implement the public repository sync mechanism for all hosted accounts. Blobs, records, and entire repositories can be fetched by any client without authentication (though reasonable rate-limits may be enforced). Updates to repositories, identities, and account status are all broadcast publicly over a "firehose" WebSocket, which any party can subscribe to.</t>
        <t>Account migration between hosts is achieved by uploading a copy of the data repository and any blobs to a new provider, and then updating the network identity (DID document) to reference the new PDS host and newly generated signing key. Accounts are expected to have a semi-trusting relationship with their PDS provider. They may choose to maintain independent control of their network identity and backups of their account data to ensure that they can fully recover their accounts if the provider stops operation suddenly or unexpectedly violates trust.</t>
        <t>Accounts on a PDS instance may be "active" or have one of several "inactive" statuses, including account deactivation, deletion, or takendown (by the host). Account status usually propagates "downstream" via broadcast messages on the firehose. Account status can be verified by querying the currently declared PDS instance.</t>
      </section>
      <section anchor="net-relay">
        <name>Relay</name>
        <t>Any party that wants to synchronize or observe the entire network could maintain direct connections to all known PDS instances. Maintaining hundreds or thousands of active subscriptions and preventing network abuse can require some operational oversight, so as a convenience subscribers can instead subscribe to a single relay instance.</t>
        <t>Relays subscribe to all known PDS instances (or some subset of instance). They check every inbound message, apply rate-limits, and re-broadcast all valid messages on a aggregated firehose. The firehose stream format is the exact same as subscribing to an individual PDS instance.</t>
        <t>Relays can discover new PDS instances by scraping identity directories for service endpoint declarations, or by querying an existing relay for a host list. PDS instances can also announce themselves to relay instances. Relay services may be provided publicly to enable network ecosystem growth, or they might be operated privately.</t>
      </section>
      <section anchor="net-appview">
        <name>Application Indices</name>
        <t>Providing featureful and performant web application experiences usually requires application-specific data indexing. Depending on the use-case, this might include full-text search indices, social graphs, numeric aggregations, timeseries, backlink indices, denormalized views, etc.</t>
        <t>The AT network services which maintain these indices and provide network APIs to access them, are called "AppViews" because they provide an application-specific view or perspective of the overall network. Such services commonly subscribe to a full-network firehose provided by a relay and filter down to only the record types relevant to the application. In other cases, they may offload full synchronization to an external service which provides a filtered stream of relevant messages. If needed, services can backfill older data by enumerating relevant accounts in the network and fetching full repository exports from each account's PDS.</t>
        <t>AppViews might implement API endpoints with public Lexicon schemas, service authenticated requests from any account, and provide public unauthenticated API access. But they are not required to do any of these things.</t>
      </section>
      <section anchor="net-composable">
        <name>Composable Services</name>
        <t>Applications can provide extension points that allow many network services to fill a well-defined interface. The design pattern is for services to advertise their existence using a public declaration record that includes service metadata. The backing service is identified by a DID, and declares a service endpoint in the DID document matching a defined identifier fragment. Client applications indicate which service they would like to fulfill a request by indicating the declaration record by AT-URI in a request to an AppView.</t>
        <t>For example, a music service could provide a composable extension point for recommendation services. Clients would make requests to the music AppView indicating which specific recommendation service should be used. The AppView resolves and queries the services for a set of candidates, and then hydrates those results with additional metadata and moderation labels before returning them to the client.</t>
      </section>
      <section anchor="net-client">
        <name>Client Applications</name>
        <t>Clients are central to both the end-user experience and power dynamics in the network. They are downstream of other network services in terms of dataflow, but ultimately control feature sets, service provider defaults, content visibility, moderation features, most forms of monetization, etc. Major clients and the application indices and moderation services they rely on are expected to have mutually sustainable relationships, or even be operated by the same party. In contrast, clients may be relatively independent from PDS service providers.</t>
        <t>Clients "write" to the public network by creating records to account repositories, and can "read" from the network either by requests to an application index API, or by directly reading records and blobs from PDS instances.</t>
        <t>Clients may authenticate directly to account PDS instances and proxy API requests to other AT network services via the PDS, which adds Service Auth on behalf of the user (see Authentication section). Alternatively, clients may be more tightly integrated with an AppView (application index) and make requests to that service, which would only make requests on to the account's PDS instance if necessary.</t>
      </section>
    </section>
    <section anchor="moderation">
      <name>Moderation</name>
      <t>Infrastructure-layer moderation is an unavoidable part of hosting user-generated content on the web. This means that all AT network services need mechanisms to take down content that is illegal in the physical jurisdiction of the service.</t>
      <t>However, modern social web moderation addresses many behavioral patterns and harms beyond simple legality. Individual network services are operated by single parties, who may not be well-positioned to address many or all aspects of moderation. For example, a PDS operator may not be familiar with all of the application types used by hosted accounts. A design principle for the AT system is that, as much as possible, the role of moderation should be unbundled from the operation of infrastructure. This can be achieved using the composable labeling system described below, or via application-specific product features.</t>
      <t>Client applications play a central role in network moderation. Clients have the closest relationship to end users, control distribution and display of content, have recognizable brands at state, and are most likely to be in a position to capture value through monetization. Design of product features, selection of infrastructure providers, and default configurations are all decisions made by application developers. For these reasons, it is client applications that are expected to engage with and support any moderation services they depend on.</t>
      <section anchor="moderation-label">
        <name>Labeling</name>
        <t>Labels are a form of authenticated metadata about specific content and accounts in the AT network. They were originally developed as a composable system for content moderation, but they are not moderation-specific and have found alternative use-cases such as account badging and content curation.</t>
        <t>Labels exist as free-standing, self-authenticated data objects, though they are also frequently distributed as part of AppView API responses. Additionally, label "values" may be directly embedded in records themselves ("self-labels"). Labels primarily consist of a source (DID), a subject (URI), and value. The value is a short string, similar to a tag or hashtag, which presumably has pre-defined semantics shared between the creator and consumer of the label. Additional metadata fields can give additional context, but at any point in time there should be only one coherent set of metadata for the combination of source, subject, and value. If there are multiple sets of metadata, the created-at timestamp is used to clarify which label is current. Automated labeling services generate too many labels for them to be published as records in repositories.</t>
        <t>Labeling services (identified by a service DID) can provide a message stream of label updates, which can also be used to enumerate and backfill historical labels. Labels are ingested and indexed by AppViews, and can be hydrated into API responses as metadata, or in other cases used to trigger takedown actions.</t>
        <t>Clients can indicate which labeling services they would like to have hydrated by using the <tt>Atproto-Accept-Labelers</tt> HTTP header on requests. The format of this header is a comma-separated array of DIDs. The AppView will include the <tt>Atproto-Content-Labelers</tt> HTTP header in responses, to indicate the set of labelers that were successfully resolved and hydrated into the response.</t>
      </section>
    </section>
    <section anchor="auth">
      <name>Authentication and Authorization</name>
      <section anchor="auth-oauth">
        <name>OAuth</name>
        <t>AT includes an OAuth profile for client authentication and authorization to the user's host (PDS) as an auth server. The AT use-case is different from a traditional OAuth platform or identity provider (IdP) in that there are many independent hosting providers and many independent client applications in the network, and no single authority with whom to register (or revoke) clients.</t>
        <t>The AT OAuth profile builds on the draft OAuth 2.1 Authorization Framework (<xref target="OAUTH21"/>), which means:</t>
        <ul spacing="normal">
          <li>
            <t>only the "authorization code" OAuth 2.0 grant type is supported, not "implicit" or other grant types</t>
          </li>
          <li>
            <t>mandatory Proof Key for Code Exchange (PKCE, RFC 7636)</t>
          </li>
          <li>
            <t>security best practices (Best Current Practice for OAuth 2.0 Security and draft-ietf-oauth-browser-based-apps) are required</t>
          </li>
        </ul>
        <t>In addition:</t>
        <ul spacing="normal">
          <li>
            <t>DPoP (with mandatory server issued nonces) is required to bind auth tokens to specific client software instances (eg, end devices or browser sessions)</t>
          </li>
          <li>
            <t>Pushed Authentication Requests (PAR) are used to streamline the authorization request flow</t>
          </li>
        </ul>
        <t>Clients use the draft OAuth Client ID Metadata Document (<xref target="OAUTHCLIENTID"/>) mechanism to use a public URL as a <tt>client_id</tt>, and publish a JSON metadata document at that URL. Users usually initiate the auth flow by providing a global account identifier (handle or DID), which the client resolves to an Auth Server (PDS).</t>
      </section>
      <section anchor="auth-permission">
        <name>Permissions</name>
        <t>To describe permissions on PDS resources granted to OAuth client sessions, AT includes a custom authorization scope language. This includes a string syntax for including in OAuth client auth requests. AT-specific resources for which permissions can be requested include writing to the account's public repository (granular by record collection), uploading of media files (blobs), external API requests to third parties (granular by API endpoint and/or by service provider), network identity, and aspects of account hosting itself.</t>
        <t>Clients may commonly request permissions to resources across many NSID namespaces. To address the separate issues of dynamic feature extension (new schemas) and overwhelmingly complex authentication requests, the system allows for the definition of "permission sets", which are bundles of permissions on related resources in the same namespace. These are published as Lexicon schemas and resolved at runtime by Auth Servers. They can include short summary descriptions for display to end users during the auth approval flow. They are constrained in scope to named resources under the same NSID domain authority, to prevent cross-domain privilege escalation.</t>
      </section>
      <section anchor="auth-service">
        <name>Service Auth</name>
        <t>Requests between AT network services can be authenticated using signed tokens (JWTs) as HTTP Authentication Bearer tokens. DIDs are used to identity individual services, and signatures can be verified by resolving the DID document and extracting the appropriate key. Multiple public keys can be published for distinct service types, and distinguished using identifier fragments. For example, <tt>did:web:api.example.com#example_service</tt>. If no fragment is included, <tt>#atproto</tt> is used.</t>
        <t>The target service is indicated in the audience (<tt>aud</tt>) field, the Lexicon API endpoint being called is identified in the <tt>lxm</tt> field, and the requesting service (or account) is indicated in the issuer (<tt>iss</tt>) field.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>A detailed analysis of attack surfaces and security mitigations is out of scope for this overview document, but a few broad themes can be addressed.</t>
      <t>AT public data repositories are for manifestly public data, which may be redistributed, archived, and enumerated individually or in bulk form by any party on the public internet.</t>
      <t>Account identities may be pseudonymous, but hosting providers and client applications are likely to have visibility of identifying metadata, such as account emails and device IP addresses. Authenticated proxy requests to other services in the network may strip <em>some</em> identifying metadata, but still include strong authentication.</t>
      <t>Identity resolution requires care. The relationship between handles and DIDs must be verified bidirectionally. Cleartext DNS TXT resolution can be observed or manipulated on untrusted networks; clients on end-devices (including browser apps) should use DNS-over-HTTPS or similar techniques.</t>
      <t>Hosting (and re-hosting) of user-uploaded media files raises many web platform security concerns. Account hosts should have restrictive CORS policies. Client apps (including OAuth client apps) should not be operated on the same origin as user-uploaded media files.</t>
      <t>Hosting providers should not trust authenticated client requests, especially those resulting in proxied or other outbound network requests to arbitrary hosts (for example, identity resolution of arbitrary hostnames). Mitigations against SSRI and request amplification are essential.</t>
      <t>Binary data formats must be treated as untrusted, including CBOR data objects and serialized CAR files. When parsing these formats, recursion limits and overall memory allocation quotas should be enforced.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>The <tt>at://</tt> URI scheme has a provisional registration. See https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="CBOR">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="W3CDID" target="https://www.w3.org/TR/2022/REC-did-core-20220719/">
          <front>
            <title>Decentralized Identifiers  (DIDs) v1.0</title>
            <author fullname="Manu Sporny">
              <organization>Digital Bazaar</organization>
            </author>
            <author fullname="Dave Longley">
              <organization>Digital Bazaar</organization>
            </author>
            <author fullname="Markus Sabadello">
              <organization>Danube Tech</organization>
            </author>
            <author fullname="Drummond Reed">
              <organization>Evernym/Avast</organization>
            </author>
            <author fullname="Orie Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Christopher Allen">
              <organization>Blockchain Commons</organization>
            </author>
            <date year="2022" month="July"/>
          </front>
        </reference>
        <reference anchor="CONTROLLEDID" target="https://www.w3.org/TR/2025/REC-cid-1.0-20250515/">
          <front>
            <title>Controlled Identifiers v1.0</title>
            <author fullname="Dave Longley">
              <organization>Digital Bazaar</organization>
            </author>
            <author fullname="Manu Sporny">
              <organization>Digital Bazaar</organization>
            </author>
            <author fullname="Markus Sabadello">
              <organization>Danube Tech</organization>
            </author>
            <author fullname="Drummond Reed">
              <organization>Evernym/Avast</organization>
            </author>
            <author fullname="Orie Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Christopher Allen">
              <organization>Blockchain Commons</organization>
            </author>
            <date year="2025" month="May"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="MST" target="https://inria.hal.science/hal-02303490/document">
          <front>
            <title>Merkle Search Trees: Efficient State-Based CRDTs in Open Networks</title>
            <author fullname="Alex Auvolat">
              <organization/>
            </author>
            <author fullname="François Taïani">
              <organization/>
            </author>
            <date year="2019" month="October"/>
          </front>
        </reference>
        <reference anchor="ATREPO" target="https://datatracker.ietf.org/doc/draft-holmgren-at-repository/">
          <front>
            <title>Authenticated Transfer Repository and Synchronization</title>
            <author fullname="Daniel Holmgren">
              <organization>Bluesky Social</organization>
            </author>
            <author fullname="Bryan Newbold">
              <organization>Bluesky Social</organization>
            </author>
            <date year="2025" month="September"/>
          </front>
        </reference>
        <reference anchor="DIDWEB" target="https://w3c-ccg.github.io/did-method-web/">
          <front>
            <title>did:web Method Specification (Draft)</title>
            <author fullname="Christian Gribneau">
              <organization>Ology Newswire, Inc.</organization>
            </author>
            <author fullname="Michael Prorock">
              <organization>mesur.io</organization>
            </author>
            <author fullname="Orie Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Oliver Terbu">
              <organization>Consensys</organization>
            </author>
            <author fullname="Mike Xu">
              <organization>Consensys</organization>
            </author>
            <author fullname="Dmitri Zagidulin">
              <organization>Digital Bazaar</organization>
            </author>
            <date year="2024" month="July"/>
          </front>
        </reference>
        <reference anchor="DIDPLC" target="https://web.plc.directory/spec/v0.1/did-plc">
          <front>
            <title>did:plc Method Specification v0.1</title>
            <author fullname="Daniel Holmgren">
              <organization>Bluesky Social</organization>
            </author>
            <date year="2023" month="May"/>
          </front>
        </reference>
        <reference anchor="JSONSCHEMA" target="https://datatracker.ietf.org/doc/draft-bhutton-json-schema/">
          <front>
            <title>JSON Schema: A Media Type for Describing JSON Documents</title>
            <author fullname="Austin Wright">
              <organization/>
            </author>
            <author fullname="Henry Andrews">
              <organization/>
            </author>
            <author fullname="Ben Hutton">
              <organization>Postman</organization>
            </author>
            <author fullname="Greg Dennis">
              <organization/>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
        <reference anchor="OAUTH21" target="https://datatracker.ietf.org/doc/draft-ietf-oauth-v2-1/">
          <front>
            <title>The OAuth 2.1 Authorization Framework</title>
            <author fullname="Dick Hardt">
              <organization>Hellō</organization>
            </author>
            <author fullname="Aaron Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Torsten Lodderstedt">
              <organization>SPRIND</organization>
            </author>
            <date year="2025" month="May"/>
          </front>
        </reference>
        <reference anchor="OAUTHCLIENTID" target="https://datatracker.ietf.org/doc/draft-parecki-oauth-client-id-metadata-document/">
          <front>
            <title>OAuth Client ID Metadata Document</title>
            <author fullname="Aaron Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Emelia Smith">
              <organization/>
            </author>
            <date year="2025" month="July"/>
          </front>
        </reference>
        <reference anchor="ATPAPER" target="https://doi.org/10.1145/3694809.3700740">
          <front>
            <title>Bluesky and the AT Protocol: Usable Decentralized Social Media</title>
            <author fullname="Martin Kleppmann">
              <organization/>
            </author>
            <author fullname="Paul Frazee">
              <organization/>
            </author>
            <author fullname="Jake Gold">
              <organization/>
            </author>
            <author fullname="Jay Graber">
              <organization/>
            </author>
            <author fullname="Daniel Holmgren">
              <organization/>
            </author>
            <author fullname="Devin Ivy">
              <organization/>
            </author>
            <author fullname="Jeromy Johnson">
              <organization/>
            </author>
            <author fullname="Bryan Newbold">
              <organization/>
            </author>
            <author fullname="Jaz Volpert">
              <organization/>
            </author>
            <date year="2024" month="December"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 452?>

<section anchor="appendix-did">
      <name>DID Documents</name>
      <t>A DID document describes an account in the AT network if it includes the following:</t>
      <ul spacing="normal">
        <li>
          <t>a handle declaration in the <tt>alsoKnownAs</tt> array (described in the "Handle" section below).</t>
        </li>
        <li>
          <t>an AT signing key under <tt>verificationMethod</tt>, with the <tt>id</tt> ending <tt>#atproto</tt> and the <tt>controller</tt> matching the DID of the document itself. The type should be "Multikey", as described in the Controlled Identifiers W3C standard (<xref target="CONTROLLEDID"/>). The supported key types are described in <xref target="appendix-crypto"/>.</t>
        </li>
        <li>
          <t>a service endpoint under <tt>service</tt>, with the <tt>id</tt> ending <tt>#atproto_pds</tt> and <tt>type</tt> matching "AtprotoPersonalDataServer". This must be a public HTTPS URL, with no path segment, indicating the current hosting provider of the account.</t>
        </li>
      </ul>
    </section>
    <section anchor="appendix-crypto">
      <name>Cryptographic Keys</name>
      <t>To maximize interoperability, AT supports only a small set of cryptographic systems and curve types. This set may expand slowly over time as an evolvability mechanism. The two elliptic curve types supported are:</t>
      <ul spacing="normal">
        <li>
          <t>NIST P-256, aka "secp256r1"</t>
        </li>
        <li>
          <t>“secp256k1”, aka K-256</t>
        </li>
      </ul>
      <t>Unless otherwise specified, public keys are encoded in "Multikey" string encoding, as described in <xref target="CONTROLLEDID"/>. As specified in that document, P-256 keys are prefixed with the bytes 0x8024 before being encoded. For similar historical reasons, K-256 keys are prefixed with 0xE701. Compressed 32-byte binary encodings are used for both key types.</t>
      <t>In ECDSA, both key types have malleable signatures. In the context of AT data signatures, only "low-S" signatures are considered valid. This does not apply when using the same keys in other contexts, such as JWT signatures.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>A complete description of the Authenticated Transfer system was jointly published by the protocol design team in <xref target="ATPAPER"/>. Since that publication, Matthieu Sieben has contributed significantly. Aaron Goldman contributed to an earlier prototype.</t>
      <t>The authors would like to sincerely thank the entire AT open source development community ("Atmosphere") for their feedback, commentary, creativity, and patience throughout the development of protocol.</t>
      <t>The AT system was directly informed and influenced by existing P2P and federated social web technologies, in particular Secure Scuttlebutt, dat://, IPFS, and ActivityPub. The authors would like to thank the designers and developers of these protocols for their ongoing contributions to the field and openness to collaboration.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
lUQmRng7JczL/w05XlrAB5MAAA==

-->

</rfc>
