---
title: "Truth Social User Posts API"
method: GET
path: "/v1/truth-social/user-posts"
tags: ["Truth Social"]
---

# Truth Social User Posts API

`GET /v1/truth-social/user-posts`

## Request

- Base URL: `https://api.captapi.com`
- URL: `https://api.captapi.com/v1/truth-social/user-posts`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Recent Truths — same post mapper as /post (links, card, reblog/quote, mentions).

Pass a Truth Social @username or profile URL and get recent public posts as clean JSON — same status mapper as /post (not a slim sibling). Full author{} once at the top (same shape as /profile, including CP-F flags); each post keeps a slim author {id,username,displayName,avatar,verified}. text + links[] (unbroken URLs), card, media.meta, externalVideoId→Rumble, engagement {replies,reblogs,likes,downvotes} (likes is favourites/upvotes; downvotes is null when Truth Social omits the key, 0 when it sends 0). language is Truth Social/Mastodon's auto-detect — not Captapi's — and is null on an empty body; short URL-heavy English can be tagged nl/fy upstream. Chain fields when present: reblog{}, quote{}/quoteId, inReplyToId/inReplyToAccountId/inReplyTo{}. Native timeline excludes replies; reblogs and quotes still appear. Pagination: native emits nextCursor (Mastodon max_id) when the statuses page is full (~20), the Link header has rel=next, or author.postCount > totalReturned — hasMore is true only with a cursor. The extended path cannot page: hasMore true, nextCursor null, truncatedReason=single_page_only when author.postCount > totalReturned. Media URLs on static-assets-1.truthsocial.com are unsigned (no mediaUrlsExpireAt). As of late 2025, Truth Social only lets you view public profiles/posts of prominent users (e.g. Trump, Vance) without authentication; most other accounts require auth and will 404 here. Flat 2 credits.

Docs: https://captapi.com/apis/truth-social-user-posts

## Query parameters

- `url` string, required
- `limit` integer
- `cursor` string
- `cache` boolean

## Response `200`

Success. The data object for this endpoint.

- object
  - `success` unknown, required
  - `data` object, required
    - `username` string: Account username / handle.
    - `author` object: Top-level: full profile card (same _normalize_account as /profile). On each post: slim {id, username, displayName, avatar, verified} only — stats live once at the top.
      - `platform` string: Always "truth_social" on this endpoint (posts[].platform).
      - `id` string: Id of this author item.
      - `username` string: Account username / handle.
      - `url` string: Canonical URL of the item.
      - `displayName` string: Display name of the account. Canonical across profile endpoints (prefer over name).
      - `bio` string: Profile bio. Canonical across profile endpoints (prefer over description on YouTube).
      - `avatar` string: Avatar / profile picture URL. Canonical across profile endpoints.
      - `banner` string: Banner / cover image URL. Canonical across profile endpoints.
      - `verified` boolean: Whether the account is verified on this platform.
      - `followers` integer: Follower count.
      - `following` integer: Number of accounts followed.
      - `postCount` integer: Total posts/statuses/videos for the account. Canonical across profile endpoints (prefer over posts / videoCount / tweetCount).
      - `followersIsApproximate` boolean: True when followers was parsed from a compact Facebook chrome label (e.g. 28M) rather than an exact integer.
      - `followingIsApproximate` boolean: Following is approximate. Example: false.
      - `postCountIsApproximate` boolean: Post count is approximate. Example: false.
      - `location` unknown
      - `website` string: Website listed on the profile.
      - `createdAt` string: Creation date (ISO 8601).
      - `lastStatusAt` string: Top-level author's last status time as ISO-8601 UTC (date-only upstream → midnight Z).
      - `bot` boolean: Top-level author bot flag when present.
      - `isPrivate` boolean: Top-level author isPrivate (upstream locked) when the account payload is rich.
      - `group` boolean: Author.group on the top-level card; posts[].group when the status itself is a group post.
      - `discoverable` unknown
      - `acceptingMessages` boolean: Accepting messages. Example: false.
      - `raw` object: Raw upstream payload for advanced use (fields may change). Prefer the normalized top-level fields when available.
        - `emojis` unknown[]
          - unknown
        - `fields` unknown[]
          - unknown
        - `chatsOnboarded` boolean
        - `tvAccount` boolean
    - `requested` integer: The limit you sent.
    - `totalReturned` integer: Number of items returned in this response.
    - `nextCursor` string: Cursor to pass for the next page of results. May be null when the platform does not expose deep pagination (e.g. some Facebook Ad Library searches).
    - `hasMore` boolean: Whether more results are available beyond this page. When true, pass nextCursor to fetch the next page.
    - `truncatedReason` unknown
    - `posts` object[]
      - `platform` string: Always "truth_social" on this endpoint (posts[].platform).
      - `id` string: Id of this posts item.
      - `url` string: Canonical URL of the item.
      - `text` string: Plain text from the status HTML. <a href> is replaced by the real URL so Truth Social span soft-wraps do not insert spaces into links.
      - `publishedAt` string: Publish date (ISO 8601) when the platform exposes an absolute timestamp.
      - `author` object: Top-level: full profile card (same _normalize_account as /profile). On each post: slim {id, username, displayName, avatar, verified} only — stats live once at the top.
        - `id` string: Id of this author item.
        - `username` string: Account username / handle.
        - `displayName` string: Display name of the account. Canonical across profile endpoints (prefer over name).
        - `avatar` string: Avatar / profile picture URL. Canonical across profile endpoints.
        - `verified` boolean: Whether the account is verified on this platform.
      - `engagement` object: Engagement metrics for the item.
        - `replies` integer
        - `reblogs` integer
        - `likes` integer
        - `upvotes` unknown
        - `downvotes` unknown
      - `language` string: Truth Social/Mastodon auto-detect, passed through. Not Captapi-classified. Empty text → null. Short URL-heavy English is often tagged nl/fy upstream — do not treat language as a country filter.
      - `sensitive` boolean: Whether the content is flagged sensitive.
      - `media` object[]: Media attached to the item.
        - `type` string
        - `url` string: Canonical URL of the item.
        - `previewUrl` string, nullable
        - `description` unknown
      - `links` unknown[]: Authoritative http(s) URLs from <a href> attributes (deduped). Prefer this over regex on text.
        - unknown

## Other responses

- `400`: Bad request: wrong platform URL, unknown endpoint, or an invalid parameter value. Not billed.
- `401`: Missing, invalid or revoked API key. Not billed.
- `402`: Not enough credits for this request. Not billed.
- `404`: The resource does not exist or is not public. Not billed.
- `422`: A required parameter is missing or has the wrong type. Not billed.
- `429`: Rate limit reached. Wait for Retry-After seconds. Not billed.
- `502`: The platform could not be reached or returned nothing usable. Retryable, not billed. 503 and 504 use the same envelope.

---

[API](https://skmtc.dev/captapi/apis/captapi-api.md) · [All operations](https://skmtc.dev/captapi/apis/captapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/captapi/apis/captapi-api/revisions/c9b9ac5ff1bd?raw)
