> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentlinkops.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Review disavow rules

> Approve or reject up to 100 rules at their current revisions in one change.

`review_disavow_rules`

Approve or reject up to 100 rules at their current revisions in one change. Requires a signed-in owner or administrator; agent credentials cannot approve. Rules whose revision changed are reported in failed.

<Note>This command name is absent from deployment evidence dated 2026-09-20. Hosted availability for this current definition is unverified; inspect your connected catalog before invoking it. Verify the command and its input schema in the selected environment.</Note>

| Access | Behavior |
| - | - |
| `watches:write` | Writes or admits work; can change or remove existing state |

This operation changes saved state. Review its inputs and retry behavior before calling.

## Example request

Connect through [MCP](/guides/connect-mcp), [CLI](/guides/connect-cli), or [HTTP](/guides/connect-http). Replace example identifiers with records from your workspace.

<CodeGroup>
  ```json MCP theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "review_disavow_rules",
      "arguments": {
        "projectId": "project_example",
        "rules": [
          {
            "ruleId": "rule_example",
            "revision": 1
          }
        ],
        "decision": "approve"
      }
    }
  }
  ```

  ```bash CLI theme={null}
  agentlinkops call review_disavow_rules --args '{"projectId":"project_example","rules":[{"ruleId":"rule_example","revision":1}],"decision":"approve"}'
  ```

  ```bash HTTP theme={null}
  curl --fail-with-body https://app.agentlinkops.com/v1/commands/review_disavow_rules \
    -H "Authorization: Bearer $AGENTLINKOPS_TOKEN" \
    -H 'Content-Type: application/json' \
    --data '{"projectId":"project_example","rules":[{"ruleId":"rule_example","revision":1}],"decision":"approve"}'
  ```
</CodeGroup>

## Returned result

Illustrative data validated against the documented response schema. IDs and dates are examples, not a live account capture. MCP returns this data in `structuredContent` and in a text content block; generic HTTP and CLI return the JSON result directly.

```json theme={null}
{
  "rules": [
    {
      "id": "dis_example",
      "workspace_id": "workspace_example",
      "project_id": "project_example",
      "kind": "domain",
      "value": "spam.example",
      "identity": "spam.example",
      "source": "agent_proposal",
      "status": "active",
      "comments": [],
      "revision": 2,
      "created_by": "user_example",
      "approved_by": "user_example",
      "created_at": "2026-09-20T00:00:00.000Z",
      "updated_at": "2026-09-20T00:00:00.000Z"
    }
  ],
  "created": 0,
  "unchanged": 0,
  "revision": 2
}
```

## Input fields

Omit optional fields when you do not want to supply them. Null is accepted only where listed. Unknown input properties are rejected.

| Field | Type | Presence | Meaning and constraints |
| - | - | - | - |
| `projectId` | string | Required | project ID from create/list. minLength: 1; maxLength: 200 |
| `rules` | array | Required | Customer-owned exclusion rules for the selected competitor revision. minItems: 1; maxItems: 100 |
| `rules[].ruleId` | string | Required | Identifier returned by the related operation. minLength: 1; maxLength: 200 |
| `rules[].revision` | integer | Required | maximum: 9007199254740991; exclusiveMinimum: 0 |
| `decision` | string | Required | decision; see schema. values: "approve", "reject" |

### Validation and omitted values

Approves or rejects up to 100 rules in one change. Requires a signed-in owner or administrator; agent credentials cannot approve.

Rules whose revision changed are listed in failed and left as they are.

## Output fields

Fields inside optional or nullable parents apply only when that parent exists. [Common schema conventions](/reference/schemas) explain evidence states, empty lists and extensions.

* **`rules`** (array, required).
* **`created`** (integer, required): True when this request created the record; false when an existing record was reused. minimum: 0; maximum: 9007199254740991
* **`unchanged`** (integer, required): minimum: 0; maximum: 9007199254740991
* **`revision`** (integer, required): Optimistic concurrency revision; supply it as expectedRevision on the next write. minimum: 0; maximum: 9007199254740991
* **`approved`** (boolean, optional).
* **`counts`** (object, optional): additional fields rejected
* **`warnings`** (array, optional): maxItems: 50
* **`failed`** (array, optional).

