# Legal tools

> MCP tools for Legal: legal_accept, legal_acceptance_get.

- `legal_accept`: Accept the terms or the DPA
- `legal_acceptance_get`: Get the legal acceptance

## `legal_accept`

**Accept the terms or the DPA.** Operation [`legal.accept`](https://ownrecord.io/docs/reference/legal-accept.md) · Organization level · permission `org:write` · risk tier `write` · since M12

Records that the organization accepts a version of Ownrecord's Terms of Service (`terms`) or Data
Processing Agreement (`dpa`). Read the document first at `/legal/{document}/{version}`.

`version` must be the version in effect or an announced newer one (see `acceptableVersions` in
`legal.acceptance_get`). Sign-up records the terms; the DPA must be accepted before a brand goes live; a
material change to either is announced 30 days ahead and accepted again by an owner or admin.

Only a person signed in to the console can accept, with `org:write` (owners and admins). API keys, agents,
apps and OAuth clients can't, and neither can platform staff under a support-access grant. Accepting the
version already accepted changes nothing.

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

### Arguments

| Argument          | Type                  | Required | Description                                                                                                                                                                                              |
| ----------------- | --------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `document`        | one of `terms`, `dpa` | yes      | –                                                                                                                                                                                                        |
| `version`         | string                | yes      | (1–20 characters)                                                                                                                                                                                        |
| `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

- [`legal_version_not_acceptable`](https://ownrecord.io/docs/reference/errors.md#legal_version_not_acceptable): The version isn't the one in effect or an announced newer one.
- [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied): You aren't an owner or admin signed in to the console, or this is the platform organization.
- [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed): The document isn't `terms` or `dpa`, or the version is missing.
- [`version_conflict`](https://ownrecord.io/docs/reference/errors.md#version_conflict): The organization changed at the same time; retry.

### Example

**Accept the DPA before going live**

Arguments:

```json
{
  "document": "dpa",
  "version": "1.0",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
```

Result `output`:

```json
{
  "object": "legal_acceptance",
  "organizationId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "actionRequired": false,
  "updateAnnounced": false,
  "documents": [
    {
      "document": "terms",
      "title": "Terms of Service",
      "status": "accepted",
      "acceptedVersion": "1.0",
      "acceptedAt": "2026-10-26T09:30:00.000Z",
      "current": {
        "version": "1.0",
        "effectiveDate": "2026-10-26",
        "status": "draft",
        "url": "/legal/terms",
        "versionUrl": "/legal/terms/1.0"
      },
      "upcoming": null,
      "acceptableVersions": ["1.0"]
    },
    {
      "document": "dpa",
      "title": "Data Processing Agreement",
      "status": "accepted",
      "acceptedVersion": "1.0",
      "acceptedAt": "2026-10-27T10:00:00.000Z",
      "current": {
        "version": "1.0",
        "effectiveDate": "2026-10-26",
        "status": "draft",
        "url": "/legal/dpa",
        "versionUrl": "/legal/dpa/1.0"
      },
      "upcoming": null,
      "acceptableVersions": ["1.0"]
    }
  ]
}
```

## `legal_acceptance_get`

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

Returns which versions of Ownrecord's Terms of Service and Data Processing Agreement the organization
accepted, the versions in effect now, and any announced change.

Each document's `status` is `accepted`; `update_announced` when a material change is announced and not
accepted yet (it takes effect on `upcoming.effectiveDate`, at least 30 days after the announcement);
`acceptance_required` when a material change is in effect and an owner or admin must accept it; or, for the
DPA, `not_accepted` until it is accepted, which the go-live checklist requires. `actionRequired` is true when
any document needs acceptance now.

Readable by every member of the organization.

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

**Terms accepted, DPA not yet**

Arguments:

```json
{}
```

Result `output`:

```json
{
  "object": "legal_acceptance",
  "organizationId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "actionRequired": false,
  "updateAnnounced": false,
  "documents": [
    {
      "document": "terms",
      "title": "Terms of Service",
      "status": "accepted",
      "acceptedVersion": "1.0",
      "acceptedAt": "2026-10-26T09:30:00.000Z",
      "current": {
        "version": "1.0",
        "effectiveDate": "2026-10-26",
        "status": "draft",
        "url": "/legal/terms",
        "versionUrl": "/legal/terms/1.0"
      },
      "upcoming": null,
      "acceptableVersions": ["1.0"]
    },
    {
      "document": "dpa",
      "title": "Data Processing Agreement",
      "status": "not_accepted",
      "acceptedVersion": null,
      "acceptedAt": null,
      "current": {
        "version": "1.0",
        "effectiveDate": "2026-10-26",
        "status": "draft",
        "url": "/legal/dpa",
        "versionUrl": "/legal/dpa/1.0"
      },
      "upcoming": null,
      "acceptableVersions": ["1.0"]
    }
  ]
}
```
