# Threads API

> Threads returns public profiles, recent posts, and post replies through a workflow and API.

Threads returns public profile details from a username or profile link. List recent posts returns an account’s latest public posts from a username or profile link. Get post returns a public post and visible replies from a post link.

- Page: https://fous.com/tools/threads
- Handle: `@threads`
- Category: [Social](https://fous.com/tools/category/social)
- Source website: https://threads.com
- Last verified: Sep 29, 2026

## Methods

### Get post

Operation `get_post`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a public Threads post, its engagement and replies visible without logging in. Threads may show only the first 10 replies to visitors even when a higher limit is requested; hidden counts are null.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `post` | string | yes | `"https://www.threads.net/@threads/post/DdcPsEkH3NZ"` | Link to a public post on Threads, for example https://www.threads.com/@threads/post/Ddt8NiwkZXm. |
| `max_replies` | integer | no | `20` | Maximum replies to return, up to 20; for example 10. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "post"
  ],
  "properties": {
    "post": {
      "type": "string",
      "description": "Link to a public post on Threads, for example https://www.threads.com/@threads/post/Ddt8NiwkZXm.",
      "examples": [
        "https://www.threads.net/@threads/post/DdcPsEkH3NZ",
        "https://www.threads.com/@threads/post/Ddt8NiwkZXm",
        "https://www.threads.com/@threads/post/Ddt8B_UEf4N"
      ]
    },
    "max_replies": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 0,
      "description": "Maximum replies to return, up to 20; for example 10.",
      "examples": [
        20,
        10,
        2
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "post": "https://www.threads.net/@threads/post/DdcPsEkH3NZ",
      "max_replies": 20
    },
    {
      "post": "https://www.threads.com/@threads/post/Ddt8NiwkZXm",
      "max_replies": 10
    },
    {
      "post": "https://www.threads.com/@threads/post/Ddt8B_UEf4N",
      "max_replies": 2
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `text` | string or null | `"Photographers who send the selects when they said they would"` |  |
| `likes` | integer or null | `483` |  |
| `quotes` | integer or null | `1` |  |
| `post_id` | string | `"3989132369199067993"` |  |
| `replies` | array |  |  |
| `replies[].text` | string or null | `"Here are some of my recent favorites 📸🧡😎"` |  |
| `replies[].likes` | integer or null | `0` |  |
| `replies[].post_link` | string | `"https://www.threads.com/@sophiatesch/post/DdcQQ2vkphd"` |  |
| `replies[].posted_at` | string or null | `"2026-09-18T20:05:58Z"` |  |
| `replies[].author_username` | string | `"sophiatesch"` |  |
| `reposts` | integer or null | `30` |  |
| `post_link` | string | `"https://www.threads.com/@threads/post/DdcPsEkH3NZ"` |  |
| `posted_at` | string or null | `"2026-09-18T20:00:57Z"` |  |
| `replies_count` | integer or null | `91` |  |
| `author_username` | string | `"threads"` |  |
| `author_display_name` | string or null | `"Threads"` |  |
| `media_thumbnail_links` | array |  |  |

**Example input**

```json
{
  "post": "https://www.threads.net/@threads/post/DdcPsEkH3NZ",
  "max_replies": 20
}
```

**Example output**

```json
{
  "text": "Photographers who send the selects when they said they would",
  "likes": 483,
  "quotes": 1,
  "post_id": "3989132369199067993",
  "replies": [
    {
      "text": "Here are some of my recent favorites 📸🧡😎",
      "likes": 0,
      "post_link": "https://www.threads.com/@sophiatesch/post/DdcQQ2vkphd",
      "posted_at": "2026-09-18T20:05:58Z",
      "author_username": "sophiatesch"
    },
    {
      "text": null,
      "likes": 0,
      "post_link": "https://www.threads.com/@korbskilabs/post/DdcQTTkEl80",
      "posted_at": "2026-09-18T20:06:18Z",
      "author_username": "korbskilabs"
    },
    {
      "text": "The Tired Photographer",
      "likes": 9,
      "post_link": "https://www.threads.com/@dr.ayrat/post/DdcQU8wiNZB",
      "posted_at": "2026-09-18T20:06:32Z",
      "author_username": "dr.ayrat"
    }
  ],
  "reposts": 30,
  "post_link": "https://www.threads.com/@threads/post/DdcPsEkH3NZ",
  "posted_at": "2026-09-18T20:00:57Z",
  "replies_count": 91,
  "author_username": "threads",
  "author_display_name": "Threads",
  "media_thumbnail_links": [
    "https://scontent-sea5-1.cdninstagram.com/v/t51.82787-15/815866628_17988992904102532_2006031957805872894_n.jpg?stp=cp6_dst-jpg_e35_tt6&_nc_cat=100&ig_cache_key=Mzk4OTEzMjM2OTE5OTA2Nzk5Mw%3D%3D.3-ccb7-5…"
  ]
}
```

### Get profile

Operation `get_profile`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a public Threads profile by username or profile link, including bio, followers, verification, picture, and bio links. Private profiles are not returned.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `username` | string | yes | `"https://www.threads.com/@spotify"` | Threads username with or without @, or a Threads profile link, for example zuck or https://www.threads.com/@zuck. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "username"
  ],
  "properties": {
    "username": {
      "type": "string",
      "description": "Threads username with or without @, or a Threads profile link, for example zuck or https://www.threads.com/@zuck.",
      "examples": [
        "https://www.threads.com/@spotify",
        "zuck",
        "@threads"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "username": "https://www.threads.com/@spotify"
    },
    {
      "username": "zuck"
    },
    {
      "username": "@threads"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `bio` | string or null | `"reliving our fave iconic VMAs performances on Spotify ⏪"` | Profile biography. |
| `username` | string | `"spotify"` | Threads username without @. |
| `bio_links` | array |  | Links shown in the profile bio. |
| `followers` | integer or null | `3205109` | Follower count. |
| `is_verified` | boolean | `true` | Whether the profile has a verified badge. |
| `profile_url` | string | `"https://www.threads.com/@spotify"` | Link to the Threads profile. |
| `display_name` | string or null | `"Spotify"` | Name shown on the profile. |
| `threads_user_id` | string or null | `"63295417283"` | Threads user ID. |
| `profile_picture_url` | string or null | `"https://scontent-sea5-1.cdninstagram.com/v/t51.2885-19/358162502_1038284560473867_7645518712425998110_n.jpg?efg=eyJ2ZW5` | Profile picture link. |

**Example input**

```json
{
  "username": "https://www.threads.com/@spotify"
}
```

**Example output**

```json
{
  "bio": "reliving our fave iconic VMAs performances on Spotify ⏪",
  "username": "spotify",
  "bio_links": [
    "https://open.spotify.com/genre/0JQ5DAqbMKFJ6dHNHTv6Mx",
    "http://open.spotify.com",
    "https://open.spotify.com/genre/section0JQ5IMCbQBLyGf0Sj0c3IJ"
  ],
  "followers": 3205109,
  "is_verified": true,
  "profile_url": "https://www.threads.com/@spotify",
  "display_name": "Spotify",
  "threads_user_id": "63295417283",
  "profile_picture_url": "https://scontent-sea5-1.cdninstagram.com/v/t51.2885-19/358162502_1038284560473867_7645518712425998110_n.jpg?efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4zNzYuYzIifQ&_nc_ht=scontent-sea5-1.cdnins…"
}
```

### List recent posts

Operation `list_recent_posts`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

List an account’s latest public Threads posts, newest first, with text, engagement counts, thumbnails and links. Only posts shown without logging in are returned; requesting more may not yield more.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `username` | string | yes | `"@instagram"` | Threads username, with or without @, or a profile link. Example: zuck. |
| `max_results` | integer | no | `5` | Maximum posts to return, up to 25. Example: 10. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "username"
  ],
  "properties": {
    "username": {
      "type": "string",
      "description": "Threads username, with or without @, or a profile link. Example: zuck.",
      "examples": [
        "@instagram",
        "zuck",
        "https://www.threads.com/@zuck"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "description": "Maximum posts to return, up to 25. Example: 10.",
      "x-fous-developer": true,
      "examples": [
        5,
        25,
        1
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "username": "@instagram",
      "max_results": 5
    },
    {
      "username": "zuck"
    },
    {
      "username": "https://www.threads.com/@zuck",
      "max_results": 25
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `posts` | array |  | Latest public posts, newest first. |
| `posts[].text` | string or null | `"straight out of a fairytale 🌷💜 \n\n@anthemis_sp"` | Text of the post, if available. |
| `posts[].likes` | integer or null | `179` | Number of likes, or null when hidden. |
| `posts[].quotes` | integer or null | `1` | Number of quotes, or null when hidden. |
| `posts[].post_id` | string | `"3996262280240886063"` | Threads post ID. |
| `posts[].replies` | integer or null | `17` | Number of replies, or null when hidden. |
| `posts[].reposts` | integer or null | `7` | Number of reposts, or null when hidden. |
| `posts[].post_link` | string | `"https://www.threads.com/@instagram/post/Dd1k17rDPEv"` | Public link to the post. |
| `posts[].posted_at` | string | `"2026-09-28T16:06:59Z"` | When the post was published, in UTC. |
| `posts[].thumbnail_links` | array |  | Image and video thumbnail links. |

**Example input**

```json
{
  "username": "@instagram",
  "max_results": 5
}
```

**Example output**

```json
{
  "posts": [
    {
      "text": "straight out of a fairytale 🌷💜 \n\n@anthemis_sp",
      "likes": 179,
      "quotes": 1,
      "post_id": "3996262280240886063",
      "replies": 17,
      "reposts": 7,
      "post_link": "https://www.threads.com/@instagram/post/Dd1k17rDPEv",
      "posted_at": "2026-09-28T16:06:59Z",
      "thumbnail_links": [
        "https://scontent-sea5-1.cdninstagram.com/v/t51.71878-15/829474524_1536301098182084_7924312361584415780_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=100&ig_cache_key=Mzk5NjI2MjI4MDI0MDg4NjA2Mw%3D%3D.3-ccb7-5&ccb=…"
      ]
    },
    {
      "text": "when the weather matches your mood in the best way possible",
      "likes": 232,
      "quotes": 0,
      "post_id": "3996177280590551786",
      "replies": 33,
      "reposts": 16,
      "post_link": "https://www.threads.com/@instagram/post/Dd1RhBlFhrq",
      "posted_at": "2026-09-28T13:17:56Z",
      "thumbnail_links": []
    },
    {
      "text": "@muse understood the assignment 💎",
      "likes": 424,
      "quotes": 1,
      "post_id": "3994878289474338257",
      "replies": 38,
      "reposts": 15,
      "post_link": "https://www.threads.com/@instagram/post/DdwqKN1Cb3R",
      "posted_at": "2026-09-26T18:17:04Z",
      "thumbnail_links": [
        "https://scontent-sea5-1.cdninstagram.com/v/t51.82787-15/825322201_17987111364118398_4470669708258499527_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=100&ig_cache_key=Mzk5NDg3ODI4OTQ3NDMzODI1Nw%3D%3D.3-ccb7-5&ccb…"
      ]
    }
  ]
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@threads",
  "visibility": "public",
  "operation": "get_post",
  "version": 1,
  "input": {
    "post": "https://www.threads.net/@threads/post/DdcPsEkH3NZ",
    "max_replies": 20
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@threads\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_post\",\n  \"version\": 1,\n  \"input\": {\n    \"post\": \"https://www.threads.net/@threads/post/DdcPsEkH3NZ\",\n    \"max_replies\": 20\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@threads",
  "visibility": "public",
  "operation": "get_post",
  "version": 1,
  "input": {
    "post": "https://www.threads.net/@threads/post/DdcPsEkH3NZ",
    "max_replies": 20
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/threads`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_post`: Get post. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `get_profile`: Get profile. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `list_recent_posts`: List recent posts. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-threads https://api.fous.com/mcp/tools/threads --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Review public profile details before evaluating an account.
- Track recent public posts and their engagement counts.
- Collect visible replies to a public post.
- Compare follower counts across public profiles.
- Find post links and media thumbnails for review.

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Threads tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Threads account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from threads.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### What details are in a public profile?

Get profile returns the bio, follower count, verification status, profile picture link, and other public profile details.

### What has an account posted recently?

List recent posts returns the latest public posts, newest first, with text, engagement counts, thumbnails, and links.

### What replies are visible on a post?

Get post returns a public post’s engagement and visible replies. Replies may be limited to those Threads shows visitors without logging in.

## Related

- [Instagram API](https://fous.com/tools/instagram.md): Instagram provides public photos, videos, profiles, exact headline counts, bio links, and profile pictures, plus recent public posts and reels; some profiles or posts require login, and view counts may be unavailable.
- [Mastodon API](https://fous.com/tools/mastodon.md): Mastodon provides public profiles and recent public posts, including hashtag posts, but excludes private and unlisted posts and may limit visibility to accounts known to mastodon.social or a selected server.
- [Bluesky API](https://fous.com/tools/bluesky.md): Bluesky provides public profile details and latest posts, plus searches of up to 100 matching public posts; search results may lag behind new posts.
- [X API](https://fous.com/tools/x.md): X returns public profile details and public posts with author, media, and engagement; deleted, protected, or unavailable posts cannot be retrieved.
- [TikTok API](https://fous.com/tools/tiktok.md): TikTok returns public profiles and totals, recent pinned-first videos, and public video details and engagement; private content unavailable, and feeds may be incomplete or empty.
- [Reddit API](https://fous.com/tools/reddit.md): Reddit returns searchable public posts, community feeds/details, user profiles and recent activity, posts with up to 200 comments; unavailable content limits results; Top defaults weekly.
- [Telegram API](https://fous.com/tools/telegram.md): Telegram provides public channel details and the latest posts visible in public previews, with media and view totals that may be rounded or approximate.
- [Medium API](https://fous.com/tools/medium.md): Medium returns public writer, publication, and topic articles, including newest posts and weekly popular picks, plus readable article text; member-only stories remain limited to visible previews.
- [All Social tools](https://fous.com/tools/category/social)
