# Models: T

> API models starting with T.

## `TakeTriggerOwnerBody`

Who the trigger's runs act as from now. Absent, or an empty body: the caller takes it over (today's behaviour). With `runAsServiceAccountId`: that service account becomes the owner.

- `run_as_service_account_id: str | None` (`runAsServiceAccountId` on the wire) (optional)

## `Team`

- `id: str`
- `tenant_id: str` (`tenantId` on the wire)
- `org_id: str | None` (`orgId` on the wire) (optional)
- `name: str`
- `slug: str`
- `description: str | None` (optional)
- `created_at: str` (`createdAt` on the wire)
- `updated_at: str` (`updatedAt` on the wire)

## `TeamCollectionPage`

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

## `TeamMembership`

- `team_id: str` (`teamId` on the wire)
- `user_id: str` (`userId` on the wire)
- `role: Union[Literal['admin', 'member'], str]`
- `joined_at: str` (`joinedAt` on the wire)

## `TeamMembershipCollectionPage`

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

## `TeamPatch`

- `name: str | None` (optional)
- `slug: str | None` (optional)
- `description: str | None` (optional)
- `org_id: str | None` (`orgId` on the wire) (optional)

## `TeamProjectGrant`

A team's role on a project.

- `team_id: str` (`teamId` on the wire)
- `project_id: str` (`projectId` on the wire)
- `role: Union[Literal['viewer', 'editor', 'admin'], str]`
- `granted_at: AwareDatetime | None` (`grantedAt` on the wire) (optional)
- `team_name: str | None` (`teamName` on the wire) (optional)
- `project_name: str | None` (`projectName` on the wire) (optional)

## `TeamProjectGrantCollectionPage`

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

## `TeamSpec`

- `name: str`
- `slug: str`
- `description: str | None` (optional)
- `org_id: str | None` (`orgId` on the wire) (optional)

## `Tenant`

- `id: uuid.UUID`
- `name: str`
- `slug: str`
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `updated_at: AwareDatetime` (`updatedAt` on the wire)
- `production_allowed: bool | None` (`productionAllowed` on the wire) (optional)
- `production_next: str | None` (`productionNext` on the wire) (optional)
- `state: Optional[Annotated[Union[Literal['active', 'suspended', 'closing'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]]` (optional)
- `limits: kindgi.client.TenantLimits | None` (optional)
- `egress: kindgi.client.EgressAddresses | None` (optional)

## `TenantAdminContacts`

- `data: list[kindgi.client.Datum3]`

## `TenantConfigCollectionPage`

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

## `TenantConfigEntry`

- `tenant_id: str` (`tenantId` on the wire)
- `kind: Union[Literal['env', 'config', 'secret'], str]`
- `key: str`
- `value: str`
- `sensitive: bool`
- `revision: int`
- `updated_at: str` (`updatedAt` on the wire)

## `TenantLimits`

The tenant's limits that are set. A limit that isn't set is absent, and isn't enforced.

- `api_requests_per_minute: int | None` (`apiRequestsPerMinute` on the wire) (optional)
- `webhook_receives_per_minute: int | None` (`webhookReceivesPerMinute` on the wire) (optional)
- `runs_at_once: int | None` (`runsAtOnce` on the wire) (optional)
- `runs_pending: int | None` (`runsPending` on the wire) (optional)
- `tool_calls_in_flight: int | None` (`toolCallsInFlight` on the wire) (optional)
- `approvals_pending: int | None` (`approvalsPending` on the wire) (optional)
- `projects_in_production: int | None` (`projectsInProduction` on the wire) (optional)

## `TenantLimitsInUse`

How much of each limit that counts something the tenant uses now, whether the limit is set or not: on `GET …/limits` only, and only from a runtime that counts it. A limit can be lowered below it: nothing is taken back, and the next one waits until the count is under the limit.

- `projects_in_production: int` (`projectsInProduction` on the wire)

## `TenantLimitsResult`

- `tenant_id: uuid.UUID` (`tenantId` on the wire)
- `limits: kindgi.client.TenantLimits`
- `in_use: kindgi.client.TenantLimitsInUse | None` (`inUse` on the wire) (optional)

## `TenantPatch`

A new name, a new slug, or both; a field left out stays as it is. The id stays, so whatever names the tenant by its id keeps working.

- `name: str | None` (optional)
- `slug: str | None` (optional)

## `TenantProductionAllowed`

