Threads

Retrieve User Posts

Updated: Apr 14, 2026
Copy for LLM
This document shows you how to retrieve:
Note: To retrieve posts that are replies, refer to Retrieve User Replies.

Retrieve a list of an app-scoped user’s Threads

Use the GET /{threads-user-id}/threads endpoint to return a paginated list of all threads created by a user.

Permissions

The Threads Retrieval API requires an appropriate access token and permissions based on the node you are targeting. While you are testing, you can generate tokens and grant your app permissions by using the Graph API Explorer.
  • threads_basic — Required for making any calls to all Threads API endpoints.

Limitations

  • You may only fetch a paginated list of all threads created by the app-scoped user.

Fields

Here’s a list of fields that can be returned for each Thread.
Name Description
id (default)
The media’s ID.
media_product_type
Surface where the media is published. In the case of Threads, the value is THREADS.
media_type
The media type for a Threads post will be one of these values: TEXT_POST, IMAGE, VIDEO, CAROUSEL_ALBUM, AUDIO, or REPOST_FACADE.
Note: media_type will return TEXT_POST for posts containing GIFs and polls.
media_url
The post’s media URL.
permalink
Permanent link to the post. Will be omitted if the media contains copyrighted material or has been flagged for a copyright violation.
owner
Threads user ID who created the post.
Note: This is only available on top-level posts that you own.
username
Threads username who created the post.
text
Represents text for a Threads post.
timestamp
Post time. The publish date in ISO 8601 format.
shortcode
Shortcode of the media.
thumbnail_url
URL of thumbnail. This only shows up for Threads media with video.
children
List of child posts. This only shows up for carousel posts.
is_quote_post
Indicates if the media is a quoted post made by another user.
quoted_post
Media ID of the post that was quoted.
Note: This only appears on quote posts.
reposted_post
Media ID of the post that was reposted.
Note: This only appears on reposts.
alt_text
The accessibility text label or description for an image or video in a Threads post.
link_attachment_url
The URL attached to a Threads post.
gif_url
The URL of the GIF attached to the post (if any).
Note: This will only show up on posts that have a GIF attachment.
poll_attachment
The poll attachment for the post.
Note: This will only show up on posts that have a poll.
topic_tag
The topic tag in the post’s header (if any).
Note: This will only show up on posts that have a topic tag.
is_spoiler_media
Indicates if media objects were posted as spoilers.
text_entities
Indicates if spoilers are present in the text field of the posts.
text_attachment
The text attachment for the post.
ghost_post_status
The status of a ghost post.
Values:
  • ACTIVE — An active ghost post.
  • ARCHIVED — An expired ghost post.
Note: This will only show for posts that are ghost posts.
ghost_post_expiration_timestamp
Timestamp of when the post will or has expired in ISO 8601 format.
Note: This will only show for posts that are ghost posts.
is_verified
Returns true if the post author’s profile is verified on Threads.
profile_picture_url
Returns the URL of the post author’s profile picture on Threads.

Example request

curl -s -X GET \
"https://graph.threads.com/v1.0/me/threads?fields=id,media_product_type,media_type,media_url,permalink,owner,username,text,topic_tag,timestamp,shortcode,thumbnail_url,children,is_quote_post&since=2023-10-15&until=2023-11-18&limit=1&access_token=<ACCESS_TOKEN>"

Example response

{
  "data": [
    {
      "id": "1234567",
      "media_product_type": "THREADS",
      "media_type": "TEXT_POST",
      "permalink": "https://www.threads.com/@threadsapitestuser/post/abcdefg",
      "owner": {
        "id": "1234567"
      },
      "username": "threadsapitestuser",
      "text": "Today Is Monday",
      "topic_tag": "Mondays",
      "timestamp": "2023-10-17T05:42:03+0000",
      "shortcode": "abcdefg",
      "is_quote_post": false
    },
  ],
  "paging": {
    "cursors": {
      "before": "BEFORE_CURSOR",
      "after": "AFTER_CURSOR"
    }
  }
}

Retrieve a list of a public profile’s Threads

Use the GET /profile_posts?username=... endpoint to look up a public profile and retrieve a paginated list of their posts on Threads.

Permissions

The Threads Profile Discovery API requires an appropriate access token and permissions based on the node you are targeting. While you are testing, you can generate tokens and grant your app permissions by using the Graph API Explorer.
  • threads_basic — Required for making any calls to all Threads API endpoints.
  • threads_profile_discovery — Required for making any calls to all Threads Profile Discovery API endpoints.
With standard access, only posts from some of the official Meta accounts can be retrieved. These include @meta, @threads, @instagram, and @facebook.

Limitations

  • Only returns public profiles with at least 100 followers.
  • A user can send a maximum of 1,000 requests within a rolling 24-hour period. Once a query is sent, it will count against this limit for 24 hours.

