> ## 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.

# Get domain mix report

> Requires a saved competitor set; frozen inventories are optional comparisons.

`get_domain_mix_report`

Requires a saved competitor set; frozen inventories are optional comparisons. Works without new discovery admission. Render the referring-domain mix over supplied discovery lanes: generic and niche splits from the labels your imported rows carry, ours against each selected frozen inventory, with label coverage and per-lane counts. Lanes are request data and never stored. One to twenty lanes, up to 2000 rows each. Never buys discovery or checks links.

<Note>Hosted MCP registration verified. These schemas describe the development contract; confirm supported inputs with tools/list. Generic CLI/HTTP calls require a matching development server. Configure LINKTRAIL\_API\_URL; production does not expose these command routes.</Note>

| Access           | Behavior         |
| ---------------- | ---------------- |
| `discovery:read` | Reads saved data |

Reading saved data does not start a verification job. Mutations can change saved records or access; the effects below apply.

## 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": "get_domain_mix_report",
      "arguments": {
        "setId": "set_example",
        "lanes": [
          {
            "lane": "owned-export",
            "rows": [
              {
                "source_url": "https://publisher.example.com/resources",
                "class": "niche"
              }
            ]
          }
        ]
      }
    }
  }
  ```

  ```bash CLI theme={null}
  linktrail call get_domain_mix_report --args '{"setId":"set_example","lanes":[{"lane":"owned-export","rows":[{"source_url":"https://publisher.example.com/resources","class":"niche"}]}]}'
  ```

  ```bash HTTP theme={null}
  curl "$LINKTRAIL_API_URL/v1/commands/get_domain_mix_report" \
    -H "Authorization: Bearer $LINKTRAIL_API_KEY" \
    -H 'Content-Type: application/json' \
    --data '{"setId":"set_example","lanes":[{"lane":"owned-export","rows":[{"source_url":"https://publisher.example.com/resources","class":"niche"}]}]}'
  ```
</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}
{
  "metadata": {
    "v": 1,
    "kind": "referring_domain_mix",
    "set_id": "set_example",
    "set_revision": 1,
    "comparison": null,
    "ranking_scope": "selected_inventory_datasets",
    "whole_web_coverage": false,
    "absence_claim": "not_supported",
    "label_source": "imported_row_labels",
    "labels": [
      "generic",
      "niche"
    ],
    "lanes": [
      "owned-export"
    ],
    "selected_inventory_ids": [],
    "coverage_by_inventory": {},
    "unselected_member_ids": [
      "cm_competitor",
      "cm_customer"
    ],
    "competitor_side_available": false,
    "competitor_side_state": "no_inventories_selected",
    "report_hash": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
    "limit": 25
  },
  "ours": [
    {
      "lane": "owned-export",
      "rows_read": 1,
      "referring_domains": 1,
      "classes": {
        "unlabelled": 0,
        "generic": 0,
        "niche": 1
      },
      "labelled_domains": 1,
      "label_coverage": 1,
      "generic_share_of_labelled": 0,
      "niche_share_of_labelled": 1,
      "generic_niche_ratio": 0,
      "top_domains": [
        {
          "host": "publisher.example.com",
          "class": "niche",
          "referring_pages": 1,
          "rank_within_dataset": 1
        }
      ],
      "domain_classes": {
        "publisher.example.com": "niche"
      }
    }
  ],
  "members": []
}
```

