# Connecting Threads to Social Quack

> One free developer app on Meta's site, a few minutes of clicking, and Threads posts go out on your schedule — with no App Review to submit.

Threads doesn't hand posting access to scheduling apps directly. Instead you create a small developer app of your own on Meta's developer site and paste two keys into Social Quack. You only do this once, and because that app belongs to you, the keys stay encrypted on your own Mac and the posting limits are yours alone — there is no shared pool of other people's posts to get you rate-limited or banned.

The app stays in **Development mode** the whole time, which is all you need to post to your own account. Nothing to submit, nothing to wait for.

## 1. Open the setup screen in Social Quack first

In the sidebar click **Channels**, scroll down to **Add a channel**, find the **Threads** card and click **Set up app keys**.

Leave that window open — you will be copying out of it and pasting into it as you go. It holds:

- the **redirect URL** Meta asks for, with a copy button beside it. Take it from that screen rather than typing something that looks right — Meta matches it character for character, and step 3 explains why it looks the way it does.
- the two boxes you fill in at the end: **Threads App ID** and **Threads App Secret**.

## 2. Create the app

1. Go to **https://developers.facebook.com** and sign in.
2. Click **My Apps → Create app**, give it any name, and pick the **Threads** use case when Meta asks what you want the app to do. (Already made a Meta app for Instagram or Facebook? Open that one and add **Access the Threads API** to it instead — you don't need a second app.)

## 3. Fill in the Threads settings

Open **Use cases → Threads API → Settings** and fill in three things.

| Field | What to put |
|---|---|
| **Redirect Callback URLs** | The redirect URL from Social Quack's setup screen — use its copy button so it matches character for character |
| **Uninstall Callback URL** | `https://socialquack.com/oauth/callback/uninstall` |
| **Delete Callback URL** | `https://socialquack.com/oauth/callback/delete` |

Two of those need a word of explanation.

**Why the uninstall and delete URLs?** Meta refuses to save the form without them. They point at our website only so the form is satisfied — nothing is stored on our servers; those pages simply acknowledge the request.

**Why is the redirect URL an address on socialquack.com rather than your own computer?** Threads rejects any sign-in that would return you to a plain, non-secure address. So Social Quack gives you a secure one to register, and that page does one job: it hands the sign-in straight back to the app running on your Mac.

## 4. Add the three permissions

Still inside that use case, switch from **Settings** to **Permissions and features** in the left menu. (Navigated away? **Use cases → Threads API → Customize** takes you back.)

Each permission on that list has an **Add** button beside it. Click **Add** on these three:

- `threads_basic`
- `threads_content_publish`
- `threads_manage_replies`

There is nothing to apply for and nobody to wait for: your own app is granted them the moment you click.

## 5. Add yourself as a Threads Tester

Under **App roles → Roles**, add your Threads account as a **Threads Tester**.

The invitation will sit there marked **Pending**, and no email is sent. You accept it inside the Threads app itself:

**Threads app → Settings → Account → Website permissions → Invites**

Sign-in from Social Quack fails until you have accepted it, so don't move on until the role stops saying *Pending*.

## 6. Copy the two keys in and connect

Back in **Use cases → Threads API → Settings**, copy the **Threads App ID** and the **Threads App Secret**.

> These are *not* the app id shown on your main app dashboard. The Threads use case has its own pair, and grabbing the main one is the most common reason sign-in fails later.

Paste them into the **Threads App ID** and **Threads App Secret** boxes in Social Quack and click **Save**. The keys are stored encrypted on your Mac, and the Threads sign-in page opens in your normal browser straight away; if it doesn't, click **Connect** on the **Threads** card. Approve the sign-in there, and your account appears under **Connected**. Social Quack deliberately sends you to a real browser window instead of showing that page inside the app, because Threads' sign-in doesn't survive being embedded.

## 7. Write your first post

A few things worth knowing before you queue anything up:

- **500 characters** per post.
- Longer pieces become a **chain**: each part is posted as a reply to the one before, exactly as you would thread them by hand.
- **One picture or video per post.** Threads fetches media from a web address rather than taking a file upload, and Social Quack does that hand-off for you at posting time — there is nothing for you to set up.

Your connection lasts **60 days**, and Social Quack quietly renews it once it has under a week left. If the app has been shut for a couple of months, it may simply ask you to connect again.

## If something goes wrong

| You see | It means | Do this |
|---|---|---|
| "No app ID was sent" on the Threads sign-in page | Usually the **Threads Tester** invite is still *Pending* | Accept it in the Threads app: Settings → Account → Website permissions → Invites, then click **Connect** on the **Threads** card |
| "No app ID was sent", and the invite *is* accepted | The keys are from the main app, not the Threads use case | Re-copy the **Threads App ID** and **Threads App Secret** from *Use cases → Threads API → Settings* into **Channels → Threads → Edit app keys**, click **Save**, and sign in again |
| Threads blocks the sign-in as insecure instead of showing the login page | The redirect URL registered with Meta isn't the secure one the app expects | Copy it again from **Channels → Threads → Edit app keys** into **Redirect Callback URLs** in *Use cases → Threads API → Settings*, and save Meta's form |
| Sign-in works, but posting fails with a permission error | One of the three permissions was never added | Open **Use cases → Threads API → Customize → Permissions and features**, click **Add** next to `threads_basic`, `threads_content_publish` and `threads_manage_replies`, then click **Connect** on the **Threads** card again — that updates the channel you already have, so your queued posts stay put |
| "Threads could not process the post" | Threads rejected the picture or video; the message repeats the reason Threads gave | Try a different file, then post again |
| "Threads took too long to process the media" | A large video is still being processed at Threads' end | Nothing — Social Quack retries on its own; if it keeps failing, try a smaller file |
| Threads asks you to connect again after a couple of months | The 60-day connection lapsed while the app wasn't running | **Channels → Threads → Connect** — the keys stay saved, so it's one click |

Still stuck? **support@socialquack.com**.
