# Models: E

> API models starting with E.

## `Edge`

- `from_: str` (`from` on the wire)
- `to: str`
- `kind: Union[Literal['caused-by', 'influenced-by', 'retrieved-from', 'invoked', 'produced', 'checked-against', 'waited-on', 'resumed-from'], str]`

## `EgressAddresses`

The IP addresses this deployment's calls to other sites come from, for a site that admits only known addresses. They're the same for every workspace on the deployment, so admitting them admits every workspace's calls: a site still checks its own credentials. They say where calls come from, not where they go. Absent when the deployment publishes none. An empty list: none of that kind.

- `server: list[str]`
- `deployments: list[str]`

## `EmailLink`

Present when the deployment emails sign-in links: a sign-in page offers "Email me a sign-in link". With `captchaSiteKey`, the request needs a Cloudflare Turnstile token (`x-captcha-response`).

- `captcha_site_key: str | None` (`captchaSiteKey` on the wire) (optional)

## `EndOrchestratorRoundBody`

- `claimant: str`

## `EnrollSiteBody`

- `code: str`
- `public_key: dict[str, Any]` (`publicKey` on the wire)

## `EnrollSiteResult`

- `site_id: uuid.UUID` (`siteId` on the wire)
- `audience: str`

## `EnvCloudSecret`

An env name, at a scope and env, given to a pack service as a version of a secret the operator's cloud holds. The pack service's cloud reads it, as the pack service's own account: the runtime keeps the name, never a value.

- `scope: kindgi.client.ScopeTenant | kindgi.client.ScopeOrg | kindgi.client.ScopeProject | kindgi.client.ScopeUnrecognized`
- `env_name: str` (`envName` on the wire)
- `name: str`
- `cloud_secret: str` (`cloudSecret` on the wire)
- `revision: int`
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `updated_at: AwareDatetime` (`updatedAt` on the wire)

## `EnvCloudSecretName`

An env name the operator set to a cloud secret, at a scope and env. Which secret is the operator's to know: it isn't given here.

- `scope: kindgi.client.ScopeTenant | kindgi.client.ScopeOrg | kindgi.client.ScopeProject | kindgi.client.ScopeUnrecognized`
- `env_name: str` (`envName` on the wire)
- `name: str`
- `revision: int`
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `updated_at: AwareDatetime` (`updatedAt` on the wire)

## `EnvCloudSecretNamePage`

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

## `EnvCloudSecretPage`

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

## `EnvCloudSecretSetRequest`

- `cloud_secret: str` (`cloudSecret` on the wire)
- `if_revision: int | None` (`ifRevision` on the wire) (optional)

## `EnvCollectionPage`

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

## `EnvDeleteResult`

- `deleted: bool`

## `EnvListPage`

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

## `EnvRecord`

- `scope: kindgi.client.ScopeTenant | kindgi.client.ScopeOrg | kindgi.client.ScopeProject | kindgi.client.ScopeUnrecognized`
- `env_name: str` (`envName` on the wire)
- `name: str`
- `value: str`
- `revision: int`
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `updated_at: AwareDatetime` (`updatedAt` on the wire)
- `tags: dict[str, str] | None` (optional)

## `EnvSetInput`

- `scope: kindgi.client.ScopeTenant | kindgi.client.ScopeOrg | kindgi.client.ScopeProject | kindgi.client.ScopeUnrecognized`
- `env_name: str` (`envName` on the wire)
- `name: str`
- `value: str`
- `tags: dict[str, str] | None` (optional)
- `if_revision: int | None` (`ifRevision` on the wire) (optional)

## `EnvSetOutcome`

- `root: kindgi.client.EnvSetOutcomeOk | kindgi.client.EnvSetOutcomeRevisionConflict | kindgi.client.EnvSetOutcomeError`

## `EnvSetOutcomeError`

- `kind: Literal['error']`
- `code: str`
- `message: str`

## `EnvSetOutcomeOk`

- `kind: Literal['ok']`
- `record: kindgi.client.EnvRecord`

## `EnvSetOutcomeRevisionConflict`

- `kind: Literal['revision-conflict']`
- `current_revision: int` (`currentRevision` on the wire)

## `EnvSetRequest`

- `scope: Optional[Annotated[kindgi.client.ScopeTenant | kindgi.client.ScopeOrg | kindgi.client.ScopeProject | kindgi.client.ScopeUnrecognized, <kindgi.client._open.OpenUnion object at 0x1080c7890>]]` (optional)
- `env_name: str | None` (`envName` on the wire) (optional)
- `name: str | None` (optional)
- `value: str`
- `tags: dict[str, str] | None` (optional)
- `if_revision: int | None` (`ifRevision` on the wire) (optional)

## `Environment`

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