Parameters

Name Description
access_token
string
Required.
Threads Graph API user access token.
username
string
Required.
Unique username on Threads. Must be an exact match.

Fields

The same fields as those for an app-scoped user’s posts can be retrieved except for the owner field.

Example request

curl -i -X GET \
  "https://graph.threads.com/v1.0/profile_posts?access_token=<THREADS_TESTER_ACCESS_TOKEN>&username=<THREADS_USERNAME>&fields=id,media_product_type,media_type,media_url,permalink,username,text,topic_tag,timestamp,shortcode,thumbnail_url,children,is_quote_post&since=2023-10-15&until=2023-11-18&limit=1"

Example response

{
  "data": [
    {
      "id": "1234567",
      "media_product_type": "THREADS",
      "media_type": "TEXT_POST",
      "permalink": "https://www.threads.com/@meta/post/abcdefg",
      "username": "meta",
      "text": "Today Is Monday",
      "topic_tag": "Mondays",
      "timestamp": "2023-10-17T05:42:03+0000",
      "shortcode": "abcdefg",
      "is_quote_post": true
    },
  ],
  "paging": {
    "cursors": {
      "before": "BEFORE_CURSOR",
      "after": "AFTER_CURSOR"
    }
  }
}

Retrieve a single Threads media object

You can also use the GET /{threads-media-id} endpoint to return a single Threads media object.

Permissions

The Threads Retrieval API requires an appropriate access token and permissions based on the node you are targeting. While you are testing, you can generate tokens and grant your app permissions by using the Graph API Explorer.
  • threads_basic — Required for making any calls to all Threads API endpoints.
If your app has not been approved for advanced access for the threads_basic permission, only posts created by a Threads tester are retrievable. After approval, public posts created by other users will be retrievable.

Fields

The same fields as those for an app-scoped user’s posts can be retrieved.

Example request

curl -s -X GET \
"https://graph.threads.com/v1.0/<THREADS_MEDIA_ID>?fields=id,media_product_type,media_type,media_url,permalink,owner,username,text,topic_tag,timestamp,shortcode,thumbnail_url,children,is_quote_post&access_token=<ACCESS_TOKEN>"

Example response

{
  "id": "1234567",
  "media_product_type": "THREADS",
  "media_type": "TEXT_POST",
  "permalink": "https://www.threads.com/@threadsapitestuser/post/abcdefg",
  "owner": {
    "id": "1234567"
  },
  "username": "meta",
  "text": "Today Is Monday",
  "topic_tag": "Mondays",
  "timestamp": "2023-10-09T23:18:27+0000",
  "shortcode": "abcdefg",
  "is_quote_post": false
}

Retrieve a list of an app-scoped user’s ghost posts

Use the GET /{threads-user-id}/ghost_posts endpoint to return a paginated list of all ghost post threads created by an app-scoped user.
To create a ghost post, see Create Ghost Posts for more information.

Permissions

The Threads Ghost Posts API requires an appropriate access token and permissions based on the node you are targeting. While you are testing, you can easily generate tokens and grant your app permissions by using the Graph API Explorer.
  • threads_basic — Required for making any calls to all Threads API endpoints.
If your app has not been approved for advanced access for the threads_basic permission, only posts created by a Threads tester are retrievable. After approval, public posts created by other users will be retrievable.

Fields

The same fields as those for an app-scoped user’s posts can be retrieved.

Example request

curl -GET \
  -d "fields=id,media_product_type,media_type,media_url,permalink,owner,username,text,timestamp,shortcode,thumbnail_url,ghost_post_status,ghost_post_expiration_timestamp" \
  -d "since=<START_DATE>" \
  -d "until=<END_DATE>" \
  -d "limit=1" \
  -d "access_token=<ACCESS_TOKEN>"
"https://graph.threads.com/v1.0/me/ghost_posts"

Example response

{
  "data": [
    {
      "id": "<MEDIA_ID>",
      "media_product_type": "THREADS",
      "media_type": "TEXT_POST",
      "permalink": "https://www.threads.com/<THREADS_USERNAME>/post/<POST_ID>",
      "owner": {
        "id": "<THREADS_USER_ID>"
      },
      "username": "<THREADS_USERNAME>",
      "text": "<TEXT>",
      "timestamp": "<TIMESTAMP>",
      "shortcode": "<MEDIA_SHORTCODE>",
      "ghost_post_status": "ARCHIVED",
      "ghost_post_expiration_timestamp": "<EXPIRATION_TIMESTAMP>"
    }
  ],
  "paging": {
    "cursors": {
      "before": "BEFORE_CURSOR",
      "after": "AFTER_CURSOR"
    }
  }
}