{
  "components": {
    "schemas": {
      "AccessConfig": {
        "properties": {
          "autoSignupEnabled": {
            "default": true,
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ActionRule": {
        "description": "Base class of all Action Rules",
        "discriminator": {
          "mapping": {
            "event-rule": "#/components/schemas/EventActionRule",
            "job-rule": "#/components/schemas/JobActionRule"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/EventActionRule"
          },
          {
            "$ref": "#/components/schemas/JobActionRule"
          }
        ],
        "type": "object"
      },
      "ActivityLogsSearch": {
        "description": "Activity logs search criteria",
        "properties": {
          "endTime": {
            "description": "End of time range filter. Must be a valid ISO timestamp in UTC.",
            "example": "2024-01-01T23:59:59Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 100,
            "description": "Maximum number of results to return",
            "example": 100,
            "format": "int32",
            "maximum": 1000,
            "minimum": 1,
            "type": "integer"
          },
          "logTypes": {
            "default": [],
            "description": "Optional filter by log types. If null or empty, matches all log types.",
            "example": [
              "INTEGRATION_IMPORT",
              "JOB_EXECUTION"
            ],
            "items": {
              "description": "Optional filter by log types. If null or empty, matches all log types.",
              "enum": [
                "INTEGRATION_IMPORT",
                "INTEGRATION_STATISTICS",
                "JOB_EXECUTION",
                "USER_ACTIVITY",
                "SECURITY_EVENT"
              ],
              "example": "[\"INTEGRATION_IMPORT\",\"JOB_EXECUTION\"]",
              "type": "string"
            },
            "type": "array"
          },
          "offset": {
            "description": "Number of results to skip for pagination",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "resourceFilters": {
            "default": [],
            "description": "Optional resource filters. Multiple filters use OR logic. If null or empty, matches all resources the user has access to (requires system logs permission if no filters specified).",
            "example": [
              {
                "resourceId": "int-123",
                "resourceType": "INTEGRATION"
              },
              {
                "resourceId": "job-456",
                "resourceType": "JOB"
              }
            ],
            "items": {
              "$ref": "#/components/schemas/ResourceFilter"
            },
            "type": "array"
          },
          "searchQuery": {
            "description": "Optional full-text search query for message content. Uses PostgreSQL\u0027s text search capabilities.",
            "example": "failed import",
            "type": "string"
          },
          "startTime": {
            "description": "Start of time range filter. Must be a valid ISO timestamp in UTC.",
            "example": "2024-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "statuses": {
            "default": [],
            "description": "Optional filter by log statuses. If null or empty, matches all log statuses.",
            "example": [
              "INFO",
              "ERROR"
            ],
            "items": {
              "description": "Optional filter by log statuses. If null or empty, matches all log statuses.",
              "enum": [
                "INFO",
                "WARNING",
                "ERROR"
              ],
              "example": "[\"INFO\",\"ERROR\"]",
              "type": "string"
            },
            "type": "array"
          },
          "userIds": {
            "default": [],
            "description": "Optional filter by user IDs who triggered the activity. If null or empty, matches all users.",
            "example": [
              "user123",
              "user456"
            ],
            "items": {
              "description": "Optional filter by user IDs who triggered the activity. If null or empty, matches all users.",
              "example": "[\"user123\",\"user456\"]",
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "AddToListAttributeAction": {
        "properties": {
          "order": {
            "default": 0,
            "description": "Action order. Lower is applied first.",
            "format": "int32",
            "type": "integer"
          },
          "targetPath": {
            "description": "The path to the list to add to.",
            "example": "applications",
            "type": "string"
          },
          "type": {
            "description": "Add values to a list in event attributes. If the target list is not present, it is created. If the target is present and not a list, it\u0027s a no-op.",
            "enum": [
              "attribute-add-action"
            ],
            "type": "string"
          },
          "value": {
            "$ref": "#/components/schemas/Any"
          }
        },
        "required": [
          "targetPath",
          "type",
          "value"
        ],
        "type": "object"
      },
      "AgentAnalyticsDashboardSummary": {
        "properties": {
          "dataQuality": {
            "$ref": "#/components/schemas/DataQuality"
          },
          "emitters": {
            "items": {
              "$ref": "#/components/schemas/Breakdown"
            },
            "type": "array"
          },
          "intentToolMatrix": {
            "items": {
              "$ref": "#/components/schemas/MatrixCell"
            },
            "type": "array"
          },
          "intentUsage": {
            "items": {
              "$ref": "#/components/schemas/Breakdown"
            },
            "type": "array"
          },
          "models": {
            "items": {
              "$ref": "#/components/schemas/Breakdown"
            },
            "type": "array"
          },
          "topIntents": {
            "items": {
              "$ref": "#/components/schemas/Intent"
            },
            "type": "array"
          },
          "topTools": {
            "items": {
              "$ref": "#/components/schemas/Tool"
            },
            "type": "array"
          },
          "totals": {
            "$ref": "#/components/schemas/Totals"
          }
        },
        "type": "object"
      },
      "AgentConfig": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/AgentConfigPayload"
          },
          "state": {
            "enum": [
              "ACTIVE",
              "PAUSED",
              "DELETED"
            ],
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "name",
          "organizationId",
          "payload",
          "updatedAt"
        ],
        "type": "object"
      },
      "AgentConfigCreate": {
        "properties": {
          "agentMaxTokens": {
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "automaticSignalMaxQueueAgeMinutes": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "changeApprovalMode": {
            "enum": [
              "REQUIRE_APPROVAL",
              "AUTO_APPLY"
            ],
            "type": "string"
          },
          "concurrencyLimitPolicy": {
            "enum": [
              "QUEUE",
              "DISCARD"
            ],
            "type": "string"
          },
          "description": {
            "description": "What the agent handles, shown to other agents when they list the agents; null for none.",
            "maxLength": 500,
            "minLength": 0,
            "type": "string"
          },
          "enabledMcpIntegrations": {
            "items": {
              "$ref": "#/components/schemas/AgentMcpIntegrations"
            },
            "type": "array"
          },
          "enabledSkills": {
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "minItems": 0,
            "type": "array"
          },
          "enabledTools": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "issueHandoffMode": {
            "description": "Whether the agent may put issues in Ready; null falls back to REQUIRE_TRIAGE.",
            "enum": [
              "REQUIRE_TRIAGE",
              "ALLOW_READY"
            ],
            "type": "string"
          },
          "issuePickup": {
            "$ref": "#/components/schemas/AgentIssuePickup"
          },
          "maxConcurrentInvestigations": {
            "default": 3,
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxTokens": {
            "default": 3000000,
            "format": "int32",
            "maximum": 100000000,
            "minimum": 1,
            "type": "integer"
          },
          "maxTurns": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "memoryConfiguration": {
            "$ref": "#/components/schemas/AgentMemoryConfiguration"
          },
          "modelConfiguration": {
            "$ref": "#/components/schemas/ModelConfiguration"
          },
          "name": {
            "type": "string"
          },
          "serviceAccountId": {
            "type": "string"
          },
          "systemPrompt": {
            "type": "string"
          },
          "worksOnIssues": {
            "description": "Whether the agent files and works on issues; null means true.",
            "type": "boolean"
          }
        },
        "required": [
          "changeApprovalMode",
          "enabledMcpIntegrations",
          "enabledSkills",
          "enabledTools",
          "modelConfiguration",
          "name",
          "serviceAccountId",
          "systemPrompt"
        ],
        "type": "object"
      },
      "AgentConfigPayload": {
        "properties": {
          "agentMaxTokens": {
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "automaticSignalMaxQueueAgeMinutes": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "changeApprovalMode": {
            "enum": [
              "REQUIRE_APPROVAL",
              "AUTO_APPLY"
            ],
            "type": "string"
          },
          "concurrencyLimitPolicy": {
            "enum": [
              "QUEUE",
              "DISCARD"
            ],
            "type": "string"
          },
          "description": {
            "description": "What the agent handles, shown to other agents when they list the agents; null for none.",
            "maxLength": 500,
            "minLength": 0,
            "type": "string"
          },
          "enabledMcpIntegrations": {
            "items": {
              "$ref": "#/components/schemas/AgentMcpIntegrations"
            },
            "type": "array"
          },
          "enabledSkills": {
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "minItems": 0,
            "type": "array"
          },
          "enabledTools": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "issueHandoffMode": {
            "description": "Whether the agent may put issues in Ready; null falls back to REQUIRE_TRIAGE.",
            "enum": [
              "REQUIRE_TRIAGE",
              "ALLOW_READY"
            ],
            "type": "string"
          },
          "issuePickup": {
            "$ref": "#/components/schemas/AgentIssuePickup"
          },
          "maxConcurrentInvestigations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxTokens": {
            "format": "int32",
            "maximum": 100000000,
            "minimum": 1,
            "type": "integer"
          },
          "maxTurns": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "memoryConfiguration": {
            "$ref": "#/components/schemas/AgentMemoryConfiguration"
          },
          "modelConfiguration": {
            "$ref": "#/components/schemas/ModelConfiguration"
          },
          "serviceAccountId": {
            "type": "string"
          },
          "systemPrompt": {
            "type": "string"
          },
          "worksOnIssues": {
            "description": "Whether the agent files and works on issues; every agent reads them.",
            "type": "boolean"
          }
        },
        "required": [
          "changeApprovalMode",
          "enabledMcpIntegrations",
          "enabledSkills",
          "enabledTools",
          "modelConfiguration",
          "serviceAccountId",
          "systemPrompt"
        ],
        "type": "object"
      },
      "AgentConfigUpdate": {
        "properties": {
          "agentMaxTokens": {
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "automaticSignalMaxQueueAgeMinutes": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "changeApprovalMode": {
            "enum": [
              "REQUIRE_APPROVAL",
              "AUTO_APPLY"
            ],
            "type": "string"
          },
          "concurrencyLimitPolicy": {
            "enum": [
              "QUEUE",
              "DISCARD"
            ],
            "type": "string"
          },
          "description": {
            "description": "What the agent handles, shown to other agents; required, like worksOnIssues, and empty for none.",
            "maxLength": 500,
            "minLength": 0,
            "type": "string"
          },
          "enabledMcpIntegrations": {
            "items": {
              "$ref": "#/components/schemas/AgentMcpIntegrations"
            },
            "type": "array"
          },
          "enabledSkills": {
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "minItems": 0,
            "type": "array"
          },
          "enabledTools": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "issueHandoffMode": {
            "description": "Whether the agent may put issues in Ready; required, like worksOnIssues.",
            "enum": [
              "REQUIRE_TRIAGE",
              "ALLOW_READY"
            ],
            "type": "string"
          },
          "issuePickup": {
            "$ref": "#/components/schemas/AgentIssuePickup"
          },
          "maxConcurrentInvestigations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxTokens": {
            "format": "int32",
            "maximum": 100000000,
            "minimum": 1,
            "type": "integer"
          },
          "maxTurns": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "memoryConfiguration": {
            "$ref": "#/components/schemas/AgentMemoryConfiguration"
          },
          "modelConfiguration": {
            "$ref": "#/components/schemas/ModelConfiguration"
          },
          "name": {
            "type": "string"
          },
          "serviceAccountId": {
            "type": "string"
          },
          "systemPrompt": {
            "type": "string"
          },
          "version": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "worksOnIssues": {
            "description": "Whether the agent files and works on issues; required, since an update replaces the agent and an omitted switch would turn issue work off unnoticed.",
            "type": "boolean"
          }
        },
        "required": [
          "changeApprovalMode",
          "description",
          "enabledMcpIntegrations",
          "enabledSkills",
          "enabledTools",
          "issueHandoffMode",
          "issuePickup",
          "modelConfiguration",
          "name",
          "serviceAccountId",
          "systemPrompt",
          "worksOnIssues"
        ],
        "type": "object"
      },
      "AgentDetail": {
        "properties": {
          "agent": {
            "$ref": "#/components/schemas/AgentConfig"
          },
          "metrics": {
            "$ref": "#/components/schemas/AgentInvestigationMetrics"
          }
        },
        "type": "object"
      },
      "AgentInvestigationMetrics": {
        "properties": {
          "avgDurationMs": {
            "format": "int64",
            "type": "integer"
          },
          "completed": {
            "format": "int32",
            "type": "integer"
          },
          "failed": {
            "format": "int32",
            "type": "integer"
          },
          "total": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "AgentIssuePickup": {
        "description": "Whether an agent picks up Ready issues on its own, and which: the board\u0027s own filters, applied to Ready issues nobody is working on. The server checks the filters\u0027 limits and teams when the agent is saved.",
        "properties": {
          "enabled": {
            "description": "Whether the dispatcher starts the agent on Ready issues; it also needs Works on issues.",
            "type": "boolean"
          },
          "entities": {
            "additionalProperties": {
              "description": "Issues with every one of these entity keys, each with any of its values, as the issue search\u0027s entity filter; null or empty for any.",
              "items": {
                "description": "Issues with every one of these entity keys, each with any of its values, as the issue search\u0027s entity filter; null or empty for any.",
                "type": "string"
              },
              "type": "array"
            },
            "description": "Issues with every one of these entity keys, each with any of its values, as the issue search\u0027s entity filter; null or empty for any.",
            "type": "object"
          },
          "labels": {
            "description": "Issues carrying every one of these labels; null or empty for any.",
            "items": {
              "description": "Issues carrying every one of these labels; null or empty for any.",
              "type": "string"
            },
            "type": "array"
          },
          "maxRuns": {
            "description": "Pickup starts no run while the agent has this many runs on issues, queued or running, handed or picked up; people\u0027s handoffs aren\u0027t held to it, and pickups use the agent\u0027s run slots. Null for 1. At most the agent\u0027s concurrency limit, and below it when the agent discards work at its limit, so a slot stays free for alerts and handoffs.",
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "priority": {
            "description": "`P0` to `P3`: issues of this priority or more urgent; null for any.",
            "pattern": "P[0-3]",
            "type": "string"
          },
          "teamIds": {
            "description": "Issues on any of these teams; null or empty for any the agent can reach.",
            "items": {
              "description": "Issues on any of these teams; null or empty for any the agent can reach.",
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "AgentIssueScopes": {
        "description": "Whose issues an agent reads and whose it can work on, from its service account\u0027s issue scopes.",
        "properties": {
          "reads": {
            "$ref": "#/components/schemas/IssueScopeView"
          },
          "worksOn": {
            "$ref": "#/components/schemas/IssueScopeView"
          }
        },
        "type": "object"
      },
      "AgentLogProcessor": {
        "description": "Processes native agent-harness OTel logs into canonical agent LogEvents.",
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Processes native agent-harness OTel logs.",
            "enum": [
              "agent-log-processor"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "AgentMaxTokensStatus": {
        "properties": {
          "admits": {
            "type": "boolean"
          },
          "agentLimit": {
            "format": "int64",
            "type": "integer"
          },
          "agentReserved": {
            "format": "int64",
            "type": "integer"
          },
          "agentUsage": {
            "format": "int64",
            "type": "integer"
          },
          "blockedBy": {
            "enum": [
              "AGENT_MAX_TOKENS",
              "INTEGRATION_MAX_TOKENS"
            ],
            "type": "string"
          },
          "integrationLimit": {
            "format": "int64",
            "type": "integer"
          },
          "integrationReserved": {
            "format": "int64",
            "type": "integer"
          },
          "integrationUsage": {
            "format": "int64",
            "type": "integer"
          },
          "investigationsQueued": {
            "format": "int32",
            "type": "integer"
          },
          "reservation": {
            "format": "int64",
            "type": "integer"
          },
          "windowResetsAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AgentMcpIntegrations": {
        "properties": {
          "allowedTools": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "integrationId": {
            "type": "string"
          }
        },
        "required": [
          "integrationId"
        ],
        "type": "object"
      },
      "AgentMemoryConfiguration": {
        "properties": {
          "digest": {
            "$ref": "#/components/schemas/AgentMemoryHistoryDigest"
          },
          "embeddingIntegrationId": {
            "type": "string"
          },
          "embeddingModel": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "policy": {
            "$ref": "#/components/schemas/AgentMemoryPolicy"
          },
          "searchTool": {
            "deprecated": true,
            "description": "Ignored: every agent can search memories.",
            "type": "boolean"
          },
          "signalTagMappings": {
            "additionalProperties": {
              "additionalProperties": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "type": "object"
            },
            "type": "object"
          },
          "vectorIndexIntegrationId": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AgentMemoryHistoryDigest": {
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "maxItems": {
            "format": "int32",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "windowDays": {
            "format": "int32",
            "maximum": 90,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "AgentMemoryPolicy": {
        "properties": {
          "guidance": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string"
          },
          "maxSearchesPerInvestigation": {
            "format": "int32",
            "maximum": 10,
            "minimum": 0,
            "type": "integer"
          },
          "recordPolicy": {
            "enum": [
              "ALWAYS",
              "NON_BENIGN_ONLY",
              "REUSABLE_ONLY"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "AgentPipelineSubscription": {
        "properties": {
          "jobId": {
            "type": "string"
          },
          "pausedAt": {
            "format": "date-time",
            "type": "string"
          },
          "subscribedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "jobId",
          "subscribedAt"
        ],
        "type": "object"
      },
      "AgentRecentHealth": {
        "properties": {
          "completed": {
            "format": "int32",
            "type": "integer"
          },
          "failed": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "AgentRosterEntry": {
        "description": "What one agent may learn about another: enough to decide whose memory is worth querying, or how to put an issue in Ready so that agent picks it up, and nothing more.",
        "properties": {
          "description": {
            "description": "What the agent handles, as its configuration says, or null when it says nothing.",
            "type": "string"
          },
          "id": {
            "description": "The agent\u0027s id, as named in a cross-agent memory search\u0027s `agentId`.",
            "type": "string"
          },
          "name": {
            "description": "The agent\u0027s human-readable name.",
            "type": "string"
          },
          "picksUp": {
            "$ref": "#/components/schemas/PickupFilters"
          }
        },
        "type": "object"
      },
      "AgentSessionAnalytics": {
        "properties": {
          "analysisJobId": {
            "type": "string"
          },
          "analysisVersion": {
            "type": "string"
          },
          "datasetId": {
            "type": "string"
          },
          "embeddingCapacity": {
            "format": "int32",
            "maximum": 64,
            "minimum": 1,
            "type": "integer"
          },
          "embeddingDimensions": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "embeddingModel": {
            "type": "string"
          },
          "end": {
            "format": "date-time",
            "type": "string"
          },
          "labelModel": {
            "type": "string"
          },
          "maxRetries": {
            "format": "int32",
            "maximum": 5,
            "minimum": 0,
            "type": "integer"
          },
          "maximumNamedGroups": {
            "format": "int32",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "modelIntegrationId": {
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "requestTimeout": {
            "description": "Duration in ISO-8601 format (e.g., \u0027PT20.345S\u0027 for 20.345 seconds). ",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "retainedAnalyticsMemoryLimitBytes": {
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "sessionCap": {
            "format": "int32",
            "maximum": 100000,
            "minimum": 1,
            "type": "integer"
          },
          "start": {
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "enum": [
              "agent-session-analytics"
            ],
            "type": "string"
          }
        },
        "required": [
          "analysisJobId",
          "analysisVersion",
          "datasetId",
          "embeddingModel",
          "end",
          "labelModel",
          "modelIntegrationId",
          "name",
          "query",
          "requestTimeout",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "AgentSessionAnalyticsDownload": {
        "properties": {
          "expiresAt": {
            "format": "date-time",
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AgentSessionAnalyticsJob": {
        "properties": {
          "analysisVersion": {
            "type": "string"
          },
          "analyzedSessionCount": {
            "format": "int64",
            "type": "integer"
          },
          "artifactByteSize": {
            "format": "int64",
            "type": "integer"
          },
          "clusteringAlgorithmVersion": {
            "type": "string"
          },
          "completedAt": {
            "format": "date-time",
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "dashboardSummary": {
            "$ref": "#/components/schemas/AgentAnalyticsDashboardSummary"
          },
          "datasetId": {
            "type": "string"
          },
          "downloadAvailable": {
            "type": "boolean"
          },
          "embeddingDimensions": {
            "format": "int32",
            "type": "integer"
          },
          "embeddingModel": {
            "type": "string"
          },
          "exportedSessionCount": {
            "format": "int64",
            "type": "integer"
          },
          "failureReason": {
            "type": "string"
          },
          "jobId": {
            "type": "string"
          },
          "jobState": {
            "enum": [
              "CREATED",
              "PENDING",
              "INFRA_UPDATE",
              "INFRA_UPDATE_WAIT",
              "VERIFYING",
              "WAITING",
              "RUNNING",
              "STOPPED",
              "FINISHED",
              "FAILED",
              "CANCELLED",
              "DELETED",
              "UPDATING",
              "STARTING",
              "RESTARTING",
              "STOPPING",
              "ROLLING_BACK",
              "DELETING"
            ],
            "type": "string"
          },
          "labelModel": {
            "type": "string"
          },
          "matchingSessionCount": {
            "format": "int64",
            "type": "integer"
          },
          "miscellaneousSessionCount": {
            "format": "int32",
            "type": "integer"
          },
          "namedGroupCount": {
            "format": "int32",
            "type": "integer"
          },
          "request": {
            "$ref": "#/components/schemas/CreateAgentSessionAnalyticsJob"
          },
          "resultWasCapped": {
            "type": "boolean"
          },
          "state": {
            "enum": [
              "RUNNING",
              "COMPLETED",
              "FAILED",
              "CANCELLED"
            ],
            "type": "string"
          },
          "warningCount": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "AgentSessionAnalyticsPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AgentSessionAnalyticsJob"
            },
            "type": "array"
          },
          "limit": {
            "format": "int32",
            "type": "integer"
          },
          "offset": {
            "format": "int32",
            "type": "integer"
          },
          "total": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "AgentSessionAnalyticsTemplateInput": {
        "description": "Schema for the agent-session analytics job graph.",
        "properties": {
          "analyticsJobId": {
            "type": "string"
          },
          "artifactPrefix": {
            "type": "string"
          },
          "datasetId": {
            "type": "string"
          },
          "embeddingCapacity": {
            "default": 32,
            "format": "int32",
            "maximum": 64,
            "minimum": 1,
            "type": "integer"
          },
          "embeddingDimensions": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "embeddingModel": {
            "type": "string"
          },
          "end": {
            "format": "date-time",
            "type": "string"
          },
          "labelModel": {
            "type": "string"
          },
          "maxRetries": {
            "default": 2,
            "format": "int32",
            "maximum": 5,
            "minimum": 0,
            "type": "integer"
          },
          "maximumNamedGroups": {
            "format": "int32",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "modelIntegrationId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "requestTimeout": {
            "default": "PT30S",
            "description": "Duration in ISO-8601 format (e.g., \u0027PT20.345S\u0027 for 20.345 seconds). ",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "retainedAnalyticsMemoryLimitBytes": {
            "default": 1073741824,
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "sessionCap": {
            "format": "int32",
            "maximum": 100000,
            "minimum": 1,
            "type": "integer"
          },
          "start": {
            "format": "date-time",
            "type": "string"
          },
          "warehouseIntegrationId": {
            "type": "string"
          }
        },
        "required": [
          "analyticsJobId",
          "artifactPrefix",
          "datasetId",
          "embeddingModel",
          "end",
          "labelModel",
          "modelIntegrationId",
          "organizationId",
          "query",
          "requestTimeout",
          "start",
          "warehouseIntegrationId"
        ],
        "title": "Inputs Schema",
        "type": "object"
      },
      "AgentSessionEventsIcebergTableSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads every event of the agent sessions whose events match the query.",
            "enum": [
              "agent-session-events-iceberg-table-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "AgentSessionSummary": {
        "properties": {
          "emitter": {
            "type": "string"
          },
          "errorCount": {
            "format": "int64",
            "type": "integer"
          },
          "firstActivityTimestamp": {
            "format": "date-time",
            "type": "string"
          },
          "firstPrompt": {
            "type": "string"
          },
          "identity": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "lastActivityTimestamp": {
            "format": "date-time",
            "type": "string"
          },
          "matchedPreview": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "sessionId": {
            "type": "string"
          },
          "toolCallCount": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "emitter",
          "errorCount",
          "firstActivityTimestamp",
          "lastActivityTimestamp",
          "sessionId",
          "toolCallCount"
        ],
        "type": "object"
      },
      "AgentSessionsEndpoint": {
        "description": "An OTLP integration attached as an Agent Sessions source or sink.",
        "properties": {
          "integrationId": {
            "description": "OTLP integration carrying both agent event logs and execution spans.",
            "type": "string"
          },
          "name": {
            "description": "Base operation name; the generated logs and traces operations suffix it.",
            "pattern": "^[a-z0-9_]+$",
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name"
        ],
        "type": "object"
      },
      "AgentSessionsIcebergTableSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Selects grouped agent session summaries from the logs Iceberg table.",
            "enum": [
              "agent-sessions-iceberg-table-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "AgentSessionsSynchronousSink": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Sink for returning agent session summaries to the caller.",
            "enum": [
              "agent-sessions-sync-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "AgentSessionsTemplateInput": {
        "description": "Schema for the Agent Sessions job graph.",
        "properties": {
          "datasetId": {
            "description": "Dataset receiving canonical events and normalized spans.",
            "pattern": "^[0-9a-z]{13}$",
            "type": "string"
          },
          "sinks": {
            "description": "Optional OTLP integrations fed canonical agent events and normalized spans.",
            "items": {
              "$ref": "#/components/schemas/AgentSessionsEndpoint"
            },
            "type": "array"
          },
          "sources": {
            "description": "OTLP integrations receiving agent harness events and execution spans.",
            "items": {
              "$ref": "#/components/schemas/AgentSessionsEndpoint"
            },
            "type": "array"
          }
        },
        "required": [
          "datasetId",
          "sources"
        ],
        "title": "Inputs Schema",
        "type": "object"
      },
      "AgentSignalSink": {
        "description": "Emits a generic pipeline signal for each input log event.",
        "properties": {
          "context": {
            "description": "Optional author-provided context included with every emitted signal.",
            "maxLength": 4096,
            "minLength": 0,
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "targetAgentIds": {
            "default": [],
            "description": "Agent ids that should investigate every signal emitted by this sink.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "type": {
            "description": "Emits generic pipeline signals to selected agents.",
            "enum": [
              "agent-signal-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "targetAgentIds",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "AgentSpanProcessor": {
        "description": "Normalizes agent span attributes and projects observed transcript content as canonical agent LogEvents in one pass.",
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Processes native agent-harness OTel spans.",
            "enum": [
              "agent-span-processor"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "AgentSubscriptionCounts": {
        "properties": {
          "pipelines": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "AgentSuggestion": {
        "properties": {
          "agentId": {
            "type": "string"
          },
          "appliedJobVersion": {
            "format": "int64",
            "type": "integer"
          },
          "baseJobVersion": {
            "format": "int64",
            "type": "integer"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "investigationId": {
            "type": "string"
          },
          "jobId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "reviewedAt": {
            "format": "date-time",
            "type": "string"
          },
          "reviewedBy": {
            "type": "string"
          },
          "samples": {
            "items": {
              "$ref": "#/components/schemas/LogEvent"
            },
            "type": "array"
          },
          "status": {
            "enum": [
              "PENDING",
              "APPLIED",
              "REJECTED"
            ],
            "type": "string"
          },
          "teamIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "templateInputsPatch": {
            "$ref": "#/components/schemas/JsonNode"
          },
          "toolCallId": {
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AgentSuggestionApplyResult": {
        "properties": {
          "appliedJobVersion": {
            "description": "The new job version the suggestion was applied as, or absent when it was rejected by verification. Applying restarts the pipeline from a savepoint, so the new version reaches its desired state asynchronously.",
            "format": "int64",
            "type": "integer"
          },
          "findings": {
            "default": [],
            "description": "Verification findings that blocked the apply. When present the pipeline is untouched and the suggestion stays PENDING: the pipeline changed since the suggestion was recorded, so the change is no longer safe to apply as-is.",
            "items": {
              "$ref": "#/components/schemas/ChangeFinding"
            },
            "type": "array"
          },
          "suggestion": {
            "$ref": "#/components/schemas/AgentSuggestion"
          }
        },
        "required": [
          "suggestion"
        ],
        "type": "object"
      },
      "AgentSuggestionsList": {
        "properties": {
          "hasMore": {
            "type": "boolean"
          },
          "limit": {
            "format": "int32",
            "type": "integer"
          },
          "start": {
            "format": "int32",
            "type": "integer"
          },
          "suggestions": {
            "$ref": "#/components/schemas/ItemsCollectionAgentSuggestion"
          }
        },
        "type": "object"
      },
      "AgentSummary": {
        "properties": {
          "agent": {
            "$ref": "#/components/schemas/AgentConfig"
          },
          "recentHealth": {
            "$ref": "#/components/schemas/AgentRecentHealth"
          },
          "subscriptionCounts": {
            "$ref": "#/components/schemas/AgentSubscriptionCounts"
          }
        },
        "type": "object"
      },
      "AggType": {
        "description": "Aggregation function.",
        "enum": [
          "LATEST",
          "SUM",
          "AVG",
          "CUMULATIVE",
          "CUMULATIVE_UPDOWN",
          "DEFAULT",
          "PERCENTILE",
          "SLOPE",
          "MAX",
          "MIN"
        ],
        "type": "string"
      },
      "AggregationAccumulator": {
        "properties": {
          "accumulatorType": {
            "enum": [
              "AVERAGE"
            ],
            "type": "string"
          },
          "materializedValue": {
            "format": "double",
            "type": "number"
          }
        },
        "type": "object"
      },
      "AggregationDecl": {
        "description": "One aggregation function declaration.",
        "properties": {
          "args": {
            "default": [],
            "description": "Function arguments. Heterogeneous; validated at pipeline construction. PERCENTILE accepts [rank], [rank, relativeAccuracy], or [rank, relativeAccuracy, maxNumBins].",
            "items": {
              "description": "Function arguments. Heterogeneous; validated at pipeline construction. PERCENTILE accepts [rank], [rank, relativeAccuracy], or [rank, relativeAccuracy, maxNumBins].",
              "type": "object"
            },
            "type": "array"
          },
          "as": {
            "description": "Output suffix. Omitted \u003d preserve source metric name; in rule conditions the output is addressed as `\u003calias\u003e.val` (at most one as-less aggregation per block).",
            "type": "string"
          },
          "fn": {
            "$ref": "#/components/schemas/AggType"
          }
        },
        "required": [
          "fn"
        ],
        "type": "object"
      },
      "AllQueryNode": {
        "properties": {
          "type": {
            "description": "A node that represents a parsed query that matches all.",
            "enum": [
              "all-query-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "AnalyticsCompletion": {
        "description": "User-facing completion templates for this function.",
        "properties": {
          "caretFromEnd": {
            "format": "int32",
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "insert": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AnalyticsDiagnostic": {
        "description": "Request constraints, followed by the first SQL failure when the request is complete, at most one per field. Empty means no draft errors were found; execution still validates the query against its actual table and engine.",
        "properties": {
          "fix": {
            "$ref": "#/components/schemas/AnalyticsDiagnosticFix"
          },
          "message": {
            "description": "What is wrong, as a finished sentence to show the person editing the query.",
            "example": "Result aliases must be unique.",
            "type": "string"
          },
          "path": {
            "description": "Where the rule was broken, as a path into the request: \u0027select\u0027, \u0027select[1].expression\u0027, \u0027select[1].alias\u0027, \u0027groupBy[0]\u0027, \u0027window.size\u0027, \u0027window.slide\u0027, \u0027having\u0027, \u0027orderBy[2].expression\u0027, \u0027limit\u0027, \u0027scanBudgetBytes\u0027, \u0027predicate\u0027, or \u0027query\u0027 for a failure that names no single item.",
            "example": "select[1].alias",
            "type": "string"
          }
        },
        "required": [
          "message",
          "path"
        ],
        "type": "object"
      },
      "AnalyticsDiagnosticFix": {
        "description": "A change that resolves this diagnostic, when the server has verified one: today, the GROUP BY entry that makes an ungrouped SELECT expression valid.",
        "properties": {
          "addGroupBy": {
            "description": "A GROUP BY entry to append: the result column\u0027s alias, quoted when it starts with a digit, or its expression when it has no alias. The server has translated the query with this entry added and found it valid.",
            "example": "service",
            "type": "string"
          }
        },
        "required": [
          "addGroupBy"
        ],
        "type": "object"
      },
      "AnalyticsDraftRequest": {
        "properties": {
          "datasetId": {
            "description": "Dataset the query reads. Supplying it checks the scan budget against that dataset\u0027s ceiling and requires VIEW permission on it.",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/StructuredAnalyticsQuery"
          },
          "scanBudgetBytes": {
            "description": "Bytes the run may scan, checked against the organization\u0027s ceiling. Zero stands for a budget field left empty and is reported as a diagnostic.",
            "example": 107374182400,
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "query",
          "scanBudgetBytes"
        ],
        "type": "object"
      },
      "AnalyticsDraftResponse": {
        "properties": {
          "diagnostics": {
            "description": "Request constraints, followed by the first SQL failure when the request is complete, at most one per field. Empty means no draft errors were found; execution still validates the query against its actual table and engine.",
            "items": {
              "$ref": "#/components/schemas/AnalyticsDiagnostic"
            },
            "type": "array"
          }
        },
        "required": [
          "diagnostics"
        ],
        "type": "object"
      },
      "AnalyticsExample": {
        "description": "Example calls demonstrating the function.",
        "properties": {
          "explanation": {
            "description": "One sentence on what this call does.",
            "type": "string"
          },
          "expression": {
            "description": "The call, in the analytics source language.",
            "type": "string"
          }
        },
        "required": [
          "explanation",
          "expression"
        ],
        "type": "object"
      },
      "AnalyticsField": {
        "properties": {
          "accessorTemplate": {
            "description": "Format string for a nested key accessor, when applicable.",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object"
      },
      "AnalyticsFunction": {
        "properties": {
          "aggregate": {
            "type": "boolean"
          },
          "category": {
            "description": "Function family used to group completions.",
            "type": "string"
          },
          "completions": {
            "description": "User-facing completion templates for this function.",
            "items": {
              "$ref": "#/components/schemas/AnalyticsCompletion"
            },
            "type": "array"
          },
          "examples": {
            "description": "Example calls demonstrating the function.",
            "items": {
              "$ref": "#/components/schemas/AnalyticsExample"
            },
            "type": "array"
          },
          "help": {
            "description": "Short user-facing explanation shown with completions.",
            "type": "string"
          },
          "keywordSyntax": {
            "description": "True when the call is written with SQL keywords rather than a comma-separated argument list, e.g. CAST(value AS type) or EXTRACT(field FROM timestamp). Show the examples rather than a signature synthesized from parameters.",
            "type": "boolean"
          },
          "maxArgs": {
            "description": "Null for variadic functions.",
            "format": "int32",
            "type": "integer"
          },
          "minArgs": {
            "description": "Null for variadic functions.",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "parameters": {
            "description": "The function\u0027s arguments in call order, for rendering a signature. Required arguments precede optional ones.",
            "items": {
              "$ref": "#/components/schemas/AnalyticsParameter"
            },
            "type": "array"
          }
        },
        "required": [
          "help",
          "name"
        ],
        "type": "object"
      },
      "AnalyticsOrderBy": {
        "default": [],
        "description": "Ordering applied to the analytical results.",
        "properties": {
          "direction": {
            "default": "ASC",
            "description": "Sort direction.",
            "enum": [
              "ASC",
              "DESC"
            ],
            "type": "string"
          },
          "expression": {
            "description": "Grepr SQL expression or projection alias to order by. The expression may reference projection aliases.",
            "maxLength": 4096,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "expression"
        ],
        "type": "object"
      },
      "AnalyticsParameter": {
        "description": "The function\u0027s arguments in call order, for rendering a signature. Required arguments precede optional ones.",
        "properties": {
          "name": {
            "description": "What the argument means, e.g. \"fraction\" for a percentile\u0027s rank.",
            "type": "string"
          },
          "optional": {
            "description": "Whether a call may omit this argument.",
            "type": "boolean"
          },
          "repeating": {
            "description": "Whether this argument may be supplied more than once.",
            "type": "boolean"
          },
          "type": {
            "description": "What the argument accepts.",
            "enum": [
              "ANY",
              "VARIANT",
              "NUMBER",
              "TEXT",
              "BOOLEAN",
              "TIMESTAMP",
              "ARRAY",
              "MAP",
              "TYPE_NAME",
              "TIME_UNIT",
              "LITERAL"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object"
      },
      "AnalyticsProjection": {
        "properties": {
          "alias": {
            "description": "Optional result column name.",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "expression": {
            "description": "Grepr SQL expression to project.",
            "maxLength": 4096,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "expression"
        ],
        "type": "object"
      },
      "AnalyticsQuery": {
        "description": "Complete analytical query to execute.",
        "discriminator": {
          "mapping": {
            "structured-analytics-query": "#/components/schemas/StructuredAnalyticsQuery"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/StructuredAnalyticsQuery"
          }
        ],
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "AnalyticsTableBinding": {
        "description": "Dataset tables available to the query under logical aliases.",
        "properties": {
          "alias": {
            "description": "Logical table name used by the analytical query.",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "datasetId": {
            "description": "ID of the dataset that owns the table.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "table": {
            "description": "Dataset-owned table exposed under the logical alias.",
            "enum": [
              "logs_raw",
              "logs_dedup",
              "logs_pattern_lookup",
              "metrics_raw",
              "metricdata_raw",
              "spans_raw",
              "spans_dedup"
            ],
            "type": "string"
          }
        },
        "required": [
          "alias",
          "datasetId",
          "table"
        ],
        "type": "object"
      },
      "AnalyticsTimeWindow": {
        "description": "Optional time window that buckets the results. Adds leading \u0027window_start\u0027 and \u0027window_end\u0027 result columns, which are always grouped.",
        "properties": {
          "kind": {
            "description": "Window layout: TUMBLING windows do not overlap; SLIDING windows start every \u0027slide\u0027.",
            "enum": [
              "TUMBLING",
              "SLIDING"
            ],
            "type": "string"
          },
          "size": {
            "description": "Window length as an ISO-8601 duration, a whole number of milliseconds.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "slide": {
            "description": "Distance between consecutive SLIDING window starts as an ISO-8601 duration, a whole number of milliseconds dividing \u0027size\u0027. Absent for TUMBLING windows.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "timestamp": {
            "default": "EVENT_TIMESTAMP",
            "description": "Which timestamp the windows bucket by.",
            "enum": [
              "EVENT_TIMESTAMP",
              "RECEIVED_TIMESTAMP"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "size"
        ],
        "type": "object"
      },
      "AnalyticsVocabularyResponse": {
        "properties": {
          "fields": {
            "items": {
              "$ref": "#/components/schemas/AnalyticsField"
            },
            "type": "array"
          },
          "functions": {
            "items": {
              "$ref": "#/components/schemas/AnalyticsFunction"
            },
            "type": "array"
          },
          "maxRowLimit": {
            "description": "Largest number of result rows an analytics query may ask for. A builder uses it to bound its input; the server refuses a larger request whether or not the caller did.",
            "format": "int32",
            "type": "integer"
          },
          "maxScanBudgetBytes": {
            "description": "Largest scan budget, in bytes, an Athena analytics query over this dataset may request. Absent when no ceiling applies. Queries routed to a Trino query engine are not subject to it.",
            "format": "int64",
            "type": "integer"
          },
          "promotedTagKeys": {
            "description": "Promoted logs_raw tag keys for the requested dataset.",
            "items": {
              "description": "Promoted logs_raw tag keys for the requested dataset.",
              "type": "string"
            },
            "type": "array"
          },
          "reservedWords": {
            "description": "Words the analytics SQL grammar reserves; they cannot be used as result aliases.",
            "items": {
              "description": "Words the analytics SQL grammar reserves; they cannot be used as result aliases.",
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "fields",
          "functions",
          "maxRowLimit"
        ],
        "type": "object"
      },
      "AndEventPredicate": {
        "properties": {
          "queries": {
            "default": [],
            "description": "List of predicates that must all match for this predicate to match.",
            "items": {
              "$ref": "#/components/schemas/EventPredicate"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "title": "Child predicates",
            "type": "array"
          },
          "type": {
            "description": "A predicate that matches when every child predicate matches.",
            "enum": [
              "and-predicate"
            ],
            "type": "string"
          }
        },
        "required": [
          "queries",
          "type"
        ],
        "type": "object"
      },
      "AndQueryNode": {
        "properties": {
          "expressions": {
            "default": [],
            "description": "The and query node. This is a list of expressions that are combined with an AND operator.",
            "example": [
              "attribute",
              "index\u003dmain"
            ],
            "items": {
              "$ref": "#/components/schemas/ParsedQueryNode"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "A node that represents AND operator in a parsed query.",
            "enum": [
              "and-query-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "expressions",
          "type"
        ],
        "type": "object"
      },
      "AnnualCreditPoolSummary": {
        "description": "Commitment summary for Annual - Credit Pool plans.",
        "properties": {
          "annualCommitment": {
            "description": "Yearly committed dollar amount.",
            "type": "number"
          },
          "usedCumulative": {
            "description": "Cumulative dollar value of consumption since contract start.",
            "type": "number"
          },
          "usedThisPeriod": {
            "description": "Dollar value of consumption during this reporting period.",
            "type": "number"
          }
        },
        "required": [
          "annualCommitment",
          "usedCumulative",
          "usedThisPeriod"
        ],
        "type": "object"
      },
      "AnnualDataProcessingSummary": {
        "description": "Commitment summary for Annual - Data Processing plans.",
        "properties": {
          "rows": {
            "default": [],
            "description": "One row per metric the customer is pre-committed on (e.g. Data Processing GB, Compute Units).",
            "items": {
              "$ref": "#/components/schemas/MeteredDimensionCommitment"
            },
            "type": "array"
          }
        },
        "required": [
          "rows"
        ],
        "type": "object"
      },
      "AnnualSaasPreCommitmentSummary": {
        "description": "Pre-commitment summary for Annual + SaaS plans.",
        "properties": {
          "rows": {
            "default": [],
            "description": "One row per metric the customer is pre-committed on, ordered by the configured displayed brick id list.",
            "items": {
              "$ref": "#/components/schemas/MeteredDimensionCommitment"
            },
            "type": "array"
          }
        },
        "required": [
          "rows"
        ],
        "type": "object"
      },
      "AnomalyActions": {
        "description": "Actions applied when an object is flagged anomalous.",
        "properties": {
          "objectMetricsPassthrough": {
            "$ref": "#/components/schemas/ObjectMetricsPassthrough"
          }
        },
        "type": "object"
      },
      "AnomalyConfig": {
        "description": "One anomaly rule.",
        "properties": {
          "anomalyDuration": {
            "description": "START..END lifecycle window after the last triggering datapoint.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "condition": {
            "description": "Scalar SQL condition that fires the rule.",
            "example": "obj.avg \u003e coh.p90",
            "type": "string"
          },
          "from": {
            "additionalProperties": {
              "$ref": "#/components/schemas/MetricAggregation"
            },
            "default": {},
            "description": "Alias → aggregation declaration.",
            "type": "object"
          },
          "joinOn": {
            "default": [],
            "description": "Join expressions linking aliases (Calcite-parsed SQL).",
            "items": {
              "description": "Join expressions linking aliases (Calcite-parsed SQL).",
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "description": "Unique rule name.",
            "example": "top_decile_cpu",
            "type": "string"
          }
        },
        "required": [
          "anomalyDuration",
          "condition",
          "from",
          "name"
        ],
        "type": "object"
      },
      "Anthropic": {
        "description": "The payload containing integration data.",
        "properties": {
          "apiKey": {
            "description": "Masked API key for Anthropic",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "integrationMaxTokens": {
            "description": "Total tokens all agents using this integration may consume per max-tokens window. Null uses the default of 200,000,000.",
            "example": 200000000,
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "maxTokensWindowHours": {
            "description": "Length in hours of the UTC-aligned max tokens window; must be a divisor of 24. Null uses the default of 1.",
            "example": 24,
            "format": "int32",
            "maximum": 24,
            "minimum": 1,
            "type": "integer"
          },
          "supportsEmbedding": {
            "description": "Whether this provider offers an embeddings API and can back agent investigation memory.",
            "readOnly": true,
            "type": "boolean"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "type": "object",
        "x-type": {
          "type": "anthropic"
        }
      },
      "Any": {
        "description": "A value that can be a primitive (String or number), a list, or a map.",
        "example": [
          12,
          "a",
          {
            "b": 1
          },
          [
            1,
            2,
            3
          ]
        ]
      },
      "ApiKey": {
        "description": "One key in the desired set",
        "properties": {
          "keyId": {
            "description": "Id of an existing key to keep or rotate",
            "example": "k_7f3a",
            "maxLength": 64,
            "minLength": 0,
            "type": "string"
          },
          "label": {
            "description": "User-supplied display name for the key, purely informational. Omitting it clears any existing label.",
            "maxLength": 100,
            "minLength": 0,
            "type": "string"
          },
          "sendKey": {
            "description": "Whether this key is used to send data back to Datadog",
            "type": "boolean"
          },
          "value": {
            "description": "The cleartext key value (for an added or rotated key)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AppKeyScopeCheck": {
        "description": "Whether a Datadog application key holds one authorization scope",
        "properties": {
          "required": {
            "description": "Whether Grepr rejects an application key without this scope",
            "type": "boolean"
          },
          "scope": {
            "description": "The Datadog authorization scope identifier",
            "example": "monitors_read",
            "type": "string"
          },
          "status": {
            "description": "Whether the application key was found to hold a scope, or could not be checked",
            "enum": [
              "GRANTED",
              "DENIED",
              "UNKNOWN"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "AppendMessageRequest": {
        "properties": {
          "text": {
            "type": "string"
          }
        },
        "required": [
          "text"
        ],
        "type": "object"
      },
      "ArrayData": {
        "type": "object"
      },
      "AthenaAgentSessionsSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Returns grouped agent session summaries through Athena.",
            "enum": [
              "athena-agent-sessions-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "AthenaAnalyticsSource": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/AnalyticsQuery"
          },
          "scanBudgetBytes": {
            "default": 107374182400,
            "description": "Maximum number of bytes this query may scan.",
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "tables": {
            "description": "Dataset tables available to the query under logical aliases.",
            "items": {
              "$ref": "#/components/schemas/AnalyticsTableBinding"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "type": {
            "description": "Executes an analytical query against dataset tables using Athena.",
            "enum": [
              "athena-analytics-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "query",
          "tables",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "AttributeHeaderMapping": {
        "description": "Maps a log event attribute path to an HTTP header name",
        "example": [
          {
            "attributePath": [
              "kubernetes",
              "namespace",
              "name"
            ],
            "headerName": "X-Tenant"
          }
        ],
        "properties": {
          "attributePath": {
            "description": "Attribute path segments to extract the header value from. Each segment represents one level of nesting in the log event attributes.",
            "example": [
              "kubernetes",
              "namespace",
              "name"
            ],
            "items": {
              "description": "Attribute path segments to extract the header value from. Each segment represents one level of nesting in the log event attributes.",
              "example": "[\"kubernetes\",\"namespace\",\"name\"]",
              "type": "string"
            },
            "type": "array"
          },
          "headerName": {
            "description": "HTTP header name to set from the attribute value",
            "example": "X-Tenant",
            "type": "string"
          }
        },
        "required": [
          "headerName"
        ],
        "type": "object"
      },
      "AttributeKeyTermNode": {
        "properties": {
          "attribute": {
            "default": "",
            "description": "The string that is matched against the attribute key.",
            "example": "\"app\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents an attribute key in a parsed query.",
            "enum": [
              "attribute-key-term-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "attribute",
          "type"
        ],
        "type": "object"
      },
      "AttributeMask": {
        "description": "Masks to apply to attribute values. Each entry names an attribute path (as a list of segments) and the masks to apply to the value at that path. Only string values at the exact path are masked; missing or non-string attributes are skipped. Paths must be unique. The same matching rules as messageMasks apply.",
        "example": [
          {
            "masks": {
              "email": "\\S+@\\S+"
            },
            "path": [
              "user",
              "contact"
            ]
          }
        ],
        "properties": {
          "masks": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Mask"
            },
            "description": "Masks to apply to the value at this path, as a map of label to mask. The same matching rules as messageMasks apply.",
            "example": {
              "email": "\\S+@\\S+"
            },
            "type": "object"
          },
          "path": {
            "description": "Attribute path to mask, as a list of segments.",
            "example": [
              "user",
              "contact"
            ],
            "items": {
              "description": "Attribute path to mask, as a list of segments.",
              "example": "[\"user\",\"contact\"]",
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "masks",
          "path"
        ],
        "type": "object"
      },
      "AttributeNode": {
        "properties": {
          "attribute": {
            "default": "",
            "description": "The attribute name",
            "example": "\"service\"",
            "type": "string"
          },
          "term": {
            "default": "",
            "description": "The term to match. This is a string that is matched against the attribute.",
            "example": "\"grepr-service-1\"",
            "type": "string"
          },
          "type": {
            "description": "A node that matches an attribute in a parsed query.",
            "enum": [
              "attribute-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "attribute",
          "term",
          "type"
        ],
        "type": "object"
      },
      "AttributePrefixNode": {
        "properties": {
          "attribute": {
            "default": "",
            "description": "The attribute name",
            "example": "\"service\"",
            "type": "string"
          },
          "prefix": {
            "default": "",
            "description": "The prefix to match in the attribute.",
            "example": "\"grepr-service\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents an attribute with a prefix in a parsed query.",
            "enum": [
              "attribute-prefix-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "attribute",
          "prefix",
          "type"
        ],
        "type": "object"
      },
      "AttributeRe2Node": {
        "properties": {
          "attribute": {
            "default": "",
            "description": "This is the attribute that is matched against the value of the regex field.",
            "example": "\"appName\"",
            "type": "string"
          },
          "regex": {
            "default": "",
            "description": "The regex to match. This is a regex string that is matched against the value of the attribute field.",
            "example": "\"grepr-service-1.*\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents an attribute regex in a parsed query.",
            "enum": [
              "attribute-re2-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "attribute",
          "regex",
          "type"
        ],
        "type": "object"
      },
      "AttributeRemappingRule": {
        "description": "List of attribute-to-attribute remapping rules. Each rule moves the value from a source attribute path to a target attribute path, removing the source unless the rule\u0027s preserveSource flag is set. An optional predicate filter controls when each rule is applied.",
        "properties": {
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "preserveSource": {
            "default": false,
            "description": "When true, the source attribute is preserved (copied) instead of being removed (moved). Defaults to false (source is removed after remapping).",
            "type": "boolean"
          },
          "source": {
            "description": "Source attribute path: a dotted string (\"resource.service\" is resource → service), or an array of literal keys ([\"http\", \"user.agent\"]).",
            "example": "resource.service",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ]
          },
          "target": {
            "description": "Target attribute path: a dotted string, or an array of literal keys.",
            "example": "_service",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ]
          }
        },
        "required": [
          "source",
          "target"
        ],
        "type": "object"
      },
      "AttributeWildcardNode": {
        "properties": {
          "attribute": {
            "default": "",
            "description": "The attribute name",
            "example": "\"service\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents an attribute wildcard in a parsed query.",
            "enum": [
              "attribute-wildcard-node"
            ],
            "type": "string"
          },
          "wildcard": {
            "default": "",
            "description": "The term to match. This is a wildcard string that contains wildcards",
            "example": "\"grepr-service*\"",
            "type": "string"
          }
        },
        "required": [
          "attribute",
          "type",
          "wildcard"
        ],
        "type": "object"
      },
      "AttributeWithComparatorNode": {
        "properties": {
          "attribute": {
            "default": "",
            "description": "The attribute name",
            "example": "\"service\"",
            "type": "string"
          },
          "comparator": {
            "default": "EQUAL",
            "description": "The comparator to use for the match.",
            "enum": [
              "GREATER_THAN",
              "GREATER_THAN_OR_EQUAL",
              "LESS_THAN",
              "LESS_THAN_OR_EQUAL",
              "EQUAL",
              "NOT_EQUAL"
            ],
            "example": "\"EQUALS\"",
            "type": "string"
          },
          "term": {
            "default": "",
            "description": "The term to match. This is a string that is matched against the attribute.",
            "example": "\"grepr-service-1\"",
            "type": "string"
          },
          "type": {
            "description": "A node that matches an attribute in a parsed query.",
            "enum": [
              "attribute-comparator-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "attribute",
          "comparator",
          "term",
          "type"
        ],
        "type": "object"
      },
      "AttributesMergeStrategy": {
        "default": {
          "type": "exact"
        },
        "description": "Default merge strategy to use for merging leaf-valued attributes. This is used when no specific merge strategy is defined for an attribute path.",
        "discriminator": {
          "mapping": {
            "avg": "#/components/schemas/AverageAttributesMergeStrategy",
            "composite": "#/components/schemas/CompositeAttributesMergeStrategy",
            "exact": "#/components/schemas/ExactAttributesMergeStrategy",
            "ignore": "#/components/schemas/IgnoreAttributesMergeStrategy",
            "max": "#/components/schemas/MaxAttributesMergeStrategy",
            "min": "#/components/schemas/MinAttributesMergeStrategy",
            "preserve": "#/components/schemas/PreserveAllAttributesMergeStrategy",
            "sample": "#/components/schemas/SamplingAttributesMergeStrategy",
            "sum": "#/components/schemas/SumAttributesMergeStrategy"
          },
          "propertyName": "type"
        },
        "example": "{type: \"ExactAttributesMergeStrategy\"}",
        "oneOf": [
          {
            "$ref": "#/components/schemas/ExactAttributesMergeStrategy"
          },
          {
            "$ref": "#/components/schemas/SamplingAttributesMergeStrategy"
          },
          {
            "$ref": "#/components/schemas/PreserveAllAttributesMergeStrategy"
          },
          {
            "$ref": "#/components/schemas/SumAttributesMergeStrategy"
          },
          {
            "$ref": "#/components/schemas/MinAttributesMergeStrategy"
          },
          {
            "$ref": "#/components/schemas/MaxAttributesMergeStrategy"
          },
          {
            "$ref": "#/components/schemas/AverageAttributesMergeStrategy"
          },
          {
            "$ref": "#/components/schemas/CompositeAttributesMergeStrategy"
          },
          {
            "$ref": "#/components/schemas/IgnoreAttributesMergeStrategy"
          }
        ],
        "title": "Default attributes merge strategy",
        "type": "object"
      },
      "AttributesMergeStrategyEntry": {
        "description": "List of attribute paths and their corresponding merge strategies. If no strategy is defined for a path, the terminal merge strategy will be used.",
        "properties": {
          "attributePath": {
            "description": "The attribute path, represented as an array of strings (e.g., [\"user\", \"id\"]).",
            "example": [
              "user",
              "id"
            ],
            "items": {
              "description": "The attribute path, represented as an array of strings (e.g., [\"user\", \"id\"]).",
              "example": "[\"user\",\"id\"]",
              "type": "string"
            },
            "type": "array"
          },
          "strategy": {
            "$ref": "#/components/schemas/AttributesMergeStrategy"
          }
        },
        "required": [
          "attributePath",
          "strategy"
        ],
        "title": "Attributes merge strategy entries",
        "type": "object"
      },
      "AuthConfig": {
        "properties": {
          "adminPortalClientId": {
            "type": "string"
          },
          "appClientId": {
            "type": "string"
          },
          "authServerUrl": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "signupClientId": {
            "type": "string"
          }
        },
        "required": [
          "appClientId",
          "authServerUrl",
          "provider"
        ],
        "type": "object"
      },
      "AvailablePermission": {
        "properties": {
          "action": {
            "description": "Action being permitted (e.g., view, edit)",
            "type": "string"
          },
          "category": {
            "default": "Other",
            "description": "The category that the permission belongs to",
            "type": "string"
          },
          "description": {
            "description": "Human-readable description of what this permission allows",
            "type": "string"
          },
          "id": {
            "description": "Unique identifier for this permission",
            "type": "string"
          },
          "resource": {
            "description": "Resource type (e.g., jobs, users, integrations)",
            "type": "string"
          }
        },
        "required": [
          "action",
          "category",
          "description",
          "id",
          "resource"
        ],
        "type": "object"
      },
      "AverageAttributesMergeStrategy": {
        "properties": {
          "type": {
            "description": "AverageAttributesMergeStrategy: Computes the average of numeric attribute values.",
            "enum": [
              "avg"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "BackfillJobAction": {
        "properties": {
          "backfillQuery": {
            "$ref": "#/components/schemas/backfillQuery"
          },
          "backfillTimespan": {
            "description": "The timespan for which to backfill data. This field is not required. If you do not specify it, you need to specify a duration in the trigger. For TraceSamplingTriggers, this can be specified in the traceDuration field. For others, you will need to specify a duration in the variables, e.g. __duration:PT1H",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "datasetId": {
            "description": "The ID of the dataset to read data from",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "jobTags": {
            "additionalProperties": {
              "description": "The tags added to the backfill job, for ease of search.",
              "example": "{\"job-type\":\"backfill\"}",
              "type": "string"
            },
            "description": "The tags added to the backfill job, for ease of search.",
            "example": {
              "job-type": "backfill"
            },
            "type": "object"
          },
          "limit": {
            "default": 500000,
            "description": "Maximum number of logs to backfill. Default and max is 500,000. -1 backfills every matching log and 0 backfills none.",
            "example": 100000,
            "format": "int32",
            "maximum": 500000,
            "type": "integer"
          },
          "name": {
            "description": "The name of the backfill job.",
            "example": "custom_backfill_job",
            "type": "string"
          },
          "order": {
            "description": "Action order. Lower is applied first.",
            "example": 1,
            "format": "int32",
            "type": "integer"
          },
          "sinkOperations": {
            "default": [],
            "description": "Specifies the sinks that should be used for the backfill job.",
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "Backfills data from the raw logs to the configured sink. This action runs an asynch batch job to backfill data from the raw logs table to the configured sink. The back-filled data is also added to the processed logs table to ensure that the same log is not backfilled twice leading to duplicates. The context on what needs to be backfilled is provided by the \u0027backfillQuery\u0027 which will filter logs that will be backfilled.",
            "enum": [
              "backfill-job-action"
            ],
            "type": "string"
          }
        },
        "required": [
          "backfillQuery",
          "datasetId",
          "jobTags",
          "name",
          "sinkOperations",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Job Actions"
        ]
      },
      "BackfillProgress": {
        "description": "What a logs backfill is doing, and how far it is.",
        "properties": {
          "bytesScanned": {
            "description": "The bytes the backfill\u0027s current query has scanned.",
            "format": "int64",
            "type": "integer"
          },
          "eventsDelivered": {
            "additionalProperties": {
              "description": "The events each vendor confirmed receiving, by vendor integration id.",
              "format": "int64",
              "type": "integer"
            },
            "default": {},
            "description": "The events each vendor confirmed receiving, by vendor integration id.",
            "type": "object"
          },
          "eventsRead": {
            "description": "The events read so far.",
            "format": "int64",
            "type": "integer"
          },
          "eventsTotal": {
            "description": "The events selected to send, once they are. A vendor can receive fewer, since events it already has are skipped.",
            "format": "int64",
            "type": "integer"
          },
          "failureReason": {
            "description": "Why the backfill failed, when it did.",
            "type": "string"
          },
          "phase": {
            "description": "What the backfill is doing.",
            "enum": [
              "PENDING",
              "WAITING",
              "STARTING",
              "FINDING_CUTOFF",
              "EXPORTING",
              "SENDING",
              "NOTHING_TO_SEND",
              "FINISHED",
              "FAILED",
              "CANCELLED",
              "DELETED"
            ],
            "type": "string"
          },
          "selectingMillis": {
            "description": "How long the backfill\u0027s current query has queued and run.",
            "format": "int64",
            "type": "integer"
          },
          "waitingReason": {
            "description": "Why the backfill is waiting, when it is.",
            "type": "string"
          }
        },
        "required": [
          "phase"
        ],
        "type": "object"
      },
      "BatchCancelInvestigationsRequest": {
        "properties": {
          "investigationIds": {
            "items": {
              "type": "string"
            },
            "maxItems": 500,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "investigationIds"
        ],
        "type": "object"
      },
      "BatchCancelInvestigationsResponse": {
        "properties": {
          "cancelling": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "skipped": {
            "items": {
              "$ref": "#/components/schemas/SkippedInvestigation"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "BillingPeriodsResponse": {
        "description": "Static customer header data for the billing page: display name + selectable reporting periods.",
        "properties": {
          "customerName": {
            "description": "Customer display name (e.g. \"ACME, Inc.\").",
            "type": "string"
          },
          "periods": {
            "default": [],
            "description": "Reporting periods available for this customer, newest first.",
            "items": {
              "$ref": "#/components/schemas/PeriodEntry"
            },
            "type": "array"
          }
        },
        "required": [
          "customerName",
          "periods"
        ],
        "type": "object"
      },
      "BillingSummary": {
        "description": "Plan-specific usage summary.",
        "discriminator": {
          "mapping": {
            "annual-credit-pool": "#/components/schemas/AnnualCreditPoolSummary",
            "annual-data-processing": "#/components/schemas/AnnualDataProcessingSummary",
            "annual-saas-pre-commitment": "#/components/schemas/AnnualSaasPreCommitmentSummary",
            "monthly-credit-pool": "#/components/schemas/MonthlyCreditPoolSummary",
            "monthly-payg": "#/components/schemas/PaygSummary"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/PaygSummary"
          },
          {
            "$ref": "#/components/schemas/MonthlyCreditPoolSummary"
          },
          {
            "$ref": "#/components/schemas/AnnualCreditPoolSummary"
          },
          {
            "$ref": "#/components/schemas/AnnualDataProcessingSummary"
          },
          {
            "$ref": "#/components/schemas/AnnualSaasPreCommitmentSummary"
          }
        ],
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "BillingSummaryResponse": {
        "description": "Per-period billing summary: contract bounds, period, summary.",
        "properties": {
          "contract": {
            "$ref": "#/components/schemas/Contract"
          },
          "period": {
            "$ref": "#/components/schemas/PeriodEntry"
          },
          "summary": {
            "$ref": "#/components/schemas/BillingSummary"
          }
        },
        "required": [
          "contract",
          "period",
          "summary"
        ],
        "type": "object"
      },
      "Breakdown": {
        "properties": {
          "cacheReadTokens": {
            "format": "int64",
            "type": "integer"
          },
          "cacheWriteTokens": {
            "format": "int64",
            "type": "integer"
          },
          "calls": {
            "format": "int64",
            "type": "integer"
          },
          "callsWithUsage": {
            "format": "int64",
            "type": "integer"
          },
          "costReportingComplete": {
            "type": "boolean"
          },
          "inputTokens": {
            "format": "int64",
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "outputTokens": {
            "format": "int64",
            "type": "integer"
          },
          "reasoningTokens": {
            "format": "int64",
            "type": "integer"
          },
          "reportedCostUsd": {
            "format": "double",
            "type": "number"
          },
          "sessions": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "BucketAccessResult": {
        "properties": {
          "accessible": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "retryable": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "BucketPartitionTransform": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PartitionTransform"
          },
          {
            "properties": {
              "numBuckets": {
                "description": "Number of hash buckets.",
                "format": "int32",
                "type": "integer"
              }
            },
            "type": "object"
          }
        ],
        "required": [
          "numBuckets"
        ],
        "type": "object"
      },
      "CancelAllInvestigationsResponse": {
        "properties": {
          "cancelling": {
            "format": "int32",
            "type": "integer"
          },
          "paused": {
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "cancelling",
          "paused"
        ],
        "type": "object"
      },
      "CancellableInvestigationCounts": {
        "properties": {
          "paused": {
            "format": "int32",
            "type": "integer"
          },
          "queued": {
            "format": "int32",
            "type": "integer"
          },
          "running": {
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "paused",
          "queued",
          "running"
        ],
        "type": "object"
      },
      "CancellableInvestigationsResponse": {
        "properties": {
          "canCancel": {
            "type": "boolean"
          },
          "counts": {
            "$ref": "#/components/schemas/CancellableInvestigationCounts"
          }
        },
        "required": [
          "canCancel",
          "counts"
        ],
        "type": "object"
      },
      "ChainNode": {
        "description": "One node of the recursive chain tree. Every chain (and every nested chain) is rooted at a ChainNode; the recursion terminates at a DropNode or PassthroughNode leaf.",
        "discriminator": {
          "mapping": {
            "condition-node": "#/components/schemas/ConditionNode",
            "drop-node": "#/components/schemas/DropNode",
            "passthrough-node": "#/components/schemas/PassthroughNode",
            "sql-node": "#/components/schemas/SqlNode"
          },
          "propertyName": "kind"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/DropNode"
          },
          {
            "$ref": "#/components/schemas/PassthroughNode"
          },
          {
            "$ref": "#/components/schemas/SqlNode"
          },
          {
            "$ref": "#/components/schemas/ConditionNode"
          }
        ],
        "properties": {
          "kind": {
            "type": "string"
          }
        },
        "required": [
          "kind"
        ],
        "type": "object"
      },
      "ChangeFinding": {
        "description": "Verification findings that blocked the change. When present the pipeline is untouched: fix the findings and submit again.",
        "properties": {
          "code": {
            "enum": [
              "INVALID_GROK_RULE",
              "SAMPLE_PREDICATE_MISMATCH",
              "RULE_NOT_MATCHED",
              "RULE_SHADOWED",
              "RULE_EXTRACTED_NOTHING",
              "RULE_NOT_FOUND",
              "AMBIGUOUS_PREDICATE",
              "NO_SAMPLES",
              "OPERATION_DELETED",
              "RULE_DELETED",
              "HELPER_RULE_DELETED",
              "RESOLUTION_FAILED",
              "DISALLOWED_INPUT_CHANGE",
              "UNVERIFIABLE_CHANGE",
              "NO_EFFECTIVE_CHANGE"
            ],
            "type": "string"
          },
          "details": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "message": {
            "type": "string"
          },
          "sampleId": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ChatActionCategory": {
        "enum": [
          "CHANGE_PIPELINES",
          "RUN_BACKFILLS",
          "CHANGE_DATASETS",
          "CHANGE_ISSUES",
          "ACT_IN_CONNECTED_TOOLS"
        ],
        "type": "string"
      },
      "ChatActionGrants": {
        "properties": {
          "grantedActionCategories": {
            "items": {
              "$ref": "#/components/schemas/ChatActionCategory"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ChatList": {
        "properties": {
          "chats": {
            "items": {
              "$ref": "#/components/schemas/ChatSummary"
            },
            "type": "array"
          },
          "nextCursor": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ChatPreferences": {
        "properties": {
          "enabledSkills": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ChatStatusResponse": {
        "properties": {
          "model": {
            "$ref": "#/components/schemas/ModelConfiguration"
          },
          "pendingApproval": {
            "$ref": "#/components/schemas/PendingApproval"
          },
          "processing": {
            "type": "boolean"
          },
          "status": {
            "type": "string"
          },
          "turnIndex": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ChatSummary": {
        "properties": {
          "chatId": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "CheckAppKeyScopesRequest": {
        "description": "Keys and site to check Datadog authorization scopes against",
        "properties": {
          "apiKey": {
            "description": "API key to authenticate the probes with",
            "type": "string"
          },
          "appKey": {
            "description": "Application key to check",
            "type": "string"
          },
          "site": {
            "description": "The Datadog site to probe",
            "example": "datadoghq.com",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "apiKey",
          "appKey",
          "site"
        ],
        "type": "object"
      },
      "ChunkedOutputEventRecordReadableData": {
        "properties": {
          "closed": {
            "type": "boolean"
          },
          "type": {
            "properties": {
              "typeName": {
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "ClearSecret": {
        "properties": {
          "value": {
            "type": "string",
            "writeOnly": true
          }
        },
        "type": "object"
      },
      "CloudFormationSetupInfo": {
        "properties": {
          "awsAccountId": {
            "description": "The AWS account ID",
            "type": "string"
          },
          "bucketName": {
            "description": "The name of the S3 bucket to use for the data warehouse",
            "type": "string"
          },
          "orgName": {
            "description": "The organization\u0027s name, which names its folder under the bucket\u0027s query-results prefix. The stack expires that folder\u0027s query results after a day.",
            "type": "string"
          },
          "region": {
            "description": "The AWS region the bucket must be created in. Matches the region the Grepr deployment is running in.",
            "type": "string"
          },
          "roleName": {
            "description": "The IAM role name for the data warehouse integration",
            "type": "string"
          },
          "stackName": {
            "description": "The name of the CloudFormation stack",
            "type": "string"
          }
        },
        "required": [
          "awsAccountId",
          "bucketName",
          "orgName",
          "region",
          "roleName",
          "stackName"
        ],
        "type": "object"
      },
      "CloudTrailLogsFileSource": {
        "properties": {
          "accountIds": {
            "default": [],
            "description": "The list of account IDs from which to read logs.",
            "example": [
              "123456789012",
              "987654321098"
            ],
            "items": {
              "description": "The list of account IDs from which to read logs.",
              "example": "[\"123456789012\",\"987654321098\"]",
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "fileReadingStrategy": {
            "$ref": "#/components/schemas/FileReadingStrategy"
          },
          "format": {
            "$ref": "#/components/schemas/JsonFileFormat"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "pathPrefix": {
            "default": "",
            "description": "The s3 path under the provided bucket to monitor. Optional.In the case of CloudTrail logs, this is the path to the AWSLogs/ directory.",
            "example": "path/to/monitor",
            "type": "string"
          },
          "regions": {
            "default": [
              "US_EAST_1",
              "US_EAST_2",
              "US_WEST_1",
              "US_WEST_2",
              "AF_SOUTH_1",
              "AP_EAST_1",
              "AP_SOUTH_1",
              "AP_SOUTH_2",
              "AP_SOUTHEAST_1",
              "AP_SOUTHEAST_2",
              "AP_SOUTHEAST_3",
              "AP_SOUTHEAST_4",
              "AP_NORTHEAST_1",
              "AP_NORTHEAST_2",
              "AP_NORTHEAST_3",
              "CA_CENTRAL_1",
              "CN_NORTH_1",
              "CN_NORTHWEST_1",
              "EU_CENTRAL_1",
              "EU_CENTRAL_2",
              "EU_WEST_1",
              "EU_WEST_2",
              "EU_WEST_3",
              "EU_NORTH_1",
              "EU_SOUTH_1",
              "EU_SOUTH_2",
              "IL_CENTRAL_1",
              "ME_CENTRAL_1",
              "ME_SOUTH_1",
              "SA_EAST_1"
            ],
            "description": "The list of regions from which to read logs from. If empty or null, reads logs from all regions.",
            "example": [
              "us-east-1",
              "us-west-2"
            ],
            "items": {
              "description": "The list of regions from which to read logs from. If empty or null, reads logs from all regions.",
              "enum": [
                "US_EAST_1",
                "US_EAST_2",
                "US_WEST_1",
                "US_WEST_2",
                "AF_SOUTH_1",
                "AP_EAST_1",
                "AP_SOUTH_1",
                "AP_SOUTH_2",
                "AP_SOUTHEAST_1",
                "AP_SOUTHEAST_2",
                "AP_SOUTHEAST_3",
                "AP_SOUTHEAST_4",
                "AP_NORTHEAST_1",
                "AP_NORTHEAST_2",
                "AP_NORTHEAST_3",
                "CA_CENTRAL_1",
                "CN_NORTH_1",
                "CN_NORTHWEST_1",
                "EU_CENTRAL_1",
                "EU_CENTRAL_2",
                "EU_WEST_1",
                "EU_WEST_2",
                "EU_WEST_3",
                "EU_NORTH_1",
                "EU_SOUTH_1",
                "EU_SOUTH_2",
                "IL_CENTRAL_1",
                "ME_CENTRAL_1",
                "ME_SOUTH_1",
                "SA_EAST_1"
              ],
              "example": "[\"us-east-1\",\"us-west-2\"]",
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "s3IntegrationId": {
            "description": "Integration ID for the S3 bucket where Grepr will be reading data. This corresponds to the \u0027s3-data-warehouse\u0027 integration type.",
            "type": "string"
          },
          "streamingPollInterval": {
            "default": "PT5S",
            "description": "The interval at which Grepr will check for new files in the S3 bucket. This is only applicable in streaming mode.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "type": {
            "description": "Reads logs from an S3 bucket at a CloudTrail path. Only reads logs in folders at or after the specified start time. The path prefix is optional.  Each record will need to be mapped to the Grepr data model before being usable.",
            "enum": [
              "cloudtrail-file-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "accountIds",
          "name",
          "s3IntegrationId",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "CohortOutputDecl": {
        "description": "One cohort-output entry.",
        "properties": {
          "aggregations": {
            "default": [],
            "description": "Aggregations to emit. Null \u003d [{ fn: DEFAULT }].",
            "items": {
              "$ref": "#/components/schemas/AggregationDecl"
            },
            "type": "array"
          },
          "selectors": {
            "$ref": "#/components/schemas/FilterPrimitive"
          },
          "spaceAggregation": {
            "default": true,
            "description": "When false, emit per-series time-only aggregation (no space/cohort collapse); aggregations apply as time-window folds. Default true keeps cohort aggregation.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "CohortsConfig": {
        "description": "Cohort-identity + space-aggregation configuration.",
        "properties": {
          "identifyingAttributes": {
            "default": [],
            "description": "Level-prefixed attribute keys that group objects into cohorts.",
            "example": [
              "resource.cluster",
              "resource.region"
            ],
            "items": {
              "description": "Level-prefixed attribute keys that group objects into cohorts.",
              "example": "[\"resource.cluster\",\"resource.region\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "metadataAttributes": {
            "default": [],
            "description": "Level-prefixed attribute keys describing cohorts.",
            "items": {
              "description": "Level-prefixed attribute keys describing cohorts.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "numShardBits": {
            "default": 0,
            "description": "Parallelism multiplier for cohort outputs (anomaly rules ignore this). Splits each cohort across 2^n CohortCalc instances by the low n bits of tsIdLo, trading parallelism for partial per-shard aggregation. 0 \u003d one instance per cohort.",
            "example": 4,
            "format": "int32",
            "maximum": 15,
            "minimum": 0,
            "type": "integer"
          },
          "outputs": {
            "default": [],
            "description": "Ordered cohort-output entries (first-match-wins).",
            "items": {
              "$ref": "#/components/schemas/CohortOutputDecl"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "CompleteSpan": {
        "description": "A complete span with its resource and instrumentation scope context.",
        "properties": {
          "critPathNs": {
            "format": "int64",
            "type": "integer"
          },
          "critPathPct": {
            "format": "double",
            "type": "number"
          },
          "duration": {
            "format": "int64",
            "type": "integer"
          },
          "eventTimestamp": {
            "format": "int64",
            "type": "integer"
          },
          "hasError": {
            "type": "boolean"
          },
          "percentileBucket": {
            "type": "string"
          },
          "receivedTimestamp": {
            "format": "int64",
            "type": "integer"
          },
          "resource": {
            "$ref": "#/components/schemas/Resource"
          },
          "samplingType": {
            "format": "int32",
            "type": "integer"
          },
          "scope": {
            "$ref": "#/components/schemas/InstrumentationScope"
          },
          "serviceName": {
            "type": "string"
          },
          "span": {
            "$ref": "#/components/schemas/Span"
          },
          "traceSignature": {
            "type": "string"
          },
          "traceSignatureId": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "CompositeAttributesMergeStrategy": {
        "properties": {
          "strategies": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/AttributesMergeStrategy"
            },
            "type": "array"
          },
          "type": {
            "description": "CompositeAttributesMergeStrategy: Applies multiple merge strategies to produce multiple output attributes with suffixed keys.",
            "enum": [
              "composite"
            ],
            "type": "string"
          }
        },
        "required": [
          "strategies",
          "type"
        ],
        "type": "object"
      },
      "Condition": {
        "description": "The action rules that get applied when the condition is triggered.",
        "example": {
          "condition-1": {
            "actionRules": [
              {
                "actionPredicate": {
                  "query": "service:__service",
                  "type": "datadog-query"
                },
                "actions": [
                  {
                    "modification": "ADD",
                    "order": 1,
                    "tagKey": "hosts",
                    "type": "tag-action",
                    "values": [
                      "host1",
                      "host2"
                    ]
                  }
                ],
                "type": "event-rule"
              }
            ]
          }
        },
        "properties": {
          "actionRules": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ActionRule"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "actionRules"
        ],
        "type": "object"
      },
      "ConditionNode": {
        "description": "Non-terminal — events matching `predicate` route into `thenAction`; non-matching events route into `elseAction`. `lateDataDuration`, on any ConditionNode, applies to the events reaching it.",
        "properties": {
          "elseAction": {
            "$ref": "#/components/schemas/ChainNode"
          },
          "lateDataDuration": {
            "description": "Optional ISO-8601 maximum allowed lateness, applied to the events reaching this node before its predicate. Honored on any ConditionNode, a slot\u0027s root or a nested one.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "thenAction": {
            "$ref": "#/components/schemas/ChainNode"
          }
        },
        "required": [
          "elseAction",
          "predicate",
          "thenAction"
        ],
        "type": "object"
      },
      "ConditionalDataLakeConfig": {
        "description": "One conditional branch in the raw log if-else routing ladder.",
        "properties": {
          "datasetId": {
            "description": "Target dataset ID for logs matching this branch\u0027s filter.",
            "pattern": "^[0-9a-z]{13}$",
            "type": "string"
          },
          "filter": {
            "$ref": "#/components/schemas/LogsFilter"
          },
          "rawSinkConfig": {
            "$ref": "#/components/schemas/RawLogsSinkConfig"
          }
        },
        "required": [
          "datasetId",
          "filter"
        ],
        "type": "object"
      },
      "ConsoleSetupInfo": {
        "properties": {
          "awsAccountId": {
            "description": "The AWS account ID",
            "type": "string"
          },
          "bucketName": {
            "description": "The name of the S3 bucket to use for the data warehouse",
            "type": "string"
          },
          "orgName": {
            "description": "The name of the organization",
            "type": "string"
          },
          "region": {
            "description": "The AWS region the bucket must be created in. Matches the region the Grepr deployment is running in.",
            "type": "string"
          },
          "resourcePolicy": {
            "description": "The IAM policy to attach to the assumed role",
            "type": "string"
          }
        },
        "required": [
          "awsAccountId",
          "bucketName",
          "orgName",
          "region",
          "resourcePolicy"
        ],
        "type": "object"
      },
      "ConstantSampling": {
        "properties": {
          "type": {
            "description": "A sampler that reduces with a maximum limit.",
            "enum": [
              "constant-sampling"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "Contract": {
        "description": "Metadata about the contract.",
        "properties": {
          "endDate": {
            "description": "Inclusive contract end date — the last day this contract covers. For renewed or recast contracts, this is the day before the next contract\u0027s start.",
            "format": "date",
            "type": "string"
          },
          "startDate": {
            "description": "Inclusive contract start date.",
            "format": "date",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "type": "object"
      },
      "CreateAgentSessionAnalyticsJob": {
        "properties": {
          "datasetId": {
            "type": "string"
          },
          "end": {
            "format": "date-time",
            "type": "string"
          },
          "maximumNamedGroups": {
            "default": 20,
            "format": "int32",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "modelIntegrationId": {
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "sessionCap": {
            "default": 10000,
            "format": "int32",
            "maximum": 100000,
            "minimum": 1,
            "type": "integer"
          },
          "start": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "end",
          "modelIntegrationId",
          "query",
          "start"
        ],
        "type": "object"
      },
      "CreateBackfillJob": {
        "description": "Parameters for creating a logs or spans backfill batch job.",
        "discriminator": {
          "mapping": {
            "logs": "#/components/schemas/CreateLogsBackfillJob",
            "spans": "#/components/schemas/CreateSpansBackfillJob"
          },
          "propertyName": "dataType"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/CreateLogsBackfillJob"
          },
          {
            "$ref": "#/components/schemas/CreateSpansBackfillJob"
          }
        ],
        "properties": {
          "dataType": {
            "type": "string"
          },
          "datasetId": {
            "type": "string"
          },
          "end": {
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "sinks": {
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "type": "array"
          },
          "start": {
            "format": "date-time",
            "type": "string"
          },
          "tags": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "teamIds": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "dataType"
        ],
        "type": "object"
      },
      "CreateChatRequest": {
        "properties": {
          "enabledSkills": {
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "minItems": 0,
            "type": "array"
          },
          "model": {
            "$ref": "#/components/schemas/ModelConfiguration"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "model",
          "text"
        ],
        "type": "object"
      },
      "CreateChatResponse": {
        "properties": {
          "chatId": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "CreateIssueRequest": {
        "description": "Files a new issue. Creating never deduplicates: search first, and update or record an occurrence on an existing issue instead of filing a second one. The reporter, number and timestamps come from the caller and the server, never from the request.",
        "properties": {
          "confidence": {
            "description": "How sure the reporter is that the problem is real.",
            "enum": [
              "CONFIRMED",
              "LIKELY",
              "UNVERIFIED"
            ],
            "type": "string"
          },
          "description": {
            "description": "The current understanding, in markdown, or null for none.",
            "maxLength": 32768,
            "minLength": 0,
            "type": "string"
          },
          "entities": {
            "additionalProperties": {
              "description": "The `entity:*` tags it concerns; an unprefixed key is put in the `entity:` namespace. Keys are stored in lower case, and values as given; searches match both in any case.",
              "type": "string"
            },
            "description": "The `entity:*` tags it concerns; an unprefixed key is put in the `entity:` namespace. Keys are stored in lower case, and values as given; searches match both in any case.",
            "type": "object"
          },
          "evidence": {
            "description": "Things a person can open to check the claim.",
            "items": {
              "$ref": "#/components/schemas/IssueEvidence"
            },
            "maxItems": 50,
            "minItems": 0,
            "type": "array"
          },
          "expiresAt": {
            "description": "When the issue stops applying.",
            "format": "date-time",
            "type": "string"
          },
          "fingerprint": {
            "description": "An optional free-form key for exact-match search.",
            "maxLength": 256,
            "minLength": 0,
            "type": "string"
          },
          "labels": {
            "description": "Categories; reuse the labels search reports as in use.",
            "items": {
              "description": "Categories; reuse the labels search reports as in use.",
              "type": "string"
            },
            "maxItems": 20,
            "minItems": 0,
            "type": "array"
          },
          "links": {
            "description": "Related pipelines, investigations, memories, suggestions and external tickets.",
            "items": {
              "$ref": "#/components/schemas/IssueLink"
            },
            "maxItems": 50,
            "minItems": 0,
            "type": "array"
          },
          "nextStep": {
            "description": "The concrete next action and who it waits on.",
            "maxLength": 4096,
            "minLength": 0,
            "type": "string"
          },
          "priority": {
            "description": "How soon someone should act; agents must set it. A person who leaves it null files at `P2`, unlocked, so triage can set it.",
            "enum": [
              "P0",
              "P1",
              "P2",
              "P3"
            ],
            "type": "string"
          },
          "revisitAt": {
            "description": "When someone should check back.",
            "format": "date-time",
            "type": "string"
          },
          "state": {
            "description": "The open state to file it in; null files it in `TRIAGE`. Agents may file only in `TRIAGE`, or `READY` when their handoff mode allows it.",
            "enum": [
              "TRIAGE",
              "READY",
              "IN_PROGRESS",
              "WAITING",
              "MONITORING",
              "CLOSED"
            ],
            "type": "string"
          },
          "teamIds": {
            "description": "The teams that may see it; people only, from the teams they can edit issues of (any for an organization-wide person). Absent: a team-scoped person\u0027s own teams, and none for an organization-wide person, which keeps the issue to organization-wide users.",
            "items": {
              "description": "The teams that may see it; people only, from the teams they can edit issues of (any for an organization-wide person). Absent: a team-scoped person\u0027s own teams, and none for an organization-wide person, which keeps the issue to organization-wide users.",
              "type": "string"
            },
            "maxItems": 50,
            "minItems": 0,
            "type": "array"
          },
          "title": {
            "description": "One line naming the problem, not the symptom\u0027s timestamp.",
            "maxLength": 200,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "confidence",
          "title"
        ],
        "type": "object"
      },
      "CreateJob": {
        "description": "Attributes of the Grepr Job to create",
        "properties": {
          "execution": {
            "default": "ASYNCHRONOUS",
            "description": "Execution mode of the job",
            "enum": [
              "SYNCHRONOUS",
              "ASYNCHRONOUS"
            ],
            "example": "ASYNCHRONOUS",
            "type": "string"
          },
          "jobGraph": {
            "$ref": "#/components/schemas/GreprJobGraph"
          },
          "name": {
            "description": "Name of the job",
            "example": "demo_pipeline",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "processing": {
            "default": "STREAMING",
            "description": "Processing method of the job",
            "enum": [
              "BATCH",
              "STREAMING"
            ],
            "example": "STREAMING",
            "type": "string"
          },
          "tags": {
            "additionalProperties": {
              "description": "Custom tags added to the job for ease of search",
              "example": "{\"type\":\"logs\",\"env\":\"dev\"}",
              "type": "string"
            },
            "default": {},
            "description": "Custom tags added to the job for ease of search",
            "example": {
              "env": "dev",
              "type": "logs"
            },
            "type": "object"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this job is associated with.",
            "items": {
              "description": "The team IDs that this job is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "execution",
          "jobGraph",
          "name",
          "processing"
        ],
        "type": "object"
      },
      "CreateLogsBackfillJob": {
        "description": "Parameters for a logs backfill.",
        "properties": {
          "dataType": {
            "description": "Selects the built-in logs backfill template.",
            "enum": [
              "logs"
            ],
            "type": "string"
          },
          "datasetId": {
            "description": "The dataset the backfill reads from and the dedup sinks track delivery in.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of the time interval to backfill.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 500000,
            "description": "Maximum number of rows to backfill. Default and max is 500,000. For spans this applies independently to each vendor source. A negative value means no limit.",
            "example": 100000,
            "format": "int32",
            "maximum": 500000,
            "type": "integer"
          },
          "name": {
            "description": "Name of the backfill job. Must match the job name pattern [a-z0-9_]{1,128}.",
            "example": "manual_backfill_1",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "sinks": {
            "description": "The vendor sink operations that deliver the backfilled events. Passed through verbatim, matching the sinks a rule action would carry.",
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "start": {
            "description": "Start of the time interval to backfill, inclusive.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "tags": {
            "additionalProperties": {
              "description": "Custom tags added to the backfill job for ease of search.",
              "example": "{\"source\":\"manual\"}",
              "type": "string"
            },
            "default": {},
            "description": "Custom tags added to the backfill job for ease of search.",
            "example": {
              "source": "manual"
            },
            "type": "object"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that the backfill job is associated with.",
            "items": {
              "description": "The team IDs that the backfill job is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables used to modify the query while it is parsed.",
            "type": "object"
          },
          "vendorSinkIntegrationIds": {
            "default": [],
            "description": "Vendor integration IDs, if any, whose prior delivery the backfill skips: exactly the integrations the sinks send to, or empty. Also gates concurrent overlapping backfills. Empty (the default) does no per-vendor dedup join and never blocks on other backfills.",
            "items": {
              "description": "Vendor integration IDs, if any, whose prior delivery the backfill skips: exactly the integrations the sinks send to, or empty. Also gates concurrent overlapping backfills. Empty (the default) does no per-vendor dedup join and never blocks on other backfills.",
              "pattern": "[a-z0-9]{1,13}",
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "dataType",
          "datasetId",
          "end",
          "name",
          "query",
          "sinks",
          "start"
        ],
        "type": "object"
      },
      "CreateRole": {
        "properties": {
          "description": {
            "description": "Description of the role",
            "maxLength": 500,
            "minLength": 0,
            "type": "string"
          },
          "name": {
            "description": "The name of the role",
            "maxLength": 50,
            "minLength": 3,
            "type": "string"
          },
          "permissionIds": {
            "default": [],
            "description": "Permission IDs to assign to this role",
            "example": [
              "perm_001",
              "perm_002"
            ],
            "items": {
              "description": "Permission IDs to assign to this role",
              "example": "[\"perm_001\",\"perm_002\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "description",
          "name",
          "permissionIds"
        ],
        "type": "object"
      },
      "CreateServiceAccount": {
        "description": "Request to create a service account",
        "properties": {
          "name": {
            "description": "Display name for the service account",
            "example": "Production API Access",
            "type": "string"
          },
          "roleIds": {
            "default": [],
            "description": "List of role IDs to assign to the service account",
            "example": [
              "rol_AlphaNum1234",
              "rol_alphaNum5678"
            ],
            "items": {
              "description": "List of role IDs to assign to the service account",
              "example": "[\"rol_AlphaNum1234\",\"rol_alphaNum5678\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "name",
          "roleIds"
        ],
        "type": "object"
      },
      "CreateSkillRequest": {
        "properties": {
          "displayName": {
            "maxLength": 120,
            "minLength": 0,
            "type": "string"
          },
          "files": {
            "items": {
              "$ref": "#/components/schemas/SkillFile"
            },
            "maxItems": 25,
            "minItems": 1,
            "type": "array"
          },
          "toolIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "displayName",
          "files",
          "toolIds"
        ],
        "type": "object"
      },
      "CreateSpansBackfillJob": {
        "description": "Parameters for a spans backfill.",
        "properties": {
          "dataType": {
            "description": "Selects the built-in spans backfill template.",
            "enum": [
              "spans"
            ],
            "type": "string"
          },
          "datasetId": {
            "description": "The dataset the backfill reads from and the dedup sinks track delivery in.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of the time interval to backfill.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 500000,
            "description": "Maximum number of rows to backfill. Default and max is 500,000. For spans this applies independently to each vendor source. A negative value means no limit.",
            "example": 100000,
            "format": "int32",
            "maximum": 500000,
            "type": "integer"
          },
          "name": {
            "description": "Name of the backfill job. Must match the job name pattern [a-z0-9_]{1,128}.",
            "example": "manual_backfill_1",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "sinks": {
            "description": "The vendor sink operations that deliver the backfilled events. Passed through verbatim, matching the sinks a rule action would carry.",
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "sqlOperation": {
            "$ref": "#/components/schemas/SqlOperation"
          },
          "start": {
            "description": "Start of the time interval to backfill, inclusive.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "tags": {
            "additionalProperties": {
              "description": "Custom tags added to the backfill job for ease of search.",
              "example": "{\"source\":\"manual\"}",
              "type": "string"
            },
            "default": {},
            "description": "Custom tags added to the backfill job for ease of search.",
            "example": {
              "source": "manual"
            },
            "type": "object"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that the backfill job is associated with.",
            "items": {
              "description": "The team IDs that the backfill job is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables used to modify the query while it is parsed.",
            "type": "object"
          }
        },
        "required": [
          "dataType",
          "datasetId",
          "end",
          "name",
          "query",
          "sinks",
          "start"
        ],
        "type": "object"
      },
      "CreateUser": {
        "properties": {
          "email": {
            "description": "The email associated with the user.",
            "type": "string"
          },
          "firstName": {
            "description": "The first name of the user.",
            "type": "string"
          },
          "lastName": {
            "description": "The last name of the user.",
            "type": "string"
          },
          "password": {
            "$ref": "#/components/schemas/SecretApi"
          },
          "roleIds": {
            "description": "The roles associated with this user.",
            "example": [
              "rol_AlphaNum1234",
              "rol_alphaNum5678"
            ],
            "items": {
              "description": "The roles associated with this user.",
              "example": "[\"rol_AlphaNum1234\",\"rol_alphaNum5678\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "email",
          "firstName",
          "lastName",
          "password",
          "roleIds"
        ],
        "type": "object"
      },
      "CreateVendorEstimationRunRequest": {
        "properties": {
          "scopeQuery": {
            "description": "Vendor query limiting the estimate to part of the customer\u0027s traffic. Applied to both the matched count and the total. Leave empty for all logs.",
            "example": "service:broker-* AND env:prod",
            "type": "string"
          },
          "windowEnd": {
            "description": "Absolute end of the window to count over; must be after the start and not in the future",
            "format": "date-time",
            "type": "string"
          },
          "windowStart": {
            "description": "Absolute start of the window to count over",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "windowEnd",
          "windowStart"
        ],
        "type": "object"
      },
      "CriticalPathAnalysisConfig": {
        "description": "Opt-in critical-path analysis settings. Computed during trace assembly; requires tail sampling. The maxSpans and sampleRate levers bound the per-trace cost.",
        "properties": {
          "maxSpans": {
            "description": "Cap on how many spans are analyzed per trace; the critical chain is kept first. Null means no cap beyond the global per-trace assembly limit.",
            "example": 500,
            "format": "int32",
            "minimum": 1,
            "title": "Max spans analyzed",
            "type": "integer"
          },
          "sampleRate": {
            "default": 1.0,
            "description": "Fraction of assembled traces to analyze, in [0.0, 1.0], selected deterministically by trace id. Defaults to 1.0 (analyze every trace).",
            "example": 1.0,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Analysis sample rate",
            "type": "number"
          }
        },
        "title": "Critical Path Analysis",
        "type": "object"
      },
      "DailyTable": {
        "description": "Daily-usage table.",
        "properties": {
          "current": {
            "description": "True when the reporting period contains today. Same semantic as PeriodEntry.current — the last entry of days[] represents an incomplete day, so consumers should mark it as in-progress.",
            "type": "boolean"
          },
          "days": {
            "default": [],
            "description": "The reporting period\u0027s days in ascending order.",
            "items": {
              "description": "The reporting period\u0027s days in ascending order.",
              "format": "date",
              "type": "string"
            },
            "type": "array"
          },
          "metrics": {
            "default": [],
            "description": "One usage series per metered dimension, in display order. Bricks absent from the configured displayed-brick list are skipped.",
            "items": {
              "$ref": "#/components/schemas/MeteredDimensionUsage"
            },
            "type": "array"
          }
        },
        "required": [
          "days",
          "metrics"
        ],
        "type": "object"
      },
      "Data": {
        "discriminator": {
          "propertyName": "resultType"
        },
        "properties": {
          "resultType": {
            "type": "string"
          }
        },
        "required": [
          "resultType"
        ],
        "type": "object"
      },
      "DataQuality": {
        "properties": {
          "embeddingFailures": {
            "format": "int64",
            "type": "integer"
          },
          "incompleteContentSessions": {
            "format": "int64",
            "type": "integer"
          },
          "labelFailures": {
            "format": "int64",
            "type": "integer"
          },
          "metadataOnlyEvents": {
            "format": "int64",
            "type": "integer"
          },
          "missingUsageSessions": {
            "format": "int64",
            "type": "integer"
          },
          "truncatedEvents": {
            "format": "int64",
            "type": "integer"
          },
          "warnings": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "DataWarehouse": {
        "description": "The payload containing integration data.",
        "type": "object",
        "x-type": {
          "type": "data-warehouse"
        }
      },
      "DatabaseUserInfo": {
        "properties": {
          "email": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "firstName",
          "lastName"
        ],
        "type": "object"
      },
      "Datadog": {
        "description": "The payload containing integration data.",
        "properties": {
          "additionalTags": {
            "default": [],
            "description": "Tags to add when writing data to Datadog",
            "example": [
              "tag1:value1",
              "tag2:value2"
            ],
            "items": {
              "description": "Tags to add when writing data to Datadog",
              "example": "[\"tag1:value1\",\"tag2:value2\"]",
              "type": "string"
            },
            "maxItems": 10,
            "minItems": 0,
            "type": "array"
          },
          "apiKey": {
            "description": "Masked API key for Datadog",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "apiKeys": {
            "description": "The API keys configured for this integration (masked).",
            "items": {
              "$ref": "#/components/schemas/IngestKeyView"
            },
            "readOnly": true,
            "type": "array"
          },
          "appKey": {
            "description": "Masked App key for Datadog",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "clientToken": {
            "description": "Client token for Datadog",
            "example": "************EN",
            "readOnly": true,
            "type": "string"
          },
          "dashboardFreshnessWindow": {
            "description": "The active dashboard threshold: only dashboards viewed within it are imported as parsed queries. When unset, every dashboard is imported. Minimum one day.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "exceptions": {
            "additionalProperties": {
              "$ref": "#/components/schemas/VendorImportedException"
            },
            "description": "The imported exceptions from Datadog. This is a map from the vendor resource Id to the exception.",
            "readOnly": true,
            "type": "object"
          },
          "filterQuery": {
            "default": "",
            "description": "Filter to apply when reading any data from the Datadog API",
            "example": "service:my-service",
            "maxLength": 1024,
            "minLength": 0,
            "type": "string"
          },
          "includeNeverViewedDashboards": {
            "default": true,
            "description": "When the active dashboard threshold is set, whether dashboards that were never viewed are still imported. Unset means they are.",
            "type": "boolean"
          },
          "sendKeyId": {
            "description": "Identifier of the API key used to send data back to Datadog. Defaults to the only key when unset.",
            "example": "k_7f3a",
            "maxLength": 64,
            "minLength": 0,
            "type": "string"
          },
          "site": {
            "description": "Datadog site URL",
            "example": "datadoghq.com",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API and App keys when saving the keys.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "additionalTags",
          "filterQuery",
          "site"
        ],
        "type": "object",
        "x-type": {
          "type": "datadog"
        }
      },
      "DatadogLogAgentSource": {
        "properties": {
          "hostEnrichmentEnabled": {
            "default": false,
            "type": "boolean"
          },
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offsetResetStrategy": {
            "default": "LATEST",
            "description": "Strategy for resetting Kafka consumer offset when no committed offset exists or has expired. EARLIEST reads from oldest available offset (prevents data loss on restart after retention period). LATEST skips to newest offset (current behavior).",
            "enum": [
              "EARLIEST",
              "LATEST",
              "NONE"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reads log events from Grepr\u0027s Datadog collection agent. This is used to pre-process logs before being sent to Datadog.",
            "enum": [
              "datadog-log-agent-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "DatadogLogCloudSource": {
        "properties": {
          "filterQuery": {
            "default": "",
            "description": "The Datadog query filter to use when reading logs from Datadog. This is concatenated with the one from the integration.",
            "example": "tag1,tag2",
            "maxLength": 1024,
            "minLength": 0,
            "type": "string"
          },
          "integrationId": {
            "description": "The Datadog integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Pulls log events from the Datadog cloud service for processing using a specified query.",
            "enum": [
              "datadog-log-cloud-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "DatadogLogSink": {
        "properties": {
          "additionalTags": {
            "default": [],
            "description": "Additional tags to add to the logs when writing to Datadog. Gets combined with the integration\u0027s additionalTags.",
            "example": [
              "additional_tag"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "browserLogGroupByAttributes": {
            "default": [],
            "description": "Group by attributes to use when writing logs to Datadog browser intake.Defaults to [\"http.useragent\", \"network.client.ip\"].",
            "example": [
              "http.useragent",
              "network.client.ip"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "hostFieldNames": {
            "default": [],
            "description": "Top-level JSON field names to write the host to. Datadog only maps one of these onto the log\u0027s host if the name is in the destination organization\u0027s \"Preprocessing for JSON logs -\u003e Host attributes\" list, so an organization that has removed the default entry needs this overridden. Defaults to [\"hostname\"].",
            "example": [
              "hostname",
              "host"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "integrationId": {
            "description": "The Datadog integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes processed events to Datadog.",
            "enum": [
              "datadog-log-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "DatadogMcp": {
        "description": "The payload containing integration data.",
        "properties": {
          "apiKey": {
            "description": "Masked API key for the MCP server.",
            "readOnly": true,
            "type": "string"
          },
          "appKey": {
            "description": "Masked Application key for the Datadog MCP server.",
            "readOnly": true,
            "type": "string"
          },
          "serverUrl": {
            "description": "MCP server endpoint URL.",
            "example": "https://mcp.notion.so/v1",
            "type": "string"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "serverUrl"
        ],
        "type": "object",
        "x-type": {
          "type": "datadog-mcp"
        }
      },
      "DatadogMetricsSink": {
        "properties": {
          "additionalTags": {
            "default": [],
            "description": "Additional tags to add to the logs when writing to Datadog. Gets combined with the integration\u0027s additionalTags.",
            "example": [
              "env:dev"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "integrationId": {
            "description": "The Datadog integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes processed metrics to Datadog.",
            "enum": [
              "datadog-metrics-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "DatadogQueryPredicate": {
        "properties": {
          "query": {
            "default": "",
            "description": "The datadog query used by the predicate. See https://docs.datadoghq.com/tracing/trace_explorer/query_syntax",
            "example": "service:grepr-service-1",
            "type": "string"
          },
          "type": {
            "description": "A predicate that checks if an event matches a datadog query.",
            "enum": [
              "datadog-query"
            ],
            "type": "string"
          }
        },
        "required": [
          "query",
          "type"
        ],
        "type": "object"
      },
      "DatadogQueryRuleConfig": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PatternRuleConfig"
          },
          {
            "properties": {
              "baselineMultiplier": {
                "description": "Multiplier applied to baseline rate. Effective threshold \u003d baselineRate * baselineMultiplier.",
                "example": 5.0,
                "format": "double",
                "type": "number"
              },
              "baselineRate": {
                "description": "Baseline rate (events/min) from historical data.",
                "example": 2.5,
                "format": "double",
                "type": "number"
              },
              "effectiveThreshold": {
                "format": "double",
                "type": "number"
              },
              "enabled": {
                "default": true,
                "type": "boolean"
              },
              "originatingLlmPromptOperatorName": {
                "description": "Name of the LLM prompt operator that created this rule. Used to route trigger actions back to the originating prompt.",
                "type": "string"
              },
              "query": {
                "description": "Datadog logs search syntax for matching events. See https://docs.datadoghq.com/logs/explorer/search_syntax/",
                "example": "service:demo-service status:error",
                "type": "string"
              },
              "rateThreshold": {
                "default": 10.0,
                "description": "Rate threshold (events/min) above which the rule triggers. If baselineMultiplier and baselineRate are both set, the effective threshold is baselineRate * baselineMultiplier instead.",
                "example": 10.0,
                "format": "double",
                "type": "number"
              },
              "triggerPrompt": {
                "description": "Prompt sent to the LLM when this rule triggers. Supports template variables: {{rate}}, {{threshold}}, {{query}}, {{baselineRate}}, {{baselineMultiplier}}.",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "Rule that monitors events matching a Datadog query and fires when rate exceeds a threshold.",
        "required": [
          "query",
          "triggerPrompt"
        ],
        "type": "object"
      },
      "DatadogStatsSink": {
        "description": "Forwards Datadog stats payloads to the Datadog platform for accurate RED metrics. Stats are pre-computed by the Datadog agent and bypass all processing.",
        "properties": {
          "additionalTags": {
            "additionalProperties": {
              "description": "Additional tags to add to stats when writing to Datadog. Gets combined with the integration\u0027s and global additionalTags.",
              "example": "{\"env\":\"prod\",\"team\":\"platform\"}",
              "type": "string"
            },
            "default": {},
            "description": "Additional tags to add to stats when writing to Datadog. Gets combined with the integration\u0027s and global additionalTags.",
            "example": {
              "env": "prod",
              "team": "platform"
            },
            "type": "object"
          },
          "integrationId": {
            "description": "Integration ID for Datadog connection",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes Datadog stats payloads to Datadog for accurate RED metrics.",
            "enum": [
              "datadog-stats-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "DatadogTraceAgentSource": {
        "properties": {
          "discardStats": {
            "default": false,
            "description": "Whether stats should be discarded instead of being forwarded to Datadog",
            "type": "boolean"
          },
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offsetResetStrategy": {
            "default": "LATEST",
            "description": "Strategy for resetting Kafka consumer offset when no committed offset exists or has expired. EARLIEST reads from oldest available offset (prevents data loss on restart after retention period). LATEST skips to newest offset (current behavior).",
            "enum": [
              "EARLIEST",
              "LATEST",
              "NONE"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reads dd_trace protos from Datadog Agent. This is used to process traces from Datadog.",
            "enum": [
              "datadog-trace-agent-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "DatadogTraceSink": {
        "description": "Converts CompleteSpan objects to Datadog\u0027s native trace format and sends them to the Datadog platform.",
        "properties": {
          "additionalAttributes": {
            "additionalProperties": {
              "description": "Additional attributes to add to traces when writing to Datadog. Gets combined with the integration\u0027s additionalAttributes.",
              "example": "{\"env\":\"prod\",\"team\":\"platform\"}",
              "type": "string"
            },
            "default": {},
            "description": "Additional attributes to add to traces when writing to Datadog. Gets combined with the integration\u0027s additionalAttributes.",
            "example": {
              "env": "prod",
              "team": "platform"
            },
            "type": "object"
          },
          "integrationId": {
            "description": "Integration ID for Datadog connection",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes processed traces to Datadog in native format.",
            "enum": [
              "datadog-trace-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "DatasetCreate": {
        "properties": {
          "integrationId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this dataset is associated with.",
            "items": {
              "description": "The team IDs that this dataset is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "integrationId",
          "name"
        ],
        "type": "object"
      },
      "DatasetEstimationConfig": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "datasetId": {
            "readOnly": true,
            "type": "string"
          },
          "logLimit": {
            "default": 10000000,
            "description": "Maximum number of log messages to scan per estimation run.",
            "example": 10000000,
            "format": "int32",
            "maximum": 2147483647,
            "type": "integer"
          },
          "lookbackDuration": {
            "default": "PT1H",
            "description": "Time window of data to scan per estimation run. ISO-8601 duration format.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "organizationId": {
            "readOnly": true,
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "refreshPeriod": {
            "default": "PT168H",
            "description": "How often to recalculate impact percentages. ISO-8601 duration format.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "required": [
          "logLimit",
          "lookbackDuration",
          "refreshPeriod"
        ],
        "type": "object"
      },
      "DatasetRead": {
        "properties": {
          "id": {
            "type": "string"
          },
          "integrationId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "tables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/TableConfig"
            },
            "default": {},
            "description": "Per-table configuration overrides, keyed by table key (e.g. logs_raw). Absent entries use system defaults.",
            "type": "object"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this dataset is associated with.",
            "items": {
              "description": "The team IDs that this dataset is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "id",
          "integrationId",
          "name",
          "organizationId"
        ],
        "type": "object"
      },
      "DatasetUpdate": {
        "properties": {
          "name": {
            "type": "string"
          },
          "tables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/TableConfig"
            },
            "default": {},
            "description": "Per-table configuration overrides. Read-only here; use /datasets/{id}/{tableKey}/config to mutate.",
            "type": "object"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this dataset is associated with.",
            "items": {
              "description": "The team IDs that this dataset is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "DiscardingSink": {
        "description": "Sink that discards all of its input.",
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Sink that discards all of its input.",
            "enum": [
              "discarding-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "DoubleDatapoint": {
        "properties": {
          "metricName": {
            "type": "string"
          },
          "metricType": {
            "enum": [
              "UNSPECIFIED_DOUBLE",
              "GAUGE_DOUBLE",
              "RATE_DOUBLE",
              "COUNT_DOUBLE"
            ],
            "type": "string"
          },
          "tags": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            },
            "type": "object"
          },
          "timestampMillis": {
            "format": "int64",
            "type": "integer"
          },
          "timestampNanos": {
            "format": "int64",
            "type": "integer"
          },
          "value": {
            "format": "double",
            "type": "number"
          }
        },
        "type": "object"
      },
      "DropNode": {
        "description": "Terminal — discards every event reaching this node.",
        "type": "object"
      },
      "DropRule": {
        "description": "Drops matching series outright.",
        "properties": {
          "attributeFilters": {
            "additionalProperties": {
              "description": "Level-prefixed attribute key → glob pattern. All entries must match.",
              "example": "{\"resource.test\":\"true\"}",
              "type": "string"
            },
            "default": {},
            "description": "Level-prefixed attribute key → glob pattern. All entries must match.",
            "example": {
              "resource.test": "true"
            },
            "type": "object"
          },
          "metricName": {
            "$ref": "#/components/schemas/MetricNameFilter"
          }
        },
        "type": "object"
      },
      "EarliestReadingStrategy": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FileReadingStrategy"
          }
        ],
        "description": "Strategy to read all files from the beginning",
        "type": "object"
      },
      "EditIssueCommentRequest": {
        "description": "Replaces the body of a comment its author wrote; people only.",
        "properties": {
          "body": {
            "description": "The new markdown body.",
            "maxLength": 16384,
            "minLength": 0,
            "type": "string"
          },
          "version": {
            "description": "The version the edit was written against; a stale one is rejected with 409 and the current issue. Null edits against whatever is current.",
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "body"
        ],
        "type": "object"
      },
      "EffectivePartitionField": {
        "description": "Full effective partition spec, including system-controlled rows.",
        "properties": {
          "column": {
            "description": "Logical column the row partitions by (built-in name or bare tag key).",
            "type": "string"
          },
          "systemControlled": {
            "description": "Whether this row is system-controlled and cannot be edited.",
            "type": "boolean"
          },
          "transform": {
            "$ref": "#/components/schemas/PartitionTransform"
          }
        },
        "required": [
          "column",
          "systemControlled"
        ],
        "type": "object"
      },
      "EntityRef": {
        "description": "A reference to an Entity associated with produced telemetry.",
        "properties": {
          "descriptionKeys": {
            "description": "Descriptive (non-identifying) attribute keys of the entity. MAY change over the lifetime of the entity.",
            "example": [
              "service.version",
              "service.instance.id"
            ],
            "items": {
              "description": "Descriptive (non-identifying) attribute keys of the entity. MAY change over the lifetime of the entity.",
              "example": "[\"service.version\",\"service.instance.id\"]",
              "type": "string"
            },
            "type": "array"
          },
          "idKeys": {
            "description": "Attribute Keys that identify the entity. MUST not change during the lifetime of the entity.",
            "example": [
              "service.name",
              "service.namespace"
            ],
            "items": {
              "description": "Attribute Keys that identify the entity. MUST not change during the lifetime of the entity.",
              "example": "[\"service.name\",\"service.namespace\"]",
              "type": "string"
            },
            "type": "array"
          },
          "schemaUrl": {
            "description": "The Schema URL, if known. This is the identifier of the Schema that the entity data is recorded in.",
            "example": "https://opentelemetry.io/schemas/1.17.0",
            "type": "string"
          },
          "type": {
            "description": "Defines the type of the entity. MUST not change during the lifetime of the entity.",
            "example": "service",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ErrorDetails": {
        "properties": {
          "exception": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "EstimationDatasetSummary": {
        "properties": {
          "config": {
            "$ref": "#/components/schemas/DatasetEstimationConfig"
          },
          "datasetId": {
            "description": "Dataset this summary describes",
            "example": "ds-prod-1",
            "type": "string"
          },
          "datasetName": {
            "description": "Display name of the dataset",
            "example": "logs-prod",
            "type": "string"
          },
          "pipelines": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/PipelineRef"
            },
            "type": "array"
          }
        },
        "required": [
          "datasetId",
          "datasetName",
          "pipelines"
        ],
        "type": "object"
      },
      "EventAction": {
        "description": "Base class of all Event Actions",
        "discriminator": {
          "mapping": {
            "attribute-add-action": "#/components/schemas/AddToListAttributeAction",
            "attribute-merge-action": "#/components/schemas/MergeMapAttributeAction",
            "attribute-remove-action": "#/components/schemas/RemoveKeyAttributeAction",
            "tag-action": "#/components/schemas/TagAction"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/TagAction"
          },
          {
            "$ref": "#/components/schemas/RemoveKeyAttributeAction"
          },
          {
            "$ref": "#/components/schemas/MergeMapAttributeAction"
          },
          {
            "$ref": "#/components/schemas/AddToListAttributeAction"
          }
        ],
        "properties": {
          "order": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "EventActionRule": {
        "properties": {
          "actionPredicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "actions": {
            "default": [],
            "description": "Actions to take on a matching event.",
            "example": [
              {
                "tagKey": "hosts",
                "type": "tag-action",
                "values": [
                  "host1",
                  "host2"
                ]
              }
            ],
            "items": {
              "$ref": "#/components/schemas/EventAction"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "This takes event actions on events that match the actionPredicate when this rule is triggered.",
            "enum": [
              "event-rule"
            ],
            "type": "string"
          }
        },
        "required": [
          "actionPredicate",
          "actions",
          "type"
        ],
        "type": "object"
      },
      "EventDedupIcebergTableSink": {
        "properties": {
          "datasetId": {
            "description": "The id of the dataset to write to",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes event IDs to an Iceberg table to keep track of which events have been sent to a particular sink.",
            "enum": [
              "event-dedup-iceberg-table-sink"
            ],
            "type": "string"
          },
          "vendorSinkId": {
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "name",
          "type",
          "vendorSinkId"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "EventPredicate": {
        "description": "Predicate applied to rows before analytical aggregation.",
        "discriminator": {
          "mapping": {
            "and-predicate": "#/components/schemas/AndEventPredicate",
            "datadog-query": "#/components/schemas/DatadogQueryPredicate",
            "metric-predicate": "#/components/schemas/MetricEventPredicate",
            "newrelic-query": "#/components/schemas/NewRelicQueryPredicate",
            "nrql-query": "#/components/schemas/NrqlQueryPredicate"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AndEventPredicate"
          },
          {
            "$ref": "#/components/schemas/DatadogQueryPredicate"
          },
          {
            "$ref": "#/components/schemas/MetricEventPredicate"
          },
          {
            "$ref": "#/components/schemas/NewRelicQueryPredicate"
          },
          {
            "$ref": "#/components/schemas/NrqlQueryPredicate"
          }
        ],
        "properties": {
          "query": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "EventPredicateTrigger": {
        "properties": {
          "conditionIds": {
            "default": [],
            "description": "The ids for the conditions that are activated by this trigger.",
            "example": [
              "condition-1",
              "condition-2"
            ],
            "items": {
              "description": "The ids for the conditions that are activated by this trigger.",
              "example": "[\"condition-1\",\"condition-2\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "duration": {
            "description": "How long the conditions this trigger activates stay active. A condition expires at the trigger\u0027s time plus this duration. For an event-predicate trigger, that time is the processing time at which it matches an event. For an external-source trigger, it\u0027s the notification\u0027s timestamp. A firing that carries the same variables, with the same values, as the firing that started an active condition doesn\u0027t start another one, whatever its __timestamp: the active condition keeps the later of the two expiries, and its job actions don\u0027t run again. An event-predicate trigger adds __severity to each firing from a log event, so a firing from an event of another severity starts another condition, which runs the job actions again. The rule engine applies a condition\u0027s event actions only to events whose timestamp is before the expiry. Once processing time passes a condition\u0027s expiry, a cleanup retires it. The cleanup runs while the rule engine handles events and notifications, at most once a second, so until it runs, a late event stamped before the expiry still gets the condition\u0027s event actions. A retired condition applies to no event, whatever its timestamp, and the trigger firing after that starts a new condition, which runs its job actions again.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "type": {
            "description": "This is triggered by an event matching the given predicate.",
            "enum": [
              "event-predicate"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "description": "Map from variable names to paths for variables to extract from a matching event. If starting with \u0027@\u0027, the path indicates an attribute. Otherwise, it\u0027s a tag. The variable names must start with \u0027__\u0027 and be unique. Note that __timestamp (and __severity for logs) variable is automatically extracted from the respective top level fields of the matching event.",
              "example": "{\"__variable1\":\"tag1\",\"__variable2\":\"@attribute1\"}",
              "type": "string"
            },
            "default": {},
            "description": "Map from variable names to paths for variables to extract from a matching event. If starting with \u0027@\u0027, the path indicates an attribute. Otherwise, it\u0027s a tag. The variable names must start with \u0027__\u0027 and be unique. Note that __timestamp (and __severity for logs) variable is automatically extracted from the respective top level fields of the matching event.",
            "example": {
              "__variable1": "tag1",
              "__variable2": "@attribute1"
            },
            "type": "object"
          }
        },
        "required": [
          "conditionIds",
          "duration",
          "predicate",
          "type",
          "variables"
        ],
        "type": "object",
        "x-tags": [
          "Triggers"
        ]
      },
      "EventRecord": {
        "description": "A streaming event record. Records are newline-separated as per the chunked output standard. Each record will contain a \u0027state\u0027 field and potentially a \u0027data\u0027 field. When the state is \u0027RUNNING\u0027, the \u0027data\u0027 field will be valid. In all other states, the \u0027data\u0027 field will be null.",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ReadableData"
          },
          "heartbeatToken": {
            "description": "The token that should be used by the client to send a heartbeat back to the server. This will usually only be set for the \u0027HEARTBEAT\u0027 state. Heartbeats back from the client are only required when heartbeatToken is not null.",
            "type": "string"
          },
          "jobState": {
            "description": "The state of the job at the time of the record. Also indicates validity of the data field.",
            "enum": [
              "HEARTBEAT",
              "RUNNING",
              "FAILED",
              "FINISHED",
              "CANCELLED",
              "TIMED_OUT",
              "UNKNOWN",
              "SCANNED_MAX",
              "QUERY_TOO_LARGE"
            ],
            "type": "string"
          }
        },
        "required": [
          "jobState"
        ],
        "type": "object"
      },
      "ExactAttributesMergeStrategy": {
        "properties": {
          "type": {
            "description": "ExactAttributesMergeStrategy: If target is empty, incoming value is used. If target is already wildcard, it remains wildcard. If target and incoming are deeply equal, target remains unchanged. If target and incoming are different, target becomes the WILDCARD.",
            "enum": [
              "exact"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "ExceptionImpact": {
        "description": "Estimated passthrough for one parsed alert query against one dataset",
        "properties": {
          "measuredAt": {
            "description": "When the estimation run that produced this percentage completed. Absent when the age of the measurement is not known; that is not the same as freshly measured.",
            "example": "2026-09-09T04:15:00Z",
            "format": "date-time",
            "type": "string"
          },
          "percentage": {
            "description": "Estimated percentage of the dataset\u0027s raw log volume this query matches. Honouring the query as a pipeline exception passes approximately this share of the data through without aggregation.",
            "example": 4.27,
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "percentage"
        ],
        "type": "object"
      },
      "ExceptionUsage": {
        "description": "Usage the vendor reports for the source of one parsed query",
        "properties": {
          "lastViewedAt": {
            "description": "When the source was last viewed. Null means the vendor reports it was never viewed.",
            "example": "2026-09-20T14:05:00Z",
            "format": "date-time",
            "type": "string"
          },
          "totalViews": {
            "description": "How many times the source was viewed, as the vendor counts them. Datadog counts views since January 2025 and refreshes the count daily.",
            "example": 1204,
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ExceptionUsageResponse": {
        "description": "Usage the vendor reports for an integration\u0027s parsed queries",
        "properties": {
          "reportedTypes": {
            "description": "The parsed query exception types (values of a parsed query\u0027s exceptionType) the vendor reports usage for. Empty when the vendor reports none; a query of any other type has no usage to show.",
            "example": [
              "DATADOG_DASHBOARD"
            ],
            "items": {
              "description": "The parsed query exception types (values of a parsed query\u0027s exceptionType) the vendor reports usage for. Empty when the vendor reports none; a query of any other type has no usage to show.",
              "example": "[\"DATADOG_DASHBOARD\"]",
              "type": "string"
            },
            "type": "array"
          },
          "status": {
            "$ref": "#/components/schemas/UsageStatus"
          },
          "usage": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ExceptionUsage"
            },
            "description": "Usage keyed by composite exception id (integrationId:vendorResourceId:exceptionType), the key the impacts endpoint uses. A query the vendor reported nothing for is absent, which is not the same as never viewed.",
            "type": "object"
          }
        },
        "required": [
          "reportedTypes",
          "status",
          "usage"
        ],
        "type": "object"
      },
      "ExternalSourceTrigger": {
        "properties": {
          "conditionIds": {
            "default": [],
            "description": "The ids for the conditions that are activated by this trigger.",
            "example": [
              "condition-1, condition-2"
            ],
            "items": {
              "description": "The ids for the conditions that are activated by this trigger.",
              "example": "[\"condition-1, condition-2\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "duration": {
            "description": "How long the conditions this trigger activates stay active. A condition expires at the trigger\u0027s time plus this duration. For an event-predicate trigger, that time is the processing time at which it matches an event. For an external-source trigger, it\u0027s the notification\u0027s timestamp. A firing that carries the same variables, with the same values, as the firing that started an active condition doesn\u0027t start another one, whatever its __timestamp: the active condition keeps the later of the two expiries, and its job actions don\u0027t run again. An event-predicate trigger adds __severity to each firing from a log event, so a firing from an event of another severity starts another condition, which runs the job actions again. The rule engine applies a condition\u0027s event actions only to events whose timestamp is before the expiry. Once processing time passes a condition\u0027s expiry, a cleanup retires it. The cleanup runs while the rule engine handles events and notifications, at most once a second, so until it runs, a late event stamped before the expiry still gets the condition\u0027s event actions. A retired condition applies to no event, whatever its timestamp, and the trigger firing after that starts a new condition, which runs its job actions again.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "type": {
            "description": "This trigger is activated by an external source, for eg: an API call from an observability tool.",
            "enum": [
              "event-predicate"
            ],
            "type": "string"
          }
        },
        "required": [
          "conditionIds",
          "duration",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Triggers"
        ]
      },
      "ExternalTriggerPayload": {
        "description": "Payload that define attributes that will fire an external source trigger.",
        "properties": {
          "jobId": {
            "description": "ID of the job that the trigger is meant for.",
            "example": "ABC0123D4",
            "type": "string"
          },
          "logsRuleEngineName": {
            "description": "Name of the rule engine that will process the trigger. This must exist in the corresponding Grepr job graph.",
            "example": "logs-rule-engine",
            "type": "string"
          },
          "triggerId": {
            "description": "ID of the external source trigger that should be triggered. This must exist in the Logs Rule Engine configuration of the corresponding job",
            "example": "trigger-1",
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "description": "Variables needed by the conditions that get activated when the corresponding triggers gets fired. ",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "jobId",
          "logsRuleEngineName",
          "triggerId"
        ],
        "type": "object"
      },
      "FileFormat": {
        "description": "Describes the file format to read from.",
        "discriminator": {
          "propertyName": "type"
        },
        "properties": {
          "mapper": {
            "$ref": "#/components/schemas/LogEventMapper"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "FileReadingStrategy": {
        "default": "latest",
        "description": "The file reading strategy will determine how files are enumerated. Timestamp reading strategy will only read files created after the specified timestamp. Latest reading strategy will only read files created after the job start time.",
        "discriminator": {
          "propertyName": "type"
        },
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "FilterPrimitive": {
        "description": "Combined metric-name + attribute-value filter.",
        "properties": {
          "attributeFilters": {
            "additionalProperties": {
              "description": "Level-prefixed attribute key → glob pattern. All entries must match.",
              "example": "{\"resource.env\":\"prod\"}",
              "type": "string"
            },
            "default": {},
            "description": "Level-prefixed attribute key → glob pattern. All entries must match.",
            "example": {
              "resource.env": "prod"
            },
            "type": "object"
          },
          "metricName": {
            "$ref": "#/components/schemas/MetricNameFilter"
          }
        },
        "type": "object"
      },
      "FinishAssignmentRequest": {
        "description": "Marks the caller\u0027s own assignment done. To pick the work up again, join the issue again.",
        "properties": {
          "note": {
            "description": "What the caller did, or null.",
            "maxLength": 1000,
            "minLength": 0,
            "type": "string"
          },
          "version": {
            "description": "The version the finish was decided against, or null for whatever is current.",
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "FrontendConfig": {
        "properties": {
          "appBaseUrl": {
            "type": "string"
          },
          "billingEnabled": {
            "type": "boolean"
          },
          "flinkBaseUrl": {
            "type": "string"
          },
          "gtmContainerId": {
            "type": "string"
          },
          "intercomEnabled": {
            "type": "boolean"
          },
          "kafkaToolkitClusterName": {
            "type": "string"
          },
          "region": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Gemini": {
        "description": "The payload containing integration data.",
        "properties": {
          "apiKey": {
            "description": "Masked API key for Google Gemini",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "integrationMaxTokens": {
            "description": "Total tokens all agents using this integration may consume per max-tokens window. Null uses the default of 200,000,000.",
            "example": 200000000,
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "maxTokensWindowHours": {
            "description": "Length in hours of the UTC-aligned max tokens window; must be a divisor of 24. Null uses the default of 1.",
            "example": 24,
            "format": "int32",
            "maximum": 24,
            "minimum": 1,
            "type": "integer"
          },
          "supportsEmbedding": {
            "description": "Whether this provider offers an embeddings API and can back agent investigation memory.",
            "readOnly": true,
            "type": "boolean"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "type": "object",
        "x-type": {
          "type": "gemini"
        }
      },
      "GithubMcp": {
        "description": "The payload containing integration data.",
        "properties": {
          "apiKey": {
            "description": "Masked API key for the MCP server.",
            "readOnly": true,
            "type": "string"
          },
          "serverUrl": {
            "description": "MCP server endpoint URL.",
            "example": "https://mcp.notion.so/v1",
            "type": "string"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "serverUrl"
        ],
        "type": "object",
        "x-type": {
          "type": "github-mcp"
        }
      },
      "GreprApiKey": {
        "properties": {
          "apiKey": {
            "type": "string"
          }
        },
        "required": [
          "apiKey"
        ],
        "type": "object"
      },
      "GreprJobGraph": {
        "properties": {
          "edges": {
            "default": [],
            "description": "Edges that connect the vertices of the Grepr job graph",
            "example": [
              "source -\u003e sink"
            ],
            "items": {
              "description": "Edges that connect the vertices of the Grepr job graph",
              "example": "[\"source -\u003e sink\"]",
              "type": "string"
            },
            "type": "array"
          },
          "vertices": {
            "default": [],
            "description": "Operations that make up the vertices of the Grepr job graph",
            "example": [
              {
                "end": "2024-08-07T22:05:07Z",
                "integrationId": "0jn5rdc93r10t",
                "name": "source",
                "processing": "BATCH",
                "query": {
                  "query": "service:grepr-query",
                  "type": "datadog-query"
                },
                "start": "2024-08-07T22:00:07Z",
                "table": "logevent_raw_devpipeline",
                "type": "logs-iceberg-table-source"
              },
              {
                "name": "sink",
                "type": "logs-sync-sink"
              }
            ],
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "type": "array"
          }
        },
        "required": [
          "edges",
          "vertices"
        ],
        "type": "object"
      },
      "GreprMetricsSource": {
        "properties": {
          "additionalTags": {
            "additionalProperties": {
              "default": {},
              "description": "Additional tags to add to the metrics while loading.",
              "example": {
                "metric_source": [
                  "grepr"
                ]
              },
              "items": {
                "default": "{}",
                "description": "Additional tags to add to the metrics while loading.",
                "example": "{\"metric_source\":[\"grepr\"]}",
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            },
            "default": {},
            "description": "Additional tags to add to the metrics while loading.",
            "example": {
              "metric_source": [
                "grepr"
              ]
            },
            "type": "object"
          },
          "metrics": {
            "default": [],
            "description": "The list of metrics to load. Will load all possible metrics if nothing is specified",
            "items": {
              "enum": [
                "table_totalBytes",
                "job_operator_numRecordsIn",
                "job_operator_numRecordsOut",
                "job_operator_numRecordsInPerSecond",
                "job_operator_numRecordsOutPerSecond",
                "job_operator_numRecordsSend"
              ],
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Reads metric events from Grepr for processing.",
            "enum": [
              "grepr-metrics-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "GreprPipe": {
        "description": "The payload containing integration data.",
        "type": "object",
        "x-type": {
          "type": "grepr-pipe"
        }
      },
      "GreprPipeLogSink": {
        "description": "Writes log events into a Grepr pipe integration.",
        "properties": {
          "integrationId": {
            "description": "Destination Grepr pipe integration in the pipeline\u0027s organization.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "enum": [
              "grepr-pipe-log-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "GreprPipeLogSource": {
        "properties": {
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offsetResetStrategy": {
            "default": "LATEST",
            "description": "Strategy for resetting Kafka consumer offset when no committed offset exists or has expired. EARLIEST reads from oldest available offset (prevents data loss on restart after retention period). LATEST skips to newest offset (current behavior).",
            "enum": [
              "EARLIEST",
              "LATEST",
              "NONE"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reads log events that other pipelines write into a Grepr pipe.",
            "enum": [
              "grepr-pipe-log-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "GreprRawLogsSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads raw log events using Grepr\u0027s internal query system from an Iceberg Table without pattern enrichment.",
            "enum": [
              "grepr-raw-log-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "GreprRawSpanSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads spans using Grepr\u0027s internal query system out of an Iceberg Table for processing.",
            "enum": [
              "grepr-raw-span-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "GreprReducerLogSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "processedLogsTableName": {
            "description": "The name of the table containing processed logs.",
            "example": "\"processed_logs\"",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "reductionInterval": {
            "default": "PT2M",
            "description": "The interval used by the Log Reducer for the query. Uses ISO 8601 format for intervals.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads events using Grepr\u0027s internal query system out of an Iceberg Table for processing.",
            "enum": [
              "grepr-reducer-log-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "reductionInterval",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "GreprUploadedLogFileSource": {
        "properties": {
          "format": {
            "$ref": "#/components/schemas/FileFormat"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Reads log files uploaded to Grepr using environment credentials. Intended for file uploads in draft mode.",
            "enum": [
              "grepr-uploaded-log-file-source"
            ],
            "type": "string"
          },
          "uploadId": {
            "description": "Unique identifier for the upload. The full S3 path will be constructed as uploaded_files/{organizationId}/{uploadId} to ensure customers can only access their own uploads. Use the uploadId returned by the file upload endpoint.",
            "example": "3f2b8c1e-9a4d-4e7b-8c2a-1d5e6f7a8b9c",
            "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",
            "type": "string"
          }
        },
        "required": [
          "format",
          "name",
          "type",
          "uploadId"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "GreprVendorSource": {
        "properties": {
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name"
        ],
        "type": "object"
      },
      "GrokParseBatchRequest": {
        "properties": {
          "grokParser": {
            "$ref": "#/components/schemas/GrokParser"
          },
          "logSamples": {
            "default": [],
            "description": "Log sample to parse using the provided Grok rules.",
            "example": "john id:12345 connected on 11/08/2017 on server XYZ in production",
            "items": {
              "description": "Log sample to parse using the provided Grok rules.",
              "example": "john id:12345 connected on 11/08/2017 on server XYZ in production",
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "grokParser",
          "logSamples"
        ],
        "type": "object"
      },
      "GrokParseBatchResponse": {
        "properties": {
          "results": {
            "items": {
              "$ref": "#/components/schemas/GrokParseResponse"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "GrokParseErrors": {
        "properties": {
          "errors": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/GrokRuleErrors"
            },
            "type": "array"
          }
        },
        "required": [
          "errors"
        ],
        "type": "object"
      },
      "GrokParseRequest": {
        "properties": {
          "grokParser": {
            "$ref": "#/components/schemas/GrokParser"
          },
          "logSample": {
            "description": "Log sample to parse using the provided Grok rules.",
            "example": "john id:12345 connected on 11/08/2017 on server XYZ in production",
            "type": "string"
          }
        },
        "required": [
          "grokParser",
          "logSample"
        ],
        "type": "object"
      },
      "GrokParseResponse": {
        "properties": {
          "attributes": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "description": "JSON object of the matched attributes.",
            "example": {
              "connect_date": "11/08/2017",
              "server": {
                "env": "production",
                "name": "XYZ"
              },
              "user": {
                "id": 12345,
                "name": "john"
              }
            },
            "type": "object"
          },
          "match": {
            "description": "Whether a rule matched the log message.",
            "type": "boolean"
          },
          "matchingRuleName": {
            "description": "Which rule matched the log message.",
            "type": "string"
          },
          "tags": {
            "additionalProperties": {
              "description": "JSON Object of the matched tags.",
              "example": {
                "tag1": [
                  "value1",
                  "value2"
                ],
                "tag2": [
                  "value3"
                ]
              },
              "items": {
                "description": "JSON Object of the matched tags.",
                "example": "{\"tag1\":[\"value1\",\"value2\"],\"tag2\":[\"value3\"]}",
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            },
            "description": "JSON Object of the matched tags.",
            "example": {
              "tag1": [
                "value1",
                "value2"
              ],
              "tag2": [
                "value3"
              ]
            },
            "type": "object"
          },
          "topLevelFields": {
            "additionalProperties": {
              "description": "JSON object of the top-level fields extracted from the Grok rule. Currently, only severity and eventTimestamp can be extracted as top-level fields.",
              "example": "{\"severity\":\"9\",\"eventTimestamp\":\"13201984190509\"}",
              "type": "string"
            },
            "description": "JSON object of the top-level fields extracted from the Grok rule. Currently, only severity and eventTimestamp can be extracted as top-level fields.",
            "example": {
              "eventTimestamp": "13201984190509",
              "severity": "9"
            },
            "type": "object"
          }
        },
        "required": [
          "attributes",
          "tags",
          "topLevelFields"
        ],
        "type": "object"
      },
      "GrokParser": {
        "properties": {
          "extractAttribute": {
            "description": "Optional attribute to extract. Does nothing if it does not refer to a string attribute. A dotted string, or an array of literal keys.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ]
          },
          "grokHelperRules": {
            "default": [],
            "example": [
              "user %{word:user.name} id:%{integer:user.id}",
              "connection connected on %{date(\"MM/dd/yyyy\"):connect_date}",
              "server on server %{notSpace:server.name} in %{notSpace:server.env}"
            ],
            "items": {
              "example": "[\"user %{word:user.name} id:%{integer:user.id}\",\"connection connected on %{date(\\\"MM/dd/yyyy\\\"):connect_date}\",\"server on server %{notSpace:server.name} in %{notSpace:server.env}\"]",
              "type": "string"
            },
            "type": "array"
          },
          "grokParsingRules": {
            "default": [],
            "description": "The Grok parser enriches log events by parsing unstructured text into structured attributes.",
            "example": [
              "MyParsingRule %{user} %{connection} %{server}"
            ],
            "items": {
              "description": "The Grok parser enriches log events by parsing unstructured text into structured attributes.",
              "example": "[\"MyParsingRule %{user} %{connection} %{server}\"]",
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "type": {
            "description": "Processes unstructured logs and extracts fields from them using Grok patterns.",
            "enum": [
              "grok-parser"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "GrokRuleError": {
        "properties": {
          "message": {
            "default": "",
            "type": "string"
          },
          "position": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "GrokRuleErrors": {
        "properties": {
          "rule": {
            "default": "",
            "type": "string"
          },
          "ruleErrors": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/GrokRuleError"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "HeadSamplingFilter": {
        "description": "Predicate that determines whether a span matches a head sampling rule.",
        "discriminator": {
          "propertyName": "type"
        },
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "Header": {
        "description": "A header with name and value",
        "example": [
          [
            "Host",
            "my_server"
          ],
          [
            "Accept-Language",
            "en-US"
          ],
          [
            "Accept-Language",
            "en;q\u003d0.9"
          ]
        ],
        "properties": {
          "name": {
            "description": "Header name",
            "example": "Accept-Language",
            "type": "string"
          },
          "value": {
            "description": "Header value",
            "example": "en-US",
            "type": "string"
          }
        },
        "required": [
          "name",
          "value"
        ],
        "type": "object"
      },
      "HostMetadataReporting": {
        "description": "Keep a vendor\u0027s host inventory in sync with the metric reduction.",
        "properties": {
          "aggregateCohortHosts": {
            "default": false,
            "description": "Collapse each cohort\u0027s real hosts into a single virtual cohort host.",
            "type": "boolean"
          },
          "integrationIds": {
            "default": [],
            "description": "Datadog integration IDs that receive the reported host metadata.",
            "items": {
              "description": "Datadog integration IDs that receive the reported host metadata.",
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array",
            "uniqueItems": true
          },
          "rehydrateAnomalousHosts": {
            "default": false,
            "description": "While an object is anomalous, re-report its real host to Datadog.",
            "type": "boolean"
          }
        },
        "required": [
          "integrationIds"
        ],
        "type": "object"
      },
      "HumanMemoryEdit": {
        "properties": {
          "entityTags": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "expectedRevision": {
            "format": "int32",
            "type": "integer"
          },
          "resolution": {
            "type": "string"
          },
          "rootCause": {
            "type": "string"
          },
          "rootCauseConfidence": {
            "enum": [
              "CONFIRMED",
              "SUSPECTED",
              "UNKNOWN"
            ],
            "type": "string"
          },
          "ruledOut": {
            "type": "string"
          },
          "significance": {
            "enum": [
              "INCIDENT",
              "OBSERVATION",
              "INCONCLUSIVE",
              "BENIGN"
            ],
            "type": "string"
          },
          "symptoms": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "entityTags",
          "expectedRevision",
          "significance",
          "title"
        ],
        "type": "object"
      },
      "IcebergLogsReplaySource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Replays log events from an Iceberg table at their original ingestion rate using receivedTimestamp for timing.",
            "enum": [
              "logs-iceberg-replay-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "IgnoreAttributesMergeStrategy": {
        "properties": {
          "type": {
            "description": "IgnoreAttributesMergeStrategy: Does nothing during merge - leaves the current value unchanged. Used internally for suffixed keys managed by CompositeAttributesMergeStrategy.",
            "enum": [
              "ignore"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "ImpactEstimationTemplateInput": {
        "description": "Schema for the impact estimation job graph.",
        "properties": {
          "checkTime": {
            "description": "Time of the estimation check recorded on the LogCounter.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "datasetId": {
            "description": "The dataset the estimation reads from and scopes the impact propagation to.",
            "type": "string"
          },
          "end": {
            "description": "End of the time interval to scan, inclusive.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "logLimit": {
            "description": "Maximum total number of log messages to process for the estimation.",
            "format": "int32",
            "type": "integer"
          },
          "organizationId": {
            "description": "Organization the estimation runs for; used to route impact updates.",
            "type": "string"
          },
          "predicates": {
            "description": "The query predicates the LogCounter counts matches against.",
            "items": {
              "$ref": "#/components/schemas/EventPredicate"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "start": {
            "description": "Start of the time interval to scan, inclusive.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "checkTime",
          "datasetId",
          "end",
          "logLimit",
          "organizationId",
          "predicates",
          "query",
          "start"
        ],
        "title": "Inputs Schema",
        "type": "object"
      },
      "IngestKeyView": {
        "description": "The API keys configured for this integration (masked).",
        "properties": {
          "keyId": {
            "description": "Opaque identifier of the API key",
            "example": "k_7f3a",
            "type": "string"
          },
          "label": {
            "description": "User-supplied display name for the key, purely informational",
            "type": "string"
          },
          "maskedValue": {
            "description": "Masked value of the API key",
            "example": "**************a1",
            "type": "string"
          },
          "sendKey": {
            "description": "Whether this key is used to send data back to the vendor",
            "type": "boolean"
          }
        },
        "readOnly": true,
        "type": "object"
      },
      "InstrumentationScope": {
        "description": "Instrumentation scope information describing the library/framework that produced the telemetry.",
        "properties": {
          "attributes": {
            "$ref": "#/components/schemas/Variant"
          },
          "droppedAttributesCount": {
            "description": "Number of attributes that were dropped due to limits.",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "description": "Name of the instrumentation scope (e.g., library name).",
            "example": "io.opentelemetry.contrib.mongodb",
            "type": "string"
          },
          "version": {
            "description": "Version of the instrumentation scope (e.g., library version).",
            "example": "1.0.0",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IntegrationExceptionConfig": {
        "properties": {
          "autoSync": {
            "default": false,
            "description": "When enabled, the exceptions list will be updated automatically based on the integration\u0027s exceptions.",
            "example": false,
            "title": "Automatically sync Exceptions from Integration",
            "type": "boolean"
          },
          "autosyncPassthroughRateThreshold": {
            "description": "Maximum impact percentage threshold for autosync (0.0 to 100.0). When set, only exceptions with impact percentage \u003c\u003d threshold are auto-included.",
            "example": 25.0,
            "format": "double",
            "maximum": 100,
            "minimum": 0,
            "type": "number"
          },
          "datasetId": {
            "description": "Dataset against which the auto-sync impact threshold is evaluated. Required for threshold filtering to apply; when null, no exceptions bypass via auto-sync.",
            "example": "0n1fhg95fhgp2",
            "title": "Dataset ID for auto-sync threshold",
            "type": "string"
          },
          "ids": {
            "default": [],
            "items": {
              "description": "This is a list of exception IDs to include or exclude from the imported exceptions. If autoSync is true, this list will be used to exclude exceptions, otherwise it will be used to include exceptions, from the exceptions in the associated integration.",
              "example": "[id1, id2]",
              "title": "Inclusion/Exclusion list of exceptions",
              "type": "string"
            },
            "type": "array"
          },
          "integrationId": {
            "description": "The ID of the integration associated with this exception configuration.",
            "example": "0kk67gfs56a",
            "title": "Integration ID",
            "type": "string"
          }
        },
        "required": [
          "integrationId"
        ],
        "type": "object"
      },
      "IntegrationExceptionsList": {
        "description": "Paginated list of vendor imported exceptions for an integration",
        "properties": {
          "exceptions": {
            "$ref": "#/components/schemas/ItemsCollectionVendorImportedException"
          },
          "hasMore": {
            "description": "Whether there are more pages available",
            "type": "boolean"
          },
          "page": {
            "description": "Current page number (0-based)",
            "format": "int32",
            "type": "integer"
          },
          "pageSize": {
            "description": "Number of items per page",
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "Intent": {
        "properties": {
          "description": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "miscellaneous": {
            "type": "boolean"
          },
          "percentage": {
            "format": "double",
            "type": "number"
          },
          "sessions": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "InvestigationAction": {
        "properties": {
          "description": {
            "type": "string"
          },
          "toolCallId": {
            "type": "string"
          },
          "toolName": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "InvestigationSummary": {
        "properties": {
          "actions": {
            "items": {
              "$ref": "#/components/schemas/InvestigationAction"
            },
            "type": "array"
          },
          "agentId": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "endedAt": {
            "format": "date-time",
            "type": "string"
          },
          "inputTokens": {
            "format": "int32",
            "type": "integer"
          },
          "investigationId": {
            "type": "string"
          },
          "live": {
            "type": "boolean"
          },
          "outputTokens": {
            "format": "int32",
            "type": "integer"
          },
          "resumable": {
            "type": "boolean"
          },
          "startedAt": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "QUEUED",
              "RUNNING",
              "STOPPING",
              "CANCELLING",
              "STOPPED",
              "COMPLETED",
              "FAILED",
              "CANCELLED",
              "DISCARDED"
            ],
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "triggerSignals": {
            "items": {
              "$ref": "#/components/schemas/TriggerSignal"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "InvestigationTranscript": {
        "properties": {
          "actions": {
            "items": {
              "$ref": "#/components/schemas/InvestigationAction"
            },
            "type": "array"
          },
          "agentId": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "endedAt": {
            "format": "date-time",
            "type": "string"
          },
          "investigationId": {
            "type": "string"
          },
          "startedAt": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "QUEUED",
              "RUNNING",
              "STOPPING",
              "CANCELLING",
              "STOPPED",
              "COMPLETED",
              "FAILED",
              "CANCELLED",
              "DISCARDED"
            ],
            "type": "string"
          },
          "summary": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "InvestigationsList": {
        "properties": {
          "investigations": {
            "$ref": "#/components/schemas/ItemsCollectionInvestigationSummary"
          },
          "limit": {
            "format": "int32",
            "type": "integer"
          },
          "start": {
            "format": "int32",
            "type": "integer"
          },
          "total": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "InvitationsList": {
        "properties": {
          "invitations": {
            "$ref": "#/components/schemas/ItemsCollectionReadInvitation"
          },
          "limit": {
            "format": "int32",
            "type": "integer"
          },
          "start": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "Invitee": {
        "properties": {
          "email": {
            "type": "string"
          },
          "roleIds": {
            "default": [],
            "description": "Role IDs assigned to the invitation",
            "items": {
              "description": "Role IDs assigned to the invitation",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "teamAssignments": {
            "default": [],
            "description": "Team-specific role assignments",
            "items": {
              "$ref": "#/components/schemas/TeamAssignment"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "type": "object"
      },
      "Issue": {
        "description": "One durable problem or task on the organization\u0027s issue board.",
        "properties": {
          "closedAt": {
            "description": "When it closed, or null while open.",
            "format": "date-time",
            "type": "string"
          },
          "confidence": {
            "description": "How sure the reporter is that the problem is real.",
            "enum": [
              "CONFIRMED",
              "LIKELY",
              "UNVERIFIED"
            ],
            "type": "string"
          },
          "createdAt": {
            "description": "When it was filed.",
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "description": "The current understanding, in markdown, kept current rather than appended to.",
            "type": "string"
          },
          "duplicateOf": {
            "description": "The surviving issue, set exactly when resolved as `DUPLICATE`; null in a response when the reader can\u0027t see the survivor.",
            "type": "string"
          },
          "duplicateOfHidden": {
            "description": "True in a response whose reader can\u0027t see the surviving issue.",
            "type": "boolean"
          },
          "entities": {
            "additionalProperties": {
              "description": "The `entity:*` tags it concerns, the same vocabulary as memory tags, keys in lower case, sorted by key.",
              "type": "string"
            },
            "description": "The `entity:*` tags it concerns, the same vocabulary as memory tags, keys in lower case, sorted by key.",
            "type": "object"
          },
          "evidence": {
            "description": "Things a person can open to check the claim.",
            "items": {
              "$ref": "#/components/schemas/IssueEvidence"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "When the issue stops applying and closes as `EXPIRED`, or null.",
            "format": "date-time",
            "type": "string"
          },
          "fingerprint": {
            "description": "An optional free-form key for exact-match search, or null.",
            "type": "string"
          },
          "firstSeenAt": {
            "description": "The first sighting, or null before any.",
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "description": "The issue id.",
            "type": "string"
          },
          "labels": {
            "description": "Categories, such as `cost`, sorted.",
            "items": {
              "description": "Categories, such as `cost`, sorted.",
              "type": "string"
            },
            "type": "array"
          },
          "lastSeenAt": {
            "description": "The latest sighting, or when it was filed.",
            "format": "date-time",
            "type": "string"
          },
          "links": {
            "description": "Related pipelines, investigations, memories, suggestions and external tickets.",
            "items": {
              "$ref": "#/components/schemas/IssueLink"
            },
            "type": "array"
          },
          "locks": {
            "$ref": "#/components/schemas/IssueLocks"
          },
          "nextStep": {
            "description": "The concrete next action and who it waits on, or null.",
            "type": "string"
          },
          "number": {
            "description": "The short per-organization handle, shown as `#142`.",
            "format": "int32",
            "type": "integer"
          },
          "occurrenceCount": {
            "description": "How many investigations sighted it.",
            "format": "int32",
            "type": "integer"
          },
          "priority": {
            "description": "How soon someone should act.",
            "enum": [
              "P0",
              "P1",
              "P2",
              "P3"
            ],
            "type": "string"
          },
          "regressed": {
            "description": "Whether it reopened on a new sighting after being fixed; cleared on its next close.",
            "type": "boolean"
          },
          "reporter": {
            "$ref": "#/components/schemas/IssueActor"
          },
          "resolution": {
            "description": "Why it closed; set exactly when `state` is `CLOSED`.",
            "enum": [
              "FIXED",
              "DUPLICATE",
              "NOT_A_PROBLEM",
              "IGNORED",
              "OBSOLETE",
              "EXPIRED"
            ],
            "type": "string"
          },
          "revisitAt": {
            "description": "When someone should check back, or null. Then a Monitoring issue\u0027s watcher is started on it, or, with no watcher, it goes back to `READY`.",
            "format": "date-time",
            "type": "string"
          },
          "state": {
            "description": "Where the issue is in its lifecycle.",
            "enum": [
              "TRIAGE",
              "READY",
              "IN_PROGRESS",
              "WAITING",
              "MONITORING",
              "CLOSED"
            ],
            "type": "string"
          },
          "stateChangedAt": {
            "description": "When the state last changed.",
            "format": "date-time",
            "type": "string"
          },
          "teamIds": {
            "description": "The teams that may see the issue, sorted.",
            "items": {
              "description": "The teams that may see the issue, sorted.",
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "description": "One line naming the problem.",
            "type": "string"
          },
          "updatedAt": {
            "description": "When it last changed.",
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "description": "Bumped by every change to a field, the state, an assignment, a lock or the teams.",
            "format": "int32",
            "type": "integer"
          },
          "watchedBy": {
            "description": "The agent watching it in `MONITORING`: the one that moved it there, started on it again when a sighting comes in or its revisit time passes. Null outside Monitoring.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueAccessScopes": {
        "description": "The issues the caller may view and edit. A client shows write controls from `edit`; the server still decides every request. An issue is in a scope when the scope is organization-wide, or when the issue names one of the scope\u0027s teams. An issue with no teams is only in organization-wide scopes. A person may give an issue the teams of their edit scope, or any team when it is organization-wide.",
        "properties": {
          "edit": {
            "$ref": "#/components/schemas/IssueScopeView"
          },
          "view": {
            "$ref": "#/components/schemas/IssueScopeView"
          }
        },
        "type": "object"
      },
      "IssueActor": {
        "description": "Who made a change to an issue. An agent is named by its own id and the investigation it acted in, never by the service account it authenticated as, since several agents may share one.",
        "properties": {
          "agentId": {
            "description": "The agent, for an agent actor; null otherwise.",
            "type": "string"
          },
          "id": {
            "description": "The person\u0027s user id, the agent\u0027s execution principal (its service account\u0027s token subject), or `system` for the server.",
            "type": "string"
          },
          "investigationId": {
            "description": "The investigation the agent acted in, for an agent actor; null otherwise.",
            "type": "string"
          },
          "kind": {
            "description": "A person, an agent, or the server.",
            "enum": [
              "PERSON",
              "AGENT",
              "SYSTEM"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueAssigneeFilter": {
        "description": "Whose active assignments a search matches. A deleted agent\u0027s assignment never counts, as it does not block a close.",
        "properties": {
          "id": {
            "description": "The agent\u0027s or person\u0027s id, for `AGENT` and `PERSON` only.",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          },
          "kind": {
            "description": "`ME` for the caller, `UNASSIGNED` for issues nobody is working on, or `AGENT`/`PERSON` for one assignee.",
            "enum": [
              "ME",
              "UNASSIGNED",
              "AGENT",
              "PERSON"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind"
        ],
        "type": "object"
      },
      "IssueAssigneeRef": {
        "description": "Someone working on an issue, as a search result names them.",
        "properties": {
          "id": {
            "description": "The person\u0027s id, or the agent\u0027s.",
            "type": "string"
          },
          "kind": {
            "description": "A person or an agent.",
            "enum": [
              "PERSON",
              "AGENT"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueAssignees": {
        "description": "An issue after a change to its assignees, with all of them.",
        "properties": {
          "assignments": {
            "description": "Its assignees, oldest first.",
            "items": {
              "$ref": "#/components/schemas/IssueAssignment"
            },
            "type": "array"
          },
          "issue": {
            "$ref": "#/components/schemas/Issue"
          }
        },
        "type": "object"
      },
      "IssueAssignment": {
        "description": "One assignee of an issue.",
        "properties": {
          "assignedBy": {
            "$ref": "#/components/schemas/IssueActor"
          },
          "assigneeDeleted": {
            "description": "Whether the assignee is an agent that has since been deleted; its assignment no longer keeps the issue out of Monitoring or Closed.",
            "type": "boolean"
          },
          "assigneeId": {
            "description": "The person\u0027s user id or the agent\u0027s id.",
            "type": "string"
          },
          "assigneeKind": {
            "description": "A person or an agent.",
            "enum": [
              "PERSON",
              "AGENT"
            ],
            "type": "string"
          },
          "createdAt": {
            "description": "When it was made.",
            "format": "date-time",
            "type": "string"
          },
          "investigationId": {
            "description": "For an agent\u0027s assignment, the run that made it active, which it ends with; null for a person\u0027s.",
            "type": "string"
          },
          "note": {
            "description": "A short note on its part, or null.",
            "type": "string"
          },
          "status": {
            "description": "Whether the assignee is still working on its part.",
            "enum": [
              "ACTIVE",
              "DONE"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "When it last changed.",
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueChannel": {
        "description": "How a change reached the server.",
        "enum": [
          "REST",
          "MCP",
          "SYSTEM"
        ],
        "type": "string"
      },
      "IssueComment": {
        "description": "A comment on an issue. A guidance comment, which only people write, is advice every later investigation on the issue\u0027s entities weighs; any other comment is a plain note.",
        "properties": {
          "author": {
            "$ref": "#/components/schemas/IssueActor"
          },
          "body": {
            "description": "The markdown body.",
            "type": "string"
          },
          "channel": {
            "$ref": "#/components/schemas/IssueChannel"
          },
          "createdAt": {
            "description": "When it was written.",
            "format": "date-time",
            "type": "string"
          },
          "editedAt": {
            "description": "When its author last changed the body, or null.",
            "format": "date-time",
            "type": "string"
          },
          "guidance": {
            "description": "Whether it is guidance, which agents weigh as advice.",
            "type": "boolean"
          },
          "guidanceSetAt": {
            "description": "When it was marked guidance, or null.",
            "format": "date-time",
            "type": "string"
          },
          "guidanceSetBy": {
            "description": "The user id of the person who marked it guidance, or null.",
            "type": "string"
          },
          "id": {
            "description": "The comment id.",
            "type": "string"
          },
          "issueId": {
            "description": "The issue it is on.",
            "type": "string"
          },
          "lockedFieldProposal": {
            "description": "The locked field the comment proposes changing, as named in a `FIELD_LOCKED` error (`priority`, `label:cost`), or null.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueCommentsPage": {
        "description": "A page of an issue\u0027s comments, newest first.",
        "properties": {
          "items": {
            "description": "The comments on this page.",
            "items": {
              "$ref": "#/components/schemas/IssueComment"
            },
            "type": "array"
          },
          "nextCursor": {
            "description": "Pass back as `cursor` for the next, older page; null on the last page.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueDetail": {
        "description": "An issue with what a person or agent needs to act on it.",
        "properties": {
          "assignments": {
            "description": "Its assignees.",
            "items": {
              "$ref": "#/components/schemas/IssueAssignment"
            },
            "type": "array"
          },
          "guidance": {
            "description": "Its newest guidance comments, oldest first: at most 20, and 32768 bytes of their bodies, though the newest is always there.",
            "items": {
              "$ref": "#/components/schemas/IssueComment"
            },
            "type": "array"
          },
          "guidanceOmitted": {
            "description": "How many older guidance comments that bound left out; `GET /v1/issues/{id}/comments` pages every comment.",
            "format": "int32",
            "type": "integer"
          },
          "guidanceReads": {
            "description": "For each current guidance comment that agents were given, the investigations it was delivered to; a comment no longer guidance is not listed.",
            "items": {
              "$ref": "#/components/schemas/IssueGuidanceReads"
            },
            "type": "array"
          },
          "issue": {
            "$ref": "#/components/schemas/Issue"
          },
          "recentComments": {
            "description": "Its latest comments, newest first, at most 20.",
            "items": {
              "$ref": "#/components/schemas/IssueComment"
            },
            "type": "array"
          },
          "recentEvents": {
            "description": "Its latest history entries, newest first, at most 20; `GET /v1/issues/{id}/events` pages older ones.",
            "items": {
              "$ref": "#/components/schemas/IssueEvent"
            },
            "type": "array"
          },
          "runs": {
            "description": "Its runs that haven\u0027t ended, oldest first: queued or working on it, handed, picked up or watching.",
            "items": {
              "$ref": "#/components/schemas/IssueRun"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "IssueErrorResponse": {
        "description": "The body of an issue API error. `code` is the HTTP status, as in every Grepr error body; `error` says why, so a client or agent can react without parsing the message.",
        "properties": {
          "code": {
            "description": "The HTTP status.",
            "format": "int32",
            "type": "integer"
          },
          "current": {
            "$ref": "#/components/schemas/Issue"
          },
          "error": {
            "description": "The machine-readable reason, such as VERSION_CONFLICT.",
            "type": "string"
          },
          "fields": {
            "description": "The locked fields, or the teams the caller cannot see or grant, when the error is about them.",
            "items": {
              "description": "The locked fields, or the teams the caller cannot see or grant, when the error is about them.",
              "type": "string"
            },
            "type": "array"
          },
          "message": {
            "description": "What went wrong, for a person.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueEvent": {
        "description": "One entry in an issue\u0027s history. Every change to an issue writes exactly one, in the same transaction, so the history cannot disagree with the issue.",
        "properties": {
          "actor": {
            "$ref": "#/components/schemas/IssueActor"
          },
          "channel": {
            "$ref": "#/components/schemas/IssueChannel"
          },
          "createdAt": {
            "description": "When it happened.",
            "format": "date-time",
            "type": "string"
          },
          "diff": {
            "additionalProperties": {
              "$ref": "#/components/schemas/IssueFieldChange"
            },
            "description": "Each changed field\u0027s value before and after, keyed by field name. The description carries only its new text; its previous text is the `to` of the issue\u0027s previous entry that changed it. A `COMMENTED` entry carries the comment\u0027s id as `comment.to`. A `CREATED` entry by an agent carries, as `entitiesFilled.to`, the entities the server filled from the agent\u0027s investigation, beside the complete `entities`; it is absent when nothing was filled.",
            "type": "object"
          },
          "id": {
            "description": "The event id.",
            "type": "string"
          },
          "issueId": {
            "description": "The issue that changed.",
            "type": "string"
          },
          "kind": {
            "description": "What kind of change it was.",
            "enum": [
              "CREATED",
              "UPDATED",
              "TRANSITIONED",
              "LOCKS_CHANGED",
              "COMMENTED",
              "GUIDANCE_CHANGED",
              "COMMENT_EDITED",
              "COMMENT_DELETED",
              "ASSIGNMENT_CHANGED",
              "OCCURRED",
              "HANDED_OFF",
              "RUN_NOT_STARTED"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueEventsPage": {
        "description": "A page of an issue\u0027s history, newest first.",
        "properties": {
          "items": {
            "description": "The entries on this page.",
            "items": {
              "$ref": "#/components/schemas/IssueEvent"
            },
            "type": "array"
          },
          "nextCursor": {
            "description": "Pass back as `cursor` for the next, older page; null on the last page.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueEvidence": {
        "description": "Something a person can open to check an issue\u0027s claim.",
        "properties": {
          "from": {
            "description": "Start of a log query\u0027s time range, or null.",
            "format": "date-time",
            "type": "string"
          },
          "kind": {
            "description": "What the evidence points at.",
            "enum": [
              "LOG_QUERY",
              "EVENT",
              "URL"
            ],
            "type": "string"
          },
          "label": {
            "description": "A short description of what it shows, or null.",
            "maxLength": 200,
            "minLength": 0,
            "type": "string"
          },
          "target": {
            "description": "The Grepr log query for LOG_QUERY, the event id for EVENT, or an http(s) URL for URL.",
            "maxLength": 4096,
            "minLength": 0,
            "type": "string"
          },
          "to": {
            "description": "End of a log query\u0027s time range, or null.",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "target"
        ],
        "type": "object"
      },
      "IssueFieldChange": {
        "description": "One field\u0027s value before and after a change, as JSON.",
        "properties": {
          "from": {
            "$ref": "#/components/schemas/JsonNode"
          },
          "to": {
            "$ref": "#/components/schemas/JsonNode"
          }
        },
        "type": "object"
      },
      "IssueFieldLock": {
        "description": "Who locked a field and when, so the UI can say \"set by Jad on Oct 3; agents can\u0027t change this\".",
        "properties": {
          "setAt": {
            "description": "When it was locked.",
            "format": "date-time",
            "type": "string"
          },
          "setBy": {
            "description": "The user id of the person whose write locked it.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueGuidanceRead": {
        "description": "One investigation whose agent was given a guidance comment: returned by its `get_issue`, or in the issue it was handed.",
        "properties": {
          "agentId": {
            "description": "The investigation\u0027s agent, or null when the investigation no longer exists.",
            "type": "string"
          },
          "investigationId": {
            "description": "The investigation.",
            "type": "string"
          },
          "readAt": {
            "description": "When the guidance was delivered.",
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueGuidanceReads": {
        "description": "The investigations a guidance comment was delivered to.",
        "properties": {
          "commentId": {
            "description": "The guidance comment.",
            "type": "string"
          },
          "latest": {
            "description": "The latest deliveries, newest first, at most 3.",
            "items": {
              "$ref": "#/components/schemas/IssueGuidanceRead"
            },
            "type": "array"
          },
          "readCount": {
            "description": "How many investigations it was delivered to.",
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "IssueLabelLock": {
        "description": "A person\u0027s lock on one label: agents may not remove a label a person added, or add back one a person removed.",
        "properties": {
          "setAt": {
            "description": "When it was locked.",
            "format": "date-time",
            "type": "string"
          },
          "setBy": {
            "description": "The user id of the person whose write locked it.",
            "type": "string"
          },
          "state": {
            "description": "Whether the person added or removed the label.",
            "enum": [
              "PRESENT",
              "ABSENT"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueLink": {
        "description": "A typed reference from an issue to something related. A link grants nothing: the linked page applies its own access checks. A link to an issue the reader can\u0027t see comes back with only its kind and `hidden`, so an issue reveals nothing about another team\u0027s.",
        "properties": {
          "hidden": {
            "description": "True for a link to an issue the reader can\u0027t see. Set only in responses.",
            "nullable": true,
            "type": "boolean"
          },
          "kind": {
            "description": "What the link points at.",
            "enum": [
              "PIPELINE",
              "INVESTIGATION",
              "MEMORY",
              "AGENT_SUGGESTION",
              "EXTERNAL",
              "ISSUE"
            ],
            "type": "string"
          },
          "label": {
            "description": "A short description, or null.",
            "maxLength": 200,
            "minLength": 0,
            "type": "string"
          },
          "target": {
            "description": "Null only for a hidden issue link in a response.",
            "maxLength": 4096,
            "minLength": 0,
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "kind"
        ],
        "type": "object"
      },
      "IssueLinkRef": {
        "description": "A linked object to find issues by, such as a pipeline or an investigation.",
        "properties": {
          "kind": {
            "description": "What the object is.",
            "enum": [
              "PIPELINE",
              "INVESTIGATION",
              "MEMORY",
              "AGENT_SUGGESTION",
              "EXTERNAL",
              "ISSUE"
            ],
            "type": "string"
          },
          "target": {
            "description": "Its id, or the URL for an external link.",
            "maxLength": 4096,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "kind",
          "target"
        ],
        "type": "object"
      },
      "IssueLocks": {
        "description": "The fields and labels people have locked against agent changes. `state` never locks.",
        "properties": {
          "fields": {
            "additionalProperties": {
              "$ref": "#/components/schemas/IssueFieldLock"
            },
            "description": "The locked fields, each with who locked it and when.",
            "type": "object"
          },
          "labels": {
            "additionalProperties": {
              "$ref": "#/components/schemas/IssueLabelLock"
            },
            "description": "The locked labels, keyed by label.",
            "type": "object"
          }
        },
        "type": "object"
      },
      "IssueRun": {
        "description": "A run started on the issue that hasn\u0027t ended: handed to its agent by a person, or picked up from Ready. It holds the issue until it ends.",
        "properties": {
          "agentId": {
            "description": "The run\u0027s agent.",
            "type": "string"
          },
          "investigationId": {
            "description": "The run\u0027s investigation id.",
            "type": "string"
          },
          "status": {
            "description": "Where the run is: QUEUED, RUNNING, STOPPING, CANCELLING, or STOPPED and resumable.",
            "enum": [
              "QUEUED",
              "RUNNING",
              "STOPPING",
              "CANCELLING",
              "STOPPED",
              "COMPLETED",
              "FAILED",
              "CANCELLED",
              "DISCARDED"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueScopeView": {
        "description": "Which issues a principal may act on for one action: every issue in the organization, or those naming one of these teams.",
        "properties": {
          "orgWide": {
            "description": "Whether the principal may act on every issue in the organization.",
            "type": "boolean"
          },
          "teamIds": {
            "description": "The teams whose issues the principal may act on, sorted; empty when `orgWide`.",
            "items": {
              "description": "The teams whose issues the principal may act on, sorted; empty when `orgWide`.",
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "IssueSummary": {
        "description": "A compact issue row for the board and search results: everything a card or a list shows, without the description, evidence, links and locks that `GET /v1/issues/{idOrNumber}` returns.",
        "properties": {
          "assignees": {
            "description": "Who is working on it, oldest first: active assignments, without a deleted agent\u0027s.",
            "items": {
              "$ref": "#/components/schemas/IssueAssigneeRef"
            },
            "type": "array"
          },
          "commentCount": {
            "description": "How many comments it has, guidance included.",
            "format": "int32",
            "type": "integer"
          },
          "confidence": {
            "description": "How sure the reporter is that the problem is real.",
            "enum": [
              "CONFIRMED",
              "LIKELY",
              "UNVERIFIED"
            ],
            "type": "string"
          },
          "duplicateOf": {
            "description": "The surviving issue, for a duplicate; null when the reader can\u0027t see it.",
            "type": "string"
          },
          "duplicateOfHidden": {
            "description": "True when the reader can\u0027t see the surviving issue.",
            "type": "boolean"
          },
          "entities": {
            "additionalProperties": {
              "description": "The `entity:*` tags it concerns.",
              "type": "string"
            },
            "description": "The `entity:*` tags it concerns.",
            "type": "object"
          },
          "expiresAt": {
            "description": "When it stops applying and closes, or null.",
            "format": "date-time",
            "type": "string"
          },
          "guidanceCount": {
            "description": "How many of its comments are guidance from people.",
            "format": "int32",
            "type": "integer"
          },
          "id": {
            "description": "The issue id.",
            "type": "string"
          },
          "labels": {
            "description": "Its categories.",
            "items": {
              "description": "Its categories.",
              "type": "string"
            },
            "type": "array"
          },
          "lastSeenAt": {
            "description": "The latest sighting, or when it was filed.",
            "format": "date-time",
            "type": "string"
          },
          "locked": {
            "description": "Whether people have locked any field or label against agent changes.",
            "type": "boolean"
          },
          "nextStep": {
            "description": "The concrete next action, or null.",
            "type": "string"
          },
          "number": {
            "description": "The short per-organization handle.",
            "format": "int32",
            "type": "integer"
          },
          "occurrenceCount": {
            "description": "How many investigations sighted it.",
            "format": "int32",
            "type": "integer"
          },
          "pipelineIds": {
            "description": "The pipelines it concerns: its pipeline links\u0027 targets, then its `entity:pipeline`, without repeats.",
            "items": {
              "description": "The pipelines it concerns: its pipeline links\u0027 targets, then its `entity:pipeline`, without repeats.",
              "type": "string"
            },
            "type": "array"
          },
          "priority": {
            "description": "How soon someone should act.",
            "enum": [
              "P0",
              "P1",
              "P2",
              "P3"
            ],
            "type": "string"
          },
          "regressed": {
            "description": "Whether it reopened after being fixed.",
            "type": "boolean"
          },
          "resolution": {
            "description": "Why it closed, or null while open.",
            "enum": [
              "FIXED",
              "DUPLICATE",
              "NOT_A_PROBLEM",
              "IGNORED",
              "OBSOLETE",
              "EXPIRED"
            ],
            "type": "string"
          },
          "revisitAt": {
            "description": "When someone should check back, or null.",
            "format": "date-time",
            "type": "string"
          },
          "runs": {
            "description": "Its runs that haven\u0027t ended, oldest first: queued or working on it, handed, picked up or watching.",
            "items": {
              "$ref": "#/components/schemas/IssueRun"
            },
            "type": "array"
          },
          "state": {
            "description": "Where the issue is in its lifecycle.",
            "enum": [
              "TRIAGE",
              "READY",
              "IN_PROGRESS",
              "WAITING",
              "MONITORING",
              "CLOSED"
            ],
            "type": "string"
          },
          "teamIds": {
            "description": "The teams that may see it.",
            "items": {
              "description": "The teams that may see it.",
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "description": "One line naming the problem.",
            "type": "string"
          },
          "updatedAt": {
            "description": "When it last changed.",
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "description": "Its current version, for a follow-up update.",
            "format": "int32",
            "type": "integer"
          },
          "watchedBy": {
            "description": "The agent watching it in Monitoring, or null.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueTitle": {
        "description": "One issue\u0027s number and title, as a titles read answers each id it was sent. An issue the reader can\u0027t see, or one that doesn\u0027t exist, comes back as `{hidden: true}` alone, so the answer names nothing about it.",
        "properties": {
          "hidden": {
            "description": "True when you can\u0027t see the issue, or it doesn\u0027t exist.",
            "nullable": true,
            "type": "boolean"
          },
          "id": {
            "description": "Null when hidden.",
            "nullable": true,
            "type": "string"
          },
          "number": {
            "description": "Null when hidden.",
            "format": "int32",
            "nullable": true,
            "type": "integer"
          },
          "title": {
            "description": "Null when hidden.",
            "nullable": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "IssueTitles": {
        "description": "The answer to a titles read.",
        "properties": {
          "issues": {
            "description": "One entry per id sent, in the order sent.",
            "items": {
              "$ref": "#/components/schemas/IssueTitle"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionAgentSuggestion": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/AgentSuggestion"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionInvestigationSummary": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/InvestigationSummary"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionLogEvent": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/LogEvent"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadAnthropic": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadAnthropic"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadDataWarehouse": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadDataWarehouse"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadDatadog": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadDatadog"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadDatadogMcp": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadDatadogMcp"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadGemini": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadGemini"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadGithubMcp": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadGithubMcp"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadGreprPipe": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadGreprPipe"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadInvitation": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadInvitation"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadJiraMcp": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadJiraMcp"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadJob": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ReadJob"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadLiteLlm": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadLiteLlm"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadNewRelic": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadNewRelic"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadOpenAi": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadOpenAi"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadOtlp": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadOtlp"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadPagerDutyMcp": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadPagerDutyMcp"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadS3DataWarehouse": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadS3DataWarehouse"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadS3VectorIndex": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadS3VectorIndex"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadSlackMcp": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadSlackMcp"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadSplunk": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadSplunk"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadSumo": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadSumo"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadUser": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadUser"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionReadWebhookIntegration": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReadWebhookIntegration"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionServiceAccountRead": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ServiceAccountRead"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionString": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionTemplate": {
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Template"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ItemsCollectionVendorImportedException": {
        "description": "Collection of vendor imported exceptions",
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/VendorImportedException"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "JiraMcp": {
        "description": "The payload containing integration data.",
        "properties": {
          "apiKey": {
            "description": "Masked API key for the MCP server.",
            "readOnly": true,
            "type": "string"
          },
          "serverUrl": {
            "description": "MCP server endpoint URL.",
            "example": "https://mcp.notion.so/v1",
            "type": "string"
          },
          "siteUrl": {
            "description": "Web URL of the Jira Cloud site, used to link to issues the agent writes (e.g. https://acme.atlassian.net).",
            "example": "https://acme.atlassian.net",
            "type": "string"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "serverUrl",
          "siteUrl"
        ],
        "type": "object",
        "x-type": {
          "type": "jira-mcp"
        }
      },
      "JobAction": {
        "description": "Base class of all Job Actions",
        "discriminator": {
          "mapping": {
            "backfill-job-action": "#/components/schemas/BackfillJobAction"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/BackfillJobAction"
          }
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "order": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "JobActionRule": {
        "properties": {
          "actions": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/JobAction"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "This takes job actions when the rule is triggered.",
            "enum": [
              "job-rule"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "JobAnomaly": {
        "properties": {
          "firstTriggeredAt": {
            "format": "date-time",
            "type": "string"
          },
          "jobId": {
            "type": "string"
          },
          "lastTriggeredAt": {
            "format": "date-time",
            "type": "string"
          },
          "ruleEngineName": {
            "type": "string"
          },
          "triggerId": {
            "type": "string"
          }
        },
        "required": [
          "jobId",
          "lastTriggeredAt",
          "ruleEngineName",
          "triggerId"
        ],
        "type": "object"
      },
      "JoinIssueRequest": {
        "description": "Joins an issue as an active assignee: an agent as itself, a person as themselves. Joining a Ready issue moves it to In progress; joining again after finishing makes the assignment active again.",
        "properties": {
          "note": {
            "description": "What the caller will do, or null.",
            "maxLength": 1000,
            "minLength": 0,
            "type": "string"
          },
          "version": {
            "description": "The version the join was decided against, or null for whatever is current.",
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "JsonFileFormat": {
        "description": "JSON file format.",
        "properties": {
          "charset": {
            "default": "UTF-8",
            "description": "Character set name such as UTF-8, UTF-16, etc.",
            "type": "string"
          },
          "mapper": {
            "$ref": "#/components/schemas/JsonLogEventMapper"
          },
          "recordsPath": {
            "default": [
              "items"
            ],
            "description": "Path to the list of log records.",
            "items": {
              "default": "[\"items\"]",
              "description": "Path to the list of log records.",
              "type": "string"
            },
            "type": "array"
          },
          "streamFormat": {
            "$ref": "#/components/schemas/StreamFormatAny"
          }
        },
        "type": "object"
      },
      "JsonLogEventMapper": {
        "description": "JSON-to-LogEvent mapper.",
        "type": "object"
      },
      "JsonLogProcessor": {
        "properties": {
          "liftFieldNames": {
            "default": [],
            "description": "Object-valued JSON fields whose children are lifted into the containing parsed object. An empty list disables lifting. Lifting repeats recursively when a lifted object contains another configured field. Colliding maps are merged recursively. For leaf values and all other type combinations, the lifted child replaces the existing value; arrays are not combined. If multiple configured fields contain the same child, the later field wins according to these rules.",
            "items": {
              "default": "[]",
              "description": "Object-valued JSON fields whose children are lifted into the containing parsed object. An empty list disables lifting. Lifting repeats recursively when a lifted object contains another configured field. Colliding maps are merged recursively. For leaf values and all other type combinations, the lifted child replaces the existing value; arrays are not combined. If multiple configured fields contain the same child, the later field wins according to these rules.",
              "type": "string"
            },
            "type": "array"
          },
          "maxNestedDepthForFields": {
            "default": 3,
            "format": "int32",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "maxNestedJsonIterations": {
            "default": 5,
            "description": "Maximum number of iterations to perform when resolving nested JSON fields.",
            "format": "int32",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "preserveJsonMessageField": {
            "default": false,
            "description": "The processor tries to deserialize the string in the \u0027message\u0027 field as JSON, putting all values into the \u0027attributes\u0027 field. If this is enabled, the processor will keep the JSON string in \u0027message\u0027. When disabled, the string will be cleared.",
            "type": "boolean"
          },
          "resolveNestedJsonFields": {
            "default": [
              [
                "message"
              ],
              [
                "msg"
              ],
              [
                "log"
              ]
            ],
            "description": "If you have JSON that is double serialized, e.g. \u0027{\"field\": \"{\\\"nested\\\": \\\"value\\\"}\"}\u0027, you might want to deserialize the nested JSON fields as well. This option allows you to specify the paths within the attributes where we should look for nested JSON fields. All the paths are tried in every iteration, and the deserialized fields are added to the  root of attributes. Use this for singly serialized JSON attribute fields as well.",
            "example": [
              [
                "http",
                "request",
                "body"
              ],
              [
                "message"
              ]
            ],
            "items": {
              "default": [
                [
                  "message"
                ],
                [
                  "msg"
                ],
                [
                  "log"
                ]
              ],
              "description": "If you have JSON that is double serialized, e.g. \u0027{\"field\": \"{\\\"nested\\\": \\\"value\\\"}\"}\u0027, you might want to deserialize the nested JSON fields as well. This option allows you to specify the paths within the attributes where we should look for nested JSON fields. All the paths are tried in every iteration, and the deserialized fields are added to the  root of attributes. Use this for singly serialized JSON attribute fields as well.",
              "example": [
                [
                  "http",
                  "request",
                  "body"
                ],
                [
                  "message"
                ]
              ],
              "items": {
                "default": "[[\"message\"],[\"msg\"],[\"log\"]]",
                "description": "If you have JSON that is double serialized, e.g. \u0027{\"field\": \"{\\\"nested\\\": \\\"value\\\"}\"}\u0027, you might want to deserialize the nested JSON fields as well. This option allows you to specify the paths within the attributes where we should look for nested JSON fields. All the paths are tried in every iteration, and the deserialized fields are added to the  root of attributes. Use this for singly serialized JSON attribute fields as well.",
                "example": "[[\"http\",\"request\",\"body\"],[\"message\"]]",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "type": {
            "description": "Deserializes the \u0027message\u0027 field as JSON merging the result into the \u0027attributes\u0027 map. Can also deserialize attributes that contain JSON strings.",
            "enum": [
              "json-log-processor"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "JsonNode": {
        "description": "A partial templateInputs object to deep-merge into the pipeline\u0027s current inputs. Objects merge recursively, and an array of named objects (like input.parsers) merges by entry name, so entries you omit are kept. Scalars and arrays of non-objects replace whole.",
        "type": "object"
      },
      "LatestReadingStrategy": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FileReadingStrategy"
          }
        ],
        "description": "Strategy to read files created after the current job start time",
        "type": "object"
      },
      "LegacyDatadogMetricsSink": {
        "properties": {
          "additionalTags": {
            "default": [],
            "description": "Additional tags to add to the metrics when writing to Datadog. Gets combined with the integration\u0027s additionalTags.",
            "example": [
              "env:dev"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "integrationId": {
            "description": "The Datadog integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes processed metrics (flat MetricDatapoint model) to Datadog. Transitional; use datadog-metrics-sink for new pipelines.",
            "enum": [
              "legacy-datadog-metrics-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "LinkMemoryRequest": {
        "properties": {
          "resolution": {
            "type": "string"
          },
          "rootCause": {
            "type": "string"
          },
          "rootCauseConfidence": {
            "enum": [
              "CONFIRMED",
              "SUSPECTED",
              "UNKNOWN"
            ],
            "type": "string"
          },
          "ruledOut": {
            "type": "string"
          },
          "symptoms": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "LinkMemoryResponse": {
        "properties": {
          "textMerged": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "LiteLlm": {
        "description": "The payload containing integration data.",
        "properties": {
          "apiKey": {
            "description": "Masked API key for LiteLLM",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "baseUrl": {
            "description": "Base URL of the LiteLLM proxy.",
            "example": "https://litellm.example.com/team-a",
            "type": "string"
          },
          "integrationMaxTokens": {
            "description": "Total tokens all agents using this integration may consume per max-tokens window. Null uses the default of 200,000,000.",
            "example": 200000000,
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "maxTokensWindowHours": {
            "description": "Length in hours of the UTC-aligned max tokens window; must be a divisor of 24. Null uses the default of 1.",
            "example": 24,
            "format": "int32",
            "maximum": 24,
            "minimum": 1,
            "type": "integer"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "baseUrl"
        ],
        "type": "object",
        "x-type": {
          "type": "litellm"
        }
      },
      "LlmUsageWindow": {
        "properties": {
          "end": {
            "format": "date-time",
            "type": "string"
          },
          "investigationsQueued": {
            "format": "int64",
            "type": "integer"
          },
          "investigationsRunning": {
            "format": "int64",
            "type": "integer"
          },
          "start": {
            "format": "date-time",
            "type": "string"
          },
          "tokensLimit": {
            "format": "int64",
            "type": "integer"
          },
          "tokensReserved": {
            "format": "int64",
            "type": "integer"
          },
          "tokensUsed": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "LogAttributesRemapper": {
        "properties": {
          "attributeRemappingRules": {
            "default": [],
            "description": "List of attribute-to-attribute remapping rules. Each rule moves the value from a source attribute path to a target attribute path, removing the source unless the rule\u0027s preserveSource flag is set. An optional predicate filter controls when each rule is applied.",
            "items": {
              "$ref": "#/components/schemas/AttributeRemappingRule"
            },
            "type": "array"
          },
          "hostPreserveSource": {
            "default": true,
            "description": "When true, preserves the source host attribute after remapping instead of removing it. Defaults to true (source is preserved).",
            "type": "boolean"
          },
          "hostReservedAttributePaths": {
            "default": [
              [
                "_resource",
                "host.name"
              ]
            ],
            "description": "Paths to search for host values",
            "example": [
              [
                "host",
                "app.name"
              ]
            ],
            "items": {
              "default": [
                [
                  "_resource",
                  "host.name"
                ]
              ],
              "description": "Paths to search for host values",
              "example": [
                [
                  "host",
                  "app.name"
                ]
              ],
              "items": {
                "default": "[[\"_resource\",\"host.name\"]]",
                "description": "Paths to search for host values",
                "example": "[[\"host\",\"app.name\"]]",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "hostReservedAttributes": {
            "default": [
              "host",
              "hostname",
              "syslog.hostname",
              "kubernetes.host",
              "sourceIPAddress"
            ],
            "description": "Attributes to search for host values",
            "items": {
              "default": "[\"@host\",\"hostname\",\"syslog.hostname\"]",
              "description": "Attributes to search for host values",
              "type": "string"
            },
            "type": "array"
          },
          "messagePreserveSource": {
            "default": false,
            "description": "When true, preserves the source message attribute after remapping instead of removing it. Defaults to false (source is removed after remapping).",
            "type": "boolean"
          },
          "messageReservedAttributePaths": {
            "default": [],
            "description": "Paths to search for message values",
            "example": [
              [
                "body",
                "message.content"
              ]
            ],
            "items": {
              "default": [],
              "description": "Paths to search for message values",
              "example": [
                [
                  "body",
                  "message.content"
                ]
              ],
              "items": {
                "default": "[]",
                "description": "Paths to search for message values",
                "example": "[[\"body\",\"message.content\"]]",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "messageReservedAttributes": {
            "default": [
              "message",
              "msg",
              "log",
              "M",
              "Message"
            ],
            "description": "Attributes to search for message values. The used attribute will be removed once remapped.",
            "items": {
              "default": "[\"message\",\"msg\",\"log\",\"M\",\"Message\"]",
              "description": "Attributes to search for message values. The used attribute will be removed once remapped.",
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "servicePreserveSource": {
            "default": true,
            "description": "When true, preserves the source service attribute after remapping instead of removing it. Defaults to true (source is preserved).",
            "type": "boolean"
          },
          "serviceReservedAttributePaths": {
            "default": [
              [
                "_resource",
                "service.name"
              ],
              [
                "kubernetes",
                "labels",
                "app.kubernetes.io/name"
              ],
              [
                "labels",
                "app.kubernetes.io/name"
              ]
            ],
            "description": "Paths to search for service values",
            "example": [
              [
                "labels",
                "app.kubernetes.io/name"
              ]
            ],
            "items": {
              "default": [
                [
                  "_resource",
                  "service.name"
                ],
                [
                  "kubernetes",
                  "labels",
                  "app.kubernetes.io/name"
                ],
                [
                  "labels",
                  "app.kubernetes.io/name"
                ]
              ],
              "description": "Paths to search for service values",
              "example": [
                [
                  "labels",
                  "app.kubernetes.io/name"
                ]
              ],
              "items": {
                "default": "[[\"_resource\",\"service.name\"],[\"kubernetes\",\"labels\",\"app.kubernetes.io/name\"],[\"labels\",\"app.kubernetes.io/name\"]]",
                "description": "Paths to search for service values",
                "example": "[[\"labels\",\"app.kubernetes.io/name\"]]",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "serviceReservedAttributes": {
            "default": [
              "service",
              "syslog.appname",
              "dd.service",
              "kubernetes.labels.app",
              "labels.app",
              "kubernetes.labels.k8s-app",
              "labels.k8s-app",
              "eventSource"
            ],
            "description": "Attributes to search for service values",
            "items": {
              "default": "[\"service\",\"syslog.appname\",\"dd.service\",\"kubernetes.labels.app\",\"labels.app\",\"kubernetes.labels.k8s-app\",\"labels.k8s-app\"]",
              "description": "Attributes to search for service values",
              "type": "string"
            },
            "type": "array"
          },
          "statusMapping": {
            "$ref": "#/components/schemas/StatusMapping"
          },
          "statusPreserveSource": {
            "default": true,
            "description": "When true, preserves the source status attribute after remapping instead of removing it. Defaults to true (source is preserved).",
            "type": "boolean"
          },
          "statusReservedAttributePaths": {
            "default": [],
            "description": "Attributes to search for status values",
            "example": [
              [
                "log",
                "level"
              ]
            ],
            "items": {
              "default": [],
              "description": "Attributes to search for status values",
              "example": [
                [
                  "log",
                  "level"
                ]
              ],
              "items": {
                "default": "[]",
                "description": "Attributes to search for status values",
                "example": "[[\"log\",\"level\"]]",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "statusReservedAttributes": {
            "default": [
              "log.level",
              "level",
              "status",
              "severity",
              "syslog.severity",
              "L"
            ],
            "description": "Attributes to search for status values",
            "items": {
              "default": "[\"log.level\",\"level\",\"status\",\"severity\",\"syslog.severity\",\"L\"]",
              "description": "Attributes to search for status values",
              "type": "string"
            },
            "type": "array"
          },
          "tagMappingPaths": {
            "additionalProperties": {
              "description": "Map from tag key to an ordered list of attribute paths to search for values. All paths will be tried, and all found values will be added. If no value is found, the tag will not be changed. The attribute paths are a list of paths. This does not remove existing tag values.",
              "items": {
                "description": "Map from tag key to an ordered list of attribute paths to search for values. All paths will be tried, and all found values will be added. If no value is found, the tag will not be changed. The attribute paths are a list of paths. This does not remove existing tag values.",
                "items": {
                  "description": "Map from tag key to an ordered list of attribute paths to search for values. All paths will be tried, and all found values will be added. If no value is found, the tag will not be changed. The attribute paths are a list of paths. This does not remove existing tag values.",
                  "type": "string"
                },
                "type": "array"
              },
              "type": "array"
            },
            "default": {},
            "description": "Map from tag key to an ordered list of attribute paths to search for values. All paths will be tried, and all found values will be added. If no value is found, the tag will not be changed. The attribute paths are a list of paths. This does not remove existing tag values.",
            "type": "object"
          },
          "tagMappings": {
            "additionalProperties": {
              "description": "Map from tag key to an ordered list of attribute paths to search for values. All paths will be tried, and all found values will be added. If no value is found, the tag will not be changed. The attribute paths are dot-separated. This does not remove existing tag values.",
              "items": {
                "description": "Map from tag key to an ordered list of attribute paths to search for values. All paths will be tried, and all found values will be added. If no value is found, the tag will not be changed. The attribute paths are dot-separated. This does not remove existing tag values.",
                "type": "string"
              },
              "type": "array"
            },
            "default": {},
            "description": "Map from tag key to an ordered list of attribute paths to search for values. All paths will be tried, and all found values will be added. If no value is found, the tag will not be changed. The attribute paths are dot-separated. This does not remove existing tag values.",
            "type": "object"
          },
          "tagMappingsLocationPaths": {
            "default": [],
            "description": "Possible locations of a map of string to string or to collection of strings that has tags. Added to tags, without replacement.",
            "items": {
              "description": "Possible locations of a map of string to string or to collection of strings that has tags. Added to tags, without replacement.",
              "items": {
                "description": "Possible locations of a map of string to string or to collection of strings that has tags. Added to tags, without replacement.",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "tagMappingsLocationPreserveSource": {
            "default": false,
            "description": "When true, preserves the source tag map location attributes after remapping instead of removing them. Defaults to false (source is removed after remapping).",
            "type": "boolean"
          },
          "tagMappingsLocations": {
            "default": [],
            "description": "Possible locations of a map of string to string or to collection of strings that has tags. Added to tags, without replacement.",
            "items": {
              "description": "Possible locations of a map of string to string or to collection of strings that has tags. Added to tags, without replacement.",
              "type": "string"
            },
            "type": "array"
          },
          "tagMappingsPreserveSource": {
            "default": false,
            "description": "When true, preserves the source tag mappings attributes after remapping instead of removing them. Defaults to false (source is removed).",
            "type": "boolean"
          },
          "timestampPreserveSource": {
            "default": true,
            "description": "When true, preserves the source timestamp attribute after remapping instead of removing it. Defaults to true (source is preserved).",
            "type": "boolean"
          },
          "timestampReservedAttributePaths": {
            "default": [],
            "description": "Paths to search for timestamp values",
            "example": [
              [
                "event",
                "local.timestamp"
              ]
            ],
            "items": {
              "default": [],
              "description": "Paths to search for timestamp values",
              "example": [
                [
                  "event",
                  "local.timestamp"
                ]
              ],
              "items": {
                "default": "[]",
                "description": "Paths to search for timestamp values",
                "example": "[[\"event\",\"local.timestamp\"]]",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "timestampReservedAttributes": {
            "default": [
              "@timestamp",
              "timestamp",
              "_timestamp",
              "Timestamp",
              "eventTime",
              "date",
              "published_date",
              "syslog.timestamp",
              "T"
            ],
            "description": "Attributes to search for timestamp values",
            "items": {
              "default": "[\"@timestamp\",\"timestamp\",\"_timestamp\",\"Timestamp\",\"eventTime\",\"date\",\"published_date\",\"syslog.timestamp\",\"T\"]",
              "description": "Attributes to search for timestamp values",
              "type": "string"
            },
            "type": "array"
          },
          "traceIdPreserveSource": {
            "default": true,
            "description": "When true, preserves the source traceId attribute after remapping instead of removing it. Defaults to true (source is preserved).",
            "type": "boolean"
          },
          "traceIdReservedAttributePaths": {
            "default": [],
            "description": "Paths to search for traceId values",
            "example": [
              [
                "trace",
                "id"
              ]
            ],
            "items": {
              "default": [],
              "description": "Paths to search for traceId values",
              "example": [
                [
                  "trace",
                  "id"
                ]
              ],
              "items": {
                "default": "[]",
                "description": "Paths to search for traceId values",
                "example": "[[\"trace\",\"id\"]]",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "traceIdReservedAttributes": {
            "default": [
              "dd.trace_id",
              "contextMap.dd.trace_id",
              "otelTraceID"
            ],
            "description": "Attributes to search for traceId values",
            "items": {
              "default": "[\"dd.trace_id\",\"contextMap.dd.trace_id\"]",
              "description": "Attributes to search for traceId values",
              "type": "string"
            },
            "type": "array"
          },
          "type": {
            "description": "Maps attributes to top-level fields and tags.",
            "enum": [
              "log-attributes-remapper"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "LogEvent": {
        "description": "A log event.",
        "properties": {
          "attributes": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "description": "Attributes associated with the event, a map from attribute name to attribute value, which may be a nested map or list.",
            "type": "object"
          },
          "eventTimestamp": {
            "description": "Event timestamp that is in the record. Milliseconds from epoch.",
            "format": "int64",
            "type": "integer"
          },
          "id": {
            "description": "Id of the event.",
            "example": "034JA9FJ",
            "type": "string"
          },
          "message": {
            "description": "The log message.",
            "example": "This is a log message.",
            "type": "string"
          },
          "receivedTimestamp": {
            "description": "Timestamp when the event was received by Grepr. Milliseconds from epoch.",
            "format": "int64",
            "type": "integer"
          },
          "severity": {
            "description": "The log severity. Higher numbers mean higher severity, following the OTel format 1-24.",
            "format": "int32",
            "type": "integer"
          },
          "tags": {
            "additionalProperties": {
              "description": "Tags associated with the event, a map from tag name to set of tag values.",
              "items": {
                "description": "Tags associated with the event, a map from tag name to set of tag values.",
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            },
            "description": "Tags associated with the event, a map from tag name to set of tag values.",
            "type": "object"
          }
        },
        "required": [
          "eventTimestamp",
          "id",
          "receivedTimestamp"
        ],
        "type": "object"
      },
      "LogEventMapper": {
        "description": "Selects the mapper used to decode raw file records into LogEvents.",
        "discriminator": {
          "propertyName": "type"
        },
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "LogReducer": {
        "properties": {
          "attributeMergeStrategyEntries": {
            "default": [],
            "description": "List of attribute paths and their corresponding merge strategies. If no strategy is defined for a path, the terminal merge strategy will be used.",
            "items": {
              "$ref": "#/components/schemas/AttributesMergeStrategyEntry"
            },
            "title": "Attributes merge strategy entries",
            "type": "array"
          },
          "attributeTokenization": {
            "default": "KEYS_AND_VALUES",
            "description": "Use attribute shape only, or shape and whole-value similarity tokens.",
            "enum": [
              "KEYS_ONLY",
              "KEYS_AND_VALUES"
            ],
            "type": "string"
          },
          "dedupThreshold": {
            "default": 4,
            "description": "Number of duplicates we send for a pattern before we start deduplication.",
            "example": 4,
            "format": "int32",
            "minimum": 1,
            "title": "Deduplication threshold",
            "type": "integer"
          },
          "defaultAttributesMergeStrategy": {
            "$ref": "#/components/schemas/AttributesMergeStrategy"
          },
          "delimiters": {
            "default": [
              ":",
              "#",
              "[",
              "]",
              "(",
              ")",
              "{",
              "}",
              "|",
              ",",
              ";",
              "\"",
              "\u0027",
              " ",
              "\t",
              "\n",
              "\r",
              "\u0026",
              "\u003d",
              "?",
              "!",
              "+",
              "*",
              "/",
              "\u003c",
              "\u003e",
              "%",
              "^",
              "~",
              "`"
            ],
            "description": "Characters to use for splitting tokens. Default is missing \u0027@\u0027 to avoid splitting email addresses. Also missing \u0027.\u0027 to avoid splitting identifiers using it.",
            "example": "[\":\", \"#\", \"[\", \"]\", \"(\", \")\", \"{\", \"}\", \"|\", \",\", \";\", \"\"\", \"\u0027\", \" \", \"\\t\", \"\\n\", \"\\r\"]",
            "items": {
              "description": "Characters to use for splitting tokens. Default is missing \u0027@\u0027 to avoid splitting email addresses. Also missing \u0027.\u0027 to avoid splitting identifiers using it.",
              "example": "[\":\", \"#\", \"[\", \"]\", \"(\", \")\", \"{\", \"}\", \"|\", \",\", \";\", \"\"\", \"\u0027\", \" \", \"\\t\", \"\\n\", \"\\r\"]",
              "title": "Token delimiters",
              "type": "string"
            },
            "title": "Token delimiters",
            "type": "array"
          },
          "emitNewPatternSignals": {
            "default": false,
            "description": "Whether this operation may emit LogPatternSignal events to the agent-service when new patterns are detected or replayed. Must be enabled before an agent can subscribe to this pipeline.",
            "title": "Emit new-pattern signals",
            "type": "boolean"
          },
          "enabledMasks": {
            "default": [
              "ipport",
              "timestamp",
              "uuid",
              "number"
            ],
            "description": "Masks that are enabled for tokenizing messages. These are specified as the names of the masks to use. The default enabled masks are: ipport, timestamp, uuid, number.",
            "example": [
              "ipport",
              "timestamp",
              "uuid",
              "number"
            ],
            "items": {
              "description": "Masks that are enabled for tokenizing messages. These are specified as the names of the masks to use. The default enabled masks are: ipport, timestamp, uuid, number.",
              "example": "[\"ipport\",\"timestamp\",\"uuid\",\"number\"]",
              "title": "Enabled masks",
              "type": "string"
            },
            "title": "Enabled masks",
            "type": "array"
          },
          "excludedAttributePrefixes": {
            "default": [],
            "description": "Excluded attribute prefixes as arrays of literal key segments. Does not affect partition-by values or output attributes.",
            "items": {
              "description": "Excluded attribute prefixes as arrays of literal key segments. Does not affect partition-by values or output attributes.",
              "items": {
                "description": "Excluded attribute prefixes as arrays of literal key segments. Does not affect partition-by values or output attributes.",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "includedAttributePrefixes": {
            "default": [],
            "description": "Included attribute prefixes as arrays of literal key segments. Empty selects all. Array elements are traversed without indices.",
            "items": {
              "description": "Included attribute prefixes as arrays of literal key segments. Empty selects all. Array elements are traversed without indices.",
              "items": {
                "description": "Included attribute prefixes as arrays of literal key segments. Empty selects all. Array elements are traversed without indices.",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "integrationExceptionConfigs": {
            "default": [],
            "description": "Exception configs that define which exceptions to use from the ones imported from the observability vendor integrations.",
            "example": {
              "autoSync": true,
              "ids": [
                "id1",
                "id2"
              ],
              "integrationId": "0kk67gfs56a"
            },
            "items": {
              "$ref": "#/components/schemas/IntegrationExceptionConfig"
            },
            "title": "Vendor imported exceptions",
            "type": "array"
          },
          "logReducerExceptions": {
            "default": [],
            "description": "Predicate for skipping events. Logs matching these predicates won\u0027t be aggregated.",
            "example": {
              "query": "status:error",
              "type": "datadog-query"
            },
            "items": {
              "$ref": "#/components/schemas/EventPredicate"
            },
            "title": "Event predicate",
            "type": "array"
          },
          "masks": {
            "default": [
              [
                "ipport",
                "(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?"
              ],
              [
                "timestamp",
                "(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))"
              ],
              [
                "uuid",
                "(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)"
              ],
              [
                "number",
                "(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)"
              ],
              [
                "awsarn",
                "arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*"
              ],
              [
                "awstoken",
                "(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}"
              ]
            ],
            "description": "Set of masks that can be applied to messages before tokenizing them. These masks are specified as pairs of (name, regex). The default masks are: ipport, timestamp, uuid, number, awsarn, awstoken.",
            "example": "[[\"ipport\", \"(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?\"],[\"timestamp\", \"(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))\"],[\"uuid\", \"(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)\"],[\"number\", \"(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)\"],[\"awsarn\", \"arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*\"],[\"awstoken\", \"(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}\"]]",
            "items": {
              "description": "Set of masks that can be applied to messages before tokenizing them. These masks are specified as pairs of (name, regex). The default masks are: ipport, timestamp, uuid, number, awsarn, awstoken.",
              "example": "[[\"ipport\", \"(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?\"],[\"timestamp\", \"(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))\"],[\"uuid\", \"(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)\"],[\"number\", \"(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)\"],[\"awsarn\", \"arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*\"],[\"awstoken\", \"(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}\"]]",
              "items": {
                "description": "Set of masks that can be applied to messages before tokenizing them. These masks are specified as pairs of (name, regex). The default masks are: ipport, timestamp, uuid, number, awsarn, awstoken.",
                "example": "[[\"ipport\", \"(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?\"],[\"timestamp\", \"(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))\"],[\"uuid\", \"(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)\"],[\"number\", \"(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)\"],[\"awsarn\", \"arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*\"],[\"awstoken\", \"(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}\"]]",
                "title": "Masks",
                "type": "string"
              },
              "title": "Masks",
              "type": "array"
            },
            "title": "Masks",
            "type": "array"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "partitionByAttributePaths": {
            "default": [],
            "description": "Attribute paths as arrays of keys. Use for unambiguous nested vs flat attributes. Example: [[\"user\", \"id\"]] for nested user.id, [[\"user.id\"]] for flat attribute named \u0027user.id\u0027",
            "example": [
              [
                "user",
                "id"
              ],
              [
                "request.url"
              ]
            ],
            "items": {
              "description": "Attribute paths as arrays of keys. Use for unambiguous nested vs flat attributes. Example: [[\"user\", \"id\"]] for nested user.id, [[\"user.id\"]] for flat attribute named \u0027user.id\u0027",
              "example": [
                [
                  "user",
                  "id"
                ],
                [
                  "request.url"
                ]
              ],
              "items": {
                "description": "Attribute paths as arrays of keys. Use for unambiguous nested vs flat attributes. Example: [[\"user\", \"id\"]] for nested user.id, [[\"user.id\"]] for flat attribute named \u0027user.id\u0027",
                "example": "[[\"user\",\"id\"],[\"request.url\"]]",
                "title": "Grouping by attribute paths (array format)",
                "type": "string"
              },
              "title": "Grouping by attribute paths (array format)",
              "type": "array"
            },
            "title": "Grouping by attribute paths (array format)",
            "type": "array",
            "uniqueItems": true
          },
          "partitionByAttributes": {
            "default": [],
            "items": {
              "description": "Attributes by which to group logs for aggregation.  For example to aggregate logs by an attribute specify `x.y`, which would be interpreted as a JSON path in under attributes. These work like \u0027GROUP BY\u0027 in SQL.",
              "example": "[\"url.path\"]",
              "title": "Grouping by attributes",
              "type": "string"
            },
            "type": "array"
          },
          "partitionByTags": {
            "default": [],
            "items": {
              "description": "Tag keys by which to group logs for aggregation by.  For example to aggregate logs by host specify `host`. These work like \u0027GROUP BY\u0027 in SQL.",
              "example": "[\"host\"]",
              "title": "Grouping by tags",
              "type": "string"
            },
            "type": "array"
          },
          "reductionTimeWindow": {
            "default": "PT2M",
            "description": "Time window in which logs are considered for deduplication. Should not be modified without explicit guidance.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "repeatCountInSummaryMessageEnabled": {
            "default": true,
            "description": "Whether to include the repeat count prefix in the summary message. Grepr will add a prefix to the summary message with the number messages aggregated. However, this might break downstream parsing if the message is expected to be in a specific format. If you want to include the repeat count, set this to true.",
            "example": true,
            "title": "Include repeat count in summary message",
            "type": "boolean"
          },
          "samplingConfig": {
            "$ref": "#/components/schemas/SamplingConfig"
          },
          "similarityThreshold": {
            "default": 70.0,
            "description": "Controls how close a set of tokens are to a pattern before it is considered a match. Calculated as the percent of matching tokens between a pattern and a message.",
            "example": 70.0,
            "format": "double",
            "maximum": 100,
            "minimum": 20,
            "title": "Similarity threshold",
            "type": "number"
          },
          "tokenizationInput": {
            "default": "MESSAGE_ONLY",
            "description": "Selects message text, attributes, both, or message text with an attributes fallback.",
            "enum": [
              "MESSAGE_ONLY",
              "ATTRIBUTES_ONLY",
              "MESSAGE_AND_ATTRIBUTES",
              "AUTO"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reduces logs by combining messages with similar patterns.",
            "enum": [
              "log-reducer"
            ],
            "type": "string"
          }
        },
        "required": [
          "delimiters",
          "enabledMasks",
          "masks",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "LogReducerTemplateInput": {
        "description": "Schema for the log reducer job graph.",
        "properties": {
          "agentSignalSink": {
            "$ref": "#/components/schemas/AgentSignalSink"
          },
          "conditionalDatasets": {
            "description": "Conditional routing of raw logs to datasets. Logs will match the filters in order, and once a log matches a filter, it will not attempt to match other filters in the list. If a log matches none of the filters, it is written to the default dataset. A default dataset must be set when conditional routing is configured.",
            "items": {
              "$ref": "#/components/schemas/ConditionalDataLakeConfig"
            },
            "type": "array"
          },
          "datasetId": {
            "description": "The unique identifier for the dataset. When absent, no raw logs will be stored. At least one of `datasetId`, `sinks` or `processedLogsSink` must be provided, in drafts too.",
            "pattern": "^[0-9a-z]{13}$",
            "type": "string"
          },
          "draftSource": {
            "$ref": "#/components/schemas/Operation"
          },
          "exceptions": {
            "description": "A list of template-specific exceptions to apply in log reducer.",
            "items": {
              "$ref": "#/components/schemas/TemplateException"
            },
            "type": "array"
          },
          "masking": {
            "$ref": "#/components/schemas/MaskingOperator"
          },
          "parsers": {
            "description": "A list of parsers to be applied to the data.",
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "type": "array"
          },
          "processedLogsSink": {
            "$ref": "#/components/schemas/LogsIcebergTableSink"
          },
          "processedLogsSinkFilter": {
            "$ref": "#/components/schemas/LogsFilter"
          },
          "rawSinkConfig": {
            "$ref": "#/components/schemas/RawLogsSinkConfig"
          },
          "reducer": {
            "$ref": "#/components/schemas/LogReducer"
          },
          "sampler": {
            "$ref": "#/components/schemas/LogsEventSampler"
          },
          "sinks": {
            "description": "A list of template log sinks, each specific to a vendor with optional filter configuration. When absent, reduced logs will not be forwarded. At least one of `datasetId`, `sinks` or `processedLogsSink` must be provided, in drafts too. A SQL output routed to `sinks` needs a sink here or `processedLogsSink`, and a metric SQL output needs a Datadog log sink here.",
            "items": {
              "$ref": "#/components/schemas/TemplateLogSink"
            },
            "type": "array"
          },
          "sources": {
            "description": "A list of data sources, each conforming to one of the defined source types.",
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "type": "array"
          },
          "transforms": {
            "$ref": "#/components/schemas/Transforms"
          }
        },
        "required": [
          "exceptions",
          "parsers",
          "reducer",
          "sources"
        ],
        "title": "Inputs Schema",
        "type": "object"
      },
      "LogRulesApplication": {
        "properties": {
          "globalRules": {
            "default": [],
            "description": "Global rules applied to all log events regardless of pattern (e.g., log-based alert rules).",
            "items": {
              "$ref": "#/components/schemas/PatternRuleConfig"
            },
            "type": "array"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "rules": {
            "additionalProperties": {
              "description": "Per-pattern rules keyed by pattern ID (TSID string).",
              "items": {
                "$ref": "#/components/schemas/PatternRuleConfig"
              },
              "type": "array"
            },
            "default": {},
            "description": "Per-pattern rules keyed by pattern ID (TSID string).",
            "type": "object"
          },
          "type": {
            "description": "Applies per-pattern rules (masking, time-series spike detection) to log events.",
            "enum": [
              "log-rules-application"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "LogTransformAction": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "transforms": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/EventAction"
            },
            "type": "array"
          },
          "type": {
            "description": "Applies transformations to log events.",
            "enum": [
              "log-transform"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "LogsBackfillFlinkSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Backfills events out of an Iceberg Table, returning events with the sinks they have already been sent to.",
            "enum": [
              "logs-backfill-iceberg-table-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          },
          "vendorSinkIntegrationIds": {
            "default": [],
            "items": {
              "description": "The list of vendor integration IDs, if any, that will consume the data from the source.",
              "example": "[\"0kabdv8yo9q99\",\"0kyytv3yi9q98\"]",
              "pattern": "[a-z0-9]{1,13}",
              "title": "Vendor Sink Integration IDs",
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "LogsBackfillTemplateInput": {
        "description": "Schema for the logs backfill job graph.",
        "properties": {
          "backfillTimestampTag": {
            "description": "ISO-8601 value stamped onto backfilled records as the grepr.backfilled.timestamp tag. Computed by the builder so the template stays free of time logic.",
            "example": "2023-01-01t01:00:00z",
            "type": "string"
          },
          "datasetId": {
            "description": "Dataset containing the raw records and delivery dedup state.",
            "pattern": "^[0-9a-z]{1,13}$",
            "type": "string"
          },
          "end": {
            "description": "End of the backfill interval.",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "description": "Maximum rows selected independently by each generated source.",
            "format": "int32",
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "sinks": {
            "description": "The vendor sink operations that deliver the backfilled records.",
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "type": "array"
          },
          "start": {
            "description": "Start of the backfill interval.",
            "format": "date-time",
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables retained on the generated backfill source.",
            "type": "object"
          },
          "vendorSinkIntegrationIds": {
            "default": [],
            "description": "Vendor integration IDs, if any, whose prior delivery the backfill source skips: exactly the integrations the sinks send to, or empty when the source does no per-vendor dedup join.",
            "items": {
              "description": "Vendor integration IDs, if any, whose prior delivery the backfill source skips: exactly the integrations the sinks send to, or empty when the source does no per-vendor dedup join.",
              "pattern": "^[0-9a-z]{1,13}$",
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "backfillTimestampTag",
          "datasetId",
          "end",
          "limit",
          "query",
          "sinks",
          "start"
        ],
        "title": "Inputs Schema",
        "type": "object"
      },
      "LogsBranch": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "type": {
            "description": "Splits events based on a predicate. Positive matches go to the main output. Negative matches go to the \u0027else\u0027 output.\n",
            "enum": [
              "logs-branch"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "predicate",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Operations"
        ]
      },
      "LogsEventSampler": {
        "properties": {
          "filter": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "maxAllowedRate": {
            "default": 10.0,
            "description": "Max allowed rate in messages per second. The max rate used by the token rate limiter to control the sampling rate of events. The rate is distributed across parallel subtasks.",
            "example": 10,
            "format": "double",
            "title": "Max allowed rate in messages per second",
            "type": "number"
          },
          "maxBurstLimit": {
            "default": 2000,
            "description": "Maximum size of acceptable burst used by the token bucket rate limiter to handle bursty traffic.",
            "example": 2000,
            "format": "int32",
            "title": "Max burst limit",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Samples log events using a token based rate limiter. Throttles log events based on max rate accepting up to max burst limit for bursty traffic. Can selectively sample events matching a filter predicate. Rate limiting is distributed across parallel subtasks.\n",
            "enum": [
              "logs-event-sampler"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "LogsFilter": {
        "properties": {
          "inverted": {
            "default": false,
            "description": "Whether to invert the predicate logic",
            "example": false,
            "type": "boolean"
          },
          "maxLateEventTimestampDelta": {
            "description": "Maximum allowed time delta between received and event timestamps. Events with a delta exceeding this threshold will be filtered out. ISO-8601 duration format.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "type": {
            "description": "Filters events based on a predicate.\n",
            "enum": [
              "logs-filter"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "predicate",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "LogsIcebergTableSink": {
        "properties": {
          "datasetId": {
            "description": "The id of the dataset to write to",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes logs to an Iceberg Table.",
            "enum": [
              "logs-iceberg-table-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "LogsIcebergTableSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads events from an Iceberg table for processing.",
            "enum": [
              "logs-iceberg-table-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "LogsRuleEngine": {
        "properties": {
          "conditions": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Condition"
            },
            "default": {},
            "description": "Map of condition Id to condition objects. The ids are a unique name for the conditions.",
            "example": {
              "condition-1": {
                "actionRules": [
                  {
                    "actionPredicate": {
                      "query": "service:__service",
                      "type": "datadog-query"
                    },
                    "actions": [
                      {
                        "modification": "ADD",
                        "order": 1,
                        "tagKey": "hosts",
                        "type": "tag-action",
                        "values": [
                          "host1",
                          "host2"
                        ]
                      }
                    ],
                    "type": "event-rule"
                  }
                ]
              }
            },
            "type": "object"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "triggers": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Trigger"
            },
            "default": {},
            "description": "Map of trigger Id to trigger objects. The ids are a unique name for the trigger.",
            "example": "{\n  \"trigger-1\": {\n    \"type\": \"event-predicate\",\n    \"predicate\": {\n      \"type\": \"datadog-query\",\n      \"query\": \"service:grepr-service-1\"\n    },\n    \"conditionIds\": [\"condition-1\"],\n    \"duration\": \"PT1H\"\n  },\n}",
            "type": "object"
          },
          "type": {
            "description": "Describes rules to execute on log events. See the guide for the Rule Engine for more details.",
            "enum": [
              "rule-engine"
            ],
            "type": "string"
          }
        },
        "required": [
          "conditions",
          "name",
          "triggers",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Operations"
        ]
      },
      "LogsSynchronousSink": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Sink for returning log results to the caller.",
            "enum": [
              "logs-sync-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "LogsValuesSource": {
        "properties": {
          "loop": {
            "default": false,
            "description": "If true, the source will loop over the values indefinitely when processing is STREAMING. In BATCH mode, this flag is ignored.",
            "type": "boolean"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Generates log events with constant values.",
            "enum": [
              "logs-values-source"
            ],
            "type": "string"
          },
          "values": {
            "default": [],
            "description": "List of log events to be generated by the source.",
            "items": {
              "$ref": "#/components/schemas/LogEvent"
            },
            "type": "array"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "Manifest": {
        "properties": {
          "auth": {
            "$ref": "#/components/schemas/AuthConfig"
          },
          "frontend": {
            "$ref": "#/components/schemas/FrontendConfig"
          }
        },
        "required": [
          "auth"
        ],
        "type": "object"
      },
      "Mask": {
        "description": "A mask: the regular expression to match, and how to rewrite the match. May also be written as a bare regex string when no replacement or preserved prefix is needed.",
        "example": {
          "email": "\\S+@\\S+"
        },
        "properties": {
          "preserveThrough": {
            "description": "Delimiter ending a prefix of the match that is kept verbatim instead of being replaced. The match is split at the first occurrence of this text, so a regex matching \"?token\u003dabc123\" with a delimiter of \"\u003d\" keeps \"?token\u003d\" and rewrites only the value. When the delimiter does not occur in the match, the whole match is replaced.",
            "example": "\u003d",
            "maxLength": 16,
            "minLength": 1,
            "type": "string"
          },
          "regex": {
            "description": "Regular expression whose matches are rewritten. Must be compatible with Hyperscan syntax: no lookbehind and no backreferences. Prefer unbounded repeats (`+`, `*`) over bounded ones (`{1,50}`) — a bounded repeat is expanded into that many copies of the pattern and can exceed the compiler\u0027s size limit.",
            "example": "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}",
            "type": "string"
          },
          "replacement": {
            "description": "Text substituted for the match. Defaults to the mask\u0027s label in square brackets, e.g. a mask labeled \"email\" becomes \"[email]\".",
            "example": "\u003credacted\u003e",
            "maxLength": 64,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "regex"
        ],
        "type": "object"
      },
      "MaskEntry": {
        "properties": {
          "name": {
            "type": "string"
          },
          "pattern": {
            "type": "string"
          },
          "replacement": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "pattern",
          "replacement"
        ],
        "type": "object"
      },
      "MaskingOperator": {
        "properties": {
          "attributeMasks": {
            "default": [],
            "description": "Masks to apply to attribute values. Each entry names an attribute path (as a list of segments) and the masks to apply to the value at that path. Only string values at the exact path are masked; missing or non-string attributes are skipped. Paths must be unique. The same matching rules as messageMasks apply.",
            "example": [
              {
                "masks": {
                  "email": "\\S+@\\S+"
                },
                "path": [
                  "user",
                  "contact"
                ]
              }
            ],
            "items": {
              "$ref": "#/components/schemas/AttributeMask"
            },
            "type": "array"
          },
          "messageMasks": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Mask"
            },
            "default": {},
            "description": "Masks to apply to the log message, as a map of label to mask. A mask may be written as a bare regex string, in which case each match is replaced with the label in square brackets — a match of the regex labeled \"email\" becomes \"[email]\". Labels may be up to 64 characters. Overlapping matches resolve to the leftmost match first, then the longest; declaration order breaks remaining ties, so declare more specific patterns first.",
            "example": {
              "email": "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}"
            },
            "type": "object"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "type": {
            "description": "Masks sensitive substrings in log events by replacing regex matches with decorated labels.",
            "enum": [
              "masking-operator"
            ],
            "type": "string"
          }
        },
        "required": [
          "attributeMasks",
          "messageMasks",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "MaskingRequest": {
        "properties": {
          "masking": {
            "$ref": "#/components/schemas/MaskingOperator"
          },
          "samples": {
            "default": [],
            "description": "The sample log events to apply the masks to.",
            "items": {
              "$ref": "#/components/schemas/MaskingSample"
            },
            "maxItems": 20,
            "minItems": 0,
            "type": "array"
          }
        },
        "required": [
          "masking",
          "samples"
        ],
        "type": "object"
      },
      "MaskingResponse": {
        "properties": {
          "results": {
            "description": "The masked results, aligned by position with the request\u0027s samples.",
            "items": {
              "$ref": "#/components/schemas/MaskingResult"
            },
            "type": "array"
          }
        },
        "required": [
          "results"
        ],
        "type": "object"
      },
      "MaskingResult": {
        "description": "The masked results, aligned by position with the request\u0027s samples.",
        "properties": {
          "maskedAttributes": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "description": "The sample attributes after masking, unchanged when no mask matched.",
            "type": "object"
          },
          "maskedCount": {
            "description": "The number of substrings replaced across the message and attributes; zero when nothing matched.",
            "example": 3,
            "format": "int32",
            "type": "integer"
          },
          "maskedMessage": {
            "description": "The sample message after masking, unchanged when no mask matched.",
            "example": "user [email] signed in from [ip]",
            "type": "string"
          }
        },
        "required": [
          "maskedAttributes"
        ],
        "type": "object"
      },
      "MaskingRuleConfig": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PatternRuleConfig"
          },
          {
            "properties": {
              "enabled": {
                "default": true,
                "type": "boolean"
              },
              "masks": {
                "default": [],
                "items": {
                  "$ref": "#/components/schemas/MaskEntry"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        ],
        "description": "Masking rule that scrubs PII from log messages using regex patterns.",
        "required": [
          "masks"
        ],
        "type": "object"
      },
      "MaskingSample": {
        "description": "The sample log events to apply the masks to.",
        "properties": {
          "attributes": {
            "additionalProperties": {
              "description": "Sample attributes the attribute masks are applied to.",
              "example": {
                "user": {
                  "email": "alice@example.com"
                }
              },
              "type": "object"
            },
            "default": {},
            "description": "Sample attributes the attribute masks are applied to.",
            "example": {
              "user": {
                "email": "alice@example.com"
              }
            },
            "type": "object"
          },
          "message": {
            "description": "Sample log message the masks are applied to. May be omitted to test attribute masks alone.",
            "example": "user alice@example.com signed in from 10.1.2.3",
            "maxLength": 100000,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "attributes"
        ],
        "type": "object"
      },
      "MatrixCell": {
        "properties": {
          "intent": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "sessionsUsing": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "MatrixData": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Data"
          },
          {
            "properties": {
              "result": {
                "items": {
                  "$ref": "#/components/schemas/MatrixResult"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        ],
        "type": "object"
      },
      "MatrixResult": {
        "properties": {
          "metric": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "values": {
            "items": {
              "items": {
                "type": "object"
              },
              "type": "array"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "MaxAttributesMergeStrategy": {
        "properties": {
          "type": {
            "description": "MaxAttributesMergeStrategy: Keeps the maximum numeric attribute value.",
            "enum": [
              "max"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "McpToolDescriptor": {
        "properties": {
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "parameters": {
            "items": {
              "$ref": "#/components/schemas/McpToolParameter"
            },
            "type": "array"
          },
          "readOnly": {
            "type": "boolean"
          },
          "title": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "McpToolParameter": {
        "properties": {
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "required": {
            "type": "boolean"
          },
          "type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "MemoryDetail": {
        "properties": {
          "contentRevision": {
            "format": "int32",
            "type": "integer"
          },
          "linkCount": {
            "format": "int64",
            "type": "integer"
          },
          "lockedTagKeys": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "memory": {
            "$ref": "#/components/schemas/MemorySearchResult"
          },
          "recurrences": {
            "items": {
              "$ref": "#/components/schemas/RecurrenceLink"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "MemoryListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/MemorySearchResult"
            },
            "type": "array"
          },
          "nextCursor": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "MemoryReview": {
        "properties": {
          "editedAt": {
            "format": "date-time",
            "type": "string"
          },
          "verdictAt": {
            "format": "date-time",
            "type": "string"
          },
          "verdictNote": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "MemorySearchRequest": {
        "properties": {
          "agentId": {
            "type": "string"
          },
          "entityTags": {
            "additionalProperties": {
              "type": "string"
            },
            "default": {},
            "type": "object"
          },
          "includeVocabulary": {
            "default": false,
            "type": "boolean"
          },
          "limit": {
            "default": 3,
            "format": "int32",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "mode": {
            "description": "The retrieval strategy. Leave it out for the server to pick: SEMANTIC when the agent searched has a semantic-search store and TEXT when it has none.",
            "enum": [
              "SEMANTIC",
              "TEXT",
              "TIMELINE"
            ],
            "type": "string"
          },
          "query": {
            "type": "string"
          },
          "recordedAfter": {
            "format": "date-time",
            "type": "string"
          },
          "significances": {
            "default": [],
            "items": {
              "enum": [
                "INCIDENT",
                "OBSERVATION",
                "INCONCLUSIVE",
                "BENIGN"
              ],
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "verbosity": {
            "enum": [
              "COMPACT",
              "FULL"
            ],
            "type": "string"
          }
        },
        "required": [
          "significances"
        ],
        "type": "object"
      },
      "MemorySearchResponse": {
        "properties": {
          "entityTagVocabulary": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "type": "object"
          },
          "hasMore": {
            "type": "boolean"
          },
          "note": {
            "type": "string"
          },
          "preamble": {
            "type": "string"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/MemorySearchResult"
            },
            "type": "array"
          },
          "semanticSearchUnavailable": {
            "type": "boolean"
          },
          "verbosity": {
            "enum": [
              "COMPACT",
              "FULL"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "MemorySearchResult": {
        "properties": {
          "ageDays": {
            "format": "int64",
            "type": "integer"
          },
          "agentId": {
            "type": "string"
          },
          "investigationId": {
            "type": "string"
          },
          "lastSeenAt": {
            "format": "date-time",
            "type": "string"
          },
          "lastSeenDays": {
            "format": "int64",
            "type": "integer"
          },
          "matchedOn": {
            "enum": [
              "SEMANTIC",
              "TEXT",
              "TIMELINE",
              "LOOKUP"
            ],
            "type": "string"
          },
          "recencyLabel": {
            "enum": [
              "ACTIVE",
              "RECENT",
              "HISTORICAL"
            ],
            "type": "string"
          },
          "recordedAt": {
            "format": "date-time",
            "type": "string"
          },
          "recurrenceCount": {
            "format": "int32",
            "type": "integer"
          },
          "resolution": {
            "type": "string"
          },
          "review": {
            "$ref": "#/components/schemas/MemoryReview"
          },
          "rootCause": {
            "type": "string"
          },
          "rootCauseConfidence": {
            "enum": [
              "CONFIRMED",
              "SUSPECTED",
              "UNKNOWN"
            ],
            "type": "string"
          },
          "ruledOut": {
            "type": "string"
          },
          "score": {
            "format": "double",
            "type": "number"
          },
          "significance": {
            "enum": [
              "INCIDENT",
              "OBSERVATION",
              "INCONCLUSIVE",
              "BENIGN"
            ],
            "type": "string"
          },
          "symptoms": {
            "type": "string"
          },
          "tags": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "title": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "MemoryTagCounts": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/TagCountItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "MemoryVerdictRequest": {
        "properties": {
          "note": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "note"
        ],
        "type": "object"
      },
      "MergeMapAttributeAction": {
        "properties": {
          "order": {
            "default": 0,
            "description": "Action order. Lower is applied first.",
            "format": "int32",
            "type": "integer"
          },
          "targetPath": {
            "description": "The path to the attribute to merge into.",
            "example": "services",
            "type": "string"
          },
          "type": {
            "description": "Merge value into a map in a event attributes. If the target map is not present or the target is not a map, it is a no-op. If values for the keys already exist, they are overwritten.",
            "enum": [
              "attribute-merge-action"
            ],
            "type": "string"
          },
          "value": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "description": "The value to merge.",
            "example": {
              "type": "internal"
            },
            "type": "object"
          }
        },
        "required": [
          "targetPath",
          "type",
          "value"
        ],
        "type": "object"
      },
      "MessageExactMatchNode": {
        "properties": {
          "exactValue": {
            "default": "",
            "description": "The exact message value to match.",
            "example": "\"this is an exact message\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents an exact message match in a parsed query.",
            "enum": [
              "message-exact-match-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "exactValue",
          "type"
        ],
        "type": "object"
      },
      "MessageLengthNode": {
        "properties": {
          "maxLength": {
            "description": "Inclusive maximum message length in characters. Null means no upper bound.",
            "example": 32768,
            "format": "int64",
            "type": "integer"
          },
          "minLength": {
            "description": "Inclusive minimum message length in characters. Null means no lower bound.",
            "example": 0,
            "format": "int64",
            "type": "integer"
          },
          "type": {
            "description": "A node representing a message-length filter in a parsed query.",
            "enum": [
              "message-length-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "MessageNode": {
        "properties": {
          "term": {
            "default": "",
            "description": "The message term to match.",
            "example": "word",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a message term match in a parsed query.",
            "enum": [
              "message-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "term",
          "type"
        ],
        "type": "object"
      },
      "MessagePrefixNode": {
        "properties": {
          "prefix": {
            "default": "",
            "description": "The prefix to match a message.",
            "example": "\"sample message prefix\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a message prefix in a parsed query.",
            "enum": [
              "message-prefix-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "prefix",
          "type"
        ],
        "type": "object"
      },
      "MessageRe2Node": {
        "properties": {
          "regex": {
            "default": "",
            "description": "The regex to match. This is a regex string that is matched against the message.",
            "example": "\"grepr-service-1.*\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a message regex in a parsed query.",
            "enum": [
              "message-re2-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "regex",
          "type"
        ],
        "type": "object"
      },
      "MessageWildcardNode": {
        "properties": {
          "type": {
            "description": "A node that represents a message wildcard in a parsed query.",
            "enum": [
              "message-wildcard-node"
            ],
            "type": "string"
          },
          "wildcard": {
            "default": "",
            "description": "The message with wildcard to match. This is a string that is matched against the message.",
            "example": "\"grepr-service-1*\"",
            "type": "string"
          }
        },
        "required": [
          "type",
          "wildcard"
        ],
        "type": "object"
      },
      "MeteredDimensionCommitment": {
        "description": "One metric row in a per-metric pre-commitment summary table.",
        "properties": {
          "annualCommitment": {
            "description": "Annually committed quantity for this metric.",
            "type": "number"
          },
          "metric": {
            "description": "Metric name (e.g. \"Data Processing GB\", \"Compute Units\").",
            "type": "string"
          },
          "usedCumulative": {
            "description": "Quantity consumed cumulatively since the contract started.",
            "type": "number"
          },
          "usedThisPeriod": {
            "description": "Quantity consumed during the reporting period.",
            "type": "number"
          }
        },
        "required": [
          "annualCommitment",
          "metric",
          "usedCumulative",
          "usedThisPeriod"
        ],
        "type": "object"
      },
      "MeteredDimensionUsage": {
        "description": "One metered dimension\u0027s daily usage and period totals.",
        "properties": {
          "dailyValues": {
            "default": [],
            "description": "Per-day usage counts.",
            "items": {
              "description": "Per-day usage counts.",
              "type": "number"
            },
            "type": "array"
          },
          "label": {
            "description": "Display label for the metered dimension.",
            "type": "string"
          },
          "previousMonthTotal": {
            "description": "This column\u0027s total for the prior calendar month; null when no prior-month comparison applies (a partial billing cycle, or no prior month before the contract start). Consumers derive the delta and percent change from this value and {@link #getTotal()}.",
            "type": "number"
          },
          "total": {
            "description": "Sum of the daily values over the reporting period.",
            "type": "number"
          },
          "totalDollars": {
            "description": "Billed dollar amount for the period; null when this column has no unit price.",
            "type": "number"
          }
        },
        "required": [
          "dailyValues",
          "label",
          "total"
        ],
        "type": "object"
      },
      "MetricAggSpec": {
        "description": "The metrics aggregation to apply to the source data.",
        "properties": {
          "groupByTags": {
            "default": [],
            "description": "The tags to group the results by. If unspecified, all series are grouped together. Only applicable when spaceAggregation is set.",
            "example": [
              "service",
              "env"
            ],
            "items": {
              "description": "The tags to group the results by. If unspecified, all series are grouped together. Only applicable when spaceAggregation is set.",
              "example": "[\"service\",\"env\"]",
              "type": "string"
            },
            "type": "array"
          },
          "spaceAggregation": {
            "description": "The space aggregation to use for the query. If null, no grouping is done and the timeseries are returned with full tags.",
            "enum": [
              "LATEST",
              "SUM",
              "AVG",
              "MAX"
            ],
            "example": "AVG",
            "type": "string"
          },
          "timeAggregation": {
            "description": "The time aggregation to use for the query. If this is set, timeGranularity must also be provided. If null, no time aggregation is done and the raw datapoints are returned.",
            "enum": [
              "LATEST",
              "SUM",
              "AVG",
              "MAX"
            ],
            "example": "AVG",
            "type": "string"
          },
          "timeGranularity": {
            "description": "The time granularity to use for the query. Only applicable when timeAggregation is set.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          }
        },
        "type": "object"
      },
      "MetricAggregation": {
        "description": "One aggregation declaration inside an anomaly rule.",
        "properties": {
          "aggregations": {
            "default": [],
            "description": "Aggregations to emit. Null \u003d dimension view.",
            "items": {
              "$ref": "#/components/schemas/AggregationDecl"
            },
            "type": "array"
          },
          "filters": {
            "$ref": "#/components/schemas/FilterPrimitive"
          },
          "groupBy": {
            "default": [],
            "description": "Group-by tokens: \u0027object\u0027, \u0027cohort\u0027, \u0027series\u0027, or a level-prefixed attribute path. Empty list \u003d global aggregation.",
            "example": [
              "object",
              "cohort"
            ],
            "items": {
              "description": "Group-by tokens: \u0027object\u0027, \u0027cohort\u0027, \u0027series\u0027, or a level-prefixed attribute path. Empty list \u003d global aggregation.",
              "example": "[\"object\",\"cohort\"]",
              "type": "string"
            },
            "type": "array"
          },
          "source": {
            "description": "Exact metric name or nested-aggregation alias. Mutually exclusive with filters.metricName. Null for dimension views (when filters is also unset).",
            "type": "string"
          },
          "window": {
            "description": "Aggregation window. Defaults to timeGranularity.duration.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          }
        },
        "required": [
          "groupBy"
        ],
        "type": "object"
      },
      "MetricData": {
        "description": "OTLP-aligned metric data with nested resource, scope, and datapoint hierarchy.",
        "properties": {
          "eventTimestamp": {
            "format": "int64",
            "type": "integer"
          },
          "receivedTimestamp": {
            "format": "int64",
            "type": "integer"
          },
          "resourceMetrics": {
            "$ref": "#/components/schemas/ArrayData"
          }
        },
        "type": "object"
      },
      "MetricDataRawIcebergTableSink": {
        "properties": {
          "datasetId": {
            "description": "The id of the dataset to write to",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes MetricData (one row per datapoint, attributes auto-flattened to columns) to an Iceberg table.",
            "enum": [
              "metricdata-raw-iceberg-table-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "MetricEventPredicate": {
        "properties": {
          "filterTags": {
            "additionalProperties": {
              "default": {},
              "description": "The set of tags to query for. If unspecified, all tags are queried.",
              "example": {
                "env": [
                  "prod"
                ],
                "service": [
                  "my-app"
                ]
              },
              "items": {
                "default": "{}",
                "description": "The set of tags to query for. If unspecified, all tags are queried.",
                "example": "{\"service\":[\"my-app\"],\"env\":[\"prod\"]}",
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            },
            "default": {},
            "description": "The set of tags to query for. If unspecified, all tags are queried.",
            "example": {
              "env": [
                "prod"
              ],
              "service": [
                "my-app"
              ]
            },
            "type": "object"
          },
          "metricNames": {
            "default": [],
            "description": "The names of the metrics to query. Must not be empty.",
            "example": [
              "cpu.load",
              "cpu.utilization"
            ],
            "items": {
              "description": "The names of the metrics to query. Must not be empty.",
              "example": "[\"cpu.load\",\"cpu.utilization\"]",
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "query": {
            "type": "string"
          },
          "type": {
            "description": "A predicate that checks if an event matches a metrics query.",
            "enum": [
              "metric-predicate"
            ],
            "type": "string"
          }
        },
        "required": [
          "metricNames",
          "query",
          "type"
        ],
        "type": "object"
      },
      "MetricNameFilter": {
        "description": "Glob-pattern filter on metric names.",
        "properties": {
          "empty": {
            "type": "boolean"
          },
          "excludes": {
            "default": [],
            "description": "Glob patterns to exclude. Precedence over includes.",
            "items": {
              "description": "Glob patterns to exclude. Precedence over includes.",
              "type": "string"
            },
            "type": "array"
          },
          "includes": {
            "default": [],
            "description": "Glob patterns to include. Empty list matches all.",
            "items": {
              "description": "Glob patterns to include. Empty list matches all.",
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "MetricReducer": {
        "description": "Reduces metric volume by aggregating per-object time series into per-cohort summaries while preserving the original signal when anomaly rules fire. Series that don\u0027t belong to a monitored object flow through unchanged; series matching a drop rule are discarded.",
        "properties": {
          "anomalies": {
            "default": [],
            "description": "Anomaly rules.",
            "items": {
              "$ref": "#/components/schemas/AnomalyConfig"
            },
            "type": "array"
          },
          "anomalyActions": {
            "$ref": "#/components/schemas/AnomalyActions"
          },
          "cohorts": {
            "$ref": "#/components/schemas/CohortsConfig"
          },
          "dropRules": {
            "default": [],
            "description": "Drop rules — matching series are discarded outright.",
            "items": {
              "$ref": "#/components/schemas/DropRule"
            },
            "type": "array"
          },
          "emitInterval": {
            "default": "PT20S",
            "description": "How often the reducer flushes cohort-level output.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "hostMetadata": {
            "$ref": "#/components/schemas/HostMetadataReporting"
          },
          "lateArrivalWaitDuration": {
            "default": "PT10S",
            "description": "Watermark delay applied to give late-arriving data a chance to be aggregated.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "objects": {
            "$ref": "#/components/schemas/ObjectsConfig"
          },
          "spaceAggOverrides": {
            "additionalProperties": {
              "$ref": "#/components/schemas/AggType"
            },
            "default": {},
            "description": "Per-metric-name overrides for space (cross-object) aggregation.",
            "example": {
              "system.cpu.utilization": "AVG"
            },
            "type": "object"
          },
          "timeGranularity": {
            "$ref": "#/components/schemas/TimeGranularity"
          },
          "type": {
            "description": "Metric reducer.",
            "enum": [
              "metric-reducer"
            ],
            "type": "string"
          }
        },
        "required": [
          "emitInterval",
          "lateArrivalWaitDuration",
          "name",
          "objects",
          "timeGranularity",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "MetricsIcebergTableSink": {
        "properties": {
          "datasetId": {
            "description": "The id of the dataset to write to",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes metrics to an Iceberg table.",
            "enum": [
              "metrics-iceberg-table-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "MetricsIcebergTableSource": {
        "properties": {
          "aggSpec": {
            "$ref": "#/components/schemas/MetricAggSpec"
          },
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads metrics out of an Iceberg Table for processing.",
            "enum": [
              "metrics-iceberg-table-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "aggSpec",
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "MetricsSynchronousSink": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Sink for returning metric results to the caller.",
            "enum": [
              "metrics-sync-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "MinAttributesMergeStrategy": {
        "properties": {
          "type": {
            "description": "MinAttributesMergeStrategy: Keeps the minimum numeric attribute value.",
            "enum": [
              "min"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "ModelConfiguration": {
        "properties": {
          "integrationId": {
            "type": "string"
          },
          "maxOutputTokens": {
            "format": "int32",
            "type": "integer"
          },
          "modelName": {
            "type": "string"
          },
          "provider": {
            "enum": [
              "ANTHROPIC",
              "GEMINI",
              "LITELLM",
              "OPENAI"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "MonthlyCreditPoolSummary": {
        "description": "Commitment summary for Monthly + Credit Pool plans.",
        "properties": {
          "credits": {
            "description": "Monthly recurring committed dollar amount.",
            "type": "number"
          },
          "total": {
            "description": "Gross consumption in dollars for this reporting period.",
            "type": "number"
          }
        },
        "required": [
          "credits",
          "total"
        ],
        "type": "object"
      },
      "MultiGrokParser": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "ruleSets": {
            "default": [],
            "description": "Ordered list of grok rule sets. Each rule set has its own predicate, optional extract attribute, parsing rules, and helper rules. Rule sets extracting from enriched attributes should be ordered after rule sets that populate those attributes.",
            "items": {
              "$ref": "#/components/schemas/MultiGrokRuleSet"
            },
            "type": "array"
          },
          "type": {
            "description": "Processes unstructured logs and extracts fields from them using Grok patterns.",
            "enum": [
              "multi-grok-parser"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "MultiGrokRuleSet": {
        "description": "Ordered list of grok rule sets. Each rule set has its own predicate, optional extract attribute, parsing rules, and helper rules. Rule sets extracting from enriched attributes should be ordered after rule sets that populate those attributes.",
        "properties": {
          "extractAttribute": {
            "description": "Optional attribute to extract from. If null, extracts from the log message. Rules that extract from enriched attributes should be ordered after rules that populate those attributes. A dotted string, or an array of literal keys.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ]
          },
          "grokHelperRules": {
            "default": [],
            "description": "Helper rules scoped to this rule set",
            "items": {
              "description": "Helper rules scoped to this rule set",
              "type": "string"
            },
            "type": "array"
          },
          "grokParsingRules": {
            "default": [],
            "description": "Grok parsing rules for this rule set",
            "items": {
              "description": "Grok parsing rules for this rule set",
              "type": "string"
            },
            "type": "array"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          }
        },
        "type": "object"
      },
      "NewRelic": {
        "description": "The payload containing integration data.",
        "properties": {
          "accountId": {
            "description": "Account Id for New Relic.",
            "example": "123456789",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          },
          "apiKey": {
            "description": "Masked API key for New Relic.",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "dashboardFreshnessWindow": {
            "default": "PT672H",
            "description": "The time window in which a dashboard must have been accessed to be considered active.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "exceptions": {
            "additionalProperties": {
              "$ref": "#/components/schemas/VendorImportedException"
            },
            "description": "The imported exceptions from NewRelic. This is a map from the vendor resource ID to the exception.",
            "readOnly": true,
            "type": "object"
          },
          "licenseKey": {
            "description": "Masked license key for New Relic.",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "privateLink": {
            "default": false,
            "description": "Route logs to New Relic over AWS PrivateLink using the private log endpoint.",
            "type": "boolean"
          },
          "site": {
            "description": "New Relic API endpoint url base",
            "example": "newrelic.com",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "site"
        ],
        "type": "object",
        "x-type": {
          "type": "newrelic"
        }
      },
      "NewRelicLogAgentSource": {
        "properties": {
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offsetResetStrategy": {
            "default": "LATEST",
            "description": "Strategy for resetting Kafka consumer offset when no committed offset exists or has expired. EARLIEST reads from oldest available offset (prevents data loss on restart after retention period). LATEST skips to newest offset (current behavior).",
            "enum": [
              "EARLIEST",
              "LATEST",
              "NONE"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reads log events from Grepr\u0027s New Relic collection agent. This is used to pre-process logs before being sent to New Relic.",
            "enum": [
              "newrelic-log-agent-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "NewRelicLogSink": {
        "properties": {
          "additionalAttributes": {
            "additionalProperties": {
              "description": "Additional attributes to add to the logs when writing to New Relic. Gets combined with the integration\u0027s additionalAttributes.",
              "example": "{\"processor\":\"grepr\"}",
              "type": "string"
            },
            "default": {},
            "description": "Additional attributes to add to the logs when writing to New Relic. Gets combined with the integration\u0027s additionalAttributes.",
            "example": {
              "processor": "grepr"
            },
            "type": "object"
          },
          "integrationId": {
            "description": "The New Relic integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes logs to NewRelic.",
            "enum": [
              "newrelic-log-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "NewRelicQueryPredicate": {
        "properties": {
          "query": {
            "default": "",
            "description": "The New Relic query used by the predicate. See https://docs.newrelic.com/docs/logs/ui-data/query-syntax-logs/ ",
            "example": "service:grepr-service-1",
            "type": "string"
          },
          "type": {
            "description": "A predicate that checks if an event matches a New Relic query.",
            "enum": [
              "newrelic-query"
            ],
            "type": "string"
          }
        },
        "required": [
          "query",
          "type"
        ],
        "type": "object"
      },
      "NotQueryNode": {
        "properties": {
          "expression": {
            "$ref": "#/components/schemas/ParsedQueryNode"
          },
          "type": {
            "description": "A node that represents a negation in a parsed query.",
            "enum": [
              "not-query-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "expression",
          "type"
        ],
        "type": "object"
      },
      "NrqlQueryPredicate": {
        "properties": {
          "query": {
            "default": "",
            "description": "The Nrql query used by the predicate. See https://docs.newrelic.com/docs/nrql",
            "example": "SELECT * FROM Log WHERE service \u003d \u0027grepr-service-1\u0027",
            "type": "string"
          },
          "strict": {
            "default": true,
            "description": "Whether the query should be parsed in strict mode.",
            "type": "boolean"
          },
          "type": {
            "description": "A predicate that checks if an event matches an NRQL query.",
            "enum": [
              "nrql-query"
            ],
            "type": "string"
          }
        },
        "required": [
          "query",
          "type"
        ],
        "type": "object"
      },
      "ObjectMetricsPassthrough": {
        "description": "When an object is anomalous, de-aggregate its raw datapoints alongside the per-cohort aggregate output, under a suffixed metric name.",
        "properties": {
          "enabled": {
            "default": true,
            "description": "Whether anomalous objects are de-aggregated (passed through).",
            "type": "boolean"
          },
          "metricSuffix": {
            "default": ".detail",
            "description": "Suffix appended to passthrough emits\u0027 metric names (e.g. \u0027cpu.usage\u0027 becomes \u0027cpu.usage.detail\u0027). May be empty to keep the original metric name. Must not collide with any aggregation \u0027as\u0027 suffix on the same cohort calc.",
            "example": ".detail",
            "type": "string"
          }
        },
        "required": [
          "metricSuffix"
        ],
        "type": "object"
      },
      "ObjectsConfig": {
        "description": "Object-identity configuration.",
        "properties": {
          "identifyingAttributes": {
            "default": [],
            "description": "Level-prefixed attribute keys that identify an object. Each key must have a \u0027resource.\u0027, \u0027scope.\u0027, or \u0027series.\u0027 prefix.",
            "example": [
              "resource.host.id"
            ],
            "items": {
              "description": "Level-prefixed attribute keys that identify an object. Each key must have a \u0027resource.\u0027, \u0027scope.\u0027, or \u0027series.\u0027 prefix.",
              "example": "[\"resource.host.id\"]",
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array",
            "uniqueItems": true
          },
          "metadataAttributes": {
            "default": [],
            "description": "Level-prefixed attribute keys that describe an object but may change.",
            "example": [
              "resource.os.version"
            ],
            "items": {
              "description": "Level-prefixed attribute keys that describe an object but may change.",
              "example": "[\"resource.os.version\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "metricsFilter": {
            "$ref": "#/components/schemas/FilterPrimitive"
          }
        },
        "required": [
          "identifyingAttributes"
        ],
        "type": "object"
      },
      "OpenAi": {
        "description": "The payload containing integration data.",
        "properties": {
          "apiKey": {
            "description": "Masked API key for OpenAI",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "integrationMaxTokens": {
            "description": "Total tokens all agents using this integration may consume per max-tokens window. Null uses the default of 200,000,000.",
            "example": 200000000,
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "maxTokensWindowHours": {
            "description": "Length in hours of the UTC-aligned max tokens window; must be a divisor of 24. Null uses the default of 1.",
            "example": 24,
            "format": "int32",
            "maximum": 24,
            "minimum": 1,
            "type": "integer"
          },
          "supportsEmbedding": {
            "description": "Whether this provider offers an embeddings API and can back agent investigation memory.",
            "readOnly": true,
            "type": "boolean"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "type": "object",
        "x-type": {
          "type": "openai"
        }
      },
      "Operation": {
        "description": "Base class of all Operations",
        "discriminator": {
          "mapping": {
            "agent-log-processor": "#/components/schemas/AgentLogProcessor",
            "agent-session-analytics": "#/components/schemas/AgentSessionAnalytics",
            "agent-session-events-iceberg-table-source": "#/components/schemas/AgentSessionEventsIcebergTableSource",
            "agent-sessions-iceberg-table-source": "#/components/schemas/AgentSessionsIcebergTableSource",
            "agent-sessions-sync-sink": "#/components/schemas/AgentSessionsSynchronousSink",
            "agent-signal-sink": "#/components/schemas/AgentSignalSink",
            "agent-span-processor": "#/components/schemas/AgentSpanProcessor",
            "athena-agent-sessions-source": "#/components/schemas/AthenaAgentSessionsSource",
            "athena-analytics-source": "#/components/schemas/AthenaAnalyticsSource",
            "cloudtrail-file-source": "#/components/schemas/CloudTrailLogsFileSource",
            "datadog-log-agent-source": "#/components/schemas/DatadogLogAgentSource",
            "datadog-log-cloud-source": "#/components/schemas/DatadogLogCloudSource",
            "datadog-log-sink": "#/components/schemas/DatadogLogSink",
            "datadog-metrics-sink": "#/components/schemas/DatadogMetricsSink",
            "datadog-stats-sink": "#/components/schemas/DatadogStatsSink",
            "datadog-trace-agent-source": "#/components/schemas/DatadogTraceAgentSource",
            "datadog-trace-sink": "#/components/schemas/DatadogTraceSink",
            "discarding-sink": "#/components/schemas/DiscardingSink",
            "event-dedup-iceberg-table-sink": "#/components/schemas/EventDedupIcebergTableSink",
            "grepr-metrics-source": "#/components/schemas/GreprMetricsSource",
            "grepr-pipe-log-sink": "#/components/schemas/GreprPipeLogSink",
            "grepr-pipe-log-source": "#/components/schemas/GreprPipeLogSource",
            "grepr-raw-log-source": "#/components/schemas/GreprRawLogsSource",
            "grepr-raw-span-source": "#/components/schemas/GreprRawSpanSource",
            "grepr-reducer-log-source": "#/components/schemas/GreprReducerLogSource",
            "grepr-uploaded-log-file-source": "#/components/schemas/GreprUploadedLogFileSource",
            "grok-parser": "#/components/schemas/GrokParser",
            "json-log-processor": "#/components/schemas/JsonLogProcessor",
            "legacy-datadog-metrics-sink": "#/components/schemas/LegacyDatadogMetricsSink",
            "log-attributes-remapper": "#/components/schemas/LogAttributesRemapper",
            "log-reducer": "#/components/schemas/LogReducer",
            "log-rules-application": "#/components/schemas/LogRulesApplication",
            "log-transform": "#/components/schemas/LogTransformAction",
            "logs-backfill-iceberg-table-source": "#/components/schemas/LogsBackfillFlinkSource",
            "logs-branch": "#/components/schemas/LogsBranch",
            "logs-event-sampler": "#/components/schemas/LogsEventSampler",
            "logs-filter": "#/components/schemas/LogsFilter",
            "logs-iceberg-replay-source": "#/components/schemas/IcebergLogsReplaySource",
            "logs-iceberg-table-sink": "#/components/schemas/LogsIcebergTableSink",
            "logs-iceberg-table-source": "#/components/schemas/LogsIcebergTableSource",
            "logs-sync-sink": "#/components/schemas/LogsSynchronousSink",
            "logs-values-source": "#/components/schemas/LogsValuesSource",
            "masking-operator": "#/components/schemas/MaskingOperator",
            "metric-reducer": "#/components/schemas/MetricReducer",
            "metricdata-raw-iceberg-table-sink": "#/components/schemas/MetricDataRawIcebergTableSink",
            "metrics-iceberg-table-sink": "#/components/schemas/MetricsIcebergTableSink",
            "metrics-iceberg-table-source": "#/components/schemas/MetricsIcebergTableSource",
            "metrics-sync-sink": "#/components/schemas/MetricsSynchronousSink",
            "multi-grok-parser": "#/components/schemas/MultiGrokParser",
            "newrelic-log-agent-source": "#/components/schemas/NewRelicLogAgentSource",
            "newrelic-log-sink": "#/components/schemas/NewRelicLogSink",
            "otlp-log-agent-source": "#/components/schemas/OtlpLogAgentSource",
            "otlp-log-sink": "#/components/schemas/OtlpLogSink",
            "otlp-trace-agent-source": "#/components/schemas/OtlpTraceAgentSource",
            "otlp-trace-sink": "#/components/schemas/OtlpTraceSink",
            "pattern-lookup-iceberg-table-sink": "#/components/schemas/PatternLookupIcebergTableSink",
            "pattern-matcher": "#/components/schemas/PatternMatcher",
            "query-sink": "#/components/schemas/QuerySink",
            "reducer-logs-iceberg-table-source": "#/components/schemas/ReducerLogsQuerySource",
            "rule-engine": "#/components/schemas/LogsRuleEngine",
            "s3-file-source": "#/components/schemas/S3LogsFileSource",
            "span-tagger": "#/components/schemas/SpanTagger",
            "spans-backfill-iceberg-table-source": "#/components/schemas/SpansBackfillIcebergTableSource",
            "spans-dedup-iceberg-table-sink": "#/components/schemas/SpanDedupIcebergTableSink",
            "spans-iceberg-table-sink": "#/components/schemas/SpansIcebergTableSink",
            "spans-sync-sink": "#/components/schemas/SpansSynchronousSink",
            "splunk-log-agent-source": "#/components/schemas/SplunkLogAgentSource",
            "splunk-log-http-source": "#/components/schemas/SplunkLogHttpSource",
            "splunk-log-sink": "#/components/schemas/SplunkLogSink",
            "sql-operation": "#/components/schemas/SqlOperation",
            "sumologic-log-agent-source": "#/components/schemas/SumoLogSource",
            "sumologic-log-sink": "#/components/schemas/SumoLogSink",
            "template-operation": "#/components/schemas/TemplateOperation",
            "trace-reducer": "#/components/schemas/TraceReducer",
            "trace-sampler": "#/components/schemas/TraceSampler",
            "traces-iceberg-table-source": "#/components/schemas/TracesIcebergTableSource",
            "trigger-action": "#/components/schemas/TriggerActionOp",
            "trino-analytics-source": "#/components/schemas/TrinoAnalyticsSource",
            "trino-raw-log-source": "#/components/schemas/TrinoRawLogsSource",
            "trino-raw-span-source": "#/components/schemas/TrinoRawSpanSource",
            "trino-reducer-log-source": "#/components/schemas/TrinoReducerLogSource",
            "variant-sync-sink": "#/components/schemas/VariantSynchronousSink",
            "vendorlog-event-dedup-iceberg-table-sink": "#/components/schemas/VendorLogEventDedupIcebergTableSink"
          },
          "propertyName": "type"
        },
        "example": [
          {
            "end": "2024-08-07T22:05:07Z",
            "integrationId": "0jn5rdc93r10t",
            "name": "source",
            "processing": "BATCH",
            "query": {
              "query": "service:grepr-query",
              "type": "datadog-query"
            },
            "start": "2024-08-07T22:00:07Z",
            "table": "logevent_raw_devpipeline",
            "type": "logs-iceberg-table-source"
          },
          {
            "name": "sink",
            "type": "logs-sync-sink"
          }
        ],
        "oneOf": [
          {
            "$ref": "#/components/schemas/LogsEventSampler"
          },
          {
            "$ref": "#/components/schemas/LogsBranch"
          },
          {
            "$ref": "#/components/schemas/LogsFilter"
          },
          {
            "$ref": "#/components/schemas/GrokParser"
          },
          {
            "$ref": "#/components/schemas/JsonLogProcessor"
          },
          {
            "$ref": "#/components/schemas/LogAttributesRemapper"
          },
          {
            "$ref": "#/components/schemas/LogReducer"
          },
          {
            "$ref": "#/components/schemas/LogTransformAction"
          },
          {
            "$ref": "#/components/schemas/MaskingOperator"
          },
          {
            "$ref": "#/components/schemas/PatternMatcher"
          },
          {
            "$ref": "#/components/schemas/LogsIcebergTableSink"
          },
          {
            "$ref": "#/components/schemas/PatternLookupIcebergTableSink"
          },
          {
            "$ref": "#/components/schemas/EventDedupIcebergTableSink"
          },
          {
            "$ref": "#/components/schemas/VendorLogEventDedupIcebergTableSink"
          },
          {
            "$ref": "#/components/schemas/SpanDedupIcebergTableSink"
          },
          {
            "$ref": "#/components/schemas/SpansIcebergTableSink"
          },
          {
            "$ref": "#/components/schemas/LogsIcebergTableSource"
          },
          {
            "$ref": "#/components/schemas/AgentSessionsIcebergTableSource"
          },
          {
            "$ref": "#/components/schemas/AgentSessionEventsIcebergTableSource"
          },
          {
            "$ref": "#/components/schemas/MetricsIcebergTableSource"
          },
          {
            "$ref": "#/components/schemas/TracesIcebergTableSource"
          },
          {
            "$ref": "#/components/schemas/SpansBackfillIcebergTableSource"
          },
          {
            "$ref": "#/components/schemas/MetricsIcebergTableSink"
          },
          {
            "$ref": "#/components/schemas/MetricDataRawIcebergTableSink"
          },
          {
            "$ref": "#/components/schemas/DatadogLogCloudSource"
          },
          {
            "$ref": "#/components/schemas/DatadogLogAgentSource"
          },
          {
            "$ref": "#/components/schemas/DatadogTraceAgentSource"
          },
          {
            "$ref": "#/components/schemas/GreprVendorSource"
          },
          {
            "$ref": "#/components/schemas/GreprMetricsSource"
          },
          {
            "$ref": "#/components/schemas/DatadogLogSink"
          },
          {
            "$ref": "#/components/schemas/DatadogTraceSink"
          },
          {
            "$ref": "#/components/schemas/NewRelicLogSink"
          },
          {
            "$ref": "#/components/schemas/SplunkLogSink"
          },
          {
            "$ref": "#/components/schemas/SumoLogSource"
          },
          {
            "$ref": "#/components/schemas/SumoLogSink"
          },
          {
            "$ref": "#/components/schemas/OtlpLogSink"
          },
          {
            "$ref": "#/components/schemas/OtlpTraceSink"
          },
          {
            "$ref": "#/components/schemas/IcebergLogsReplaySource"
          },
          {
            "$ref": "#/components/schemas/LogsBackfillFlinkSource"
          },
          {
            "$ref": "#/components/schemas/LogsRuleEngine"
          },
          {
            "$ref": "#/components/schemas/ReducerLogsQuerySource"
          },
          {
            "$ref": "#/components/schemas/LogsSynchronousSink"
          },
          {
            "$ref": "#/components/schemas/AgentSessionsSynchronousSink"
          },
          {
            "$ref": "#/components/schemas/MetricsSynchronousSink"
          },
          {
            "$ref": "#/components/schemas/VariantSynchronousSink"
          },
          {
            "$ref": "#/components/schemas/SpansSynchronousSink"
          },
          {
            "$ref": "#/components/schemas/QuerySink"
          },
          {
            "$ref": "#/components/schemas/AgentSignalSink"
          },
          {
            "$ref": "#/components/schemas/DiscardingSink"
          },
          {
            "$ref": "#/components/schemas/GreprPipeLogSource"
          },
          {
            "$ref": "#/components/schemas/GreprPipeLogSink"
          },
          {
            "$ref": "#/components/schemas/DatadogMetricsSink"
          },
          {
            "$ref": "#/components/schemas/LegacyDatadogMetricsSink"
          },
          {
            "$ref": "#/components/schemas/AthenaAnalyticsSource"
          },
          {
            "$ref": "#/components/schemas/GreprReducerLogSource"
          },
          {
            "$ref": "#/components/schemas/AthenaAgentSessionsSource"
          },
          {
            "$ref": "#/components/schemas/GreprRawLogsSource"
          },
          {
            "$ref": "#/components/schemas/GreprRawSpanSource"
          },
          {
            "$ref": "#/components/schemas/TrinoAnalyticsSource"
          },
          {
            "$ref": "#/components/schemas/TrinoReducerLogSource"
          },
          {
            "$ref": "#/components/schemas/TrinoRawLogsSource"
          },
          {
            "$ref": "#/components/schemas/TrinoRawSpanSource"
          },
          {
            "$ref": "#/components/schemas/SplunkLogAgentSource"
          },
          {
            "$ref": "#/components/schemas/SplunkLogHttpSource"
          },
          {
            "$ref": "#/components/schemas/NewRelicLogAgentSource"
          },
          {
            "$ref": "#/components/schemas/OtlpLogAgentSource"
          },
          {
            "$ref": "#/components/schemas/OtlpTraceAgentSource"
          },
          {
            "$ref": "#/components/schemas/TraceSampler"
          },
          {
            "$ref": "#/components/schemas/SpanTagger"
          },
          {
            "$ref": "#/components/schemas/S3LogsFileSource"
          },
          {
            "$ref": "#/components/schemas/CloudTrailLogsFileSource"
          },
          {
            "$ref": "#/components/schemas/GreprUploadedLogFileSource"
          },
          {
            "$ref": "#/components/schemas/TemplateOperation"
          },
          {
            "$ref": "#/components/schemas/SqlOperation"
          },
          {
            "$ref": "#/components/schemas/TraceReducer"
          },
          {
            "$ref": "#/components/schemas/MetricReducer"
          },
          {
            "$ref": "#/components/schemas/DatadogStatsSink"
          },
          {
            "$ref": "#/components/schemas/LogsValuesSource"
          },
          {
            "$ref": "#/components/schemas/LogRulesApplication"
          },
          {
            "$ref": "#/components/schemas/TriggerActionOp"
          },
          {
            "$ref": "#/components/schemas/MultiGrokParser"
          },
          {
            "$ref": "#/components/schemas/AgentSessionAnalytics"
          },
          {
            "$ref": "#/components/schemas/AgentLogProcessor"
          },
          {
            "$ref": "#/components/schemas/AgentSpanProcessor"
          }
        ],
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Operations"
        ]
      },
      "OrQueryNode": {
        "properties": {
          "expressions": {
            "default": [],
            "description": "This is a list of expressions that are combined with an OR operator.",
            "example": [
              "message1",
              "message2"
            ],
            "items": {
              "$ref": "#/components/schemas/ParsedQueryNode"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "A node that represents a logical OR in a parsed query.",
            "enum": [
              "or-query-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "expressions",
          "type"
        ],
        "type": "object"
      },
      "Otlp": {
        "description": "The payload containing integration data.",
        "properties": {
          "attributeHeaders": {
            "default": [],
            "description": "Headers whose values are dynamically extracted from log event attributes. Each mapping specifies a header name and the attribute path to read the value from.",
            "example": [
              {
                "attributePath": [
                  "kubernetes",
                  "namespace",
                  "name"
                ],
                "headerName": "X-Tenant"
              }
            ],
            "items": {
              "$ref": "#/components/schemas/AttributeHeaderMapping"
            },
            "type": "array"
          },
          "endpoint": {
            "description": "The base OTLP endpoint. Signal-specific paths will be appended automatically (e.g., /v1/logs for logs, /v1/traces for traces) unless overridden by signal-specific endpoint fields.",
            "example": "https://otlp.example.com:4318",
            "type": "string"
          },
          "headers": {
            "description": "Non-secret HTTP headers for writing to an OTLP sink. Headers can contain multiple values.",
            "example": [
              [
                "Host",
                "my_server"
              ],
              [
                "Accept-Language",
                "en-US"
              ],
              [
                "Accept-Language",
                "en;q\u003d0.9"
              ]
            ],
            "items": {
              "$ref": "#/components/schemas/Header"
            },
            "type": "array"
          },
          "logsEndpoint": {
            "description": "Optional override for the logs endpoint. If specified, this will be used instead of appending /v1/logs to the base endpoint.",
            "example": "https://logs.example.com:4318/v1/logs",
            "type": "string"
          },
          "outputEncoding": {
            "default": "proto",
            "description": "Wire encoding for outbound OTLP HTTP requests.",
            "enum": [
              "proto",
              "json"
            ],
            "example": "proto",
            "type": "string"
          },
          "plainTextToken": {
            "description": "A unique token generated by Grepr in plain-text",
            "example": "plain-text-secret",
            "readOnly": true,
            "type": "string"
          },
          "secretHeaders": {
            "additionalProperties": {
              "$ref": "#/components/schemas/SecretApi"
            },
            "description": "Secret HTTP headers for writing to an OTLP sink. Headers are single-valued.",
            "example": {
              "DD-API-KEY": "******ey"
            },
            "type": "object"
          },
          "token": {
            "description": "A unique token generated by Grepr to authenticate for an OTLP integration at ingestion",
            "example": "*****ssHA",
            "readOnly": true,
            "type": "string"
          },
          "tracesEndpoint": {
            "description": "Optional override for the traces endpoint. If specified, this will be used instead of appending /v1/traces to the base endpoint.",
            "example": "https://traces.example.com:4318/v1/traces",
            "type": "string"
          }
        },
        "required": [
          "endpoint"
        ],
        "type": "object",
        "x-type": {
          "type": "otlp"
        }
      },
      "OtlpLogAgentSource": {
        "properties": {
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offsetResetStrategy": {
            "default": "LATEST",
            "description": "Strategy for resetting Kafka consumer offset when no committed offset exists or has expired. EARLIEST reads from oldest available offset (prevents data loss on restart after retention period). LATEST skips to newest offset (current behavior).",
            "enum": [
              "EARLIEST",
              "LATEST",
              "NONE"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reads log events from Open Telemetry collector. This is used to pre-process logs before being sent to an Otel sink.",
            "enum": [
              "otlp-log-agent-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "OtlpLogSink": {
        "properties": {
          "additionalAttributes": {
            "additionalProperties": {
              "description": "Additional attributes to add to the logs when writing to OTLP destination. Gets combined with the integration\u0027s additionalAttributes.",
              "example": "{\"processor\":\"grepr\"}",
              "type": "string"
            },
            "default": {},
            "description": "Additional attributes to add to the logs when writing to OTLP destination. Gets combined with the integration\u0027s additionalAttributes.",
            "example": {
              "processor": "grepr"
            },
            "type": "object"
          },
          "integrationId": {
            "description": "The OTLP integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes processed logs to any OTLP-compatible destination.",
            "enum": [
              "otlp-log-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "OtlpTraceAgentSource": {
        "properties": {
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offsetResetStrategy": {
            "default": "LATEST",
            "description": "Strategy for resetting Kafka consumer offset when no committed offset exists or has expired. EARLIEST reads from oldest available offset (prevents data loss on restart after retention period). LATEST skips to newest offset (current behavior).",
            "enum": [
              "EARLIEST",
              "LATEST",
              "NONE"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reads trace events from an OpenTelemetry collector. This is used to process traces from OTLP trace ingestion.",
            "enum": [
              "otlp-trace-agent-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "OtlpTraceSink": {
        "properties": {
          "additionalAttributes": {
            "additionalProperties": {
              "description": "Additional attributes to add to the logs when writing to OTLP destination. Gets combined with the integration\u0027s additionalAttributes.",
              "example": "{\"processor\":\"grepr\"}",
              "type": "string"
            },
            "default": {},
            "description": "Additional attributes to add to the logs when writing to OTLP destination. Gets combined with the integration\u0027s additionalAttributes.",
            "example": {
              "processor": "grepr"
            },
            "type": "object"
          },
          "integrationId": {
            "description": "The OTLP integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes processed logs to any OTLP-compatible destination.",
            "enum": [
              "otlp-trace-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "PagerDutyMcp": {
        "description": "The payload containing integration data.",
        "properties": {
          "accountUrl": {
            "description": "Base web URL of the PagerDuty account, used to link to created incidents (e.g. https://acme.pagerduty.com). Optional.",
            "example": "https://acme.pagerduty.com",
            "type": "string"
          },
          "apiKey": {
            "description": "Masked API key for the MCP server.",
            "readOnly": true,
            "type": "string"
          },
          "serverUrl": {
            "description": "MCP server endpoint URL.",
            "example": "https://mcp.notion.so/v1",
            "type": "string"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "serverUrl"
        ],
        "type": "object",
        "x-type": {
          "type": "pagerduty-mcp"
        }
      },
      "ParseQueryRequest": {
        "properties": {
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "validationTarget": {
            "default": "PARSED_QUERY_NODE",
            "description": "Which runtime representation to validate the query against. Defaults to PARSED_QUERY_NODE (returns the parsed tree for the in-browser matcher). Use EVENT_PREDICATE to validate against the Java predicate the Flink pipeline runs; no parsed tree is returned in that case.",
            "enum": [
              "PARSED_QUERY_NODE",
              "EVENT_PREDICATE"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "ParseQueryResponse": {
        "properties": {
          "errorMessage": {
            "description": "The error message if there is an error",
            "type": "string"
          },
          "parsedQuery": {
            "$ref": "#/components/schemas/ParsedQueryTree"
          },
          "valid": {
            "description": "Whether a query is valid.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ParseResult": {
        "properties": {
          "errorMessage": {
            "type": "string"
          },
          "parseable": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ParsedQueryImportStatus": {
        "properties": {
          "coveredIntegrationIds": {
            "default": [],
            "description": "Every integration an import updates. Integrations that share a vendor account share one fetch, so importing for one imports for all of them.",
            "items": {
              "description": "Every integration an import updates. Integrations that share a vendor account share one fetch, so importing for one imports for all of them.",
              "type": "string"
            },
            "type": "array"
          },
          "hasCredential": {
            "description": "Whether the credential the import needs is saved. For Datadog this is the application key.",
            "example": true,
            "type": "boolean"
          },
          "importing": {
            "description": "Whether an import covering this integration is already under way.",
            "example": false,
            "type": "boolean"
          },
          "supported": {
            "description": "Whether this vendor\u0027s parsed queries can be imported at all. False for vendors Grepr cannot read alert queries from.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "coveredIntegrationIds",
          "hasCredential",
          "importing",
          "supported"
        ],
        "type": "object"
      },
      "ParsedQueryNode": {
        "discriminator": {
          "mapping": {
            "all-query-node": "#/components/schemas/AllQueryNode",
            "and-query-node": "#/components/schemas/AndQueryNode",
            "attribute-comparator-node": "#/components/schemas/AttributeWithComparatorNode",
            "attribute-key-term-node": "#/components/schemas/AttributeKeyTermNode",
            "attribute-node": "#/components/schemas/AttributeNode",
            "attribute-prefix-node": "#/components/schemas/AttributePrefixNode",
            "attribute-re2-node": "#/components/schemas/AttributeRe2Node",
            "attribute-wildcard-node": "#/components/schemas/AttributeWildcardNode",
            "message-exact-match-node": "#/components/schemas/MessageExactMatchNode",
            "message-length-node": "#/components/schemas/MessageLengthNode",
            "message-node": "#/components/schemas/MessageNode",
            "message-prefix-node": "#/components/schemas/MessagePrefixNode",
            "message-re2-node": "#/components/schemas/MessageRe2Node",
            "message-wildcard-node": "#/components/schemas/MessageWildcardNode",
            "not-query-node": "#/components/schemas/NotQueryNode",
            "or-query-node": "#/components/schemas/OrQueryNode",
            "phrase-node": "#/components/schemas/PhraseNode",
            "severity-node": "#/components/schemas/SeverityNode",
            "tag-comparator-node": "#/components/schemas/TagWithComparatorNode",
            "tag-key-node": "#/components/schemas/TagKeyNode",
            "tag-key-prefix-node": "#/components/schemas/TagKeyPrefixNode",
            "tag-key-wildcard-node": "#/components/schemas/TagKeyWildcardNode",
            "tag-node": "#/components/schemas/TagNode",
            "tag-prefix-node": "#/components/schemas/TagPrefixNode",
            "tag-re2-node": "#/components/schemas/TagRe2Node",
            "tag-wildcard-node": "#/components/schemas/TagWildcardNode"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AttributeNode"
          },
          {
            "$ref": "#/components/schemas/AttributeKeyTermNode"
          },
          {
            "$ref": "#/components/schemas/AttributeRe2Node"
          },
          {
            "$ref": "#/components/schemas/AttributeWildcardNode"
          },
          {
            "$ref": "#/components/schemas/AttributePrefixNode"
          },
          {
            "$ref": "#/components/schemas/AttributeWithComparatorNode"
          },
          {
            "$ref": "#/components/schemas/MessageExactMatchNode"
          },
          {
            "$ref": "#/components/schemas/MessageLengthNode"
          },
          {
            "$ref": "#/components/schemas/MessageNode"
          },
          {
            "$ref": "#/components/schemas/MessageRe2Node"
          },
          {
            "$ref": "#/components/schemas/MessageWildcardNode"
          },
          {
            "$ref": "#/components/schemas/MessagePrefixNode"
          },
          {
            "$ref": "#/components/schemas/PhraseNode"
          },
          {
            "$ref": "#/components/schemas/TagKeyNode"
          },
          {
            "$ref": "#/components/schemas/TagKeyWildcardNode"
          },
          {
            "$ref": "#/components/schemas/TagKeyPrefixNode"
          },
          {
            "$ref": "#/components/schemas/TagNode"
          },
          {
            "$ref": "#/components/schemas/TagWildcardNode"
          },
          {
            "$ref": "#/components/schemas/TagPrefixNode"
          },
          {
            "$ref": "#/components/schemas/TagRe2Node"
          },
          {
            "$ref": "#/components/schemas/TagWithComparatorNode"
          },
          {
            "$ref": "#/components/schemas/SeverityNode"
          },
          {
            "$ref": "#/components/schemas/NotQueryNode"
          },
          {
            "$ref": "#/components/schemas/AndQueryNode"
          },
          {
            "$ref": "#/components/schemas/OrQueryNode"
          },
          {
            "$ref": "#/components/schemas/AllQueryNode"
          }
        ],
        "type": "object"
      },
      "ParsedQueryTree": {
        "description": "The parsed query tree",
        "properties": {
          "root": {
            "$ref": "#/components/schemas/ParsedQueryNode"
          }
        },
        "type": "object"
      },
      "PartitionConfig": {
        "description": "User-chosen partition layout.",
        "properties": {
          "fields": {
            "default": [],
            "description": "User-chosen partition fields applied in order.",
            "items": {
              "$ref": "#/components/schemas/PartitionFieldConfig"
            },
            "type": "array"
          }
        },
        "required": [
          "fields"
        ],
        "type": "object"
      },
      "PartitionFieldConfig": {
        "description": "User-chosen partition fields applied in order.",
        "properties": {
          "buckets": {
            "description": "Number of buckets to hash this column into.",
            "format": "int32",
            "maximum": 256,
            "minimum": 2,
            "type": "integer"
          },
          "column": {
            "description": "Built-in column (service/host) or a promoted tag key to partition by.",
            "type": "string"
          }
        },
        "required": [
          "buckets",
          "column"
        ],
        "type": "object"
      },
      "PartitionTransform": {
        "description": "An Iceberg partition transform applied to a column: a time transform (hour/day/month/year) or a hash bucket transform with a fixed bucket count. Discriminated by the \u0027type\u0027 property (time/bucket).",
        "discriminator": {
          "mapping": {
            "bucket": "#/components/schemas/BucketPartitionTransform",
            "time": "#/components/schemas/TimePartitionTransform"
          },
          "propertyName": "type"
        },
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "PassthroughNode": {
        "description": "Terminal — forwards every event to the chain\u0027s downstream pipeline step. UI label is stage-derived (e.g. \"Send to Reducer\").",
        "type": "object"
      },
      "PatternLookupIcebergTableSink": {
        "properties": {
          "datasetId": {
            "description": "The id of the dataset to write to",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes event id to pattern id mappings to an Iceberg Table.",
            "enum": [
              "pattern-lookup-iceberg-table-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "PatternMatcher": {
        "properties": {
          "attributeTokenization": {
            "default": "KEYS_AND_VALUES",
            "description": "Use attribute shape only, or shape and whole-value similarity tokens.",
            "enum": [
              "KEYS_ONLY",
              "KEYS_AND_VALUES"
            ],
            "type": "string"
          },
          "delimiters": {
            "default": [
              ":",
              "#",
              "[",
              "]",
              "(",
              ")",
              "{",
              "}",
              "|",
              ",",
              ";",
              "\"",
              "\u0027",
              " ",
              "\t",
              "\n",
              "\r",
              "\u0026",
              "\u003d",
              "?",
              "!",
              "+",
              "*",
              "/",
              "\u003c",
              "\u003e",
              "%",
              "^",
              "~",
              "`"
            ],
            "description": "Characters to use for splitting tokens.",
            "items": {
              "description": "Characters to use for splitting tokens.",
              "title": "Token delimiters",
              "type": "string"
            },
            "title": "Token delimiters",
            "type": "array"
          },
          "emitNewPatternSignals": {
            "default": false,
            "description": "Whether this operation may emit LogPatternSignal events to the agent-service when new patterns are detected or replayed. Must be enabled before an agent can subscribe to this pipeline.",
            "title": "Emit new-pattern signals",
            "type": "boolean"
          },
          "enabledMasks": {
            "default": [
              "ipport",
              "timestamp",
              "uuid",
              "number"
            ],
            "description": "Masks that are enabled for tokenizing messages.",
            "example": [
              "ipport",
              "timestamp",
              "uuid",
              "number"
            ],
            "items": {
              "default": "[\"ipport\",\"timestamp\",\"uuid\",\"number\"]",
              "description": "Masks that are enabled for tokenizing messages.",
              "example": "[\"ipport\",\"timestamp\",\"uuid\",\"number\"]",
              "title": "Enabled masks",
              "type": "string"
            },
            "title": "Enabled masks",
            "type": "array"
          },
          "excludedAttributePrefixes": {
            "default": [],
            "description": "Excluded attribute prefixes as arrays of literal key segments. Does not affect partition-by values or output attributes.",
            "items": {
              "description": "Excluded attribute prefixes as arrays of literal key segments. Does not affect partition-by values or output attributes.",
              "items": {
                "description": "Excluded attribute prefixes as arrays of literal key segments. Does not affect partition-by values or output attributes.",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "includedAttributePrefixes": {
            "default": [],
            "description": "Included attribute prefixes as arrays of literal key segments. Empty selects all. Array elements are traversed without indices.",
            "items": {
              "description": "Included attribute prefixes as arrays of literal key segments. Empty selects all. Array elements are traversed without indices.",
              "items": {
                "description": "Included attribute prefixes as arrays of literal key segments. Empty selects all. Array elements are traversed without indices.",
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          },
          "masks": {
            "default": [
              [
                "ipport",
                "(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?"
              ],
              [
                "timestamp",
                "(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))"
              ],
              [
                "uuid",
                "(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)"
              ],
              [
                "number",
                "(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)"
              ],
              [
                "awsarn",
                "arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*"
              ],
              [
                "awstoken",
                "(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}"
              ]
            ],
            "description": "Set of masks that can be applied to messages before tokenizing them. These masks are specified as pairs of (name, regex).",
            "example": "[[\"ipport\", \"(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?\"],[\"timestamp\", \"(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))\"],[\"uuid\", \"(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)\"],[\"number\", \"(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)\"],[\"awsarn\", \"arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*\"],[\"awstoken\", \"(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}\"]]",
            "items": {
              "default": "[[\"ipport\", \"(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?\"],[\"timestamp\", \"(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))\"],[\"uuid\", \"(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)\"],[\"number\", \"(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)\"],[\"awsarn\", \"arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*\"],[\"awstoken\", \"(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}\"]]",
              "description": "Set of masks that can be applied to messages before tokenizing them. These masks are specified as pairs of (name, regex).",
              "example": "[[\"ipport\", \"(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?\"],[\"timestamp\", \"(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))\"],[\"uuid\", \"(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)\"],[\"number\", \"(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)\"],[\"awsarn\", \"arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*\"],[\"awstoken\", \"(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}\"]]",
              "items": {
                "default": "[[\"ipport\", \"(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?\"],[\"timestamp\", \"(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))\"],[\"uuid\", \"(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)\"],[\"number\", \"(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)\"],[\"awsarn\", \"arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*\"],[\"awstoken\", \"(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}\"]]",
                "description": "Set of masks that can be applied to messages before tokenizing them. These masks are specified as pairs of (name, regex).",
                "example": "[[\"ipport\", \"(?:\\d{1,3}\\.){3}\\d{1,3}(?::\\d{1,5})?\"],[\"timestamp\", \"(?:(?:\\d{4}-\\d{2}-\\d{2}(?:T|\\s)\\d{2}:\\d{2}:\\d{2}(?:[.,]\\d{1,12})?(?:Z|(?:[\\+\\-]\\d{2}:?\\d{2})|\\sUTC)?)|(?:\\d{1,4}/\\d{1,2}/\\d{1,4}(,?\\s\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)?)|(?:\\d{1,2}:\\d{2}:\\d{1,2}(?:[.,]\\d{1,12})?(?:\\s?(?:[AP]M))?)|(?:\\d{2}/[A-Za-z]{3}/\\d{4}(?:[:\\s]\\d{2}:\\d{2}:\\d{2}(?:\\s\\+[0-9]{4})?)?))\"],[\"uuid\", \"(?:^|(?\u003c!\\w))(?:[a-fA-F0-9]{8}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{4}[-,_,:]?[a-fA-F0-9]{12})(?:(?!\\w)|$)\"],[\"number\", \"(?:^|(?\u003c!\\w))(?:(?:0x[a-fA-F0-9]{1,100})|(?:[\\-\\+]?(?\u003e(?:(?:\\d{1,100})?(?:\\.\\d{1,100})(?:[eE][\\-\\+]?\\d{1,100}))|(?:(?:\\d{1,100})?(?:\\.\\d{1,100}))|(?:\\d{1,100}))))(?:(?!\\w)|$)\"],[\"awsarn\", \"arn:aws(?:-[a-z]+-[a-z]+)?:[a-zA-Z0-9-]+:(?:[a-z0-9-]+:)?(?:[0-9]{12})?:[a-zA-Z0-9-_./]+(?::[a-zA-Z0-9-_./]+)*\"],[\"awstoken\", \"(?:IQoJb3JpZ2luX[A-Za-z0-9+/]{10,20})[A-Za-z0-9+/]{800,1100}\"]]",
                "title": "Masks",
                "type": "string"
              },
              "title": "Masks",
              "type": "array"
            },
            "title": "Masks",
            "type": "array"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "partitionByAttributePaths": {
            "default": [],
            "description": "Attribute paths as arrays of keys. Use for unambiguous nested vs flat attributes. Example: [[\"user\", \"id\"]] for nested user.id, [[\"user.id\"]] for flat attribute named \u0027user.id\u0027",
            "example": [
              [
                "user",
                "id"
              ],
              [
                "request.url"
              ]
            ],
            "items": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "title": "Partition by attribute paths (array format)",
            "type": "array",
            "uniqueItems": true
          },
          "partitionByAttributes": {
            "default": [],
            "items": {
              "description": "Attributes by which to group logs for pattern matching. For example, to match patterns separately by an attribute, specify `x.y`, which would be interpreted as a JSON path under attributes. These work like \u0027GROUP BY\u0027 in SQL.",
              "example": "[\"url.path\"]",
              "title": "Partition by attributes",
              "type": "string"
            },
            "type": "array"
          },
          "partitionByTags": {
            "default": [],
            "items": {
              "description": "Tag keys by which to group logs for pattern matching. For example, to match patterns separately per host, specify `host`. These work like \u0027GROUP BY\u0027 in SQL.",
              "example": "[\"host\"]",
              "title": "Partition by tags",
              "type": "string"
            },
            "type": "array"
          },
          "similarityThreshold": {
            "default": 70.0,
            "description": "Controls how close a set of tokens are to a pattern before it is considered a match. Calculated as the percent of matching tokens between a pattern and a message.",
            "example": 70.0,
            "format": "double",
            "maximum": 100,
            "minimum": 20,
            "title": "Similarity threshold",
            "type": "number"
          },
          "tokenizationInput": {
            "default": "MESSAGE_ONLY",
            "description": "Selects message text, attributes, both, or message text with an attributes fallback.",
            "enum": [
              "MESSAGE_ONLY",
              "ATTRIBUTES_ONLY",
              "MESSAGE_AND_ATTRIBUTES",
              "AUTO"
            ],
            "type": "string"
          },
          "type": {
            "description": "Matches log patterns using an iterative feedback loop. Events with known patterns skip the global reducer for improved efficiency.",
            "enum": [
              "pattern-matcher"
            ],
            "type": "string"
          }
        },
        "required": [
          "delimiters",
          "enabledMasks",
          "masks",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "PatternRuleConfig": {
        "description": "Configuration for a pattern rule.",
        "discriminator": {
          "mapping": {
            "datadog-query": "#/components/schemas/DatadogQueryRuleConfig",
            "masking": "#/components/schemas/MaskingRuleConfig",
            "time-series": "#/components/schemas/TimeSeriesRuleConfig"
          },
          "propertyName": "type"
        },
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "order": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "PaygSummary": {
        "description": "Commitment summary for Monthly + PAYG plans.",
        "properties": {
          "chargedThisPeriod": {
            "description": "Invoice total for this reporting period.",
            "type": "number"
          }
        },
        "type": "object"
      },
      "PendingApproval": {
        "properties": {
          "approvalNonce": {
            "type": "string"
          },
          "categories": {
            "items": {
              "$ref": "#/components/schemas/ChatActionCategory"
            },
            "type": "array"
          },
          "description": {
            "type": "string"
          },
          "permissionId": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "PeriodEntry": {
        "description": "One reporting period — dropdown entry plus bounds for display.",
        "properties": {
          "current": {
            "description": "True if this entry\u0027s period contains today.",
            "type": "boolean"
          },
          "endDate": {
            "description": "Inclusive period end date — the last day in the period.",
            "format": "date",
            "type": "string"
          },
          "id": {
            "description": "Canonical period identifier used in the URL — \"YYYY-MM-DD\" (the period\u0027s start date) for both monthly and annual plans.",
            "type": "string"
          },
          "startDate": {
            "description": "Inclusive period start date.",
            "format": "date",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "id",
          "startDate"
        ],
        "type": "object"
      },
      "PermissionReplyRequest": {
        "properties": {
          "approvalNonce": {
            "type": "string"
          },
          "reply": {
            "pattern": "once|reject",
            "type": "string"
          }
        },
        "required": [
          "approvalNonce",
          "reply"
        ],
        "type": "object"
      },
      "PhraseNode": {
        "properties": {
          "terms": {
            "default": [],
            "description": "The terms in a phrase to match ",
            "example": [
              "grepr-service-1",
              "grepr-service-2"
            ],
            "items": {
              "description": "The terms in a phrase to match ",
              "example": "[\"grepr-service-1\",\"grepr-service-2\"]",
              "type": "string"
            },
            "type": "array"
          },
          "type": {
            "description": "A node that represents a phrase match in a parsed query.",
            "enum": [
              "phrase-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "terms",
          "type"
        ],
        "type": "object"
      },
      "PickupFilters": {
        "description": "The filters an agent picks up Ready issues by; null means any.",
        "properties": {
          "entities": {
            "additionalProperties": {
              "description": "Any of these values for each entity key.",
              "items": {
                "description": "Any of these values for each entity key.",
                "type": "string"
              },
              "type": "array"
            },
            "description": "Any of these values for each entity key.",
            "type": "object"
          },
          "labels": {
            "description": "Every one of these labels.",
            "items": {
              "description": "Every one of these labels.",
              "type": "string"
            },
            "type": "array"
          },
          "priority": {
            "description": "This priority or more urgent.",
            "type": "string"
          },
          "teamIds": {
            "description": "Any of these teams.",
            "items": {
              "description": "Any of these teams.",
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "PipelineChangeRequest": {
        "properties": {
          "autoApply": {
            "description": "Whether to apply the change directly (true) or record it as a suggestion for a human to review (false). This expresses intent only: the server enforces the proposing agent\u0027s approval mode, so a suggest-only agent\u0027s change is always recorded as a suggestion no matter what is passed here.",
            "type": "boolean"
          },
          "changeDescription": {
            "description": "One or two sentences a human reviewer reads first: what the change does and why. Required when the change is recorded as a suggestion.",
            "type": "string"
          },
          "changeId": {
            "description": "A caller-chosen idempotency key for this change, unique within the investigation. Resending the same changeId records one suggestion rather than a duplicate, so a retried call is safe. Required when the change is recorded as a suggestion.",
            "type": "string"
          },
          "investigationId": {
            "description": "The investigation proposing the change, identifying the agent whose approval mode governs the request. Server-supplied on the MCP transport, where an agent sandbox\u0027s provenance is bound to the connection: anything sent here is ignored and replaced. Without provenance the change is applied under the caller\u0027s own permission.",
            "type": "string"
          },
          "samples": {
            "default": [],
            "description": "Sample log events the changed operations are verified against before anything is applied. Required when the change adds or edits a Grok rule, so the new rule can be run against a real log.",
            "items": {
              "$ref": "#/components/schemas/LogEvent"
            },
            "type": "array"
          },
          "templateInputsPatch": {
            "$ref": "#/components/schemas/JsonNode"
          }
        },
        "required": [
          "templateInputsPatch"
        ],
        "type": "object"
      },
      "PipelineChangeResult": {
        "properties": {
          "appliedVersion": {
            "description": "The new job version the change was applied as. Applying restarts the pipeline from a savepoint, so the new version reaches its desired state asynchronously.",
            "format": "int64",
            "type": "integer"
          },
          "findings": {
            "default": [],
            "description": "Verification findings that blocked the change. When present the pipeline is untouched: fix the findings and submit again.",
            "items": {
              "$ref": "#/components/schemas/ChangeFinding"
            },
            "type": "array"
          },
          "suggestionId": {
            "description": "The agent suggestion the change was recorded as. The pipeline is NOT updated and will not restart, so there is nothing to wait for and the change must not be resubmitted; a human reviews and applies it from the pipeline page.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "PipelineRef": {
        "properties": {
          "id": {
            "description": "Pipeline id",
            "example": "pipe-prod-1",
            "type": "string"
          },
          "name": {
            "description": "Pipeline display name",
            "example": "prod",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "PipelineStatus": {
        "description": "Current operational status and health of the pipeline",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorDetails"
          },
          "health": {
            "enum": [
              "HEALTHY",
              "STABILIZING",
              "UNHEALTHY",
              "UNKNOWN"
            ],
            "type": "string"
          },
          "isRolledBack": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Plan": {
        "properties": {
          "endDate": {
            "format": "date-time",
            "type": "string"
          },
          "planChangeRequest": {
            "$ref": "#/components/schemas/PlanChangeRequest"
          },
          "startDate": {
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "enum": [
              "TRIAL",
              "FREE",
              "INVOICE"
            ],
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "planChangeRequest",
          "startDate",
          "type"
        ],
        "type": "object"
      },
      "PlanChangeRequest": {
        "properties": {
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "enum": [
              "TRIAL",
              "FREE",
              "INVOICE"
            ],
            "type": "string"
          }
        },
        "required": [
          "date",
          "type"
        ],
        "type": "object"
      },
      "PostIssueCommentRequest": {
        "description": "Posts a comment on an issue. Comments are allowed on closed issues too, so a person can leave guidance on an issue they closed as `IGNORED`.",
        "properties": {
          "body": {
            "description": "The markdown body.",
            "maxLength": 16384,
            "minLength": 0,
            "type": "string"
          },
          "guidance": {
            "description": "Makes it guidance, advice every later investigation on the issue\u0027s entities weighs; people only.",
            "type": "boolean"
          },
          "lockedFieldProposal": {
            "description": "The locked field the comment proposes changing, named as in a `FIELD_LOCKED` error: a field such as `priority`, or `label:\u003clabel\u003e`.",
            "maxLength": 80,
            "minLength": 0,
            "type": "string"
          },
          "version": {
            "description": "The version the comment was written against; a stale one is rejected with 409 and the current issue. Null posts against whatever is current.",
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "body"
        ],
        "type": "object"
      },
      "PreserveAllAttributesMergeStrategy": {
        "properties": {
          "limit": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "type": {
            "description": "PreserveAllAttributesMergeStrategy: Collects all incoming values/objects into a collection. If an incoming value is a collection, its elements are unpacked and added individually. The \u0027limit\u0027 field defines when an attribute size will trigger a cluster overflow emission. The \u0027unique\u0027 flag determines if the collection behaves like a Set or a List.",
            "enum": [
              "preserve"
            ],
            "type": "string"
          },
          "unique": {
            "type": "boolean"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "PresignedUploadUrlResponse": {
        "description": "Presigned URL for uploading a file",
        "properties": {
          "expiresAt": {
            "description": "Timestamp when the presigned URL expires",
            "example": "2024-01-15T10:30:00Z",
            "type": "string"
          },
          "orgId": {
            "description": "Organization ID that owns this upload",
            "example": "org-123",
            "type": "string"
          },
          "presignedUrl": {
            "description": "Presigned URL that can be used to upload files",
            "example": "https://grepr-pipeline-uploads.s3.amazonaws.com/org-123/upload-456/file.json?X-Amz-Algorithm\u003d...",
            "type": "string"
          },
          "uploadId": {
            "description": "Unique identifier for this upload. Pass it as the uploadId of a grepr-uploaded-log-file-source to read the uploaded file.",
            "example": "3f2b8c1e-9a4d-4e7b-8c2a-1d5e6f7a8b9c",
            "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",
            "type": "string"
          }
        },
        "type": "object"
      },
      "PreviewAppKeyScopesRequest": {
        "description": "Unsaved changes to check Datadog authorization scopes against",
        "properties": {
          "apiKey": {
            "description": "API key to probe with instead of the stored one",
            "type": "string"
          },
          "appKey": {
            "description": "Application key to check instead of the stored one",
            "type": "string"
          },
          "site": {
            "description": "Site to probe instead of the stored one",
            "example": "datadoghq.com",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          }
        },
        "type": "object"
      },
      "PromotedAttribute": {
        "description": "Attribute paths the table indexes, with the policy applied to each.",
        "properties": {
          "excluded": {
            "description": "Whether the stored policy leaves this path\u0027s columns NULL.",
            "type": "boolean"
          },
          "numeric": {
            "description": "Whether the path also has an n_ numeric index column.",
            "type": "boolean"
          },
          "path": {
            "description": "The attribute path this column indexes.",
            "type": "string"
          },
          "valueColumn": {
            "description": "The a_ value index column for the path.",
            "type": "string"
          }
        },
        "readOnly": true,
        "required": [
          "excluded",
          "numeric",
          "path",
          "valueColumn"
        ],
        "type": "object"
      },
      "PromotedTag": {
        "description": "Tag keys the table indexes, with the policy applied to each.",
        "properties": {
          "column": {
            "description": "The t_ index column for the key.",
            "type": "string"
          },
          "excluded": {
            "description": "Whether the stored policy leaves this key\u0027s column NULL.",
            "type": "boolean"
          },
          "key": {
            "description": "The tag key this column indexes.",
            "type": "string"
          },
          "protection": {
            "description": "Why the key cannot be excluded: REQUIRED for service and host, PARTITION_SOURCE for a key the live partition spec buckets on. Absent when it can be.",
            "enum": [
              "REQUIRED",
              "PARTITION_SOURCE"
            ],
            "type": "string"
          }
        },
        "readOnly": true,
        "required": [
          "column",
          "excluded",
          "key"
        ],
        "type": "object"
      },
      "PromotionPolicy": {
        "properties": {
          "attributes": {
            "$ref": "#/components/schemas/PromotionPolicyAttributes"
          },
          "columnRemovalDelay": {
            "description": "How long after a path or key is excluded its index columns are removed from the table, as an ISO-8601 duration. Defaults to 6 hours when absent.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "revision": {
            "description": "Which store of the table\u0027s policy this is, assigned by the server: 0 when the table has none. Echo it on a PUT to be refused with 409 if the policy changed since it was read; omit it to replace whatever is stored.",
            "format": "int64",
            "type": "integer"
          },
          "tags": {
            "$ref": "#/components/schemas/PromotionPolicyTags"
          },
          "v": {
            "description": "Promotion policy document version.",
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "attributes",
          "tags",
          "v"
        ],
        "type": "object"
      },
      "PromotionPolicyAttributeExclude": {
        "description": "An attribute path whose columns writers stop filling, unless an include covers it, and which are removed from the table at scheduledRemovalAt. No exclude entry is allowed while excludeAllByDefault is on.",
        "properties": {
          "path": {
            "type": "string"
          },
          "prefix": {
            "default": false,
            "type": "boolean"
          },
          "scheduledRemovalAt": {
            "description": "When the columns this entry excludes are removed from the table, assigned by the server. Taking the entry off the exclude list before then keeps them.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "required": [
          "path"
        ],
        "type": "object"
      },
      "PromotionPolicyAttributeInclude": {
        "description": "An attribute path indexed whatever an exclude entry or excludeAllByDefault says. It counts against the cap: an exact entry gets its columns when the policy is stored, if the cap has room, and the paths beneath a nested entry are discovered like any other.",
        "properties": {
          "numeric": {
            "default": false,
            "description": "Whether the path gets a numeric index column when the policy is stored, without waiting for a number. Exact entries only: refused when prefix is true.",
            "type": "boolean"
          },
          "path": {
            "type": "string"
          },
          "prefix": {
            "default": false,
            "type": "boolean"
          }
        },
        "required": [
          "path"
        ],
        "type": "object"
      },
      "PromotionPolicyAttributes": {
        "properties": {
          "cap": {
            "default": 0,
            "format": "int32",
            "type": "integer"
          },
          "exclude": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/PromotionPolicyAttributeExclude"
            },
            "type": "array"
          },
          "excludeAllByDefault": {
            "default": false,
            "description": "Whether every path no include covers is excluded. Writers stop filling the existing columns no include covers, and they are removed from the table at excludeAllScheduledRemovalAt.",
            "type": "boolean"
          },
          "excludeAllScheduledRemovalAt": {
            "description": "When the columns excludeAllByDefault excludes are removed from the table, assigned by the server. Turning excludeAllByDefault off before then keeps them.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "include": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/PromotionPolicyAttributeInclude"
            },
            "type": "array"
          }
        },
        "required": [
          "cap"
        ],
        "type": "object"
      },
      "PromotionPolicyTags": {
        "properties": {
          "cap": {
            "default": 0,
            "format": "int32",
            "type": "integer"
          },
          "exclude": {
            "default": [],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "include": {
            "default": [],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "scheduledRemovalAt": {
            "additionalProperties": {
              "description": "When each excluded key\u0027s column is removed from the table, assigned by the server. Taking the key off the exclude list before then keeps the column.",
              "format": "date-time",
              "readOnly": true,
              "type": "string"
            },
            "default": {},
            "description": "When each excluded key\u0027s column is removed from the table, assigned by the server. Taking the key off the exclude list before then keeps the column.",
            "readOnly": true,
            "type": "object"
          }
        },
        "required": [
          "cap"
        ],
        "type": "object"
      },
      "PublicUpdate": {
        "properties": {
          "accessConfig": {
            "$ref": "#/components/schemas/AccessConfig"
          },
          "comments": {
            "type": "string"
          },
          "plan": {
            "$ref": "#/components/schemas/Plan"
          }
        },
        "required": [
          "plan"
        ],
        "type": "object"
      },
      "QuantileSamplingTier": {
        "description": "List of quantile sampling tiers for performance-based sampling. Each tier defines a percentile threshold, sampling rate, and label. Traces ABOVE each quantile get the corresponding sampling rate and are labeled with the tier\u0027s label. Evaluated in descending quantile order. A tier at quantile 0.0 is a catch-all that matches unconditionally, giving the fastest traces a baseline rate; without one, traces below the lowest configured quantile are dropped.",
        "example": "[{quantile: 0.99, samplingRate: 0.8, label: \u0027very_slow\u0027}, {quantile: 0.95, samplingRate: 0.1, label: \u0027slow\u0027}, {quantile: 0.5, samplingRate: 0.05, label: \u0027medium\u0027}, {quantile: 0.0, samplingRate: 0.01, label: \u0027fast\u0027}]",
        "properties": {
          "label": {
            "description": "Human-readable label for this tier, used as the percentile bucket value in the enriched span data. This allows you to categorize traces into named buckets for querying and analysis.",
            "example": "P99+",
            "title": "Tier Label",
            "type": "string"
          },
          "quantile": {
            "description": "The percentile threshold for this tier (0.0 \u003d 0th percentile, 0.5 \u003d 50th percentile, 0.99 \u003d 99th percentile). Traces with duration ABOVE this percentile will be evaluated for this sampling rate.",
            "example": 0.99,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Quantile Threshold",
            "type": "number"
          },
          "samplingRate": {
            "description": "The sampling rate to apply for traces that exceed this quantile threshold. 0.0 \u003d 0% (no sampling), 1.0 \u003d 100% (always sample).",
            "example": 0.8,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Sampling Rate",
            "type": "number"
          }
        },
        "required": [
          "label",
          "quantile",
          "samplingRate"
        ],
        "title": "Quantile Sampling Tiers",
        "type": "object"
      },
      "QueryParsingError": {
        "properties": {
          "message": {
            "default": "",
            "type": "string"
          }
        },
        "required": [
          "message"
        ],
        "type": "object"
      },
      "QueryResult": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Data"
          },
          "error": {
            "type": "string"
          },
          "errorType": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "QuerySink": {
        "properties": {
          "columns": {
            "default": [],
            "description": "Ordered CSV column names; required only for CSV artifacts",
            "items": {
              "description": "Ordered CSV column names; required only for CSV artifacts",
              "type": "string"
            },
            "type": "array"
          },
          "format": {
            "default": "COMPRESSED_JSON",
            "description": "Artifact serialization format",
            "enum": [
              "COMPRESSED_JSON",
              "JSON_LINES",
              "CSV"
            ],
            "type": "string"
          },
          "integrationId": {
            "description": "The integration to use for writing to the file",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "path": {
            "description": "Destination path relative to the selected warehouse root",
            "type": "string"
          },
          "type": {
            "description": "Write a bounded artifact to a warehouse provided by the given integration id.",
            "enum": [
              "query-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "format",
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "RawLogsSinkConfig": {
        "description": "Optional configuration overrides for the raw logs iceberg table sink.",
        "properties": {
          "enableDynamicPartitioning": {
            "description": "Flag to enable dynamic partitioning for log tables.",
            "type": "boolean"
          },
          "name": {
            "description": "Override the sink vertex name.",
            "type": "string"
          },
          "parallelismBasedShardLimitMultiplier": {
            "description": "Determines how many shards per partition a single iceberg writer can accommodate.",
            "format": "int32",
            "type": "integer"
          },
          "shardingConfig": {
            "$ref": "#/components/schemas/ShardingConfig"
          }
        },
        "type": "object"
      },
      "Read": {
        "properties": {
          "accessConfig": {
            "$ref": "#/components/schemas/AccessConfig"
          },
          "constraints": {
            "$ref": "#/components/schemas/ReadOrgConstraints"
          },
          "featureFlags": {
            "default": [],
            "items": {
              "enum": [
                "DATADOG_BROWSER_LOGS_INTEGRATION",
                "METRICS_SOURCE",
                "S3_LOGS_FILE_SOURCE",
                "PIPELINE_TEMPLATES",
                "AI_WORKFLOWS",
                "SEARCH_ICEBERG_SOURCE",
                "MULTI_GROK_PARSER",
                "AUTH0_SSO_CONNECTION",
                "TRINO_QUERY_ENGINE",
                "CHAT_TOOL_DETAILS",
                "UNKNOWN"
              ],
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "type": "string"
          },
          "plan": {
            "$ref": "#/components/schemas/Plan"
          },
          "ssoConnectionEnabled": {
            "type": "boolean"
          },
          "ssoRequestedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "accessConfig",
          "constraints",
          "name",
          "plan"
        ],
        "type": "object"
      },
      "ReadAnthropic": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Anthropic"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "anthropic"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadDataWarehouse": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/DataWarehouse"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "data-warehouse"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadDatadog": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Datadog"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "datadog"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadDatadogMcp": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/DatadogMcp"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "datadog-mcp"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadGemini": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Gemini"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "gemini"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadGithubMcp": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/GithubMcp"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "github-mcp"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadGreprPipe": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/GreprPipe"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "grepr-pipe"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadInvitation": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "inviteeEmail": {
            "type": "string"
          },
          "inviterName": {
            "type": "string"
          },
          "roleIds": {
            "default": [],
            "description": "Role IDs assigned to the invitation",
            "items": {
              "description": "Role IDs assigned to the invitation",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "teamAssignments": {
            "default": [],
            "description": "Team-specific role assignments",
            "items": {
              "$ref": "#/components/schemas/TeamAssignment"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "type": "object"
      },
      "ReadJiraMcp": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/JiraMcp"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "jira-mcp"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadJob": {
        "description": "Attributes of the Grepr Job",
        "properties": {
          "createdAt": {
            "description": "Time the job was accepted for creation",
            "format": "date-time",
            "type": "string"
          },
          "desiredState": {
            "default": "RUNNING",
            "description": "Desired state of the job",
            "enum": [
              "CREATED",
              "PENDING",
              "INFRA_UPDATE",
              "INFRA_UPDATE_WAIT",
              "VERIFYING",
              "WAITING",
              "RUNNING",
              "STOPPED",
              "FINISHED",
              "FAILED",
              "CANCELLED",
              "DELETED",
              "UPDATING",
              "STARTING",
              "RESTARTING",
              "STOPPING",
              "ROLLING_BACK",
              "DELETING"
            ],
            "type": "string"
          },
          "editedBy": {
            "description": "User who created this job version, in format \u0027Full Name (userId)\u0027 or \u0027system\u0027 for automated operations",
            "type": "string"
          },
          "endedAt": {
            "description": "Time the job was ended",
            "format": "date-time",
            "type": "string"
          },
          "execution": {
            "default": "ASYNCHRONOUS",
            "description": "Execution mode of the job",
            "enum": [
              "SYNCHRONOUS",
              "ASYNCHRONOUS"
            ],
            "type": "string"
          },
          "greprVersion": {
            "description": "The version of Grepr used to create the job",
            "type": "string"
          },
          "id": {
            "description": "Id of the job",
            "example": "0ABC12DEF4G",
            "type": "string"
          },
          "jobGraph": {
            "$ref": "#/components/schemas/GreprJobGraph"
          },
          "name": {
            "description": "Name of the job",
            "example": "demo_pipeline_1",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the job",
            "example": "grepr",
            "type": "string"
          },
          "pipelineStatus": {
            "$ref": "#/components/schemas/PipelineStatus"
          },
          "processing": {
            "default": "STREAMING",
            "description": "Processing method of the job",
            "enum": [
              "BATCH",
              "STREAMING"
            ],
            "type": "string"
          },
          "startedAt": {
            "description": "Time the job was started",
            "format": "date-time",
            "type": "string"
          },
          "state": {
            "default": "STARTING",
            "description": "State of the job",
            "enum": [
              "CREATED",
              "PENDING",
              "INFRA_UPDATE",
              "INFRA_UPDATE_WAIT",
              "VERIFYING",
              "WAITING",
              "RUNNING",
              "STOPPED",
              "FINISHED",
              "FAILED",
              "CANCELLED",
              "DELETED",
              "UPDATING",
              "STARTING",
              "RESTARTING",
              "STOPPING",
              "ROLLING_BACK",
              "DELETING"
            ],
            "type": "string"
          },
          "tags": {
            "additionalProperties": {
              "description": "Custom tags attached to the job for ease of search",
              "type": "string"
            },
            "default": {},
            "description": "Custom tags attached to the job for ease of search",
            "type": "object"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this job is associated with.",
            "items": {
              "description": "The team IDs that this job is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "updatedAt": {
            "description": "Time the job was last updated",
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "description": "Version of the job",
            "example": 0,
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "desiredState",
          "execution",
          "id",
          "jobGraph",
          "name",
          "organizationId",
          "processing",
          "state",
          "tags",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadLiteLlm": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/LiteLlm"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "litellm"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadNewRelic": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/NewRelic"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "newrelic"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadOpenAi": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/OpenAi"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "openai"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadOrgConstraints": {
        "properties": {
          "maxAnthropicIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxDataWarehouseIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxDatadogApiKeysPerIntegration": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxDatadogIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxGeminiIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxGreprPipeIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxLiteLlmIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxMcpIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxNewRelicIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxOpenAiIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxOtlpIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxPipelines": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxPromotedAttributeColumns": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "maxPromotedTagColumns": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "maxPromotionPolicyEntriesPerList": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "maxS3DataWarehouseIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxS3VectorIndexIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxSplunkIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "maxSumoIntegrations": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ReadOtlp": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Otlp"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "otlp"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadPagerDutyMcp": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/PagerDutyMcp"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "pagerduty-mcp"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadS3DataWarehouse": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/S3DataWarehouse"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "s3-data-warehouse"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadS3VectorIndex": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/S3VectorIndex"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "s3-vector-index"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadSlackMcp": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/SlackMcp"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "slack-mcp"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadSplunk": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Splunk"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "splunk"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadSsoClaimMapping": {
        "properties": {
          "claimKey": {
            "description": "JWT claim key to match",
            "example": "department",
            "type": "string"
          },
          "claimValue": {
            "description": "JWT claim value to match",
            "example": "engineering",
            "type": "string"
          },
          "createdAt": {
            "description": "When the mapping was created",
            "example": "2026-03-09T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "description": "Unique identifier of the claim mapping",
            "example": "0n2abc12345",
            "type": "string"
          },
          "roles": {
            "default": [],
            "description": "Organization roles to assign when claim matches",
            "items": {
              "$ref": "#/components/schemas/SsoClaimMappingRole"
            },
            "type": "array"
          },
          "teamAssignments": {
            "default": [],
            "description": "Team assignments to apply when claim matches",
            "items": {
              "$ref": "#/components/schemas/TeamAssignment"
            },
            "type": "array"
          },
          "updatedAt": {
            "description": "When the mapping was last updated",
            "example": "2026-03-09T00:00:00Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "claimKey",
          "claimValue",
          "createdAt",
          "id",
          "roles",
          "teamAssignments",
          "updatedAt"
        ],
        "type": "object"
      },
      "ReadSumo": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Sumo"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "sumo"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadTeam": {
        "properties": {
          "id": {
            "type": "string"
          },
          "leaderRoleId": {
            "type": "string"
          },
          "memberRoleId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "userCount": {
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "leaderRoleId",
          "memberRoleId",
          "name"
        ],
        "type": "object"
      },
      "ReadUser": {
        "properties": {
          "email": {
            "description": "The email associated with the user.",
            "type": "string"
          },
          "id": {
            "description": "The id associated with the user.",
            "type": "string"
          },
          "name": {
            "description": "The name of the user.",
            "type": "string"
          },
          "roles": {
            "default": [],
            "description": "The roles associated with this user.",
            "items": {
              "$ref": "#/components/schemas/Role"
            },
            "type": "array",
            "uniqueItems": true
          },
          "teamIds": {
            "description": "The teams that this user is a member of.",
            "items": {
              "description": "The teams that this user is a member of.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "roles",
          "teamIds"
        ],
        "type": "object"
      },
      "ReadWebhookIntegration": {
        "properties": {
          "createdAt": {
            "description": "Timestamp when the integration was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The integration id",
            "type": "string"
          },
          "jobIds": {
            "description": "List of job IDs associated with the integration.",
            "items": {
              "description": "List of job IDs associated with the integration.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID of the integration.",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/WebhookIntegration"
          },
          "teamIds": {
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "webhook"
            ],
            "type": "string"
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "jobIds",
          "name",
          "organizationId",
          "payload",
          "type",
          "updatedAt",
          "version"
        ],
        "type": "object"
      },
      "ReadableData": {
        "description": "Readable data via a synchronous job.",
        "discriminator": {
          "mapping": {
            "agent-session-summary": "#/components/schemas/AgentSessionSummary",
            "complete_span": "#/components/schemas/CompleteSpan",
            "double-datapoint": "#/components/schemas/DoubleDatapoint",
            "log": "#/components/schemas/LogEvent",
            "metricdata": "#/components/schemas/MetricData",
            "variant_event": "#/components/schemas/VariantEvent"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/LogEvent"
          },
          {
            "$ref": "#/components/schemas/DoubleDatapoint"
          },
          {
            "$ref": "#/components/schemas/CompleteSpan"
          },
          {
            "$ref": "#/components/schemas/MetricData"
          },
          {
            "$ref": "#/components/schemas/VariantEvent"
          },
          {
            "$ref": "#/components/schemas/AgentSessionSummary"
          }
        ],
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "RecordMemoryRequest": {
        "properties": {
          "clear": {
            "items": {
              "description": "A previously recorded field to retract, leaving it empty.",
              "enum": [
                "SYMPTOMS",
                "ROOT_CAUSE",
                "RULED_OUT",
                "RESOLUTION",
                "ENTITY_TAGS"
              ],
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "entityTags": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "resolution": {
            "type": "string"
          },
          "rootCause": {
            "type": "string"
          },
          "rootCauseConfidence": {
            "enum": [
              "CONFIRMED",
              "SUSPECTED",
              "UNKNOWN"
            ],
            "type": "string"
          },
          "ruledOut": {
            "type": "string"
          },
          "searchableBySimilarity": {
            "type": "boolean"
          },
          "significance": {
            "enum": [
              "INCIDENT",
              "OBSERVATION",
              "INCONCLUSIVE",
              "BENIGN"
            ],
            "type": "string"
          },
          "symptoms": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "significance",
          "title"
        ],
        "type": "object"
      },
      "RecordMemoryResponse": {
        "properties": {
          "alreadyRecorded": {
            "type": "boolean"
          },
          "memoryId": {
            "type": "string"
          },
          "nearestMemoryId": {
            "type": "string"
          },
          "nearestSimilarity": {
            "format": "double",
            "type": "number"
          },
          "review": {
            "$ref": "#/components/schemas/MemoryReview"
          }
        },
        "type": "object"
      },
      "RecurrenceLink": {
        "properties": {
          "investigationId": {
            "type": "string"
          },
          "linkedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ReducerLogsQuerySource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "processedLogsTableName": {
            "description": "The name of the table containing processed logs.",
            "example": "\"processed_logs\"",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "reductionInterval": {
            "default": "PT2M",
            "description": "The interval used by the Log Reducer for the query. Uses ISO 8601 format for intervals.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Queries raw and processed logs from a reducer pipeline.",
            "enum": [
              "reducer-logs-iceberg-table-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "reductionInterval",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "RemoveKeyAttributeAction": {
        "properties": {
          "order": {
            "default": 0,
            "description": "Action order. Lower is applied first.",
            "format": "int32",
            "type": "integer"
          },
          "targetPath": {
            "description": "The path to the attribute to modify.",
            "example": "applications",
            "type": "string"
          },
          "type": {
            "description": "Removes keys from event attributes. If the target is not present or is not a map, it\u0027s a no-op.",
            "enum": [
              "attribute-remove-action"
            ],
            "type": "string"
          },
          "values": {
            "description": "The keys to remove.",
            "example": [
              "app1",
              "app2"
            ],
            "items": {
              "description": "The keys to remove.",
              "example": "[\"app1\",\"app2\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "targetPath",
          "type",
          "values"
        ],
        "type": "object"
      },
      "RenameChatRequest": {
        "properties": {
          "title": {
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "ResetImpactEstimationResponse": {
        "properties": {
          "rowsCleared": {
            "description": "Number of estimation rows whose cached impact percentage was cleared. Zero when nothing was in scope (no opted-in sink datasets, or no estimation-capable integrations).",
            "example": 12,
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "rowsCleared"
        ],
        "type": "object"
      },
      "Resource": {
        "description": "Resource information describing the entity that produced the telemetry data.",
        "properties": {
          "attributes": {
            "$ref": "#/components/schemas/Variant"
          },
          "droppedAttributesCount": {
            "description": "Number of attributes that were dropped due to limits.",
            "format": "int32",
            "type": "integer"
          },
          "entityRefs": {
            "description": "Set of entities that participate in this Resource.",
            "items": {
              "$ref": "#/components/schemas/EntityRef"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "ResourceFilter": {
        "description": "Resource filter for activity logs",
        "example": [
          {
            "resourceId": "int-123",
            "resourceType": "INTEGRATION"
          },
          {
            "resourceId": "job-456",
            "resourceType": "JOB"
          }
        ],
        "properties": {
          "resourceId": {
            "description": "Specific resource ID to filter by. If null, matches all resources of this type in the organization.",
            "example": "int-123",
            "type": "string"
          },
          "resourceType": {
            "description": "Resource type to filter by",
            "enum": [
              "INTEGRATION",
              "JOB",
              "DATASET",
              "TEMPLATE",
              "TEAM",
              "USER",
              "ORGANIZATION_SETTINGS",
              "SERVICE_ACCOUNT",
              "ORGANIZATION",
              "BILLING",
              "ISSUE"
            ],
            "example": "INTEGRATION",
            "type": "string"
          }
        },
        "required": [
          "resourceType"
        ],
        "type": "object"
      },
      "ResumeInvestigationRequest": {
        "properties": {
          "text": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Role": {
        "properties": {
          "builtin": {
            "default": false,
            "description": "Whether this is a built-in role",
            "readOnly": true,
            "type": "boolean"
          },
          "createdAt": {
            "description": "When the role was created (null for system roles)",
            "format": "date-time",
            "type": "string"
          },
          "createdBy": {
            "description": "Who created the role (null for system roles)",
            "type": "string"
          },
          "description": {
            "description": "Description of the role",
            "type": "string"
          },
          "effect": {
            "default": "allow",
            "description": "The effect of this role\u0027s permissions: \u0027allow\u0027 or \u0027deny\u0027. Defaults to \u0027allow\u0027 for standard roles.",
            "readOnly": true,
            "type": "string"
          },
          "id": {
            "description": "The id of the role.",
            "type": "string"
          },
          "name": {
            "description": "The user-facing name of the role.",
            "type": "string"
          },
          "permissionIds": {
            "default": [],
            "description": "Permission IDs assigned to this role (empty for system roles)",
            "items": {
              "description": "Permission IDs assigned to this role (empty for system roles)",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "description",
          "id",
          "name",
          "permissionIds"
        ],
        "type": "object"
      },
      "RoleIds": {
        "description": "The role IDs to assign to the user.",
        "example": [
          "rol_AlphaNum1234",
          "rol_alphaNum5678"
        ],
        "properties": {
          "roleIds": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "type": "object"
      },
      "RoleUpdate": {
        "properties": {
          "roleIds": {
            "items": {
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "roleIds"
        ],
        "type": "object"
      },
      "S3DataWarehouse": {
        "description": "The payload containing integration data.",
        "properties": {
          "assumeRoleArn": {
            "description": "The ARN of the role Grepr assumes to access the S3 bucket. Leave it empty to use your organization\u0027s role, the only one Grepr\u0027s hosted sites accept; the bucket\u0027s resource policy must let that role in. It can\u0027t be changed after the integration is created.",
            "pattern": "^(arn:aws:iam::[0-9]{12}:role/.*)?$",
            "type": "string"
          },
          "bucketName": {
            "description": "The name of the S3 bucket to use for the data warehouse",
            "pattern": "^[a-z0-9][a-z0-9\\-]{1,61}[a-z0-9]$",
            "type": "string"
          },
          "prefix": {
            "default": "",
            "description": "The prefix (folder) within the S3 bucket where data warehouse files will be stored",
            "type": "string"
          },
          "region": {
            "default": "us-east-1",
            "description": "The region of the S3 bucket",
            "type": "string"
          }
        },
        "required": [
          "bucketName"
        ],
        "type": "object",
        "x-type": {
          "type": "s3-data-warehouse"
        }
      },
      "S3LogsFileSource": {
        "properties": {
          "fileReadingStrategy": {
            "$ref": "#/components/schemas/FileReadingStrategy"
          },
          "format": {
            "$ref": "#/components/schemas/FileFormat"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "pathPrefix": {
            "default": "",
            "description": "The s3 path under the provided bucket to monitor. Optional.In the case of CloudTrail logs, this is the path to the AWSLogs/ directory.",
            "example": "path/to/monitor",
            "type": "string"
          },
          "s3IntegrationId": {
            "description": "Integration ID for the S3 bucket where Grepr will be reading data. This corresponds to the \u0027s3-data-warehouse\u0027 integration type.",
            "type": "string"
          },
          "streamingPollInterval": {
            "default": "PT5S",
            "description": "The interval at which Grepr will check for new files in the S3 bucket. This is only applicable in streaming mode.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "type": {
            "description": "Reads generic data from an S3 path. Each record will need to be mapped to the Grepr data model before being usable.",
            "enum": [
              "s3-file-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "format",
          "name",
          "s3IntegrationId",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "S3VectorIndex": {
        "description": "The payload containing integration data.",
        "properties": {
          "dimensions": {
            "description": "Number of dimensions for the embedding vectors.",
            "example": 1536,
            "format": "int32",
            "maximum": 4096,
            "minimum": 1,
            "type": "integer"
          },
          "distanceMetric": {
            "default": "cosine",
            "description": "Distance metric for similarity search.",
            "example": "cosine",
            "type": "string"
          }
        },
        "required": [
          "dimensions"
        ],
        "type": "object",
        "x-type": {
          "type": "s3-vector-index"
        }
      },
      "SamplingAttributesMergeStrategy": {
        "properties": {
          "limit": {
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "type": {
            "description": "SamplingAttributesMergeStrategy: Collects up to \u0027limit\u0027 samples. The \u0027unique\u0027 flag determines if samples must be distinct.",
            "enum": [
              "sample"
            ],
            "type": "string"
          },
          "unique": {
            "type": "boolean"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "SamplingConfig": {
        "default": {
          "type": "constant-sampling"
        },
        "description": "Determines how often samples should be emitted",
        "discriminator": {
          "mapping": {
            "constant-sampling": "#/components/schemas/ConstantSampling",
            "window-based-logarithmic-sampling": "#/components/schemas/WindowBasedLogarithmicSampling"
          },
          "propertyName": "type"
        },
        "example": "{type: \"ConstantSampling\"}",
        "oneOf": [
          {
            "$ref": "#/components/schemas/ConstantSampling"
          },
          {
            "$ref": "#/components/schemas/WindowBasedLogarithmicSampling"
          }
        ],
        "title": "Sampling Algorithm",
        "type": "object"
      },
      "ScalarData": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Data"
          },
          {
            "properties": {
              "result": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        ],
        "type": "object"
      },
      "SearchIssuesRequest": {
        "description": "Filters for searching the issues the caller can see. Every filter is optional; all given filters must match. Results are ordered by full-text rank when `query` is given, else by latest sighting.",
        "properties": {
          "assignee": {
            "$ref": "#/components/schemas/IssueAssigneeFilter"
          },
          "closedWithinDays": {
            "description": "Include closed issues closed within this many days. Absent: 30 when `states` is absent, with those closed as IGNORED or NOT_A_PROBLEM kept at any age, and no window when it is given. Given, it\u0027s exact.",
            "format": "int32",
            "maximum": 3650,
            "minimum": 0,
            "type": "integer"
          },
          "cursor": {
            "description": "The `nextCursor` of the previous page, sent with the same filters.",
            "maxLength": 1024,
            "minLength": 0,
            "type": "string"
          },
          "entities": {
            "additionalProperties": {
              "description": "Entity tags to match: every key must match, and any of a key\u0027s values matches it. Keys and values match in any case. An unprefixed key is put in the `entity:` namespace.",
              "items": {
                "description": "Entity tags to match: every key must match, and any of a key\u0027s values matches it. Keys and values match in any case. An unprefixed key is put in the `entity:` namespace.",
                "type": "string"
              },
              "type": "array"
            },
            "description": "Entity tags to match: every key must match, and any of a key\u0027s values matches it. Keys and values match in any case. An unprefixed key is put in the `entity:` namespace.",
            "type": "object"
          },
          "fingerprint": {
            "description": "Only issues with exactly this fingerprint.",
            "maxLength": 256,
            "minLength": 0,
            "type": "string"
          },
          "labels": {
            "description": "Only issues carrying every one of these labels.",
            "items": {
              "description": "Only issues carrying every one of these labels.",
              "type": "string"
            },
            "maxItems": 20,
            "minItems": 0,
            "type": "array"
          },
          "limit": {
            "description": "The page size, at most 100; absent: 25.",
            "format": "int32",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "linkedTo": {
            "$ref": "#/components/schemas/IssueLinkRef"
          },
          "priority": {
            "description": "Only issues at this priority or more urgent.",
            "enum": [
              "P0",
              "P1",
              "P2",
              "P3"
            ],
            "type": "string"
          },
          "query": {
            "description": "Words to search the whole issue for, comments included, split and stemmed as the issue is, so checkout-api is also checkout and api: an issue matches when it has any one of them, and those with the most, above all in their title, fingerprint and entities, come first.",
            "maxLength": 500,
            "minLength": 0,
            "type": "string"
          },
          "states": {
            "description": "Only issues in these states. Absent: open issues plus those closed within `closedWithinDays`, and, when that is absent too, those closed as IGNORED or NOT_A_PROBLEM at any age.",
            "items": {
              "description": "Only issues in these states. Absent: open issues plus those closed within `closedWithinDays`, and, when that is absent too, those closed as IGNORED or NOT_A_PROBLEM at any age.",
              "enum": [
                "TRIAGE",
                "READY",
                "IN_PROGRESS",
                "WAITING",
                "MONITORING",
                "CLOSED"
              ],
              "type": "string"
            },
            "type": "array"
          },
          "teamIds": {
            "description": "Only issues one of these teams can see: linked to one of them, or shared with all teams.",
            "items": {
              "description": "Only issues one of these teams can see: linked to one of them, or shared with all teams.",
              "type": "string"
            },
            "maxItems": 50,
            "minItems": 0,
            "type": "array"
          },
          "updatedSince": {
            "description": "Only issues changed at or after this time.",
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SearchIssuesResponse": {
        "description": "A page of search results. Paging is best effort on a live board: an issue that changes between pages can move.",
        "properties": {
          "items": {
            "description": "The matching issues on this page.",
            "items": {
              "$ref": "#/components/schemas/IssueSummary"
            },
            "type": "array"
          },
          "labelsInUse": {
            "description": "The labels most used on recent issues the caller can see, so a new issue reuses them; on the first page only, null after.",
            "items": {
              "description": "The labels most used on recent issues the caller can see, so a new issue reuses them; on the first page only, null after.",
              "type": "string"
            },
            "type": "array"
          },
          "nextCursor": {
            "description": "Pass back as `cursor`, with the same filters, for the next page; null on the last page.",
            "type": "string"
          },
          "truncated": {
            "description": "Whether the search stopped after 500 rows; refine the filters to see the rest.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "SecretApi": {
        "description": "Secret wrapper for API responses",
        "properties": {
          "secret": {
            "description": "The secret value",
            "type": "string"
          }
        },
        "required": [
          "secret"
        ],
        "type": "object"
      },
      "ServiceAccountRead": {
        "description": "Service account for programmatic API access",
        "properties": {
          "clientId": {
            "description": "OAuth2 client ID for authentication",
            "type": "string"
          },
          "id": {
            "description": "Unique identifier",
            "type": "string"
          },
          "name": {
            "description": "Display name of the service account",
            "type": "string"
          },
          "roles": {
            "default": [],
            "description": "List of assigned roles",
            "items": {
              "$ref": "#/components/schemas/Role"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "clientId",
          "id",
          "name",
          "roles"
        ],
        "type": "object"
      },
      "ServiceAccountWithSecret": {
        "description": "Service account with client secret (only returned on creation)",
        "properties": {
          "clientId": {
            "description": "OAuth2 client ID for authentication",
            "type": "string"
          },
          "id": {
            "description": "Unique identifier",
            "type": "string"
          },
          "name": {
            "description": "Display name of the service account",
            "type": "string"
          },
          "roles": {
            "default": [],
            "description": "List of assigned roles",
            "items": {
              "$ref": "#/components/schemas/Role"
            },
            "type": "array",
            "uniqueItems": true
          },
          "secret": {
            "description": "The OAuth2 client secret for authentication",
            "format": "password",
            "type": "string"
          }
        },
        "required": [
          "clientId",
          "id",
          "name",
          "roles",
          "secret"
        ],
        "type": "object"
      },
      "ServiceAccountsList": {
        "properties": {
          "limit": {
            "format": "int32",
            "type": "integer"
          },
          "serviceAccounts": {
            "$ref": "#/components/schemas/ItemsCollectionServiceAccountRead"
          },
          "start": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "SetApiKeysRequest": {
        "description": "Replaces the full set of API keys for a Datadog integration in one atomic write",
        "properties": {
          "keys": {
            "description": "The complete desired set of API keys",
            "items": {
              "$ref": "#/components/schemas/ApiKey"
            },
            "maxItems": 64,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "keys"
        ],
        "type": "object"
      },
      "SetCommentGuidanceRequest": {
        "description": "Makes a person\u0027s comment guidance, or stops it being guidance; people only.",
        "properties": {
          "guidance": {
            "description": "Whether the comment is guidance, which agents weigh as advice.",
            "type": "boolean"
          }
        },
        "required": [
          "guidance"
        ],
        "type": "object"
      },
      "SetIssueLocksRequest": {
        "description": "Replaces an issue\u0027s locks; people only. A lock kept from before keeps who set it and when; a new one records the caller. Leaving a lock out unlocks it.",
        "properties": {
          "fields": {
            "description": "The fields to keep locked.",
            "items": {
              "description": "The fields to keep locked.",
              "enum": [
                "PRIORITY",
                "ENTITIES",
                "EXPIRES_AT",
                "ASSIGNEES"
              ],
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "labels": {
            "additionalProperties": {
              "description": "The label locks to keep, keyed by label: `PRESENT` only for a label the issue has, `ABSENT` only for one it does not.",
              "enum": [
                "PRESENT",
                "ABSENT"
              ],
              "type": "string"
            },
            "description": "The label locks to keep, keyed by label: `PRESENT` only for a label the issue has, `ABSENT` only for one it does not.",
            "type": "object"
          },
          "version": {
            "description": "The version the lock set was read at; a stale one is rejected with 409.",
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "fields",
          "labels",
          "version"
        ],
        "type": "object"
      },
      "SeverityNode": {
        "properties": {
          "comparator": {
            "default": "EQUAL",
            "description": "The comparator to use for the match.",
            "enum": [
              "GREATER_THAN",
              "GREATER_THAN_OR_EQUAL",
              "LESS_THAN",
              "LESS_THAN_OR_EQUAL",
              "EQUAL",
              "NOT_EQUAL"
            ],
            "example": "\"EQUAL\"",
            "type": "string"
          },
          "severity": {
            "default": 0,
            "description": "The severity level to match. This is an integer that is matched against the severity.",
            "example": 9,
            "format": "int32",
            "type": "integer"
          },
          "type": {
            "description": "A node that represents a severity in a parsed query.",
            "enum": [
              "severity-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "comparator",
          "severity",
          "type"
        ],
        "type": "object"
      },
      "ShardingConfig": {
        "description": "Configuration for dynamic partitioning when enabled.",
        "type": "object"
      },
      "SiblingMergeRule": {
        "description": "Merges sibling spans that share an identical subtree signature and match a CompleteSpan SQL predicate. The earliest-start match is kept (with its children); the other matching same-signature siblings are removed and counted under grepr.merged_siblings.",
        "properties": {
          "predicate": {
            "description": "Boolean SQL expression evaluated per span over the CompleteSpan schema. Uses the same fields and functions as head sampling predicates: top-level columns such as servicename, nested fields such as span.operationName, and VARIANT_VALUE(...) for span/resource attributes.",
            "example": "span.operationName LIKE \u0027GET /health%\u0027 OR VARIANT_VALUE(span.attributes, \u0027$[\"http.status_code\"]\u0027, \u0027INT\u0027) \u003d 200",
            "type": "string"
          }
        },
        "required": [
          "predicate"
        ],
        "title": "Sibling Merge Rules",
        "type": "object"
      },
      "SignupRequest": {
        "properties": {
          "orgName": {
            "pattern": "^[a-z][a-z0-9]{2,29}$",
            "type": "string"
          },
          "reCaptchaToken": {
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/UserInfo"
          }
        },
        "required": [
          "orgName",
          "reCaptchaToken",
          "user"
        ],
        "type": "object"
      },
      "SkillFile": {
        "properties": {
          "content": {
            "type": "string"
          },
          "path": {
            "maxLength": 240,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "content",
          "path"
        ],
        "type": "object"
      },
      "SkillView": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "files": {
            "items": {
              "$ref": "#/components/schemas/SkillFile"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "mutating": {
            "type": "boolean"
          },
          "revision": {
            "format": "int64",
            "type": "integer"
          },
          "scope": {
            "enum": [
              "PLATFORM",
              "ORGANIZATION"
            ],
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "toolIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SkippedInvestigation": {
        "properties": {
          "investigationId": {
            "type": "string"
          },
          "reason": {
            "enum": [
              "NOT_FOUND",
              "ALREADY_FINISHED"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "SlackMcp": {
        "description": "The payload containing integration data.",
        "properties": {
          "apiKey": {
            "description": "Masked API key for the MCP server.",
            "readOnly": true,
            "type": "string"
          },
          "serverUrl": {
            "description": "MCP server endpoint URL.",
            "example": "https://mcp.notion.so/v1",
            "type": "string"
          },
          "validateKeysOnSave": {
            "default": true,
            "description": "Indicates whether to validate the API key when saving.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "serverUrl"
        ],
        "type": "object",
        "x-type": {
          "type": "slack-mcp"
        }
      },
      "SocialUserInfo": {
        "properties": {
          "idToken": {
            "type": "string"
          }
        },
        "required": [
          "idToken"
        ],
        "type": "object"
      },
      "SortFieldConfig": {
        "description": "User-chosen sort fields, in precedence order.",
        "properties": {
          "column": {
            "description": "Built-in column or an attribute key to sort by.",
            "type": "string"
          },
          "direction": {
            "default": "ASC",
            "description": "Sort direction for this field.",
            "enum": [
              "ASC",
              "DESC"
            ],
            "type": "string"
          }
        },
        "required": [
          "column"
        ],
        "type": "object"
      },
      "Span": {
        "description": "A distributed tracing span.",
        "properties": {
          "attributes": {
            "$ref": "#/components/schemas/Variant"
          },
          "droppedAttributesCount": {
            "description": "Number of attributes that were dropped due to limits.",
            "format": "int32",
            "type": "integer"
          },
          "droppedEventsCount": {
            "description": "Number of events that were dropped due to limits.",
            "format": "int32",
            "type": "integer"
          },
          "droppedLinksCount": {
            "description": "Number of links that were dropped due to limits.",
            "format": "int32",
            "type": "integer"
          },
          "durationNanos": {
            "description": "Calculated duration in nanoseconds.",
            "example": 1500000,
            "format": "int64",
            "type": "integer"
          },
          "endTimeNanos": {
            "description": "End timestamp in nanoseconds since epoch.",
            "format": "int64",
            "type": "integer"
          },
          "events": {
            "description": "List of events associated with this span.",
            "items": {
              "$ref": "#/components/schemas/SpanEvent"
            },
            "type": "array"
          },
          "flags": {
            "description": "Span flags as defined in W3C Trace Context specification.",
            "format": "int32",
            "type": "integer"
          },
          "links": {
            "description": "List of links to other spans.",
            "items": {
              "$ref": "#/components/schemas/SpanLink"
            },
            "type": "array"
          },
          "operationName": {
            "description": "Human-readable span name describing the operation.",
            "example": "GET /users/:id",
            "type": "string"
          },
          "parentSpanId": {
            "description": "64-bit parent span identifier as a 16-character hex string; null for root spans.",
            "example": "1a2b3c4d5e6f7081",
            "type": "string"
          },
          "root": {
            "description": "True if this is a root span (no parent).",
            "type": "boolean"
          },
          "spanId": {
            "description": "64-bit span identifier as a 16-character hex string.",
            "example": "7f7e8d9a0b1c2d3e",
            "type": "string"
          },
          "spanKind": {
            "description": "The type of span",
            "enum": [
              "UNSPECIFIED",
              "INTERNAL",
              "SERVER",
              "CLIENT",
              "PRODUCER",
              "CONSUMER"
            ],
            "example": "SERVER",
            "type": "string"
          },
          "startTimeNanos": {
            "description": "Start timestamp in nanoseconds since epoch.",
            "format": "int64",
            "type": "integer"
          },
          "status": {
            "$ref": "#/components/schemas/Status"
          },
          "traceId": {
            "description": "128-bit trace identifier as a 32-character hex string.",
            "example": "6a33267c000000001001119764423b8d",
            "type": "string"
          },
          "traceState": {
            "description": "Trace state information in W3C format.",
            "example": "rojo\u003d00f067aa0ba902b7,congo\u003dt61rcWkgMzE",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SpanDedupIcebergTableSink": {
        "properties": {
          "datasetId": {
            "description": "The id of the dataset to write to",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes span identity tuples to an Iceberg table to keep track of which spans have been sent to a particular vendor sink.",
            "enum": [
              "spans-dedup-iceberg-table-sink"
            ],
            "type": "string"
          },
          "vendorSinkId": {
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "name",
          "type",
          "vendorSinkId"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "SpanDropRule": {
        "description": "Drops spans matching a CompleteSpan SQL predicate, along with their descendants.",
        "properties": {
          "predicate": {
            "description": "Boolean SQL expression evaluated per span over the CompleteSpan schema. Uses the same fields and functions as head sampling predicates: top-level columns such as servicename, nested fields such as span.operationName, and VARIANT_VALUE(...) for span/resource attributes.",
            "example": "span.operationName LIKE \u0027GET /health%\u0027 OR VARIANT_VALUE(span.attributes, \u0027$[\"http.status_code\"]\u0027, \u0027INT\u0027) \u003d 200",
            "type": "string"
          }
        },
        "required": [
          "predicate"
        ],
        "title": "Span Drop Rules",
        "type": "object"
      },
      "SpanEvent": {
        "description": "A timestamped event within a span.",
        "properties": {
          "attributes": {
            "$ref": "#/components/schemas/Variant"
          },
          "droppedAttributesCount": {
            "description": "Number of attributes that were dropped due to limits.",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "description": "Name of the event.",
            "example": "http.request.start",
            "type": "string"
          },
          "timeUnixNano": {
            "description": "Timestamp when the event occurred, in nanoseconds since epoch.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "SpanHeadSamplingRule": {
        "description": "Head sampling rule evaluated per span. Matched spans are retained.",
        "properties": {
          "filter": {
            "$ref": "#/components/schemas/HeadSamplingFilter"
          },
          "rate": {
            "description": "Fraction of matching spans/traces to retain, in [0.0, 1.0].",
            "example": 1.0,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "type": "number"
          }
        },
        "required": [
          "rate"
        ],
        "title": "Span Head Sampling Rules",
        "type": "object"
      },
      "SpanLink": {
        "description": "A link to another span, potentially from a different trace.",
        "properties": {
          "attributes": {
            "$ref": "#/components/schemas/Variant"
          },
          "droppedAttributesCount": {
            "description": "Number of attributes that were dropped due to limits.",
            "format": "int32",
            "type": "integer"
          },
          "flags": {
            "description": "Span flags as defined in W3C Trace Context specification.",
            "format": "int32",
            "type": "integer"
          },
          "spanId": {
            "description": "64-bit span identifier of the linked span as a 16-character hex string.",
            "example": "7f7e8d9a0b1c2d3e",
            "type": "string"
          },
          "traceId": {
            "description": "128-bit trace identifier of the linked span as a 32-character hex string.",
            "example": "6a33267c000000001001119764423b8d",
            "type": "string"
          },
          "traceState": {
            "description": "Optional trace state information.",
            "example": "rojo\u003d00f067aa0ba902b7,congo\u003dt61rcWkgMzE",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SpanTagger": {
        "description": "Overlays a fixed set of attributes onto every span passing through this operation. Used by the trace draft pipeline to stamp stage tags on previewed spans.",
        "properties": {
          "attributes": {
            "additionalProperties": {
              "description": "Attributes to overlay onto each span\u0027s attributes map.",
              "title": "Attributes",
              "type": "string"
            },
            "description": "Attributes to overlay onto each span\u0027s attributes map.",
            "title": "Attributes",
            "type": "object"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Overlays a fixed set of attributes onto every span passing through.",
            "enum": [
              "span-tagger"
            ],
            "type": "string"
          }
        },
        "required": [
          "attributes",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "SpansBackfillIcebergTableSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads spans from an Iceberg table for backfill, skipping spans already sent to the given vendor sinks (idempotent backfill source).",
            "enum": [
              "spans-backfill-iceberg-table-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          },
          "vendorSinkIntegrationIds": {
            "default": [],
            "items": {
              "description": "The list of vendor integration IDs, if any, that will consume the data from the source.",
              "example": "[\"0kabdv8yo9q99\",\"0kyytv3yi9q98\"]",
              "pattern": "[a-z0-9]{1,13}",
              "title": "Vendor Sink Integration IDs",
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "SpansBackfillTemplateInput": {
        "description": "Schema for the spans backfill job graph.",
        "properties": {
          "backfillTimestampTag": {
            "description": "ISO-8601 value stamped onto backfilled records as the grepr.backfilled.timestamp tag. Computed by the builder so the template stays free of time logic.",
            "example": "2023-01-01t01:00:00z",
            "type": "string"
          },
          "datasetId": {
            "description": "Dataset containing the raw records and delivery dedup state.",
            "pattern": "^[0-9a-z]{1,13}$",
            "type": "string"
          },
          "end": {
            "description": "End of the backfill interval.",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "description": "Maximum rows selected independently by each generated source.",
            "format": "int32",
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "sinks": {
            "description": "The vendor sink operations that deliver the backfilled records.",
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "type": "array"
          },
          "sqlOperation": {
            "$ref": "#/components/schemas/SqlOperation"
          },
          "start": {
            "description": "Start of the backfill interval.",
            "format": "date-time",
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables retained on the generated backfill source.",
            "type": "object"
          }
        },
        "required": [
          "backfillTimestampTag",
          "datasetId",
          "end",
          "limit",
          "query",
          "sinks",
          "start"
        ],
        "title": "Inputs Schema",
        "type": "object"
      },
      "SpansIcebergTableSink": {
        "properties": {
          "datasetId": {
            "description": "The id of the dataset to write to",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes individual spans to the raw spans Iceberg table.",
            "enum": [
              "spans-iceberg-table-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "SpansSynchronousSink": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Sink for returning results to the caller.",
            "enum": [
              "spans-sync-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "Splunk": {
        "description": "The payload containing integration data.",
        "properties": {
          "additionalTags": {
            "default": [],
            "description": "Tags to add when writing data to Splunk",
            "example": [
              "tag1:value1",
              "tag2:value2"
            ],
            "items": {
              "description": "Tags to add when writing data to Splunk",
              "example": "[\"tag1:value1\",\"tag2:value2\"]",
              "type": "string"
            },
            "maxItems": 10,
            "minItems": 0,
            "type": "array"
          },
          "authToken": {
            "description": "Masked HEC REST Auth token for Splunk used for ingestion",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "exceptions": {
            "additionalProperties": {
              "$ref": "#/components/schemas/VendorImportedException"
            },
            "description": "The imported exceptions from Splunk. This is a map from the vendor resource Id to the exception.",
            "readOnly": true,
            "type": "object"
          },
          "filterQuery": {
            "default": "",
            "description": "Filter to apply when reading any data from the Splunk API",
            "example": "service:my-service",
            "maxLength": 1024,
            "minLength": 0,
            "type": "string"
          },
          "ingestHost": {
            "description": "Splunk ingest host name or IP address for log ingestion by the sinkfor both HTTP Event Collector (HEC) and Splunk-to-Splunk (S2S) ingestion.Either of splunk host or this should be specified.",
            "example": "splunkcloud.com",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          },
          "ingestPort": {
            "default": "8088",
            "description": "Splunk ingest port",
            "example": "8088",
            "type": "string"
          },
          "restAuthToken": {
            "description": "Masked Splunk REST Auth token for Splunk used for search",
            "example": "**************ey",
            "readOnly": true,
            "type": "string"
          },
          "restHost": {
            "description": "Splunk REST API host name or IP address for splunk logs and alerts search.Either of splunk host or this should be specified. ",
            "example": "splunkcloud.com",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          },
          "restPort": {
            "default": "8089",
            "description": "Splunk REST port",
            "example": "8089",
            "type": "string"
          },
          "secure": {
            "default": true,
            "description": "Splunk collector uses a valid SSL certificate",
            "type": "boolean"
          },
          "splunkHost": {
            "description": "Splunk host name or IP address. If specified, ingest, REST and web endpoints default to this host. Either of splunk host or advanced config with individual endpoints should be specified.",
            "example": "splunkcloud.com",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          },
          "webHost": {
            "description": "Splunk web host name or IP address for linking to Splunk Web UI to view backfilled logsEither of splunk host or this should be specified.",
            "example": "splunkcloud.com",
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          },
          "webPort": {
            "default": "443",
            "description": "Splunk web port",
            "example": "443",
            "type": "string"
          }
        },
        "required": [
          "additionalTags",
          "filterQuery"
        ],
        "type": "object",
        "x-type": {
          "type": "splunk"
        }
      },
      "SplunkLogAgentSource": {
        "properties": {
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offsetResetStrategy": {
            "default": "LATEST",
            "description": "Strategy for resetting Kafka consumer offset when no committed offset exists or has expired. EARLIEST reads from oldest available offset (prevents data loss on restart after retention period). LATEST skips to newest offset (current behavior).",
            "enum": [
              "EARLIEST",
              "LATEST",
              "NONE"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reads log events from Splunk HEC collector. This is used to pre-process logs before being sent to Splunk.",
            "enum": [
              "splunk-log-agent-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "SplunkLogHttpSource": {
        "properties": {
          "filterQuery": {
            "default": "",
            "description": "The Splunk query filter to use when reading logs from Splunk. This is concatenated with the one from the integration.",
            "example": "sourcetype\u003d\"httpevent\"",
            "maxLength": 1024,
            "minLength": 0,
            "type": "string"
          },
          "integrationId": {
            "description": "The Splunk integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Pulls log events from Splunk server for processing using a specified query.",
            "enum": [
              "splunk-log-http-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "SplunkLogSink": {
        "properties": {
          "additionalTags": {
            "default": [],
            "description": "Additional tags to add to the logs when writing to Splunk. Gets combined with the integration\u0027s additionalTags.",
            "example": "[\"additional_tag\": \"value\", \"additional_tag2\": \"value2\"]",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "defaultIndex": {
            "description": "Default index to be set when writing to Splunk if no index is set.",
            "example": "main",
            "type": "string"
          },
          "indexOverride": {
            "description": "Override index to be set when writing to Splunk",
            "example": "main",
            "type": "string"
          },
          "integrationId": {
            "description": "The Splunk integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes processed events to splunk.",
            "enum": [
              "splunk-log-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "SqlExecutable": {
        "description": "Base class for SQL statements",
        "discriminator": {
          "mapping": {
            "sql_io": "#/components/schemas/SqlIoStatement",
            "sql_output": "#/components/schemas/SqlOutputStatement",
            "sql_view": "#/components/schemas/SqlViewStatement"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SqlViewStatement"
          },
          {
            "$ref": "#/components/schemas/SqlOutputStatement"
          },
          {
            "$ref": "#/components/schemas/SqlIoStatement"
          }
        ],
        "properties": {
          "eventTimeAttribute": {
            "type": "string"
          },
          "materialized": {
            "type": "boolean"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "SqlIoStatement": {
        "description": "SQL statement that performs side effects like INSERT INTO",
        "properties": {
          "eventTimeAttribute": {
            "type": "string"
          },
          "materialized": {
            "type": "boolean"
          },
          "sqlQuery": {
            "description": "The SQL query to execute. Can reference tables created by previous statements by their tableName, as well as the \u0027traces\u0027 input table and available datasets.",
            "example": "SELECT * FROM traces WHERE duration \u003e 1000000",
            "type": "string"
          }
        },
        "required": [
          "sqlQuery"
        ],
        "type": "object"
      },
      "SqlNode": {
        "description": "Non-terminal — runs SQL on events, then routes survivors to `next`.",
        "properties": {
          "next": {
            "$ref": "#/components/schemas/ChainNode"
          },
          "outputRouting": {
            "additionalProperties": {
              "description": "Pipeline step that receives a SQL output statement\u0027s stream.",
              "enum": [
                "json-log-processor",
                "grok-parser",
                "data-warehouse",
                "log-reducer",
                "agent-signal",
                "sinks"
              ],
              "type": "string"
            },
            "description": "Routes each SQL output statement\u0027s output name to the pipeline step that consumes it. Every key must match an output statement defined in `sqlOperation`.",
            "type": "object"
          },
          "sqlOperation": {
            "$ref": "#/components/schemas/SqlOperation"
          }
        },
        "required": [
          "next",
          "outputRouting",
          "sqlOperation"
        ],
        "type": "object"
      },
      "SqlOperation": {
        "description": "Processes data through a sequence of SQL statements executed in order. Supports VIEW statements that create temporary tables, OUTPUT statements that produce DataStream results, and IO statements that perform side effects.",
        "properties": {
          "availableDatasets": {
            "default": [],
            "description": "IDs of datasets whose tables can be referenced in SQL statements. These will be registered as queryable tables in the SQL environment. The tables from each dataset will appear in a separate namespace based on the dataset name.",
            "items": {
              "description": "IDs of datasets whose tables can be referenced in SQL statements. These will be registered as queryable tables in the SQL environment. The tables from each dataset will appear in a separate namespace based on the dataset name.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "globalStateTtl": {
            "default": "PT2M",
            "description": "Global time-to-live for operation state. When calculating aggregations or joins in streaming mode, Grepr pipelines will keep track of some state (such as the count and sum of values for an averaging aggregation). To prevent the size of the state from growing indefinitely, Grepr will set a default time-to-live value for any state. If state does not receive updates after this TTL, it will be considered idle and the state will be cleared. Aggregations for will be reset for the idle group for example.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "inputs": {
            "additionalProperties": {
              "description": "Data types that are acceptable as inputs and outputs to SQL operations. See [SQL transform supported data types](/transforms/sql-transform/data-types) for the SQL row schemas. The `COMPLETE_SPAN` SQL row schema uses SQL field names that differ from the REST JSON property names documented in [CompleteSpan](/apis/api-spec#schema/CompleteSpan).",
              "enum": [
                "VARIANT",
                "LOG_EVENT",
                "COMPLETE_SPAN",
                "METRIC_DATA",
                "WIDE_METRIC_DATA"
              ],
              "type": "string"
            },
            "default": {},
            "description": "Input table names that can be referenced in SQL statements. Each input table corresponds to an input stream that is connected to this operation in the job graph. All connected input types must be compatible with the SQL operations. Each type specifies what the schema of the resulting table that is available for the SQL statements looks like. For `COMPLETE_SPAN`, the table schema uses SQL row field names, which differ from the REST JSON property names in the `CompleteSpan` schema.",
            "type": "object"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "statements": {
            "default": [],
            "description": "List of SQL statements to execute in order. Each statement can reference tables created by previous statements, the input tables, and any tables from the available datasets.",
            "items": {
              "$ref": "#/components/schemas/SqlExecutable"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "type": {
            "description": "Processes data through a sequence of SQL statements.",
            "enum": [
              "sql-operation"
            ],
            "type": "string"
          },
          "watermarkDelay": {
            "default": "PT5S",
            "description": "Delay for watermark generation. Default is 5 seconds. Watermarks are used to track event time progress in streaming jobs. The watermark is usually the maximum event time seen by a processing task minus this delay. Watermarks are used to trigger time-based operations like windowing. This delay defines how far behind the system can be in processing events before it considers the event time to be \u0027late\u0027. Late events would not be included in windowing operations that might have already been closed (ie where the data is already sent). This also means that the results of windowing operations will be delayed by this delay, as the system waits for the watermark to catch up. For more information, see the Flink documentation on watermarks.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          }
        },
        "required": [
          "name",
          "statements",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "SqlOutputStatement": {
        "description": "SQL statement that produces a DataStream output",
        "properties": {
          "eventTimeAttribute": {
            "type": "string"
          },
          "materialized": {
            "type": "boolean"
          },
          "outputName": {
            "description": "Name of the output stream that this statement produces. Used to identify the output DataStream in the SqlStatementsExecutor results. Must be unique across all OUTPUT statements within the operation.",
            "example": "filtered_traces",
            "pattern": "^(?\u003d.*_)[a-zA-Z_][a-zA-Z0-9_]*$",
            "type": "string"
          },
          "outputType": {
            "description": "Data types that are acceptable as inputs and outputs to SQL operations. See [SQL transform supported data types](/transforms/sql-transform/data-types) for the SQL row schemas. The `COMPLETE_SPAN` SQL row schema uses SQL field names that differ from the REST JSON property names documented in [CompleteSpan](/apis/api-spec#schema/CompleteSpan).",
            "enum": [
              "VARIANT",
              "LOG_EVENT",
              "COMPLETE_SPAN",
              "METRIC_DATA",
              "WIDE_METRIC_DATA"
            ],
            "example": "VARIANT",
            "type": "string"
          },
          "sqlQuery": {
            "description": "The SQL query to execute. Can reference tables created by previous statements by their tableName, as well as the \u0027traces\u0027 input table and available datasets.",
            "example": "SELECT * FROM traces WHERE duration \u003e 1000000",
            "type": "string"
          }
        },
        "required": [
          "outputName",
          "outputType",
          "sqlQuery"
        ],
        "type": "object"
      },
      "SqlPredicateFilter": {
        "allOf": [
          {
            "$ref": "#/components/schemas/HeadSamplingFilter"
          },
          {
            "properties": {
              "predicate": {
                "description": "SQL boolean expression evaluated per span.",
                "example": "servicename \u003d \u0027core\u0027 AND span.operationName LIKE \u0027worker.%\u0027",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "Filter expressed as a raw SQL boolean expression over the CompleteSpan schema.",
        "required": [
          "predicate"
        ],
        "type": "object"
      },
      "SqlViewStatement": {
        "description": "SQL statement that creates a queryable temporary view",
        "properties": {
          "eventTimeAttribute": {
            "description": "Event time attribute column name for watermark re-establishment after materialization.",
            "type": "string"
          },
          "materialized": {
            "type": "boolean"
          },
          "sqlQuery": {
            "description": "The SQL query to execute. Can reference tables created by previous statements by their tableName, as well as the \u0027traces\u0027 input table and available datasets.",
            "example": "SELECT * FROM traces WHERE duration \u003e 1000000",
            "type": "string"
          },
          "tableName": {
            "description": "Name of the output table that this statement produces. Subsequent statements can reference this table name directly in their SQL. Must be unique within the operation.",
            "example": "filtered_traces",
            "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$",
            "type": "string"
          }
        },
        "required": [
          "sqlQuery",
          "tableName"
        ],
        "type": "object"
      },
      "SsoClaimMappingRole": {
        "description": "Organization roles to assign when claim matches",
        "properties": {
          "id": {
            "description": "Role identifier",
            "example": "0n1z6h5p0ffqz",
            "type": "string"
          },
          "name": {
            "description": "Role name",
            "example": "Admin",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "SsoEnablementRequest": {
        "properties": {
          "comments": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "StartInvestigationErrorResponse": {
        "properties": {
          "code": {
            "format": "int32",
            "type": "integer"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "StartInvestigationRejectedResponse": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/StartInvestigationResponse"
          },
          {
            "$ref": "#/components/schemas/StartInvestigationErrorResponse"
          }
        ],
        "type": "object"
      },
      "StartInvestigationRequest": {
        "description": "Request body for the manual-trigger endpoint. The engineer\u0027s user identity is taken from the request\u0027s auth context, not the body.",
        "properties": {
          "agentId": {
            "description": "TSID of the agent to investigate.",
            "type": "string"
          },
          "issueId": {
            "description": "When set, hands the agent this issue (its TSID): the run\u0027s subject, which its first message holds and whose history records the handoff. Only a person may hand off an issue, and a handoff can\u0027t be a continuation. `null` for a plain run.",
            "type": "string"
          },
          "next": {
            "description": "With `issueId`, true to have the agent work on the issue next: the run starts ahead of the agent\u0027s other queued runs, without stopping a running one. Allowed only with `issueId`; `null` or false for the usual place in the queue.",
            "type": "boolean"
          },
          "parentInvestigationId": {
            "description": "When set, seeds the new investigation from this parent\u0027s journalled transcript — a continuation; the parent must belong to `agentId`. `null` for a fresh investigation.",
            "type": "string"
          },
          "userProvidedContext": {
            "description": "Free-form context for the agent\u0027s first turn, or `null`.",
            "type": "string"
          }
        },
        "required": [
          "agentId"
        ],
        "type": "object"
      },
      "StartInvestigationResponse": {
        "properties": {
          "investigationId": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "StateChangeRequest": {
        "properties": {
          "state": {
            "enum": [
              "ACTIVE",
              "PAUSED"
            ],
            "type": "string"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "Status": {
        "description": "Status information for a span",
        "properties": {
          "code": {
            "description": "The status code of a span",
            "enum": [
              "UNSET",
              "OK",
              "ERROR",
              "UNRECOGNIZED"
            ],
            "example": "OK",
            "type": "string"
          },
          "message": {
            "description": "Developer-facing human readable error message",
            "example": "Request timed out",
            "type": "string"
          }
        },
        "type": "object"
      },
      "StatusMapping": {
        "description": "Maps raw status values to severities.",
        "properties": {
          "debug": {
            "$ref": "#/components/schemas/StatusValues"
          },
          "error": {
            "$ref": "#/components/schemas/StatusValues"
          },
          "fatal": {
            "$ref": "#/components/schemas/StatusValues"
          },
          "info": {
            "$ref": "#/components/schemas/StatusValues"
          },
          "numberRanges": {
            "default": [],
            "description": "Inclusive ranges mapping numeric status values to severities.",
            "items": {
              "$ref": "#/components/schemas/StatusNumberRange"
            },
            "type": "array"
          },
          "trace": {
            "$ref": "#/components/schemas/StatusValues"
          },
          "warn": {
            "$ref": "#/components/schemas/StatusValues"
          }
        },
        "type": "object"
      },
      "StatusNumberRange": {
        "description": "Maps numeric status values within an inclusive range to a severity.",
        "properties": {
          "max": {
            "description": "Inclusive upper bound.",
            "format": "int64",
            "type": "integer"
          },
          "min": {
            "description": "Inclusive lower bound.",
            "format": "int64",
            "type": "integer"
          },
          "severity": {
            "description": "Severity assigned to numbers in a status number range.",
            "enum": [
              "TRACE",
              "DEBUG",
              "INFO",
              "WARN",
              "ERROR",
              "FATAL",
              "KEEP_NUMBER"
            ],
            "type": "string"
          }
        },
        "required": [
          "max",
          "min",
          "severity"
        ],
        "type": "object"
      },
      "StatusValues": {
        "description": "Raw status strings that map to one severity. Matching is case-sensitive.",
        "properties": {
          "exact": {
            "default": [],
            "description": "Status strings that map to this severity when equal to the value.",
            "example": [
              "warn",
              "WARN"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "prefixes": {
            "default": [],
            "description": "Status strings that map to this severity when the value starts with them. An exact match wins over any prefix, and the longest matching prefix wins.",
            "example": [
              "w",
              "W"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "StreamFormatAny": {
        "properties": {
          "producedType": {
            "$ref": "#/components/schemas/TypeInformationAny"
          },
          "splittable": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "StringData": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Data"
          },
          {
            "properties": {
              "result": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        ],
        "type": "object"
      },
      "StructuredAnalyticsQuery": {
        "properties": {
          "end": {
            "description": "End of the time interval to query.",
            "format": "date-time",
            "type": "string"
          },
          "from": {
            "description": "Logical table alias to query.",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "groupBy": {
            "default": [],
            "description": "Grepr SQL expressions or projection aliases used for grouping. An expression may reference projection aliases.",
            "items": {
              "default": "[]",
              "description": "Grepr SQL expressions or projection aliases used for grouping. An expression may reference projection aliases.",
              "maxLength": 4096,
              "minLength": 0,
              "type": "string"
            },
            "maxItems": 64,
            "minItems": 0,
            "type": "array"
          },
          "having": {
            "description": "Optional Grepr SQL expression applied after aggregation. The expression may reference projection aliases.",
            "maxLength": 4096,
            "minLength": 0,
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "Maximum number of result rows.",
            "format": "int32",
            "minimum": 1,
            "type": "integer"
          },
          "orderBy": {
            "default": [],
            "description": "Ordering applied to the analytical results.",
            "items": {
              "$ref": "#/components/schemas/AnalyticsOrderBy"
            },
            "maxItems": 64,
            "minItems": 0,
            "type": "array"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "select": {
            "description": "Expressions returned by the query.",
            "items": {
              "$ref": "#/components/schemas/AnalyticsProjection"
            },
            "maxItems": 128,
            "minItems": 1,
            "type": "array"
          },
          "start": {
            "description": "Start of the time interval to query.",
            "format": "date-time",
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables available while parsing the predicate.",
            "type": "object"
          },
          "window": {
            "$ref": "#/components/schemas/AnalyticsTimeWindow"
          }
        },
        "required": [
          "end",
          "from",
          "predicate",
          "select",
          "start"
        ],
        "type": "object"
      },
      "SumAttributesMergeStrategy": {
        "properties": {
          "type": {
            "description": "SumAttributesMergeStrategy: Sums numeric attribute values.",
            "enum": [
              "sum"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "Sumo": {
        "description": "The payload containing integration data.",
        "properties": {
          "endpoint": {
            "description": "SumoLogic HTTP / OTLP endpoint url base",
            "example": "******",
            "readOnly": true,
            "type": "string"
          }
        },
        "type": "object",
        "x-type": {
          "type": "sumo"
        }
      },
      "SumoLogSink": {
        "properties": {
          "additionalAttributes": {
            "additionalProperties": {
              "description": "Additional attributes to add to the logs when writing to SumoLogic. Gets combined with the integration\u0027s additionalAttributes.",
              "example": "{\"processor\":\"grepr\"}",
              "type": "string"
            },
            "default": {},
            "description": "Additional attributes to add to the logs when writing to SumoLogic. Gets combined with the integration\u0027s additionalAttributes.",
            "example": {
              "processor": "grepr"
            },
            "type": "object"
          },
          "integrationId": {
            "description": "The New Relic integration id.",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes processed logs to Sumo Logic.",
            "enum": [
              "sumologic-log-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "SumoLogSource": {
        "properties": {
          "integrationId": {
            "description": "The integration id for the observability vendor.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offsetResetStrategy": {
            "default": "LATEST",
            "description": "Strategy for resetting Kafka consumer offset when no committed offset exists or has expired. EARLIEST reads from oldest available offset (prevents data loss on restart after retention period). LATEST skips to newest offset (current behavior).",
            "enum": [
              "EARLIEST",
              "LATEST",
              "NONE"
            ],
            "type": "string"
          },
          "type": {
            "description": "Reads log events from SumoLogic HTTP Source collector. This is used to pre-process logs before being sent to SumoLogic.",
            "enum": [
              "sumologic-log-agent-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "integrationId",
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "TableColumnMetrics": {
        "properties": {
          "enabled": {
            "description": "Whether the table\u0027s default column statistics mode is Grepr\u0027s, which collects them on every column without a per-column mode, indexed columns past the first 100 included.",
            "type": "boolean"
          },
          "mode": {
            "description": "The table\u0027s write.metadata.metrics.default as stored, absent when the table has none. With the setting off, a value here was set outside Grepr.",
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "TableColumnMetricsUpdate": {
        "properties": {
          "enabled": {
            "description": "Whether to turn Grepr\u0027s column statistics on for the table.",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "TableConfig": {
        "description": "Per-table configuration overrides. Read-only here; use /datasets/{id}/{tableKey}/config to mutate.",
        "properties": {
          "partitionConfig": {
            "$ref": "#/components/schemas/PartitionConfig"
          },
          "sortFields": {
            "default": [],
            "description": "User-chosen sort fields, in precedence order.",
            "items": {
              "$ref": "#/components/schemas/SortFieldConfig"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "TableConfigRead": {
        "properties": {
          "effectiveSpec": {
            "default": [],
            "description": "Full effective partition spec, including system-controlled rows.",
            "items": {
              "$ref": "#/components/schemas/EffectivePartitionField"
            },
            "type": "array"
          },
          "promotedAttributes": {
            "default": [],
            "description": "Attribute paths the table indexes, with the policy applied to each.",
            "items": {
              "$ref": "#/components/schemas/PromotedAttribute"
            },
            "readOnly": true,
            "type": "array"
          },
          "promotedTagKeys": {
            "default": [],
            "description": "The promotion policy\u0027s tags.include, verbatim: the tag keys a partition field may name besides the built-ins. Discovery alone does not add a key to this list, and service or host is listed only when included explicitly.",
            "items": {
              "description": "The promotion policy\u0027s tags.include, verbatim: the tag keys a partition field may name besides the built-ins. Discovery alone does not add a key to this list, and service or host is listed only when included explicitly.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "promotedTags": {
            "default": [],
            "description": "Tag keys the table indexes, with the policy applied to each.",
            "items": {
              "$ref": "#/components/schemas/PromotedTag"
            },
            "readOnly": true,
            "type": "array"
          },
          "promotion": {
            "$ref": "#/components/schemas/PromotionPolicy"
          },
          "sortFields": {
            "default": [],
            "description": "Effective sort fields, in precedence order.",
            "items": {
              "$ref": "#/components/schemas/SortFieldConfig"
            },
            "type": "array"
          },
          "unreadableAttributeColumns": {
            "default": [],
            "description": "Attribute index columns whose name could not be decoded to a path.",
            "items": {
              "description": "Attribute index columns whose name could not be decoded to a path.",
              "readOnly": true,
              "type": "string"
            },
            "readOnly": true,
            "type": "array"
          }
        },
        "required": [
          "effectiveSpec",
          "promotion"
        ],
        "type": "object"
      },
      "TagAction": {
        "properties": {
          "modification": {
            "description": "Modification actions on tag values.",
            "enum": [
              "ADD",
              "REMOVE",
              "SET",
              "DELETE"
            ],
            "type": "string"
          },
          "order": {
            "default": 0,
            "description": "Action order. Lower is applied first.",
            "format": "int32",
            "type": "integer"
          },
          "tagKey": {
            "description": "The key of the tag to add.",
            "example": "hosts",
            "type": "string"
          },
          "type": {
            "description": "Modifies event tag values.",
            "enum": [
              "tag-action"
            ],
            "type": "string"
          },
          "values": {
            "default": [],
            "description": "The values of the tag to modify.",
            "example": [
              "host1",
              "host2"
            ],
            "items": {
              "description": "The values of the tag to modify.",
              "example": "[\"host1\",\"host2\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "modification",
          "tagKey",
          "type",
          "values"
        ],
        "type": "object"
      },
      "TagCountItem": {
        "properties": {
          "count": {
            "format": "int64",
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "TagKeyNode": {
        "properties": {
          "tagKey": {
            "default": "",
            "description": " This is a string that is matched against the tag key.",
            "example": "\"source\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a tag key in a parsed query.",
            "enum": [
              "tag-key-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "tagKey",
          "type"
        ],
        "type": "object"
      },
      "TagKeyPrefixNode": {
        "properties": {
          "prefix": {
            "default": "",
            "description": "This is a string that is matched against the tag key prefix.",
            "example": "\"sourc\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a tag key prefix in a parsed query.",
            "enum": [
              "tag-key-prefix-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "prefix",
          "type"
        ],
        "type": "object"
      },
      "TagKeyWildcardNode": {
        "properties": {
          "type": {
            "description": "A node that represents a tag key wildcard in a parsed query.",
            "enum": [
              "tag-key-wildcard-node"
            ],
            "type": "string"
          },
          "wildcard": {
            "default": "",
            "description": "This is a wildcarded string that is matched against the tag key.",
            "example": "\"ser*\"",
            "type": "string"
          }
        },
        "required": [
          "type",
          "wildcard"
        ],
        "type": "object"
      },
      "TagNode": {
        "properties": {
          "tagKey": {
            "default": "",
            "description": "The tag key ",
            "example": "\"service\"",
            "type": "string"
          },
          "tagValue": {
            "default": "",
            "description": "This is a string that is matched against the tag value.",
            "example": "\"grepr-service-1\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a tag key and value in a parsed query.",
            "enum": [
              "tag-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "tagKey",
          "tagValue",
          "type"
        ],
        "type": "object"
      },
      "TagPrefixNode": {
        "properties": {
          "prefix": {
            "default": "",
            "description": "This is a prefix that is matched against the tag value.",
            "example": "\"grepr-service\"",
            "type": "string"
          },
          "tagKey": {
            "default": "",
            "description": "This is a string that is matched against the tag key.",
            "example": "\"source\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a tag prefix in a parsed query.",
            "enum": [
              "tag-prefix-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "prefix",
          "tagKey",
          "type"
        ],
        "type": "object"
      },
      "TagRe2Node": {
        "properties": {
          "regex": {
            "default": "",
            "description": "The regex to match. This is a regex string that is matched against the tag",
            "example": "\"grepr-service-1.*\"",
            "type": "string"
          },
          "tagKey": {
            "default": "",
            "description": "This is a string that is matched against the tag key.",
            "example": "\"source\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a tag regex in a parsed query.",
            "enum": [
              "tag-re2-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "regex",
          "tagKey",
          "type"
        ],
        "type": "object"
      },
      "TagWildcardNode": {
        "properties": {
          "tagKey": {
            "default": "",
            "description": "The tag key",
            "example": "\"service\"",
            "type": "string"
          },
          "type": {
            "description": "A node that represents a tag wildcard in a parsed query.",
            "enum": [
              "tag-wildcard-node"
            ],
            "type": "string"
          },
          "wildcard": {
            "default": "",
            "description": "This is a string including wildcards that is matched against the tag value.",
            "example": "\"grepr-serv*\"",
            "type": "string"
          }
        },
        "required": [
          "tagKey",
          "type",
          "wildcard"
        ],
        "type": "object"
      },
      "TagWithComparatorNode": {
        "properties": {
          "comparator": {
            "default": "EQUAL",
            "description": "The comparator to use for the match.",
            "enum": [
              "GREATER_THAN",
              "GREATER_THAN_OR_EQUAL",
              "LESS_THAN",
              "LESS_THAN_OR_EQUAL",
              "EQUAL",
              "NOT_EQUAL"
            ],
            "example": "\"equals\"",
            "type": "string"
          },
          "tagKey": {
            "default": "",
            "description": "The tag name",
            "example": "\"service\"",
            "type": "string"
          },
          "term": {
            "default": "",
            "description": "The term to match. This is a string that is matched against the tag.",
            "example": "\"source\"",
            "type": "string"
          },
          "type": {
            "description": "A node that compares a tag in a parsed query.",
            "enum": [
              "tag-comparator-node"
            ],
            "type": "string"
          }
        },
        "required": [
          "comparator",
          "tagKey",
          "term",
          "type"
        ],
        "type": "object"
      },
      "TailSamplingConfig": {
        "description": "Optional configuration for histogram-based tail sampling. When provided, enables intelligent sampling based on trace duration percentiles calculated over sliding windows. Uses hierarchical trace signatures to group similar traces and applies configurable sampling rates based on performance tiers (fast, medium, slow, outliers).",
        "properties": {
          "bootstrapThreshold": {
            "default": 40,
            "description": "Number of traces to sample during bootstrap period before applying percentile-based sampling rules. This allows the system to gather initial data on trace durations before applying more complex sampling logic. This number will be multiplied by the parallelism of the pipeline, so the bootstrap traces may be higher as the pipeline expands for new trace signatures.",
            "example": 1000,
            "format": "int32",
            "title": "Bootstrap Threshold",
            "type": "integer"
          },
          "errorSamplingRate": {
            "default": 0.75,
            "description": "Sampling rate for traces that contain errors or failures. Error traces are often the most important for debugging and should typically have high sampling rates. Applied before quantile-based sampling.",
            "example": 0.75,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Error Sampling Rate",
            "type": "number"
          },
          "incompleteSamplingRate": {
            "default": 0.5,
            "description": "Sampling rate for incomplete/partial traces. Partial traces occur when some spans are missing, which can indicate data loss or system issues. Applied before quantile-based sampling.",
            "example": 0.5,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Incomplete Sampling Rate",
            "type": "number"
          },
          "keyAttributePaths": {
            "default": [
              [
                "service.name"
              ],
              [
                "http.method"
              ]
            ],
            "description": "Array of attribute paths to extract key attributes from spans for hierarchical signature generation. Each inner array represents a sequence of keys to search for in the attributes map. These attributes are used to group traces by their structural patterns.",
            "example": [
              [
                "service.name"
              ],
              [
                "http.method"
              ],
              [
                "db.operation"
              ],
              [
                "error",
                "code"
              ]
            ],
            "items": {
              "default": [
                [
                  "service.name"
                ],
                [
                  "http.method"
                ]
              ],
              "description": "Array of attribute paths to extract key attributes from spans for hierarchical signature generation. Each inner array represents a sequence of keys to search for in the attributes map. These attributes are used to group traces by their structural patterns.",
              "example": [
                [
                  "service.name"
                ],
                [
                  "http.method"
                ],
                [
                  "db.operation"
                ],
                [
                  "error",
                  "code"
                ]
              ],
              "items": {
                "default": "[[\"service.name\"],[\"http.method\"]]",
                "description": "Array of attribute paths to extract key attributes from spans for hierarchical signature generation. Each inner array represents a sequence of keys to search for in the attributes map. These attributes are used to group traces by their structural patterns.",
                "example": "[[\"service.name\"],[\"http.method\"],[\"db.operation\"],[\"error\",\"code\"]]",
                "title": "Key Attribute Paths",
                "type": "string"
              },
              "title": "Key Attribute Paths",
              "type": "array"
            },
            "title": "Key Attribute Paths",
            "type": "array"
          },
          "longRunningTraceSamplingRate": {
            "default": 0.0,
            "description": "Sampling rate for traces force-emitted because they exceeded the configured maxSessionLength. Routed through a dedicated \u0027long_running\u0027 percentile bucket — distinct from the structural \u0027incomplete\u0027 bucket — so operators can monitor and tune separately.",
            "example": 0.1,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Long-Running Trace Sampling Rate",
            "type": "number"
          },
          "maxSessionLength": {
            "default": "PT1M",
            "description": "Upper bound on how long a single trace assembly session may accumulate spans in memory before being force-emitted. Protects against long-running traces that would otherwise hold spans in the assembly buffer indefinitely. When the cap is hit, the trace is classified as long-running and later spans form a new session. Must be strictly greater than maxTraceDelay.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "maxTraceDelay": {
            "default": "PT20S",
            "description": "The maximum time to wait for all spans of a trace to arrive before assembling the trace. This determines the size of the tumbling window used for trace assembly. Traces that span longer than this duration may be assembled as partial traces. Should be set based on the expected maximum trace duration in your system. Large values may lead to memory issues if traces are too long and will delay sending traces to the sink by that amount. The pipeline may also fail if configured too high.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "quantileSamplingTiers": {
            "default": [
              {
                "label": "very_slow",
                "quantile": 0.99,
                "samplingRate": 0.8
              },
              {
                "label": "slow",
                "quantile": 0.95,
                "samplingRate": 0.1
              },
              {
                "label": "medium",
                "quantile": 0.5,
                "samplingRate": 0.05
              },
              {
                "label": "fast",
                "quantile": 0.0,
                "samplingRate": 0.01
              }
            ],
            "description": "List of quantile sampling tiers for performance-based sampling. Each tier defines a percentile threshold, sampling rate, and label. Traces ABOVE each quantile get the corresponding sampling rate and are labeled with the tier\u0027s label. Evaluated in descending quantile order. A tier at quantile 0.0 is a catch-all that matches unconditionally, giving the fastest traces a baseline rate; without one, traces below the lowest configured quantile are dropped.",
            "example": "[{quantile: 0.99, samplingRate: 0.8, label: \u0027very_slow\u0027}, {quantile: 0.95, samplingRate: 0.1, label: \u0027slow\u0027}, {quantile: 0.5, samplingRate: 0.05, label: \u0027medium\u0027}, {quantile: 0.0, samplingRate: 0.01, label: \u0027fast\u0027}]",
            "items": {
              "$ref": "#/components/schemas/QuantileSamplingTier"
            },
            "title": "Quantile Sampling Tiers",
            "type": "array"
          }
        },
        "title": "Tail Sampling Configuration",
        "type": "object"
      },
      "TeamAssignment": {
        "description": "Team and role assignment",
        "properties": {
          "role": {
            "description": "The role within the team",
            "enum": [
              "LEADER",
              "MEMBER"
            ],
            "type": "string"
          },
          "teamId": {
            "description": "The ID of the team",
            "example": "team123",
            "type": "string"
          },
          "teamName": {
            "description": "Team name (response-only, enriched by server)",
            "readOnly": true,
            "type": "string"
          }
        },
        "required": [
          "role",
          "teamId"
        ],
        "type": "object"
      },
      "Template": {
        "description": "A reusable template for generating a subgraph of a Grepr job graph using Javascript. Templates allow users to define parameterized pipeline components that can be instantiated with specific configuration.",
        "properties": {
          "builtIn": {
            "description": "Read-only property indicating whether this template is a built-in, non-editable template.",
            "readOnly": true,
            "type": "boolean"
          },
          "description": {
            "description": "Description of the template.",
            "example": "Parses JSON log events and extracts fields.",
            "type": "string"
          },
          "draftOutputs": {
            "default": [],
            "description": "List of additional outputs that will be added to the graph when running in draft mode.",
            "items": {
              "$ref": "#/components/schemas/TemplateDraftOutput"
            },
            "type": "array"
          },
          "id": {
            "description": "Unique identifier for the template.",
            "example": "template-123",
            "type": "string"
          },
          "inputSchema": {
            "additionalProperties": {
              "description": "JSONSchema (https://json-schema.org/draft/2020-12) for validating the inputs to the template. Make sure you make this validation forwards/backwards compatible to ensure that the template version can be upgraded and rolled back.",
              "example": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"param\": {\n      \"type\": \"string\",\n      \"description\": \"Test parameter\"\n    },\n}",
              "type": "object"
            },
            "default": {},
            "description": "JSONSchema (https://json-schema.org/draft/2020-12) for validating the inputs to the template. Make sure you make this validation forwards/backwards compatible to ensure that the template version can be upgraded and rolled back.",
            "example": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"param\": {\n      \"type\": \"string\",\n      \"description\": \"Test parameter\"\n    },\n}",
            "type": "object"
          },
          "inputs": {
            "additionalProperties": {
              "description": "Map of input names used in a parent subgraph that uses a TemplateOperation to their internal connections within the subgraph. Can be missing if there are no inputs to the subgraph",
              "example": "{\"input\":\"log_reducer:input\"}",
              "type": "string"
            },
            "default": {},
            "description": "Map of input names used in a parent subgraph that uses a TemplateOperation to their internal connections within the subgraph. Can be missing if there are no inputs to the subgraph",
            "example": {
              "input": "log_reducer:input"
            },
            "type": "object"
          },
          "isLatest": {
            "default": true,
            "type": "boolean",
            "writeOnly": true
          },
          "latest": {
            "type": "boolean"
          },
          "name": {
            "description": "Name of the template.",
            "example": "Parse JSON Logs",
            "type": "string"
          },
          "organizationId": {
            "description": "Organization ID to which the template belongs. This is null for built-in templates.",
            "example": "org-456",
            "type": "string"
          },
          "outputs": {
            "additionalProperties": {
              "description": "Map of output names used in a parent subgraph that uses a TemplateOperation to their internal connections within the subgraph. Can be missing if there are no outputs from the subgraph",
              "type": "string"
            },
            "default": {},
            "description": "Map of output names used in a parent subgraph that uses a TemplateOperation to their internal connections within the subgraph. Can be missing if there are no outputs from the subgraph",
            "type": "object"
          },
          "sourceHash": {
            "description": "SHA-256 hash of template source and all dependencies (utils, types, build config, package versions). Used to track when template dependencies change and avoid unnecessary updates.",
            "example": "c354755d7b9b669e3111fcdd40a3432386d13a1b5548c2464ca2d73bcf3f70f1",
            "type": "string"
          },
          "teamIds": {
            "default": [],
            "description": "Set of team IDs that can use this template.",
            "example": [
              "team-1",
              "team-2"
            ],
            "items": {
              "description": "Set of team IDs that can use this template.",
              "example": "[\"team-1\",\"team-2\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "template": {
            "description": "A javascript string that generates the JSON for the job subgraph. It will receive as input a User object and the inputs provided via the operation when it is getting resolved into a subgraph.",
            "type": "string"
          },
          "version": {
            "description": "Version of the template.",
            "example": 1,
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "name",
          "template",
          "version"
        ],
        "type": "object",
        "x-type": {
          "type": "job-template"
        }
      },
      "TemplateAndInputs": {
        "description": "Template and inputs for template execution.",
        "properties": {
          "checkValidGreprJobGraph": {
            "default": false,
            "description": "Tries to deserialize the result of the template script to see if it\u0027s a valid Grepr job graph. The API call will fail if the output is invalid.",
            "type": "boolean"
          },
          "input": {
            "$ref": "#/components/schemas/TemplateInput"
          },
          "skipInputValidation": {
            "default": false,
            "description": "When true, the server skips validating the input values against the template\u0027s input schema before running the script. Mirrors the in-process executeTemplateWithoutThrottling path used by some tests and tooling.",
            "type": "boolean"
          },
          "template": {
            "$ref": "#/components/schemas/Template"
          }
        },
        "required": [
          "input",
          "template"
        ],
        "type": "object"
      },
      "TemplateDraftOutput": {
        "description": "Describes an additional output that will be added to the job graph when running a template in draft mode.",
        "properties": {
          "name": {
            "description": "Name of the draft output.",
            "example": "parsedOutput",
            "type": "string"
          },
          "tagKey": {
            "description": "Tag key that will be added to the draft output.",
            "example": "draft",
            "type": "string"
          },
          "tagValue": {
            "description": "Tag value that will be added to the draft output.",
            "example": "true",
            "type": "string"
          }
        },
        "type": "object"
      },
      "TemplateException": {
        "description": "Template exception that can be one of several specific exception types",
        "discriminator": {
          "mapping": {
            "external-trigger-exception": "#/components/schemas/TemplateExternalTriggerException",
            "integration-exception": "#/components/schemas/TemplateIntegrationException",
            "query-action-rule-exception": "#/components/schemas/TemplateQueryActionRuleException",
            "query-exception": "#/components/schemas/TemplateQueryException",
            "trace-sampler-exception": "#/components/schemas/TemplateTraceSamplerException"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/TemplateQueryException"
          },
          {
            "$ref": "#/components/schemas/TemplateQueryActionRuleException"
          },
          {
            "$ref": "#/components/schemas/TemplateExternalTriggerException"
          },
          {
            "$ref": "#/components/schemas/TemplateIntegrationException"
          },
          {
            "$ref": "#/components/schemas/TemplateTraceSamplerException"
          }
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "TemplateExternalTriggerException": {
        "description": "External trigger exception for template inputs with type field",
        "properties": {
          "backfillDataTime": {
            "description": "Time period for backfilling data",
            "example": "PT2H",
            "type": "string"
          },
          "backfillLimit": {
            "description": "Maximum number of logs each backfill this exception starts may replay, at most 500,000. -1 replays every matching log and 0 replays none. When unset, the backfill uses the default.",
            "example": 100000,
            "format": "int32",
            "maximum": 500000,
            "type": "integer"
          },
          "id": {
            "description": "Unique identifier for this exception",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "stopAggregatingDataTime": {
            "description": "Time period to stop aggregating data",
            "example": "PT1H",
            "type": "string"
          },
          "triggerId": {
            "description": "ID of the trigger to invoke",
            "type": "string"
          },
          "variables": {
            "default": [],
            "description": "Variables to extract from events",
            "items": {
              "description": "Variables to extract from events",
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "predicate"
        ],
        "type": "object"
      },
      "TemplateInput": {
        "description": "Input values for instantiating a template.",
        "properties": {
          "draft": {
            "default": false,
            "description": "Whether to enable draft mode for the template. In draft mode, the template will receive an additional \u0027draft\u0027 variable with value \u0027true\u0027. The template should then produce a job graph that includes draft outputs.",
            "example": true,
            "type": "boolean"
          },
          "values": {
            "additionalProperties": {
              "description": "Map of variable names to their values.",
              "example": {
                "pattern": "^foo",
                "threshold": 10
              },
              "type": "object"
            },
            "default": {},
            "description": "Map of variable names to their values.",
            "example": {
              "pattern": "^foo",
              "threshold": 10
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "TemplateIntegrationException": {
        "allOf": [
          {
            "$ref": "#/components/schemas/IntegrationExceptionConfig"
          },
          {
            "properties": {
              "id": {
                "description": "Unique identifier for this exception",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "Integration exception for template inputs with type field",
        "type": "object"
      },
      "TemplateLogSink": {
        "description": "Template log sink configuration",
        "properties": {
          "filter": {
            "$ref": "#/components/schemas/LogsFilter"
          },
          "sink": {
            "$ref": "#/components/schemas/Operation"
          }
        },
        "type": "object"
      },
      "TemplateOperation": {
        "properties": {
          "draftMode": {
            "default": false,
            "description": "Set as a variable in the script scope, this input tells the script to run in \u0027draft\u0027 mode, which should enable additional outputs from various parts of the built pipeline, according to the Template\u0027s defined draft outputs.",
            "type": "boolean"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "templateId": {
            "description": "The ID of the template to use for this operation.",
            "example": "template-12345",
            "type": "string"
          },
          "templateInputs": {
            "additionalProperties": {
              "description": "Inputs to the template. Each entry in the map is added to the scope of the template javascript as a variable and can be accessed directly. In addition to the inputs, a \u0027user\u0027 object is also bound providing information about the current user.",
              "type": "object"
            },
            "default": {},
            "description": "Inputs to the template. Each entry in the map is added to the scope of the template javascript as a variable and can be accessed directly. In addition to the inputs, a \u0027user\u0027 object is also bound providing information about the current user.",
            "type": "object"
          },
          "templateVersion": {
            "description": "The template\u0027s version. Required for a template your organization owns. Built-in templates ignore it and run the version that ships with the pipeline\u0027s Grepr version.",
            "example": 4,
            "format": "int32",
            "type": "integer"
          },
          "type": {
            "description": "Runs a template script to generate a subgraph running in place of the operation in the parent graph.",
            "enum": [
              "template-operation"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "templateId",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Operations"
        ]
      },
      "TemplateQueryActionRuleException": {
        "description": "Query action rule exception for template inputs with type field",
        "properties": {
          "backfillDataTime": {
            "description": "Time period for backfilling data",
            "example": "PT2H",
            "type": "string"
          },
          "backfillLimit": {
            "description": "Maximum number of logs each backfill this exception starts may replay, at most 500,000. -1 replays every matching log and 0 replays none. When unset, the backfill uses the default.",
            "example": 100000,
            "format": "int32",
            "maximum": 500000,
            "type": "integer"
          },
          "id": {
            "description": "Unique identifier for this exception",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "stopAggregatingDataTime": {
            "description": "Time period to stop aggregating data",
            "example": "PT1H",
            "type": "string"
          },
          "triggerId": {
            "description": "ID of the trigger to invoke",
            "type": "string"
          },
          "variables": {
            "default": [],
            "description": "Variables to extract from events",
            "items": {
              "description": "Variables to extract from events",
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "predicate"
        ],
        "type": "object"
      },
      "TemplateQueryException": {
        "description": "Query-based exception for log reducer templates.",
        "properties": {
          "id": {
            "description": "Unique identifier for this exception",
            "type": "string"
          },
          "predicate": {
            "$ref": "#/components/schemas/EventPredicate"
          }
        },
        "required": [
          "predicate"
        ],
        "type": "object"
      },
      "TemplateSqlOperation": {
        "description": "SQL operation with template-specific sqlMode for graph construction.",
        "properties": {
          "sqlFilterPredicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "sqlMode": {
            "default": "else",
            "description": "SQL processing mode that determines how this SQL operation connects to filter operations. \u0027else\u0027 mode processes data that does NOT match the associated filter predicate. \u0027also\u0027 mode processes ALL data in addition to the normal filter flow.",
            "enum": [
              "else",
              "also"
            ],
            "example": "else",
            "type": "string"
          },
          "sqlOperation": {
            "$ref": "#/components/schemas/SqlOperation"
          }
        },
        "required": [
          "sqlOperation"
        ],
        "type": "object"
      },
      "TemplateTraceSamplerException": {
        "description": "Trace sample exception for template inputs with type field",
        "properties": {
          "id": {
            "description": "Unique identifier for this exception",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "sampleDurationMillis": {
            "default": 4000,
            "description": "How long (in milliseconds) a sampled trace ID remains marked for as sampled without new messages before being declared expired. After this duration with no more events for trace, subsequent events for the same trace will be re-evaluated for sampling if seen again.",
            "example": 10000,
            "format": "int64",
            "minimum": 100,
            "title": "Sample Duration (ms)",
            "type": "integer"
          },
          "sampleRate": {
            "description": "The probability (0.0 to 1.0) of sampling a newly seen trace ID.",
            "example": 0.01,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Sample Rate",
            "type": "number"
          },
          "selector": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "traceIdAttributePaths": {
            "default": [],
            "description": "List of attribute paths (each path is a list of segments) to extract trace IDs from. The first non-null value found will be used as the trace ID.",
            "example": [
              [
                "span",
                "traceId"
              ],
              [
                "trace",
                "id"
              ]
            ],
            "items": {
              "description": "List of attribute paths (each path is a list of segments) to extract trace IDs from. The first non-null value found will be used as the trace ID.",
              "example": [
                [
                  "span",
                  "traceId"
                ],
                [
                  "trace",
                  "id"
                ]
              ],
              "items": {
                "description": "List of attribute paths (each path is a list of segments) to extract trace IDs from. The first non-null value found will be used as the trace ID.",
                "example": "[[\"span\",\"traceId\"],[\"trace\",\"id\"]]",
                "title": "Trace ID Attribute Paths",
                "type": "string"
              },
              "title": "Trace ID Attribute Paths",
              "type": "array"
            },
            "title": "Trace ID Attribute Paths",
            "type": "array"
          },
          "traceIdTagKeys": {
            "default": [],
            "description": "List of tag keys to extract trace IDs from. The first non-null value found will be used as the trace ID (checked after attribute paths).",
            "example": [
              "trace_id",
              "traceId"
            ],
            "items": {
              "description": "List of tag keys to extract trace IDs from. The first non-null value found will be used as the trace ID (checked after attribute paths).",
              "example": "[\"trace_id\",\"traceId\"]",
              "title": "Trace ID Tag Keys",
              "type": "string"
            },
            "title": "Trace ID Tag Keys",
            "type": "array"
          },
          "traceSamplerTagKey": {
            "deprecated": true,
            "description": "Deprecated and ignored: the template tags events of sampled traces grepr.skipaggregation: trace-sampled, so the reducer passes them unaggregated.",
            "title": "Sampled Trace Marker Tag Key (Deprecated)",
            "type": "string"
          },
          "traceSamplerTagValue": {
            "deprecated": true,
            "description": "Deprecated and ignored: the template tags events of sampled traces grepr.skipaggregation: trace-sampled, so the reducer passes them unaggregated.",
            "title": "Sampled Trace Marker Tag Value (Deprecated)",
            "type": "string"
          },
          "type": {
            "description": "Trace sampler exception",
            "enum": [
              "trace-sampler-exception"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "sampleRate",
          "type"
        ],
        "type": "object"
      },
      "TemplateTraceSink": {
        "description": "Template trace sink configuration",
        "properties": {
          "sink": {
            "$ref": "#/components/schemas/Operation"
          }
        },
        "type": "object"
      },
      "TimeGranularity": {
        "description": "Time-aggregation window and per-metric agg-fn overrides.",
        "properties": {
          "aggFnOverrides": {
            "additionalProperties": {
              "$ref": "#/components/schemas/AggType"
            },
            "default": {},
            "description": "Per-metric-name overrides for time aggregation.",
            "example": {
              "system.cpu.utilization": "LATEST"
            },
            "type": "object"
          },
          "duration": {
            "default": "PT20S",
            "description": "Time-aggregation window; also the slide interval used by every aggregation.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          }
        },
        "required": [
          "duration"
        ],
        "type": "object"
      },
      "TimePartitionTransform": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PartitionTransform"
          },
          {
            "properties": {
              "partitionBy": {
                "description": "Time granularity of the transform.",
                "enum": [
                  "HOUR",
                  "DAY",
                  "MONTH",
                  "YEAR"
                ],
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "required": [
          "partitionBy"
        ],
        "type": "object"
      },
      "TimeSeriesRuleConfig": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PatternRuleConfig"
          },
          {
            "properties": {
              "enabled": {
                "default": true,
                "type": "boolean"
              },
              "ewmaPeriods": {
                "default": [],
                "items": {
                  "description": "ISO-8601 duration",
                  "maxLength": 2147483647,
                  "minLength": 2,
                  "type": "string"
                },
                "maxItems": 2147483647,
                "minItems": 2,
                "type": "array"
              },
              "originatingLlmPromptOperatorName": {
                "description": "Name of the LLM prompt operator that created this rule. Used to route trigger actions back to the originating prompt.",
                "type": "string"
              },
              "spikeThresholdRatio": {
                "default": 3.0,
                "format": "double",
                "type": "number"
              },
              "triggerPrompt": {
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "Time-series rule that detects spikes by comparing short-term to long-term EWMA.",
        "required": [
          "ewmaPeriods",
          "triggerPrompt"
        ],
        "type": "object"
      },
      "TimestampReadingStrategy": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FileReadingStrategy"
          },
          {
            "properties": {
              "timestamp": {
                "description": "The timestamp after which files will be processed",
                "example": "2023-01-01T00:00:00Z",
                "format": "date-time",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "Strategy to read files created after a specific timestamp",
        "required": [
          "timestamp"
        ],
        "type": "object"
      },
      "Tool": {
        "properties": {
          "calls": {
            "format": "int64",
            "type": "integer"
          },
          "costReportingComplete": {
            "type": "boolean"
          },
          "durationMs": {
            "format": "int64",
            "type": "integer"
          },
          "errors": {
            "format": "int64",
            "type": "integer"
          },
          "operation": {
            "type": "string"
          },
          "reportedCostUsd": {
            "format": "double",
            "type": "number"
          },
          "resultBytes": {
            "format": "int64",
            "type": "integer"
          },
          "sessionsUsing": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ToolDescriptor": {
        "description": "A user-selectable agent tool, surfaced so a UI can offer the set of tools an agent may enable.",
        "properties": {
          "description": {
            "description": "A short, human-readable summary of what the tool does.",
            "type": "string"
          },
          "label": {
            "description": "The tool\u0027s name as people read it, such as \"Query logs\", or null where a catalog has none; left out of the JSON when null.",
            "type": "string"
          },
          "name": {
            "description": "The tool name, matching what the worker registers and validates against an agent\u0027s `enabledTools`.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "Totals": {
        "properties": {
          "analyzedSessions": {
            "format": "int64",
            "type": "integer"
          },
          "cacheReadTokens": {
            "format": "int64",
            "type": "integer"
          },
          "cacheWriteTokens": {
            "format": "int64",
            "type": "integer"
          },
          "costReportingComplete": {
            "type": "boolean"
          },
          "exportedSessions": {
            "format": "int64",
            "type": "integer"
          },
          "inputTokens": {
            "format": "int64",
            "type": "integer"
          },
          "matchingSessions": {
            "format": "int64",
            "type": "integer"
          },
          "miscellaneousSessions": {
            "format": "int64",
            "type": "integer"
          },
          "modelCalls": {
            "format": "int64",
            "type": "integer"
          },
          "namedGroupSessions": {
            "format": "int64",
            "type": "integer"
          },
          "outputTokens": {
            "format": "int64",
            "type": "integer"
          },
          "reasoningTokens": {
            "format": "int64",
            "type": "integer"
          },
          "reportedCostUsd": {
            "format": "double",
            "type": "number"
          },
          "sessionDurationMs": {
            "format": "int64",
            "type": "integer"
          },
          "toolCalls": {
            "format": "int64",
            "type": "integer"
          },
          "toolDurationMs": {
            "format": "int64",
            "type": "integer"
          },
          "toolErrors": {
            "format": "int64",
            "type": "integer"
          },
          "toolResultBytes": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "TraceAction": {
        "description": "Base class for trace actions. Actions execute on traces matching SQL predicates after sampling decisions have been made.",
        "discriminator": {
          "propertyName": "type"
        },
        "properties": {
          "actionId": {
            "description": "Unique identifier for this action within the TraceReducer. Must be alphanumeric with hyphens and underscores only.",
            "example": "backfill-errors",
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "actionId",
          "type"
        ],
        "type": "object"
      },
      "TraceHeadSamplingRule": {
        "deprecated": true,
        "description": "Deprecated. Head sampling rule evaluated per trace. Use traceHeadSamplingRate on TraceReducer instead.",
        "properties": {
          "filter": {
            "$ref": "#/components/schemas/HeadSamplingFilter"
          },
          "rate": {
            "description": "Fraction of matching spans/traces to retain, in [0.0, 1.0].",
            "example": 1.0,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "type": "number"
          }
        },
        "required": [
          "rate"
        ],
        "title": "Trace Head Sampling Rules (Deprecated)",
        "type": "object"
      },
      "TraceIdLogsBackfillAction": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TraceAction"
          },
          {
            "properties": {
              "backfillWindow": {
                "default": "PT5M",
                "description": "Time range to backfill logs for each trace, in ISO-8601 format. Defines the window around each trace\u0027s timestamp to fetch logs from. Must be between 1 minute and 24 hours.",
                "example": "PT20.345S",
                "format": "ISO-8601",
                "type": "string"
              },
              "datasetId": {
                "description": "Dataset ID to backfill logs for. Logs will be backfilled for this dataset using the collected trace IDs.",
                "example": "0kabdv8yo9q99",
                "pattern": "[a-z0-9]{1,13}",
                "type": "string"
              },
              "maxTraceIds": {
                "default": 1000,
                "description": "Maximum number of unique trace IDs to accumulate per window. If this limit is reached, additional traces are dropped until the window closes.",
                "example": 1000,
                "format": "int32",
                "maximum": 50000,
                "minimum": 1,
                "type": "integer"
              },
              "sinkOperations": {
                "default": [],
                "description": "Specifies the sinks that should be used for the backfill job.",
                "items": {
                  "$ref": "#/components/schemas/Operation"
                },
                "maxItems": 2147483647,
                "minItems": 1,
                "type": "array",
                "uniqueItems": true
              },
              "sqlPredicate": {
                "description": "SQL predicate to filter spans that should trigger this action. Can reference any CompleteSpan field (e.g., \u0027hasError \u003d true\u0027, \u0027percentileBucket IN (\"very_slow\", \"slow\")\u0027).",
                "example": "hasError \u003d true",
                "type": "string"
              },
              "traceCollectionDuration": {
                "default": "PT1M30S",
                "description": "Window duration in ISO-8601 format. Traces are accumulated for this duration before the action executes. Must be between 1 minute and 10 minutes.",
                "example": "PT20.345S",
                "format": "ISO-8601",
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "description": "Action that triggers logs backfill for matching traces. Accumulates trace IDs in time-based windows and calls the logs backfill API with the collected trace IDs.",
        "required": [
          "actionId",
          "backfillWindow",
          "datasetId",
          "maxTraceIds",
          "sinkOperations",
          "sqlPredicate",
          "traceCollectionDuration"
        ],
        "type": "object"
      },
      "TraceReducer": {
        "description": "Reduces trace volume by applying a uniform trace head sampling rate and configurable span head sampling rules with optional tail sampling, then emits the retained spans.",
        "properties": {
          "actions": {
            "default": [],
            "description": "Actions to execute on traces. Actions process spans after sampling decisions have been made and can trigger operations like logs backfill.",
            "items": {
              "$ref": "#/components/schemas/TraceAction"
            },
            "type": "array"
          },
          "criticalPathAnalysis": {
            "$ref": "#/components/schemas/CriticalPathAnalysisConfig"
          },
          "datasetId": {
            "description": "Dataset ID used for naming the Iceberg table (traces_raw_{datasetId}). If not provided, traces will not be persisted to Iceberg.",
            "example": "2ABs4Z8QZtSJJCDaGp7KPN",
            "pattern": "[a-z0-9]{1,13}",
            "title": "Iceberg Dataset ID",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "siblingMergeRules": {
            "default": [],
            "description": "Rules that merge same-signature sibling spans matching a predicate, after tail sampling decisions. The earliest-start match is kept with its children; the other matching same-signature siblings are removed and counted under grepr.merged_siblings. Requires tail sampling to be configured.",
            "items": {
              "$ref": "#/components/schemas/SiblingMergeRule"
            },
            "title": "Sibling Merge Rules",
            "type": "array"
          },
          "spanDropRules": {
            "default": [],
            "description": "Rules that drop matching spans and their descendants after tail sampling decisions. Requires tail sampling to be configured.",
            "items": {
              "$ref": "#/components/schemas/SpanDropRule"
            },
            "title": "Span Drop Rules",
            "type": "array"
          },
          "spanHeadSamplingRules": {
            "default": [],
            "description": "Span head sampling rules. Matched spans are retained as SPAN_HEAD_SAMPLED. If tail sampling is configured, matched spans participate in trace assembly before output; otherwise, matched spans are emitted directly. Order is significant; first match wins for metric attribution. Trace head sampling wins when both match the same span.",
            "items": {
              "$ref": "#/components/schemas/SpanHeadSamplingRule"
            },
            "title": "Span Head Sampling Rules",
            "type": "array"
          },
          "tailSampling": {
            "$ref": "#/components/schemas/TailSamplingConfig"
          },
          "traceHeadSamplingRate": {
            "description": "Uniform trace head sampling rate in [0.0, 1.0]. When set, all spans sharing a traceId are retained together as HEAD_SAMPLED at this probability. Mutually exclusive with traceHeadSamplingRules (scalar wins when both present).",
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Trace Head Sampling Rate",
            "type": "number"
          },
          "traceHeadSamplingRules": {
            "default": [],
            "deprecated": true,
            "description": "Deprecated: use traceHeadSamplingRate instead. Kept for backwards compatibility with stored configurations. When traceHeadSamplingRate is absent, the effective rate is max(rate) over this list (filters are ignored).",
            "items": {
              "$ref": "#/components/schemas/TraceHeadSamplingRule"
            },
            "title": "Trace Head Sampling Rules (Deprecated)",
            "type": "array"
          },
          "type": {
            "description": "Reduces trace volume by sampling CompleteSpan instances. Combines a uniform trace head sampling rate (whole-trace retention) and per-span head sampling rules with optional quantile-based tail sampling.",
            "enum": [
              "trace-reducer"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "TraceReducerTemplateInput": {
        "description": "Schema for the trace reducer job graph.",
        "properties": {
          "datasetId": {
            "description": "The unique identifier for the dataset persisted by the trace reducer. When absent, no raw spans will be stored and no dedup sinks will be wired. At least one of `datasetId` or `sinks` must be provided for non-draft pipelines.",
            "pattern": "^[0-9a-z]{13}$",
            "type": "string"
          },
          "reducer": {
            "$ref": "#/components/schemas/TraceReducer"
          },
          "sinks": {
            "description": "A list of template trace sinks, each wrapping a vendor sink operation. When absent, reduced spans will not be forwarded to any vendor. At least one of `sinks` or `datasetId` must be provided for non-draft pipelines.",
            "items": {
              "$ref": "#/components/schemas/TemplateTraceSink"
            },
            "type": "array"
          },
          "sources": {
            "description": "A list of trace sources, each conforming to one of the defined source types.",
            "items": {
              "$ref": "#/components/schemas/Operation"
            },
            "type": "array"
          },
          "sqlOperations": {
            "$ref": "#/components/schemas/TraceSqlOperations"
          }
        },
        "required": [
          "sources"
        ],
        "title": "Inputs Schema",
        "type": "object"
      },
      "TraceSampler": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "sampleDurationMillis": {
            "default": 4000,
            "description": "How long (in milliseconds) a sampled trace ID remains marked for as sampled without new messages before being declared expired. After this duration with no more events for trace, subsequent events for the same trace will be re-evaluated for sampling if seen again.",
            "example": 10000,
            "format": "int64",
            "minimum": 100,
            "title": "Sample Duration (ms)",
            "type": "integer"
          },
          "sampleRate": {
            "description": "The probability (0.0 to 1.0) of sampling a newly seen trace ID.",
            "example": 0.01,
            "exclusiveMaximum": false,
            "exclusiveMinimum": false,
            "format": "double",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Sample Rate",
            "type": "number"
          },
          "selector": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "traceIdAttributePaths": {
            "default": [],
            "description": "List of attribute paths (each path is a list of segments) to extract trace IDs from. The first non-null value found will be used as the trace ID.",
            "example": [
              [
                "span",
                "traceId"
              ],
              [
                "trace",
                "id"
              ]
            ],
            "items": {
              "description": "List of attribute paths (each path is a list of segments) to extract trace IDs from. The first non-null value found will be used as the trace ID.",
              "example": [
                [
                  "span",
                  "traceId"
                ],
                [
                  "trace",
                  "id"
                ]
              ],
              "items": {
                "description": "List of attribute paths (each path is a list of segments) to extract trace IDs from. The first non-null value found will be used as the trace ID.",
                "example": "[[\"span\",\"traceId\"],[\"trace\",\"id\"]]",
                "title": "Trace ID Attribute Paths",
                "type": "string"
              },
              "title": "Trace ID Attribute Paths",
              "type": "array"
            },
            "title": "Trace ID Attribute Paths",
            "type": "array"
          },
          "traceIdTagKeys": {
            "default": [],
            "description": "List of tag keys to extract trace IDs from. The first non-null value found will be used as the trace ID (checked after attribute paths).",
            "example": [
              "trace_id",
              "traceId"
            ],
            "items": {
              "description": "List of tag keys to extract trace IDs from. The first non-null value found will be used as the trace ID (checked after attribute paths).",
              "example": "[\"trace_id\",\"traceId\"]",
              "title": "Trace ID Tag Keys",
              "type": "string"
            },
            "title": "Trace ID Tag Keys",
            "type": "array"
          },
          "traceSamplerTagKey": {
            "default": "grepr.tracesampler",
            "description": "The key for the tag added to events of sampled traces to signal downstream operations differentiated processing.",
            "example": "tracesampler",
            "title": "Sampled Trace Marker Tag Key",
            "type": "string"
          },
          "traceSamplerTagValue": {
            "default": "sampled",
            "description": "The value for the tag added to events of sampled traces to signal downstream operations differentiated processing.",
            "example": "sampled",
            "title": "Sampled Trace Marker Tag Value",
            "type": "string"
          },
          "type": {
            "default": "trace-sampler",
            "description": "Samples traces based on their ID and marks associated events that are part of the selected traces. This can be used to bypass downstream processing such as message reduction, ensuring complete unmodified logs for those selected traces. This operation can add some overhead since it might require an additional shuffle in the pipeline. Messages that have trace IDs will be output on the \"traced\" output, while messages that do not have any trace IDs be output on the \"untraced\" output.",
            "enum": [
              "trace-sampler"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "sampleRate",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "TraceSqlOperations": {
        "description": "SQL operations applied at various stages of trace processing.",
        "properties": {
          "postReducer": {
            "$ref": "#/components/schemas/TemplateSqlOperation"
          },
          "preReducer": {
            "$ref": "#/components/schemas/TemplateSqlOperation"
          }
        },
        "type": "object"
      },
      "TracesIcebergTableSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "hasError": {
            "description": "Filter by error status",
            "example": true,
            "type": "boolean"
          },
          "isRootSpan": {
            "description": "Filter by parent span ID (null for root spans only)",
            "example": true,
            "type": "boolean"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "maxDuration": {
            "description": "Filter by maximum duration in nanoseconds",
            "example": 5000000000,
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          },
          "minDuration": {
            "description": "Filter by minimum duration in nanoseconds",
            "example": 1000000000,
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "operationNames": {
            "default": [],
            "description": "Filter by operation names (exact match)",
            "example": [
              "process-payment",
              "validate-user"
            ],
            "items": {
              "description": "Filter by operation names (exact match)",
              "example": "[\"process-payment\",\"validate-user\"]",
              "type": "string"
            },
            "type": "array"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "serviceNames": {
            "default": [],
            "description": "Filter by service names (exact match)",
            "example": [
              "checkout-service",
              "user-service"
            ],
            "items": {
              "description": "Filter by service names (exact match)",
              "example": "[\"checkout-service\",\"user-service\"]",
              "type": "string"
            },
            "type": "array"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "traceIds": {
            "default": [],
            "description": "Filter by trace IDs (32-character hex format)",
            "example": [
              "6a33267c000000001001119764423b8d"
            ],
            "items": {
              "description": "Filter by trace IDs (32-character hex format)",
              "example": "[\"6a33267c000000001001119764423b8d\"]",
              "type": "string"
            },
            "type": "array"
          },
          "traceSignatureIds": {
            "default": [],
            "description": "Filter by trace signature ids (exact match)",
            "example": [
              "3f2a9c1b7d4e5061829304a5b6c7d8e9",
              "a1b2c3d4e5f60718293a4b5c6d7e8f90"
            ],
            "items": {
              "description": "Filter by trace signature ids (exact match)",
              "example": "[\"3f2a9c1b7d4e5061829304a5b6c7d8e9\",\"a1b2c3d4e5f60718293a4b5c6d7e8f90\"]",
              "type": "string"
            },
            "type": "array"
          },
          "traceSignatures": {
            "default": [],
            "description": "Filter by trace signature text (supports wildcards with *)",
            "example": [
              "user-login-*",
              "checkout-*"
            ],
            "items": {
              "description": "Filter by trace signature text (supports wildcards with *)",
              "example": "[\"user-login-*\",\"checkout-*\"]",
              "type": "string"
            },
            "type": "array"
          },
          "type": {
            "description": "Reads traces out of an Iceberg Table for processing.",
            "enum": [
              "traces-iceberg-table-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "TranscriptMessage": {
        "properties": {
          "durationNanos": {
            "format": "int64",
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "role": {
            "enum": [
              "SYSTEM",
              "TRIGGER_SIGNAL",
              "USER",
              "ASSISTANT",
              "TOOL_RESULT",
              "KNOWN_ISSUES"
            ],
            "type": "string"
          },
          "startedAt": {
            "format": "date-time",
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "timestamp": {
            "format": "date-time",
            "type": "string"
          },
          "toolCallId": {
            "type": "string"
          },
          "toolCalls": {
            "items": {
              "$ref": "#/components/schemas/TranscriptToolCall"
            },
            "type": "array"
          },
          "toolName": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "TranscriptToolCall": {
        "properties": {
          "argumentsJson": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "TranscriptTurn": {
        "properties": {
          "messages": {
            "items": {
              "$ref": "#/components/schemas/TranscriptMessage"
            },
            "type": "array"
          },
          "seq": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "TranscriptTurnsList": {
        "properties": {
          "hasMore": {
            "type": "boolean"
          },
          "turns": {
            "items": {
              "$ref": "#/components/schemas/TranscriptTurn"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "Transforms": {
        "description": "Per-stage tree-shape chains applied during log processing.",
        "properties": {
          "preExceptions": {
            "$ref": "#/components/schemas/ChainNode"
          },
          "preParser": {
            "$ref": "#/components/schemas/ChainNode"
          },
          "preWarehouse": {
            "$ref": "#/components/schemas/ChainNode"
          }
        },
        "type": "object"
      },
      "TransitionIssueRequest": {
        "description": "Moves an issue to another state, checked against the state machine.",
        "properties": {
          "comment": {
            "description": "A comment posted with the transition, in the same transaction; required, with new evidence, when an agent reopens a `NOT_A_PROBLEM` issue.",
            "maxLength": 16384,
            "minLength": 0,
            "type": "string"
          },
          "duplicateOf": {
            "description": "The surviving issue\u0027s id or number; required exactly when `resolution` is `DUPLICATE`.",
            "type": "string"
          },
          "evidence": {
            "description": "Evidence added to the issue with the transition.",
            "items": {
              "$ref": "#/components/schemas/IssueEvidence"
            },
            "maxItems": 50,
            "minItems": 0,
            "type": "array"
          },
          "force": {
            "description": "Lets a person move to Monitoring or Closed while assignees are still active; people only.",
            "type": "boolean"
          },
          "guidance": {
            "description": "Makes `comment` a guidance comment, which agents weigh; people only, so closing as `IGNORED` with guidance is one call.",
            "type": "boolean"
          },
          "resolution": {
            "description": "Why it closes; required when `to` is `CLOSED`, absent otherwise.",
            "enum": [
              "FIXED",
              "DUPLICATE",
              "NOT_A_PROBLEM",
              "IGNORED",
              "OBSOLETE",
              "EXPIRED"
            ],
            "type": "string"
          },
          "to": {
            "description": "The target state. Moving an open issue to the state it is already in changes no state but still applies `comment` and `evidence`; it rejects `resolution`, `duplicateOf` and `force`, which need a state change.",
            "enum": [
              "TRIAGE",
              "READY",
              "IN_PROGRESS",
              "WAITING",
              "MONITORING",
              "CLOSED"
            ],
            "type": "string"
          },
          "version": {
            "description": "The version the transition was decided against, or null to apply it to whatever is current.",
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "to"
        ],
        "type": "object"
      },
      "Trigger": {
        "description": "Base class of all Triggers",
        "discriminator": {
          "mapping": {
            "event-predicate": "#/components/schemas/EventPredicateTrigger",
            "external-source": "#/components/schemas/ExternalSourceTrigger"
          },
          "propertyName": "type"
        },
        "example": "{\n  \"trigger-1\": {\n    \"type\": \"event-predicate\",\n    \"predicate\": {\n      \"type\": \"datadog-query\",\n      \"query\": \"service:grepr-service-1\"\n    },\n    \"conditionIds\": [\"condition-1\"],\n    \"duration\": \"PT1H\"\n  },\n}",
        "oneOf": [
          {
            "$ref": "#/components/schemas/EventPredicateTrigger"
          },
          {
            "$ref": "#/components/schemas/ExternalSourceTrigger"
          }
        ],
        "properties": {
          "conditionIds": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "duration": {
            "description": "How long the conditions this trigger activates stay active. A condition expires at the trigger\u0027s time plus this duration. For an event-predicate trigger, that time is the processing time at which it matches an event. For an external-source trigger, it\u0027s the notification\u0027s timestamp. A firing that carries the same variables, with the same values, as the firing that started an active condition doesn\u0027t start another one, whatever its __timestamp: the active condition keeps the later of the two expiries, and its job actions don\u0027t run again. An event-predicate trigger adds __severity to each firing from a log event, so a firing from an event of another severity starts another condition, which runs the job actions again. The rule engine applies a condition\u0027s event actions only to events whose timestamp is before the expiry. Once processing time passes a condition\u0027s expiry, a cleanup retires it. The cleanup runs while the rule engine handles events and notifications, at most once a second, so until it runs, a late event stamped before the expiry still gets the condition\u0027s event actions. A retired condition applies to no event, whatever its timestamp, and the trigger firing after that starts a new condition, which runs its job actions again.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          }
        },
        "required": [
          "conditionIds",
          "duration"
        ],
        "type": "object"
      },
      "TriggerActionOp": {
        "properties": {
          "capacity": {
            "default": 50,
            "description": "Maximum number of concurrent trigger handler calls.",
            "example": 50,
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "timeoutSeconds": {
            "default": 60,
            "description": "Timeout for trigger handler execution in seconds.",
            "example": 60,
            "format": "int32",
            "type": "integer"
          },
          "type": {
            "description": "Dispatches trigger actions to rule-type-specific handlers.",
            "enum": [
              "trigger-action"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Transforms"
        ]
      },
      "TriggerSignal": {
        "properties": {
          "source": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "TrinoAnalyticsSource": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/AnalyticsQuery"
          },
          "scanBudgetBytes": {
            "default": 107374182400,
            "description": "Maximum number of bytes this query may process.",
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "tables": {
            "description": "Dataset tables available to the query under logical aliases.",
            "items": {
              "$ref": "#/components/schemas/AnalyticsTableBinding"
            },
            "maxItems": 2147483647,
            "minItems": 1,
            "type": "array"
          },
          "type": {
            "description": "Executes an analytical query using a Trino query engine.",
            "enum": [
              "trino-analytics-source"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "query",
          "tables",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "TrinoRawLogsSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads raw log events out of an Iceberg Table without pattern enrichment, executed against a Trino query engine.",
            "enum": [
              "trino-raw-log-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "TrinoRawSpanSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads spans using Grepr\u0027s internal query system out of an Iceberg Table for processing, executed against a Trino query engine.",
            "enum": [
              "trino-raw-span-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "TrinoReducerLogSource": {
        "properties": {
          "datasetId": {
            "description": "The ID of the dataset to read data from.",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "end": {
            "description": "End of time interval to query data for.",
            "example": "2023-01-01T01:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "limit": {
            "default": 2500,
            "description": "The maximum number of rows to process",
            "format": "int32",
            "type": "integer"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "offset": {
            "default": 0,
            "description": "Offset on the number of rows to process",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "processedLogsTableName": {
            "description": "The name of the table containing processed logs.",
            "example": "\"processed_logs\"",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/query"
          },
          "reductionInterval": {
            "default": "PT2M",
            "description": "The interval used by the Log Reducer for the query. Uses ISO 8601 format for intervals.",
            "example": "PT20.345S",
            "format": "ISO-8601",
            "type": "string"
          },
          "sortOrder": {
            "default": "ASCENDING",
            "description": "The order in which the rows should be sorted by",
            "enum": [
              "ASCENDING",
              "DESCENDING",
              "UNSORTED"
            ],
            "type": "string"
          },
          "start": {
            "description": "Start of time interval to query data for.",
            "example": "2023-01-01T00:00:00Z",
            "format": "date-time",
            "type": "string"
          },
          "type": {
            "description": "Reads events using Grepr\u0027s internal query system out of an Iceberg Table for processing, executed against a Trino query engine.",
            "enum": [
              "trino-reducer-log-source"
            ],
            "type": "string"
          },
          "variables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/Any"
            },
            "default": {},
            "description": "Variables that can be used to modify the query while parsed",
            "example": {
              "__application": "app1",
              "__service": "service1"
            },
            "type": "object"
          }
        },
        "required": [
          "datasetId",
          "end",
          "name",
          "query",
          "reductionInterval",
          "start",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sources"
        ]
      },
      "TypeInformationAny": {
        "properties": {
          "arity": {
            "format": "int32",
            "type": "integer"
          },
          "basicType": {
            "type": "boolean"
          },
          "genericParameters": {
            "additionalProperties": {
              "$ref": "#/components/schemas/TypeInformationObject"
            },
            "type": "object"
          },
          "keyType": {
            "type": "boolean"
          },
          "sortKeyType": {
            "type": "boolean"
          },
          "totalFields": {
            "format": "int32",
            "type": "integer"
          },
          "tupleType": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "TypeInformationObject": {
        "properties": {
          "arity": {
            "format": "int32",
            "type": "integer"
          },
          "basicType": {
            "type": "boolean"
          },
          "keyType": {
            "type": "boolean"
          },
          "sortKeyType": {
            "type": "boolean"
          },
          "totalFields": {
            "format": "int32",
            "type": "integer"
          },
          "tupleType": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "UnparseableException": {
        "description": "Exceptions whose query could not be parsed at import and so cannot be counted, each with the parse error",
        "properties": {
          "exceptionId": {
            "description": "Composite exception id",
            "example": "0q841q0j81m2q:mon-123:DATADOG_MONITOR",
            "type": "string"
          },
          "message": {
            "description": "The parse error recorded when the exception was imported",
            "example": "unbalanced parenthesis at position 14",
            "type": "string"
          }
        },
        "required": [
          "exceptionId",
          "message"
        ],
        "type": "object"
      },
      "Update": {
        "properties": {
          "name": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "UpdateIssueRequest": {
        "description": "A partial update. An absent field is left unchanged, a present one is set, and an optional field named in `clear` is emptied. State, resolution and `duplicateOf` change only through transitions.",
        "properties": {
          "clear": {
            "description": "Optional fields to empty.",
            "items": {
              "description": "Optional fields to empty.",
              "enum": [
                "NEXT_STEP",
                "REVISIT_AT",
                "EXPIRES_AT",
                "EVIDENCE",
                "LINKS",
                "LABELS",
                "FINGERPRINT"
              ],
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "confidence": {
            "description": "A new confidence.",
            "enum": [
              "CONFIRMED",
              "LIKELY",
              "UNVERIFIED"
            ],
            "type": "string"
          },
          "description": {
            "description": "A new description, replacing the old one.",
            "maxLength": 32768,
            "minLength": 0,
            "type": "string"
          },
          "entities": {
            "additionalProperties": {
              "description": "New entity tags, replacing the old ones; a person\u0027s change locks them.",
              "type": "string"
            },
            "description": "New entity tags, replacing the old ones; a person\u0027s change locks them.",
            "type": "object"
          },
          "evidence": {
            "description": "New evidence, replacing the old list.",
            "items": {
              "$ref": "#/components/schemas/IssueEvidence"
            },
            "maxItems": 50,
            "minItems": 0,
            "type": "array"
          },
          "expiresAt": {
            "description": "A new expiry.",
            "format": "date-time",
            "type": "string"
          },
          "fingerprint": {
            "description": "A new fingerprint.",
            "maxLength": 256,
            "minLength": 0,
            "type": "string"
          },
          "labels": {
            "description": "New labels, replacing the old list; a person\u0027s additions and removals lock those labels.",
            "items": {
              "description": "New labels, replacing the old list; a person\u0027s additions and removals lock those labels.",
              "type": "string"
            },
            "maxItems": 20,
            "minItems": 0,
            "type": "array"
          },
          "links": {
            "description": "New links, replacing the old list.",
            "items": {
              "$ref": "#/components/schemas/IssueLink"
            },
            "maxItems": 50,
            "minItems": 0,
            "type": "array"
          },
          "nextStep": {
            "description": "A new next step.",
            "maxLength": 4096,
            "minLength": 0,
            "type": "string"
          },
          "priority": {
            "description": "A new priority; a person\u0027s change locks it against agents.",
            "enum": [
              "P0",
              "P1",
              "P2",
              "P3"
            ],
            "type": "string"
          },
          "revisitAt": {
            "description": "A new revisit time.",
            "format": "date-time",
            "type": "string"
          },
          "teamIds": {
            "description": "New teams; people only, adding or removing only teams they can edit issues of.",
            "items": {
              "description": "New teams; people only, adding or removing only teams they can edit issues of.",
              "type": "string"
            },
            "maxItems": 50,
            "minItems": 0,
            "type": "array"
          },
          "title": {
            "description": "A new title.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "version": {
            "description": "The version the change was made against; a stale one is rejected with 409 and the current issue.",
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "version"
        ],
        "type": "object"
      },
      "UpdateJob": {
        "description": "Attributes of the Grepr Job to update",
        "properties": {
          "desiredState": {
            "description": "Desired state of the job",
            "enum": [
              "CREATED",
              "PENDING",
              "INFRA_UPDATE",
              "INFRA_UPDATE_WAIT",
              "VERIFYING",
              "WAITING",
              "RUNNING",
              "STOPPED",
              "FINISHED",
              "FAILED",
              "CANCELLED",
              "DELETED",
              "UPDATING",
              "STARTING",
              "RESTARTING",
              "STOPPING",
              "ROLLING_BACK",
              "DELETING"
            ],
            "example": "RUNNING",
            "type": "string"
          },
          "fromVersion": {
            "description": "Version of the job being updated, should be set to the current version of the job. If the current version of the job does not match this value, a 409 Conflict is returned.",
            "example": 0,
            "format": "int64",
            "type": "integer"
          },
          "jobGraph": {
            "$ref": "#/components/schemas/GreprJobGraph"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this job is associated with.",
            "items": {
              "description": "The team IDs that this job is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "desiredState",
          "fromVersion",
          "jobGraph"
        ],
        "type": "object"
      },
      "UpdateRole": {
        "properties": {
          "description": {
            "description": "Description of the role",
            "maxLength": 500,
            "minLength": 0,
            "type": "string"
          },
          "name": {
            "description": "The name of the role",
            "maxLength": 50,
            "minLength": 3,
            "type": "string"
          },
          "permissionIds": {
            "default": [],
            "description": "Permission IDs to assign to this role",
            "example": [
              "perm_001",
              "perm_002"
            ],
            "items": {
              "description": "Permission IDs to assign to this role",
              "example": "[\"perm_001\",\"perm_002\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "description",
          "name",
          "permissionIds"
        ],
        "type": "object"
      },
      "UpdateServiceAccount": {
        "description": "Request to update a service account",
        "properties": {
          "name": {
            "description": "Display name for the service account",
            "example": "Production API Access",
            "type": "string"
          },
          "roleIds": {
            "default": [],
            "description": "List of role IDs to assign to the service account",
            "example": [
              "rol_AlphaNum1234",
              "rol_alphaNum5678"
            ],
            "items": {
              "description": "List of role IDs to assign to the service account",
              "example": "[\"rol_AlphaNum1234\",\"rol_alphaNum5678\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "name",
          "roleIds"
        ],
        "type": "object"
      },
      "UpdateSkillRequest": {
        "properties": {
          "displayName": {
            "maxLength": 120,
            "minLength": 0,
            "type": "string"
          },
          "expectedRevision": {
            "format": "int64",
            "minimum": 1,
            "type": "integer"
          },
          "files": {
            "items": {
              "$ref": "#/components/schemas/SkillFile"
            },
            "maxItems": 25,
            "minItems": 1,
            "type": "array"
          },
          "toolIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "displayName",
          "files",
          "toolIds"
        ],
        "type": "object"
      },
      "UsageStatus": {
        "description": "The outcome of the last attempt to read the integration\u0027s usage",
        "properties": {
          "collectedAt": {
            "description": "When usage was last read successfully. The usage returned is as of this time; absent when it was never read.",
            "example": "2026-09-27T18:45:03Z",
            "format": "date-time",
            "type": "string"
          },
          "detail": {
            "description": "Why the last attempt failed, in words fit to show. Absent when it worked.",
            "example": "the application key needs the dashboards_read permission",
            "type": "string"
          },
          "state": {
            "description": "Whether the usage of the integration\u0027s parsed queries could be read",
            "enum": [
              "OK",
              "PENDING",
              "PERMISSION_DENIED",
              "NO_VIEWS",
              "ERROR"
            ],
            "type": "string"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "UserInfo": {
        "description": "Base class for the information of a user signing up.",
        "discriminator": {
          "mapping": {
            "DATABASE": "#/components/schemas/DatabaseUserInfo",
            "SOCIAL": "#/components/schemas/SocialUserInfo"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/DatabaseUserInfo"
          },
          {
            "$ref": "#/components/schemas/SocialUserInfo"
          }
        ],
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "UserPermissionsResponse": {
        "properties": {
          "permissions": {
            "default": [],
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "UserProvisionInfo": {
        "properties": {
          "invitationTicketId": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "UsersListInfos": {
        "properties": {
          "limit": {
            "format": "int32",
            "type": "integer"
          },
          "members": {
            "$ref": "#/components/schemas/ItemsCollectionReadUser"
          },
          "start": {
            "format": "int32",
            "type": "integer"
          },
          "total": {
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "UsersUpdate": {
        "properties": {
          "leaderUserIds": {
            "default": [],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "memberUserIds": {
            "default": [],
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "leaderUserIds",
          "memberUserIds"
        ],
        "type": "object"
      },
      "Variant": {
        "properties": {
          "array": {
            "type": "boolean"
          },
          "arraySize": {
            "format": "int32",
            "type": "integer"
          },
          "as": {
            "type": "object"
          },
          "boolean": {
            "type": "boolean"
          },
          "byte": {
            "format": "byte",
            "type": "string"
          },
          "bytes": {
            "format": "byte",
            "type": "string"
          },
          "date": {
            "format": "date",
            "type": "string"
          },
          "dateTime": {
            "format": "date-time",
            "type": "string"
          },
          "decimal": {
            "type": "number"
          },
          "double": {
            "format": "double",
            "type": "number"
          },
          "emptyObject": {
            "type": "boolean"
          },
          "fieldNames": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "float": {
            "format": "float",
            "type": "number"
          },
          "instant": {
            "format": "date-time",
            "type": "string"
          },
          "int": {
            "format": "int32",
            "type": "integer"
          },
          "long": {
            "format": "int64",
            "type": "integer"
          },
          "null": {
            "type": "boolean"
          },
          "object": {
            "type": "boolean"
          },
          "primitive": {
            "type": "boolean"
          },
          "short": {
            "format": "int32",
            "type": "integer"
          },
          "string": {
            "type": "string"
          },
          "type": {
            "enum": [
              "OBJECT",
              "ARRAY",
              "NULL",
              "BOOLEAN",
              "TINYINT",
              "SMALLINT",
              "INT",
              "BIGINT",
              "FLOAT",
              "DOUBLE",
              "DECIMAL",
              "STRING",
              "DATE",
              "TIMESTAMP",
              "TIMESTAMP_LTZ",
              "BYTES"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "VariantEvent": {
        "description": "Represents arbitrary structured query result data.",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Variant"
          },
          "eventTimestamp": {
            "description": "When the event happened, in milliseconds since the epoch.",
            "format": "int64",
            "type": "integer"
          },
          "receivedTimestamp": {
            "description": "When the event was received, in milliseconds since the epoch.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "data",
          "eventTimestamp",
          "receivedTimestamp"
        ],
        "type": "object"
      },
      "VariantSynchronousSink": {
        "properties": {
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Sink for returning arbitrary JSON results to the caller.",
            "enum": [
              "variant-sync-sink"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "VectorData": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Data"
          },
          {
            "properties": {
              "result": {
                "items": {
                  "$ref": "#/components/schemas/VectorResult"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        ],
        "type": "object"
      },
      "VectorResult": {
        "properties": {
          "metric": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "value": {
            "items": {
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "VendorEstimate": {
        "description": "What a run says about one exception. The type field selects the variant.",
        "discriminator": {
          "mapping": {
            "COUNTED": "#/components/schemas/VendorEstimateCounted",
            "ERROR": "#/components/schemas/VendorEstimateError",
            "PENDING": "#/components/schemas/VendorEstimatePending",
            "UNPARSEABLE": "#/components/schemas/VendorEstimateUnparseable"
          },
          "propertyName": "type"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/VendorEstimateCounted"
          },
          {
            "$ref": "#/components/schemas/VendorEstimatePending"
          },
          {
            "$ref": "#/components/schemas/VendorEstimateUnparseable"
          },
          {
            "$ref": "#/components/schemas/VendorEstimateError"
          }
        ],
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "VendorEstimateCounted": {
        "description": "The vendor counted this query over the run\u0027s scope and window.",
        "properties": {
          "impactPercentage": {
            "description": "Share of the scope\u0027s indexed logs this query matched, as a percentage of the run\u0027s scope total",
            "example": 6.2,
            "format": "double",
            "type": "number"
          },
          "matchedCount": {
            "description": "Events the query matched over the run\u0027s window",
            "example": 12874,
            "format": "int64",
            "type": "integer"
          },
          "type": {
            "enum": [
              "COUNTED"
            ],
            "type": "string"
          }
        },
        "required": [
          "impactPercentage",
          "matchedCount",
          "type"
        ],
        "type": "object"
      },
      "VendorEstimateError": {
        "description": "The count was attempted for this exception and failed.",
        "properties": {
          "message": {
            "description": "The vendor\u0027s rejection, or the failure the call ended on",
            "example": "query is too complex",
            "type": "string"
          },
          "type": {
            "enum": [
              "ERROR"
            ],
            "type": "string"
          }
        },
        "required": [
          "message",
          "type"
        ],
        "type": "object"
      },
      "VendorEstimatePending": {
        "description": "This exception is in the run but has not been counted yet.",
        "properties": {
          "type": {
            "enum": [
              "PENDING"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "VendorEstimateUnparseable": {
        "description": "The exception\u0027s query could not be parsed, so it was never counted.",
        "properties": {
          "message": {
            "description": "The parse error recorded when the exception was imported",
            "example": "unbalanced parenthesis at position 14",
            "type": "string"
          },
          "type": {
            "enum": [
              "UNPARSEABLE"
            ],
            "type": "string"
          }
        },
        "required": [
          "message",
          "type"
        ],
        "type": "object"
      },
      "VendorEstimationRun": {
        "properties": {
          "createdAt": {
            "description": "When the run was created",
            "format": "date-time",
            "type": "string"
          },
          "failureReason": {
            "description": "Why a FAILED run failed",
            "type": "string"
          },
          "id": {
            "description": "Run id",
            "example": "0q841q0j81m2q",
            "type": "string"
          },
          "integrationId": {
            "description": "Integration whose imported exceptions this run estimates",
            "example": "0q841q0j81m2q",
            "type": "string"
          },
          "predicatesDone": {
            "description": "Predicates that have reached a non-pending status",
            "format": "int32",
            "type": "integer"
          },
          "predicatesTotal": {
            "description": "Distinct predicates in the run, fixed at creation",
            "format": "int32",
            "type": "integer"
          },
          "requestedBy": {
            "description": "Id of the user who started the run",
            "example": "user-1",
            "type": "string"
          },
          "resumeAfter": {
            "description": "When a THROTTLED run will be counted again",
            "format": "date-time",
            "type": "string"
          },
          "scopeQuery": {
            "description": "Vendor query limiting the estimate to part of the customer\u0027s traffic, applied to both the matched count and the total. Empty means all logs.",
            "example": "service:broker-* AND env:prod",
            "type": "string"
          },
          "scopeTotalCount": {
            "description": "Total events the scope matched over the window, the denominator",
            "format": "int64",
            "type": "integer"
          },
          "state": {
            "description": "Current run state",
            "enum": [
              "QUEUED",
              "RUNNING",
              "THROTTLED",
              "STOPPED",
              "COMPLETE",
              "FAILED"
            ],
            "type": "string"
          },
          "stopReason": {
            "description": "Why a STOPPED run stopped: USER or TIMED_OUT",
            "type": "string"
          },
          "updatedAt": {
            "description": "When the run was last written to",
            "format": "date-time",
            "type": "string"
          },
          "vendor": {
            "description": "Vendor whose index the counts were made against",
            "enum": [
              "DATADOG"
            ],
            "type": "string"
          },
          "windowEnd": {
            "description": "Absolute end of the counted window, resolved at creation",
            "format": "date-time",
            "type": "string"
          },
          "windowStart": {
            "description": "Absolute start of the counted window, resolved at creation",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "createdAt",
          "id",
          "integrationId",
          "predicatesDone",
          "predicatesTotal",
          "scopeQuery",
          "state",
          "updatedAt",
          "vendor",
          "windowEnd",
          "windowStart"
        ],
        "type": "object"
      },
      "VendorEstimationRunPreview": {
        "properties": {
          "distinctQueries": {
            "description": "Distinct countable predicates among those exceptions, and so the number of vendor calls the run would make. Smaller than the exception count wherever several exceptions carry the same query.",
            "format": "int32",
            "type": "integer"
          },
          "exceptions": {
            "description": "Exceptions the run would cover: every one the integration has imported",
            "format": "int32",
            "type": "integer"
          },
          "unparseable": {
            "description": "Exceptions whose query could not be parsed at import and so cannot be counted, each with the parse error",
            "items": {
              "$ref": "#/components/schemas/UnparseableException"
            },
            "type": "array"
          }
        },
        "required": [
          "distinctQueries",
          "exceptions",
          "unparseable"
        ],
        "type": "object"
      },
      "VendorImportedException": {
        "description": "Exception that was imported from a vendor integration like Datadog, Splunk etc.",
        "properties": {
          "accountGroup": {
            "description": "Account group hash identifying the vendor account",
            "example": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
            "readOnly": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "eventPredicate": {
            "$ref": "#/components/schemas/EventPredicate"
          },
          "eventPredicateHash": {
            "description": "Hash of the event predicate for deduplication",
            "example": "d4c3b2a1f6e5d4c3b2a1f6e5d4c3b2a1",
            "readOnly": true,
            "type": "string"
          },
          "exceptionType": {
            "enum": [
              "DATADOG_MONITOR",
              "DATADOG_DASHBOARD",
              "DATADOG_LOG_BASED_METRICS",
              "SPLUNK_MONITOR",
              "NEW_RELIC_MONITOR",
              "NEW_RELIC_DASHBOARD"
            ],
            "type": "string"
          },
          "integrationId": {
            "type": "string"
          },
          "parseResult": {
            "$ref": "#/components/schemas/ParseResult"
          },
          "sourceUri": {
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "vendorResourceId": {
            "type": "string"
          },
          "vendorResourceName": {
            "type": "string"
          }
        },
        "readOnly": true,
        "required": [
          "vendorResourceId"
        ],
        "type": "object"
      },
      "VendorLogEventDedupIcebergTableSink": {
        "properties": {
          "datasetId": {
            "description": "The id of the dataset to write to",
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          },
          "name": {
            "example": "operation_name",
            "pattern": "[a-z0-9_]{1,128}",
            "type": "string"
          },
          "type": {
            "description": "Writes confirmed-delivered event IDs to an Iceberg table to keep track of which events have actually been sent to a particular sink.",
            "enum": [
              "vendorlog-event-dedup-iceberg-table-sink"
            ],
            "type": "string"
          },
          "vendorSinkId": {
            "pattern": "[a-z0-9]{1,13}",
            "type": "string"
          }
        },
        "required": [
          "datasetId",
          "name",
          "type",
          "vendorSinkId"
        ],
        "type": "object",
        "x-tags": [
          "Sinks"
        ]
      },
      "WebhookAgentSubscription": {
        "properties": {
          "agentId": {
            "type": "string"
          }
        },
        "required": [
          "agentId"
        ],
        "type": "object"
      },
      "WebhookIntegration": {
        "description": "The payload containing integration data.",
        "properties": {
          "agentSubscriptions": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/WebhookAgentSubscription"
            },
            "type": "array"
          },
          "schemaDescription": {
            "maxLength": 16384,
            "minLength": 0,
            "type": "string"
          },
          "systemType": {
            "type": "string"
          }
        },
        "required": [
          "agentSubscriptions",
          "schemaDescription",
          "systemType"
        ],
        "type": "object",
        "x-type": {
          "type": "webhook"
        }
      },
      "WindowBasedLogarithmicSampling": {
        "properties": {
          "logarithmBase": {
            "default": 2,
            "description": "Logarithm base used by sampling algorithm",
            "format": "int32",
            "type": "integer"
          },
          "type": {
            "description": "A logarithmic sampler that reduces the log volume per reduction window",
            "enum": [
              "window-based-logarithmic-sampling"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "WriteAnthropic": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Anthropic"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "anthropic"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteDataWarehouse": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/DataWarehouse"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "data-warehouse"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteDatadog": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Datadog"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "datadog"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteDatadogMcp": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/DatadogMcp"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "datadog-mcp"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteGemini": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Gemini"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "gemini"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteGithubMcp": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/GithubMcp"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "github-mcp"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteGreprPipe": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/GreprPipe"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "grepr-pipe"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteJiraMcp": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/JiraMcp"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "jira-mcp"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteLiteLlm": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/LiteLlm"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "litellm"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteNewRelic": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/NewRelic"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "newrelic"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteOpenAi": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/OpenAi"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "openai"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteOtlp": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Otlp"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "otlp"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WritePagerDutyMcp": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/PagerDutyMcp"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "pagerduty-mcp"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteS3DataWarehouse": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/S3DataWarehouse"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "s3-data-warehouse"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteS3VectorIndex": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/S3VectorIndex"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "s3-vector-index"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteSlackMcp": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/SlackMcp"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "slack-mcp"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteSplunk": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Splunk"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "splunk"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteSsoClaimMapping": {
        "properties": {
          "claimKey": {
            "maxLength": 255,
            "minLength": 0,
            "type": "string"
          },
          "claimValue": {
            "maxLength": 512,
            "minLength": 0,
            "type": "string"
          },
          "roleIds": {
            "default": [],
            "items": {
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "teamAssignments": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/TeamAssignment"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "claimKey",
          "claimValue",
          "roleIds",
          "teamAssignments"
        ],
        "type": "object"
      },
      "WriteSumo": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/Sumo"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "sumo"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "WriteUser": {
        "properties": {
          "email": {
            "description": "The email associated with the user.",
            "type": "string"
          },
          "name": {
            "description": "The name of the user.",
            "type": "string"
          },
          "roleIds": {
            "description": "The roles associated with this user.",
            "example": [
              "rol_AlphaNum1234",
              "rol_alphaNum5678"
            ],
            "items": {
              "description": "The roles associated with this user.",
              "example": "[\"rol_AlphaNum1234\",\"rol_alphaNum5678\"]",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "roleIds"
        ],
        "type": "object"
      },
      "WriteWebhookIntegration": {
        "properties": {
          "name": {
            "description": "Name of the integration.",
            "example": "my_integration",
            "pattern": "[a-zA-Z0-9 _-]{1,128}",
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/WebhookIntegration"
          },
          "teamIds": {
            "default": [],
            "description": "The team IDs that this integration is associated with.",
            "items": {
              "description": "The team IDs that this integration is associated with.",
              "type": "string"
            },
            "type": "array",
            "uniqueItems": true
          },
          "type": {
            "description": "The type of the integration. This is used to determine the payload type.",
            "enum": [
              "webhook"
            ],
            "type": "string"
          },
          "version": {
            "description": "Version of the integration. Should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
            "example": 0,
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "name",
          "payload",
          "type",
          "version"
        ],
        "type": "object"
      },
      "backfillQuery": {
        "description": "The query to use for the backfill. This scopes the data that will be backfilled into the sink. It can also refer to variables generated by a trigger. Variables use __ (a double underscore) at the beginning and they are specified as part of the trigger description.",
        "discriminator": {
          "mapping": {
            "and-predicate": "#/components/schemas/AndEventPredicate",
            "datadog-query": "#/components/schemas/DatadogQueryPredicate",
            "metric-predicate": "#/components/schemas/MetricEventPredicate",
            "newrelic-query": "#/components/schemas/NewRelicQueryPredicate",
            "nrql-query": "#/components/schemas/NrqlQueryPredicate"
          },
          "propertyName": "type"
        },
        "example": {
          "query": "service:__server",
          "type": "datadog-query"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AndEventPredicate"
          },
          {
            "$ref": "#/components/schemas/DatadogQueryPredicate"
          },
          {
            "$ref": "#/components/schemas/MetricEventPredicate"
          },
          {
            "$ref": "#/components/schemas/NewRelicQueryPredicate"
          },
          {
            "$ref": "#/components/schemas/NrqlQueryPredicate"
          }
        ],
        "properties": {
          "query": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "query": {
        "description": "A query predicate that will be used to filter rows",
        "discriminator": {
          "mapping": {
            "and-predicate": "#/components/schemas/AndEventPredicate",
            "datadog-query": "#/components/schemas/DatadogQueryPredicate",
            "metric-predicate": "#/components/schemas/MetricEventPredicate",
            "newrelic-query": "#/components/schemas/NewRelicQueryPredicate",
            "nrql-query": "#/components/schemas/NrqlQueryPredicate"
          },
          "propertyName": "type"
        },
        "example": {
          "query": "some words"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AndEventPredicate"
          },
          {
            "$ref": "#/components/schemas/DatadogQueryPredicate"
          },
          {
            "$ref": "#/components/schemas/MetricEventPredicate"
          },
          {
            "$ref": "#/components/schemas/NewRelicQueryPredicate"
          },
          {
            "$ref": "#/components/schemas/NrqlQueryPredicate"
          }
        ],
        "properties": {
          "query": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "grepr-api-key": {
        "in": "header",
        "name": "GREPR-API-KEY",
        "type": "apiKey"
      },
      "grepr-oidc": {
        "bearerFormat": "JWT",
        "openIdConnectUrl": "https://grepr-prod.us.auth0.com/.well-known/openid-configuration",
        "type": "openIdConnect"
      }
    }
  },
  "info": {
    "description": "Grepr API",
    "title": "Grepr API",
    "version": "1.0.0"
  },
  "openapi": "3.0.1",
  "paths": {
    "/v1/activity-logs/search": {
      "post": {
        "description": "Search activity logs with flexible filtering and pagination. Logs are returned as LogEvent objects with metadata stored in attributes and tags. Full-text search is supported on the message field using PostgreSQL\u0027s text search capabilities. All list filters are optional - null or empty lists mean \u0027match all\u0027 for that field.",
        "operationId": "searchActivityLogs",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityLogsSearch"
              }
            }
          },
          "description": "Search criteria for activity logs",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionLogEvent"
                }
              }
            },
            "description": "activity logs retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Search activity logs",
        "tags": [
          "Activity Logs"
        ]
      }
    },
    "/v1/agent-memory": {
      "get": {
        "operationId": "list_5",
        "parameters": [
          {
            "in": "query",
            "name": "tag",
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "in": "query",
            "name": "agentId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "significance",
            "schema": {
              "items": {
                "enum": [
                  "INCIDENT",
                  "OBSERVATION",
                  "INCONCLUSIVE",
                  "BENIGN"
                ],
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "in": "query",
            "name": "verdict",
            "schema": {
              "enum": [
                "WRONG",
                "NONE"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 25,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "after",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemoryListResponse"
                }
              }
            },
            "description": "One page of memories"
          }
        },
        "summary": "List this organization\u0027s investigation memories, most recently seen first, filtered by tags (key\u003dvalue, ANDed), agent, significance, verdict or text. Pass nextCursor back as after for the next page.",
        "tags": [
          "Agent Memory"
        ]
      }
    },
    "/v1/agent-memory/search": {
      "post": {
        "operationId": "search",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MemorySearchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemorySearchResponse"
                }
              }
            },
            "description": "Search results"
          }
        },
        "summary": "Search past investigation memories for the closest CANDIDATES — for the agent to judge for itself, not a ranked answer",
        "tags": [
          "Agent Memory"
        ]
      }
    },
    "/v1/agent-memory/tags": {
      "get": {
        "operationId": "tags",
        "parameters": [
          {
            "in": "query",
            "name": "agentId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "key",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemoryTagCounts"
                }
              }
            },
            "description": "The counts"
          }
        },
        "summary": "Count the tag keys in use in this organization\u0027s memories, or one key\u0027s values when key is given. Pass agentId to count only that agent\u0027s memories.",
        "tags": [
          "Agent Memory"
        ]
      }
    },
    "/v1/agent-memory/{investigationId}/link/{memoryId}": {
      "post": {
        "operationId": "link",
        "parameters": [
          {
            "in": "path",
            "name": "investigationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "memoryId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkMemoryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkMemoryResponse"
                }
              }
            },
            "description": "The link was applied"
          }
        },
        "summary": "Record that this investigation is another occurrence of a memory you already found, instead of recording a second copy of it. Counts a recurrence against that memory and fills in anything it was missing, unless a person edited it: then it takes none of the request\u0027s text and textMerged is false. A memory a person marked wrong refuses a new link with 409; only a retried link from an investigation it already counts is accepted, taking no text. The memory must belong to the same agent.",
        "tags": [
          "Agent Memory"
        ]
      }
    },
    "/v1/agent-memory/{investigationId}/record": {
      "post": {
        "operationId": "record",
        "parameters": [
          {
            "in": "path",
            "name": "investigationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecordMemoryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordMemoryResponse"
                }
              }
            },
            "description": "The recorded memory\u0027s id and a nearest-neighbour hint"
          }
        },
        "summary": "Record what this investigation concluded. Writes only this investigation\u0027s own memory, and may be called again to correct or extend it — a field you leave out keeps what was already recorded, so a later call cannot lose an earlier finding.",
        "tags": [
          "Agent Memory"
        ]
      }
    },
    "/v1/agent-memory/{memoryId}": {
      "delete": {
        "operationId": "delete_3",
        "parameters": [
          {
            "in": "path",
            "name": "memoryId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted"
          }
        },
        "summary": "Delete a memory and the recurrence links pointing at it. The linked investigations keep their transcripts.",
        "tags": [
          "Agent Memory"
        ]
      },
      "get": {
        "operationId": "get_5",
        "parameters": [
          {
            "in": "path",
            "name": "memoryId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemoryDetail"
                }
              }
            },
            "description": "The memory and its recurrences"
          }
        },
        "summary": "Read one memory in full by its id (its investigation id), with the investigations linked to it as recurrences",
        "tags": [
          "Agent Memory"
        ]
      },
      "put": {
        "operationId": "edit",
        "parameters": [
          {
            "in": "path",
            "name": "memoryId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HumanMemoryEdit"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Edited"
          }
        },
        "summary": "Edit a memory as a person. Every editable field is replaced; tags derived from the triggering signal are kept. Refused with 409 if the memory changed since expectedRevision. An edit that changes nothing writes nothing.",
        "tags": [
          "Agent Memory"
        ]
      }
    },
    "/v1/agent-memory/{memoryId}/verdict": {
      "delete": {
        "operationId": "clearVerdict",
        "parameters": [
          {
            "in": "path",
            "name": "memoryId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Verdict lifted"
          }
        },
        "summary": "Lift a person\u0027s verdict that a memory is wrong.",
        "tags": [
          "Agent Memory"
        ]
      },
      "put": {
        "operationId": "setVerdict",
        "parameters": [
          {
            "in": "path",
            "name": "memoryId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MemoryVerdictRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Marked wrong"
          }
        },
        "summary": "Mark a memory\u0027s conclusion wrong. Agents that find it are told a person rejected it, with this note.",
        "tags": [
          "Agent Memory"
        ]
      }
    },
    "/v1/agent-session-analytics/jobs": {
      "get": {
        "operationId": "list",
        "parameters": [
          {
            "in": "query",
            "name": "datasetId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "format": "int32",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSessionAnalyticsPage"
                }
              }
            },
            "description": "Analytics runs retrieved"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Agent Session Analytics"
        ]
      },
      "post": {
        "operationId": "create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAgentSessionAnalyticsJob"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSessionAnalyticsJob"
                }
              }
            },
            "description": "Analytics run created"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Agent Session Analytics"
        ]
      }
    },
    "/v1/agent-session-analytics/jobs/{jobId}": {
      "delete": {
        "operationId": "delete",
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Analytics run cancelled"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Agent Session Analytics"
        ]
      },
      "get": {
        "operationId": "get",
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSessionAnalyticsJob"
                }
              }
            },
            "description": "Analytics run retrieved"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Agent Session Analytics"
        ]
      }
    },
    "/v1/agent-session-analytics/jobs/{jobId}/download": {
      "get": {
        "operationId": "download",
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSessionAnalyticsDownload"
                }
              }
            },
            "description": "Analytics CSV download retrieved"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Agent Session Analytics"
        ]
      }
    },
    "/v1/agent-suggestions": {
      "get": {
        "description": "Returns the organization\u0027s agent suggestions, newest first, optionally filtered by pipeline, review status, and proposing agent.",
        "operationId": "list_2",
        "parameters": [
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "enum": [
                "PENDING",
                "APPLIED",
                "REJECTED"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "agentId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "maximum": 21474836,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 25,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSuggestionsList"
                }
              }
            },
            "description": "Suggestions retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List agent suggestions",
        "tags": [
          "Agent Suggestions"
        ]
      }
    },
    "/v1/agent-suggestions/{id}": {
      "get": {
        "description": "Returns one agent suggestion, including the template-inputs patch, the job version it was proposed against, and the sample events it was verified with.",
        "operationId": "get_2",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSuggestion"
                }
              }
            },
            "description": "Suggestion retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Suggestion not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get an agent suggestion",
        "tags": [
          "Agent Suggestions"
        ]
      }
    },
    "/v1/agent-suggestions/{id}/apply": {
      "post": {
        "description": "Re-verifies the suggestion\u0027s template-inputs patch against the pipeline\u0027s current version and applies it as a new job version, marking the suggestion APPLIED. The resolution is compare-and-set on the pending status: a reviewer who loses a race to another gets 409 rather than overwriting it. Findings mean the pipeline changed since the suggestion was recorded; nothing is applied and the suggestion stays PENDING. Applying restarts the pipeline from a savepoint.",
        "operationId": "apply",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSuggestionApplyResult"
                }
              }
            },
            "description": "Suggestion applied, or rejected by verification with findings"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Suggestion not found"
          },
          "409": {
            "description": "Suggestion is no longer pending"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Apply a pending agent suggestion",
        "tags": [
          "Agent Suggestions"
        ]
      }
    },
    "/v1/agent-suggestions/{id}/reject": {
      "post": {
        "description": "Marks a pending suggestion REJECTED, recording the reviewer. Returns 409 when the suggestion was already resolved by another reviewer.",
        "operationId": "reject",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSuggestion"
                }
              }
            },
            "description": "Suggestion rejected successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Suggestion not found"
          },
          "409": {
            "description": "Suggestion is no longer pending"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Reject a pending agent suggestion",
        "tags": [
          "Agent Suggestions"
        ]
      }
    },
    "/v1/agents": {
      "get": {
        "description": "Returns every agent configured for your organization, newest first.",
        "operationId": "list_3",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AgentSummary"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Agents retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List agents",
        "tags": [
          "Agents"
        ]
      },
      "post": {
        "description": "Creates an agent with the given model configuration, tools and prompt.",
        "operationId": "create_2",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentConfigCreate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentConfig"
                }
              }
            },
            "description": "Agent created successfully"
          },
          "400": {
            "description": "A referenced model or MCP integration does not exist"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create an agent",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/mcp-integrations/{integrationId}/tools": {
      "get": {
        "description": "Returns the tools the MCP server publishes, so an agent\u0027s allowed-tools list can name them exactly. Read live from the server with the integration\u0027s credentials, and cached briefly.",
        "operationId": "mcpIntegrationTools",
        "parameters": [
          {
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "refresh",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/McpToolDescriptor"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Tools retrieved successfully"
          },
          "400": {
            "description": "The integration is not an MCP server, or has no stored credential to list with"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "No MCP integration with that id"
          },
          "502": {
            "description": "The MCP server could not be reached, or refused the request"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List an MCP integration\u0027s tools",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/roster": {
      "get": {
        "description": "Returns every agent configured for your organization, projected to its id, name, description and pickup filters: enough to decide whose recorded memory is worth searching, or how to put an issue in Ready so an agent picks it up.",
        "operationId": "roster",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AgentRosterEntry"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Roster retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List the agent roster",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/tools": {
      "get": {
        "description": "Returns the catalog of tools that can be enabled on an agent.",
        "operationId": "tools",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ToolDescriptor"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Tools retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List available agent tools",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}": {
      "delete": {
        "description": "Soft-deletes an agent. Returns 409 while the agent is still subscribed to any pipeline; unsubscribe it first.",
        "operationId": "delete_2",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Agent deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "description": "Agent is still subscribed to one or more pipelines"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete an agent",
        "tags": [
          "Agents"
        ]
      },
      "get": {
        "description": "Returns a single agent by id.",
        "operationId": "get_3",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentDetail"
                }
              }
            },
            "description": "Agent retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get an agent",
        "tags": [
          "Agents"
        ]
      },
      "put": {
        "description": "Updates an agent. The version must match the version the client most recently observed, else a 409 Conflict is returned.",
        "operationId": "update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentConfigUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentConfig"
                }
              }
            },
            "description": "Agent updated successfully"
          },
          "400": {
            "description": "A referenced model or MCP integration does not exist"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found"
          },
          "409": {
            "description": "Agent was modified concurrently"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update an agent",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/investigations": {
      "get": {
        "description": "Returns the investigations the agent has run, newest first.",
        "operationId": "investigations",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "maximum": 21474836,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 25,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Investigation statuses to include, e.g. QUEUED, RUNNING, COMPLETED; repeat for multiple. Absent or empty for all statuses.",
            "in": "query",
            "name": "statuses",
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Whether the investigation has recorded actions; absent for either",
            "in": "query",
            "name": "hasActions",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Triggers to include; repeat for multiple. Absent for all. ISSUE is a run started on an issue, handed by a person or picked up from the board; MANUAL is then a Run now only.",
            "in": "query",
            "name": "triggers",
            "schema": {
              "items": {
                "enum": [
                  "MANUAL",
                  "ISSUE",
                  "WEBHOOK_SIGNAL",
                  "LOG_PATTERN_SIGNAL",
                  "PIPELINE_SIGNAL"
                ],
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvestigationsList"
                }
              }
            },
            "description": "Investigations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List an agent\u0027s investigations",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/investigations/cancel-all": {
      "post": {
        "description": "Marks every queued, running, and paused investigation of the agent as CANCELLING in one request. Cancellation is completed asynchronously. With pause\u003dtrue, the agent is paused in the same transaction so it starts no new investigations.",
        "operationId": "cancelAllAgentInvestigations",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Also pause the agent",
            "in": "query",
            "name": "pause",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelAllInvestigationsResponse"
                }
              }
            },
            "description": "Cancellation requests recorded"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Cancel every active investigation of an agent",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/investigations/cancellable-counts": {
      "get": {
        "description": "Returns how many of the agent\u0027s investigations are queued, running, or paused, and so would be cancelled by cancel-all, and whether the caller is authorized to call cancel-all for the agent.",
        "operationId": "countCancellableAgentInvestigations",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancellableInvestigationsResponse"
                }
              }
            },
            "description": "Counts retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Count an agent\u0027s active investigations",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/issue-reach": {
      "get": {
        "description": "Returns whose issues the agent reads, and whose it can be handed, pick up and change: every issue in your organization or those of some teams, from its service account\u0027s issue scopes.",
        "operationId": "issueReach",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentIssueScopes"
                }
              }
            },
            "description": "Issue reach retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get the issues an agent reads and works on",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/max-tokens-status": {
      "get": {
        "description": "Returns whether a new investigation could start for the agent right now, the max-tokens limit blocking it when not, and when the current max-tokens window resets.",
        "operationId": "maxTokensStatus",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentMaxTokensStatus"
                }
              }
            },
            "description": "Max-tokens status retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get an agent\u0027s max-tokens admission status",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/pipelines/{jobId}": {
      "delete": {
        "description": "Unsubscribes the agent from the pipeline\u0027s pattern signals. The running pipeline drops the subscriber automatically, without a restart.",
        "operationId": "unsubscribe",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Subscription removed (or was not present)"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Unsubscribe an agent from a pipeline",
        "tags": [
          "Agents"
        ]
      },
      "post": {
        "description": "Subscribes the agent to the pipeline\u0027s pattern signals. Requires the pipeline to have new-pattern signal emission enabled on its reducer or pattern matcher. The running pipeline picks up the subscriber automatically, without a restart.",
        "operationId": "subscribe",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Subscription created (or already present)"
          },
          "400": {
            "description": "The pipeline has no reducer or pattern matcher, so it can never emit"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent or pipeline not found"
          },
          "409": {
            "description": "The pipeline is not enabled to emit pattern signals"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Subscribe an agent to a pipeline",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/pipelines/{jobId}/state": {
      "put": {
        "description": "Sets one subscription to PAUSED or ACTIVE. While paused, new signals from the pipeline are dropped for this agent, and the pipeline keeps marking new patterns as sent. Investigations already queued still run. The running pipeline is not restarted.",
        "operationId": "setPipelineState",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StateChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "State set (or already set)"
          },
          "400": {
            "description": "The state is not ACTIVE or PAUSED"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found, or not subscribed to the pipeline"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Pause or resume an agent\u0027s pipeline subscription",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/state": {
      "put": {
        "description": "Sets the agent to PAUSED or ACTIVE. A paused agent runs no investigations: signals from every source are dropped, manual starts and resumes are refused, and queued investigations wait until the agent is resumed, except those on an issue, which are discarded so other agents can take the issue. Pipelines keep marking new patterns as sent, so after resuming, the agent usually reacts only to patterns that are new since then.",
        "operationId": "setState",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StateChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "State set (or already set)"
          },
          "400": {
            "description": "The state is not ACTIVE or PAUSED"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Agent not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Pause or resume an agent",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/agents/{id}/subscriptions": {
      "get": {
        "description": "Returns the agent\u0027s pipeline subscriptions, including when each was paused.",
        "operationId": "subscriptions",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AgentPipelineSubscription"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Subscriptions retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List an agent\u0027s subscriptions",
        "tags": [
          "Agents"
        ]
      }
    },
    "/v1/anomalies/{jobId}/{ruleEngineName}": {
      "get": {
        "operationId": "getAnomaliesForJobRuleEngineAndTriggers",
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "ruleEngineName",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "triggerIds",
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/JobAnomaly"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Anomalies retrieved successfully"
          },
          "400": {
            "description": "Invalid request parameters"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Job not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Job Anomalies"
        ]
      }
    },
    "/v1/apikey": {
      "delete": {
        "operationId": "deleteGreprApiKey",
        "responses": {
          "204": {
            "description": "API key deleted successfully"
          },
          "401": {
            "description": "API key is invalid"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Delete a Grepr API Key",
        "tags": [
          "Grepr API Key"
        ]
      },
      "get": {
        "operationId": "getGreprApiKey",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GreprApiKey"
                }
              }
            },
            "description": "API key retrieved successfully"
          },
          "401": {
            "description": "API key is invalid"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Get a Grepr API Key",
        "tags": [
          "Grepr API Key"
        ]
      },
      "post": {
        "operationId": "createGreprApiKey",
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GreprApiKey"
                }
              }
            },
            "description": "API key created successfully"
          },
          "401": {
            "description": "API key is invalid"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Create a Grepr API Key",
        "tags": [
          "Grepr API Key"
        ]
      }
    },
    "/v1/billing/daily-table": {
      "get": {
        "description": "Returns the daily-usage table for the requested reporting period.",
        "operationId": "getDailyTable",
        "parameters": [
          {
            "description": "Canonical period id (\"YYYY-MM-DD\", the period\u0027s start date) for both monthly and annual plans. Defaults to the period containing today when omitted.",
            "in": "query",
            "name": "period",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyTable"
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/DailyTable"
                }
              }
            },
            "description": "Daily-usage table."
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "500": {
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get daily-usage table (JSON or CSV)",
        "tags": [
          "Billing"
        ]
      }
    },
    "/v1/billing/periods": {
      "get": {
        "description": "Returns the customer display name plus reporting periods available for the authenticated user\u0027s organization. Returns 404 when no billing record exists for the customer or no eligible subscription has any closed orders.",
        "operationId": "getPeriods",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingPeriodsResponse"
                }
              }
            },
            "description": "Customer name + period list."
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "500": {
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get reporting periods + customer display name",
        "tags": [
          "Billing"
        ]
      }
    },
    "/v1/billing/summary": {
      "get": {
        "description": "Returns the per-period payload — contract bounds, reporting-period descriptor, and plan-specific commitment summary — for the authenticated user\u0027s organization. When no period is supplied, defaults to the period containing today.",
        "operationId": "getSummary",
        "parameters": [
          {
            "description": "Canonical period id (\"YYYY-MM-DD\", the period\u0027s start date) for both monthly and annual plans. Defaults to the period containing today when omitted.",
            "in": "query",
            "name": "period",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingSummaryResponse"
                }
              }
            },
            "description": "Contract + reporting period + plan summary."
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "No billing record exists, no eligible subscription owns the requested period, or the subscription\u0027s plan template is unrecognized."
          },
          "500": {
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get billing summary for one reporting period",
        "tags": [
          "Billing"
        ]
      }
    },
    "/v1/chat-preferences": {
      "get": {
        "description": "Returns the defaults new chats start with for this user. A field the user has never set is null, which the client reads as \"use the default\" rather than \"empty\".",
        "operationId": "get_1",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatPreferences"
                }
              }
            },
            "description": "Preferences retrieved"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "summary": "Get the caller\u0027s chat preferences",
        "tags": [
          "Chats"
        ]
      },
      "put": {
        "description": "Replaces the defaults new chats start with for this user. Storing an empty skill list is a deliberate choice to start with none, and is kept as such.",
        "operationId": "set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatPreferences"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Preferences stored"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "summary": "Set the caller\u0027s chat preferences",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chat-preferences/action-categories": {
      "get": {
        "description": "Returns the kinds of change the caller\u0027s chats make without asking. A chat asks about every other change before making it, and never asks about reads.",
        "operationId": "getActionGrants",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatActionGrants"
                }
              }
            },
            "description": "Grants retrieved"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "summary": "Get the caller\u0027s chat action grants",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chat-preferences/action-categories/{category}": {
      "delete": {
        "description": "Makes the caller\u0027s chats ask before this kind of change again. Revoking a category not granted changes nothing.",
        "operationId": "revokeActionCategory",
        "parameters": [
          {
            "in": "path",
            "name": "category",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ChatActionCategory"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Category revoked"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "summary": "Revoke a chat action category",
        "tags": [
          "Chats"
        ]
      },
      "put": {
        "description": "Lets the caller\u0027s chats make this kind of change without asking, from their next one on. Granting a category already granted changes nothing.",
        "operationId": "grantActionCategory",
        "parameters": [
          {
            "in": "path",
            "name": "category",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ChatActionCategory"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Category granted"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "summary": "Grant a chat action category",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chats": {
      "get": {
        "description": "Returns one page of the authenticated user\u0027s chats within their org, most-recently-updated first. Metadata only (id, title, timestamps); turn content is read per-chat. Page backwards with the response\u0027s nextCursor.",
        "operationId": "list_1",
        "parameters": [
          {
            "description": "Opaque cursor from a previous page\u0027s nextCursor; omit for the first page.",
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Requested page size (1–100); defaults to 20.",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 20,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatList"
                }
              }
            },
            "description": "Chats retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List the user\u0027s chats",
        "tags": [
          "Chats"
        ]
      },
      "post": {
        "description": "Creates a chat, starts its workflow, and submits the first message. Returns the new chat id; the turn runs asynchronously.",
        "operationId": "create_1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateChatRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateChatResponse"
                }
              }
            },
            "description": "Chat created"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a chat",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chats/{chatId}": {
      "delete": {
        "description": "Soft-deletes the chat: it stops being listed and is reported as not found, while its row and journal are retained. Cancels any in-flight turn and tears down the sandbox. Idempotent. Returns 202 immediately.",
        "operationId": "delete_1",
        "parameters": [
          {
            "in": "path",
            "name": "chatId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Delete accepted"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Chat not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a chat",
        "tags": [
          "Chats"
        ]
      },
      "get": {
        "description": "Returns the chat\u0027s status (mirrored from the backing workflow\u0027s Temporal status) and its current turn index. Polled while the chat runs.",
        "operationId": "status",
        "parameters": [
          {
            "in": "path",
            "name": "chatId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatStatusResponse"
                }
              }
            },
            "description": "Status retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Chat not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get chat metadata",
        "tags": [
          "Chats"
        ]
      },
      "put": {
        "description": "Signals the chat\u0027s workflow with a new user message. Returns 202 immediately.",
        "operationId": "append",
        "parameters": [
          {
            "in": "path",
            "name": "chatId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppendMessageRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Message accepted"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Chat not found"
          },
          "409": {
            "description": "Chat is no longer running"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Append a message to a chat",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chats/{chatId}/cancel": {
      "post": {
        "description": "Signals the chat\u0027s workflow to abort the current turn and finish as CANCELLED.",
        "operationId": "cancel",
        "parameters": [
          {
            "in": "path",
            "name": "chatId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Cancel requested"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Chat not found"
          },
          "409": {
            "description": "Chat is already finished"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Cancel a chat",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chats/{chatId}/permissions/{permissionId}": {
      "post": {
        "description": "Signals the chat\u0027s workflow with the user\u0027s decision on the write it is waiting on, resuming the turn. Returns 202 immediately. To stop being asked about such writes, grant their categories under /v1/chat-preferences/action-categories.",
        "operationId": "respondToPermission",
        "parameters": [
          {
            "in": "path",
            "name": "chatId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "permissionId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PermissionReplyRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Decision accepted"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Chat not found"
          },
          "409": {
            "description": "Chat is no longer running"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Reply to a chat\u0027s pending approval",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chats/{chatId}/stop": {
      "post": {
        "description": "Signals the chat\u0027s workflow to abort the current turn but stay alive, parked for the next message. Returns 202 immediately.",
        "operationId": "stop",
        "parameters": [
          {
            "in": "path",
            "name": "chatId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Stop requested"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Chat not found"
          },
          "409": {
            "description": "Chat is no longer running"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Stop a chat\u0027s in-flight turn",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chats/{chatId}/title": {
      "put": {
        "description": "Replaces the chat\u0027s display title with a user-chosen one, clamped to the same length as a derived title. Does not reorder the chat list. Returns 202 immediately.",
        "operationId": "rename",
        "parameters": [
          {
            "in": "path",
            "name": "chatId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenameChatRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Chat renamed"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Chat not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Rename a chat",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/chats/{chatId}/turns": {
      "get": {
        "description": "Returns journalled turns after the given sequence, oldest first.",
        "operationId": "turns",
        "parameters": [
          {
            "in": "path",
            "name": "chatId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "afterSeq",
            "schema": {
              "default": -1,
              "format": "int32",
              "minimum": -1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 50,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TranscriptTurnsList"
                }
              }
            },
            "description": "Turns retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Chat not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Stream a chat\u0027s turns by sequence cursor",
        "tags": [
          "Chats"
        ]
      }
    },
    "/v1/datasets": {
      "get": {
        "description": "Get all datasets for the org the user belongs to.",
        "operationId": "getAllDatasets",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/DatasetRead"
                  },
                  "type": "array"
                }
              }
            },
            "description": "The list of datasets."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get all datasets",
        "tags": [
          "Datasets"
        ]
      },
      "post": {
        "description": "Create a new dataset.",
        "operationId": "createDataset",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetCreate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetRead"
                }
              }
            },
            "description": "The created dataset."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a new dataset",
        "tags": [
          "Datasets"
        ]
      }
    },
    "/v1/datasets/{id}": {
      "delete": {
        "description": "Delete the dataset.",
        "operationId": "deleteDataset",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The dataset was deleted."
          },
          "404": {
            "description": "Dataset not found."
          },
          "409": {
            "description": "Dataset has jobs associated with it."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a dataset",
        "tags": [
          "Datasets"
        ]
      },
      "get": {
        "description": "Get a dataset by its ID.",
        "operationId": "getDatasetById",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetRead"
                }
              }
            },
            "description": "The list of datasets."
          },
          "404": {
            "description": "Dataset not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get dataset by ID",
        "tags": [
          "Datasets"
        ]
      },
      "put": {
        "description": "Update a dataset. Currently, only the name is updated.",
        "operationId": "updateDataset",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetRead"
                }
              }
            },
            "description": "The updated dataset."
          },
          "404": {
            "description": "Dataset not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a dataset",
        "tags": [
          "Datasets"
        ]
      }
    },
    "/v1/datasets/{id}/estimation-config": {
      "delete": {
        "description": "Deletes the impact-estimation configuration for the dataset. Existing estimation rows for the dataset remain dormant until a new configuration is created.",
        "operationId": "deleteDatasetEstimationConfig",
        "parameters": [
          {
            "description": "Dataset ID to delete configuration for",
            "example": "logs-prod",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Configuration deleted successfully"
          },
          "404": {
            "description": "No configuration found for this dataset."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete dataset impact estimation configuration",
        "tags": [
          "Datasets"
        ]
      },
      "get": {
        "description": "Returns the impact-estimation configuration for the dataset, or null when the dataset is not opted in for estimation. The presence of a configuration is the per-dataset opt-in for impact estimation.",
        "operationId": "getDatasetEstimationConfig",
        "parameters": [
          {
            "description": "Dataset ID to get configuration for",
            "example": "logs-prod",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetEstimationConfig"
                }
              }
            },
            "description": "Configuration retrieved, or null if the dataset is not opted in"
          },
          "404": {
            "description": "Dataset not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get dataset impact estimation configuration",
        "tags": [
          "Datasets"
        ]
      },
      "put": {
        "description": "Creates or replaces the impact-estimation configuration for the dataset. Replacing the configuration takes effect on the next estimation cycle.",
        "operationId": "upsertDatasetEstimationConfig",
        "parameters": [
          {
            "description": "Dataset ID to create/update configuration for",
            "example": "logs-prod",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetEstimationConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetEstimationConfig"
                }
              }
            },
            "description": "Configuration created or updated successfully"
          },
          "400": {
            "description": "Invalid configuration data."
          },
          "404": {
            "description": "Dataset not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create or update dataset impact estimation configuration",
        "tags": [
          "Datasets"
        ]
      }
    },
    "/v1/datasets/{id}/tables/{tableKey}/column-metrics": {
      "get": {
        "description": "Returns whether the table\u0027s default column statistics mode is Grepr\u0027s, truncate(16), which collects min/max values and null counts on every column of its data files that has no per-column mode, indexed columns past the first 100 included, so searches can skip files on them. Off by default: the table then has Iceberg\u0027s inferred statistics on its first 100 columns, unless mode reports a default set outside Grepr. spans_raw keeps them on its built-in span fields either way. Supported for logs_raw and spans_raw.",
        "operationId": "getTableColumnMetrics",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tableKey",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TableColumnMetrics"
                }
              }
            },
            "description": "The table\u0027s setting."
          },
          "404": {
            "description": "Dataset not found, or the table has no such setting."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a dataset table\u0027s file-statistics setting",
        "tags": [
          "Datasets"
        ]
      },
      "put": {
        "description": "Turns Grepr\u0027s default column statistics mode on or off for the table. On sets the table\u0027s write.metadata.metrics.default to truncate(16), replacing any other default; off removes it when it holds that value, and leaves a value set outside Grepr alone. Per-column modes are never changed. On costs about 18 bytes of table metadata per indexed column for each data file. Pipelines writing the dataset apply a change to new files by their next restart, and possibly sooner; files already written keep their statistics. Supported for logs_raw and spans_raw.",
        "operationId": "putTableColumnMetrics",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tableKey",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableColumnMetricsUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TableColumnMetrics"
                }
              }
            },
            "description": "The table\u0027s setting after the change."
          },
          "404": {
            "description": "Dataset not found, or the table has no such setting."
          },
          "409": {
            "description": "The table kept changing under the request, which running writers can cause; retry."
          },
          "422": {
            "description": "The body is missing, or has no enabled field."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Set a dataset table\u0027s file-statistics setting",
        "tags": [
          "Datasets"
        ]
      }
    },
    "/v1/datasets/{id}/tables/{tableKey}/promotion": {
      "put": {
        "description": "Validates and stores the complete promotion policy on the table. Newly included tag columns, and the columns of exact attribute includes the attribute cap has room for, are added synchronously before the request returns, in the same commit as the policy. Send back the revision the policy was read at to be refused rather than overwrite a change made since; omit it to replace whatever is stored.",
        "operationId": "putTablePromotion",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tableKey",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PromotionPolicy"
              }
            }
          },
          "description": "The complete promotion policy document. It is decoded by the same strict codec that reads the stored policy: every field is typed exactly, no unknown field is accepted at any depth, and no value is coerced. It replaces the stored policy rather than patching it, and both groups are required -- a body that omits \"tags\" or \"attributes\" is rejected, not read as a request to stop discovery for that group. The cap is the switch: send a group with \"cap\": 0 to stop it promoting fields it has not seen before, which for attributes includes the paths it includes. That does not blank the group -- the columns the table already carries keep being written. A field is stopped by naming it in that group\u0027s exclude list, or, for attributes, by setting \"excludeAllByDefault\", which stops every path the include list does not cover. Read the current policy and send it back whole, changing only what you mean to change.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PromotionPolicy"
                }
              }
            },
            "description": "The persisted promotion policy."
          },
          "400": {
            "description": "Invalid promotion policy."
          },
          "404": {
            "description": "Dataset or table not found."
          },
          "409": {
            "description": "The policy changed since the revision the request was made against; read it again and reapply the change. Or the table kept changing under the request, which a running writer\u0027s own evolution can cause; retry."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Replace a dataset table promotion policy",
        "tags": [
          "Datasets"
        ]
      }
    },
    "/v1/datasets/{id}/{tableKey}/config": {
      "delete": {
        "description": "Removes the user override and reverts the table to defaults. Idempotent.",
        "operationId": "deleteTableConfig",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tableKey",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Override removed (or never set)."
          },
          "400": {
            "description": "Unsupported table key."
          },
          "404": {
            "description": "Dataset not found."
          },
          "409": {
            "description": "Dataset has linked jobs; stop them before changing config."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Remove a dataset table config",
        "tags": [
          "Datasets"
        ]
      },
      "get": {
        "description": "Returns the configuration for one of the dataset\u0027s tables (e.g. logs_raw), including the system-controlled effective partition spec. Without an override, the spec\u0027s editable rows are the table\u0027s defaults.",
        "operationId": "getTableConfig",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tableKey",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TableConfigRead"
                }
              }
            },
            "description": "The table config, with effectiveSpec always populated."
          },
          "400": {
            "description": "Unsupported table key."
          },
          "404": {
            "description": "Dataset not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a dataset table config",
        "tags": [
          "Datasets"
        ]
      },
      "put": {
        "description": "Replaces the configuration override for one of the dataset\u0027s tables. Applies the resulting schema and partition-spec changes to the live Iceberg table. 409 if any pipeline currently references the dataset.",
        "operationId": "putTableConfig",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tableKey",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TableConfigRead"
                }
              }
            },
            "description": "The persisted table config."
          },
          "400": {
            "description": "Invalid config or unsupported key."
          },
          "404": {
            "description": "Dataset not found."
          },
          "409": {
            "description": "Dataset has linked jobs; stop them before changing config."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Replace a dataset table config",
        "tags": [
          "Datasets"
        ]
      }
    },
    "/v1/files/upload/presigned-url": {
      "post": {
        "description": "Generates a presigned URL that allows the client to upload a file directly. The file will be automatically deleted after 24 hours.",
        "operationId": "generatePresignedUrl",
        "parameters": [
          {
            "in": "query",
            "name": "fileSizeBytes",
            "required": true,
            "schema": {
              "format": "int64",
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "File format. Valid values: json, plaintext",
            "in": "query",
            "name": "format",
            "required": true,
            "schema": {
              "enum": [
                "json",
                "plaintext"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresignedUploadUrlResponse"
                }
              }
            },
            "description": "Presigned URL generated successfully"
          },
          "400": {
            "description": "Invalid parameters (file too large, unsupported format, etc.)"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Generate a presigned URL for uploading a file",
        "tags": [
          "Files"
        ]
      }
    },
    "/v1/grok/parse": {
      "post": {
        "description": "Parses a log sample using provided Grok rules and returns the extracted fields and which rule matched.",
        "operationId": "parse_1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GrokParseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GrokParseResponse"
                }
              }
            },
            "description": "Log message parsed successfully."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GrokParseErrors"
                }
              }
            },
            "description": "Grok parsing rules are invalid or could not be compiled."
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Validate a log sample",
        "tags": [
          "Grok Parsing"
        ]
      }
    },
    "/v1/grok/parse/batch": {
      "post": {
        "description": "Parse slog samples using provided Grok rules and returns the extracted fields and which rule matched.",
        "operationId": "parse",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GrokParseBatchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GrokParseBatchResponse"
                }
              }
            },
            "description": "Log message parsed successfully."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GrokParseErrors"
                }
              }
            },
            "description": "Grok parsing rules are invalid or could not be compiled."
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Validate log samples",
        "tags": [
          "Grok Parsing"
        ]
      }
    },
    "/v1/integrations/anthropic": {
      "get": {
        "description": "Get all Anthropic integrations for your organization. This will contain masked API keys if present.",
        "operationId": "list_6",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadAnthropic"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Anthropic integrations",
        "tags": [
          "Anthropic Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to Anthropic.",
        "operationId": "create_4",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteAnthropic"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadAnthropic"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadAnthropic"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create an Anthropic integration",
        "tags": [
          "Anthropic Integration"
        ]
      }
    },
    "/v1/integrations/anthropic/{id}": {
      "delete": {
        "description": "Deletes an Anthropic integration. This will delete the associated API key as well. No-op if already deleted.",
        "operationId": "delete_4",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete an Anthropic integration",
        "tags": [
          "Anthropic Integration"
        ]
      },
      "get": {
        "description": "Get an Anthropic integration by ID.",
        "operationId": "get_6",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadAnthropic"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get an Anthropic integration",
        "tags": [
          "Anthropic Integration"
        ]
      },
      "put": {
        "description": "Updates an Anthropic integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_2",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteAnthropic"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadAnthropic"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update an Anthropic integration.",
        "tags": [
          "Anthropic Integration"
        ]
      }
    },
    "/v1/integrations/anthropic/{id}/api-key": {
      "put": {
        "description": "Creates an API key for an Anthropic integration if it doesn\u0027t exist and updates it otherwise. If the key is updated while the integration is being used by a pipeline, the new key will be picked at pipeline restart, rescaling or an update.",
        "operationId": "upsertApiKey",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "API key upserted successfully."
          },
          "400": {
            "description": "Invalid API key."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "503": {
            "description": "Anthropic API is rate-limiting or unavailable; retry later."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates an Anthropic integration API key",
        "tags": [
          "Anthropic Integration"
        ]
      }
    },
    "/v1/integrations/anthropic/{id}/models": {
      "get": {
        "operationId": "models",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionString"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Anthropic Integration"
        ]
      }
    },
    "/v1/integrations/data-warehouse": {
      "get": {
        "description": "Retrieves all Data Warehouse integrations for the organization.",
        "operationId": "listDataWarehouseIntegrations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadDataWarehouse"
                }
              }
            },
            "description": "Data Warehouse integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Data Warehouse integrations",
        "tags": [
          "Grepr-hosted Data Warehouse Integration"
        ]
      },
      "post": {
        "description": "Creates a new Data Warehouse integration for connecting to Grepr S3 bucket.",
        "operationId": "createDataWarehouseIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteDataWarehouse"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDataWarehouse"
                }
              }
            },
            "description": "Data Warehouse integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "description": "Integration already exists"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a Data Warehouse integration",
        "tags": [
          "Grepr-hosted Data Warehouse Integration"
        ]
      }
    },
    "/v1/integrations/data-warehouse/{id}": {
      "delete": {
        "description": "Deletes a Data Warehouse integration if it exists. No-op otherwise.",
        "operationId": "deleteDataWarehouseIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Data Warehouse integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Data Warehouse integration",
        "tags": [
          "Grepr-hosted Data Warehouse Integration"
        ]
      },
      "get": {
        "description": "Retrieves a Data Warehouse integration.",
        "operationId": "getDataWarehouseIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDataWarehouse"
                }
              }
            },
            "description": "Data Warehouse integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Data Warehouse integration not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Data Warehouse integration",
        "tags": [
          "Grepr-hosted Data Warehouse Integration"
        ]
      },
      "put": {
        "description": "Updates an existing Data Warehouse integration.",
        "operationId": "updateDataWarehouseIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteDataWarehouse"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDataWarehouse"
                }
              }
            },
            "description": "Data Warehouse integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Data Warehouse integration not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a Data Warehouse integration",
        "tags": [
          "Grepr-hosted Data Warehouse Integration"
        ]
      }
    },
    "/v1/integrations/datadog": {
      "get": {
        "description": "Get all Datadog integrations for your organization. This will contain masked keys if present.",
        "operationId": "listDatadogIntegrations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadDatadog"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Datadog integrations",
        "tags": [
          "Datadog Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to Datadog.",
        "operationId": "createDatadogIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteDatadog"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadog"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadog"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a Datadog integration",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog-mcp": {
      "get": {
        "description": "Get all Datadog MCP server integrations for your organization. This will contain masked API keys if present.",
        "operationId": "list_9",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadDatadogMcp"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Datadog MCP integrations",
        "tags": [
          "Datadog MCP Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to a Datadog MCP server.",
        "operationId": "create_7",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteDatadogMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadogMcp"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadogMcp"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a Datadog MCP integration",
        "tags": [
          "Datadog MCP Integration"
        ]
      }
    },
    "/v1/integrations/datadog-mcp/{id}": {
      "delete": {
        "description": "Deletes a Datadog MCP integration. This will delete the associated API keys as well. No-op if already deleted.",
        "operationId": "delete_7",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Datadog MCP integration",
        "tags": [
          "Datadog MCP Integration"
        ]
      },
      "get": {
        "description": "Get a Datadog MCP integration by ID.",
        "operationId": "get_9",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadogMcp"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Datadog MCP integration",
        "tags": [
          "Datadog MCP Integration"
        ]
      },
      "put": {
        "description": "Updates a Datadog MCP integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_5",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteDatadogMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadogMcp"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a Datadog MCP integration.",
        "tags": [
          "Datadog MCP Integration"
        ]
      }
    },
    "/v1/integrations/datadog-mcp/{id}/api-key": {
      "put": {
        "description": "Creates the DD-API-KEY for a Datadog MCP integration if it doesn\u0027t exist and updates it otherwise.",
        "operationId": "upsertApiKey_3",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "API key upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Datadog MCP integration API key",
        "tags": [
          "Datadog MCP Integration"
        ]
      }
    },
    "/v1/integrations/datadog-mcp/{id}/app-key": {
      "put": {
        "description": "Creates the DD-APPLICATION-KEY for a Datadog MCP integration if it doesn\u0027t exist and updates it otherwise.",
        "operationId": "upsertAppKey",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Application key upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Datadog MCP integration application key",
        "tags": [
          "Datadog MCP Integration"
        ]
      }
    },
    "/v1/integrations/datadog/app-key/scopes/preview": {
      "post": {
        "description": "Probes Datadog with the supplied site and keys and reports each authorization scope. For the create form, where there is no integration to take keys from, so every field is required. Nothing is written and nothing is stored.",
        "operationId": "previewNewDatadogAppKeyScopes",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckAppKeyScopesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AppKeyScopeCheck"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Scopes checked successfully"
          },
          "400": {
            "description": "The supplied site is not allowed for this organization."
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Preview authorization scopes for keys not yet saved to any integration",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/sites": {
      "get": {
        "description": "Get all valid Datadog sites for your organization.",
        "operationId": "listValidDatadogSites",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Sites retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all valid Datadog sites",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/{id}": {
      "delete": {
        "description": "Deletes an integration to connect to Datadog. This will delete the associated keys as well. No-op if already deleted.",
        "operationId": "deleteDatadogIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Datadog integration",
        "tags": [
          "Datadog Integration"
        ]
      },
      "get": {
        "description": "Get an integration to connect to Datadog.",
        "operationId": "getDatadogIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadog"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Datadog integration",
        "tags": [
          "Datadog Integration"
        ]
      },
      "put": {
        "description": "Updates an integration to connect to Datadog. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "updateDatadogIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteDatadog"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadog"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a Datadog integration.",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/{id}/api-key": {
      "put": {
        "description": "Creates an API key for a Datadog integration if it doesn\u0027t exist and updates it otherwise.  If the key is updated while the integration is being used by a pipeline, the  new key will be picked at pipeline restart, rescaling or an update.  Ingestion supports the previous and the updated key for up to 24 hours of  a key update. Make sure to change the key used by the agents to send data within  24 hours of an update for a seamless transition",
        "operationId": "upsertDatadogApiKey",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Api key upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Datadog integration api key",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/{id}/api-keys": {
      "put": {
        "description": "Replaces the integration\u0027s entire set of API keys in one atomic write. Existing keys are referenced by id (kept or rotated), new keys carry only a value, and omitted keys are removed; one key is marked as the send key used to write data back to Datadog. If any key is rejected the existing set is left unchanged. All keys are accepted for inbound telemetry. Requires the organization to have multiple Datadog API keys enabled. Adding, removing, relabeling, or rotating a key other than the send key is allowed while the integration\u0027s pipeline is running; a change that affects the send key (which key it is, or its value) requires the pipeline to be stopped, since that key is baked into the running Flink job.",
        "operationId": "setDatadogApiKeys",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetApiKeysRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadog"
                }
              }
            },
            "description": "API keys updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration or a referenced key not found."
          },
          "409": {
            "description": "The key count exceeds the limit, or the change affects the send key while the integration is in use by a running pipeline."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Set a Datadog integration\u0027s API keys",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/{id}/app-key": {
      "delete": {
        "description": "Deletes a Datadog integration app key. No-op if already deleted.",
        "operationId": "deleteDatadogAppKey",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "App key deleted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Datadog integration app key",
        "tags": [
          "Datadog Integration"
        ]
      },
      "put": {
        "description": "Creates an app key for a Datadog integration if it doesn\u0027t exist and updates it otherwise.  If the key is updated while the integration is being used by a pipeline, the  new key will be picked at pipeline restart, rescaling or an update. ",
        "operationId": "upsertDatadogAppKey",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "App key upserted successfully."
          },
          "400": {
            "description": "App key is missing a required authorization scope."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Datadog integration app key",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/{id}/app-key/scopes/preview": {
      "post": {
        "description": "Probes Datadog with the integration\u0027s stored keys, overridden by whatever the body supplies, and reports each authorization scope. Nothing is written. An omitted field means \"use what is stored\", so an empty body reports what the stored key can do right now. A scope whose probe does not complete is reported UNKNOWN rather than as a permission the user has to grant.",
        "operationId": "previewDatadogAppKeyScopes",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreviewAppKeyScopesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AppKeyScopeCheck"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Scopes checked successfully"
          },
          "400": {
            "description": "The supplied site is not allowed for this organization."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Preview authorization scopes for unsaved changes to an integration",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/{id}/client-token": {
      "delete": {
        "description": "Deletes a Datadog browser integration client token. No-op if already deleted.",
        "operationId": "deleteClientToken-hidden",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Client token deleted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Datadog browser integration client token",
        "tags": [
          "Datadog Integration"
        ]
      },
      "put": {
        "description": "Creates a client token for a Datadog browser integration if it doesn\u0027t exist and updates it otherwise. ",
        "operationId": "upsertClientToken-hidden",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Client token upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Datadog browser integration client token",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/{id}/exceptions": {
      "get": {
        "description": "Returns a paginated list of vendor imported exceptions for the specified Datadog integration",
        "operationId": "getDatadogIntegrationExceptions",
        "parameters": [
          {
            "description": "Integration ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size (100-2000, default: 100)",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 100,
              "format": "int32",
              "maximum": 2000,
              "minimum": 100,
              "type": "integer"
            }
          },
          {
            "description": "Page number (0-based, default: 0)",
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "minimum": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationExceptionsList"
                }
              }
            },
            "description": "Successfully retrieved integration exceptions"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Access denied"
          },
          "404": {
            "description": "Integration not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get Datadog integration exceptions",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/datadog/{id}/with-exceptions": {
      "get": {
        "description": "Get an integration to connect to Datadog with vendor imported exceptions populated.",
        "operationId": "getDatadogIntegrationWithExceptions",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadDatadog"
                }
              }
            },
            "description": "Integration retrieved successfully with exceptions"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Datadog integration with exceptions",
        "tags": [
          "Datadog Integration"
        ]
      }
    },
    "/v1/integrations/gemini": {
      "get": {
        "description": "Get all Google Gemini integrations for your organization. This will contain masked API keys if present.",
        "operationId": "list_7",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadGemini"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Gemini integrations",
        "tags": [
          "Gemini Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to Google Gemini.",
        "operationId": "create_5",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteGemini"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGemini"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGemini"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a Gemini integration",
        "tags": [
          "Gemini Integration"
        ]
      }
    },
    "/v1/integrations/gemini/{id}": {
      "delete": {
        "description": "Deletes a Gemini integration. This will delete the associated API key as well. No-op if already deleted.",
        "operationId": "delete_5",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Gemini integration",
        "tags": [
          "Gemini Integration"
        ]
      },
      "get": {
        "description": "Get a Gemini integration by ID.",
        "operationId": "get_7",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGemini"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Gemini integration",
        "tags": [
          "Gemini Integration"
        ]
      },
      "put": {
        "description": "Updates a Gemini integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_3",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteGemini"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGemini"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a Gemini integration.",
        "tags": [
          "Gemini Integration"
        ]
      }
    },
    "/v1/integrations/gemini/{id}/api-key": {
      "put": {
        "description": "Creates an API key for a Gemini integration if it doesn\u0027t exist and updates it otherwise. If the key is updated while the integration is being used by a pipeline, the new key will be picked at pipeline restart, rescaling or an update.",
        "operationId": "upsertApiKey_1",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "API key upserted successfully."
          },
          "400": {
            "description": "Invalid API key."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "503": {
            "description": "Gemini API is rate-limiting or unavailable; retry later."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Gemini integration API key",
        "tags": [
          "Gemini Integration"
        ]
      }
    },
    "/v1/integrations/gemini/{id}/models": {
      "get": {
        "operationId": "models_1",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionString"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Gemini Integration"
        ]
      }
    },
    "/v1/integrations/github-mcp": {
      "get": {
        "description": "Get all GitHub MCP server integrations for your organization. This will contain masked tokens if present.",
        "operationId": "list_10",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadGithubMcp"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all GitHub MCP integrations",
        "tags": [
          "GitHub MCP Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to a GitHub MCP server.",
        "operationId": "create_8",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteGithubMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGithubMcp"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGithubMcp"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a GitHub MCP integration",
        "tags": [
          "GitHub MCP Integration"
        ]
      }
    },
    "/v1/integrations/github-mcp/{id}": {
      "delete": {
        "description": "Deletes a GitHub MCP integration. This will delete the associated token as well. No-op if already deleted.",
        "operationId": "delete_8",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a GitHub MCP integration",
        "tags": [
          "GitHub MCP Integration"
        ]
      },
      "get": {
        "description": "Get a GitHub MCP integration by ID.",
        "operationId": "get_10",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGithubMcp"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a GitHub MCP integration",
        "tags": [
          "GitHub MCP Integration"
        ]
      },
      "put": {
        "description": "Updates a GitHub MCP integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_6",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteGithubMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGithubMcp"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a GitHub MCP integration.",
        "tags": [
          "GitHub MCP Integration"
        ]
      }
    },
    "/v1/integrations/github-mcp/{id}/api-key": {
      "put": {
        "description": "Creates a token for a GitHub MCP integration if it doesn\u0027t exist and updates it otherwise. If the token is updated while the integration is being used by a pipeline, the new token will be picked at pipeline restart, rescaling or an update.",
        "operationId": "upsertApiKey_4",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Token upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a GitHub MCP integration token",
        "tags": [
          "GitHub MCP Integration"
        ]
      }
    },
    "/v1/integrations/grepr-pipe": {
      "get": {
        "description": "Get all Grepr pipe integrations.",
        "operationId": "listGreprPipeIntegrations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadGreprPipe"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Grepr pipe integrations",
        "tags": [
          "Grepr Pipe Integration"
        ]
      },
      "post": {
        "description": "Creates a pipe that pipelines write log events into with a pipe sink and read them from with a pipe source.",
        "operationId": "createGreprPipeIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteGreprPipe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGreprPipe"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGreprPipe"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a Grepr pipe integration",
        "tags": [
          "Grepr Pipe Integration"
        ]
      }
    },
    "/v1/integrations/grepr-pipe/{id}": {
      "delete": {
        "description": "Deletes a Grepr pipe integration and its topic. Rejected while a pipeline uses it. No-op if already deleted.",
        "operationId": "deleteGreprPipeIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Grepr pipe integration",
        "tags": [
          "Grepr Pipe Integration"
        ]
      },
      "get": {
        "description": "Get a Grepr pipe integration.",
        "operationId": "getGreprPipeIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGreprPipe"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Grepr pipe integration",
        "tags": [
          "Grepr Pipe Integration"
        ]
      },
      "put": {
        "description": "Updates a Grepr pipe integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "updateGreprPipeIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteGreprPipe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadGreprPipe"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a Grepr pipe integration.",
        "tags": [
          "Grepr Pipe Integration"
        ]
      }
    },
    "/v1/integrations/jira-mcp": {
      "get": {
        "description": "Get all Jira MCP server integrations for your organization. This will contain masked credentials if present.",
        "operationId": "list_11",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadJiraMcp"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Jira MCP integrations",
        "tags": [
          "Jira MCP Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to a Jira MCP server.",
        "operationId": "create_9",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteJiraMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadJiraMcp"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadJiraMcp"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a Jira MCP integration",
        "tags": [
          "Jira MCP Integration"
        ]
      }
    },
    "/v1/integrations/jira-mcp/{id}": {
      "delete": {
        "description": "Deletes a Jira MCP integration. This will delete the associated credential as well. No-op if already deleted.",
        "operationId": "delete_9",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Jira MCP integration",
        "tags": [
          "Jira MCP Integration"
        ]
      },
      "get": {
        "description": "Get a Jira MCP integration by ID.",
        "operationId": "get_11",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadJiraMcp"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Jira MCP integration",
        "tags": [
          "Jira MCP Integration"
        ]
      },
      "put": {
        "description": "Updates a Jira MCP integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_7",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteJiraMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadJiraMcp"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a Jira MCP integration.",
        "tags": [
          "Jira MCP Integration"
        ]
      }
    },
    "/v1/integrations/jira-mcp/{id}/api-key": {
      "put": {
        "description": "Creates the Atlassian service account API token for a Jira MCP integration if it doesn\u0027t exist and updates it otherwise. Unless validateKeysOnSave is false, the credential is checked against the Atlassian MCP server first and is not stored if Atlassian refuses it or it gives no Jira tools.",
        "operationId": "upsertApiKey_5",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Credential upserted successfully."
          },
          "400": {
            "description": "Atlassian refused the credential, could not be reached, or gave no Jira tools."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Jira MCP integration credential",
        "tags": [
          "Jira MCP Integration"
        ]
      }
    },
    "/v1/integrations/litellm": {
      "get": {
        "operationId": "list_8",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadLiteLlm"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all LiteLLM integrations",
        "tags": [
          "LiteLLM Integration"
        ]
      },
      "post": {
        "operationId": "create_6",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteLiteLlm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadLiteLlm"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadLiteLlm"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a LiteLLM integration",
        "tags": [
          "LiteLLM Integration"
        ]
      }
    },
    "/v1/integrations/litellm/{id}": {
      "delete": {
        "operationId": "delete_6",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a LiteLLM integration",
        "tags": [
          "LiteLLM Integration"
        ]
      },
      "get": {
        "operationId": "get_8",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadLiteLlm"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a LiteLLM integration",
        "tags": [
          "LiteLLM Integration"
        ]
      },
      "put": {
        "operationId": "update_4",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteLiteLlm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadLiteLlm"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a LiteLLM integration",
        "tags": [
          "LiteLLM Integration"
        ]
      }
    },
    "/v1/integrations/litellm/{id}/api-key": {
      "put": {
        "operationId": "upsertApiKey_2",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "API key upserted successfully."
          },
          "400": {
            "description": "Invalid API key."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "503": {
            "description": "LiteLLM is rate-limiting or unavailable; retry later."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a LiteLLM integration API key",
        "tags": [
          "LiteLLM Integration"
        ]
      }
    },
    "/v1/integrations/litellm/{id}/models": {
      "get": {
        "operationId": "models_2",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionString"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "LiteLLM Integration"
        ]
      }
    },
    "/v1/integrations/newrelic": {
      "get": {
        "description": "Get all NewRelic integrations.",
        "operationId": "listNewRelicIntegrations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadNewRelic"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all NewRelic integrations",
        "tags": [
          "New Relic Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to NewRelic.",
        "operationId": "createNewRelicIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteNewRelic"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadNewRelic"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadNewRelic"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a NewRelic integration",
        "tags": [
          "New Relic Integration"
        ]
      }
    },
    "/v1/integrations/newrelic/sites": {
      "get": {
        "description": "Get all valid NewRelic sites for your organization.",
        "operationId": "listValidNewRelicSites",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Sites retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all valid NewRelic sites",
        "tags": [
          "New Relic Integration"
        ]
      }
    },
    "/v1/integrations/newrelic/{id}": {
      "delete": {
        "description": "Deletes an integration to connect to NewRelic. This will delete the associated keys as well. No-op if already deleted.",
        "operationId": "deleteNewRelicIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a NewRelic integration",
        "tags": [
          "New Relic Integration"
        ]
      },
      "get": {
        "description": "Get an integration to connect to NewRelic.",
        "operationId": "getNewRelicIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadNewRelic"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a NewRelic integration",
        "tags": [
          "New Relic Integration"
        ]
      },
      "put": {
        "description": "Updates an integration to connect to NewRelic. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "updateNewRelicIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteNewRelic"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadNewRelic"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a NewRelic integration.",
        "tags": [
          "New Relic Integration"
        ]
      }
    },
    "/v1/integrations/newrelic/{id}/api-key": {
      "put": {
        "description": "Creates a NewRelic API key for a NewRelic integration if a key doesn\u0027t exist, and updates it otherwise. If the api key is updated while the integration is being used by a pipeline, the  new key is used at pipeline restart, rescaling, or an update.  This key is used for the NewRelic API to retrieve the dashboards and alerts.",
        "operationId": "upsertNewRelicApiKey",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "NewRelic API key upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates an API key for integration with New Relic",
        "tags": [
          "New Relic Integration"
        ]
      }
    },
    "/v1/integrations/newrelic/{id}/exceptions": {
      "get": {
        "description": "Returns a paginated list of vendor imported exceptions for the specified New Relic integration",
        "operationId": "getNewRelicIntegrationExceptions",
        "parameters": [
          {
            "description": "Integration ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size (100-2000, default: 100)",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 100,
              "format": "int32",
              "maximum": 2000,
              "minimum": 100,
              "type": "integer"
            }
          },
          {
            "description": "Page number (0-based, default: 0)",
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "minimum": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationExceptionsList"
                }
              }
            },
            "description": "Successfully retrieved integration exceptions"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Access denied"
          },
          "404": {
            "description": "Integration not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get New Relic integration exceptions",
        "tags": [
          "New Relic Integration"
        ]
      }
    },
    "/v1/integrations/newrelic/{id}/license-key": {
      "put": {
        "description": "Creates an API key for a NewRelic integration if it doesn\u0027t exist and updates it otherwise. If the key is updated while the integration is being used by a pipeline, the new key will be picked at pipeline restart, rescaling or an update. Ingestion supports the previous and the updated key for up to 24 hours of a key update. Make sure to change the key used by the agents to send data within 24 hours of an update for a seamless transition",
        "operationId": "upsertNewRelicLicenseKey",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Api key upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a NewRelic integration api key",
        "tags": [
          "New Relic Integration"
        ]
      }
    },
    "/v1/integrations/newrelic/{id}/with-exceptions": {
      "get": {
        "description": "Get an integration to connect to NewRelic with vendor imported exceptions populated.",
        "operationId": "getNewRelicIntegrationWithExceptions",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadNewRelic"
                }
              }
            },
            "description": "Integration retrieved successfully with exceptions"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a NewRelic integration with exceptions",
        "tags": [
          "New Relic Integration"
        ]
      }
    },
    "/v1/integrations/openai": {
      "get": {
        "description": "Get all OpenAI integrations for your organization. This will contain masked API keys if present.",
        "operationId": "list_14",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadOpenAi"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all OpenAI integrations",
        "tags": [
          "OpenAI Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to OpenAI.",
        "operationId": "create_12",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteOpenAi"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadOpenAi"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadOpenAi"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create an OpenAI integration",
        "tags": [
          "OpenAI Integration"
        ]
      }
    },
    "/v1/integrations/openai/{id}": {
      "delete": {
        "description": "Deletes an OpenAI integration. This will delete the associated API key as well. No-op if already deleted.",
        "operationId": "delete_12",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete an OpenAI integration",
        "tags": [
          "OpenAI Integration"
        ]
      },
      "get": {
        "description": "Get an OpenAI integration by ID.",
        "operationId": "get_14",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadOpenAi"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get an OpenAI integration",
        "tags": [
          "OpenAI Integration"
        ]
      },
      "put": {
        "description": "Updates an OpenAI integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_10",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteOpenAi"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadOpenAi"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update an OpenAI integration.",
        "tags": [
          "OpenAI Integration"
        ]
      }
    },
    "/v1/integrations/openai/{id}/api-key": {
      "put": {
        "description": "Creates an API key for an OpenAI integration if it doesn\u0027t exist and updates it otherwise. If the key is updated while the integration is being used by a pipeline, the new key will be picked at pipeline restart, rescaling or an update.",
        "operationId": "upsertApiKey_8",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "API key upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates an OpenAI integration API key",
        "tags": [
          "OpenAI Integration"
        ]
      }
    },
    "/v1/integrations/openai/{id}/models": {
      "get": {
        "operationId": "models_3",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionString"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "OpenAI Integration"
        ]
      }
    },
    "/v1/integrations/otlp": {
      "get": {
        "description": "Get all OTLP integrations.",
        "operationId": "listOtlpIntegrations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadOtlp"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all OTLP integrations",
        "tags": [
          "OpenTelemetry Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to OTLP.",
        "operationId": "createOtlpIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteOtlp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadOtlp"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadOtlp"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create an OTLP integration",
        "tags": [
          "OpenTelemetry Integration"
        ]
      }
    },
    "/v1/integrations/otlp/{id}": {
      "delete": {
        "description": "Deletes an integration to connect to OTLP. This will delete the associated keys as well. No-op if already deleted.",
        "operationId": "deleteOtlpIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a OTLP integration",
        "tags": [
          "OpenTelemetry Integration"
        ]
      },
      "get": {
        "description": "Get an integration to connect to OTLP.",
        "operationId": "getOtlpIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadOtlp"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a OTLP integration",
        "tags": [
          "OpenTelemetry Integration"
        ]
      },
      "put": {
        "description": "Updates an integration to connect to OTLP. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "updateOtlpIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteOtlp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadOtlp"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a OTLP integration.",
        "tags": [
          "OpenTelemetry Integration"
        ]
      }
    },
    "/v1/integrations/otlp/{id}/secret-headers/{name}": {
      "delete": {
        "description": "Deletes a single secret HTTP header from an OTLP integration.",
        "operationId": "deleteOtlpSecretHeader",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Secret header deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a single OTLP integration secret header",
        "tags": [
          "OpenTelemetry Integration"
        ]
      },
      "put": {
        "description": "Creates or updates a single secret HTTP header for an OTLP integration.",
        "operationId": "upsertOtlpSecretHeader",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Secret header updated successfully"
          },
          "400": {
            "description": "Invalid header name or reserved header name"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create or update a single OTLP integration secret header",
        "tags": [
          "OpenTelemetry Integration"
        ]
      }
    },
    "/v1/integrations/otlp/{id}/token": {
      "get": {
        "description": "Retrieves the plain-text authentication token for an OTLP integration.",
        "operationId": "getOtlpToken",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "description": "The token in clear text",
                  "type": "string"
                }
              }
            },
            "description": "Token retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Retrieve OTLP integration token in clear text",
        "tags": [
          "OpenTelemetry Integration"
        ]
      }
    },
    "/v1/integrations/pagerduty-mcp": {
      "get": {
        "description": "Get all PagerDuty MCP server integrations for your organization. This will contain masked API keys if present.",
        "operationId": "list_12",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadPagerDutyMcp"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all PagerDuty MCP integrations",
        "tags": [
          "PagerDuty MCP Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to a PagerDuty MCP server.",
        "operationId": "create_10",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WritePagerDutyMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadPagerDutyMcp"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadPagerDutyMcp"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a PagerDuty MCP integration",
        "tags": [
          "PagerDuty MCP Integration"
        ]
      }
    },
    "/v1/integrations/pagerduty-mcp/{id}": {
      "delete": {
        "description": "Deletes a PagerDuty MCP integration. This will delete the associated API key as well. No-op if already deleted.",
        "operationId": "delete_10",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a PagerDuty MCP integration",
        "tags": [
          "PagerDuty MCP Integration"
        ]
      },
      "get": {
        "description": "Get a PagerDuty MCP integration by ID.",
        "operationId": "get_12",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadPagerDutyMcp"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a PagerDuty MCP integration",
        "tags": [
          "PagerDuty MCP Integration"
        ]
      },
      "put": {
        "description": "Updates a PagerDuty MCP integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_8",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WritePagerDutyMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadPagerDutyMcp"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a PagerDuty MCP integration.",
        "tags": [
          "PagerDuty MCP Integration"
        ]
      }
    },
    "/v1/integrations/pagerduty-mcp/{id}/api-key": {
      "put": {
        "description": "Creates an API key for a PagerDuty MCP integration if it doesn\u0027t exist and updates it otherwise. If the key is updated while the integration is being used by a pipeline, the new key will be picked at pipeline restart, rescaling or an update.",
        "operationId": "upsertApiKey_6",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "API key upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a PagerDuty MCP integration API key",
        "tags": [
          "PagerDuty MCP Integration"
        ]
      }
    },
    "/v1/integrations/s3-data-warehouse": {
      "get": {
        "operationId": "listS3DataWarehouseIntegrations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadS3DataWarehouse"
                }
              }
            },
            "description": "S3 Data Warehouse integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all S3 Data Warehouse integrations",
        "tags": [
          "External S3 Data Warehouse Integration"
        ]
      },
      "post": {
        "description": "Creates an external S3 Data Warehouse integration",
        "operationId": "createS3DataWarehouseIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteS3DataWarehouse"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadS3DataWarehouse"
                }
              }
            },
            "description": "S3 Data Warehouse integration created successfully"
          },
          "400": {
            "description": "Bucket is not accessible or the role is invalid"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "description": "S3 Data Warehouse integration already exists"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a S3 Data Warehouse integration",
        "tags": [
          "External S3 Data Warehouse Integration"
        ]
      }
    },
    "/v1/integrations/s3-data-warehouse/cloudformation-setup-info": {
      "get": {
        "description": "Gets AWS Cloudformation setup information for an external S3 Data Warehouse integration",
        "operationId": "getCloudFormationSetupInfo",
        "parameters": [
          {
            "in": "query",
            "name": "bucketName",
            "schema": {
              "maxLength": 63,
              "minLength": 3,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloudFormationSetupInfo"
                }
              }
            },
            "description": "Cloudformation setup information retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get AWS Cloudformation setup information for a S3 Data Warehouse integration",
        "tags": [
          "External S3 Data Warehouse Integration"
        ]
      }
    },
    "/v1/integrations/s3-data-warehouse/console-setup-info": {
      "get": {
        "description": "Gets AWS console setup information for an external S3 Data Warehouse integration",
        "operationId": "getConsoleSetupInfo",
        "parameters": [
          {
            "in": "query",
            "name": "bucketName",
            "schema": {
              "maxLength": 63,
              "minLength": 3,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsoleSetupInfo"
                }
              }
            },
            "description": "AWS console setup information retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get AWS console setup information for a S3 Data Warehouse integration",
        "tags": [
          "External S3 Data Warehouse Integration"
        ]
      }
    },
    "/v1/integrations/s3-data-warehouse/test": {
      "post": {
        "description": "Validates whether Grepr can access the S3 bucket. This can be used to test the bucket access before creating the integration.",
        "operationId": "test",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteS3DataWarehouse"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BucketAccessResult"
                }
              }
            },
            "description": "Bucket access validation completed successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Validate whether Grepr can access the S3 bucket",
        "tags": [
          "External S3 Data Warehouse Integration"
        ]
      }
    },
    "/v1/integrations/s3-data-warehouse/{id}": {
      "delete": {
        "description": "Deletes an external S3 Data Warehouse integration if it exists. No-op otherwise.",
        "operationId": "deleteS3DataWarehouseIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "S3 Data Warehouse integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a S3 Data Warehouse integration",
        "tags": [
          "External S3 Data Warehouse Integration"
        ]
      },
      "get": {
        "description": "Gets an external S3 Data Warehouse integration",
        "operationId": "getS3DataWarehouseIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadS3DataWarehouse"
                }
              }
            },
            "description": "S3 Data Warehouse integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "S3 Data Warehouse integration not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a S3 Data Warehouse integration",
        "tags": [
          "External S3 Data Warehouse Integration"
        ]
      },
      "put": {
        "description": "Updates an external S3 Data Warehouse integration",
        "operationId": "updateS3DataWarehouseIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteS3DataWarehouse"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadS3DataWarehouse"
                }
              }
            },
            "description": "S3 Data Warehouse integration updated successfully"
          },
          "400": {
            "description": "Bucket name and ARN cannot be updated"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "S3 Data Warehouse integration not found"
          },
          "409": {
            "description": "S3 Data Warehouse integration was updated and modified concurrently"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a S3 Data Warehouse integration",
        "tags": [
          "External S3 Data Warehouse Integration"
        ]
      }
    },
    "/v1/integrations/s3-vector-index": {
      "get": {
        "description": "Retrieves all S3 Vector Index integrations for the organization.",
        "operationId": "list_15",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadS3VectorIndex"
                }
              }
            },
            "description": "S3 Vector Index integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all S3 Vector Index integrations",
        "tags": [
          "S3 Vector Index Integration"
        ]
      },
      "post": {
        "description": "Creates a new S3 Vector Index integration and provisions the index in the grepr-managed S3 vector bucket.",
        "operationId": "create_13",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteS3VectorIndex"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadS3VectorIndex"
                }
              }
            },
            "description": "S3 Vector Index integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "description": "Integration already exists"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create an S3 Vector Index integration",
        "tags": [
          "S3 Vector Index Integration"
        ]
      }
    },
    "/v1/integrations/s3-vector-index/{id}": {
      "delete": {
        "description": "Deletes an S3 Vector Index integration and removes the index from the S3 vector bucket. No-op if integration doesn\u0027t exist.",
        "operationId": "delete_13",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "S3 Vector Index integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete an S3 Vector Index integration",
        "tags": [
          "S3 Vector Index Integration"
        ]
      },
      "get": {
        "description": "Retrieves an S3 Vector Index integration.",
        "operationId": "get_15",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadS3VectorIndex"
                }
              }
            },
            "description": "S3 Vector Index integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "S3 Vector Index integration not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get an S3 Vector Index integration",
        "tags": [
          "S3 Vector Index Integration"
        ]
      },
      "put": {
        "description": "Updates an existing S3 Vector Index integration. Note: dimensions and distanceMetric are immutable after creation.",
        "operationId": "update_11",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteS3VectorIndex"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadS3VectorIndex"
                }
              }
            },
            "description": "S3 Vector Index integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "S3 Vector Index integration not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update an S3 Vector Index integration",
        "tags": [
          "S3 Vector Index Integration"
        ]
      }
    },
    "/v1/integrations/slack-mcp": {
      "get": {
        "description": "Get all Slack MCP server integrations for your organization. This will contain masked tokens if present.",
        "operationId": "list_13",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadSlackMcp"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Slack MCP integrations",
        "tags": [
          "Slack MCP Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to a Slack MCP server.",
        "operationId": "create_11",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteSlackMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSlackMcp"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSlackMcp"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a Slack MCP integration",
        "tags": [
          "Slack MCP Integration"
        ]
      }
    },
    "/v1/integrations/slack-mcp/{id}": {
      "delete": {
        "description": "Deletes a Slack MCP integration. This will delete the associated token as well. No-op if already deleted.",
        "operationId": "delete_11",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Slack MCP integration",
        "tags": [
          "Slack MCP Integration"
        ]
      },
      "get": {
        "description": "Get a Slack MCP integration by ID.",
        "operationId": "get_13",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSlackMcp"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Slack MCP integration",
        "tags": [
          "Slack MCP Integration"
        ]
      },
      "put": {
        "description": "Updates a Slack MCP integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_9",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteSlackMcp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSlackMcp"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a Slack MCP integration.",
        "tags": [
          "Slack MCP Integration"
        ]
      }
    },
    "/v1/integrations/slack-mcp/{id}/api-key": {
      "put": {
        "description": "Creates a token for a Slack MCP integration if it doesn\u0027t exist and updates it otherwise. If the token is updated while the integration is being used by a pipeline, the new token will be picked at pipeline restart, rescaling or an update.",
        "operationId": "upsertApiKey_7",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Token upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Slack MCP integration token",
        "tags": [
          "Slack MCP Integration"
        ]
      }
    },
    "/v1/integrations/splunk": {
      "get": {
        "description": "Get all Splunk integrations for your organization. This will contain masked keys if present.",
        "operationId": "listSplunkIntegrations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadSplunk"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all Splunk integrations",
        "tags": [
          "Splunk Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to Splunk.",
        "operationId": "createSplunkIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteSplunk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSplunk"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSplunk"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a Splunk integration",
        "tags": [
          "Splunk Integration"
        ]
      }
    },
    "/v1/integrations/splunk/{id}": {
      "delete": {
        "description": "Deletes an integration to connect to Splunk. This will delete the associated keys as well. No-op if already deleted.",
        "operationId": "deleteSplunkIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a Splunk integration",
        "tags": [
          "Splunk Integration"
        ]
      },
      "get": {
        "description": "Get an integration to connect to Splunk.",
        "operationId": "getSplunkIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSplunk"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Splunk integration",
        "tags": [
          "Splunk Integration"
        ]
      },
      "put": {
        "description": "Updates an integration to connect to Splunk. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "updateSplunkIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteSplunk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSplunk"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a Splunk integration.",
        "tags": [
          "Splunk Integration"
        ]
      }
    },
    "/v1/integrations/splunk/{id}/auth-token": {
      "put": {
        "description": "Creates an HEC API auth token for a Splunk integration if it doesn\u0027t exist and updates it otherwise.  If the key is updated while the integration is being used by a pipeline, the  new key will be picked at pipeline restart, rescaling or an update.  Ingestion supports the previous and the updated key for up to 24 hours of  a key update. Make sure to change the key used by the agents to send data within  24 hours of an update for a seamless transition",
        "operationId": "upsertSplunkAuthToken",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "HEC API Auth token upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Splunk integration auth token",
        "tags": [
          "Splunk Integration"
        ]
      }
    },
    "/v1/integrations/splunk/{id}/exceptions": {
      "get": {
        "description": "Returns a paginated list of vendor imported exceptions for the specified Splunk integration",
        "operationId": "getSplunkIntegrationExceptions",
        "parameters": [
          {
            "description": "Integration ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size (100-2000, default: 100)",
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 100,
              "format": "int32",
              "maximum": 2000,
              "minimum": 100,
              "type": "integer"
            }
          },
          {
            "description": "Page number (0-based, default: 0)",
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "minimum": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationExceptionsList"
                }
              }
            },
            "description": "Successfully retrieved integration exceptions"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Access denied"
          },
          "404": {
            "description": "Integration not found"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get Splunk integration exceptions",
        "tags": [
          "Splunk Integration"
        ]
      }
    },
    "/v1/integrations/splunk/{id}/rest-auth-token": {
      "put": {
        "description": "Creates a Splunk API auth token for a Splunk integration if it doesn\u0027t exist and updates it otherwise.  If the token is updated while the integration is being used by a pipeline, the  new token will be picked at pipeline restart, rescaling or an update.  This token is used for the Splunk API to search and retrieve logs.",
        "operationId": "upsertSplunkRestAuthToken",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Splunk REST API auth token upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates a Splunk integration API auth token",
        "tags": [
          "Splunk Integration"
        ]
      }
    },
    "/v1/integrations/splunk/{id}/with-exceptions": {
      "get": {
        "description": "Get an integration to connect to Splunk with vendor imported exceptions populated.",
        "operationId": "getSplunkIntegrationWithExceptions",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSplunk"
                }
              }
            },
            "description": "Integration retrieved successfully with exceptions"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a Splunk integration with exceptions",
        "tags": [
          "Splunk Integration"
        ]
      }
    },
    "/v1/integrations/sumo": {
      "get": {
        "description": "Get all SumoLogic integrations.",
        "operationId": "listSumoIntegrations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadSumo"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all SumoLogic integrations",
        "tags": [
          "Sumo Logic Integration"
        ]
      },
      "post": {
        "description": "Creates an integration to connect to SumoLogic.",
        "operationId": "createSumoIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteSumo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSumo"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSumo"
                }
              }
            },
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a SumoLogic integration",
        "tags": [
          "Sumo Logic Integration"
        ]
      }
    },
    "/v1/integrations/sumo/{id}": {
      "delete": {
        "description": "Deletes an integration to connect to SumoLogic. This will delete the associated keys as well. No-op if already deleted.",
        "operationId": "deleteSumoIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a SumoLogic integration",
        "tags": [
          "Sumo Logic Integration"
        ]
      },
      "get": {
        "description": "Get an integration to connect to SumoLogic.",
        "operationId": "getSumoIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSumo"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a SumoLogic integration",
        "tags": [
          "Sumo Logic Integration"
        ]
      },
      "put": {
        "description": "Updates an integration to connect to SumoLogic. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "updateSumoIntegration",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteSumo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSumo"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a SumoLogic integration.",
        "tags": [
          "Sumo Logic Integration"
        ]
      }
    },
    "/v1/integrations/sumo/{id}/endpoint": {
      "put": {
        "description": "Sets the endpoint for a SumoLogic integration if it doesn\u0027t exist and updates it otherwise. If the key is updated while the integration is being used by a pipeline, the new key will be picked at pipeline restart, rescaling or an update. Ingestion supports the previous and the updated key for up to 24 hours of a key update. Make sure to change the key used by the agents to send data within 24 hours of an update for a seamless transition",
        "operationId": "upsertSumoEndpoint",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecretApi"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Api key upserted successfully."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Creates or updates the endpoint for the SumoLogic integration",
        "tags": [
          "Sumo Logic Integration"
        ]
      }
    },
    "/v1/integrations/webhooks": {
      "get": {
        "description": "Get all webhook integrations for your organization, optionally filtered to integrations that target the given agent.",
        "operationId": "list_16",
        "parameters": [
          {
            "description": "Only return integrations targeting this agent.",
            "in": "query",
            "name": "agentId",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadWebhookIntegration"
                }
              }
            },
            "description": "Integrations retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List webhook integrations",
        "tags": [
          "Webhook Integration"
        ]
      },
      "post": {
        "description": "Creates a webhook integration. Senders POST events to /v1/integrations/webhooks/{id}/events and authenticate with a Grepr API key (GREPR-API-KEY header).",
        "operationId": "create_14",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteWebhookIntegration"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadWebhookIntegration"
                }
              }
            },
            "description": "Integration created successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "409": {
            "description": "Integration already exists."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a webhook integration",
        "tags": [
          "Webhook Integration"
        ]
      }
    },
    "/v1/integrations/webhooks/{id}": {
      "delete": {
        "description": "Deletes a webhook integration. No-op if already deleted.",
        "operationId": "delete_14",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Integration deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a webhook integration",
        "tags": [
          "Webhook Integration"
        ]
      },
      "get": {
        "description": "Get a webhook integration by ID.",
        "operationId": "get_16",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadWebhookIntegration"
                }
              }
            },
            "description": "Integration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a webhook integration",
        "tags": [
          "Webhook Integration"
        ]
      },
      "put": {
        "description": "Updates a webhook integration. The version should be increased by one for every new update in order for the write to succeed. Otherwise, a \u0027409 Conflict\u0027 will be returned.",
        "operationId": "update_12",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteWebhookIntegration"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadWebhookIntegration"
                }
              }
            },
            "description": "Integration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Integration not found."
          },
          "409": {
            "description": "Integration was modified or deleted concurrently."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a webhook integration",
        "tags": [
          "Webhook Integration"
        ]
      }
    },
    "/v1/integrations/webhooks/{id}/events": {
      "post": {
        "description": "Accepts one JSON event from the sending system and starts an investigation on each target agent of the integration. The org is taken from the Grepr API key and the integration id from the path. Returns 202 with the started investigation ids. Retries after a 5xx may start duplicate investigations.",
        "operationId": "postEvent",
        "parameters": [
          {
            "description": "The webhook integration id.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Investigation(s) started"
          },
          "400": {
            "description": "Body is not valid JSON"
          },
          "401": {
            "description": "API key is invalid"
          },
          "404": {
            "description": "No such webhook integration"
          },
          "409": {
            "description": "The integration has no live target agent to start"
          },
          "413": {
            "description": "Body exceeds the size limit"
          },
          "503": {
            "description": "At least one target agent could not be started for a transient reason; retry"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Submit a webhook event",
        "tags": [
          "Webhook Events"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/estimation-datasets": {
      "get": {
        "description": "Returns datasets that are sinks of the integration\u0027s non-deleted pipelines, each with the pipelines that wire the integration to that dataset and the dataset\u0027s current estimation configuration (or null when not opted in). The estimation configuration is per-dataset and shared across every integration whose pipelines target the same dataset.",
        "operationId": "getEstimationDatasets",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EstimationDatasetSummary"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Estimation dataset summaries retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List estimation-eligible datasets for an integration",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/impacts": {
      "get": {
        "description": "Returns the estimated percentage of the dataset\u0027s raw log volume each of the integration\u0027s parsed alert queries matches, with the time that estimate was measured. Queries that have not been estimated are absent from the response rather than reported as zero. The dataset must be one of those returned by the estimation-datasets endpoint for this integration.",
        "operationId": "getIntegrationExceptionImpactsByDataset",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Dataset the estimates are scoped to",
            "example": "ds-prod-1",
            "in": "query",
            "name": "datasetId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "$ref": "#/components/schemas/ExceptionImpact"
                  },
                  "type": "object"
                }
              }
            },
            "description": "Impact estimates retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration not found, or the dataset is not reachable from it."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get parsed alert query impacts for an integration and dataset",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/usage": {
      "get": {
        "description": "Returns the usage the observability vendor reports for the source of each parsed query, such as when a Datadog dashboard was last viewed and its total views, with whether the last attempt to read it worked. Queries the vendor reported nothing for are absent rather than reported as never viewed.",
        "operationId": "getIntegrationExceptionUsage",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionUsageResponse"
                }
              }
            },
            "description": "Usage retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get the usage of an integration\u0027s parsed queries",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/vendor-estimation-runs": {
      "get": {
        "description": "Returns the integration\u0027s estimation runs newest first, in every state.",
        "operationId": "listVendorEstimationRuns",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum runs to return, 1 to 100",
            "example": 20,
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 20,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/VendorEstimationRun"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Runs retrieved"
          },
          "400": {
            "description": "Bad Request - Limit is outside 1 to 100."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List vendor estimation runs for an integration",
        "tags": [
          "Integration Exceptions"
        ]
      },
      "post": {
        "description": "Creates a run over the given scope and window covering every exception the integration has imported. Runs are counted in the background, in short slices shared fairly between organizations.",
        "operationId": "createVendorEstimationRun",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVendorEstimationRunRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorEstimationRun"
                }
              }
            },
            "description": "Run created"
          },
          "400": {
            "description": "Bad Request - The window is inverted, starts or ends in the future, or is too long."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration not found."
          },
          "409": {
            "description": "Conflict - The organization already has the most runs allowed in progress."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Start a vendor estimation run",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/vendor-estimation-runs/preview": {
      "post": {
        "description": "Returns how many exceptions and distinct queries a run would cover, and which exceptions cannot be counted because their query never parsed. Writes nothing.",
        "operationId": "previewVendorEstimationRun",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVendorEstimationRunRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorEstimationRunPreview"
                }
              }
            },
            "description": "Preview computed"
          },
          "400": {
            "description": "Bad Request - The window is inverted, starts or ends in the future, or is too long."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Preview a vendor estimation run",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/vendor-estimation-runs/{runId}": {
      "delete": {
        "description": "Deletes a stopped, complete or failed run and its results. A run in progress returns 409 and has to be stopped first.",
        "operationId": "deleteVendorEstimationRun",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "runId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Run deleted"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration or run not found."
          },
          "409": {
            "description": "Conflict - The run is in progress; stop it first."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a vendor estimation run",
        "tags": [
          "Integration Exceptions"
        ]
      },
      "get": {
        "description": "Returns the run\u0027s state and progress. Results are readable while it runs.",
        "operationId": "getVendorEstimationRun",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "runId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorEstimationRun"
                }
              }
            },
            "description": "Run retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration or run not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a vendor estimation run",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/vendor-estimation-runs/{runId}/results": {
      "get": {
        "description": "Returns the run\u0027s per-exception estimates keyed by composite exception id. Each is counted, pending, unparseable or an error, selected by its type field. An exception missing from the response was not in this run.",
        "operationId": "getVendorEstimationRunResults",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "runId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "$ref": "#/components/schemas/VendorEstimate"
                  },
                  "type": "object"
                }
              }
            },
            "description": "Results retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration or run not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get vendor estimation results for a run",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/vendor-estimation-runs/{runId}/resume": {
      "post": {
        "description": "Makes a stopped run active again; counting continues where it stopped. Returns 409 for a run that is not stopped, or when the organization has the most runs allowed in progress.",
        "operationId": "resumeVendorEstimationRun",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "runId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorEstimationRun"
                }
              }
            },
            "description": "Run resumed"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration or run not found."
          },
          "409": {
            "description": "Conflict - The run cannot be resumed now."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Resume a stopped vendor estimation run",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/exceptions/vendor-estimation-runs/{runId}/stop": {
      "post": {
        "description": "Stops the run and keeps every count it has made. A stopped run can be resumed or deleted. A no-op on a run that is not in progress.",
        "operationId": "stopVendorEstimationRun",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "runId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorEstimationRun"
                }
              }
            },
            "description": "Run stopped"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration or run not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Stop a vendor estimation run",
        "tags": [
          "Integration Exceptions"
        ]
      }
    },
    "/v1/integrations/{integrationId}/parsed-queries/import": {
      "get": {
        "description": "Says whether this vendor\u0027s parsed queries can be imported, whether the credential the import needs is saved, whether an import is already under way, and which integrations an import covers. Poll this while an import is running; what it imported is reported in the integration\u0027s activity log.",
        "operationId": "getParsedQueryImportStatus",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParsedQueryImportStatus"
                }
              }
            },
            "description": "State retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get parsed-query import state",
        "tags": [
          "Integrations"
        ]
      },
      "post": {
        "description": "Reads the integration\u0027s alert, monitor and dashboard queries from its vendor without waiting for the hourly import. One fetch is shared by every integration in the organization using the same vendor account, so this updates all of them. If an import is already under way this joins it rather than starting another. The import runs in the background; its result appears in the integration\u0027s activity log.",
        "operationId": "importParsedQueries",
        "parameters": [
          {
            "description": "Integration id",
            "example": "0q841q0j81m2q",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParsedQueryImportStatus"
                }
              }
            },
            "description": "Import started, or already under way"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Integration not found."
          },
          "409": {
            "description": "Conflict - This vendor has no parsed queries to import, or the integration has no application key saved."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Import an integration\u0027s parsed queries now",
        "tags": [
          "Integrations"
        ]
      }
    },
    "/v1/investigations": {
      "post": {
        "description": "Triggers an agent investigation with optional free-form context and returns the new investigation id. The investigation is queued and runs asynchronously once the agent has a free concurrency slot. With issueId, a person hands the agent that issue, which becomes the investigation\u0027s subject and records the handoff in its history.",
        "operationId": "start",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartInvestigationRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartInvestigationResponse"
                }
              }
            },
            "description": "Investigation queued"
          },
          "400": {
            "description": "An invalid continuation, or a handoff that is also a continuation or to an agent with no issue tools (a handoff\u0027s refusals carry an issue error body)"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "No permission to run investigations, or a handoff by anyone but a person, by a person who may not edit the issue, or to an agent that may not view and edit it"
          },
          "404": {
            "description": "Agent not found, or the handed issue doesn\u0027t exist or the caller can\u0027t see it"
          },
          "409": {
            "description": "The agent is paused or the continued investigation is still active, or a handoff of a closed issue or to an agent a person removed from it"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartInvestigationRejectedResponse"
                }
              }
            },
            "description": "The agent is at its maximum concurrent investigations and its concurrency-limit policy discards new work instead of queueing it (the response carries the id of the recorded DISCARDED investigation), or the agent\u0027s or its LLM integration\u0027s max tokens are reached (the response carries a code and message)."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Start an investigation",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/cancel": {
      "post": {
        "description": "Marks eligible investigations as CANCELLING in one organization-scoped request. Cancellation is completed asynchronously.",
        "operationId": "batchCancelInvestigations",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchCancelInvestigationsRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCancelInvestigationsResponse"
                }
              }
            },
            "description": "Cancellation requests recorded"
          },
          "400": {
            "description": "The request is empty or contains more than 500 ids"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Cancel multiple investigations",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/cancel-all": {
      "post": {
        "description": "Marks every queued, running, and paused investigation of every agent in the organization as CANCELLING in one request. Cancellation is completed asynchronously. With pause\u003dtrue, every active agent is paused in the same transaction so none starts new investigations; resume each agent to undo it.",
        "operationId": "cancelAllInvestigations",
        "parameters": [
          {
            "description": "Also pause every active agent in the organization",
            "in": "query",
            "name": "pause",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelAllInvestigationsResponse"
                }
              }
            },
            "description": "Cancellation requests recorded"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Cancel every active investigation in the organization",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/cancellable-counts": {
      "get": {
        "description": "Returns how many investigations across every agent in the organization are queued, running, or paused, and so would be cancelled by cancel-all, and whether the caller is authorized to call cancel-all.",
        "operationId": "countCancellableInvestigations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancellableInvestigationsResponse"
                }
              }
            },
            "description": "Counts retrieved"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Count the organization\u0027s active investigations",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/{investigationId}/cancel": {
      "post": {
        "description": "Durably marks an eligible investigation as CANCELLING and returns 202. An asynchronous reconciler cancels its workflow, if one exists, and it then finalizes as CANCELLED.",
        "operationId": "cancel_1",
        "parameters": [
          {
            "in": "path",
            "name": "investigationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Cancel requested"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Investigation not found"
          },
          "409": {
            "description": "Investigation is already finished"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Cancel an investigation",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/{investigationId}/chat": {
      "post": {
        "description": "Creates a new chat seeded with a copy of the investigation\u0027s transcript and returns its chat id, then durably requests the investigation\u0027s cancellation so it does not keep running alongside the chat. Each call opens a separate chat.",
        "operationId": "chat",
        "parameters": [
          {
            "in": "path",
            "name": "investigationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateChatResponse"
                }
              }
            },
            "description": "Chat opened"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Investigation not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Open an investigation as a chat",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/{investigationId}/resume": {
      "post": {
        "description": "Resumes a stopped (resumable) investigation in place. A non-blank message is appended as a new user turn; an empty body continues the agent with no added input.",
        "operationId": "resume",
        "parameters": [
          {
            "in": "path",
            "name": "investigationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResumeInvestigationRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Resume requested"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Investigation not found"
          },
          "409": {
            "description": "Investigation is not resumable"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Resume a stopped investigation",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/{investigationId}/stop": {
      "post": {
        "description": "Durably marks a running investigation as STOPPING and returns 202. An asynchronous reconciler signals the workflow, which pauses at its next turn boundary and records STOPPED; it can then be resumed with a message.",
        "operationId": "stop_1",
        "parameters": [
          {
            "in": "path",
            "name": "investigationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Stop requested"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Investigation not found"
          },
          "409": {
            "description": "Investigation is not running"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Stop a running investigation",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/{investigationId}/transcript": {
      "get": {
        "description": "Returns the investigation\u0027s status, timestamps, summary, and recorded actions. Read transcript content from the cursor-paged turns endpoint.",
        "operationId": "transcript",
        "parameters": [
          {
            "in": "path",
            "name": "investigationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvestigationTranscript"
                }
              }
            },
            "description": "Investigation metadata retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Investigation not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get investigation metadata",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/investigations/{investigationId}/turns": {
      "get": {
        "description": "Returns journalled turns after the given sequence, oldest first.",
        "operationId": "turns_1",
        "parameters": [
          {
            "in": "path",
            "name": "investigationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "afterSeq",
            "schema": {
              "default": -1,
              "format": "int32",
              "minimum": -1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 50,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TranscriptTurnsList"
                }
              }
            },
            "description": "Turns retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Investigation not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Stream an investigation\u0027s transcript turns by sequence cursor",
        "tags": [
          "Investigations"
        ]
      }
    },
    "/v1/invitations": {
      "get": {
        "operationId": "listInvitations",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 10,
              "format": "int32",
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationsList"
                }
              }
            },
            "description": "Invitations made for this organization"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Get all invitations",
        "tags": [
          "Invitations"
        ]
      },
      "post": {
        "operationId": "invite",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Invitee"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Invitations created successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Invite multiple people",
        "tags": [
          "Invitations"
        ]
      }
    },
    "/v1/invitations/{id}": {
      "delete": {
        "operationId": "deleteInvitation",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Invitation deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Delete an invitation",
        "tags": [
          "Invitations"
        ]
      },
      "get": {
        "operationId": "getInvitation",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadInvitation"
                }
              }
            },
            "description": "Invitation retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Get an invitation by id",
        "tags": [
          "Invitations"
        ]
      }
    },
    "/v1/issues": {
      "post": {
        "description": "Files a new issue on the organization\u0027s board. Search first and update an existing issue instead of filing a duplicate; this call never matches existing issues.",
        "operationId": "create_15",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIssueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Issue"
                }
              }
            },
            "description": "Issue filed"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Invalid issue, or a field only people may set"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "No permission to file issues, or to share them with the given teams"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "File an issue",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/access": {
      "get": {
        "description": "Returns which issues you may view and which you may edit: every issue in the organization, or those of some teams. Clients use it to show write controls; every request is still authorized on its own.",
        "operationId": "access",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueAccessScopes"
                }
              }
            },
            "description": "Access retrieved"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get your issue access",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/search": {
      "post": {
        "description": "Returns the issues matching every given filter, ranked by full-text relevance when a query is given and by latest sighting otherwise. By default, open issues plus those closed in the last 30 days.",
        "operationId": "search_1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchIssuesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchIssuesResponse"
                }
              }
            },
            "description": "Search results"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Invalid filters, or a cursor from another search"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "No permission to view issues"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Search issues",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/titles": {
      "get": {
        "description": "Returns the number and title of each issue named, one entry per id in the order sent. Repeat id, up to 100 times. An issue you can\u0027t see, or one that doesn\u0027t exist, comes back as hidden with nothing else.",
        "operationId": "titles",
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "schema": {
              "items": {
                "type": "string"
              },
              "maxItems": 100,
              "minItems": 0,
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueTitles"
                }
              }
            },
            "description": "Titles retrieved"
          },
          "400": {
            "description": "More than 100 ids"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get issue titles",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}": {
      "delete": {
        "description": "Deletes an issue with its comments, history, assignees and sightings. People only. It can\u0027t be undone, and the issue\u0027s number isn\u0027t reused. An issue that others are closed as duplicates of can\u0027t be deleted until they\u0027re reopened or closed another way; the refusal names the ones the caller can see. Links to it from other issues read as hidden.",
        "operationId": "delete_15",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Issue"
                }
              }
            },
            "description": "Issue deleted; the body is the issue as it was"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Not a person, or no permission to edit the issue"
          },
          "404": {
            "description": "Issue not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Other issues are closed as duplicates of it"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete an issue",
        "tags": [
          "Issues"
        ]
      },
      "get": {
        "description": "Returns an issue with its assignees, its newest guidance comments, and its latest comments and history entries; the comments route pages every comment. Plain sightings are left out of that history; the issue\u0027s occurrence counts summarize them, and the history route pages them.",
        "operationId": "get_17",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueDetail"
                }
              }
            },
            "description": "Issue retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Issue not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get an issue",
        "tags": [
          "Issues"
        ]
      },
      "patch": {
        "description": "Changes the given fields and leaves the rest. A person\u0027s change to priority, entities or teams locks that field against agents. A stale version is rejected with the current issue, so the caller can reapply its change.",
        "operationId": "update_13",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateIssueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Issue"
                }
              }
            },
            "description": "Issue updated"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Invalid update, or a field only people may set"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "No permission to edit the issue"
          },
          "404": {
            "description": "Issue not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Stale version, or a field a person locked"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update an issue",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/assignees": {
      "post": {
        "description": "Adds the caller as an active assignee. Joining a Ready issue moves it to In progress; joining again changes nothing, or reactivates a finished assignment.",
        "operationId": "join",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JoinIssueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueAssignees"
                }
              }
            },
            "description": "Joined"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "The issue is closed"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "No permission to edit the issue"
          },
          "404": {
            "description": "Issue not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Stale version; the body carries the current issue"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Join an issue",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/assignees/me": {
      "patch": {
        "description": "Marks the caller\u0027s own assignment done. Join again to pick the work back up.",
        "operationId": "finishAssignment",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FinishAssignmentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueAssignees"
                }
              }
            },
            "description": "Finished"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "The caller is not assigned"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "No permission to edit the issue"
          },
          "404": {
            "description": "Issue not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Stale version; the body carries the current issue"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Finish your assignment",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/assignees/{assigneeKind}/{assigneeId}": {
      "delete": {
        "description": "Removes an assignee. People only; the removal stops agents from changing who is assigned.",
        "operationId": "removeAssignee",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "assigneeKind",
            "required": true,
            "schema": {
              "enum": [
                "PERSON",
                "AGENT"
              ],
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "assigneeId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueAssignees"
                }
              }
            },
            "description": "Removed"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Not a person, or no permission to edit the issue"
          },
          "404": {
            "description": "Issue not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Remove an assignee",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/comments": {
      "get": {
        "description": "Returns an issue\u0027s comments, newest first.",
        "operationId": "comments",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 25,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueCommentsPage"
                }
              }
            },
            "description": "Comments retrieved"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Malformed cursor"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Issue not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List an issue\u0027s comments",
        "tags": [
          "Issues"
        ]
      },
      "post": {
        "description": "Posts a comment, on an open or closed issue. A person may make it guidance, advice every later investigation on the issue\u0027s entities weighs.",
        "operationId": "comment",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostIssueCommentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueComment"
                }
              }
            },
            "description": "Comment posted"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Guidance from an agent, or a bad proposal"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "No permission to edit the issue"
          },
          "404": {
            "description": "Issue not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Stale version; the body carries the current issue"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Comment on an issue",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/comments/{commentId}": {
      "delete": {
        "description": "Deletes a comment the caller wrote: it leaves the issue\u0027s comments, guidance and search. People only. The history keeps its text; deleting a guidance comment changes the issue\u0027s version.",
        "operationId": "deleteComment",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "commentId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Comment deleted"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Not a person, not the comment\u0027s author, or no permission to edit"
          },
          "404": {
            "description": "Issue or comment not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a comment",
        "tags": [
          "Issues"
        ]
      },
      "patch": {
        "description": "Makes a person\u0027s comment guidance, advice agents weigh, or stops it being guidance. People only; an agent\u0027s comment can never be guidance.",
        "operationId": "setCommentGuidance",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "commentId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCommentGuidanceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueComment"
                }
              }
            },
            "description": "Comment updated"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "The comment is an agent\u0027s"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Not a person, or no permission to edit the issue"
          },
          "404": {
            "description": "Issue or comment not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Mark a comment as guidance",
        "tags": [
          "Issues"
        ]
      },
      "put": {
        "description": "Replaces the body of a comment the caller wrote. People only. The history keeps the old text; editing a guidance comment changes the issue\u0027s version.",
        "operationId": "editComment",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "commentId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditIssueCommentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueComment"
                }
              }
            },
            "description": "Comment edited"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Not a person, not the comment\u0027s author, or no permission to edit"
          },
          "404": {
            "description": "Issue or comment not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "The issue changed since the given version"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Edit a comment",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/events": {
      "get": {
        "description": "Returns an issue\u0027s history entries, newest first. Repeat kind to return only those kinds, for example to leave out OCCURRED sightings.",
        "operationId": "events",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 25,
              "format": "int32",
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "kind",
            "schema": {
              "items": {
                "enum": [
                  "CREATED",
                  "UPDATED",
                  "TRANSITIONED",
                  "LOCKS_CHANGED",
                  "COMMENTED",
                  "GUIDANCE_CHANGED",
                  "COMMENT_EDITED",
                  "COMMENT_DELETED",
                  "ASSIGNMENT_CHANGED",
                  "OCCURRED",
                  "HANDED_OFF",
                  "RUN_NOT_STARTED"
                ],
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueEventsPage"
                }
              }
            },
            "description": "History retrieved"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Malformed cursor, or one issued for other kinds"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Issue not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List an issue\u0027s history",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/locks": {
      "put": {
        "description": "Replaces the fields and labels locked against agent changes. Leaving a lock out unlocks it. People only.",
        "operationId": "setLocks",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetIssueLocksRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Issue"
                }
              }
            },
            "description": "Locks set"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "A label lock contradicts the issue\u0027s labels"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "No permission, or not a person"
          },
          "404": {
            "description": "Issue not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Stale version"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Set an issue\u0027s locks",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/occurrences": {
      "post": {
        "description": "Links the calling investigation to the issue once and counts it. A sighting of a fixed or obsolete issue reopens it, and of a Monitoring issue moves it back to In progress, when the investigation started after the issue\u0027s last state change. A duplicate\u0027s sighting lands on its survivor. Only an agent\u0027s investigation can record one.",
        "operationId": "recordOccurrence",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Issue"
                }
              }
            },
            "description": "Sighting recorded"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Not an agent\u0027s investigation, or no permission to edit the issue"
          },
          "404": {
            "description": "Issue not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "ISSUE_EXPIRED: file a new issue. VERSION_CONFLICT: the issue kept changing; retry once. INVALID_DUPLICATE: the issue it duplicates no longer exists"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Record a sighting",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/issues/{idOrNumber}/transitions": {
      "post": {
        "description": "Moves an issue through its lifecycle: Triage, Ready, In progress, Waiting, Monitoring, Closed. Closing needs a resolution; Monitoring needs a revisit time or expiry; both need every assignee done unless a person forces it.",
        "operationId": "transition",
        "parameters": [
          {
            "in": "path",
            "name": "idOrNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransitionIssueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Issue"
                }
              }
            },
            "description": "Issue transitioned"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "The state machine does not allow the transition"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "No permission, or a transition reserved for people"
          },
          "404": {
            "description": "Issue not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueErrorResponse"
                }
              }
            },
            "description": "Stale version, active assignees, or an expired issue"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Change an issue\u0027s state",
        "tags": [
          "Issues"
        ]
      }
    },
    "/v1/jobs": {
      "get": {
        "description": "Get the list of jobs for your organization based on filters.",
        "operationId": "getJobs",
        "parameters": [
          {
            "description": "Optional reference time to fetch jobs after. The value must represent a valid instant in UTC parseable using DateTimeFormatter.ISO_INSTANT. Eg: 2007-12-03T10:15:30.00Z",
            "in": "query",
            "name": "since",
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Optional filter to fetch jobs of specific execution types",
            "in": "query",
            "name": "execution",
            "schema": {
              "enum": [
                "SYNCHRONOUS",
                "ASYNCHRONOUS"
              ],
              "type": "string"
            }
          },
          {
            "description": "Optional filter to fetch jobs of specific processing types",
            "in": "query",
            "name": "processing",
            "schema": {
              "enum": [
                "BATCH",
                "STREAMING"
              ],
              "type": "string"
            }
          },
          {
            "description": "Optional flag to fetch only the latest versions of the jobs",
            "in": "query",
            "name": "latest",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Optional filter to fetch a subset of states",
            "in": "query",
            "name": "state",
            "schema": {
              "items": {
                "enum": [
                  "CREATED",
                  "PENDING",
                  "INFRA_UPDATE",
                  "INFRA_UPDATE_WAIT",
                  "VERIFYING",
                  "WAITING",
                  "RUNNING",
                  "STOPPED",
                  "FINISHED",
                  "FAILED",
                  "CANCELLED",
                  "DELETED",
                  "UPDATING",
                  "STARTING",
                  "RESTARTING",
                  "STOPPING",
                  "ROLLING_BACK",
                  "DELETING"
                ],
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            }
          },
          {
            "description": "Optional filter to fetch specific jobs by name",
            "in": "query",
            "name": "name",
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            }
          },
          {
            "description": "Optional filter to fetch specific jobs by id",
            "in": "query",
            "name": "id",
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            }
          },
          {
            "description": "Optional filter to fetch only jobs carrying every given tag, each as key:value",
            "example": "type:backfill",
            "in": "query",
            "name": "tag",
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsCollectionReadJob"
                }
              }
            },
            "description": "Jobs retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List jobs",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/async": {
      "post": {
        "description": "Submit an async job (`streaming` or `batch`). This is an asynchronous operation which returns an identifier (field: `id`) for the job to be created, in the response. The id can be used to query the status of the job using the `GET` jobs endpoint. Job creation lifecycle is represented by the state field in the `GET` response. States represent the following:\n - `PENDING`: Job has been successfully accepted for submission\n - `WAITING`: Job is waiting on other jobs to finish to be submitted.\n - `STARTING`: Job is being transitioned to the `RUNNING` state.\n - `RUNNING`: Job is running.\n - `FAILED` : Job creation failed.\n",
        "operationId": "submitAsyncJob",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateJob"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadJob"
                }
              }
            },
            "description": "Async job submitted successfully"
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Submit an Asynchronous Job",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/backfills": {
      "post": {
        "description": "Creates a logs or spans backfill batch job from backfill parameters (time window, query, vendor sinks, and optional type-specific fields). The `dataType` selects the built-in logs or spans template. This is an asynchronous batch job: the response returns an identifier (field: `id`) that can be used to query the status of the job using the `GET` jobs endpoint. The server builds the backfill job graph from the parameters, so callers do not assemble it themselves.",
        "operationId": "submitBackfillJob",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBackfillJob"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadJob"
                }
              }
            },
            "description": "Backfill job submitted successfully"
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a backfill job",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/sync": {
      "post": {
        "description": "Submits a job whose results will be returned synchronously as a stream of nd-json. Both streaming and batch jobs using a source with synchronous processing type are supported. The returned data is new-line delimited json log event records. The returned data will be wrapped in an EventRecord object that contains the state of the job. The server will periodically send heartbeats to the client through the same stream so the client knows the server is still alive. The client in return should send a heartbeat back to the server using the `/sync/heartbeat` endpoint to keep the connection alive. The client should use the heartbeat token returned in the EventRecord object to send the heartbeat. The connection will be closed if the client does not send a heartbeat within the timeout period. Additionally, the connection will close if the job fails or finished, or if the job runs for too long. This last timeout is dependent on whether the job is a batch or streaming job.",
        "operationId": "submitSyncJob",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateJob"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/x-ndjson": {
                "schema": {
                  "$ref": "#/components/schemas/EventRecord"
                }
              }
            },
            "description": "Sync job submitted successfully"
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Submit a sync job",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/sync/heartbeat": {
      "post": {
        "description": "Sends a heartbeat to a synchronous job to keep it alive. This is needed to keep the connection open and to prevent the server from closing it.",
        "operationId": "heartbeatSyncJob",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Heartbeat submitted successfully"
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Heartbeat a sync job to keep it alive",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/{id}": {
      "delete": {
        "description": "Delete an asynchronous streaming job. This is an asynchronous operation which cleans up all resources associated with the job. Job deletion lifecycle is represented by the state field in the GET jobs response. Following states can be expected in the response:\n - `PENDING`: Job is being transitioned to the DELETED state.\n - `DELETED`: Job is deleted.",
        "operationId": "deleteJob",
        "parameters": [
          {
            "description": "Id of the job to delete",
            "example": "0ABC12DEF4G",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Job deletion request accepted"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete an Asynchronous Streaming Job",
        "tags": [
          "Jobs"
        ]
      },
      "get": {
        "description": "Gets a job with the given id. If version is not specified, the latest version is returned, otherwise, the job with the specified version is returned. If the job has templates, the \u0027resolved\u0027 query parameter can be used to resolve templates and return the fully resolved job.",
        "operationId": "getJob",
        "parameters": [
          {
            "description": "Id of the job to retrieve",
            "example": "0ABC12DEF4G",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Version of the job to retrieve",
            "example": 1,
            "in": "query",
            "name": "version",
            "schema": {
              "format": "int64",
              "type": "integer"
            }
          },
          {
            "description": "If set to true, the job will be resolved into a subgraph with all templates resolved. If false, the job will be returned as is.",
            "example": true,
            "in": "query",
            "name": "resolved",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadJob"
                }
              }
            },
            "description": "Job retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Job not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a job",
        "tags": [
          "Jobs"
        ]
      },
      "put": {
        "description": "Updates an asynchronous streaming job. This is an asynchronous operation which returns an identifier (field: id) for the job to be created, in the response. The id can be used to query the status of the job using the GET jobs endpoint. If a change in the job graph is detected, a new version of the job will be created and sent back in the response object. Job update lifecycle is represented by the state field in the GET response. Following states can be expected in the response:\n - PENDING:        Job is in the process of being updated.\n - RUNNING:        Job is running.\n - STOPPED:        Job is stopped.\n - FAILED:         Job update failed.\n - INFRA_UPDATE:   Job is undergoing an infra change.",
        "operationId": "updateJob",
        "parameters": [
          {
            "description": "Id of the job to update",
            "example": "0ABC12DEF4G",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "If set to true, the rollback path will be enabled if this job update fails.",
            "example": false,
            "in": "query",
            "name": "rollbackEnabled",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateJob"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Job updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Job not found."
          },
          "409": {
            "description": "Job update failed due a conflicting update request."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update an Asynchronous Streaming Job",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/{id}/jobs": {
      "get": {
        "operationId": "getAsyncBatchJobsForJob-hidden",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "ruleEngineName",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "triggerIds",
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ReadJob"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Successfully retrieved backfill jobs for org."
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/{id}/progress": {
      "get": {
        "description": "Gets what a logs backfill is doing: waiting, selecting its events with Athena, or sending them, with how many it has read and each vendor has received. Read live while the backfill runs; the final counts once it ends.",
        "operationId": "getBackfillProgress",
        "parameters": [
          {
            "description": "Id of the backfill",
            "example": "0ABC12DEF4G",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BackfillProgress"
                }
              }
            },
            "description": "Progress retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "No logs backfill has this id."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get a backfill\u0027s progress",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/{id}/tags": {
      "put": {
        "description": "Replaces all tags on the job\u0027s latest version. This does not create a new version or restart the job. Tags can be changed only while the pipeline is running or stopped. A job can have at most 10 tags; keys can be at most 64 characters and values at most 256.",
        "operationId": "updateJobTags",
        "parameters": [
          {
            "description": "Id of the job",
            "example": "0ABC12DEF4G",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadJob"
                }
              }
            },
            "description": "Tags updated"
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Job not found."
          },
          "409": {
            "description": "The pipeline is not running or stopped."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update Job Tags",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/llm-usage/{integrationId}": {
      "get": {
        "operationId": "currentWindow",
        "parameters": [
          {
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LlmUsageWindow"
                }
              }
            },
            "description": "Current window retrieved"
          }
        },
        "summary": "Get the current maxTokens window of one LLM integration",
        "tags": [
          "LLM Usage"
        ]
      }
    },
    "/v1/manifest": {
      "get": {
        "description": "Returns authentication configuration and other manifest data needed by the frontend",
        "operationId": "getManifest",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Manifest"
                }
              }
            },
            "description": "Successfully retrieved manifest"
          }
        },
        "summary": "Get application manifest",
        "tags": [
          "Manifest"
        ]
      }
    },
    "/v1/masking/mask": {
      "post": {
        "description": "Applies a masking operator\u0027s masks to sample log events and returns the masked result for each, so the editor can preview a configuration without deploying it. The operator\u0027s predicate gates which logs are masked in production, not how, so it is ignored here and the masks are applied to every sample.",
        "operationId": "mask",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaskingRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaskingResponse"
                }
              }
            },
            "description": "Sample masked successfully."
          },
          "400": {
            "description": "The masking configuration is invalid or could not be compiled."
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Apply masks to samples",
        "tags": [
          "Masking"
        ]
      }
    },
    "/v1/me/login": {
      "post": {
        "operationId": "recordLogin",
        "responses": {
          "default": {
            "content": {
              "application/json": {}
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Users"
        ]
      }
    },
    "/v1/me/permissions": {
      "get": {
        "operationId": "getUserPermissions",
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissionsResponse"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Users"
        ]
      }
    },
    "/v1/me/provision": {
      "put": {
        "operationId": "provisionUser",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserProvisionInfo"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {}
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Users"
        ]
      }
    },
    "/v1/metrics/query": {
      "post": {
        "operationId": "query",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "time": {
                    "format": "double",
                    "type": "number"
                  },
                  "timeout": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryResult"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Status Metrics"
        ]
      }
    },
    "/v1/metrics/query_range": {
      "post": {
        "operationId": "queryRange",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "properties": {
                  "end": {
                    "format": "double",
                    "type": "number"
                  },
                  "query": {
                    "type": "string"
                  },
                  "start": {
                    "format": "double",
                    "type": "number"
                  },
                  "step": {
                    "format": "float",
                    "type": "number"
                  },
                  "timeout": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryResult"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Status Metrics"
        ]
      }
    },
    "/v1/metrics/scrape": {
      "get": {
        "description": "Returns metrics for the organization in Prometheus text exposition format (0.0.4). Selected when the Accept header prefers text/plain;version\u003d0.0.4.",
        "operationId": "scrapePrometheus",
        "responses": {
          "default": {
            "content": {
              "text/plain; version\u003d0.0.4; charset\u003dutf-8": {}
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Scrape metrics in Prometheus text exposition format",
        "tags": [
          "Status Metrics"
        ]
      }
    },
    "/v1/organization": {
      "get": {
        "description": "Get the organization to which the authenticated user belongs.",
        "operationId": "getOrganization",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Read"
                }
              }
            },
            "description": "The organization for the authenticated user."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get Organization",
        "tags": [
          "Organizations"
        ]
      },
      "put": {
        "description": "Update the organization to which the authenticated user belongs.",
        "operationId": "updateOrganization",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Read"
                }
              }
            },
            "description": "The updated organization."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "500": {
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update Organization",
        "tags": [
          "Organizations"
        ]
      }
    },
    "/v1/organization/access-config": {
      "get": {
        "description": "Returns the current access configuration for the organization.",
        "operationId": "getAccessConfig",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessConfig"
                }
              }
            },
            "description": "Access configuration retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get the access configuration for the organization",
        "tags": [
          "Access Configuration"
        ]
      },
      "put": {
        "description": "Updates the access configuration for the organization.",
        "operationId": "updateAccessConfig",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccessConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessConfig"
                }
              }
            },
            "description": "Access configuration updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update access configuration for the organization",
        "tags": [
          "Access Configuration"
        ]
      }
    },
    "/v1/organization/sso-request": {
      "post": {
        "description": "Sends a notification to the Grepr team requesting that SSO be enabled for the authenticated user\u0027s organization.",
        "operationId": "requestSsoEnablement",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SsoEnablementRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "SSO enablement request sent."
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "409": {
            "description": "An SSO connection is already enabled for the organization, or a request has already been submitted."
          },
          "500": {
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Request SSO enablement",
        "tags": [
          "Organizations"
        ]
      }
    },
    "/v1/permissions": {
      "get": {
        "description": "Returns all permissions available for assignment to organization wide roles.",
        "operationId": "getAvailablePermissions",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AvailablePermission"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Permissions retrieved successfully"
          },
          "403": {
            "description": "Insufficient permissions"
          }
        },
        "summary": "Get available permissions",
        "tags": [
          "Permission"
        ]
      }
    },
    "/v1/pipelines/{jobId}/apply-change": {
      "post": {
        "description": "Deep-merges a partial templateInputs patch into the pipeline\u0027s current configuration and verifies the result against the supplied samples. A change that fails verification is rejected with findings and nothing is touched. A change that verifies cleanly is recorded as an agent suggestion for human review when the proposing agent requires approval, and applied as a new job version otherwise. Works only on pipelines with a single template-operation vertex.",
        "operationId": "applyChange",
        "parameters": [
          {
            "description": "Id of the pipeline to change",
            "example": "0ABC12DEF4G",
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PipelineChangeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PipelineChangeResult"
                }
              }
            },
            "description": "Change applied, recorded as a suggestion, or rejected with findings"
          },
          "400": {
            "description": "The request is malformed or the pipeline is not templated"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Pipeline not found"
          },
          "409": {
            "description": "The pipeline changed while the request was being verified"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Verify and apply or suggest a pipeline change",
        "tags": [
          "Pipeline Changes"
        ]
      }
    },
    "/v1/pipelines/{pipelineId}/exceptions/estimation-datasets": {
      "get": {
        "description": "Returns the pipeline\u0027s sink datasets, each joined with the dataset\u0027s current estimation configuration (or null when the dataset is not opted in). The estimation configuration is per-dataset and shared across every pipeline whose sink targets the same dataset.",
        "operationId": "getEstimationDatasets_1",
        "parameters": [
          {
            "description": "Pipeline ID to list estimation datasets for",
            "example": "pipe-prod-1",
            "in": "path",
            "name": "pipelineId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EstimationDatasetSummary"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Estimation dataset summaries retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Pipeline not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List estimation-eligible datasets for a pipeline",
        "tags": [
          "Pipeline Exceptions"
        ]
      }
    },
    "/v1/pipelines/{pipelineId}/exceptions/impact-estimation-reset": {
      "post": {
        "description": "Clears the cached impact percentage and last-updated timestamp on estimation rows in the pipeline\u0027s scope. The hourly impact-estimation cycle picks up the cleared rows on its next tick; fresh values appear on a later poll. Rows currently being processed by an active estimation job are skipped and retain their values until that job completes. Returns the number of rows cleared; zero indicates a no-op (no opted-in sink datasets, or no estimation-capable source integrations).",
        "operationId": "resetImpactEstimation",
        "parameters": [
          {
            "description": "Pipeline ID to reset estimations for",
            "example": "pipe-prod-1",
            "in": "path",
            "name": "pipelineId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResetImpactEstimationResponse"
                }
              }
            },
            "description": "Reset complete"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Pipeline not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Reset impact estimations for a pipeline",
        "tags": [
          "Pipeline Exceptions"
        ]
      }
    },
    "/v1/pipelines/{pipelineId}/exceptions/integrations/{integrationId}/impacts": {
      "get": {
        "description": "Returns the per-exception impact percentages the runtime auto-sync threshold filter would compare against for this pipeline/integration pair, each with the time that estimate was measured. The pipeline\u0027s sink dataset scopes the lookup; exceptions without an estimation row are absent from the response rather than reported as zero.",
        "operationId": "getIntegrationExceptionImpacts",
        "parameters": [
          {
            "description": "Pipeline ID providing the dataset scope",
            "example": "pipe-prod-1",
            "in": "path",
            "name": "pipelineId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Integration whose exceptions to look up impacts for",
            "example": "int-dd-1",
            "in": "path",
            "name": "integrationId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "$ref": "#/components/schemas/ExceptionImpact"
                  },
                  "type": "object"
                }
              }
            },
            "description": "Impact percentages retrieved"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found - Pipeline not found."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get integration exception impacts for a pipeline",
        "tags": [
          "Pipeline Exceptions"
        ]
      }
    },
    "/v1/query/analytics-draft": {
      "post": {
        "description": "Checks request constraints and server limits for an analytics draft. When those pass, translates the whole query once and reports its first SQL failure. Diagnostics name the field when it is known, or the query as a whole. Draft feedback is advisory; submission still validates against the actual table and engine. The query is deliberately not bean-validated on the way in, so incomplete drafts receive diagnostics rather than a rejected request.",
        "operationId": "checkAnalyticsDraft",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnalyticsDraftRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalyticsDraftResponse"
                }
              }
            },
            "description": "Diagnostics for the analytics draft."
          },
          "400": {
            "description": "The query is missing."
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "The caller cannot view the requested dataset."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Check an analytics query being written",
        "tags": [
          "Query Parsing"
        ]
      }
    },
    "/v1/query/analytics-vocabulary": {
      "get": {
        "description": "Returns parser-approved expression functions and logical log fields. With a dataset, includes that dataset\u0027s promoted logs_raw tag keys.",
        "operationId": "getAnalyticsVocabulary",
        "parameters": [
          {
            "description": "Dataset whose promoted logs_raw tags should be included.",
            "in": "query",
            "name": "datasetId",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalyticsVocabularyResponse"
                }
              }
            },
            "description": "Analytics vocabulary returned successfully."
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get analytics expression vocabulary",
        "tags": [
          "Query Parsing"
        ]
      }
    },
    "/v1/query/parse": {
      "post": {
        "description": "Parses a query and returns the parsed query. If the query is invalid, an error is returned.",
        "operationId": "parse_2",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParseQueryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParseQueryResponse"
                }
              }
            },
            "description": "Query is parsed successfully."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryParsingError"
                }
              }
            },
            "description": "Query is invalid or could not be parsed."
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Parses a query",
        "tags": [
          "Query Parsing"
        ]
      }
    },
    "/v1/roles": {
      "get": {
        "description": "Returns all roles available for the organization",
        "operationId": "listRoles",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Role"
                  },
                  "type": "array",
                  "uniqueItems": true
                }
              }
            },
            "description": "List of roles retrieved successfully"
          },
          "403": {
            "description": "Insufficient permissions"
          }
        },
        "summary": "List all available roles for the organization",
        "tags": [
          "Roles"
        ]
      },
      "post": {
        "description": "Creates a new custom role with specified permissions",
        "operationId": "createRole",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRole"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            },
            "description": "Role created successfully"
          },
          "400": {
            "description": "Invalid request data"
          },
          "403": {
            "description": "Insufficient permissions"
          },
          "409": {
            "description": "Role name already exists"
          }
        },
        "summary": "Create a new custom role",
        "tags": [
          "Roles"
        ]
      }
    },
    "/v1/roles/{roleId}": {
      "delete": {
        "description": "Deletes a custom role. System roles cannot be deleted.",
        "operationId": "deleteRole",
        "parameters": [
          {
            "in": "path",
            "name": "roleId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Role deleted successfully"
          },
          "400": {
            "description": "Cannot delete system role or role in use"
          },
          "403": {
            "description": "Insufficient permissions"
          },
          "404": {
            "description": "Role not found"
          }
        },
        "summary": "Delete a custom role",
        "tags": [
          "Roles"
        ]
      },
      "get": {
        "description": "Returns details of a specific role by its ID",
        "operationId": "getRoleById",
        "parameters": [
          {
            "in": "path",
            "name": "roleId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            },
            "description": "Role retrieved successfully"
          },
          "403": {
            "description": "Insufficient permissions"
          },
          "404": {
            "description": "Role not found"
          }
        },
        "summary": "Get role by ID",
        "tags": [
          "Roles"
        ]
      },
      "put": {
        "description": "Updates an existing custom role. System roles cannot be updated.",
        "operationId": "updateRole",
        "parameters": [
          {
            "in": "path",
            "name": "roleId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRole"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            },
            "description": "Role updated successfully"
          },
          "400": {
            "description": "Invalid request data or system role"
          },
          "403": {
            "description": "Insufficient permissions"
          },
          "404": {
            "description": "Role not found"
          },
          "409": {
            "description": "Role name already exists"
          }
        },
        "summary": "Update a custom role",
        "tags": [
          "Roles"
        ]
      }
    },
    "/v1/service-accounts": {
      "get": {
        "description": "Lists all service accounts for the organization with pagination support",
        "operationId": "listServiceAccounts",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 10,
              "format": "int32",
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountsList"
                }
              }
            },
            "description": "Service accounts retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List service accounts",
        "tags": [
          "Service Accounts"
        ]
      },
      "post": {
        "description": "Creates a new service account with OAuth2 client credentials for programmatic API access",
        "operationId": "createServiceAccount",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateServiceAccount"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountWithSecret"
                }
              }
            },
            "description": "Service account created successfully"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "500": {
            "description": "Service accounts not supported or internal error"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a service account",
        "tags": [
          "Service Accounts"
        ]
      }
    },
    "/v1/service-accounts/{id}": {
      "delete": {
        "description": "Deletes a service account and immediately revokes all API access using its credentials",
        "operationId": "deleteServiceAccount",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Service account deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Service account not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete service account",
        "tags": [
          "Service Accounts"
        ]
      },
      "get": {
        "description": "Gets the details of a specific service account",
        "operationId": "getServiceAccount",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountRead"
                }
              }
            },
            "description": "Service account retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Service account not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get service account details",
        "tags": [
          "Service Accounts"
        ]
      },
      "put": {
        "description": "Updates the name and role assignments of a service account",
        "operationId": "updateServiceAccount",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateServiceAccount"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountRead"
                }
              }
            },
            "description": "Service account updated successfully"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Service account not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update service account",
        "tags": [
          "Service Accounts"
        ]
      }
    },
    "/v1/service-accounts/{id}/secret": {
      "get": {
        "description": "Retrieves the OAuth2 client secret for a service account",
        "operationId": "getServiceAccountSecret",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Secret retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Service account not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get service account secret",
        "tags": [
          "Service Accounts"
        ]
      }
    },
    "/v1/service-accounts/{id}/secret/regenerate": {
      "post": {
        "description": "Generates a new OAuth2 client secret for the service account. The old secret will be invalidated immediately.",
        "operationId": "regenerateServiceAccountSecret",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Secret regenerated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Service account not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Regenerate service account secret",
        "tags": [
          "Service Accounts"
        ]
      }
    },
    "/v1/signup": {
      "post": {
        "operationId": "signup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignupRequest"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Read"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "Signup"
        ]
      }
    },
    "/v1/skills": {
      "get": {
        "operationId": "list_4",
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SkillView"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Skills retrieved successfully"
          }
        },
        "summary": "List skills"
      },
      "post": {
        "operationId": "create_3",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSkillRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkillView"
                }
              }
            },
            "description": "Skill created successfully"
          }
        },
        "summary": "Create an organization skill"
      }
    },
    "/v1/skills/{id}": {
      "delete": {
        "operationId": "archive",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "expectedRevision",
            "required": true,
            "schema": {
              "format": "int64",
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {}
            },
            "description": "default response"
          }
        },
        "summary": "Archive an organization skill"
      },
      "get": {
        "operationId": "get_4",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkillView"
                }
              }
            },
            "description": "Skill retrieved successfully"
          }
        },
        "summary": "Get a skill"
      },
      "put": {
        "operationId": "update_1",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSkillRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkillView"
                }
              }
            },
            "description": "Skill updated successfully"
          }
        },
        "summary": "Update an organization skill"
      }
    },
    "/v1/sso-claim-mapping": {
      "get": {
        "description": "Returns all configured SSO claim-to-role mappings for the organization",
        "operationId": "listClaimMappings",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ReadSsoClaimMapping"
                  },
                  "type": "array"
                }
              }
            },
            "description": "List of claim mappings retrieved successfully"
          },
          "403": {
            "description": "Insufficient permissions"
          }
        },
        "summary": "List all SSO claim mappings",
        "tags": [
          "SSO Claim Mappings"
        ]
      },
      "post": {
        "description": "Creates a new SSO claim mapping that assigns roles when token claims match",
        "operationId": "createClaimMapping",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteSsoClaimMapping"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Claim mapping created successfully"
          },
          "400": {
            "description": "Invalid request data (missing required fields, invalid role/team IDs, or validation failed)"
          },
          "403": {
            "description": "Insufficient permissions"
          },
          "409": {
            "description": "Claim mapping with this key-value pair already exists"
          }
        },
        "summary": "Create a new SSO claim mapping",
        "tags": [
          "SSO Claim Mappings"
        ]
      }
    },
    "/v1/sso-claim-mapping/{id}": {
      "delete": {
        "description": "Deletes an existing SSO claim mapping",
        "operationId": "deleteClaimMapping",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Claim mapping deleted successfully"
          },
          "403": {
            "description": "Insufficient permissions"
          },
          "404": {
            "description": "Claim mapping not found"
          }
        },
        "summary": "Delete an SSO claim mapping",
        "tags": [
          "SSO Claim Mappings"
        ]
      },
      "get": {
        "description": "Returns details of a specific SSO claim mapping",
        "operationId": "getClaimMapping",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSsoClaimMapping"
                }
              }
            },
            "description": "Claim mapping retrieved successfully"
          },
          "403": {
            "description": "Insufficient permissions"
          },
          "404": {
            "description": "Claim mapping not found"
          }
        },
        "summary": "Get claim mapping by ID",
        "tags": [
          "SSO Claim Mappings"
        ]
      },
      "put": {
        "description": "Updates an existing SSO claim mapping",
        "operationId": "updateClaimMapping",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteSsoClaimMapping"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadSsoClaimMapping"
                }
              }
            },
            "description": "Claim mapping updated successfully"
          },
          "400": {
            "description": "Invalid request data (missing required fields, invalid role/team IDs, or validation failed)"
          },
          "403": {
            "description": "Insufficient permissions"
          },
          "404": {
            "description": "Claim mapping not found"
          },
          "409": {
            "description": "Claim mapping with this key-value pair already exists"
          }
        },
        "summary": "Update an SSO claim mapping",
        "tags": [
          "SSO Claim Mappings"
        ]
      }
    },
    "/v1/teams": {
      "get": {
        "description": "Get all the teams for the organization.",
        "operationId": "listTeams",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ReadTeam"
                  },
                  "type": "array"
                }
              }
            },
            "description": "The list of teams in the organization."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get Teams",
        "tags": [
          "Teams"
        ]
      },
      "post": {
        "operationId": "createTeam",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Update"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadTeam"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Teams"
        ]
      }
    },
    "/v1/teams/{id}": {
      "delete": {
        "operationId": "deleteTeam",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {}
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Teams"
        ]
      },
      "get": {
        "operationId": "getTeamById",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadTeam"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Teams"
        ]
      },
      "put": {
        "operationId": "updateTeam",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Update"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadTeam"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Teams"
        ]
      }
    },
    "/v1/teams/{id}/roles": {
      "get": {
        "description": "Returns the leader and member roles available for assignment in this team",
        "operationId": "getTeamRoles",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Role"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Team roles retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get available roles for a team",
        "tags": [
          "Teams"
        ]
      }
    },
    "/v1/teams/{id}/users": {
      "get": {
        "operationId": "getUsersInTeam",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 10,
              "format": "int32",
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "minimum": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsersListInfos"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Teams"
        ]
      },
      "post": {
        "description": "Add users to a team.",
        "operationId": "addUsersToTeam",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UsersUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsersUpdate"
                }
              }
            },
            "description": "The list of users and roles that were successfully assigned."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Add users to a team",
        "tags": [
          "Teams"
        ]
      }
    },
    "/v1/teams/{id}/users/{userId}": {
      "delete": {
        "description": "Remove a user from the team.",
        "operationId": "removeUserFromTeam",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "User removed from team successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Removes a user from the team",
        "tags": [
          "Teams"
        ]
      }
    },
    "/v1/teams/{id}/users/{userId}/roles": {
      "put": {
        "operationId": "updateRolesForUserInTeam",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleUpdate"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleUpdate"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Teams"
        ]
      }
    },
    "/v1/templates": {
      "get": {
        "description": "Lists templates a user has access to. Only returns the latest versions of each.",
        "operationId": "listTemplates",
        "responses": {
          "200": {
            "description": "Results returned successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List templates",
        "tags": [
          "Templates"
        ]
      },
      "post": {
        "description": "Creates a new template for generating job subgraphs.",
        "operationId": "createTemplate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Template"
              }
            }
          },
          "description": "The template to create.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Template created successfully"
          },
          "400": {
            "description": "Invalid template data"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a template",
        "tags": [
          "Templates"
        ]
      }
    },
    "/v1/templates/test": {
      "post": {
        "description": "Runs a template script and returns the result. The result should be deserializable to a GreprJobGraph if the \u0027testDeserialization\u0027 parameter is true in the payload.",
        "operationId": "testTemplate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateAndInputs"
              }
            }
          },
          "description": "Template and input values for the template.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GreprJobGraph"
                }
              }
            },
            "description": "Job graph generated successfully"
          },
          "400": {
            "description": "Invalid input"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Code generation limit exceeded for bad code. This can happen if the template runs too long or uses too many resources. The organization will be throttled for executing too many bad code generations."
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Runs a template script and returns the result.",
        "tags": [
          "Templates"
        ]
      }
    },
    "/v1/templates/{id}": {
      "delete": {
        "description": "Deletes all versions of a template if no job is currently using it.",
        "operationId": "deleteTemplate",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Template deleted successfully (or didn\u0027t exist)"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Template not found"
          },
          "409": {
            "description": "Template is in use by an active job"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Delete a template",
        "tags": [
          "Templates"
        ]
      },
      "get": {
        "description": "Gets all versions of a template by ID. Supports query params: latest\u003dtrue for the latest version, version\u003dx for a specific version. If both are specified, latest takes precedence.",
        "operationId": "getTemplate",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "latest",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "version",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            },
            "description": "Template retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Template not found"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Gets templates by ID",
        "tags": [
          "Templates"
        ]
      },
      "put": {
        "description": "Updates a template by ID. The previous version is tombstoned.",
        "operationId": "updateTemplate",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Template"
              }
            }
          },
          "description": "The updated template.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            },
            "description": "Template updated successfully"
          },
          "400": {
            "description": "Template not found"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Update a template",
        "tags": [
          "Templates"
        ]
      }
    },
    "/v1/triggers": {
      "post": {
        "operationId": "submitTrigger",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExternalTriggerPayload"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted"
          },
          "401": {
            "description": "API key is invalid"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          }
        ],
        "summary": "Submit trigger",
        "tags": [
          "External Triggers"
        ]
      }
    },
    "/v1/users": {
      "get": {
        "description": "Get all users in the system.",
        "operationId": "list_17",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 0,
              "format": "int32",
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "default": 10,
              "format": "int32",
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsersListInfos"
                }
              }
            },
            "description": "Users retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "List all users",
        "tags": [
          "Users"
        ]
      },
      "post": {
        "description": "Create a new user and add them to the organization.",
        "operationId": "createUser",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUser"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadUser"
                }
              }
            },
            "description": "User created successfully"
          },
          "400": {
            "description": "Invalid user data"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Unauthorized"
          },
          "409": {
            "description": "User already exists"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Create a new user",
        "tags": [
          "Users"
        ]
      }
    },
    "/v1/users/{id}": {
      "delete": {
        "operationId": "deleteUser",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "application/json": {}
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Users"
        ]
      },
      "get": {
        "description": "Get a user by their ID.",
        "operationId": "getUser",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadUser"
                }
              }
            },
            "description": "User retrieved successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "User not found"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Get user by ID",
        "tags": [
          "Users"
        ]
      },
      "put": {
        "operationId": "updateUser",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteUser"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadUser"
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Users"
        ]
      }
    },
    "/v1/users/{id}/orgRoles": {
      "put": {
        "operationId": "updateUserOrgRoles",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleIds"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Role"
                  },
                  "type": "array",
                  "uniqueItems": true
                }
              }
            },
            "description": "default response"
          }
        },
        "security": [
          {
            "grepr-oidc": []
          }
        ],
        "tags": [
          "Users"
        ]
      }
    },
    "/v1/validation/sql/flink": {
      "post": {
        "description": "Validates that the given Flink SQL query is valid.",
        "operationId": "validate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/plain": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParseQueryResponse"
                }
              }
            },
            "description": "The query is valid."
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "grepr-api-key": []
          },
          {
            "grepr-oidc": []
          }
        ],
        "summary": "Validate a Flink SQL query",
        "tags": [
          "Validation"
        ]
      }
    }
  },
  "tags": [
    {
      "description": "",
      "name": "Grepr-hosted Data Warehouse Integration"
    },
    {
      "description": "",
      "name": "External S3 Data Warehouse Integration"
    },
    {
      "description": "",
      "name": "Datadog Integration"
    },
    {
      "description": "",
      "name": "New Relic Integration"
    },
    {
      "description": "",
      "name": "Splunk Integration"
    },
    {
      "description": "",
      "name": "Sumo Logic Integration"
    },
    {
      "description": "",
      "name": "OpenTelemetry Integration"
    },
    {
      "description": "",
      "name": "Grepr API Key"
    },
    {
      "description": "",
      "name": "Jobs"
    },
    {
      "description": "Manages job templates for reusable pipeline components",
      "name": "Templates"
    },
    {
      "description": "A dataset is the unit of storage in Grepr. A dataset tells a Grepr pipeline where data of various types should be stored and it tells the query engine where to read data from when queried.",
      "name": "Datasets"
    },
    {
      "description": "",
      "name": "Status Metrics"
    },
    {
      "description": "",
      "name": "External Triggers"
    },
    {
      "description": "",
      "name": "Operations"
    },
    {
      "description": "",
      "name": "Transforms"
    },
    {
      "description": "",
      "name": "Sources"
    },
    {
      "description": "",
      "name": "Sinks"
    },
    {
      "description": "",
      "name": "Job Actions"
    },
    {
      "description": "",
      "name": "Triggers"
    },
    {
      "description": "Manage teams within your organization",
      "name": "Teams"
    },
    {
      "description": "Manage users and access current user information",
      "name": "Users"
    },
    {
      "description": "Manage organization settings and configuration",
      "name": "Organizations"
    },
    {
      "description": "Manage roles and role assignments",
      "name": "Roles"
    },
    {
      "description": "Manage permissions and access control",
      "name": "Permission"
    },
    {
      "description": "Manage user invitations to your organization",
      "name": "Invitations"
    },
    {
      "description": "View and search activity logs for auditing, monitoring, and troubleshooting",
      "name": "Activity Logs"
    },
    {
      "description": "Configure organization access settings",
      "name": "Access Configuration"
    },
    {
      "description": "Monitor and manage job anomalies",
      "name": "Job Anomalies"
    },
    {
      "description": "Utilities for Grok pattern parsing",
      "name": "Grok Parsing"
    },
    {
      "description": "Utilities for query parsing and validation",
      "name": "Query Parsing"
    },
    {
      "description": "Validation utilities for Flink SQL and other configurations",
      "name": "Validation"
    },
    {
      "description": "Application manifest and version information",
      "name": "Manifest"
    },
    {
      "description": "Sign up for a new organization",
      "name": "Signup"
    },
    {
      "description": "Manage service accounts for programmatic API access using OAuth2 client credentials",
      "name": "Service Accounts"
    },
    {
      "description": "Operations for managing SSO claim-to-role mappings",
      "name": "SSO Claim Mappings"
    }
  ],
  "x-tagGroups": [
    {
      "name": "Integrations",
      "tags": [
        "Grepr-hosted Data Warehouse Integration",
        "External S3 Data Warehouse Integration",
        "Datadog Integration",
        "New Relic Integration",
        "Splunk Integration",
        "Sumo Logic Integration",
        "OpenTelemetry Integration"
      ]
    },
    {
      "name": "Pipelines",
      "tags": [
        "Jobs",
        "Templates",
        "Datasets",
        "Status Metrics",
        "External Triggers",
        "Job Actions",
        "Triggers"
      ]
    },
    {
      "name": "Pipeline Components",
      "tags": [
        "Operations",
        "Transforms",
        "Sources",
        "Sinks"
      ]
    },
    {
      "name": "Administration",
      "tags": [
        "Users",
        "Teams",
        "Roles",
        "Permission",
        "Invitations",
        "Activity Logs"
      ]
    },
    {
      "name": "Organization",
      "tags": [
        "Organizations",
        "Access Configuration",
        "Grepr API Key",
        "Service Accounts",
        "Signup"
      ]
    },
    {
      "name": "Query \u0026 Analysis",
      "tags": [
        "Job Anomalies",
        "Grok Parsing",
        "Query Parsing",
        "Validation"
      ]
    },
    {
      "name": "System",
      "tags": [
        "Manifest"
      ]
    }
  ]
}