---
title: "YouTube Community Posts API"
method: GET
path: "/v1/youtube/community-posts"
tags: ["YouTube"]
---

# YouTube Community Posts API

`GET /v1/youtube/community-posts`

## Request

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

Community posts — channel{}, publishedTimeApprox, likeCountIsApproximate, linkedVideos[], cursor (1 credit).

Pass a channel URL, @handle, or UC… ID and get that channel's community /posts tab as clean JSON. communityStatus tells you what an empty list means: ok (posts[]), no_posts (tab open, zero posts), disabled (YouTube says this community is unavailable — 200, not 404). A handle that does not resolve is 404 CHANNEL_NOT_FOUND — never "No community posts found". A tab we could not read is 503 COMMUNITY_UNAVAILABLE (retryable, Retry-After). Each post: id/url, channel{id,title,url,handle} (no flat author twin), text, likeCount + likeCountText + likeCountIsApproximate, publishedTimeApprox + publishedTimeIsApproximate + publishedTimeText (relative labels only — no exact instant source), postType (text|image|poll|video|playlist|quiz), pollOptions[] + totalVotes + totalVotesIsApproximate when poll, images[], hashtags[] (deduped; digit-only rank mentions like "ranks #1" are not hashtags — YouTube never linkifies them), linkedVideos[] when the post attaches a video. Cursor pagination via nextCursor + hasMore. Flat 1 credit on the native path (including no_posts and disabled); 404/503 bill 0.

Docs: https://captapi.com/apis/youtube-community-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
    - `url` string: Canonical URL of the item.
    - `totalReturned` integer: Number of items returned in this response.
    - `hasMore` boolean: Whether more results are available beyond this page. When true, pass nextCursor to fetch the next page.
    - `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).
    - `communityStatus` string: ok when posts[] is the shelf; no_posts when the tab is open and empty; disabled when YouTube says the community is unavailable. Never infer from posts:[] alone on an error.
    - `channelExists` boolean: True on a 200. A missing handle is 404 CHANNEL_NOT_FOUND, not this flag.
    - `posts` object[]
      - `id` string: Id of this posts item.
      - `url` string: Canonical URL of the item.
      - `channel` object: YouTube channel that authored the community post.
        - `id` string: Id of this posts item.
        - `title` string
        - `url` string: Canonical URL of the item.
        - `handle` string
      - `text` string: Text content.
      - `likeCount` integer: Like count as an integer. Compact UI labels ("727K") are expanded here; see likeCountText for the original string.
      - `likeCountText` string: Original like-count label from the platform (e.g. "727K", "3.2M").
      - `likeCountIsApproximate` boolean: True when likeCount was parsed from a compact K/M/B label rather than an exact integer.
      - `hashtags` unknown[]: Hashtags extracted from the text.
        - unknown
      - `linkedVideos` unknown[]: Linked videos (array).
        - unknown
      - `publishedTimeApprox` string: Approximate ISO-8601 derived from publishedTimeText, truncated to the label's precision (day/hour/minute). Not an observed instant — see publishedTimeIsApproximate.
      - `publishedTimeIsApproximate` boolean: true when publishedTimeApprox was derived from a relative label rather than an absolute timestamp YouTube exposed.
      - `publishedTimeText` string: Original relative publish label from the platform when an exact timestamp was not available (e.g. "1 year ago").
      - `isEdited` boolean: Is edited. Example: false.
      - `postType` string: Content type. YouTube community: "text" | "image" | "poll" | "video" | "playlist" | "quiz". Instagram: "image" | "video" | "carousel".
      - `images` string[]: Image URLs attached to the community post.
      - `pollOptions` object[]
        - `text` string: Text content.
        - `voteCount` unknown
        - `percentage` unknown
      - `totalVotes` integer
      - `totalVotesText` string
      - `totalVotesIsApproximate` boolean

## 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)