- `tenant_id: uuid.UUID` (`tenantId` on the wire)
- `production_allowed: bool` (`productionAllowed` on the wire)

## `TenantTableRows`

A tenant's rows in one table: the table's name and a count.

- `table: str`
- `rows: int`

## `TestAdapterBody`

## `Threshold`

Default 5 judgments, across 3 runs, from 2 judges.

- `judgments: int | None` (optional)
- `runs: int | None` (optional)
- `judges: int | None` (optional)

## `TimeRange`

- `from_: AwareDatetime` (`from` on the wire)
- `to: AwareDatetime`

## `TokenSignInResult`

- `user_id: str` (`userId` on the wire)
- `expires_at: AwareDatetime` (`expiresAt` on the wire)

## `Tool`

- `id: str`
- `project_id: uuid.UUID | None` (`projectId` on the wire) (optional)
- `description: str`
- `version: str | None` (optional)
- `input: dict[str, Any]`
- `output: dict[str, Any]`
- `needs: list[kindgi.client.ToolNeed] | None` (optional)
- `effects: list[kindgi.client.ToolEffect] | None` (optional)
- `transport: Optional[Annotated[Union[Literal['auto', 'native', 'mcp'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]]` (optional)
- `mcp_endpoint: str | None` (`mcpEndpoint` on the wire) (optional)
- `metadata: dict[str, Any] | None` (optional)
- `mutating: bool | None` (optional)
- `needs_approval_when_unattended: bool | None` (`needsApprovalWhenUnattended` on the wire) (optional)
- `sandbox: Optional[Annotated[Union[Literal['none', 'context-isolated', 'strict'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]]` (optional)
- `limits: kindgi.client.RuntimeLimits | None` (optional)
- `network: Optional[Annotated[kindgi.client.NetworkPolicy1 | kindgi.client.NetworkPolicy2 | kindgi.client.NetworkPolicyUnrecognized, <kindgi.client._open.OpenUnion object at 0x107c5ad50>]]` (optional)
- `needs_spec: kindgi.client.TypedNeeds | None` (`needsSpec` on the wire) (optional)
- `code_artifact_ref: Optional[Annotated[kindgi.client.CodeArtifactRefOci | kindgi.client.CodeArtifactRefFilesystem | kindgi.client.CodeArtifactRefUnrecognized, <kindgi.client._open.OpenUnion object at 0x107c5b050>]]` (`codeArtifactRef` on the wire) (optional)
- `spec: kindgi.client.ToolSpec | None` (optional)
- `unregistered_at: AwareDatetime | None` (`unregisteredAt` on the wire) (optional)
- `secret_scopes: dict[str, Optional[Annotated[kindgi.client.RecordedSecretScopeTenant | kindgi.client.RecordedSecretScopeOrg | kindgi.client.RecordedSecretScopeProject | kindgi.client.RecordedSecretScopeUnrecognized, <kindgi.client._open.OpenUnion object at 0x107c5b450>]]] | None` (`secretScopes` on the wire) (optional)

## `ToolCall`

- `tool_id: str` (`toolId` on the wire)
- `invocation_id: str` (`invocationId` on the wire)

## `ToolCollectionPage`

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

## `ToolEffect`

- `kind: Union[Literal['reads', 'writes', 'deletes', 'network', 'spawns-run', 'emits-event', 'external-side-effect', 'sensitive-data-egress'], str]`
- `resource: str | None` (optional)
- `notes: str | None` (optional)

## `ToolErrorsSpec`

- `max_retries: int | None` (`maxRetries` on the wire) (optional)
- `retry_on: list[Annotated[Union[Literal['invalid-arguments', 'unknown-tool', 'tool-error'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]] | None` (`retryOn` on the wire) (optional)

## `ToolNeed`

- `name: str`
- `optional: bool | None` (optional)

## `ToolRef`

Typed tool reference. `version` is a semver **range** (npm-style: `1.2.3` exact pin, `^1.2.3` compatible-updates, `~1.2.3` patch-updates-only, `>=1.0.0 <2.0.0` explicit range). Dispatch resolves the range to a concrete active version via `semver.maxSatisfying` at run start. No implicit "latest" — every tool ref names both id and range.

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

## `ToolSecretRef`

- `env_name: str` (`envName` on the wire)
- `name: str`

## `ToolSpec`

- `root: kindgi.client.HttpToolSpec`

## `ToolVersionCollectionPage`

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

## `ToolVersionRow`

