Skip to content

Messages have url property redirects to ActivityPub data

given: "Alice" created an actor on "banach" called "Alice"

send.Alice.request.create_actor
{
  "base_url": "http://banach",
  "preferred_username": "Alice",
  "profile": {},
  "automatically_accept_followers": null,
  "name": null
}
receive.Alice.response.create_actor
{
  "attachment": null,
  "published": "2025-12-19T09:49:03.541259",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA#legacy-key-1",
    "owner": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvCbpEA2PdR/GKWFr8TDA\nsPUqwJ/xLpjy3DS4JuDa9XhroRCFoFpIor3LwZbbmBglRlJyVFCOJGGfiHp7dmcf\nC3OLWYVWhRIFC2CstgWfk5Mobrs325WjhlH5e+yBZMkodxDdmzKyJ+vXXBcvpyt2\nnlpEcWUsg1qGMKQq8am5T7VNd2L0Odq3QxtP/CTaaFrTRl33+apPAC+oHdtOlHkl\ngryptNVBVCjne3ztBHhvGoC50Cr5IwGAmA0+Axp4kdo9JtAL5bvBYQG5hiKKlKx1\nqGYHyV/ceTzwiBfCOkZUL1mmAVo8pGpQCqQzri0KwDygeHJhjON06du5zHmGvwIS\n/QIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
  "type": "Person",
  "inbox": "http://banach/inbox/pl1mlybaqQQJkXNkwIGPPA",
  "outbox": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA/outbox",
  "followers": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA/followers",
  "following": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA/following",
  "preferredUsername": "Alice",
  "name": "Alice",
  "identifiers": [
    "acct:Alice@banach",
    "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA"
  ],
  "endpoints": {
    "sharedInbox": "http://banach/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

given: "Bob" created an actor on "banach" called "Bob"

send.Bob.request.create_actor
{
  "base_url": "http://banach",
  "preferred_username": "Bob",
  "profile": {},
  "automatically_accept_followers": null,
  "name": null
}
receive.Bob.response.create_actor
{
  "attachment": null,
  "published": "2025-12-19T09:49:04.719205",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ#legacy-key-1",
    "owner": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwEDY9pxITpo6eInLu4r7\nAauKp3ULGHCehRUMMw8sUqsSvYfwashpGZ5ueX6ca91Hc83wGQCNzELBgx+614r6\n9GjPfdR/8R1Q5yVScvk36ToJKkTUUSYNK/MSHPek1lmMSfpwY1L2ixCEAHdvpAS7\nLqqGcpU3eOtI5c1fAG7M3V4oliZvEYtF+BEs6V3iWYMBO9tch2zfwrWM5wAZ5lvi\nFwYVaQdwqhUcIBxwGFVsmNIzlyuL798PTVL0pvoebcjsD1cLlpcBbxBitqobTEhR\nfzps0ZKK7wTdYqzJ5sa9CdKweWwMxe/j3PJ4CDKim7XAdWBdxVg45FwScJs+Af6T\nqQIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
  "type": "Person",
  "inbox": "http://banach/inbox/ZA39XW8OtfIiHskrXtDs0Q",
  "outbox": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ/outbox",
  "followers": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ/followers",
  "following": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ/following",
  "preferredUsername": "Bob",
  "name": "Bob",
  "identifiers": [
    "acct:Bob@banach",
    "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ"
  ],
  "endpoints": {
    "sharedInbox": "http://banach/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

when: "Bob" sends "Alice" a Follow Activity

send.Bob.trigger.send_message
{
  "actor": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Follow",
    "actor": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
    "to": [
      "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA"
    ],
    "id": "follow:02552cb4-5bfe-47a2-89ac-bcbea39108a5",
    "published": "2025-12-19T09:49:04Z",
    "object": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA"
  }
}
receive.Bob.outgoing.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
      "to": [
        "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA"
      ],
      "id": "follow:02552cb4-5bfe-47a2-89ac-bcbea39108a5",
      "published": "2025-12-19T09:49:04Z",
      "object": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA"
    }
  },
  "actor": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
  "event_type": "outgoing",
  "history_id": null
}

when: "Alice" sends an Accept to this Follow Activity