<Accordion title="All fields and nested objects">
  | Field | Type | Presence | Meaning and constraints |
  | - | - | - | - |
  | `rules` | array | Required | |
  | `rules[].id` | string | Required | Resource identifier returned by the operation. minLength: 1; maxLength: 200 |
  | `rules[].workspace_id` | string | Required | Workspace that owns this record. minLength: 1; maxLength: 200 |
  | `rules[].project_id` | string | Required | Project that owns this record. minLength: 1; maxLength: 200 |
  | `rules[].kind` | string | Required | values: "domain", "url" |
  | `rules[].value` | string | Required | |
  | `rules[].identity` | string | Required | |
  | `rules[].source` | string | Required | values: "manual", "import", "agent\_proposal" |
  | `rules[].status` | string | Required | Resource lifecycle status. values: "proposed", "active", "rejected" |
  | `rules[].comments` | array | Required | maxItems: 8 |
  | `rules[].revision` | integer | Required | Optimistic concurrency revision; supply it as expectedRevision on the next write. maximum: 9007199254740991; exclusiveMinimum: 0 |
  | `rules[].created_by` | string | Required | minLength: 1; maxLength: 200 |
  | `rules[].approved_by` | string / null | Required | |
  | `rules[].created_at` | string | Required | UTC timestamp when the record was created. |
  | `rules[].updated_at` | string | Required | UTC timestamp of the last record update. |
  | `rules[].covered_links` | integer | Optional | minimum: 0; maximum: 9007199254740991 |
  | `rules[].created_by_label` | string | Optional | values: "you", "imported", "agent", "owner", "admin", "member", "viewer", "former member" |
  | `created` | integer | Required | True when this request created the record; false when an existing record was reused. minimum: 0; maximum: 9007199254740991 |
  | `unchanged` | integer | Required | minimum: 0; maximum: 9007199254740991 |
  | `revision` | integer | Required | Optimistic concurrency revision; supply it as expectedRevision on the next write. minimum: 0; maximum: 9007199254740991 |
  | `approved` | boolean | Optional | |
  | `counts` | object | Optional | additional fields rejected |
  | `counts.sites` | integer | Required | minimum: 0; maximum: 9007199254740991 |
  | `counts.pages` | integer | Required | minimum: 0; maximum: 9007199254740991 |
  | `counts.already_listed` | integer | Required | minimum: 0; maximum: 9007199254740991 |
  | `warnings` | array | Optional | maxItems: 50 |
  | `failed` | array | Optional | |
  | `failed[].ruleId` | string | Required | Identifier returned by the related operation. minLength: 1; maxLength: 200 |
  | `failed[].code` | string | Required | |
</Accordion>

[Download input schema](/schemas/review_disavow_rules.input.json) · [Download output schema](/schemas/review_disavow_rules.output.json)

## Errors and retries

This write is annotated idempotent without a caller-supplied idempotency key. Reconcile saved state after an uncertain response, then use the same inputs for the same intended operation. Do not add an unsupported key. Operation-specific errors include `INVALID_DISAVOW_INPUT`, `DISAVOW_CHECK_CAPACITY`, `HUMAN_ADMIN_REQUIRED`, `DISAVOW_NOT_READY`, `DISAVOW_REVISION_CONFLICT`, `DISAVOW_RULE_NOT_FOUND`, `DISAVOW_RULE_CONFLICT`, `DISAVOW_SCOPE_CLOSED`, `DISAVOW_CAPACITY`, `DISAVOW_EXPORT_CAPACITY`, `DISAVOW_IMPORT_TOO_LARGE`, `DISAVOW_RULE_TOO_LARGE`, `INVALID_CURSOR`.

See [error recovery](/reference/errors) for status, scope, cooldown, cursor and retry handling. Unknown observations are result data and do not establish loss.

## HTTP resource routes

This operation has no separate resource alias. Use its generic command route in a matching environment.

## Continue

[list\_disavow\_rules](/reference/commands/list_disavow_rules) · [export\_disavow\_rules](/reference/commands/export_disavow_rules)

Follow the [related workflow](/guides/monitor-changes), inspect [capability status](/capability-status), or return to the [command index](/reference/index).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.