# Truth Social User Posts API Documentation

List the public truths of an account, keyed by the account id that the profile lookup returned — this endpoint performs one upstream request only and never re-resolves a handle inside your bill. Results keep Truth Social's fork fields, including title, quote, signature, reaction, upvotes_count, downvotes_count, votable, version and embedded_announcement, alongside the stock Mastodon status fields. The page size is fixed upstream at 20; asking for more returns 20 and the response reports what was actually returned. The next cursor is the upstream's own max_id, extracted from the Link header it sent; send it back as max_id. The upstream honours only an upper date bound, so a since/until range is walked backwards from the until ceiling and cut on each post's created_at. Reply threads are not reconstructible here: thread and context routes are gated upstream.

- **Documentation:** [https://scrappa.co/docs/truthsocial-api/truthsocial_user_posts](https://scrappa.co/docs/truthsocial-api/truthsocial_user_posts)
- **API group:** Truth Social API
- **Endpoint:** `GET https://scrappa.co/api/truthsocial/user-posts`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `account_id` | string | Yes | The id field of a profile response. |
| `limit` | integer | No | Requested page size. The upstream returns 20 regardless. |
| `max_id` | string | No | Cursor from a previous response. Use the returned next cursor. |
| `until` | string | No | Upper date bound. The walk starts here and moves backwards. |
| `since` | string | No | Lower date bound, applied client-side on created_at. |
| `only_media` | boolean | No | Return only truths that carry media. |
| `exclude_reblogs` | boolean | No | Drop boosted truths. The upstream ignores this filter, so it is applied here. |
| `exclude_replies` | boolean | No | Not verified on this endpoint; it may have no effect. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/truthsocial/user-posts?account_id=107780257626128497&limit=20"
```

## Example response

```json
{
    "success": true,
    "statuses": [
        {
            "id": "113000000000000000",
            "created_at": "2025-01-01T12:00:00.000Z",
            "content": "A truth.",
            "title": null,
            "upvotes_count": 12000,
            "downvotes_count": 900,
            "replies_count": 400,
            "media_attachments": []
        }
    ],
    "count": 1,
    "pagination": {
        "next": null,
        "has_more": false
    },
    "caveats": []
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 404 | Not found | No public account, truth, tag or video matches the given identifier. One upstream lookup was performed and the request was not charged. |
| 422 | Validation error | A required identifier was missing or malformed. No upstream request was performed and nothing was charged. |
| 503 | Upstream unavailable | Truth Social could not be reached after safe retries. The request is not billed. A challenge, a regional block or a rate limit on our side is reported this way, never as a rate limit against you. The specific cause is recorded on your request log, not in this response. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
