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",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "createdAt"
    ],
    "properties": {
      "bio": {
        "type": "string",
        "maxLength": 2560,
        "description": "Optional free-form bio text. Plain text only; no markdown rendering today."
      },
      "avatar": {
        "type": "blob",
        "accept": [
          "image/png",
          "image/jpeg",
          "image/webp"
        ],
        "maxSize": 2000000,
        "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."
      },
      "handle": {
        "type": "string",
        "maxLength": 256,
        "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."
      },
      "avatarUrl": {
        "type": "string",
        "format": "uri",
        "maxLength": 2048,
        "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."
      },
      "createdAt": {
        "type": "string",
        "format": "datetime"
      },
      "updatedAt": {
        "type": "string",
        "format": "datetime",
        "description": "Last edit time. Absent on the originally-provisioned record."
      },
      "displayName": {
        "type": "string",
        "maxLength": 256,
        "description": "Optional human-readable name. When absent, consumers fall back to the bsky public-profile displayName, then the handle, then the DID."
      }
    }
  }
}

Lexicon Garden

@