Site Tools


troubleshooting:gotosocial_federation

GoToSocial Federation & Follow Troubleshooting

Status: Resolved
Date: 2026-05-27
Affected service: GoToSocial

Symptom

Follow requests sent from @brennan@folk.zone showed as “requested” on the client but never appeared as pending on the remote instance (social.lol). Reverse follows from social.lol also failed to appear on the GTS side.

Diagnosis

Check GTS logs for delivery errors:

docker logs gotosocial --since 15m 2>&1 | grep -iE 'follow|deliver|error|warn' | grep -v 'cache\|schedule'

The key error pattern to look for:

func=httpclient.(*Client).DoOnce level=ERROR method=POST url=https://social.lol/inbox msg="http response: 503 Service Unavailable"
func=httpclient.(*Client).DoOnce level=INFO method=POST url=https://social.lol/inbox msg="400 Bad Request"

GTS attempts delivery twice. After a 400 on the second attempt, it does not auto-retry — the follow activity is silently dropped.

Root Cause

The remote instance (social.lol) returned a 503 on the first delivery attempt, then a 400 on retry. The 400 is likely a signature replay rejection — Mastodon-compatible instances reject re-signed requests with the same timestamp/nonce.

This is a transient remote-side failure, not a configuration problem on the GTS instance.

Fix

Unfollow and re-follow the account from your client (Pinafore or Phanpy). GTS will generate a fresh Follow activity with a new signature, which will deliver successfully.

Follow Import from Another Instance

To bulk-import follows from another Mastodon-compatible instance (e.g. social.lol):

  1. On the source instance: Settings → Import and Export → Export → Following list → download follows.csv
  2. Set Type to Following list, upload the CSV, choose Merge mode
  3. GTS queues all follow activities and delivers them asynchronously

At 1,500 accounts, delivery takes 10–30 minutes. GTS uses 8 delivery workers by default and rate-limits outgoing federation. Monitor progress:

docker logs gotosocial -f 2>&1 | grep -E 'Accept objectType=Follow|ERROR.*POST'

Normal errors during bulk import:

  • Timeout on slow/down instances — GTS retries automatically
  • 404 on /actor/outbox — harmless stats lookup on some instances
  • 503 from busy instances — GTS retries with backoff

Instance Contact Account Field

The contact account field in Settings → Administration → Instance Settings expects a username only (e.g. brennan), not a display name or email address. Using a display name or email causes a 400 error:

errors="Error #01: db error getting selected contact account with username Brennan Kenneth Brown: sql: no rows in result set"

See Also

troubleshooting/gotosocial_federation.txt · Last modified: by 127.0.0.1