AT URI Scheme

The at URL scheme is used to address records in the atproto network.

atp-url   = "at://" authority path [ "#" fragment ]
authority = reg-name / did
path      = [ "/" coll-nsid [ "/" record-id ] ]
coll-nsid = nsid
record-id = 1*pchar

did is defined in https://w3c.github.io/did-core/#did-syntax.

reg-name is defined in https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2.

nsid is defined in NameSpaced IDs (NSID).

pchar is defined in https://www.rfc-editor.org/rfc/rfc3986#section-3.3.

fragment is defined in https://www.rfc-editor.org/rfc/rfc3986#section-3.5.

The fragment segment only has meaning if the URL references a record. Its value maps according to "Field pathing" below.

Some example at URLs:

Repository at://alice.host.com
Repository at://did:plc:bv6ggog3tya2z3vxsub7hnal
Collection at://alice.host.com/io.example.song
Record at://alice.host.com/io.example.song/3yI5-c1z-cc2p-1a
Record Field at://alice.host.com/io.example.song/3yI5-c1z-cc2p-1a#/title

Field pathing

All fields in atproto records are addressed using JSON Pointers in the fragment section of the URL.

const obj = {
  "foo": 10,
  "arr": [
    { "key": "value1" },
    { "key": "value2" }
  ]
}

get(obj, '#/foo') // => 10
get(obj, '#/arr') // => [Object, Object]
get(obj, '#/arr/0/key') // => "value1"
get(obj, '#/arr/1/key') // => "value2"

Join the Bluesky private beta.

The AT Protocol will launch soon.

Join the waitlist