Table of Contents
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):
- On the source instance: Settings → Import and Export → Export → Following list → download
follows.csv - On GTS: go to
https://social.folk.zone/settings/migration/import - Set Type to Following list, upload the CSV, choose Merge mode
- 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"
