Discover/AcFun API
live

AcFun APIlive.acfun.cn

Access real-time AcFun Live stream data: titles, audience counts, likes, cover images, streamer stats, and categories via a single paginated endpoint.

Endpoint health
verified 3h ago
list_live_streams
1/1 passing latest checkself-healing
Endpoints
1
Updated
4h ago

What is the AcFun API?

The AcFun Live API exposes one endpoint — list_live_streams — that returns up to 100 live room records per page from live.acfun.cn, covering 10 fields per stream including title, current online audience count, like count, cover image URLs, and room URL. It supports category filtering and cursor-based pagination, making it straightforward to iterate through all currently broadcasting rooms or drill into a specific content category.

This call costs1 credit / call— charged only on success
Try it
Page size; values above 100 are clamped to 100, values below 1 are rejected.
Continuation cursor copied unchanged from next_cursor of the previous response. Omit for the first page.
Homepage category tab to filter by. Unrecognized values are rejected before any request.
api.parse.bot/scraper/b5cd0a01-7190-4ca8-866e-32668d26cfda/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/b5cd0a01-7190-4ca8-866e-32668d26cfda/list_live_streams?category=all' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace live-acfun-cn-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: AcFun Live Streams — browse what's currently broadcasting."""
from parse_apis.live_acfun_cn_api import AcfunLive, LiveCategory, InputFormatInvalid

client = AcfunLive()

# List all live streams across every category, capped at 10 items.
for stream in client.streams.list(limit=10):
    print(stream.title, f"👤 {stream.author_name}", f"👁 {stream.online_count}")

# Filter to game streams and grab the top one.
try:
    top_game = client.streams.list(category=LiveCategory.GAME, limit=1).first()
except InputFormatInvalid as e:
    # Raised when the category value is rejected by the site.
    print(f"Invalid category: {e.message}")
    top_game = None

if top_game is not None:
    print(
        f"\nTop game stream: {top_game.title}",
        f"\n  Streamer: {top_game.author_name} ({top_game.author_fan_count} fans)",
        f"\n  Category: {top_game.category_name} / {top_game.type_name}",
        f"\n  Viewers: {top_game.online_count}  Likes: {top_game.like_count}",
        f"\n  Room: {top_game.room_url}",
    )

print("exercised: streams.list with category filter and default")
All endpoints · 1 totalmissing one? ·

Returns the live streams currently broadcasting on AcFun Live, one record per live room, in the site's default ordering (most-watched first). Each record carries the stream title, poster/cover image URLs, the internal stream name, current online audience count, like count, the streamer's id/name/signature/avatar/fan and following counts, the content type and category labels, the stream start time (Unix milliseconds) and the room URL. Optional category narrows the list to one of the homepage category tabs; omitted means all categories. Pagination is cursor-based over the site's stream: count (max 100, default 100) sets the page size, and when more streams exist the response carries next_cursor to pass back as pcursor for the following page; next_cursor is null and has_more is false on the last page. total_count is the site's count of live streams matching the category, independent of page size. At the time of writing the whole site had fewer than 100 concurrent streams, so a single default call usually returns everything. An empty streams list is a valid result when nobody in the category is live. One request per call.

Input
ParamTypeDescription
countintegerPage size; values above 100 are clamped to 100, values below 1 are rejected.
pcursorstringContinuation cursor copied unchanged from next_cursor of the previous response. Omit for the first page.
categorystringHomepage category tab to filter by. Unrecognized values are rejected before any request.
Response
{
  "type": "object",
  "fields": {
    "streams": "array of live stream records, one per live room currently broadcasting",
    "has_more": "true when next_cursor is present",
    "returned": "number of records in this page (integer)",
    "next_cursor": "cursor for the next page, or null on the last page",
    "total_count": "site-reported number of live streams matching the category (integer)",
    "streams[].title": "stream title",
    "streams[].live_id": "site identifier of this live session (string)",
    "streams[].type_id": "content sub-type id (integer)",
    "streams[].portrait": "true when the stream is portrait-oriented",
    "streams[].room_url": "public URL of the live room",
    "streams[].author_id": "streamer user id (string); also the room id in room_url",
    "streams[].panoramic": "true when the stream is 360°/panoramic",
    "streams[].type_name": "content sub-type label (Chinese)",
    "streams[].like_count": "likes received in this live session (integer)",
    "streams[].poster_url": "primary poster/cover image URL (thumbnail-sized)",
    "streams[].author_name": "streamer display name",
    "streams[].category_id": "top-level category id (integer)",
    "streams[].poster_urls": "all poster/cover image URLs offered by the site (array of strings)",
    "streams[].stream_name": "internal stream name of the broadcast (string, kszt_ prefixed)",
    "streams[].online_count": "current live audience (viewers online) count (integer)",
    "streams[].author_gender": "site gender code (integer; -1 = unset)",
    "streams[].category_name": "top-level category label (Chinese)",
    "streams[].has_fans_club": "true when the streamer has a fan club",
    "streams[].start_time_ms": "stream start time, Unix epoch milliseconds (integer)",
    "streams[].author_location": "streamer self-reported location (province,city) or null",
    "streams[].author_fan_count": "streamer follower count (integer)",
    "streams[].author_signature": "streamer profile bio text",
    "streams[].author_avatar_url": "streamer avatar image URL",
    "streams[].author_following_count": "number of users the streamer follows (integer)",
    "streams[].author_contribute_count": "number of uploads by the streamer (integer)"
  },
  "sample": {
    "data": {
      "streams": [
        {
          "title": "来咯!",
          "live_id": "d2xxZJg1eWc",
          "type_id": 102,
          "portrait": false,
          "room_url": "https://live.acfun.cn/live/366012",
          "author_id": "366012",
          "panoramic": false,
          "type_name": "网游",
          "like_count": 501,
          "poster_url": "https://js-live.static.yximgs.com/bs2/ztlc/cover_d2xxZJg1eWc_raw.jpg?imageView2/1/w/198/h/111",
          "author_name": "按钮",
          "category_id": 1,
          "poster_urls": [
            "https://js-live.static.yximgs.com/bs2/ztlc/cover_d2xxZJg1eWc_raw.jpg?imageView2/1/w/198/h/111",
            "https://ali-live.static.yximgs.com/bs2/ztlc/cover_d2xxZJg1eWc_raw.jpg"
          ],
          "stream_name": "kszt_yiQxcdkPwWs",
          "online_count": 51,
          "author_gender": 1,
          "category_name": "游戏直播",
          "has_fans_club": true,
          "start_time_ms": 1789349066930,
          "author_location": "湖南,长沙",
          "author_fan_count": 1685,
          "author_signature": "专注潜水5年~~~",
          "author_avatar_url": "https://tx-free-imgs.acfun.cn/content/2020_6_23/1.5928498431176252E9.png?imageView2/1/w/40/h/40|imageslim",
          "author_following_count": 28,
          "author_contribute_count": 41
        }
      ],
      "has_more": false,
      "returned": 14,
      "next_cursor": null,
      "total_count": 14
    },
    "status": "success"
  }
}

About the AcFun API

What the API Returns

The list_live_streams endpoint returns an array of live room records for streams currently broadcasting on AcFun Live, ordered by audience size (most-watched first). Each record in streams[] includes title, live_id (the site's session identifier), room_url, portrait (orientation flag), type_id (content sub-type), and the current online audience count and like count. The response envelope provides total_count (the site-reported total matching the filter), returned (records on this page), has_more, and next_cursor.

Filtering and Pagination

Pass a category string to the list_live_streams endpoint to restrict results to a specific homepage tab. Unrecognized category values are rejected before any request is made. Page size is controlled by count (clamped to a maximum of 100). To paginate, copy next_cursor from one response into the pcursor parameter of the next call; omit pcursor on the first request. When has_more is false or next_cursor is null, you have reached the last page.

Coverage and Freshness

All records reflect streams that are live at the moment of the request — there is no historical or VOD data in the response. The total_count field gives a site-reported snapshot of how many rooms match the current category filter, but this number can shift between paginated requests as streams start or end. Portrait vs. landscape orientation is indicated per-record via the boolean portrait field, which is useful for layout decisions in aggregator UIs.

Reliability & maintenanceVerified

The AcFun API is a managed, monitored endpoint for live.acfun.cn — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when live.acfun.cn changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official live.acfun.cn API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
3h ago
Latest check
1/1 endpoint passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a real-time dashboard tracking AcFun Live audience counts across all active rooms
  • Monitor which content categories (type_id) draw the largest live audiences at any given time
  • Aggregate cover images and room_url links for a third-party live stream directory
  • Track like counts alongside audience counts to surface engagement-to-viewership ratios
  • Page through all live rooms using cursor pagination to build a full snapshot for analysis
  • Filter streams by category to surface niche content tabs not visible on the AcFun homepage
  • Detect portrait-oriented streams (portrait: true) for mobile-first content curation tools
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does AcFun have an official developer API?+
AcFun does not publish a documented public developer API for live stream data. There is no official developer portal or API key program for live.acfun.cn at the time of writing.
What does the `list_live_streams` endpoint actually return for each room?+
Each record in the streams[] array includes the room's title, live_id, room_url, portrait orientation flag, type_id sub-category integer, current online audience count, and like count, along with poster/cover image URLs. The response envelope also reports total_count, has_more, next_cursor, and returned.
Does pagination stay consistent as streams start and stop during a crawl?+
Not guaranteed. Because the list reflects live-at-the-moment rooms ordered by audience size, rooms can appear or disappear between paginated requests. The total_count is a site-reported snapshot that can shift mid-pagination. Treat each page as an independent point-in-time sample rather than a stable sorted set.
Does the API return individual streamer profile data or follower counts?+
The current list_live_streams endpoint returns per-room audience and like counts but does not expose detailed streamer profile fields such as follower counts, account bio, or historical stream stats. You can fork this API on Parse and revise it to add a streamer profile endpoint if those fields are needed.
Can I retrieve past broadcasts or VOD recordings through this API?+
No historical or VOD data is returned. The API covers only rooms that are actively broadcasting at request time. You can fork this API on Parse and revise it to add an endpoint targeting replays or archived content if that coverage is required.
Page content last updated . Spec covers 1 endpoint from live.acfun.cn.
Related APIs in Streaming VideoSee all →
kick.com API
Discover all active livestreams from any Kick.com category and access detailed information about each channel, including viewer counts, tags, language, and creator profiles. Monitor live content across specific categories to find streamers and trending broadcasts in real-time.
twitch.tv API
Search for Twitch streamers and channels, view their profiles and streaming details, and discover live streams organized by category. Find the content and creators you want to watch all in one place.
fishtank.live API
Access clips, episodes, contestant information, and live stream updates from Fishtank.live to browse content, check leaderboard rankings, and track live broadcast status. Get detailed information about specific clips and episodes, or discover random clips and current stox data.
civicstream.tv API
Watch live government proceedings from state legislatures, city councils, and national feeds directly through Civic Stream. Check the schedule to plan when you want to tune into your elected representatives at work.
peaceisactive.com API
Access live streams of state legislature proceedings from all 50 US states in one place. Find real-time government feeds for any state to watch legislative sessions and stay informed on live political activity.
viewstats.com API
viewstats.com API
bilibili.com API
Discover and monitor trending videos on Bilibili with access to video metadata, uploader information, and engagement statistics. Stay updated on what's popular across the platform to find the latest viral content and emerging creators.
zhihu.com API
Monitor trending questions and discussions across Zhihu's multiple categories to stay updated on what's popular in China's largest Q&A community. Get real-time access to the platform's hot list and discover what topics are capturing users' attention right now.