## 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                                                                                                           |
| --------------------------- | ------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `setId`                     | string        | Required | Identifier of the set returned by its create or list operation. minLength: 1; maxLength: 200                                      |
| `revision`                  | integer       | Optional | Immutable set revision to read or compare. minimum: 1; maximum: 9007199254740990                                                  |
| `inventoryIds`              | array         | Optional | Frozen inventory IDs to compare; records must belong to the approved set. maxItems: 11; default: \[]                              |
| `lanes`                     | array         | Required | Evidence lanes included in the domain-mix report. minItems: 1; maxItems: 20                                                       |
| `lanes[].lane`              | string        | Required | See the typed schema and response example for this field. minLength: 1; maxLength: 200                                            |
| `lanes[].rows`              | array         | Required | See the typed schema and response example for this field. minItems: 1; maxItems: 2000                                             |
| `lanes[].rows[].source_url` | string        | Required | See the typed schema and response example for this field. minLength: 1; maxLength: 2048                                           |
| `lanes[].rows[].class`      | string / null | Optional | See the typed schema and response example for this field.                                                                         |
| `lanes[].rows[].added`      | string / null | Optional | See the typed schema and response example for this field.                                                                         |
| `limit`                     | integer       | Optional | Maximum rows in this page or bounded report; subject to the schema maximum. minimum: 1; maximum: 200; default: 25                 |
| `maxRetrievalSkewMs`        | integer       | Optional | Maximum permitted difference between inventory retrieval times, in milliseconds. minimum: 0; maximum: 86400000; default: 86400000 |

### Validation and omitted values

Omitting revision reads the current competitor set. Omitted inventoryIds compares only supplied lanes; no competitor inventory is inferred.

Lane rows remain request data and are not stored. Missing class labels stay unlabelled; missing added dates remain missing.

### Defaults when omitted

| Field                | Default    |
| -------------------- | ---------- |
| `inventoryIds`       | `[]`       |
| `limit`              | `25`       |
| `maxRetrievalSkewMs` | `86400000` |

## 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.

