Skip to content

Bob unfollows Alice

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:52:02.936442",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA#legacy-key-1",
    "owner": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwiXbAjnIv2t6kxHelp0D\nAKfif8JHXd8au0vBPzks63hYdpfwNHN06McjCbYnFSL4PwUcMMlTInXcpDsh8kFq\nAYvt8r5gShxQVPBwb1XZnNxwBbHqa97/5Zrbg751KKT7jp2I1zxeB68kMAjZl2/A\nswjRyC1wE0Tu/I9str0gSSMa6sUdzvxlxnqsKbcqUM6h2ag1SHAw8n8b8qJDfUnV\n8i+77M5R6Ec5fdRYB4LB5+yj1NuzXqK4KRqJNy6+7ASsLOem4OIqjGidy5KRgJu3\nXP5MGfhgkkjp+ycN/6yG4dU3ispD4R7GLsCUCDUry2UvHrU6n405T81QhJ+VqOHN\nhwIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
  "type": "Person",
  "inbox": "http://banach/inbox/sK_l-ZXtjKRCa4hlwXTlUA",
  "outbox": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA/outbox",
  "followers": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA/followers",
  "following": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA/following",
  "preferredUsername": "Alice",
  "name": "Alice",
  "identifiers": [
    "acct:Alice@banach",
    "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
  ],
  "endpoints": {
    "sharedInbox": "http://banach/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

given: "Bob" created an actor on "abel" called "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": "2025-12-19T09:52:04.172213",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw#legacy-key-1",
    "owner": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAre9SsjisjyYO7Pq25oyE\nZsH9Z7fNndKGkGo6iaLCQtKlBbZw07TQHjaUh/S/WdVqFHg3izOwIL8VRbFcRBM6\n/FTUFJI6S5zYQ80Pb3+mA+5mC7uVe9rgOIPZPsvSSM2YYEe+t1hnKu/83kjJsFfe\nT53Ducu90olXK+u25CyqZ58to3BP7kSPrM91pb2bHSq1jWiP4jk2rlhn5LnYvMtC\nD9Q7+TcTXOsWOobsK3Koe9Ck6qmmPiXGz5H74S1JjPx7DMiyFmXG9c5HSjtSRO9A\napyRUJF+QxWYG+dXSIZOQMT0oKSjHNRAQugBpBpdgKQS+ayqwpNaGcgBNVMSRxxP\npQIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
  "type": "Person",
  "inbox": "http://abel/inbox/iLdzxQf9UydEsM1Ta3wftw",
  "outbox": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw/outbox",
  "followers": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw/followers",
  "following": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw/following",
  "preferredUsername": "Bob",
  "name": "Bob",
  "identifiers": [
    "acct:Bob@abel",
    "http://abel/actor/29bI0vgqDfYL6LxhyP92cw"
  ],
  "endpoints": {
    "sharedInbox": "http://abel/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

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

send.Bob.trigger.send_message
{
  "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Follow",
    "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
    "to": [
      "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
    ],
    "id": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
    "published": "2025-12-19T09:52:04Z",
    "object": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
  }
}
receive.Bob.outgoing.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
      "to": [
        "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
      ],
      "id": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
      "published": "2025-12-19T09:52:04Z",
      "object": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
    }
  },
  "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
  "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://abel/actor/29bI0vgqDfYL6LxhyP92cw",
      "to": [
        "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
      ],
      "id": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
      "published": "2025-12-19T09:52:04Z",
      "object": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
    }
  },
  "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
  "event_type": "incoming",
  "history_id": null
}
send.Alice.trigger.send_message
{
  "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Accept",
    "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
    "to": [
      "http://abel/actor/29bI0vgqDfYL6LxhyP92cw"
    ],
    "published": "2025-12-19T09:52:04Z",
    "object": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
    "id": "accept:708a6d1f-6927-4c0b-9c95-23d4d50a8a45"
  }
}
receive.Alice.outgoing.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
      "to": [
        "http://abel/actor/29bI0vgqDfYL6LxhyP92cw"
      ],
      "published": "2025-12-19T09:52:04Z",
      "object": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
      "id": "accept:708a6d1f-6927-4c0b-9c95-23d4d50a8a45"
    }
  },
  "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
  "event_type": "outgoing",
  "history_id": null
}

when: "Bob" sends "Alice" an Undo Follow Activity

send.Bob.trigger.send_message
{
  "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Undo",
    "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
    "to": [
      "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
    ],
    "published": "2025-12-19T09:52:05Z",
    "object": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
    "id": "undo:f8024ce1-acb2-4b1f-be8a-0eb28012005a"
  }
}

then: The "followers" collection of "Alice" does not include "Bob"

receive.Bob.outgoing.Undo
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Undo",
      "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
      "to": [
        "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
      ],
      "published": "2025-12-19T09:52:05Z",
      "object": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
      "id": "undo:f8024ce1-acb2-4b1f-be8a-0eb28012005a"
    }
  },
  "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
  "event_type": "outgoing",
  "history_id": null
}
send.Alice.request.fetch
{
  "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
  "uri": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA/followers"
}
receive.Bob.incoming.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
      "to": [
        "http://abel/actor/29bI0vgqDfYL6LxhyP92cw"
      ],
      "published": "2025-12-19T09:52:04Z",
      "object": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
      "id": "accept:708a6d1f-6927-4c0b-9c95-23d4d50a8a45"
    }
  },
  "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
  "event_type": "incoming",
  "history_id": null
}
receive.Alice.incoming.Undo
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Undo",
      "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
      "to": [
        "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA"
      ],
      "published": "2025-12-19T09:52:05Z",
      "object": "follow:a5c1ef4b-f873-48f3-9aa3-db65ff48a589",
      "id": "undo:f8024ce1-acb2-4b1f-be8a-0eb28012005a"
    }
  },
  "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
  "event_type": "incoming",
  "history_id": null
}
receive.Alice.response.fetch
{
  "actor": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA",
  "uri": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA/followers",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "OrderedCollection",
    "id": "http://banach/actor/fnJ2JNA8JOE_EyPjFFfaMA/followers",
    "orderedItems": [],
    "totalItems": 0
  }
}

then: The "following" collection of "Bob" does not include "Alice"

send.Bob.request.fetch
{
  "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
  "uri": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw/following"
}
receive.Bob.response.fetch
{
  "actor": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw",
  "uri": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw/following",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "OrderedCollection",
    "id": "http://abel/actor/29bI0vgqDfYL6LxhyP92cw/following",
    "orderedItems": [],
    "totalItems": 0
  }
}