Before you start
Create the app
1
Start a new app
Open Create an app in Meta for Developers. Enter the app name and a contact email, then choose Next.
2
Pick the Threads use case
On the use case step, select Access the Threads API and choose Next. Connect a business portfolio now or skip it, then finish the remaining steps and create the app.
3
Add the permissions
In the app dashboard, open Use cases, then Customize on Access the Threads API, then Permissions.
threads_basic is already there and cannot be removed. Add threads_content_publish, threads_manage_replies and threads_manage_insights.PostQueen asks for these four and no others. Do not add threads_profile_discovery or the other optional permissions, and do not add instagram_* or pages_* permissions to this app.4
Add the redirect URI
Open Settings in the same use case. Enter the redirect URI in Redirect Callback URLs, then save.The redirect URI is where the network sends the browser back after someone approves PostQueen. It is
your
FRONTEND_URL + /integrations/social/ + the network’s identifier, for example
https://postqueen.example.com/integrations/social/pinterest.Most networks need exactly one URI, with no trailing slash. Two exceptions: TikTok Business needs
the trailing slash (/integrations/social/tiktok-business/), and a Google web client that also
serves Google Business Profile lists both /integrations/social/youtube and
/integrations/social/gmb. Channel developer apps lists every
network’s ending.Threads accepts only https redirects. When FRONTEND_URL is plain http, PostQueen sends the callback through https://redirectmeto.com/ first, and that wrapped address is the one to register:5
Set the callback URLs
In the same Settings, set:
- Uninstall Callback URL:
NEXT_PUBLIC_BACKEND_URL+/integrations/threads/platform-deauthorize - Delete Callback URL:
NEXT_PUBLIC_BACKEND_URL+/integrations/threads/platform-deletion
https://postqueen.example.com/api, the first is https://postqueen.example.com/api/integrations/threads/platform-deauthorize. Removing the app on Threads flags that account’s channels for reconnection, and a deletion request deletes them and their posts. Meta only calls a public https address, so skip this step on a local install.6
Copy the Threads app ID and secret
In the same Settings, copy the Threads App ID and the Threads App secret (choose Show). A Threads app has two app IDs: these are not the App ID and App secret under App settings > Basic.
7
Add the Threads accounts that will connect
While the app is in development, only Threads Testers can connect. Open App roles > Roles, choose Add People, pick Threads Tester and enter the Threads username.The invited account accepts on Threads, in Settings > Account > Website permissions, on the Invites tab.
Set the variables
Add the two keys to your environment:docker restart or
docker compose restart keeps the old container and its old environment.
In the folder that holds docker-compose.yaml, recreate only the postqueen service:
docker compose down for a settings change: on
a host that runs other Compose services in the same project, it stops them too.
Then open PostQueen, go to Channels, choose Add Channel and pick this network. You are
sent to its login to authorize PostQueen, and the channel appears in the Channels list once you
accept.
The channel is in the Channels list with its avatar and name.
Add Channel does not check whether your variables are set. A missing or misspelled key shows
up as a broken authorization page on the network’s side rather than a helpful message in
PostQueen, so if the login page itself looks wrong, check the keys before anything else.
App review
A new Threads app starts in development. Until Meta approves it, only Threads Testers on the app can connect, and nobody else can grant its permissions. To let anyone connect, request approval for each of the four permissions in App Review and verify your business portfolio. Meta asks for a description and a screen recording of how the app uses each permission. Then publish the app: Meta asks for an app icon, a privacy policy URL and a data deletion URL first, and in the EU a contact for a Data Protection Officer. Request only the four permissions in the table above.Troubleshooting
Threads shows an error about the redirect URI
Threads shows an error about the redirect URI
The redirect URI PostQueen sent is not in Redirect Callback URLs, or differs from it. On a plain
http install, register the redirectmeto.com address from the Add the redirect URI step, not the bare localhost one.The channel connected, but replies or analytics fail
The channel connected, but replies or analytics fail
A permission is missing from the app, and PostQueen does not check Threads permissions at connect. Add all four, then reconnect the channel and approve everything.
Threads access token expired
Threads access token expired
The account’s token could not be renewed. Reconnect the channel.