# Onboarding tools

> MCP tools for Onboarding: onboarding_get, onboarding_steps_update.

- `onboarding_get`: Get the onboarding checklist
- `onboarding_steps_update`: Skip, resume or confirm an onboarding step

## `onboarding_get`

**Get the onboarding checklist.** Operation [`onboarding.get`](https://ownrecord.io/docs/reference/onboarding-get.md) · Organization level · permission `org:read` · risk tier `read` · since M12

Returns the organization's onboarding checklist: seven steps in order, each `todo`, `in_progress`, `done` or
`skipped`, and the next one to do.

1. `legal_entity`: a legal entity whose tax ID is verified (VIES, HMRC, CH UID) or under review from a registry
   extract (`in_progress` while it's unverified);
2. `brand`: a brand;
3. `processor`: a processor connection (test or live);
4. `registrations`: the registrations review, done when someone confirms it (`onboarding.steps.update`);
5. `catalog`: an active test-mode price;
6. `test_checkout`: a successful test-mode payment;
7. `go_live`: a live brand (the go-live checklist, `brands.go_live`).

Steps other than the registrations review follow the organization's data, so they can't be marked done by hand.
Any step can be skipped and resumed. The checklist is `complete` once every step is done or skipped.

Annotations: `readOnlyHint: true` · `destructiveHint: false` · `idempotentHint: true` · `openWorldHint: false`

### Arguments

This tool takes no arguments.

- **Read-only:** changes nothing; `idempotency_key` is ignored.

### Errors

- [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied): You can't read this organization.

### Example

**Halfway through onboarding**

Arguments:

```json
{}
```

Result `output`:

```json
{
  "object": "onboarding_checklist",
  "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "complete": false,
  "next": "registrations",
  "done": 3,
  "total": 7,
  "steps": [
    {
      "step": "legal_entity",
      "status": "done",
      "doneBy": "data",
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "brand",
      "status": "done",
      "doneBy": "data",
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "processor",
      "status": "done",
      "doneBy": "data",
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "registrations",
      "status": "todo",
      "doneBy": null,
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "catalog",
      "status": "todo",
      "doneBy": null,
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "test_checkout",
      "status": "todo",
      "doneBy": null,
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "go_live",
      "status": "todo",
      "doneBy": null,
      "skippedAt": null,
      "completedAt": null
    }
  ],
  "completedAt": null,
  "version": 0
}
```

## `onboarding_steps_update`

**Skip, resume or confirm an onboarding step.** Operation [`onboarding.steps.update`](https://ownrecord.io/docs/reference/onboarding-steps-update.md) · Organization level · permission `org:write` · risk tier `write` · since M12

Changes one step of the organization's onboarding checklist and returns the checklist:

- `skip`: the step is set aside (`skipped`) and the checklist moves on. It counts as done as soon as the
  organization's data shows it done;
- `resume`: a skipped step is open again (and a confirmed registrations review is open again);
- `complete`: confirms the registrations review (`registrations`): the home registration numbers are right,
  existing OSS, UK or other registrations are entered, and the blocked jurisdictions were reviewed. The other
  steps follow the organization's data and can't be marked done (`onboarding_step_not_manual`).

Needs `org:write` (organization owners and admins).

Annotations: `readOnlyHint: false` · `destructiveHint: false` · `idempotentHint: false` · `openWorldHint: false`

### Arguments

| Argument          | Type                                                                                                | Required | Description                                                                                                                                                                                              |
| ----------------- | --------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `step`            | one of `legal_entity`, `brand`, `processor`, `registrations`, `catalog`, `test_checkout`, `go_live` | yes      | –                                                                                                                                                                                                        |
| `action`          | one of `skip`, `resume`, `complete`                                                                 | yes      | `skip` a step, `resume` a skipped (or confirmed) one, or `complete` the registrations review.                                                                                                            |
| `expectedVersion` | integer                                                                                             | no       | The checklist's `version` you read (0 before the first change); a stale one is `version_conflict`. (0–9007199254740991)                                                                                  |
| `idempotency_key` | string                                                                                              | no       | A unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's `idempotency_key`. (1–255 characters) |
| `dry_run`         | boolean                                                                                             | no       | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default `false`)                                                                                 |

- **Idempotency:** the result returns the `idempotency_key` used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
- **Dry run:** supported. `dry_run: true` checks permissions and rules and computes the result, then rolls everything back.

### Errors

- [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed): The step or action is unknown.
- [`onboarding_step_not_manual`](https://ownrecord.io/docs/reference/errors.md#onboarding_step_not_manual): `complete` on a step the organization's data decides.
- [`onboarding_step_done`](https://ownrecord.io/docs/reference/errors.md#onboarding_step_done): `skip` or `complete` on a step that is already done.
- [`version_conflict`](https://ownrecord.io/docs/reference/errors.md#version_conflict): The checklist changed since `expectedVersion`; read it again.
- [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied): You can't change this organization's onboarding.

### Example

**Confirm the registrations review**

Arguments:

```json
{
  "step": "registrations",
  "action": "complete",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
```

Result `output`:

```json
{
  "object": "onboarding_checklist",
  "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "complete": false,
  "next": "catalog",
  "done": 4,
  "total": 7,
  "steps": [
    {
      "step": "legal_entity",
      "status": "done",
      "doneBy": "data",
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "brand",
      "status": "done",
      "doneBy": "data",
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "processor",
      "status": "done",
      "doneBy": "data",
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "registrations",
      "status": "done",
      "doneBy": "person",
      "skippedAt": null,
      "completedAt": "2026-10-26T09:00:00.000Z"
    },
    {
      "step": "catalog",
      "status": "todo",
      "doneBy": null,
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "test_checkout",
      "status": "todo",
      "doneBy": null,
      "skippedAt": null,
      "completedAt": null
    },
    {
      "step": "go_live",
      "status": "todo",
      "doneBy": null,
      "skippedAt": null,
      "completedAt": null
    }
  ],
  "completedAt": null,
  "version": 1
}
```
