dev.cocore.account.profile

cocore.dev

Documentation

main record

No description available.

Record Key literal:self Fixed literal value

Properties

avatar blob Optional

Avatar image stored as an atproto blob on the user's PDS. Preferred over `avatarUrl` when present; consumers should resolve it via `com.atproto.sync.getBlob` against the owning PDS.

maxSize: 2.0 MB
avatarUrl string uri Optional

Legacy avatar URL, retained for portability of records provisioned before the `avatar` blob field existed (typically the bsky CDN URL captured at first sign-in). Writers should prefer `avatar`; readers should fall back to this only when `avatar` is absent.

maxLength: 2048 bytes
bio string Optional

Optional free-form bio text. Plain text only; no markdown rendering today.

maxLength: 2560 bytes
createdAt string datetime Required

An RFC 3339 formatted timestamp.

displayName string Optional

Optional human-readable name. When absent, consumers fall back to the bsky public-profile displayName, then the handle, then the DID.

maxLength: 256 bytes
handle string Optional

Display-only mirror of the user's bsky handle at provision time. Authoritative handle resolution still goes through PLC; this field exists so dashboards can render `@handle` without a PLC round-trip on every page load.

maxLength: 256 bytes
updatedAt string datetime Optional

Last edit time. Absent on the originally-provisioned record.

View raw schema
{
  "key": "literal:self",
  "record": {
    "properties": {
      "avatar": {
        "accept": [
          "image/png",
          "image/jpeg",
          "image/webp"
        ],
        "description": "Avatar image stored as an atproto blob on the user's PDS. Preferred over `avatarUrl` when present; consumers should resolve it via `com.atproto.sync.getBlob` against the owning PDS.",
        "maxSize": 2000000,
        "type": "blob"
      },
      "avatarUrl": {
        "description": "Legacy avatar URL, retained for portability of records provisioned before the `avatar` blob field existed (typically the bsky CDN URL captured at first sign-in). Writers should prefer `avatar`; readers should fall back to this only when `avatar` is absent.",
        "format": "uri",
        "maxLength": 2048,
        "type": "string"
      },
      "bio": {
        "description": "Optional free-form bio text. Plain text only; no markdown rendering today.",
        "maxLength": 2560,
        "type": "string"
      },
      "createdAt": {
        "format": "datetime",
        "type": "string"
      },
      "displayName": {
        "description": "Optional human-readable name. When absent, consumers fall back to the bsky public-profile displayName, then the handle, then the DID.",
        "maxLength": 256,
        "type": "string"
      },
      "handle": {
        "description": "Display-only mirror of the user's bsky handle at provision time. Authoritative handle resolution still goes through PLC; this field exists so dashboards can render `@handle` without a PLC round-trip on every page load.",
        "maxLength": 256,
        "type": "string"
      },
      "updatedAt": {
        "description": "Last edit time. Absent on the originally-provisioned record.",
        "format": "datetime",
        "type": "string"
      }
    },
    "required": [
      "createdAt"
    ],
    "type": "object"
  },
  "type": "record"
}

Lexicon Garden

@