Skip to content

Alice automatically accepts followers and Bob follows Alice

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:22:16.077930",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ#legacy-key-1",
    "owner": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzrXeHrxOBeFO+HKpg6/B\nXACFvE4gKDbLWkR64SjI1IlF6nqH0zpU5MUpYMw/vFTnF0p5Y4+dJ6UKZSbPzWR8\nfunoFtdoPk6zmhkypykklVj+Vq6oVAAHcDM95UaetPZJVQKQZhTN74Gv+s6FzgGV\nmttQFfmhEMP7st6F/pLIqZ9/e4eBX1W1HDODNUDAdvPB2yuAgf+1E+grmxnfEGLT\n2nwVgppGvquIigc6WqJxo2U2a5+Q6peu9mcd2sIwvhhlnN9ALMWqhjeqe7DGqVuS\nH9mVxhSuBqLWGcD/dYoCSNe7VcVvLncFjXm5ngd2Hhf/S1Zi2eFb724N5RuHKHCJ\nMQIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
  "type": "Person",
  "inbox": "http://abel/inbox/A7hmAMrtapa-BogmxB7cBw",
  "outbox": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ/outbox",
  "followers": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ/followers",
  "following": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ/following",
  "preferredUsername": "alice",
  "name": "alice",
  "identifiers": [
    "acct:alice@abel",
    "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ"
  ],
  "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:22:16.773885",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/FBQerZuajU_7eXthfxZV_g#legacy-key-1",
    "owner": "http://abel/actor/FBQerZuajU_7eXthfxZV_g",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArL78PBY+8hQcTV7HGlyc\nPzyNLYvM1ESUgvVmddKryhhkz1jRdy6aJ4wj1ewN2MfwiodyB5PUpW73BhbptVrL\numCRTE4nuDYjpheaHeDpZmSFyKwwqei1l3e7XUXvhcGYk5fea7+weXLMJcvLvzY2\nTu35+8sMtfUdtmnyvvSGEd3kdKcp6l//bFW/DFCvY6kDuvoVwDQHQmPswwr4lU+v\naD7wJuVSsjPewL786o67Mo/4mobDQuX3Vr6bVk2N9llhYMKcyw9vIn8t1BVJI01l\nGhqpve2bf9BsPyUEKPcqnmKFCMdrxuFwGW8GLYGvVzmV21hVI7Zw0uqZGNyTDser\ngQIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/FBQerZuajU_7eXthfxZV_g",
  "type": "Person",
  "inbox": "http://abel/inbox/91czC6lzLCb11QP8GuktzQ",
  "outbox": "http://abel/actor/FBQerZuajU_7eXthfxZV_g/outbox",
  "followers": "http://abel/actor/FBQerZuajU_7eXthfxZV_g/followers",
  "following": "http://abel/actor/FBQerZuajU_7eXthfxZV_g/following",
  "preferredUsername": "bob",
  "name": "bob",
  "identifiers": [
    "acct:bob@abel",
    "http://abel/actor/FBQerZuajU_7eXthfxZV_g"
  ],
  "endpoints": {
    "sharedInbox": "http://abel/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

given: "alice" automatically accepts followers

send.alice.trigger.update_actor
{
  "actor": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
  "autoFollow": true
}

when: "bob" sends "alice" a Follow Activity

send.bob.trigger.send_message
{
  "actor": "http://abel/actor/FBQerZuajU_7eXthfxZV_g",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Follow",
    "actor": "http://abel/actor/FBQerZuajU_7eXthfxZV_g",
    "to": [
      "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ"
    ],
    "id": "follow:5ad4c89d-59ea-4114-9179-ee082dc83d7e",
    "published": "2026-03-20T15:22:17Z",
    "object": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ"
  }
}
receive.bob.outgoing.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://abel/actor/FBQerZuajU_7eXthfxZV_g",
      "to": [
        "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ"
      ],
      "id": "follow:5ad4c89d-59ea-4114-9179-ee082dc83d7e",
      "published": "2026-03-20T15:22:17Z",
      "object": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ"
    }
  },
  "actor": "http://abel/actor/FBQerZuajU_7eXthfxZV_g",
  "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/FBQerZuajU_7eXthfxZV_g",
      "to": [
        "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ"
      ],
      "id": "follow:5ad4c89d-59ea-4114-9179-ee082dc83d7e",
      "published": "2026-03-20T15:22:17Z",
      "object": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ"
    }
  },
  "actor": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
  "event_type": "incoming",
  "history_id": null
}

then: The "followers" collection of "alice" contains "bob"

receive.alice.outgoing.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
      "to": [
        "http://abel/actor/FBQerZuajU_7eXthfxZV_g"
      ],
      "published": "2026-03-20T15:22:17Z",
      "object": "follow:5ad4c89d-59ea-4114-9179-ee082dc83d7e",
      "id": "http://abel/object/019d0bd7-122d-7841-8530-38d9591cf4a4"
    }
  },
  "actor": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
  "event_type": "outgoing",
  "history_id": null
}
send.alice.request.fetch
{
  "actor": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
  "uri": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ/followers"
}
receive.bob.incoming.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
      "to": [
        "http://abel/actor/FBQerZuajU_7eXthfxZV_g"
      ],
      "published": "2026-03-20T15:22:17Z",
      "object": "follow:5ad4c89d-59ea-4114-9179-ee082dc83d7e",
      "id": "http://abel/object/019d0bd7-122d-7841-8530-38d9591cf4a4"
    }
  },
  "actor": "http://abel/actor/FBQerZuajU_7eXthfxZV_g",
  "event_type": "incoming",
  "history_id": null
}
receive.alice.response.fetch
{
  "actor": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ",
  "uri": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ/followers",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "OrderedCollection",
    "id": "http://abel/actor/-PC7Mfgaxf6PFapvWzZMXQ/followers",
    "orderedItems": [
      "http://abel/actor/FBQerZuajU_7eXthfxZV_g"
    ],
    "totalItems": 1
  }
}

then: The "following" collection of "bob" contains "alice"

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