# Kuaishou Scraper (`maximedupre/kuaishou-scraper`) Actor

Collect public Kuaishou videos, top-level comments, and hot-board topics in structured dataset rows. Find videos by keywords, hashtags, links or IDs, or creator profiles, then review captions, creators, engagement, source media links, comments, and current topics.

- **URL**: https://apify.com/maximedupre/kuaishou-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Videos, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🎬 Kuaishou scraper for public videos and topics

For social media researchers, content teams, and developers, Kuaishou Scraper collects public Kuaishou videos, top-level comments, and hot-board topics. It returns structured rows with captions, hashtags, creator details, engagement counts, and source media links. Comment rows can include replies, and hot-board rows include topic ranks, heat values when supplied, and source search links. Review the data in an Apify dataset or use it in your own workflow without a Kuaishou login or source credentials for public sources.

- Track current topics with **[Kuaishou Hot Board Scraper](https://apify.com/maximedupre/kuaishou-scraper/examples/kuaishou-hot-board-scraper)** for a trend snapshot.
- Review top-level comments and optional replies with **[Kuaishou Comments Scraper](https://apify.com/maximedupre/kuaishou-scraper/examples/kuaishou-comments-scraper)** for a public video.
- Collect public videos from a creator profile with **[Kuaishou Profile Scraper](https://apify.com/maximedupre/kuaishou-scraper/examples/kuaishou-profile-scraper)** for profile research.
- Find public videos for a hashtag with **[Kuaishou Hashtag Scraper](https://apify.com/maximedupre/kuaishou-scraper/examples/kuaishou-hashtag-scraper)** for topic research.
- Collect public videos from links or IDs with **[Kuaishou Video Scraper](https://apify.com/maximedupre/kuaishou-scraper/examples/kuaishou-video-scraper)** for metadata and media-link review.

#### 📦 Kuaishou data in three row types

The default dataset contains one of three row shapes. Optional fields appear only when Kuaishou returns them.

**Video rows**

Video rows identify a public video and can include its caption, hashtags, publication time, creator profile, engagement counts, attached music, cover, playable media link, watermark-free link, and quality variants.

**Comment rows**

Comment rows identify a top-level comment and its public video. They include comment text, author details, reaction counts, and reply data when replies are requested and available.

**Hot-board topic rows**

Hot-board rows identify a current public topic with its rank, heat value when supplied, and a Kuaishou search link for that topic.

#### ▶️ Choose a Kuaishou collection

1. Set **Result type** to **Videos**, **Top-level comments**, or **Hot-board topics**.
2. For **Videos**, choose one discovery method: keywords, hashtags, video links or IDs, or creator profiles. Use the matching input values.
3. For **Top-level comments**, add the Kuaishou video links, share links, or IDs whose comments you want to collect. Turn on replies when you need them.
4. For **Hot-board topics**, no source input is needed. The run reads the current public hot board.
5. Set **Maximum results** when you want to stop early, then start the run and open the default dataset.

#### ⚙️ Input

Choose one result type and use only the fields for that choice. A Videos run uses one shared discovery setup, so use separate runs for differently configured searches.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Selects `videos`, `comments`, or `hotBoardTopics` for the run. |
| `videoOptions.findVideosBy` | string | For Videos, selects `keywords`, `hashtags`, `videoSources`, or `creatorProfiles`. |
| `videoOptions.searchValues` | array of strings | For Keywords, Hashtags, or Creator profiles, supplies one or more search values. Creator profiles can use public URLs, IDs, or handles. |
| `videoOptions.preferredQuality` | string | For Videos, chooses the preferred available video quality. Kuaishou may not offer every level. |
| `commentsOptions.includeReplies` | boolean | For Top-level comments, asks for associated replies when they are available. |
| `runSettings.videoSources` | array of strings | For direct video collection or comments, supplies Kuaishou video URLs, share links, or identifiers, one per line. |
| `runSettings.maxItems` | integer | Stops after this many records. Leave it empty to return all available results until the source is exhausted. |

**Work limit**

Leave **Maximum results** empty to return all available results until the source is exhausted. Set a positive number when you want fewer rows to review.

**Example input**

This is the public input from a successful current-beta default-input run.

```json
{
  "resultType": "videos",
  "videoOptions": {
    "findVideosBy": "keywords",
    "searchValues": [
      "music"
    ],
    "preferredQuality": "highest"
  },
  "runSettings": {
    "maxItems": 1
  },
  "commentsOptions": {
    "includeReplies": false
  }
}
```

#### 🧾 Output

The Output panel provides a link to the default dataset. Each saved dataset row has one `resultType` value: `video`, `comment`, or `hotBoardTopic`. The source can omit optional fields when it does not return them.

**Output panel field**

| Field | Type | What it does |
| --- | --- | --- |
| `results` | string | Opens the collected video, comment, and hot-board topic rows in the default dataset. |

**Video result fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | The row type, always `video`. |
| `videoId` | string | Required public Kuaishou video identifier. |
| `sourceUrl` | string | Required public Kuaishou page or share URL for the video. |
| `caption` | string | Caption published with the video, when available. |
| `hashtags` | array of strings | Hashtags published with the video, when available. |
| `durationSeconds` | number | Video duration in seconds, when available. |
| `publishedAt` | date-time string | Time when the video was published, when available. |
| `creator` | object | Public creator identity and profile details, when available. |
| `creator.id` | string | Public creator identifier, when available. |
| `creator.name` | string | Creator's public display name, when available. |
| `creator.handle` | string | Creator's public handle, when available. |
| `creator.profileUrl` | string | Public Kuaishou profile URL for the creator, when available. |
| `creator.isVerified` | boolean | Whether Kuaishou marks the creator as verified, when available. |
| `creator.avatarUrl` | string | Source-hosted creator avatar URL, when available. |
| `creator.followerCount` | integer | Number of followers shown on the creator profile, when available. |
| `creator.followingCount` | integer | Number of accounts followed by the creator, when available. |
| `creator.totalLikeCount` | integer | Total likes shown on the creator profile, when available. |
| `engagement` | object | Public engagement counts shown for the video, when available. |
| `engagement.viewCount` | integer | Number of video views shown by Kuaishou, when available. |
| `engagement.likeCount` | integer | Number of likes shown for the video, when available. |
| `engagement.commentCount` | integer | Number of comments shown for the video, when available. |
| `engagement.forwardCount` | integer | Number of forwards shown for the video, when available. |
| `engagement.saveCount` | integer | Number of saves or collects shown for the video, when available. |
| `music` | object | Music attached to the video, when available. |
| `music.id` | string | Public identifier of the attached music, when available. |
| `music.title` | string | Title of the attached music, when available. |
| `music.artist` | string | Artist credited for the attached music, when available. |
| `music.audioUrl` | string | Source-hosted audio URL for the attached music, when available. |
| `music.durationSeconds` | number | Attached music duration in seconds, when available. |
| `media` | object | Source-hosted media links and available video renditions, when available. |
| `media.coverUrl` | string | Source-hosted cover image URL for the video, when available. |
| `media.videoUrl` | string | Main source-hosted playable or downloadable video URL, when available. |
| `media.watermarkFreeVideoUrl` | string | Source-hosted video URL without a watermark, when a clean rendition is available. |
| `media.variants` | array of objects | Video quality renditions and source-provided media details, when available. |
| `media.variants[].url` | string | Source-hosted URL for this video rendition. |
| `media.variants[].quality` | string | Quality label supplied for this video rendition, when available. |
| `media.variants[].width` | integer | Video width in pixels, when available. |
| `media.variants[].height` | integer | Video height in pixels, when available. |
| `media.variants[].durationSeconds` | number | Duration of this video rendition in seconds, when available. |
| `media.variants[].format` | string | File format of this video rendition, when available. |

**Example video row**

This complete row came from a successful current-beta keyword run. The media URLs are public source values.

```json
{
  "resultType": "video",
  "videoId": "5249376946457479838",
  "sourceUrl": "https://www.kuaishou.com/short-video/5249376946457479838",
  "caption": "#musicasertaneja #musica #musicasertaneja #musica",
  "hashtags": [
    "#musicasertaneja",
    "#musica",
    "#musicasertaneja",
    "#musica"
  ],
  "durationSeconds": 65.852,
  "publishedAt": "2024-06-19T17:35:08.092Z",
  "creator": {
    "id": "3x6wn7wwurnfdwg",
    "name": "Carla Brodei",
    "handle": "carlabrodei",
    "profileUrl": "https://www.kwai.com/@carlabrodei",
    "isVerified": false,
    "avatarUrl": "https://aws-br-pic.kwai.net/bs2/overseaHead/20251106034555_BMTUwMDAxNTUwNTQwNDAw_t.jpg"
  },
  "engagement": {
    "viewCount": 395029,
    "likeCount": 40659,
    "commentCount": 780,
    "forwardCount": 16706
  },
  "media": {
    "coverUrl": "https://p15-kimg.kwai.net/kimg/EKzM1y8qmQEKAnMzEg1waG90by1vdmVyc2VhGoMBdXBpYy8yMDI0LzA2LzIwLzAxL0JNakF5TkRBMk1qQXdNVE0wTXpGZk1UVXdNREF4TlRVd05UUXdOREF3WHpFMU1ERXdOak0xT1RnMU5UQTVNRjh5WHpNPV9vdXVfQjBjNzY0NzI4OGQ1MDBmZWExNzdkZGMxMDVkZWNlZDJkLndlYnA.webp",
    "videoUrl": "https://aws-br-cdn.kwai.net/upic/2024/06/20/01/BMjAyNDA2MjAwMTM0MzFfMTUwMDAxNTUwNTQwNDAwXzE1MDEwNjM1OTg1NTA5MF8yXzM=_b_Bafe69b28321b71dfe562d4f9f1de26c4.mp4?tt=b&clientCacheKey=0d8ea175839bf57f1307141fdf3a45dc&ss=vpm&tag=1-1788499654-unknown-0-4achwdaw7g-8a03ffeca1597db0",
    "variants": [
      {
        "url": "https://aws-br-cdn.kwai.net/upic/2024/06/20/01/BMjAyNDA2MjAwMTM0MzFfMTUwMDAxNTUwNTQwNDAwXzE1MDEwNjM1OTg1NTA5MF8yXzM=_sl200Ohd1_Bbb23e7252845a5e62b8406489274f057.mp4?tt=sl200Ohd1&clientCacheKey=ae4654ce957f071d05582ae8947f5ec0&ss=vpm&tag=1-1788499654-unknown-0-vxndepn92b-d9cc680d72149942",
        "quality": "ohd",
        "width": 576,
        "height": 1024,
        "durationSeconds": 65.852,
        "format": "mp4"
      },
      {
        "url": "https://aws-br-cdn.kwai.net/upic/2024/06/20/01/BMjAyNDA2MjAwMTM0MzFfMTUwMDAxNTUwNTQwNDAwXzE1MDEwNjM1OTg1NTA5MF8yXzM=_b_Bafe69b28321b71dfe562d4f9f1de26c4.mp4?tt=b&clientCacheKey=0d8ea175839bf57f1307141fdf3a45dc&ss=vpm&tag=1-1788499654-unknown-0-4achwdaw7g-8a03ffeca1597db0",
        "quality": "ohd",
        "width": 576,
        "height": 1024,
        "durationSeconds": 65.852,
        "format": "mp4"
      }
    ]
  }
}
```

**Comment result fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | The row type, always `comment`. |
| `commentId` | string | Public Kuaishou identifier of the comment. |
| `video` | object | The public video that owns this top-level comment. |
| `video.videoId` | string | Public Kuaishou identifier of the video with this comment. |
| `video.sourceUrl` | string | Public Kuaishou page or share URL for the video with this comment. |
| `text` | string | Text published in the comment. |
| `author` | object | Public identity details for the comment author, when available. |
| `author.id` | string | Public identifier of the comment author, when available. |
| `author.name` | string | Comment author's public display name, when available. |
| `author.profileUrl` | string | Public Kuaishou profile URL for the comment author, when available. |
| `author.avatarUrl` | string | Source-hosted avatar image URL for the comment author, when available. |
| `createdAt` | date-time string | Time when the comment was published, when available. |
| `likeCount` | integer | Number of likes shown for the comment, when available. |
| `replyCount` | integer | Number of replies shown for the comment, when available. |
| `replies` | array of objects | Replies associated with this top-level comment, when requested and available. |
| `replies[].replyId` | string | Public Kuaishou identifier of the reply. |
| `replies[].text` | string | Text published in the reply. |
| `replies[].author` | object | Public identity details for the reply author, when available. |
| `replies[].author.id` | string | Public identifier of the reply author, when available. |
| `replies[].author.name` | string | Reply author's public display name, when available. |
| `replies[].author.profileUrl` | string | Public Kuaishou profile URL for the reply author, when available. |
| `replies[].author.avatarUrl` | string | Source-hosted avatar image URL for the reply author, when available. |
| `replies[].createdAt` | date-time string | Time when the reply was published, when available. |
| `replies[].likeCount` | integer | Number of likes shown for the reply, when available. |

**Example comment row**

This complete row came from a successful current-beta comments run with replies requested.

```json
{
  "resultType": "comment",
  "commentId": "1107240856861",
  "video": {
    "videoId": "5241908663322906194",
    "sourceUrl": "https://www.kuaishou.com/short-video/5241908663322906194"
  },
  "text": "听说西北大学和陕师大都在招生，学费还很实惠，26年3月学信网可查，有兴趣的可以私信我了解详情！",
  "author": {
    "id": "3xg3di53y9qf6v6",
    "name": "途途学姐",
    "profileUrl": "https://www.kuaishou.com/profile/3xg3di53y9qf6v6",
    "avatarUrl": "http://p23-plat.wsukwai.com/uhead/AB/2025/11/14/10/BMjAyNTExMTQxMDA2MThfNTE0NDE5NjUwMV8yX2hkOTI0XzcyMA==_s.jpg?x-kcdn-pid=112530"
  },
  "createdAt": "2026-03-02T07:24:20.462Z",
  "likeCount": 0,
  "replyCount": 1,
  "replies": [
    {
      "replyId": "1123823618124",
      "text": "的到病假打火机",
      "author": {
        "id": "3xfmt6dranrhzp9",
        "name": "⁵LLOUD萨总⁷",
        "profileUrl": "https://www.kuaishou.com/profile/3xfmt6dranrhzp9",
        "avatarUrl": "http://p23-plat.wsukwai.com/uhead/AB/2026/05/20/22/BMjAyNjA1MjAyMjU5MzJfMjQyODc2Nzc2N18yX2hkNjk2XzIxNQ==_s.jpg?x-kcdn-pid=112530"
      },
      "createdAt": "2026-04-21T09:10:32.400Z",
      "likeCount": 0
    }
  ]
}
```

**Hot-board topic result fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | The row type, always `hotBoardTopic`. |
| `topicId` | string | Stable public topic identifier, when available. |
| `topic` | string | Public topic name shown on the Kuaishou hot board. |
| `heatValue` | number | Heat value shown for the topic, when available. |
| `rank` | integer | Topic position on the hot board, when available. |
| `sourceSearchUrl` | string | Public Kuaishou search URL for the topic. |

**Example hot-board topic row**

This complete row came from a successful current-beta hot-board run.

```json
{
  "resultType": "hotBoardTopic",
  "topicId": "朱忠明任上海市副市长",
  "topic": "朱忠明任上海市副市长",
  "heatValue": 13026000,
  "rank": 2,
  "sourceSearchUrl": "https://www.kuaishou.com/search/video?searchKey=%E6%9C%B1%E5%BF%A0%E6%98%8E%E4%BB%BB%E4%B8%8A%E6%B5%B7%E5%B8%82%E5%89%AF%E5%B8%82%E9%95%BF"
}
```

#### 💳 Pricing

Pricing uses pay per event. Each successful saved row creates the matching event. There is no matching row charge for a result that is not saved. Replies are part of a comment row when requested and available, so they do not create a separate event. Check the Store page for the price for your Apify tier.

| Event title | Charged outcome |
| --- | --- |
| `Video` | One structured public video saved to the dataset. |
| `Comment` | One top-level comment saved to the dataset. |
| `Hot-board topic` | One current public hot-board topic saved to the dataset. |

#### 🔌 Integrations

Open the default dataset from the Output panel or use the Apify API. The video and topic links point to public Kuaishou pages, and media links stay at their source rather than being mirrored by this Actor.

Watch this Apify workflow guide:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Which input fields find public Kuaishou videos?

For Videos, choose Keywords, Hashtags, Video links or IDs, or Creator profiles. Use `searchValues` for keywords, hashtags, or creator profiles, and use `videoSources` for direct video collection.

##### Can I submit a Kuaishou share link or ID?

Yes. Use Video links or IDs for direct video collection or add them as the public videos whose top-level comments you want to collect.

##### Can I search with hashtags?

Yes. Set Find videos by to Hashtags and add one or more hashtag values. The run uses that one shared discovery setup for the Videos result type.

##### What happens when the same video appears more than once?

The first eligible occurrence of a source video is saved. Later matches from another submitted value or discovery path are ignored.

##### Are comment replies separate rows?

No. The dataset saves top-level comments as comment rows. When Include comment replies is on and replies are available, they appear inside the matching comment row.

##### What does an empty Maximum results value do?

It returns all available results until the source is exhausted. Set a positive value when you want the run to stop earlier.

##### What if a source item is private or unavailable?

This Actor collects public Kuaishou sources. A private, removed, blocked, or otherwise unavailable source may return no matching dataset row.

##### Do I need a Kuaishou login?

No. Public Kuaishou sources do not need a buyer-provided login, cookies, or session state.

##### Are the media links permanent?

No link lifetime is promised. Media links remain at the source, so their later availability follows Kuaishou.

##### Can I run keywords and hashtags together?

Use one discovery method and one shared setup per Videos run. Use separate runs for differently configured searches.

### 📝 Changelog

**v0.0** (04-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~kuaishou-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Douyin Analytics Scraper](https://apify.com/maximedupre/douyin-analytics-scraper) - Track current Douyin hot search trends with ranks and heat values.
- [TikTok Search Scraper](https://apify.com/maximedupre/tiktok-search-results-scraper) - Find public TikTok videos or creator profiles by keyword.
- [TikTok Profile Videos API Scraper](https://apify.com/maximedupre/tiktok-profile-videos-api) - Collect a creator's public TikTok uploads by username or profile URL.
- [TikTok Video Downloader](https://apify.com/maximedupre/tiktok-video-downloader) - Resolve known public TikTok video pages into direct media links.
- [RedNote Note Detail Scraper](https://apify.com/maximedupre/rednote-note-detail-scraper) - Collect public RedNote note details, engagement, tags, and media links.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `resultType` (type: `string`):

Choose the kind of records to return: public videos, top-level comments for submitted videos, or current hot-board topics.

## `videoOptions` (type: `object`):

These settings apply when Result type is Videos. Choose one way to find videos and use the matching values.

## `commentsOptions` (type: `object`):

These settings apply when Result type is Top-level comments.

## `runSettings` (type: `object`):

Use Video links or IDs for direct video collection or to choose videos for comments. Set Maximum results to stop before all available results are collected.

## Actor input object example

```json
{
  "resultType": "videos",
  "videoOptions": {
    "findVideosBy": "keywords",
    "searchValues": [
      "music"
    ],
    "preferredQuality": "highest"
  },
  "runSettings": {
    "maxItems": 1
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Open the collected results in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "resultType": "videos",
    "videoOptions": {
        "findVideosBy": "keywords",
        "searchValues": [
            "music"
        ],
        "preferredQuality": "highest"
    },
    "runSettings": {
        "maxItems": 1
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/kuaishou-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "resultType": "videos",
    "videoOptions": {
        "findVideosBy": "keywords",
        "searchValues": ["music"],
        "preferredQuality": "highest",
    },
    "runSettings": { "maxItems": 1 },
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/kuaishou-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "resultType": "videos",
  "videoOptions": {
    "findVideosBy": "keywords",
    "searchValues": [
      "music"
    ],
    "preferredQuality": "highest"
  },
  "runSettings": {
    "maxItems": 1
  }
}' |
apify call maximedupre/kuaishou-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/kuaishou-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2CbdVUVlcHbllGzw6/builds/NnFH8RbBif8axAHBX/openapi.json
