# Models: G

> API models starting with G.

## `GateApproval`

The approval a passing promotion waits for.

- `role: Literal['standard', 'senior', 'admin']`
- `count: int`
- `separate_approver: bool` (`separateApprover` on the wire)

## `GateCheck`

One of a gate's checks, as the promotion records it.

- `name: str`
- `passed: bool`
- `message: str`
- `value: float | str | None` (optional)
- `threshold: float | str | None` (optional)

## `GatePolicy`

- `id: str`
- `version: str`
- `agent_id: str` (`agentId` on the wire)
- `scope: kindgi.client.LiveScopeTenant | kindgi.client.LiveScopeOrg | kindgi.client.LiveScopeProject | kindgi.client.LiveScopeSegment`
- `spec: kindgi.client.GatePolicySpec`
- `description: str | None` (optional)
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `unregistered_at: AwareDatetime | None` (`unregisteredAt` on the wire) (optional)

## `GatePolicyPage`

- `data: list[kindgi.client.GatePolicy]`
- `has_more: bool` (`hasMore` on the wire)
- `next_cursor: str | None` (`nextCursor` on the wire) (optional)

## `GatePolicyRef`

- `id: str`
- `version: str`

## `GatePolicyResolution`

- `policy: kindgi.client.GatePolicy | None`

## `GatePolicySpec`

What a promotion must show. Every part is optional; an empty spec checks nothing. A promotion must name a comparison (`evalRunId`) exactly when the spec has `comparison`, `evidence`, `metrics`, `replay` or `onlyRestrictedClasses`. Unknown keys are refused.

- `comparison: kindgi.client.Comparison | None` (optional)
- `evidence: kindgi.client.Evidence | None` (optional)
- `metrics: list[kindgi.client.Metric] | None` (optional)
- `replay: kindgi.client.Replay | None` (optional)
- `approvals: kindgi.client.Approvals | None` (optional)
- `only_restricted_classes: bool | None` (`onlyRestrictedClasses` on the wire) (optional)

## `GeneratedWebhookSecret`

- `secret: str`

## `GetIdentityProviderResult`

- `root: kindgi.client.OidcIdentityProviderConfig | kindgi.client.SamlIdentityProviderConfig`

## `GetMCPPromptBody`

- `arguments: dict[str, str] | None` (optional)

## `GetMCPPromptResult`

- `messages: list[kindgi.client.MCPPromptMessage]`

## `Guardrail`

- `id: str`
- `project_id: uuid.UUID | None` (`projectId` on the wire) (optional)
- `name: str | None` (optional)
- `description: str | None` (optional)
- `kind: str`
- `check: str`
- `config: dict[str, Any] | None` (optional)
- `action: kindgi.client.GuardrailAction`
- `severity: Optional[Literal['info', 'warn', 'error', 'critical']]` (optional)
- `scope: kindgi.client.GuardrailScope | None` (optional)
- `budget: kindgi.client.Budget | None` (optional)
- `judge_capabilities: dict[str, Any] | None` (`judgeCapabilities` on the wire) (optional)

## `Guardrail1`

- `id: str`
- `version: str | None` (optional)

## `GuardrailAction`

- `on_violation: str` (`on-violation` on the wire)
- `retry: kindgi.client.Retry | None` (optional)
- `escalate_to: str | None` (`escalateTo` on the wire) (optional)
- `compensate_with: str | None` (`compensateWith` on the wire) (optional)

## `GuardrailBlockedRun`

A turn the guardrail blocked: its run, never its answer.

- `run_id: uuid.UUID` (`runId` on the wire)
- `at: AwareDatetime`
- `agent_id: str` (`agentId` on the wire)
- `agent_version: str` (`agentVersion` on the wire)

## `GuardrailCollectionPage`

- `data: list[kindgi.client.Guardrail]`
- `next_cursor: str | None` (`nextCursor` on the wire) (optional)
- `has_more: bool` (`hasMore` on the wire)

## `GuardrailOutcomeCounts`

How many of a guardrail's checks came to each outcome.

- `passed: int`
- `violated: int`
- `blocked: int`
- `errored: int`

## `GuardrailOutcomes`

- `guardrail_id: str` (`guardrailId` on the wire)
- `from_: AwareDatetime` (`from` on the wire)
- `to: AwareDatetime`
- `counts: kindgi.client.GuardrailOutcomeCounts`
- `by_agent_version: list[kindgi.client.GuardrailOutcomesByAgentVersion]` (`byAgentVersion` on the wire)
- `recent_blocked: list[kindgi.client.GuardrailBlockedRun]` (`recentBlocked` on the wire)
- `recorded_since: AwareDatetime | None` (`recordedSince` on the wire) (optional)

## `GuardrailOutcomesByAgentVersion`

The counts on one agent version's turns.

- `agent_id: str` (`agentId` on the wire)
- `agent_version: str` (`agentVersion` on the wire)
- `passed: int`
- `violated: int`
- `blocked: int`
- `errored: int`

## `GuardrailScope`

- `when: Optional[Literal['always', 'ci-only', 'runtime-only']]` (optional)
- `agents: list[str] | None` (optional)
- `flows: list[str] | None` (optional)
- `tenants: list[str] | None` (optional)
