---
title: "Community Info"
method: GET
path: "/community/info"
tags: ["Communities"]
---

# Community Info

`GET /community/info`

## Request

- Base URL: `https://api.twitterapis.com/twitter`
- URL: `https://api.twitterapis.com/twitter/community/info`
- Auth: HTTP bearer

Look up a single X Community by its numeric id and get back its name, description, member count, join policy, primary topic, posted rules and both banners. This endpoint returns the REDUCED form of the Community object: eight of its 24 fields come back empty here and are populated by Community Memberships instead, which the response table marks field by field. Billed at $0.0008 per call. Cost: $0.0008 per call.

## Query parameters

- `community_id` string, required: The numeric community id, the digits in a x.com/i/communities/<id> URL. Digits only, no leading zero.
- `fields` string
- `compact` '1'

## Response `200`

Metadata, rules and banners for one X Community.

- object
  - `community` Community: An X Community. Returned by Community Info and by Community Memberships, always with the same 24 keys, but NOT with the same fields populated: Community Info is served by a reduced X operation and returns admin, invites_policy, question, search_tags and members_facepile_ids empty, moderator_count as 0, and creator with id and name null. Community Memberships returns all of those filled. Each property below states which endpoint fills it, so a null can be read correctly rather than guessed at.
    - `id` string: Numeric community id as a string.
    - `name` string: The community's display name. Returned identically by both endpoints.
    - `description` string, nullable: The community's description text. Null when the community has not written one, which was 1 of 39 communities sampled. Returned identically by both endpoints.
    - `created_at` integer: Millisecond epoch the community was created, as an integer rather than an ISO string. 0 when X did not send it. Returned identically by both endpoints.
    - `member_count` integer: Total members. Returned identically by both endpoints: it matched exactly on all 10 communities read through both on 2026-08-17, including one at 265135 members. Contrast moderator_count, which does not match.
    - `moderator_count` integer: Total moderators, but only from Community Memberships. COMMUNITY INFO RETURNS 0 HERE FOR EVERY COMMUNITY, including communities that demonstrably have moderators. On 10 communities read through both endpoints on 2026-08-17, Community Memberships returned 1 to 6 and Community Info returned 0 every time, and the Community Moderators roster independently agreed with Community Memberships on all 5 it was checked against. Read a 0 from Community Info as not reported, never as no moderators.
    - `join_policy` string, nullable: How the community admits members, passed through from X. Observed values: Open and RestrictedJoinRequestsRequireModeratorApproval. Only those two have been seen, which is not the same as those two being the whole set, so the field is passed through as a string rather than narrowed to an enum. Returned identically by both endpoints.
    - `invites_policy` string, nullable: Who may invite new members, passed through from X. Observed values: MemberInvitesAllowed and ModeratorInvitesAllowed. ONLY COMMUNITY MEMBERSHIPS RETURNS IT. Community Info returns null here for every community, so a null from that endpoint means the operation serving it does not carry the field, NOT that the community has no invite policy. The two cases cannot be told apart from the response alone, which is why it is stated here: on 2026-08-17 this field was non-null on all 10 communities read through Community Memberships and null on the same 10 read through Community Info minutes later. When you need the invite policy, read it from Community Memberships.
    - `is_nsfw` boolean: Whether the community is flagged not-safe-for-work. Defaults to false when X does not send the field, so an absent flag reads as not flagged rather than as unknown. Returned identically by both endpoints.
    - `question` string, nullable: The join-screen prompt applicants answer, when the community sets one. Community Info returns null here for every community, including ones that do set a question, so read it from Community Memberships. A null from Community Memberships is the real answer and means the community asks nothing.
    - `primary_topic` object, nullable: The single topic X assigns the community. Null when the community has no topic. Community Info fills name but leaves topic_id null, so take topic_id from Community Memberships if you need the numeric id. X spells the name topic_name on the wire; it is normalised to name so a consumer reading Spaces topics and Community topics does not have to care.
      - `topic_id` string, nullable: X's numeric topic id as a string, for example 603 for Entrepreneurship. Null on Community Info, which sends the name without the id.
      - `name` string, nullable: The topic's display name, for example Entrepreneurship or Education. Filled by both endpoints.
    - `search_tags` string[]: The community's search tags, as plain strings. Community Info returns an empty array for every community, including ones that do have tags, so read this from Community Memberships. An empty array from Community Memberships is the real answer and means the community set none.
    - `rules` object[]: The community's posted rules, in the order X returns them. Returned identically by both endpoints.
      - `id` string: Numeric rule id as a string.
      - `name` string: The rule's title, which is the line X shows in the community's rule list.
      - `description` string, nullable: The longer body text under the rule's title. Null when the community left it blank, which was 87 of 174 rules sampled on 2026-08-17, so expect roughly half of them to carry only a name. It is left null rather than filled with the rule name.
    - `banner_url` string, nullable: The banner a client should actually render: the custom banner when the community set one, otherwise X's default. Computed for you, because both banners are always present and picking the wrong one silently shows every community the same stock gradient. Returned identically by both endpoints.
    - `custom_banner` object, nullable: The community's own banner, or null when the community never set one. Returned identically by both endpoints.
      - `url` string: Image URL on pbs.twimg.com.
      - `width` integer: Image width in pixels.
      - `height` integer: Image height in pixels.
    - `default_banner` object, nullable: X's stock banner. Present even when a custom banner exists, which is why banner_url is computed rather than left to the caller. Returned identically by both endpoints.
      - `url` string: Image URL on pbs.twimg.com.
      - `width` integer: Image width in pixels.
      - `height` integer: Image height in pixels.
    - `permalink` string, nullable: ALWAYS NULL, on both endpoints. X's community payload does not carry a permalink URL on either operation, and one is not synthesised here from the id. It was null on every community record sampled on 2026-08-17, through both endpoints. Build the link yourself: https://x.com/i/communities/ followed by the id.
    - `admin` User: A Twitter/X user profile.
      - `id` string: Numeric user ID as a string.
      - `username` string: Handle without the leading @.
      - `name` string: Display name.
      - `verified` boolean: Whether the account is legacy-verified.
      - `is_blue_verified` boolean: Whether the account carries the Verified (Blue) badge.
      - `verified_type` string, nullable: Verification type, for example Business or Government, when applicable; null otherwise.
      - `followers_count` integer: Follower count.
      - `following_count` integer: Following count.
      - `tweet_count` integer: Number of tweets the account has posted.
      - `favourites_count` integer: Number of tweets the account has liked.
      - `media_count` integer: Number of media items the account has posted.
      - `description` string: Profile bio text.
      - `location` string: Self-reported location.
      - `url` string: Linked website URL from the profile, when set.
      - `created_at` string: Account creation timestamp in Twitter date format.
      - `profile_image_url` string: Avatar image URL.
      - `cover_picture` string: Profile banner/cover image URL, when set.
      - `listed_count` integer, nullable: Number of public lists the account appears on.
      - `can_dm` boolean, nullable: Whether the account accepts direct messages. Currently null on profile lookups (user/info, user/search) and on tweet authors: X no longer includes DM permission in those payloads. The key stays so it fills again if X restores it. For a real answer between two accounts, use can_dm on /twitter/user/check_follow_relationship.
      - `parody_commentary_fan_label` string, nullable: X's parody / commentary / fan account label, when the account is marked as one; null when it carries no such label.
      - `creator_subscriptions_enabled` boolean, nullable: True when the account sells X Subscriptions to its followers; null when X does not say.
      - `can_media_tag` boolean, nullable: Whether other accounts are permitted to tag this account in media; null when X does not report the media-tag permission.
      - `has_custom_timelines` boolean, nullable: Whether the account has created custom timelines.
      - `is_translator` boolean, nullable: Whether the account is a Twitter/X translator.
      - `possibly_sensitive` boolean, nullable: Whether the account is flagged as possibly posting sensitive media.
      - `default_profile` boolean, nullable: True when the account still uses the default profile theme.
      - `default_profile_image` boolean, nullable: True when the account still uses the default avatar.
      - `professional_type` string, nullable: Professional account type when set, for example "Creator" or "Business"; null otherwise.
      - `profile_bio` object, nullable: Structured bio with entity ranges, when present.
        - `description` string, nullable: The bio text.
        - `entities` object, nullable: Mention/URL entity ranges within the bio, when present.
      - `affiliate_label` object, nullable: Parent-organization/affiliate badge shown on the profile, when present.
        - `description` string, nullable: The affiliate/parent-org label text.
        - `badge_url` string, nullable: Badge image URL.
        - `url` string, nullable: Link the badge points to.
      - `pinned_tweet_ids` string[]: Numeric IDs (as strings) of the account's pinned tweet(s); empty array when the account has none pinned or when a trimmed user object omits the block.
      - `protected` boolean, nullable: Whether the account is protected (locked); null on a trimmed user object that carries no protected flag.
      - `type` string, nullable: The user result __typename, for example "User" or "UserUnavailable"; null when absent.
      - `is_automated` boolean, nullable: True when the profile carries X's automated-account label, which is how an account declares itself a bot. Null when no such label is on the profile. This field is never set to false by inference, so null means only that X did not label the account, never that a human runs it. Null on every account sampled so far, including accounts that are plainly automated.
      - `automated_by` string, nullable: Handle of the account that manages this automated account, read from the link on the automated label. Null unless is_automated is true and that label carries a single-segment x.com or twitter.com profile link. Null on every account sampled so far.
      - `unavailable` boolean, nullable: True when X reports the account as unavailable, for example suspended or withheld. False when X returns an ordinary account result. Null on a trimmed user object that reports no account type at all. It is derived from the same value as type, so the two can never disagree: a type of UserUnavailable always gives true.
      - `unavailable_message` string, nullable: The message X returns explaining why the account is unavailable, for example the text shown in place of the profile. Null when the account is available or when X sends no message.
      - `unavailable_reason` string, nullable: The short reason code X returns for an unavailable account, for example Suspended. Null when the account is available or when X sends no reason.
      - `withheld_in_countries` string[], nullable: ISO country codes in which X withholds this account. The empty array and null mean different things and the difference is legally relevant if you republish profiles: an empty array is X stating the account is withheld nowhere, while null is X not telling us. Do not read null as "not withheld". Null on every account today, because the block this is read from is one X no longer sends; the read is kept so the field fills in on its own if X restores it.
    - `creator` User: A Twitter/X user profile.
      - `id` string: Numeric user ID as a string.
      - `username` string: Handle without the leading @.
      - `name` string: Display name.
      - `verified` boolean: Whether the account is legacy-verified.
      - `is_blue_verified` boolean: Whether the account carries the Verified (Blue) badge.
      - `verified_type` string, nullable: Verification type, for example Business or Government, when applicable; null otherwise.
      - `followers_count` integer: Follower count.
      - `following_count` integer: Following count.
      - `tweet_count` integer: Number of tweets the account has posted.
      - `favourites_count` integer: Number of tweets the account has liked.
      - `media_count` integer: Number of media items the account has posted.
      - `description` string: Profile bio text.
      - `location` string: Self-reported location.
      - `url` string: Linked website URL from the profile, when set.
      - `created_at` string: Account creation timestamp in Twitter date format.
      - `profile_image_url` string: Avatar image URL.
      - `cover_picture` string: Profile banner/cover image URL, when set.
      - `listed_count` integer, nullable: Number of public lists the account appears on.
      - `can_dm` boolean, nullable: Whether the account accepts direct messages. Currently null on profile lookups (user/info, user/search) and on tweet authors: X no longer includes DM permission in those payloads. The key stays so it fills again if X restores it. For a real answer between two accounts, use can_dm on /twitter/user/check_follow_relationship.
      - `parody_commentary_fan_label` string, nullable: X's parody / commentary / fan account label, when the account is marked as one; null when it carries no such label.
      - `creator_subscriptions_enabled` boolean, nullable: True when the account sells X Subscriptions to its followers; null when X does not say.
      - `can_media_tag` boolean, nullable: Whether other accounts are permitted to tag this account in media; null when X does not report the media-tag permission.
      - `has_custom_timelines` boolean, nullable: Whether the account has created custom timelines.
      - `is_translator` boolean, nullable: Whether the account is a Twitter/X translator.
      - `possibly_sensitive` boolean, nullable: Whether the account is flagged as possibly posting sensitive media.
      - `default_profile` boolean, nullable: True when the account still uses the default profile theme.
      - `default_profile_image` boolean, nullable: True when the account still uses the default avatar.
      - `professional_type` string, nullable: Professional account type when set, for example "Creator" or "Business"; null otherwise.
      - `profile_bio` object, nullable: Structured bio with entity ranges, when present.
        - `description` string, nullable: The bio text.
        - `entities` object, nullable: Mention/URL entity ranges within the bio, when present.
      - `affiliate_label` object, nullable: Parent-organization/affiliate badge shown on the profile, when present.
        - `description` string, nullable: The affiliate/parent-org label text.
        - `badge_url` string, nullable: Badge image URL.
        - `url` string, nullable: Link the badge points to.
      - `pinned_tweet_ids` string[]: Numeric IDs (as strings) of the account's pinned tweet(s); empty array when the account has none pinned or when a trimmed user object omits the block.
      - `protected` boolean, nullable: Whether the account is protected (locked); null on a trimmed user object that carries no protected flag.
      - `type` string, nullable: The user result __typename, for example "User" or "UserUnavailable"; null when absent.
      - `is_automated` boolean, nullable: True when the profile carries X's automated-account label, which is how an account declares itself a bot. Null when no such label is on the profile. This field is never set to false by inference, so null means only that X did not label the account, never that a human runs it. Null on every account sampled so far, including accounts that are plainly automated.
      - `automated_by` string, nullable: Handle of the account that manages this automated account, read from the link on the automated label. Null unless is_automated is true and that label carries a single-segment x.com or twitter.com profile link. Null on every account sampled so far.
      - `unavailable` boolean, nullable: True when X reports the account as unavailable, for example suspended or withheld. False when X returns an ordinary account result. Null on a trimmed user object that reports no account type at all. It is derived from the same value as type, so the two can never disagree: a type of UserUnavailable always gives true.
      - `unavailable_message` string, nullable: The message X returns explaining why the account is unavailable, for example the text shown in place of the profile. Null when the account is available or when X sends no message.
      - `unavailable_reason` string, nullable: The short reason code X returns for an unavailable account, for example Suspended. Null when the account is available or when X sends no reason.
      - `withheld_in_countries` string[], nullable: ISO country codes in which X withholds this account. The empty array and null mean different things and the difference is legally relevant if you republish profiles: an empty array is X stating the account is withheld nowhere, while null is X not telling us. Do not read null as "not withheld". Null on every account today, because the block this is read from is one X no longer sends; the read is kept so the field fills in on its own if X restores it.
    - `members_facepile_ids` string[]: User ids of the members X puts in the community facepile preview, ids only. Community Info returns an empty array for every community, so read this from Community Memberships. Use Community Members for the actual roster, which is the right tool whichever endpoint you started from.
    - `role` string, nullable: ALWAYS NULL, on both endpoints. It is the role of the ACCOUNT THAT MADE THE CALL, and these public reads do not run as your account, so any value here would describe a stranger. The key is kept rather than removed so it stays visible that X sends this field and we decline to answer it. For a real per-member role, use Community Members, whose members[].role is about that member and not about the caller.
    - `can_join` boolean, nullable: ALWAYS NULL, on both endpoints, for the same caller-relative reason as role. It answers whether the CALLING account may join, and the calling account is one of ours. Use join_policy for the community's own admission rule, which is a real answer.
    - `is_pinned` boolean, nullable: ALWAYS NULL, on both endpoints, for the same caller-relative reason as role. It answers whether the CALLING account pinned this community.
    - `viewer_relationship_type` string, nullable: ALWAYS NULL, on both endpoints, for the same caller-relative reason as role. It is the viewer relationship, and the viewer is not you.

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `402`: Insufficient credits
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limited
- `5XX`: Server error

---

[API](https://skmtc.dev/twitterapis/apis/twitterapis-api.md) · [All operations](https://skmtc.dev/twitterapis/apis/twitterapis-api/llms.txt) · [OpenAPI document](https://skmtc.dev/twitterapis/apis/twitterapis-api/revisions/a33ce0fedb3c?raw)
