When you download an actor’s profile, you get a bunch of fields like the inbox to send requests to, the user’s full name, and the user’s profile photo. The photo is set in a field called icon (or image). If you skim through the ActivityPub specification, you’ll see this example:

"icon": [

Pretty simple. The field is an array with a single URL to the image. But most implementations don’t follow that example. Mastodon and Micro.blog both use something like this, which is in the more complete ActivityStreams spec:

"icon": {
  "url": "https://micro.blog/manton/avatar.jpg",
  "type": "Image",
  "mediaType": "image/jpeg"

Which one is correct? Both, of course! Back to the ActivityPub documentation for icon:

A link to an image or an Image object which represents the user’s profile picture

Now let’s check out what Ghost is doing:

"icon": "https://ghost.org/favicon.ico"