## `EnvironmentOrder`

- `parent: kindgi.client.EnvironmentOrderParentTenant | kindgi.client.EnvironmentOrderParentOrg | kindgi.client.EnvironmentOrderParentUnrecognized`
- `entries: list[kindgi.client.EnvironmentOrderEntry]`

## `EnvironmentOrderEntry`

- `position: int`
- `project_id: str | None` (`projectId` on the wire) (optional)

## `EnvironmentOrderPage`

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

## `EnvironmentOrderParentOrg`

- `kind: Literal['org']`
- `org_id: str` (`orgId` on the wire)

## `EnvironmentOrderParentTenant`

- `kind: Literal['tenant']`

## `EnvironmentOrderParentUnrecognized`

A `kind` this client doesn't know yet, from a newer runtime: the object as it came, every field kept.

- `kind: str`

## `EnvironmentOrderSetRequest`

- `project_ids: list[str]` (`projectIds` on the wire)

## `EnvironmentPage`

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

## `Error`

- `code: str`
- `message: str`
- `details: dict[str, Any] | None` (optional)
- `request_id: str` (`requestId` on the wire)

## `Estimate`

What it's estimated to cost: the budget, which caps its search, and, when the version has cost history, the estimate itself.

- `cost_usd: str | None` (`costUsd` on the wire) (optional)
- `max_cost_usd: str` (`maxCostUsd` on the wire)
- `basis: kindgi.client.Basis`

## `Evidence`

The evidence from corrections behind each gated metric; for a metric with `maxDrop`, the baseline's too.

- `min_cases: int | None` (`minCases` on the wire) (optional)
- `min_weight: float | None` (`minWeight` on the wire) (optional)

## `EvidenceActor`

- `kind: Optional[Literal['user', 'agent', 'system', 'admin', 'external']]` (optional)
- `id: str | None` (optional)
- `ip_address: str | None` (`ipAddress` on the wire) (optional)
- `user_agent: str | None` (`userAgent` on the wire) (optional)

## `EvidenceKind`

- `root: str`

## `EvidenceOutcome`

- `root: Literal['allowed', 'denied', 'succeeded', 'failed', 'escalated']`

## `EvidenceProvenanceRef`

- `run_id: str | None` (`runId` on the wire) (optional)
- `node_id: str | None` (`nodeId` on the wire) (optional)
- `record_id: str | None` (`recordId` on the wire) (optional)

## `EvidenceSignature`

- `algorithm: Literal['ed25519']`
- `key_id: str` (`keyId` on the wire)
- `value: str`
- `signed_at: AwareDatetime` (`signedAt` on the wire)

## `EvidenceSubject`

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

## `ExpectedCall`

- `tool: str`
- `args: dict[str, Any]`

## `ExpectedDecisions`

What the agent should have done, by an expert's correction of a run's decisions: the tool calls it should have made, and the tools it should not have called at all. Graded deterministically on a replay. A tool can't be in both `calls` and `notCalled`, and one of them must be non-empty (both empty is a 400).

- `calls: list[kindgi.client.ExpectedCall]`
- `not_called: list[kindgi.client.NotCalledItem]` (`notCalled` on the wire)

## `Expert`

The same weights, counting only corrections recorded while their group was restricted (`Correction.expert`), for a comparison weighted `experts-only`. Absent from a test set built before restrictions.

- `yes_weight: float` (`yesWeight` on the wire)
- `total_weight: float` (`totalWeight` on the wire)
- `correction_ids: list[str] | None` (`correctionIds` on the wire) (optional)

## `ExpertQueueDismissBody`

- `reason: str | None` (optional)

## `ExpertQueueGroupCount`

- `corrector_group_id: str | None` (`correctorGroupId` on the wire)
- `count: int`

## `ExpertQueueItem`

A queued run: never its content, only what it was and where it stands.

- `run_id: str` (`runId` on the wire)
- `project_id: str` (`projectId` on the wire)
- `agent_id: str | None` (`agentId` on the wire) (optional)
- `agent_version: str | None` (`agentVersion` on the wire) (optional)
- `flow_id: str` (`flowId` on the wire)
- `run_status: Union[Literal['completed', 'failed', 'cancelled'], str]` (`runStatus` on the wire)
- `completed_at: AwareDatetime` (`completedAt` on the wire)
- `rules: list[kindgi.client.ExpertQueueItemRule]`
- `wanted_group_ids: list[str]` (`wantedGroupIds` on the wire)
- `any_correction: bool` (`anyCorrection` on the wire)
- `progress: kindgi.client.ExpertQueueProgress`
- `added_at: AwareDatetime` (`addedAt` on the wire)
- `state: Union[Literal['open', 'corrected', 'dismissed', 'erased'], str]`
- `closed_at: AwareDatetime | None` (`closedAt` on the wire) (optional)
- `closed_by: str | None` (`closedBy` on the wire) (optional)
- `reason: str | None` (optional)
- `can: kindgi.client.ExpertQueueItemCan`

