# Change methods: merge, revert, review

URL: /code/sdk/change/verbs · Id: `page:code/sdk/change/verbs`

> The Change Verbs merge, revert, review as typed SDK methods, with inputs, result, refusals and an example.

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

### Change.merge
Merge applies a Change to live data with a three-way, field-level merge against its base Version. [Verb page](/business/nouns/change/merge?interface=sdk).

```ts
interface ChangeVerbs {
  merge(input: ChangeMergeInput, options?: SB.CallOptions): SB.Call<ChangeMergeOutput>
}
```

Emits [`Change.merged`](/business/events/Change.merged).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `change` | [Change](/business/nouns/change) | Yes | The reviewed Change. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `version` | [Version](/business/nouns/version) | Yes | The new Version. |
| `change` | [Change](/business/nouns/change) | Yes | The Change, now merged into live data. |

**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. |
| The record changed since it was read, so the write would overwrite a newer version. | [`conflict`](/code/api/errors/conflict) | Read the record again, then retry the write against its current state. | None. |
| The record is not in a state that allows this Verb, so the call is refused. | [`refused`](/code/api/errors/refused) | Read the record, run the Verb that moves it to an allowed state, then retry. | None. |

**Example**

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

const { version, change } = await $.Change.merge({ change: 'change_3Ex8uVSOyQ' })
```

### Change.revert
Revert undoes a merged Change with a new Change and a superseding Decision, deleting nothing. [Verb page](/business/nouns/change/revert?interface=sdk).

```ts
interface ChangeVerbs {
  revert(input: ChangeRevertInput, options?: SB.CallOptions): SB.Call<Change>
}
```

Emits [`Change.reverted`](/business/events/Change.reverted).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `change` | [Change](/business/nouns/change) | Yes | The merged Change to undo. |
| `reason` | `text` | Yes | Why it is undone. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `revert` | [Change](/business/nouns/change) | Yes | The Change that undoes it. |

**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. |
| The record is not in a state that allows this Verb, so the call is refused. | [`refused`](/code/api/errors/refused) | Read the record, run the Verb that moves it to an allowed state, then retry. | None. |

**Example**

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

const revert = await $.Change.revert({ change: 'change_3Ex8uVSOyQ', reason: 'Example reason' })
```

### Change.review
Review runs every Evaluator on a Change’s preview and records each verdict on the Change. [Verb page](/business/nouns/change/review?interface=sdk).

```ts
interface ChangeVerbs {
  review(input: ChangeReviewInput, options?: SB.CallOptions): SB.Call<Change>
}
```

Emits [`Change.reviewed`](/business/events/Change.reviewed).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `change` | [Change](/business/nouns/change) | Yes | The open Change. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `change` | [Change](/business/nouns/change) | Yes | The Change with its verdicts. |

**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. |
| The record is not in a state that allows this Verb, so the call is refused. | [`refused`](/code/api/errors/refused) | Read the record, run the Verb that moves it to an allowed state, then retry. | None. |

**Example**

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

const change = await $.Change.review({ change: 'change_3Ex8uVSOyQ' })
```