Skip to content

Alice removes Bob from her followers collection

given: "Alice" created an actor on "banach" called "Alice" with username "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": "2026-03-20T15:23:24.982058",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw#legacy-key-1",
    "owner": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqmJ/CMRZFSRyeSpH/9t3\nykzXKyYF/4kAtH01uNYx+jc7OwDnMidVONcLVqOvU8NpdSBgIqy6XRjq6BM1s/ZV\n86A/PtHFdwQeJIoYSDkYK0QCcO1fisOZpaHjXeP7h+xvHjK5B14uYIU8HKF1pqtC\nVGclw2yDRq8Z7E6tCjmSbiY5v67CI+sOWK1LvPZGDtT046QsZAXVQKQSbUPQR3Kl\nwFP+9TNU7/s6A8F5j3tqJ3OEAPlAk89fK/yo32aUwPPXvjB+du0q2jWsKN73r89d\no5SwQpaZpHVRSgi7eFvOiKpFSxfH9gOrjA9SLYgBuuc1IN9lDh3jCKcFpc47uj6y\nEQIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
  "type": "Person",
  "inbox": "http://banach/inbox/93_wUjCnXIBycQQLacHI4A",
  "outbox": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw/outbox",
  "followers": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw/followers",
  "following": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw/following",
  "preferredUsername": "Alice",
  "name": "Alice",
  "identifiers": [
    "acct:Alice@banach",
    "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw"
  ],
  "endpoints": {
    "sharedInbox": "http://banach/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:23:25.616279",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A#legacy-key-1",
    "owner": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrllvYRV37mfM+vGDyKq\nZ17JO0hXNZioCRK3wM6n927nvwHR21Fh63tfSdDcw+oid7xK2EFAlwUaIM+zZ0XK\nb871AN33PD20lO4PxwA6VqzNSs4ohaOj0gfJfvJREgw2xTpFq2ycEk6FezoETYZW\n0JhHwuRRGlqAlAtmEy1ueDZWmmRC2UfYGrUwLdc4ZiMFZb7CdbVMSBobSWo1CHFW\nZ0x0tPcLNoaQZ+2v1bfPeaWBcfkvBQQiMyA9XhJzShuLZNzIM8+MoEh1+GU08KUw\nT09aUy23ZfbB2f4SD0dv4bqRhUxEQDNCutp3uq6Gb0AJoQ4ifySIpRcpbFylurdX\n1wIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A",
  "type": "Person",
  "inbox": "http://abel/inbox/L8GzNGZbM-oPZQTYtwuwCw",
  "outbox": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A/outbox",
  "followers": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A/followers",
  "following": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A/following",
  "preferredUsername": "Bob",
  "name": "Bob",
  "identifiers": [
    "acct:Bob@abel",
    "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A"
  ],
  "endpoints": {
    "sharedInbox": "http://abel/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

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

send.Bob.trigger.send_message
{
  "actor": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Follow",
    "actor": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A",
    "to": [
      "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw"
    ],
    "id": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
    "published": "2026-03-20T15:23:25Z",
    "object": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw"
  }
}
receive.Bob.outgoing.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A",
      "to": [
        "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw"
      ],
      "id": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
      "published": "2026-03-20T15:23:25Z",
      "object": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw"
    }
  },
  "actor": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A",
  "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/qqn9cpfryn6GeBZDQuhI-A",
      "to": [
        "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw"
      ],
      "id": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
      "published": "2026-03-20T15:23:25Z",
      "object": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw"
    }
  },
  "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
  "event_type": "incoming",
  "history_id": null
}

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

send.Alice.trigger.send_message
{
  "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Accept",
    "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
    "to": [
      "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A"
    ],
    "published": "2026-03-20T15:23:26Z",
    "object": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
    "id": "accept:073557cc-a95a-4616-ba04-e3c054659556"
  }
}
receive.Alice.outgoing.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
      "to": [
        "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A"
      ],
      "published": "2026-03-20T15:23:26Z",
      "object": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
      "id": "accept:073557cc-a95a-4616-ba04-e3c054659556"
    }
  },
  "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
  "event_type": "outgoing",
  "history_id": null
}
receive.Bob.incoming.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
      "to": [
        "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A"
      ],
      "published": "2026-03-20T15:23:26Z",
      "object": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
      "id": "accept:073557cc-a95a-4616-ba04-e3c054659556"
    }
  },
  "actor": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A",
  "event_type": "incoming",
  "history_id": null
}

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

send.Alice.trigger.send_message
{
  "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Reject",
    "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
    "to": [
      "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A"
    ],
    "published": "2026-03-20T15:23:26Z",
    "object": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
    "id": "reject:df389383-aee4-4efa-afb4-76d5625f5df5"
  }
}
receive.Alice.outgoing.Reject
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Reject",
      "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
      "to": [
        "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A"
      ],
      "published": "2026-03-20T15:23:26Z",
      "object": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
      "id": "reject:df389383-aee4-4efa-afb4-76d5625f5df5"
    }
  },
  "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
  "event_type": "outgoing",
  "history_id": null
}
receive.Bob.incoming.Reject
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Reject",
      "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
      "to": [
        "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A"
      ],
      "published": "2026-03-20T15:23:26Z",
      "object": "follow:a13d5dcf-baa4-4729-b502-35d95fd2dd63",
      "id": "reject:df389383-aee4-4efa-afb4-76d5625f5df5"
    }
  },
  "actor": "http://abel/actor/qqn9cpfryn6GeBZDQuhI-A",
  "event_type": "incoming",
  "history_id": null
}

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

send.Alice.request.fetch
{
  "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
  "uri": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw/followers"
}
receive.Alice.response.fetch
{
  "actor": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw",
  "uri": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw/followers",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "OrderedCollection",
    "id": "http://banach/actor/1H3qYshevEzYZ9DVI4-YRw/followers",
    "orderedItems": [],
    "totalItems": 0
  }
}

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

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