Skip to main content
On a self-hosted PostQueen the Threads app is yours. Threads needs a Meta app of its own, created with the Threads use case. It is not the Facebook app and not the Instagram (Standalone) app from Instagram setup.

Before you start

PostQueen does not check the granted Threads permissions when an account connects. With one missing, the channel connects and looks healthy, and posting, replies or analytics fail later. Add all four permissions before anyone connects.

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
With the backend at 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:
Recreate the app container so it reads the new variables. A plain 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:
The database, Redis and Temporal keep running. Avoid 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.
Pick Threads, sign in with an account that accepted the tester invitation, and approve every permission. The connection renews itself, so nobody has to reconnect on a schedule.

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

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.
It is not a Threads Tester on the app, or it has not accepted the invitation. Add it under App roles > Roles, accept the invitation in Threads under Website permissions, and connect again.
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.
The account’s token could not be renewed. Reconnect the channel.
Last modified on September 23, 2026