Skip to content

Alice sends her followers a message

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:24.793389",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ#legacy-key-1",
    "owner": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmsaKVPNqkd9UssIkUDp9\nc8h/u00FS9aodMphXmSIpNgtQ+lVPnORy4EydqVDBVaFmymhWbLaEK8Ejz342ImP\nPeVK9TGfWiaPE7yLaS1HtmbhNGiD+zzl5lTcG01DVXMqDSTEDUT3pGT+8cCqS6/H\nUIyZdlfE2tFYxfQo2o+fPmevHbcGdukZ01SQmt6uc5sZHde0pLT2Dwl29CFc0FUo\nJ+2OARNgyDBDY4s1dgkGN5HyWBkjE/B4t2iQwDO3N7WwuRgFia3pcdPY6EFUr4IO\nx22pj5LCgydXfbAIxbZlfE0/gnm7BHu4Du7saARj5mvv6mNNTKNSlloYUMxk+9SM\nTwIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
  "type": "Person",
  "inbox": "http://abel/inbox/icqNvXOldxGhvdj-SpxD6w",
  "outbox": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/outbox",
  "followers": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/followers",
  "following": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/following",
  "preferredUsername": "Alice",
  "name": "Alice",
  "identifiers": [
    "acct:Alice@abel",
    "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ"
  ],
  "endpoints": {
    "sharedInbox": "http://abel/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

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

send.Bob.request.create_actor
{
  "base_url": "http://banach",
  "preferred_username": "Bob",
  "profile": {},
  "automatically_accept_followers": null,
  "name": null
}
receive.Bob.response.create_actor
{
  "attachment": null,
  "published": "2026-03-20T15:22:25.373829",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA#legacy-key-1",
    "owner": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAropwFq7v0sVcPECpRC4r\nKENvxO7V8B7GKqGC7nHkpL6YGGE2tJvVNw2gTayFU+528ALtiumMTKssymiq/Eot\nx5eeI/secBf29y9eKZhWNK8ZYoKHHiLJ9H6SVfpBy7hT2B/B8X1EVfohloZFI26j\nA+RrWFJtdZipg11ZeAadzYSdus+LME4Vdbl64XXxLJMXzEcpJhRipcE+zRxWN71u\nm3E9TBVwbT2XrtV1jpcXptbUzIxJ3Ej3u2THgJRUAU9FzcXQFA8swrwHC1xna3lV\n0g25PEFLWS95qxOlQMtRHtbKVK+uTu0cYqbKxQOPBIjZsM024YVZqOUqVMouJ8Ur\nvQIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
  "type": "Person",
  "inbox": "http://banach/inbox/E8E1ns3TZwQnm65lVGSISw",
  "outbox": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA/outbox",
  "followers": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA/followers",
  "following": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA/following",
  "preferredUsername": "Bob",
  "name": "Bob",
  "identifiers": [
    "acct:Bob@banach",
    "http://banach/actor/pLOAD_i-8HogJatwcNnhSA"
  ],
  "endpoints": {
    "sharedInbox": "http://banach/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

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

send.Bob.trigger.send_message
{
  "actor": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Follow",
    "actor": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
    "to": [
      "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ"
    ],
    "id": "follow:e54c05c4-f266-420c-bfa5-1b42583dc1ed",
    "published": "2026-03-20T15:22:25Z",
    "object": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ"
  }
}
receive.Bob.outgoing.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
      "to": [
        "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ"
      ],
      "id": "follow:e54c05c4-f266-420c-bfa5-1b42583dc1ed",
      "published": "2026-03-20T15:22:25Z",
      "object": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ"
    }
  },
  "actor": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
  "event_type": "outgoing",
  "history_id": null
}
receive.Alice.incoming.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
      "to": [
        "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ"
      ],
      "id": "follow:e54c05c4-f266-420c-bfa5-1b42583dc1ed",
      "published": "2026-03-20T15:22:25Z",
      "object": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ"
    }
  },
  "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
  "event_type": "incoming",
  "history_id": null
}

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

send.Alice.trigger.send_message
{
  "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Accept",
    "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
    "to": [
      "http://banach/actor/pLOAD_i-8HogJatwcNnhSA"
    ],
    "published": "2026-03-20T15:22:25Z",
    "object": "follow:e54c05c4-f266-420c-bfa5-1b42583dc1ed",
    "id": "accept:323d8faf-2ff1-402a-b3f0-80bacae8d00c"
  }
}
receive.Alice.outgoing.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
      "to": [
        "http://banach/actor/pLOAD_i-8HogJatwcNnhSA"
      ],
      "published": "2026-03-20T15:22:25Z",
      "object": "follow:e54c05c4-f266-420c-bfa5-1b42583dc1ed",
      "id": "accept:323d8faf-2ff1-402a-b3f0-80bacae8d00c"
    }
  },
  "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
  "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/95x5eD9yCjxSShwNUsFqvQ",
      "to": [
        "http://banach/actor/pLOAD_i-8HogJatwcNnhSA"
      ],
      "published": "2026-03-20T15:22:25Z",
      "object": "follow:e54c05c4-f266-420c-bfa5-1b42583dc1ed",
      "id": "accept:323d8faf-2ff1-402a-b3f0-80bacae8d00c"
    }
  },
  "actor": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
  "event_type": "incoming",
  "history_id": null
}

when: "Alice" messages her followers "Got milk?"

send.Alice.trigger.send_message
{
  "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Create",
    "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
    "to": [
      "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/followers"
    ],
    "id": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/fd0e50b964854c70",
    "published": "2026-03-20T15:22:26Z",
    "object": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Note",
      "attributedTo": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
      "to": [
        "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/followers"
      ],
      "id": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/2163c92d05ca98e5",
      "published": "2026-03-20T15:22:26Z",
      "content": "Got milk?"
    }
  }
}
receive.Alice.outgoing.Create
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Create",
      "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
      "to": [
        "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/followers"
      ],
      "id": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/fd0e50b964854c70",
      "published": "2026-03-20T15:22:26Z",
      "object": {
        "@context": "https://www.w3.org/ns/activitystreams",
        "type": "Note",
        "attributedTo": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
        "to": [
          "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/followers"
        ],
        "id": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/2163c92d05ca98e5",
        "published": "2026-03-20T15:22:26Z",
        "content": "Got milk?"
      }
    }
  },
  "actor": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
  "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/95x5eD9yCjxSShwNUsFqvQ",
      "to": [
        "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/followers"
      ],
      "id": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/fd0e50b964854c70",
      "published": "2026-03-20T15:22:26Z",
      "object": {
        "@context": "https://www.w3.org/ns/activitystreams",
        "type": "Note",
        "attributedTo": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ",
        "to": [
          "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/followers"
        ],
        "id": "http://abel/actor/95x5eD9yCjxSShwNUsFqvQ/2163c92d05ca98e5",
        "published": "2026-03-20T15:22:26Z",
        "content": "Got milk?"
      }
    }
  },
  "actor": "http://banach/actor/pLOAD_i-8HogJatwcNnhSA",
  "event_type": "incoming",
  "history_id": null
}

then: "Bob" receives a message saying "Got milk?"