- `id: str`
- `project_id: uuid.UUID | None` (`projectId` on the wire) (optional)
- `description: str`
- `version: str | None` (optional)
- `input: dict[str, Any]`
- `output: dict[str, Any]`
- `needs: list[kindgi.client.ToolNeed] | None` (optional)
- `effects: list[kindgi.client.ToolEffect] | None` (optional)
- `transport: Optional[Annotated[Union[Literal['auto', 'native', 'mcp'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]]` (optional)
- `mcp_endpoint: str | None` (`mcpEndpoint` on the wire) (optional)
- `metadata: dict[str, Any] | None` (optional)
- `mutating: bool | None` (optional)
- `needs_approval_when_unattended: bool | None` (`needsApprovalWhenUnattended` on the wire) (optional)
- `sandbox: Optional[Annotated[Union[Literal['none', 'context-isolated', 'strict'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]]` (optional)
- `limits: kindgi.client.RuntimeLimits | None` (optional)
- `network: Optional[Annotated[kindgi.client.NetworkPolicy1 | kindgi.client.NetworkPolicy2 | kindgi.client.NetworkPolicyUnrecognized, <kindgi.client._open.OpenUnion object at 0x107c74c50>]]` (optional)
- `needs_spec: kindgi.client.TypedNeeds | None` (`needsSpec` on the wire) (optional)
- `code_artifact_ref: Optional[Annotated[kindgi.client.CodeArtifactRefOci | kindgi.client.CodeArtifactRefFilesystem | kindgi.client.CodeArtifactRefUnrecognized, <kindgi.client._open.OpenUnion object at 0x107c74f50>]]` (`codeArtifactRef` on the wire) (optional)
- `spec: kindgi.client.ToolSpec | None` (optional)
- `unregistered_at: AwareDatetime | None` (`unregisteredAt` on the wire) (optional)
- `secret_scopes: dict[str, Optional[Annotated[kindgi.client.RecordedSecretScopeTenant | kindgi.client.RecordedSecretScopeOrg | kindgi.client.RecordedSecretScopeProject | kindgi.client.RecordedSecretScopeUnrecognized, <kindgi.client._open.OpenUnion object at 0x107c751d0>]]] | None` (`secretScopes` on the wire) (optional)

## `TopK`

- `yes_weight: float` (`yesWeight` on the wire)
- `total_weight: float` (`totalWeight` on the wire)

## `Trigger`

The improve schedule and fire that started it (`GET /v1/schedules/{triggerId}/fires`); absent for a pass a person started.

- `trigger_id: str` (`triggerId` on the wire)
- `fire_id: str` (`fireId` on the wire)

## `TriggerOwner`

- `kind: Union[Literal['user', 'service'], str]`
- `id: str`
- `display_name: str | None` (`displayName` on the wire) (optional)

## `TrustSigningKeyBody`

- `key_id: str` (`keyId` on the wire)
- `algorithm: Optional[Literal['ed25519']]` (optional)
- `public_key: str` (`publicKey` on the wire)
- `label: str | None` (optional)

## `TrustedSigningKey`

A public key the tenant trusts to sign deployments (`POST /v1/deployments`). A revoked key stays readable, with `revokedAt`, so the deployments it signed can be audited; it verifies no new ones.

- `key_id: str` (`keyId` on the wire)
- `tenant_id: uuid.UUID` (`tenantId` on the wire)
- `algorithm: Union[Literal['ed25519'], str]`
- `public_key: str` (`publicKey` on the wire)
- `label: str | None` (optional)
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `revoked_at: AwareDatetime | None` (`revokedAt` on the wire) (optional)
- `revoked_reason: str | None` (`revokedReason` on the wire) (optional)

## `TrustedSigningKeyPage`

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

## `TurnBudget`

- `max_steps: int | None` (`maxSteps` on the wire) (optional)
- `max_cost_usd: float | None` (`maxCostUsd` on the wire) (optional)
- `max_wall_ms: int | None` (`maxWallMs` on the wire) (optional)

## `Type`

- `root: str`

## `TypedNeeds`

Typed discriminated needs (env / secrets / config / capabilities / bindings). Optional additive field.

- `env: dict[str, dict[str, Any]] | None` (optional)
- `secrets: dict[str, dict[str, Any]] | None` (optional)
- `config: dict[str, dict[str, Any]] | None` (optional)
- `capabilities: list[kindgi.client.Capability5] | None` (optional)
- `bindings: list[kindgi.client.Binding] | None` (optional)
