- Home
- Skills
- APIs & Backend
- Threads API
More screenshots
Works with the AI Agents you already use
Threads API
Teaches AI assistants Meta's Threads API: write, review and debug integration code, post/reply/pull insights on your own account, and embed Threads posts.
Free
Threads API
Example session with this skill installed
Our app uses the Threads API for brand monitoring and we're stuck on three weird problems:
- keyword_search for "pour-over coffee" only returns posts from our own account. Nobody else's posts show up.
- location_search always returns places in Menlo Park, California, whether we search "Taipei 101" or "Xinyi District".
- profile_lookup keeps failing for a coffee brand with 50k followers, but looking up @threads works.
All the permissions are ticked in the App Dashboard and the token is brand new. Is our code wrong? How do we fix it?
- Read your context and instructions
- Compiled the threads api
Summary
Your code is fine. All three symptoms are the documented behavior of permissions that are granted but not yet approved through App Review. Ticking a permission in the App Dashboard lets users and Threads Testers grant it to your app; it doesn't open up other people's content until Meta approves the permission and the app is published.
| Symptom | What's happening | Permission to get approved |
|---|---|---|
keyword_search returns only your own posts | Until approved, keyword and topic search only finds the token owner's posts | threads_keyword_search |
location_search always answers with Menlo Park | Until approved, location search only answers the query "Menlo Park" | threads_location_tagging |
profile_lookup works for @threads but not for the brand | With standard access, profile discovery only reaches a few official Meta accounts (including @meta, @threads, @instagram and @facebook) | threads_profile_discovery (advanced access) |
Confirm the diagnosis
Inspect the token with your app token (TH|<APP_ID>|<APP_SECRET>) as access_token. Since 2026-08-18 this works for any user of your app, tester or not:
curl -G https://graph.threads.net/v1.0/debug_token \
--data-urlencode "access_token=TH|$THREADS_APP_ID|$THREADS_APP_SECRET" \
--data-urlencode "input_token=$THREADS_ACCESS_TOKEN"
If data.scopes lists all three permissions, the token side is done. scopes shows what the user granted, not what App Review approved, so also check each permission's access level and review status in the App Dashboard. Any permission that isn't approved explains the matching row in the table above. If the call fails with "The App_id in the input_token did not match the Viewing App", the token came from a different app, or you used the Facebook app ID and secret instead of the Threads pair.
Fix
- Submit the three permissions for App Review and publish the app. Nothing in your code needs to change for the results to open up.
- After approval,
profile_lookupstill only returns public profiles with at least 100 followers, and the username must be exact, without the@. A public brand with 50k followers qualifies. - If location results still ignore your query after approval: the guide uses
qwhile the reference listsquery. Sendqfirst, then tryquery.
Budget the monitoring around the quotas
| Endpoint | Limit (rolling 24 h) | Notes |
|---|---|---|
keyword_search | 2,200 queries per user, across all apps | Queries with no results don't count; sensitive keywords return [] |
profile_lookup, profile_posts | 1,000 requests each | The docs don't say whether the two share a quota, so budget as if they do |
location_search | 500 searches | Not paginated |
Next steps
- File App Review for
threads_keyword_search,threads_location_taggingandthreads_profile_discoverynow; it's the only thing blocking all three features. - Until it's approved, keep building and testing the parsing against your own account's posts, which these endpoints already return.
- Size the polling schedule from the quota table so a busy day can't exhaust the 2,200 search queries.
Connects securely to your tools. The creator never sees your data.
About this skill
Playbook for Meta's Threads API, distilled from the official docs (changelog through 2026-08-18), with some behavior checked against the live API. It covers three jobs:
- Build: write, review and debug code that calls the Threads API, following your project's existing stack (Node/TypeScript, Python, C#, Go and more).
- Operate: post, reply, repost, delete, hide replies and pull insights on your own Threads account. Anything public or destructive waits for your explicit yes.
- Embed: show Threads posts on a website with oEmbed and embed.js, keep pages with many embeds from getting rate-limited, and add "share to Threads" buttons with Web Intents.
What it gets right
- The two-step publish flow (create a container, wait for
FINISHED, then publish), container IDs vs media IDs, and the 24-hour container expiry - Write vs read enums (
TEXTvsTEXT_POST,reply_controlvsreply_audience) - Local checks before spending quota: the 500-character limit with emoji counted as UTF-8 bytes, the 5-link limit, and ghost-post and poll conflicts
- OAuth, long-lived token refresh and the 90-day permission grant, plus checking what a user granted with
debug_tokenand your app token (no tester needed) - Quotas, webhooks (including repeat deliveries of the same event), and the official doc examples that are broken and shouldn't be copied
- Statements come from Meta's docs unless tagged (practice) or (observed)
Tested
In round 7 of the benchmark (all 10 tasks, same model, no web access for either setup), the answers with the skill passed all 77 checklist items; without it, the average pass rate was 77%. Rounds 8–10 focused on embedding (tasks 6, 11, 12 and 13) after section 11 was rewritten for 1.5: with the skill every check passed (24/24, 27/27 and 17/17); without it, the average pass rates were 42%, 41% and 54%. Each task ran once per setup, so read the numbers as a direction, not proof. Details: https://github.com/Scorpio-meow/Threads-skill/blob/main/evals/BENCHMARK_en.md
Requirements
- Build and Embed: nothing beyond your agent.
- Operate: Python 3.8+ (standard library only), HTTPS access to graph.threads.net, and a Threads user access token in
THREADS_ACCESS_TOKENor a.envfile. Installed from Agensi, the bundled client isn't saved to your machine; your agent fetchesscripts/threads_client.pyand runs it from standard input.
Open source under MIT: https://github.com/Scorpio-meow/Threads-skill Project site with the benchmark and an in-browser "check before you send" tool: https://scorpio-meow.github.io/Threads-skill/
Not an official Meta project.
- The bundled client has been tested against a mock API only; it hasn't posted to a real account yet.
- Benchmarks were run on Claude only. Other SKILL.md agents should follow the same flow, but that isn't verified.
- Operate mode needs an agent that can run terminal commands with network access to graph.threads.net. Sandboxes that only reach package registries (such as the Claude apps by default) get a ready-to-run command to execute on your own machine instead.
- Installed from Agensi, the bundled client isn't on disk, so the agent fetches
scripts/threads_client.pyand feeds it to Python on standard input. That path hasn't been benchmarked yet; for regular Operate use, install from GitHub instead. - Where Meta's docs contradict themselves or are unclear (location search
qvsquery, how ghost posts treat unsupported features, whether webhooks need App Review), the skill says so instead of guessing. - embed.js behavior (3 embeds at a time,
instgrm.Embeds.process(),data-theme) is undocumented, observed in October 2026, and may change. - Docs snapshot: changelog through 2026-08-18. Threads ads (Marketing API) are out of scope.
How to use
- 1
Connect your agent to the Agensi MCP
Copy the prompt and paste it into Claude, ChatGPT, Cursor or any agent that supports MCP. It sets up the connection for you. Manual setup
- 2
Sign in to Agensi
Your agent shows a sign-in link. Sign in and click Allow.
- 3
Ask for what you need
Your agent loads this skill and uses it on your task. It always asks before any payment.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill goes through the trust checks below.
Security scanned
Checked by our 8-point scan before listing
1 use
Times used to date
Free forever
No account required to browse
Trust & safety
Security scan
Security scan passed 5 days ago
- Free with an Agensi account
Requires
Permissions
Allowed Hosts
File Scopes
Only Operate mode (acting on your own Threads account) uses these. The agent reads THREADS_ACCESS_TOKEN from the environment or a .env file in the working folder and never prints it or writes it into chat, scripts or commits. It runs the bundled client scripts/threads_client.py by its full path from the working folder, or, when the skill's files aren't on disk (as when loaded from Agensi), feeds it to Python on standard input without saving it. It writes the post's parameters to a spec.json in the working folder. Network calls go to graph.threads.net only. Posting, replying, reposting, deleting and hiding replies wait for your explicit confirmation. Build and Embed modes need none of these.