ink.branchline.publishSeed

branchline.ink

Documentation

Gift a seed. The caller must be signed in and must be the grantee of `grantor`; publishing passes that seed's planting right on to `grantee` as a new child seed. The AppView writes an ink.branchline.seed record to the caller's PDS and mirrors it into the local read cache. Root (grantor-less) seeds are not created through this endpoint — they are authored only by the branchline.ink repo.

main procedure

Gift a seed. The caller must be signed in and must be the grantee of `grantor`; publishing passes that seed's planting right on to `grantee` as a new child seed. The AppView writes an ink.branchline.seed record to the caller's PDS and mirrors it into the local read cache. Root (grantor-less) seeds are not created through this endpoint — they are authored only by the branchline.ink repo.

Input

Encodingapplication/json
expiresAt stringdatetime Optional

Optional expiry for the new grant. Must not extend past the grantor chain's earliest expiry.

grantee stringdid Required

DID of the new grantee receiving the gift.

grantor stringat-uri Required

AT-URI of the seed the caller currently holds as grantee.

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.
GrantorNotFound The grantor seed does not exist in the AppView.
NotGrantee The caller is not the grantee of the grantor seed.
GrantorExpired The grantor seed's expiry has passed.
GrantorAlreadyGranted The grantor seed has already been granted to another recipient.
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": [
        "grantor",
        "grantee"
      ],
      "properties": {
        "grantee": {
          "type": "string",
          "format": "did",
          "description": "DID of the new grantee receiving the gift."
        },
        "grantor": {
          "type": "string",
          "format": "at-uri",
          "description": "AT-URI of the seed the caller currently holds as grantee."
        },
        "expiresAt": {
          "type": "string",
          "format": "datetime",
          "description": "Optional expiry for the new grant. Must not extend past the grantor chain's earliest expiry."
        }
      }
    },
    "encoding": "application/json"
  },
  "errors": [
    {
      "name": "Unauthorized",
      "description": "The caller is not signed in."
    },
    {
      "name": "GrantorNotFound",
      "description": "The grantor seed does not exist in the AppView."
    },
    {
      "name": "NotGrantee",
      "description": "The caller is not the grantee of the grantor seed."
    },
    {
      "name": "GrantorExpired",
      "description": "The grantor seed's expiry has passed."
    },
    {
      "name": "GrantorAlreadyGranted",
      "description": "The grantor seed has already been granted to another recipient."
    }
  ],
  "output": {
    "schema": {
      "type": "object",
      "required": [
        "uri",
        "cid"
      ],
      "properties": {
        "cid": {
          "type": "string",
          "format": "cid"
        },
        "uri": {
          "type": "string",
          "format": "at-uri"
        }
      }
    },
    "encoding": "application/json"
  },
  "description": "Gift a seed. The caller must be signed in and must be the grantee of `grantor`; publishing passes that seed's planting right on to `grantee` as a new child seed. The AppView writes an ink.branchline.seed record to the caller's PDS and mirrors it into the local read cache. Root (grantor-less) seeds are not created through this endpoint — they are authored only by the branchline.ink repo."
}

Lexicon Garden

@