social.coves.community.post.create

coves.social

Documentation

Create a new post in a community

main procedure

Create a new post in a community

Input

Encodingapplication/json
community string Required

Community identifier (DID, handle, name@origin, or bare local name) of the community to post in

maxLength: 320 bytes
content string Optional

Post content - supports rich text via facets

maxLength: 500000 bytesmaxGraphemes: 50000 graphemes
embed union Optional

Embedded media, external links, or quoted posts

facets array Optional

Annotations for rich text (mentions, links, formatting, block structure)

maxLength: 200 items
langs array Optional

Languages used in the post content (ISO 639-1)

maxLength: 3 items
tags array Optional

User-applied topic tags

maxLength: 8 items
title string Optional

Post title (optional for media-only posts)

maxLength: 3000 bytesmaxGraphemes: 300 graphemes

Output

Encodingapplication/json
cid stringcid Required

CID of the created post

status string Optional

The community's decision as of this response. 'accepted' means this host runs the community's admission and a community acceptance now stands for the post; 'pending' means no acceptance covers it yet - either the community is hosted elsewhere and decides for itself, or the synchronous acceptance failed and will be retried. Pending is a SUCCESS, not an error: the post exists in its author's repository either way. Optional, so a client predating the field decodes an unchanged response. knownValues rather than an enum because the vocabulary may grow, and a closed enum would make adding a status a breaking change for every generated client in the network.

Known values: accepted, pending
uri stringat-uri Required

AT-URI of the created post

Errors

CommunityNotFound Community not found
NotAuthorized User is not authorized to post in this community
Banned User is banned from this community
InvalidContent Post content violates community rules
ContentRuleViolation Post violates community content rules (e.g., embeds not allowed, text too short)
Try It

Requests are sent directly from your browser. Some servers may block requests due to CORS.

Base URL for XRPC calls (e.g., https://bsky.social)
Enter valid JSON for the request body
View raw schema
{
  "description": "Create a new post in a community",
  "errors": [
    {
      "description": "Community not found",
      "name": "CommunityNotFound"
    },
    {
      "description": "User is not authorized to post in this community",
      "name": "NotAuthorized"
    },
    {
      "description": "User is banned from this community",
      "name": "Banned"
    },
    {
      "description": "Post content violates community rules",
      "name": "InvalidContent"
    },
    {
      "description": "Post violates community content rules (e.g., embeds not allowed, text too short)",
      "name": "ContentRuleViolation"
    }
  ],
  "input": {
    "encoding": "application/json",
    "schema": {
      "properties": {
        "community": {
          "description": "Community identifier (DID, handle, name@origin, or bare local name) of the community to post in",
          "maxLength": 320,
          "type": "string"
        },
        "content": {
          "description": "Post content - supports rich text via facets",
          "maxGraphemes": 50000,
          "maxLength": 500000,
          "type": "string"
        },
        "embed": {
          "description": "Embedded media, external links, or quoted posts",
          "refs": [
            "social.coves.embed.images",
            "social.coves.embed.video",
            "social.coves.embed.external",
            "social.coves.embed.post"
          ],
          "type": "union"
        },
        "facets": {
          "description": "Annotations for rich text (mentions, links, formatting, block structure)",
          "items": {
            "ref": "social.coves.richtext.facet",
            "type": "ref"
          },
          "maxLength": 200,
          "type": "array"
        },
        "labels": {
          "description": "Self-applied content labels (NSFW, spoilers, etc.)",
          "ref": "com.atproto.label.defs#selfLabels",
          "type": "ref"
        },
        "langs": {
          "description": "Languages used in the post content (ISO 639-1)",
          "items": {
            "format": "language",
            "type": "string"
          },
          "maxLength": 3,
          "type": "array"
        },
        "tags": {
          "description": "User-applied topic tags",
          "items": {
            "maxGraphemes": 64,
            "maxLength": 640,
            "type": "string"
          },
          "maxLength": 8,
          "type": "array"
        },
        "title": {
          "description": "Post title (optional for media-only posts)",
          "maxGraphemes": 300,
          "maxLength": 3000,
          "type": "string"
        }
      },
      "required": [
        "community"
      ],
      "type": "object"
    }
  },
  "output": {
    "encoding": "application/json",
    "schema": {
      "properties": {
        "cid": {
          "description": "CID of the created post",
          "format": "cid",
          "type": "string"
        },
        "status": {
          "description": "The community's decision as of this response. 'accepted' means this host runs the community's admission and a community acceptance now stands for the post; 'pending' means no acceptance covers it yet - either the community is hosted elsewhere and decides for itself, or the synchronous acceptance failed and will be retried. Pending is a SUCCESS, not an error: the post exists in its author's repository either way. Optional, so a client predating the field decodes an unchanged response. knownValues rather than an enum because the vocabulary may grow, and a closed enum would make adding a status a breaking change for every generated client in the network.",
          "knownValues": [
            "accepted",
            "pending"
          ],
          "type": "string"
        },
        "uri": {
          "description": "AT-URI of the created post",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "cid"
      ],
      "type": "object"
    }
  },
  "type": "procedure"
}

Lexicon Garden

@