How to Verify a Federated Post Reached All Your Followers
🔍 WiseChecker

How to Verify a Federated Post Reached All Your Followers

When you publish a post on Mastodon, the server distributes it across the fediverse to your followers on other instances. You may notice that some followers never see your post, even though you sent it successfully from your own server. This happens because federation relies on each remote instance pulling the post from your server, and delays or server blocks can prevent delivery. This article explains the technical mechanisms behind post federation and provides concrete steps to confirm whether a specific post reached all your followers.

Key Takeaways: How to Verify Post Federation on Mastodon

  • Check the post page URL for the federated activity ID: The unique ID in the URL confirms the post was created on your server and is available for federation.
  • Use the Mastodon API endpoint /api/v1/statuses/:id/favourited_by: This endpoint shows which accounts have interacted with the post, indicating they received it.
  • Monitor server logs for outgoing delivery status: The Sidekiq::Federation::DeliveryWorker log entries show whether remote instances accepted the post.

How Mastodon Distributes Posts Across Instances

Mastodon uses the ActivityPub protocol to send posts between instances. When you publish a post, your server creates an Activity object containing the post content and sends it to every remote instance that has a follower of yours. The remote instance receives this activity, stores the post locally, and displays it in the timelines of its users who follow you.

The delivery process is asynchronous. Your server queues the delivery jobs in Sidekiq, a background job processor. Each remote instance receives a POST request with the activity JSON. If the remote instance accepts the request, it returns HTTP 202 Accepted. If the remote instance rejects the request due to moderation rules or server blocks, the delivery fails and the post never appears on that instance.

To verify that a post reached all followers, you need to check three things: that your server sent the activity to each remote instance, that each remote instance accepted the activity, and that the post appears in the timelines of followers on those instances. The following sections explain how to perform each check.

Steps to Verify That a Federated Post Reached Your Followers

  1. Open the post in a browser and copy its URL
    On your Mastodon instance, navigate to the post you want to verify. Click the timestamp of the post to open its individual page. The URL will look like https://yourinstance.social/@username/123456789012345678. The numeric ID at the end is the post ID. Copy this full URL.
  2. Check the post ID in the database
    If you have administrator access to your instance, open a Rails console on your server. Run the command Status.find(123456789012345678) using the post ID from the URL. This command returns the status object. Verify that the uri field contains the full ActivityPub URI. If the URI is present, the post was created with federation enabled. If the URI is nil, the post was set to unlisted or private visibility, which may limit federation.
  3. Examine the post’s delivery status using the Mastodon API
    Send a GET request to the endpoint https://yourinstance.social/api/v1/statuses/123456789012345678 with an access token that has the read:statuses scope. The response includes a visibility field. If the visibility is public or unlisted, the post is eligible for federation. If the visibility is private or direct, the post only reaches followers on the same instance and cannot be verified across instances.
  4. Check the server logs for delivery attempts
    On your Mastodon server, open the Sidekiq logs. Look for entries containing DeliveryWorker and the post ID. Each entry shows the target instance URL and the HTTP response code. A response code of 202 indicates successful delivery. A response code of 403 or 410 indicates rejection. If you see no entries for a specific instance, your server did not attempt delivery to that instance.
  5. Ask a follower on a remote instance to confirm
    Send a direct message to a follower on another instance and ask them to check their home timeline for your post. If they see the post, federation worked for that instance. If they do not see the post, ask them to check their federated timeline for your post. If it appears in the federated timeline but not the home timeline, the follower may need to refresh their connection to your instance.
  6. Use the favourited_by endpoint to verify interactions
    Send a GET request to https://yourinstance.social/api/v1/statuses/123456789012345678/favourited_by. The response lists accounts that favorited the post. If you see accounts from multiple different instances, those instances received the post. If you see only accounts from your own instance, the post may not have federated to other instances.

Common Issues That Prevent Post Federation

Post visibility is set to private or direct

Private and direct visibility posts are not sent to remote instances at all. Only public and unlisted posts are eligible for federation. If you need to verify delivery, change the post visibility to unlisted before publishing.

Remote instance has blocked your instance

Server-level blocks prevent any federation between two instances. If a remote instance has suspended or limited your instance, your posts will never reach followers on that instance. Check the server list on your admin panel to see if your instance has any known blocks.

Remote instance is experiencing high load

If a remote instance is under heavy load, it may reject incoming activities temporarily. The delivery job will be retried automatically by Sidekiq up to 25 times. If the retries fail, the post will not reach that instance. You can see retry counts in the Sidekiq dashboard under the Retries tab.

Follower account has been deactivated or suspended

If a follower account was deactivated after you published the post, your server will still attempt delivery. The remote instance will return a 410 Gone response, and the delivery will fail. This does not affect delivery to other followers on the same instance.

Item Public Post Unlisted Post
Federation to remote instances Yes Yes
Appears in local public timeline Yes No
Appears in federated timeline Yes No
Delivery verification via API Full Full

You can now verify whether a federated post reached all your followers by checking the post ID in the database, examining server logs, and using the Mastodon API endpoints. To improve delivery reliability, keep your instance software up to date and monitor the Sidekiq queue for failed deliveries. For advanced tracking, consider enabling the federation_delivery_worker log level to debug in config/settings.yml to capture every delivery attempt.