receive.Alice.incoming.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
      "to": [
        "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA"
      ],
      "id": "follow:02552cb4-5bfe-47a2-89ac-bcbea39108a5",
      "published": "2025-12-19T09:49:04Z",
      "object": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA"
    }
  },
  "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
  "event_type": "incoming",
  "history_id": null
}
send.Alice.trigger.send_message
{
  "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Accept",
    "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
    "to": [
      "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ"
    ],
    "published": "2025-12-19T09:49:05Z",
    "object": "follow:02552cb4-5bfe-47a2-89ac-bcbea39108a5",
    "id": "accept:4e17fb24-c478-4648-82ca-125eea807ea9"
  }
}
receive.Alice.outgoing.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
      "to": [
        "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ"
      ],
      "published": "2025-12-19T09:49:05Z",
      "object": "follow:02552cb4-5bfe-47a2-89ac-bcbea39108a5",
      "id": "accept:4e17fb24-c478-4648-82ca-125eea807ea9"
    }
  },
  "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
  "event_type": "outgoing",
  "history_id": null
}

when: "Alice" publishes a message "Who stole my milk?" to her followers

receive.Bob.incoming.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
      "to": [
        "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ"
      ],
      "published": "2025-12-19T09:49:05Z",
      "object": "follow:02552cb4-5bfe-47a2-89ac-bcbea39108a5",
      "id": "accept:4e17fb24-c478-4648-82ca-125eea807ea9"
    }
  },
  "actor": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
  "event_type": "incoming",
  "history_id": null
}
send.Alice.trigger.publish_object
{
  "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Note",
    "attributedTo": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
    "to": [
      "https://www.w3.org/ns/activitystreams#Public"
    ],
    "cc": [
      "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA/followers"
    ],
    "published": "2025-12-19T09:49:06Z",
    "content": "Who stole my milk?"
  }
}
receive.Alice.outgoing.Create
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Create",
      "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "cc": [
        "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA/followers"
      ],
      "published": "2025-12-19T09:49:06Z",
      "object": {
        "@context": "https://www.w3.org/ns/activitystreams",
        "type": "Note",
        "attributedTo": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
        "to": [
          "https://www.w3.org/ns/activitystreams#Public"
        ],
        "cc": [
          "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA/followers"
        ],
        "published": "2025-12-19T09:49:06Z",
        "content": "Who stole my milk?",
        "id": "http://banach/html_display/object/019b3603-531c-7acd-bf22-72be0f24bd31",
        "replies": "http://banach/html_display/object/019b3603-531c-7acd-bf22-72be0f24bd31/replies",
        "shares": "http://banach/html_display/object/019b3603-531c-7acd-bf22-72be0f24bd31/shares",
        "likes": "http://banach/html_display/object/019b3603-531c-7acd-bf22-72be0f24bd31/likes",
        "url": [
          {
            "type": "Link",
            "mediaType": "text/html",
            "href": "http://banach/@aRhYVYvRdyFa/o/019b3603-531c-7acd-bf22-72be0f24bd31"
          }
        ]
      },
      "id": "http://banach/simple_storage/019b3603-5324-782f-838b-e5b9190ecf39"
    }
  },
  "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
  "event_type": "outgoing",
  "history_id": null
}
receive.Bob.incoming.Create
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Create",
      "actor": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "cc": [
        "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA/followers"
      ],
      "published": "2025-12-19T09:49:06Z",
      "object": {
        "@context": "https://www.w3.org/ns/activitystreams",
        "type": "Note",
        "attributedTo": "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA",
        "to": [
          "https://www.w3.org/ns/activitystreams#Public"
        ],
        "cc": [
          "http://banach/actor/5LkCtUyVS-BZSEz8-YRmkA/followers"
        ],
        "published": "2025-12-19T09:49:06Z",
        "content": "Who stole my milk?",
        "id": "http://banach/html_display/object/019b3603-531c-7acd-bf22-72be0f24bd31",
        "replies": "http://banach/html_display/object/019b3603-531c-7acd-bf22-72be0f24bd31/replies",
        "shares": "http://banach/html_display/object/019b3603-531c-7acd-bf22-72be0f24bd31/shares",
        "likes": "http://banach/html_display/object/019b3603-531c-7acd-bf22-72be0f24bd31/likes",
        "url": [
          {
            "type": "Link",
            "mediaType": "text/html",
            "href": "http://banach/@aRhYVYvRdyFa/o/019b3603-531c-7acd-bf22-72be0f24bd31"
          }
        ]
      },
      "id": "http://banach/simple_storage/019b3603-5324-782f-838b-e5b9190ecf39"
    }
  },
  "actor": "http://banach/actor/KJMqGjRqvovn_kqqMkNDDQ",
  "event_type": "incoming",
  "history_id": null
}

then: "Bob" receives a message saying "Who stole my milk?"

then: The received message contains an URL of mediatype "text/html"

then: A request to the object using accept "application/activity+json" gets redirected