Skip to content

Messages have url property

given: "Alice" created an actor on "abel" called "Alice" with username "Alice"

send.Alice.request.create_actor
{
  "base_url": "http://abel",
  "preferred_username": "Alice",
  "profile": {},
  "automatically_accept_followers": null,
  "name": null
}
receive.Alice.response.create_actor
{
  "attachment": null,
  "published": "2026-03-20T15:17:25.206401",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw#legacy-key-1",
    "owner": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA042VpER/I90GWqsOFUml\nTKcr7dZIr+fT/aLdPAamQjOi9/F/OZ4emXY1Ftw5Yvo2mbCaVSNTX1ARU/tjFK9V\ntGNJEgpeEp5wKUH691RhaxMZumU2nXcnKBHgoQYPmna5tQiGZjCHCcapHBgWM1JQ\nq1C6euoqlkGsdDfQ7V31JG0Bi+K4p8a65eIDN6HhUu/8CgrUwp7vyj/sDSLwTKkD\nfrfex/RWxOGkRtjpKQ54Vsj24AP8+k2AvtIe4onUsewEEGzAWrdS0YBw/RkvRuNs\nC6nRdIDLlN2ZF4JkZhwFSUmrIBLte88Jf9aTvu8r2S2ObYKlG1pn5kvc2OuMMyjH\nLQIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
  "type": "Person",
  "inbox": "http://abel/inbox/1ZN6-CHb91b_3nQN9K7SEQ",
  "outbox": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw/outbox",
  "followers": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw/followers",
  "following": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw/following",
  "preferredUsername": "Alice",
  "name": "Alice",
  "identifiers": [
    "acct:Alice@abel",
    "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw"
  ],
  "endpoints": {
    "sharedInbox": "http://abel/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

given: "Bob" created an actor on "abel" called "Bob" with username "Bob"

send.Bob.request.create_actor
{
  "base_url": "http://abel",
  "preferred_username": "Bob",
  "profile": {},
  "automatically_accept_followers": null,
  "name": null
}
receive.Bob.response.create_actor
{
  "attachment": null,
  "published": "2026-03-20T15:17:26.042379",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg#legacy-key-1",
    "owner": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7OSCoITGaJkC4CKd9UZO\nC06vUY0cvqf1kQhvdGnibGIA6rZtGAG6E9u+8uBBoTMLGTf3muiej1AF25+obXYf\nh1FlcR/Aa7Sr8USof1iLS0DDF+ilmdRu0HPvWg2Nipqow/wc4jnBV1EVP1BByGR1\nWGUS6E/AwqANU6eDc1kcnpoDH10+57OTcEZY4n0D8fIs05Wx33ONq8vSEIvlU/Tb\nVBxqKw11AA3W5lCBw6/CFsaXPGKU72WrNU47B5JwxNe0LiVk5QlMd210oy/leg15\nHT+PUIXvZkb20uIo6LFcEWbQqwcDXk0o3xtWp8wwlZDDxRKTOTM9nnTagId16WG8\nRwIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
  "type": "Person",
  "inbox": "http://abel/inbox/PMnqMb9YMUL9Mrsp3oEATQ",
  "outbox": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg/outbox",
  "followers": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg/followers",
  "following": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg/following",
  "preferredUsername": "Bob",
  "name": "Bob",
  "identifiers": [
    "acct:Bob@abel",
    "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg"
  ],
  "endpoints": {
    "sharedInbox": "http://abel/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

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

send.Bob.trigger.send_message
{
  "actor": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Follow",
    "actor": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
    "to": [
      "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw"
    ],
    "id": "follow:24323f22-9b62-46e3-9f2f-f1f8a31ae356",
    "published": "2026-03-20T15:17:26Z",
    "object": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw"
  }
}
receive.Bob.outgoing.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
      "to": [
        "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw"
      ],
      "id": "follow:24323f22-9b62-46e3-9f2f-f1f8a31ae356",
      "published": "2026-03-20T15:17:26Z",
      "object": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw"
    }
  },
  "actor": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
  "event_type": "outgoing",
  "history_id": null
}
receive.Alice.incoming.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
      "to": [
        "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw"
      ],
      "id": "follow:24323f22-9b62-46e3-9f2f-f1f8a31ae356",
      "published": "2026-03-20T15:17:26Z",
      "object": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw"
    }
  },
  "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
  "event_type": "incoming",
  "history_id": null
}

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

