Skip to content

Alice removes Bob from her followers collection

given: "Alice" created an actor on "abel" called "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": "2025-12-19T09:52:08.470844",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg#legacy-key-1",
    "owner": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu7JP8zl6/KlVfQYcVPfB\nIBvVf08dRAamUMGjV1xaan7RY1Ckzuy8Y04QxMHRKPfo0peWfK2QrQxfScgM+wgI\nRJlDuNYEL0XXeLzrpg454dLrD/uFRTnqFYCo/KpBDPyEo72MnDO4ACIS4Tk48wzj\n5peyVfFTCFpUI5Ze7vImrbZbS6aIrHLajLZTvgrqwdMvxYlaYONouBnhB7mu+dGg\nN+/crIYRvGjIXMmM1AJbom10L/viR8FWqVtlVBfg4EociRJez0ggyTTjn2Q05eC6\nAsfdaBEJKeXCg2alr9LlC1gX/V8kNj4B4MfS902/twb3aRkMJ8tsA+Zo/OFlHPsC\n0wIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
  "type": "Person",
  "inbox": "http://abel/inbox/AbVQ4VSespkT6iNx7SLtsA",
  "outbox": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg/outbox",
  "followers": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg/followers",
  "following": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg/following",
  "preferredUsername": "Alice",
  "name": "Alice",
  "identifiers": [
    "acct:Alice@abel",
    "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg"
  ],
  "endpoints": {
    "sharedInbox": "http://abel/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:09.293135",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw#legacy-key-1",
    "owner": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+awn2dUF/shpWJvD9zTT\nrsUaYarRI6wjY5mCUagPPqfw5TXBVW50ZWEwCOHP02u/YX6s1e4Rxlnz+jAk8QVE\ntywlRg2KRyZtaQwnBJZTdJEc3vm03HNt4viUdMoymwn4oxnlwk/QX1xp00swoa37\nNhQF9X33AU/Q0sMQD65mDMt3nrzwyRPAHzH+fpYaGOh4f0tiVhbGppQdPgNe8riB\nfGW5SqZQK6wLFbK+wIKGY6HIws8Zv6KbbSNGw/m0jBFzXiGuK17/A4g1OobKQ7+B\n8vyM+fiBBH/MD/yXP097fPbM1nQazXGSlKmelo4ihKtTbAfQUiWy/1eMKG7YLkYL\n/QIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw",
  "type": "Person",
  "inbox": "http://abel/inbox/kKF83j7FmWunH5f1OmO6bQ",
  "outbox": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw/outbox",
  "followers": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw/followers",
  "following": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw/following",
  "preferredUsername": "Bob",
  "name": "Bob",
  "identifiers": [
    "acct:Bob@abel",
    "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw"
  ],
  "endpoints": {
    "sharedInbox": "http://abel/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

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

send.Bob.trigger.send_message
{
  "actor": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Follow",
    "actor": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw",
    "to": [
      "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg"
    ],
    "id": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
    "published": "2025-12-19T09:52:09Z",
    "object": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg"
  }
}
receive.Bob.outgoing.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw",
      "to": [
        "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg"
      ],
      "id": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
      "published": "2025-12-19T09:52:09Z",
      "object": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg"
    }
  },
  "actor": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw",
  "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/Xq_6ezPvCjpTlBNkxtR2dw",
      "to": [
        "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg"
      ],
      "id": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
      "published": "2025-12-19T09:52:09Z",
      "object": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg"
    }
  },
  "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
  "event_type": "incoming",
  "history_id": null
}
send.Alice.trigger.send_message
{
  "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Accept",
    "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
    "to": [
      "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw"
    ],
    "published": "2025-12-19T09:52:10Z",
    "object": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
    "id": "accept:155620d0-8ff7-4c79-b10e-3eed0dfcd18d"
  }
}
receive.Alice.outgoing.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
      "to": [
        "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw"
      ],
      "published": "2025-12-19T09:52:10Z",
      "object": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
      "id": "accept:155620d0-8ff7-4c79-b10e-3eed0dfcd18d"
    }
  },
  "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
  "event_type": "outgoing",
  "history_id": null
}

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

send.Alice.trigger.send_message
{
  "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Reject",
    "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
    "to": [
      "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw"
    ],
    "published": "2025-12-19T09:52:10Z",
    "object": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
    "id": "reject:4572fd96-0dbd-4173-8199-e03602b40ad1"
  }
}

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

receive.Bob.incoming.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
      "to": [
        "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw"
      ],
      "published": "2025-12-19T09:52:10Z",
      "object": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
      "id": "accept:155620d0-8ff7-4c79-b10e-3eed0dfcd18d"
    }
  },
  "actor": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw",
  "event_type": "incoming",
  "history_id": null
}
receive.Alice.outgoing.Reject
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Reject",
      "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
      "to": [
        "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw"
      ],
      "published": "2025-12-19T09:52:10Z",
      "object": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
      "id": "reject:4572fd96-0dbd-4173-8199-e03602b40ad1"
    }
  },
  "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
  "event_type": "outgoing",
  "history_id": null
}
receive.Bob.incoming.Reject
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Reject",
      "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
      "to": [
        "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw"
      ],
      "published": "2025-12-19T09:52:10Z",
      "object": "follow:68b27877-c0ff-4291-a995-333262c1c6a7",
      "id": "reject:4572fd96-0dbd-4173-8199-e03602b40ad1"
    }
  },
  "actor": "http://abel/actor/Xq_6ezPvCjpTlBNkxtR2dw",
  "event_type": "incoming",
  "history_id": null
}
send.Alice.request.fetch
{
  "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
  "uri": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg/followers"
}
receive.Alice.response.fetch
{
  "actor": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg",
  "uri": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg/followers",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "OrderedCollection",
    "id": "http://abel/actor/tfXgdY9CagjbDoKkOe2hXg/followers",
    "orderedItems": [],
    "totalItems": 0
  }
}

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

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