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
application/jsonexpiresAt
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
application/jsoncid
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.
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."
}