## `ExpertQueueItemCan`

What the caller may do with the item, by the check the routes make (`write` on the project, as correcting the run needs).

- `dismiss: bool`
- `reopen: bool`

## `ExpertQueueItemRule`

- `rule_id: str` (`ruleId` on the wire)
- `version: int`

## `ExpertQueuePage`

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

## `ExpertQueueProgress`

The live corrections on the run so far, by group.

- `total: int`
- `by_group: list[kindgi.client.ExpertQueueGroupCount]` (`byGroup` on the wire)

## `ExpertQueueRecentInput`

Which recent runs to catch the rule up on. Give `last`, `since`, or both.

- `last: int | None` (optional)
- `since: AwareDatetime | None` (optional)

## `ExpertQueueRecentQueued`

- `queued: int`
- `already_queued: int` (`alreadyQueued` on the wire)
- `already_reviewed: int` (`alreadyReviewed` on the wire)

## `ExportAuditBundleBody`

Body for `POST /v1/approvals/{approvalId}/audit-bundle`, optional: no body signs with the active key. `includeMessages` adds the conversation messages of the approval's run.

- `signing_key_id: str | None` (`signingKeyId` on the wire) (optional)
- `include_messages: bool | None` (`includeMessages` on the wire) (optional)

## `ExportAuditBundleResult`

A decided approval's signed audit bundle. Body: `{ bundleSchemaVersion, approvalId, tenantId, subjectKind, subjectRef, requiredRole, status, createdAt, decidedAt?, decision, evidence: { guardrailResults?, messages? }, exportedAt }`.

- `approval_id: uuid.UUID` (`approvalId` on the wire)
- `kind: Optional[Literal['audit-bundle']]` (optional)
- `bundle: str`
- `bundle_schema_version: str` (`bundleSchemaVersion` on the wire)
- `algorithm: Union[Literal['ed25519', 'ecdsa-p256-sha256'], str]`
- `signing_key_id: str` (`signingKeyId` on the wire)
- `signature: str`
- `public_key: str` (`publicKey` on the wire)
- `canonicalization: Literal['sorted-key-json']`
- `exported_at: AwareDatetime` (`exportedAt` on the wire)

## `ExportComplianceEvidenceBody`

Optional: no body exports every exportable kind, signed with the active key.

- `signing_key_id: str | None` (`signingKeyId` on the wire) (optional)
- `filter: kindgi.client.Filter | None` (optional)

## `ExportComplianceEvidenceFilter`

Optional filter narrowing the export set. Composition is AND — every populated field must match. Absent / empty filter exports every record for the workspace.

- `run_id: str | None` (`runId` on the wire) (optional)
- `agent_id: str | None` (`agentId` on the wire) (optional)
- `flow_id: str | None` (`flowId` on the wire) (optional)
- `kind: str | None` (optional)
- `from_: AwareDatetime | None` (`from` on the wire) (optional)
- `to: AwareDatetime | None` (optional)

## `ExportProvenanceBody`

Optional: no body signs with the active key.

- `signing_key_id: str | None` (`signingKeyId` on the wire) (optional)
- `include_messages: bool | None` (`includeMessages` on the wire) (optional)

## `ExportProvenanceResult`

A run's signed provenance. Body: `{ bundleSchemaVersion, provenanceId, runId, tenantId, version, createdAt, flowRef?, dag: { nodes, edges }, messages?, callUsage?, stepUsage?, exportedAt }`; `callUsage` is each model call's usage from the cost ledger, and `stepUsage` a flow record's usage per step, as they stood when signed.

- `run_id: uuid.UUID` (`runId` on the wire)
- `kind: Optional[Literal['provenance']]` (optional)
- `bundle: str`
- `bundle_schema_version: str` (`bundleSchemaVersion` on the wire)
- `algorithm: Union[Literal['ed25519', 'ecdsa-p256-sha256'], str]`
- `signing_key_id: str` (`signingKeyId` on the wire)
- `signature: str`
- `public_key: str` (`publicKey` on the wire)
- `canonicalization: Literal['sorted-key-json']`
- `exported_at: AwareDatetime` (`exportedAt` on the wire)

## `ExportSigningKey`

A public key this deployment signs exports with.

- `key_id: str` (`keyId` on the wire)
- `algorithm: Union[Literal['ed25519', 'ecdsa-p256-sha256'], str]`
- `public_key_pem: str` (`publicKeyPem` on the wire)
- `fingerprint: str`
- `active: bool`

## `ExportSigningKeyList`

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