ink.branchline.publishBud

branchline.ink

Documentation

Publish a new bud. The parent may be another bud (continuation) or a seed (planting a root bud). The caller must be signed in. The AppView writes an ink.branchline.bud record to the caller's PDS and mirrors it into the local read cache so the new bud is immediately navigable. Rejection reasons mirror ink.branchline.bud create validation — 500-word limit on `text`, 24h parent growing window, self-reply, seed chain/expiry/grantee checks, etc.

main procedure

Publish a new bud. The parent may be another bud (continuation) or a seed (planting a root bud). The caller must be signed in. The AppView writes an ink.branchline.bud record to the caller's PDS and mirrors it into the local read cache so the new bud is immediately navigable. Rejection reasons mirror ink.branchline.bud create validation — 500-word limit on `text`, 24h parent growing window, self-reply, seed chain/expiry/grantee checks, etc.

Input

Encodingapplication/json
formatting array Optional

Byte-offset inline formatting spans over `text`.

parentUri stringat-uri Required

AT-URI of the parent — either an ink.branchline.bud (continuation) or an ink.branchline.seed (root bud being planted).

text string Required

No description available.

maxLength: 20000 bytes
title string Required

No description available.

maxLength: 1200 bytesmaxGraphemes: 120 graphemes

Output

Encodingapplication/json
cid stringcid Required

A content identifier (CID) referencing immutable data.

uri stringat-uri Required

An AT Protocol URI (e.g., at://did:plc:xyz/app.bsky.feed.post/abc).

Errors

Unauthorized The caller is not signed in.
ParentNotFound The parent (bud or seed) does not exist in the AppView.
ParentCidMismatch The resolved parent's CID does not match the value on the record.
SelfReply The caller is the parent bud's author. Buds cannot continue themselves.
ParentGrowing The parent bud is still inside its 24h growing window.
WordLimitExceeded The bud text exceeds the 500-word ceiling.
InvalidFormatting A formatting span is malformed — offsets out of bounds, start >= end, or an unknown span type.
NotSeedGrantee The caller is not the grantee of the seed they are trying to plant.
SeedExpired The seed's expiry has passed.
SeedChainBroken The seed's ancestor chain is missing, expired, or broken by a grantor/grantee mismatch.
SeedAlreadyPlanted Another bud has already been planted from this seed.
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
{
  "type": "procedure",
  "input": {
    "schema": {
      "type": "object",
      "required": [
        "parentUri",
        "title",
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 20000
        },
        "title": {
          "type": "string",
          "maxLength": 1200,
          "maxGraphemes": 120
        },
        "parentUri": {
          "type": "string",
          "format": "at-uri",
          "description": "AT-URI of the parent — either an ink.branchline.bud (continuation) or an ink.branchline.seed (root bud being planted)."
        },
        "formatting": {
          "type": "array",
          "items": {
            "ref": "ink.branchline.bud#formatSpan",
            "type": "ref"
          },
          "description": "Byte-offset inline formatting spans over `text`."
        }
      }
    },
    "encoding": "application/json"
  },
  "errors": [
    {
      "name": "Unauthorized",
      "description": "The caller is not signed in."
    },
    {
      "name": "ParentNotFound",
      "description": "The parent (bud or seed) does not exist in the AppView."
    },
    {
      "name": "ParentCidMismatch",
      "description": "The resolved parent's CID does not match the value on the record."
    },
    {
      "name": "SelfReply",
      "description": "The caller is the parent bud's author. Buds cannot continue themselves."
    },
    {
      "name": "ParentGrowing",
      "description": "The parent bud is still inside its 24h growing window."
    },
    {
      "name": "WordLimitExceeded",
      "description": "The bud text exceeds the 500-word ceiling."
    },
    {
      "name": "InvalidFormatting",
      "description": "A formatting span is malformed — offsets out of bounds, start >= end, or an unknown span type."
    },
    {
      "name": "NotSeedGrantee",
      "description": "The caller is not the grantee of the seed they are trying to plant."
    },
    {
      "name": "SeedExpired",
      "description": "The seed's expiry has passed."
    },
    {
      "name": "SeedChainBroken",
      "description": "The seed's ancestor chain is missing, expired, or broken by a grantor/grantee mismatch."
    },
    {
      "name": "SeedAlreadyPlanted",
      "description": "Another bud has already been planted from this seed."
    }
  ],
  "output": {
    "schema": {
      "type": "object",
      "required": [
        "uri",
        "cid"
      ],
      "properties": {
        "cid": {
          "type": "string",
          "format": "cid"
        },
        "uri": {
          "type": "string",
          "format": "at-uri"
        }
      }
    },
    "encoding": "application/json"
  },
  "description": "Publish a new bud. The parent may be another bud (continuation) or a seed (planting a root bud). The caller must be signed in. The AppView writes an ink.branchline.bud record to the caller's PDS and mirrors it into the local read cache so the new bud is immediately navigable. Rejection reasons mirror ink.branchline.bud create validation — 500-word limit on `text`, 24h parent growing window, self-reply, seed chain/expiry/grantee checks, etc."
}

Lexicon Garden

@