Endpoint and authentication
Authenticate with X-API-Key (server-side only) or a Bearer session. The route also requires a connected Threads account in active status. When no active account exists, the call fails with a 404 and the message names the missing account.
GET /api/engagement/keywords/search?q=kopi&searchMode=KEYWORD&searchType=TOP
Choosing which Threads account searches
The search runs with the access token of one of your connected Threads accounts. List them first, then pass the chosen accountId.
- Call GET /api/content/accounts with the same X-API-Key or Bearer session and keep entries where platform is threads.
- Pick the accountId of the account to search as and send it as accountId. The account must belong to your tenant and be active.
- Omit accountId only when any active account will do; the API then uses your oldest active Threads account.
- Each accountId has its own 60 second result cache and its own Meta quota of 2200 queries per 24 hours.
curl "https://api.wahdx.com/api/content/accounts" \
-H "X-API-Key: $WAHDX_API_KEY"
curl -G "https://api.wahdx.com/api/engagement/keywords/search" \
-H "X-API-Key: $WAHDX_API_KEY" \
--data-urlencode "q=kopi" \
--data-urlencode "accountId=YOUR_CONNECTED_THREADS_ACCOUNT_ID"
Example request
A keyword search for recent posts about kopi, limited to 10 results.
curl -G "https://api.wahdx.com/api/engagement/keywords/search" \
-H "X-API-Key: $WAHDX_API_KEY" \
--data-urlencode "q=kopi" \
--data-urlencode "searchMode=KEYWORD" \
--data-urlencode "searchType=RECENT" \
--data-urlencode "limit=10"
Response shape
Every result carries the post text, author, timestamp, and a permalink to open it on Threads. Media URLs are signed CDN links that expire after a few days, so the response is cached for 60 seconds only and the URLs are never written to the database.
{
"success": true,
"data": {
"available": true,
"keywordSearchEnabled": true,
"scope": "threads_keyword_search",
"searchScope": "public",
"disclosure": "Results include public posts from other accounts, so the keyword search permission is active.",
"query": { "q": "kopi", "searchMode": "KEYWORD", "searchType": "RECENT", "limit": 10, "since": null, "until": null, "mediaType": null },
"results": [
{
"mediaId": "18000000000000000",
"text": "kopi tubruk pagi ini enak",
"mediaType": "TEXT_POST",
"mediaUrl": null,
"thumbnailUrl": null,
"altText": null,
"permalink": "https://www.threads.com/@someone/post/abc",
"timestamp": "2026-09-01T10:00:00.000Z",
"username": "someone",
"hasReplies": false,
"isReply": false,
"isQuotePost": false
}
],
"truncated": false,
"cached": false
}
}