| Field                                         | Type          | Presence | Meaning and constraints                                                                     |
| --------------------------------------------- | ------------- | -------- | ------------------------------------------------------------------------------------------- |
| `metadata`                                    | object        | Required | metadata recorded for this result.                                                          |
| `metadata.v`                                  | number        | Required | v recorded for this result.                                                                 |
| `metadata.kind`                               | string        | Required | kind recorded for this result.                                                              |
| `metadata.set_id`                             | string / null | Required | set id recorded for this result.                                                            |
| `metadata.set_revision`                       | number / null | Required | set revision recorded for this result.                                                      |
| `metadata.comparison`                         | object / null | Required | comparison recorded for this result.                                                        |
| `metadata.comparison.mode`                    | string        | Required | mode recorded for this result.                                                              |
| `metadata.comparison.reasons`                 | array         | Required | reasons recorded for this result.                                                           |
| `metadata.comparison.absence_claim`           | string        | Required | not\_supported: missing dataset rows cannot prove link absence. must equal "not\_supported" |
| `metadata.ranking_scope`                      | string        | Required | ranking scope recorded for this result.                                                     |
| `metadata.whole_web_coverage`                 | boolean       | Required | False: these results do not measure the whole web. must equal false                         |
| `metadata.absence_claim`                      | string        | Required | not\_supported: missing dataset rows cannot prove link absence. must equal "not\_supported" |
| `metadata.label_source`                       | string        | Required | label source recorded for this result.                                                      |
| `metadata.labels`                             | array         | Required | labels recorded for this result.                                                            |
| `metadata.lanes`                              | array         | Required | lanes recorded for this result.                                                             |
| `metadata.selected_inventory_ids`             | array         | Required | selected inventory ids recorded for this result.                                            |
| `metadata.coverage_by_inventory`              | object        | Required | coverage by inventory recorded for this result.                                             |
| `metadata.unselected_member_ids`              | array         | Required | unselected member ids recorded for this result.                                             |
| `metadata.competitor_side_available`          | boolean       | Required | competitor side available recorded for this result.                                         |
| `metadata.competitor_side_state`              | string        | Required | competitor side state recorded for this result.                                             |
| `metadata.report_hash`                        | string        | Required | report hash recorded for this result.                                                       |
| `metadata.limit`                              | number        | Required | limit recorded for this result.                                                             |
| `ours`                                        | array         | Required | ours recorded for this result.                                                              |
| `ours[].lane`                                 | string        | Required | lane recorded for this result.                                                              |
| `ours[].rows_read`                            | number        | Required | rows read recorded for this result.                                                         |
| `ours[].referring_domains`                    | number        | Required | referring domains recorded for this result.                                                 |
| `ours[].classes`                              | object        | Required | classes recorded for this result.                                                           |
| `ours[].labelled_domains`                     | number        | Required | labelled domains recorded for this result.                                                  |
| `ours[].label_coverage`                       | number / null | Required | label coverage recorded for this result.                                                    |
| `ours[].generic_share_of_labelled`            | number / null | Required | generic share of labelled recorded for this result.                                         |
| `ours[].niche_share_of_labelled`              | number / null | Required | niche share of labelled recorded for this result.                                           |
| `ours[].generic_niche_ratio`                  | number / null | Required | generic niche ratio recorded for this result.                                               |
| `ours[].top_domains`                          | array         | Required | top domains recorded for this result.                                                       |
| `ours[].top_domains[].host`                   | string        | Required | host recorded for this result.                                                              |
| `ours[].top_domains[].class`                  | string        | Required | class recorded for this result.                                                             |
| `ours[].top_domains[].referring_pages`        | number        | Required | referring pages recorded for this result.                                                   |
| `ours[].top_domains[].rank_within_dataset`    | number        | Required | rank within dataset recorded for this result.                                               |
| `ours[].domain_classes`                       | object        | Required | domain classes recorded for this result.                                                    |
| `members`                                     | array         | Required | members recorded for this result.                                                           |
| `members[].member_id`                         | string        | Required | member id recorded for this result.                                                         |
| `members[].member_role`                       | string        | Required | member role recorded for this result.                                                       |
| `members[].inventory_id`                      | string        | Required | inventory id recorded for this result.                                                      |
| `members[].coverage`                          | string        | Required | Dataset scope and completeness, including limits on what these results establish.           |
| `members[].referring_domains`                 | number        | Required | referring domains recorded for this result.                                                 |
| `members[].classes`                           | object        | Required | classes recorded for this result.                                                           |
| `members[].labelled_domains`                  | number        | Required | labelled domains recorded for this result.                                                  |
| `members[].label_coverage`                    | number / null | Required | label coverage recorded for this result.                                                    |
| `members[].generic_share_of_labelled`         | number / null | Required | generic share of labelled recorded for this result.                                         |
| `members[].niche_share_of_labelled`           | number / null | Required | niche share of labelled recorded for this result.                                           |
| `members[].generic_niche_ratio`               | number / null | Required | generic niche ratio recorded for this result.                                               |
| `members[].top_domains`                       | array         | Required | top domains recorded for this result.                                                       |
| `members[].top_domains[].host`                | string        | Required | host recorded for this result.                                                              |
| `members[].top_domains[].class`               | string        | Required | class recorded for this result.                                                             |
| `members[].top_domains[].referring_pages`     | number        | Required | referring pages recorded for this result.                                                   |
| `members[].top_domains[].rank_within_dataset` | number        | Required | rank within dataset recorded for this result.                                               |
| `members[].domain_classes`                    | object        | Required | domain classes recorded for this result.                                                    |

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

## Errors and retries

The command is annotated idempotent. Reuse an accepted idempotency key when the input provides one; changing the payload under a reused key can conflict.

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

These existing resource routes share the operation’s domain behavior. Their parameter placement, status and response envelope can differ from generic invocation. See [HTTP route details](/reference/http/routes).

| Method and route                              | Success | Details                                       |
| --------------------------------------------- | ------- | --------------------------------------------- |
| `POST /v1/competitor-sets/{setId}/domain-mix` | 200     | Remaining arguments go in a JSON object body. |

## Continue

[get\_competitor\_set](/reference/commands/get_competitor_set)

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