# Thing methods: share, unrelate

URL: /code/sdk/thing/verbs-share · Id: `page:code/sdk/thing/verbs-share`

> The Thing Verbs share, unrelate as typed SDK methods, with inputs, result, refusals and an example.

Reference for [Thing](/business/nouns/thing), one group of [Thing methods](/code/sdk/thing).

### Thing.share
Share grants a person, a Role or a guest Verbs on one record and everything it contains. [Verb page](/business/nouns/thing/share?interface=sdk).

```ts
interface ThingVerbs {
  share(input: ThingShareInput, options?: SB.CallOptions): SB.Call<ThingShareOutput>
}
```

Emits [`Thing.shared`](/business/events/Thing.shared).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `thing` | [Thing](/business/nouns/thing) | Yes | The record to share. |
| `to` | [Party](/business/nouns/party) | Yes | Who receives the grant: a person, or a guest who fills only the `guest` Role. |
| `verbs` | `string[]` | Yes | The Verbs granted, such as `get` and `comment`. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `permission` | [Permission](/business/nouns/permission) | Yes | The grant, scoped to the record and its contents. |
| `thing` | [Thing](/business/nouns/thing) | Yes | The Thing shared. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```ts
import { $ } from 'startup-builder'

const { permission, thing } = await $.Thing.share({ thing: 'thing_8ds0r9vvRl', to: 'party_hmQWaPrAyZ', verbs: ['Example verbs'] })
```

### Thing.unrelate
Unrelate ends a Relationship between two Things; the link stays in history and reads back at any earlier moment. [Verb page](/business/nouns/thing/unrelate?interface=sdk).

```ts
interface ThingVerbs {
  unrelate(input: ThingUnrelateInput, options?: SB.CallOptions): SB.Call<ThingUnrelateOutput>
}
```

Emits [`Thing.unrelated`](/business/events/Thing.unrelated).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `thing` | [Thing](/business/nouns/thing) | Yes | The source Thing. |
| `predicate` | `string` | Yes | The Relationship as read from the source. |
| `to` | [Thing](/business/nouns/thing) | Yes | The target Thing. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `relationship` | [Relationship](/business/nouns/relationship) | Yes | The ended Relationship. |
| `thing` | [Thing](/business/nouns/thing) | Yes | 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`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```ts
import { $ } from 'startup-builder'

const { relationship, thing } = await $.Thing.unrelate({ thing: 'thing_8ds0r9vvRl', predicate: 'Example predicate', to: 'thing_8ds0r9vvRl' })
```