You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Carousel publish on an account with user_id = NULL (manual-form account) failed at child container #1:
Threads API error: Unsupported post request. Object with ID
'THAASBUF8ygJdBYmJZAb0RfMFFQemdLQjNueG44RS1EWVJFMm9mbzBmVlVaalJETV94TkNkeFhaRFRJblNiQkh4cG4wUmI3MnM2REQ3TzMtUkxuU0UxZAGc1NEdvNmpnSnIzLTRVcTFVRUgwUzhFRWduM1RMUnRKaWVPbkNmenhVM1BpdlctVW9hUEFDR01yWnNjVVVreTJrQzJCRFZAlSjVZAMjcwU3ZAsQQZDZD'
does not exist ... [THApiException #100] (HTTP 400)
That "object ID" is not a Threads container ID — it is an encoded access token (length, alphabet, and prefix pattern match a Graph API token; the account's real user_id was NULL at the time). The publish path (or the #264 self-heal) passed the access token where a numeric user ID belongs, so Meta rejected the request.
Additionally, the #264 self-heal did not persist a corrected user_id: GET /api/accounts still showed user_id: null for this account after publish attempts and after a scheduler restart.
Impact
Any manual-form account (the very accounts that need the self-heal) cannot publish CAROUSEL/IMAGE/TEXT posts that address the user graph object.
The failure message gives no hint that identity resolution produced garbage.
Proposed fixes
Before publish, require a numeric user_id; if missing, resolve via GET /me?fields=id,username and fail loudly (do not fall back to any non-numeric value) if resolution fails.
Guard by format: user_id must match ^\d{15,20}$ before being used in any Graph path; log and reject otherwise (this turns the confusing fix: register migration 008 in store.migrate() #100 into a clear internal error).
Persist the healed user_id back to the account row (currently it appears to stay NULL).
Same format guard on the OAuth exchange path: the response's user_id should be validated before storage.
Repro: account added via manual form (user_id null) → schedule any CAROUSEL → approve → observe #100 with a token-shaped ID in the error.
Evidence (2026-09-23, prod v0.9.4)
Carousel publish on an account with
user_id = NULL(manual-form account) failed at child container #1:That "object ID" is not a Threads container ID — it is an encoded access token (length, alphabet, and prefix pattern match a Graph API token; the account's real user_id was NULL at the time). The publish path (or the #264 self-heal) passed the access token where a numeric user ID belongs, so Meta rejected the request.
Additionally, the
#264self-heal did not persist a correcteduser_id:GET /api/accountsstill showeduser_id: nullfor this account after publish attempts and after a scheduler restart.Impact
Proposed fixes
user_id; if missing, resolve viaGET /me?fields=id,usernameand fail loudly (do not fall back to any non-numeric value) if resolution fails.user_idmust match^\d{15,20}$before being used in any Graph path; log and reject otherwise (this turns the confusing fix: register migration 008 in store.migrate() #100 into a clear internal error).user_idback to the account row (currently it appears to stay NULL).user_idshould be validated before storage.Repro: account added via manual form (user_id null) → schedule any CAROUSEL → approve → observe #100 with a token-shaped ID in the error.