# Models: A

> API models starting with A.

## `AccessPathDirect`

- `kind: Literal['direct']`
- `role: Literal['owner', 'admin', 'editor', 'viewer']`
- `since: AwareDatetime | None` (optional)

## `AccessPathOrgAdmin`

An admin of the org the project sits in: admin on the project.

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

## `AccessPathTeam`

- `kind: Literal['team']`
- `team_id: str` (`teamId` on the wire)
- `team_name: str` (`teamName` on the wire)
- `role: Literal['owner', 'admin', 'editor', 'viewer']`
- `since: AwareDatetime | None` (optional)

## `AccessPathTenantAdmin`

A tenant admin: admin on every project.

- `kind: Literal['tenant-admin']`

## `AccessPrincipal`

Whom access is held by: a person, or a service account.

- `kind: Literal['user', 'service-account']`
- `id: str`

## `Actor`

- `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)

## `Adapter`

- `adapter_id: str` (`adapterId` on the wire)
- `kind: Literal['model', 'model-provider', 'embedding', 'blob', 'sandbox', 'eval-judge']`
- `name: str`
- `version: str`
- `capabilities: list[str]`
- `config: dict[str, Any] | None` (optional)
- `status: Literal['active', 'degraded', 'error']`
- `status_reason: str | None` (`statusReason` on the wire) (optional)

## `AdapterCollectionPage`

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

## `AdapterConfigProblem`

- `path: str`
- `message: str`

## `AdapterTestOutcome`

- `ok: bool`
- `latency_ms: float` (`latencyMs` on the wire)
- `probe: dict[str, Any]`

## `AdaptersPrepareBody`

## `AdaptersPrepareResponse`

- `root: str`

## `AddProjectMembershipBody`

Exactly one of `userId` and `email` names the person.

- `user_id: str | None` (`userId` on the wire) (optional)
- `email: str | None` (optional)
- `role: Literal['viewer', 'editor', 'owner', 'admin']`

## `AddProjectMembershipResult`

- `project_id: str` (`projectId` on the wire)
- `user_id: str` (`userId` on the wire)
- `role: Literal['viewer', 'editor', 'owner', 'admin', 'member']`

## `AddTeamMembershipBody`

- `user_id: str` (`userId` on the wire)
- `role: Literal['member', 'admin']`

## `AddTeamMembershipResult`

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

## `AddTeamProjectGrantBody`

- `team_id: str` (`teamId` on the wire)
- `role: Literal['viewer', 'editor', 'admin']`

## `AdminKey`

The tenant's first admin key, without `firstAdmin`: shown once.

- `token_id: str` (`tokenId` on the wire)
- `token: str`

## `Agent`

- `id: str`
- `version: str`
- `project_id: uuid.UUID | None` (`projectId` on the wire) (optional)
- `name: str`
- `description: str | None` (optional)
- `instructions: kindgi.client.Instructions | kindgi.client.PromptRef`
- `parameters: list[kindgi.client.PromptParameter] | None` (optional)
- `settings: list[kindgi.client.BlockRef] | None` (optional)
- `model_settings: kindgi.client.BlockRef | None` (`modelSettings` on the wire) (optional)
- `capabilities: list[kindgi.client.Capability4]`
- `tools: list[kindgi.client.ToolRef]`
- `retrieval: list[kindgi.client.RetrievalIntent]`
- `memory: kindgi.client.AgentMemoryPolicy | None` (optional)
- `guardrails: list[str]`
- `preferred_provider: str | None` (`preferredProvider` on the wire) (optional)
- `preferred_model: str | None` (`preferredModel` on the wire) (optional)
- `conversation_policy: kindgi.client.ConversationPolicy | None` (`conversationPolicy` on the wire) (optional)
- `budget: kindgi.client.TurnBudget | None` (optional)
- `tags: list[str] | None` (optional)
- `output: kindgi.client.AgentOutputSpec | None` (optional)
- `tool_errors: kindgi.client.ToolErrorsSpec | None` (`toolErrors` on the wire) (optional)
- `pins: kindgi.client.AgentPins | None` (optional)
- `derived_from: kindgi.client.VersionDerivation | None` (`derivedFrom` on the wire) (optional)
- `unregistered_at: AwareDatetime | None` (`unregisteredAt` on the wire) (optional)
- `pins_digest: str | None` (`pinsDigest` on the wire) (optional)

## `Agent1`

- `id: str`
- `version: str`
- `authored_version: str | None` (`authoredVersion` on the wire) (optional)
- `reason: Optional[Literal['pins-changed', 'unpinned', 'version-taken']]` (optional)
- `new_version: bool | None` (`newVersion` on the wire) (optional)
- `pin_changes: list[kindgi.client.PinChange] | None` (`pinChanges` on the wire) (optional)

## `AgentCollectionPage`

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

## `AgentMemoryPolicy`

How the agent uses what it retrieves.

- `instruction_types: list[kindgi.client.InstructionType] | None` (`instructionTypes` on the wire) (optional)
- `remember: kindgi.client.Remember | None` (optional)

## `AgentOutputSpec`

- `schema_: dict[str, Any]` (`schema` on the wire)
- `name: str | None` (optional)
- `max_repairs: int | None` (`maxRepairs` on the wire) (optional)

## `AgentPinSwaps`

The data-block pins to swap, by block id → exact version. Only blocks the version already references; tool pins come from code.

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

## `AgentPins`

The exact block versions an agent version runs: its lockfile. Set by the runtime when the version is published, never in the publish body: each tool range resolves once to the version every run of that agent version uses, so a new tool version reaches the agent only through a new agent version. Absent on a version published before pins existed (its ranges resolve per run).

- `tools: dict[str, str]`
- `prompts: dict[str, str]`
- `settings: dict[str, str]`

## `ApiKeyPrincipal`

Whom an API key acts for: a person, or a service account.

- `kind: Literal['user', 'service-account']`
- `id: str`

## `ApiToken`

An API key. Never includes the secret. `principal` is whom it acts for; absent on a key that is a service account of its own (`service_account:<tokenId>`), as keys minted before principals are.

- `token_id: uuid.UUID` (`tokenId` on the wire)
- `principal: kindgi.client.ApiKeyPrincipal | None` (optional)
- `role: Literal['admin', 'member']`
- `capabilities: list[kindgi.client.Capability]`
- `label: str | None` (optional)
- `project_id: uuid.UUID | None` (`projectId` on the wire) (optional)
- `created_by: str | None` (`createdBy` on the wire) (optional)
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `expires_at: AwareDatetime | None` (`expiresAt` on the wire) (optional)
- `revoked_at: AwareDatetime | None` (`revokedAt` on the wire) (optional)
- `last_used_at: AwareDatetime | None` (`lastUsedAt` on the wire) (optional)

## `ApiTokenPage`

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

## `Approval`

- `id: uuid.UUID`
- `tenant_id: uuid.UUID` (`tenantId` on the wire)
- `project_id: uuid.UUID | None` (`projectId` on the wire) (optional)
- `subject_kind: str` (`subjectKind` on the wire)
- `subject_ref: dict[str, Any]` (`subjectRef` on the wire)
- `required_role: Literal['standard', 'senior', 'admin']` (`requiredRole` on the wire)
- `status: Literal['pending', 'assigned', 'in_review', 'approved', 'rejected', 'escalated', 'expired', 'withdrawn']`
- `assigned_to: uuid.UUID | None` (`assignedTo` on the wire) (optional)
- `batch_key: str | None` (`batchKey` on the wire) (optional)
- `title: str | None` (optional)
- `description: str | None` (optional)
- `context: dict[str, Any] | None` (optional)
- `provenance_ref: kindgi.client.ProvenanceRef | None` (`provenanceRef` on the wire) (optional)
- `wait_token_id: str | None` (`waitTokenId` on the wire) (optional)
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `updated_at: AwareDatetime` (`updatedAt` on the wire)
- `decided_at: AwareDatetime | None` (`decidedAt` on the wire) (optional)
- `expires_at: AwareDatetime | None` (`expiresAt` on the wire) (optional)
- `decision: kindgi.client.ApprovalDecisionRecord | None` (optional)
- `requested_by: str | None` (`requestedBy` on the wire) (optional)
- `separate_approver: bool | None` (`separateApprover` on the wire) (optional)
- `withdrawn_because: Optional[Literal['run-cancelled', 'run-ended']]` (`withdrawnBecause` on the wire) (optional)
- `escalated_from: uuid.UUID | None` (`escalatedFrom` on the wire) (optional)
- `escalated_to: uuid.UUID | None` (`escalatedTo` on the wire) (optional)

## `ApprovalCollectionPage`

- `data: list[kindgi.client.Approval]`
- `next_cursor: str | None` (`nextCursor` on the wire) (optional)
- `has_more: bool` (`hasMore` on the wire)
- `order: Optional[Literal['asc', 'desc']]` (optional)

## `ApprovalDecisionRecord`

- `decision: Literal['approve', 'reject', 'escalate', 'withdraw']`
- `decided_by: str | None` (`decidedBy` on the wire) (optional)
- `reviewer_id: uuid.UUID` (`reviewerId` on the wire)
- `reviewer_role_at_decision: Literal['standard', 'senior', 'admin']` (`reviewerRoleAtDecision` on the wire)
- `decided_at: AwareDatetime` (`decidedAt` on the wire)
- `rationale: str | None` (optional)

## `ApprovalRequestedEvent`

An approval was asked for: a reviewer's decision is waiting. Sent once per approval (an escalation is a new approval). `projectId` in the endpoint's filter narrows it to the approval's project.

- `id: str`
- `type: Literal['approval.requested']`
- `created_at: AwareDatetime` (`createdAt` on the wire)
- `data: kindgi.client.ApprovalRequestedEventData`

## `ApprovalRequestedEventData`

- `approval: kindgi.client.RequestedApproval`

## `ApprovalStatus`

- `root: Literal['pending', 'assigned', 'in_review', 'approved', 'rejected', 'escalated', 'expired', 'withdrawn']`

## `Approvals`

A passing promotion waits for a reviewer.

- `role: Optional[Literal['standard', 'senior', 'admin']]` (optional)
- `separate_approver: bool | None` (`separateApprover` on the wire) (optional)

## `ArtifactCollectionPage`

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

## `AttributeMapping`

Assertion attribute names. Defaults: `userId` = the NameID, `email` = `email`.

- `user_id: str | None` (`userId` on the wire) (optional)
- `email: str | None` (optional)
- `display_name: str | None` (`displayName` on the wire) (optional)

## `AttributeMapping1`

- `user_id: str | None` (`userId` on the wire) (optional)
- `email: str | None` (optional)
- `display_name: str | None` (`displayName` on the wire) (optional)

## `AuditAuthzListResponse`

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

## `AuditSignInsListResponse`

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