Thing methods: restore, share, unrelate
The Thing Verbs restore, share, unrelate as typed SDK methods, with inputs, result, refusals and an example.
curl -X POST https: //api.sb/ leaseline.app/ things/ thing_8ds0r9vvRl/ share \
-H "Authorization: Bearer $SB_TOKEN" \
-H "Content-Type: application/ json" \
-d '{"to": "party_hmQWaPrAyZ", "verbs": ["Example verbs"]}'
API reference
Thing.sharenpx startup-builder do Thing.share --data '{"thing": "thing_8ds0r9vvRl", "to": "party_hmQWaPrAyZ", "verbs": ["Example verbs"]}'
CLI reference
Thing.share{
"name": "do",
"arguments": {
"code": "return await $.Thing.share({ thing: 'thing_8ds0r9vvRl', to: 'party_hmQWaPrAyZ', verbs: ['Example verbs'] })"
}
}
MCP reference
Thing.shareimport { $ } from 'startup-builder'
const { permission, thing } = await $.Thing.share({ thing: 'thing_8ds0r9vvRl', to: 'party_hmQWaPrAyZ', verbs: ['Example verbs'] })
SDK reference
Thing.shareReference for Thing, one group of Thing methods.
Thing.restore
Restore brings back a deleted Thing, or one an undone Action removed, with its history and Relationships intact. Verb page.
interface ThingVerbs {
restore(input: ThingRestoreInput, options?: SB.CallOptions): SB.Call<Thing>
}Emits Thing.restored.
Inputs
| Input | Type | Required | Description |
|---|---|---|---|
thing | Thing | required | The deleted Thing. |
Returns
| Output | Type | Required | Description |
|---|---|---|---|
thing | Thing | required | The Thing, back in every list and query it left. |
Refuses when
| Check | Error | Fix | Then call |
|---|---|---|---|
| The key is valid, but its scopes do not allow this operation | forbidden | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |
| The Thing is not deleted | refused | Clear what the check names, then call it again. | None. |
thing is missing, or is not a thing | invalid-input | Send thing as a thing, then call it again. | None. |
The Idempotency-Key was sent before with another operation or other input | idempotency-mismatch | Send a new key for new input; reuse a key only to retry the same request. | None. |
Example
import { $ } from 'startup-builder'
const thing = await $.Thing.restore({ thing: 'thing_8ds0r9vvRl' }, { idempotencyKey: 'leaseline-thing-restore-1' })Thing.share
Share grants a person, a Role or a guest Verbs on one record and everything it contains. Verb page.
interface ThingVerbs {
share(input: ThingShareInput, options?: SB.CallOptions): SB.Call<ThingShareOutput>
}Emits Thing.shared.
Inputs
| Input | Type | Required | Description |
|---|---|---|---|
thing | Thing | required | The record to share. |
to | Party | required | Who receives the grant: a person, or a guest who fills only the guest Role. |
verbs | string[] | required | The Verbs granted, such as get and comment. |
Returns
| Output | Type | Required | Description |
|---|---|---|---|
permission | Permission | required | The grant, scoped to the record and its contents. |
thing | Thing | required | The Thing shared. |
Refuses when
| Check | Error | Fix | Then call |
|---|---|---|---|
| The key is valid, but its scopes do not allow this operation | forbidden | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |
thing is missing, or is not a thing | invalid-input | Send thing as a thing, then call it again. | None. |
to is missing, or is not a party | invalid-input | Send to as a party, then call it again. | None. |
verbs is missing, or is not a string list | invalid-input | Send verbs as a string list, then call it again. | None. |
The Idempotency-Key was sent before with another operation or other input | idempotency-mismatch | Send a new key for new input; reuse a key only to retry the same request. | None. |
Example
import { $ } from 'startup-builder'
const { permission, thing } = await $.Thing.share({ thing: 'thing_8ds0r9vvRl', to: 'party_hmQWaPrAyZ', verbs: ['Example verbs'] }, { idempotencyKey: 'leaseline-thing-share-1' })Thing.unrelate
Unrelate ends a Relationship between two Things; the link stays in history and reads back at any earlier moment. Verb page.
interface ThingVerbs {
unrelate(input: ThingUnrelateInput, options?: SB.CallOptions): SB.Call<ThingUnrelateOutput>
}Emits Thing.unrelated.
Inputs
| Input | Type | Required | Description |
|---|---|---|---|
thing | Thing | required | The source Thing. |
predicate | string | required | The Relationship as read from the source. |
to | Thing | required | The target Thing. |
Returns
| Output | Type | Required | Description |
|---|---|---|---|
relationship | Relationship | required | The ended Relationship. |
thing | Thing | required | The Thing the Relationship started from. |
Refuses when
| Check | Error | Fix | Then call |
|---|---|---|---|
| The key is valid, but its scopes do not allow this operation | forbidden | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |
thing is missing, or is not a thing | invalid-input | Send thing as a thing, then call it again. | None. |
predicate is missing, or is not a string | invalid-input | Send predicate as a string, then call it again. | None. |
to is missing, or is not a thing | invalid-input | Send to as a thing, then call it again. | None. |
The Idempotency-Key was sent before with another operation or other input | idempotency-mismatch | Send a new key for new input; reuse a key only to retry the same request. | None. |
Example
import { $ } from 'startup-builder'
const { relationship, thing } = await $.Thing.unrelate({ thing: 'thing_8ds0r9vvRl', predicate: 'Example predicate', to: 'thing_8ds0r9vvRl' }, { idempotencyKey: 'leaseline-thing-unrelate-1' })