# TikTok Posts Scraper (x402)

> TikTok Posts Scraper (x402) is a paid API for AI agents from x402.186-241-26-229.sslip.io, paid per call via x402, $0.025/call, status unknown (last checked 2026-10-02).

Scrapes structured TikTok post data from public profiles, hashtags, or direct URLs and returns post metadata including author, text, and timestamps.

## Facts

- Endpoint: POST https://x402.186-241-26-229.sslip.io/v1/tiktok-posts?utm_source=zero.xyz
- Price: $0.025/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/tiktok-posts-scraper-x402-105aab8d
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_TUGw0x7F6D3jrxHsspVRX

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability tiktok-posts-scraper-x402-105aab8d -d '<json body>'
```

Example prompt: Pull the 50 most recent TikTok posts from the profiles @charlidamelio and @addisonre sorted by latest, using a US proxy, and give me each post's caption, URL, and creation time.

## When to prefer this

Choose this endpoint when you need structured TikTok post metadata (captions, author info, timestamps, URLs) from public profiles or hashtags without managing browser automation or TikTok API credentials. It is pay-per-call with no charge for failed or empty runs, making it cost-efficient for exploratory or intermittent scraping tasks. Prefer it over general-purpose scraping tools when you need TikTok-specific field normalization out of the box.

## Known failure modes

- Private or restricted TikTok profiles return no results and are not charged
- Hashtags with very low visibility may yield zero posts
- Invalid or misspelled usernames return empty items array
- Region routing may not guarantee geo-specific content due to TikTok's serving logic
- maxResults exceeding the public embed list size silently caps at available posts
- Malformed URLs in startUrls may be skipped without explicit error

## How this service works

Pay-per-call structured web data. Failed or empty runs are not charged.

## Output

Returns a JSON object with a count of collected posts and an items array where each item contains the post ID, URL, caption text, author ID, author name, author nickname, and creation time in both Unix timestamp and ISO 8601 format.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "region": {
   "type": "string",
   "description": "Optional two-letter country code for proxy routing; results may still follow site availability."
  },
  "sortBy": {
   "enum": [
    "latest",
    "popular"
   ],
   "type": "string",
   "default": "latest",
   "description": "Sort posts within each visible source list by posting time or play count."
  },
  "hashtag": {
   "type": "string",
   "description": "Hashtag without #. Availability varies by tag."
  },
  "maxItems": {
   "type": "integer",
   "default": 0,
   "minimum": 0,
   "description": "Stop after this many unique posts across all sources. Zero means no additional total cap."
  },
  "profiles": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Usernames without @. Each public creator embed supplies a small recent post list."
  },
  "startUrls": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Public TikTok profile, hashtag, music, or video URLs. These take priority over scrape mode."
  },
  "maxResults": {
   "type": "integer",
   "default": 50,
   "maximum": 10000,
   "minimum": 1,
   "description": "Maximum posts to emit from a hashtag or music embed, subject to its public list size."
  },
  "scrapeMode": {
   "enum": [
    "profiles",
    "hashtag"
   ],
   "type": "string",
   "default": "profiles",
   "description": "Collect recent posts from profiles or one hashtag."
  },
  "maxResultsPerProfile": {
   "type": "integer",
   "default": 30,
   "maximum": 5000,
   "minimum": 1,
   "description": "Maximum posts to emit per profile, subject to the public embed list size (usually about 10)."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "count": 1,
  "items": [
   {
    "id": null,
    "url": null,
    "text": null,
    "authorId": null,
    "authorName": null,
    "createTime": null,
    "createTimeISO": null,
    "authorNickName": null
   }
  ],
  "product": "tiktok-posts"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tiktok-posts-scraper-x402-105aab8d/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.186-241-26-229.sslip.io](https://www.zero.xyz/host/x402.186-241-26-229.sslip.io/llms.txt)
