Skip to content

update_profile

Update the authenticated user's profile information.

Authentication

Required: Yes (Private tool)

Parameters

displayName (optional)

  • Type: string
  • Constraints: Maximum 64 graphemes (emoji count as one)
  • Description: Display name to show on profile

description (optional)

  • Type: string
  • Constraints: Maximum 256 graphemes (emoji count as one)
  • Description: Bio/description text

avatar (optional)

  • Type: object
  • Description: New avatar image as a pre-uploaded blob descriptor: pass the image.blob object returned by upload_image verbatim ({ type: 'blob', ref, mimeType, size }). Omit to keep the existing avatar.
  • Type: object
  • Description: New banner/header image as a pre-uploaded blob descriptor: pass the image.blob object returned by upload_image verbatim. Omit to keep the existing banner.

Response

Only the fields you pass are changed; other profile fields (pinned post, labels, etc.) are preserved. The response lists which fields were updated. avatar/banner appear as the marker string "updated" when a new image was uploaded, not as a URL.

typescript
{
  success: boolean;
  message: string;
  updatedFields: string[];   // e.g. ["displayName", "avatar"]
  profile: {
    displayName?: string;
    description?: string;
    avatar?: string;         // "updated" when a new avatar was set
    banner?: string;         // "updated" when a new banner was set
  }
}

Examples

Update Display Name and Description

json
{
  "displayName": "Alice Smith",
  "description": "Software engineer and coffee enthusiast ☕"
}

Update Avatar

Upload the image first with upload_image, then pass its image.blob descriptor:

json
{
  "avatar": {
    "type": "blob",
    "ref": "bafkreiabc123...",
    "mimeType": "image/jpeg",
    "size": 245678
  }
}

Update Multiple Fields

json
{
  "displayName": "Alice Smith",
  "description": "Software engineer | Open source contributor",
  "avatar": {
    "type": "blob",
    "ref": "bafkreiabc123...",
    "mimeType": "image/jpeg",
    "size": 245678
  },
  "banner": {
    "type": "blob",
    "ref": "bafkreidef456...",
    "mimeType": "image/png",
    "size": 512344
  }
}

Error Handling

Common Errors

Authentication Required

json
{
  "error": "Authentication required",
  "code": "AUTHENTICATION_FAILED"
}

Display Name Too Long

json
{
  "error": "Display name cannot exceed 64 graphemes",
  "code": "VALIDATION_ERROR"
}

Description Too Long

json
{
  "error": "Description cannot exceed 256 graphemes",
  "code": "VALIDATION_ERROR"
}

Best Practices

Text Fields

  • displayName is capped at 64 graphemes; description at 256 graphemes
  • Use the marker in updatedFields to confirm which fields changed

Images

  • Upload images first with upload_image, then pass the returned image.blob descriptors as avatar/banner
  • Avatars render best as square images; banners as wide images
  • Image format and size limits are enforced by the Bluesky platform, not by this server

See Also