send.Alice.trigger.send_message
{
  "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Accept",
    "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
    "to": [
      "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg"
    ],
    "published": "2026-03-20T15:17:26Z",
    "object": "follow:24323f22-9b62-46e3-9f2f-f1f8a31ae356",
    "id": "accept:99e0be15-e652-4b63-a8c0-e56e452de89d"
  }
}
receive.Alice.outgoing.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
      "to": [
        "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg"
      ],
      "published": "2026-03-20T15:17:26Z",
      "object": "follow:24323f22-9b62-46e3-9f2f-f1f8a31ae356",
      "id": "accept:99e0be15-e652-4b63-a8c0-e56e452de89d"
    }
  },
  "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
  "event_type": "outgoing",
  "history_id": null
}
receive.Bob.incoming.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
      "to": [
        "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg"
      ],
      "published": "2026-03-20T15:17:26Z",
      "object": "follow:24323f22-9b62-46e3-9f2f-f1f8a31ae356",
      "id": "accept:99e0be15-e652-4b63-a8c0-e56e452de89d"
    }
  },
  "actor": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
  "event_type": "incoming",
  "history_id": null
}

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

send.Alice.trigger.publish_object
{
  "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Note",
    "attributedTo": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
    "to": [
      "https://www.w3.org/ns/activitystreams#Public"
    ],
    "cc": [
      "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw/followers"
    ],
    "published": "2026-03-20T15:17:27Z",
    "content": "Who stole my milk?"
  }
}
receive.Alice.outgoing.Create
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Create",
      "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "cc": [
        "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw/followers"
      ],
      "published": "2026-03-20T15:17:27Z",
      "object": {
        "@context": "https://www.w3.org/ns/activitystreams",
        "type": "Note",
        "attributedTo": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
        "to": [
          "https://www.w3.org/ns/activitystreams#Public"
        ],
        "cc": [
          "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw/followers"
        ],
        "published": "2026-03-20T15:17:27Z",
        "content": "Who stole my milk?",
        "id": "http://abel/html_display/object/019d0bd2-a413-7294-8af5-671cd31c3fbe",
        "replies": "http://abel/html_display/object/019d0bd2-a413-7294-8af5-671cd31c3fbe/replies",
        "shares": "http://abel/html_display/object/019d0bd2-a413-7294-8af5-671cd31c3fbe/shares",
        "likes": "http://abel/html_display/object/019d0bd2-a413-7294-8af5-671cd31c3fbe/likes",
        "url": [
          {
            "type": "Link",
            "mediaType": "text/html",
            "href": "http://abel/@rxYNEbzDjMBy/o/019d0bd2-a413-7294-8af5-671cd31c3fbe"
          }
        ]
      },
      "id": "http://abel/simple_storage/019d0bd2-a41a-7dc9-bc93-12a4be12fb71"
    }
  },
  "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
  "event_type": "outgoing",
  "history_id": null
}
receive.Bob.incoming.Create
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Create",
      "actor": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
      "to": [
        "https://www.w3.org/ns/activitystreams#Public"
      ],
      "cc": [
        "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw/followers"
      ],
      "published": "2026-03-20T15:17:27Z",
      "object": {
        "@context": "https://www.w3.org/ns/activitystreams",
        "type": "Note",
        "attributedTo": "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw",
        "to": [
          "https://www.w3.org/ns/activitystreams#Public"
        ],
        "cc": [
          "http://abel/actor/yjc9H3U71V_b5z7IA1CUTw/followers"
        ],
        "published": "2026-03-20T15:17:27Z",
        "content": "Who stole my milk?",
        "id": "http://abel/html_display/object/019d0bd2-a413-7294-8af5-671cd31c3fbe",
        "replies": "http://abel/html_display/object/019d0bd2-a413-7294-8af5-671cd31c3fbe/replies",
        "shares": "http://abel/html_display/object/019d0bd2-a413-7294-8af5-671cd31c3fbe/shares",
        "likes": "http://abel/html_display/object/019d0bd2-a413-7294-8af5-671cd31c3fbe/likes",
        "url": [
          {
            "type": "Link",
            "mediaType": "text/html",
            "href": "http://abel/@rxYNEbzDjMBy/o/019d0bd2-a413-7294-8af5-671cd31c3fbe"
          }
        ]
      },
      "id": "http://abel/simple_storage/019d0bd2-a41a-7dc9-bc93-12a4be12fb71"
    }
  },
  "actor": "http://abel/actor/s9D-f6sI66hrmSKbl3kMfg",
  "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: The URL resolves to a webpage containing "Who stole my milk?"