← All MCP tools

MCP tool

check_identity_optouts

Execute the governed data.identity.optout action for an existing consented cohort. Live execution sends stored identifiers to EUID; it requires supplier privacy authority and the exact cohort and connection revisions from get_identity_cohort. Use null expectedConnectionRevision for sandbox cohorts. No identities are accepted as tool input or returned. A human must approve the exact metadata-bound action. Retain the same UUID and revision inputs after a timeout; recorded requests are never automatically reissued. If the attempt is uncertain, hand it to a human operator and poll status. Mapping maintenance does not deliver a DSP audience.

Input

Pass fields from this schema as the tool arguments. Runtime ownership, product scope and readiness checks still apply.

Input JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cohortId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "expectedRevision": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "expectedConnectionRevision": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "idempotencyKey": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "agentStepId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "pending execute-step id that consumed the exact approved action"
    },
    "expectedActionDigest": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$",
      "description": "SHA-256 digest returned for the exact approved action"
    }
  },
  "required": [
    "cohortId",
    "expectedRevision",
    "expectedConnectionRevision",
    "idempotencyKey",
    "agentStepId",
    "expectedActionDigest"
  ],
  "additionalProperties": false
}

REST mapping and authority

The tool wraps this REST endpoint. The mapping identifies path/query/body transformations and approval or idempotency headers.

Request contract
{
  "method": "POST",
  "path": "/api/v1/identity/cohorts/{cohortId}/optout",
  "pathFields": [
    "cohortId"
  ],
  "pathSchema": {
    "type": "object",
    "properties": {
      "cohortId": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "additionalProperties": false,
    "required": [
      "cohortId"
    ]
  },
  "pathEncoding": "encodeURIComponent for each path field",
  "governedAction": "data.identity.optout",
  "headers": {
    "x-chorus-agent-step-id": "agentStepId",
    "x-chorus-agent-action-digest": "expectedActionDigest",
    "idempotency-key": "idempotencyKey"
  },
  "bodySchema": {
    "type": "object",
    "properties": {
      "expectedRevision": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "expectedConnectionRevision": {
        "anyOf": [
          {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          {
            "type": "null"
          }
        ]
      }
    },
    "additionalProperties": false,
    "required": [
      "expectedRevision",
      "expectedConnectionRevision"
    ]
  },
  "responseMapping": "REST JSON is returned as MCP structuredContent and a compatibility text block; privacy-sensitive tools validate their output schema."
}

Output

This is the registered MCP output envelope. Nested fields are only modeled where the schema explicitly defines them.

Output JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cohort": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "adapterKey": {
          "type": "string",
          "const": "euid"
        },
        "mode": {
          "type": "string",
          "enum": [
            "sandbox",
            "live"
          ]
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "deleted",
            "expired"
          ]
        },
        "revision": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "evidenceSource": {
          "type": "string",
          "enum": [
            "not-observed",
            "provider-reported",
            "modeled"
          ]
        },
        "consent": {
          "type": "object",
          "properties": {
            "lawfulBasis": {
              "type": "string",
              "const": "consent"
            },
            "purpose": {
              "type": "string",
              "const": "euid-advertising-and-measurement"
            },
            "sourceReference": {
              "type": "string"
            },
            "noticeVersion": {
              "type": "string"
            },
            "obtainedAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "expiresAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "includesEuidSharing": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "lawfulBasis",
            "purpose",
            "sourceReference",
            "noticeVersion",
            "obtainedAt",
            "expiresAt",
            "includesEuidSharing"
          ],
          "additionalProperties": false
        },
        "consentEvidence": {
          "type": "string",
          "const": "operator-asserted"
        },
        "retainUntil": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "importedCount": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "summary": {
          "type": "object",
          "properties": {
            "pending": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "fresh": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "refreshDue": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "optOutCheckDue": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "optedOut": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "unmapped": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "expired": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "pending",
            "fresh",
            "refreshDue",
            "optOutCheckDue",
            "optedOut",
            "unmapped",
            "expired"
          ],
          "additionalProperties": false
        },
        "nextRefreshAt": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ]
        },
        "nextOptOutCheckAt": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ]
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "deletedAt": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ]
        },
        "audienceDelivery": {
          "type": "string",
          "const": "unavailable"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "name",
        "adapterKey",
        "mode",
        "status",
        "revision",
        "evidenceSource",
        "consent",
        "consentEvidence",
        "retainUntil",
        "importedCount",
        "summary",
        "nextRefreshAt",
        "nextOptOutCheckAt",
        "createdAt",
        "updatedAt",
        "deletedAt",
        "audienceDelivery",
        "note"
      ],
      "additionalProperties": false
    },
    "connection": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "sandbox",
            "live"
          ]
        },
        "configurationRevision": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "mode",
        "configurationRevision"
      ],
      "additionalProperties": false
    },
    "attempts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "operation": {
            "type": "string",
            "enum": [
              "map",
              "optout"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "in-flight",
              "succeeded",
              "failed",
              "discarded",
              "reconciliation-required"
            ]
          },
          "cohortRevision": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "startedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "settledAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "errorCode": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "operation",
          "status",
          "cohortRevision",
          "startedAt",
          "settledAt",
          "errorCode"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "cohort",
    "connection",
    "attempts"
  ],
  "additionalProperties": false
}

Safety annotations

MCP annotations
{
  "readOnlyHint": false,
  "destructiveHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}

Annotations help a client present the tool. The API independently enforces authorization and exact action approvals. Error and retry guidance →

check_identity_optouts | AdBuyMCP docs