Models: C
run_id: str(runIdon the wire)node_id: str | None(nodeIdon the wire) (optional)scope: str | None(optional)tool_id: str(toolIdon the wire)arguments: Any | None(optional)result: Any | None(optional)
CallUsage
Section titled “CallUsage”usage: kindgi.client.ModelCallTokenscost_usd: float | None(costUsdon the wire) (optional)duration_ms: int | None(durationMson the wire) (optional)served_model: str | None(servedModelon the wire) (optional)
CandidateItem
Section titled “CandidateItem”An output's score: Σ yesWeight and Σ totalWeight over its judged items, and over those among the first k ranked items.
yes_weight: float(yesWeighton the wire)total_weight: float(totalWeighton the wire)items: intjudged_items: int(judgedItemson the wire)top_k: kindgi.client.TopK(topKon the wire)fresh: kindgi.client.Fresh | None(optional)
Capability
Section titled “Capability”root: str
Capability4
Section titled “Capability4”Capability declaration — see @kindgi/capabilities. Additional properties are permitted so new capability kinds do not require a wire change.
Capability5
Section titled “Capability5”root: str
CapabilityCollectionPage
Section titled “CapabilityCollectionPage”data: list[kindgi.client.CapabilityDescriptor]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
CapabilityDescriptor
Section titled “CapabilityDescriptor”id: strfeature: Union[str, Annotated[Union[Literal['structured-output', 'vision', 'audio-input', 'audio-output', 'tool-use', 'parallel-tool-use', 'thinking', 'long-context', 'code-execution', 'web-search', 'file-search', 'streaming', 'batch'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]]description: strkind: str | None(optional)params_schema: dict[str, Any] | None(paramsSchemaon the wire) (optional)providers: list[kindgi.client.CapabilityProvider] | None(optional)
CapabilityProvider
Section titled “CapabilityProvider”A provider of the tenant with a model that has the feature.
provider_id: str(providerIdon the wire)models: list[str]
Change
Section titled “Change”block_id: str(blockIdon the wire)content: kindgi.client.Content1
Changes
Section titled “Changes”The first repetition's items against the judged ones.
kept: list[kindgi.client.KeptItem]dropped: list[kindgi.client.DroppedItem]new: list[kindgi.client.NewItem]
ClaimMappingScopesSpec
Section titled “ClaimMappingScopesSpec”Claim path + optional delimiter for extracting Kindgi OAuth scopes from provider claims. When absent, scopes come from the token response scope field instead.
claim: strdelimiter: str | None(optional)
ClaimMappingSpec
Section titled “ClaimMappingSpec”Per-provider claim mapping. All fields optional; closer to OIDC defaults (sub/email/name) → fewer overrides needed.
user_id: str | None(userIdon the wire) (optional)email: str | None(optional)display_name: str | None(displayNameon the wire) (optional)scopes: kindgi.client.ClaimMappingScopesSpec | None(optional)metadata: list[kindgi.client.Metadatum] | None(optional)
CodeArtifactRefFilesystem
Section titled “CodeArtifactRefFilesystem”Handler-artifact pointer. Discriminated on kind: oci is the deploy-pipeline shape (image + module path + artifactVersion); filesystem is the local-development shape — absolute host path at the pack's on-disk handler file. Production servers SHOULD reject filesystem.
kind: Literal['filesystem']module_path: str(modulePathon the wire)
CodeArtifactRefOci
Section titled “CodeArtifactRefOci”Handler-artifact pointer. Discriminated on kind: oci is the deploy-pipeline shape (image + module path + artifactVersion); filesystem is the local-development shape — absolute host path at the pack's on-disk handler file. Production servers SHOULD reject filesystem.
kind: Literal['oci']image_ref: str(imageRefon the wire)module_path: str(modulePathon the wire)artifact_version: str(artifactVersionon the wire)
CodeArtifactRefUnrecognized
Section titled “CodeArtifactRefUnrecognized”A kind this client doesn't know yet, from a newer runtime: the object as it came, every field kept.
kind: str
Comparison
Section titled “Comparison”max_age_hours: float | None(maxAgeHourson the wire) (optional)suite: kindgi.client.Suite | None(optional)
Comparison1
Section titled “Comparison1”eval_run_id: uuid.UUID | None(evalRunIdon the wire) (optional)role: Union[Literal['reference', 'candidate', 'proof'], str]part: Union[Literal['search', 'hold-out'], str]block_id: str | None(blockIdon the wire) (optional)changed: dict[str, Any] | None(optional)score: float | None(optional)failed: str | None(optional)refused: list[kindgi.client.RefusedItem] | None(optional)hypothesis: str | None(optional)
ComparisonCandidateAgent
Section titled “ComparisonCandidateAgent”What ran on the cases: an agent version, or a flow version (with any versions it swapped in).
kind: Literal['agent']agent_id: str(agentIdon the wire)version: strpins_digest: str | None(pinsDigeston the wire) (optional)overrides: kindgi.client.Overrides | None(optional)
ComparisonCandidateFlow
Section titled “ComparisonCandidateFlow”What ran on the cases: an agent version, or a flow version (with any versions it swapped in).
kind: Literal['flow']flow_id: str(flowIdon the wire)version: strversions: kindgi.client.FlowVersionOverrides | None(optional)
ComparisonCaseResult
Section titled “ComparisonCaseResult”One case of a comparison: its replay runs, the scores, the items kept, dropped and new, the tool calls, and why it didn't run when it didn't.
case_id: str(caseIdon the wire)run_ids: list[str](runIdson the wire)baseline: kindgi.client.Baseline2candidate: list[kindgi.client.CandidateItem]changes: kindgi.client.Changes | None(optional)tools: list[kindgi.client.ComparisonCaseResultTool] | None(optional)diverged: boolrefused_writes: int(refusedWriteson the wire)no_context: bool(noContexton the wire)approval_skipped: bool(approvalSkippedon the wire)error: str | None(optional)stopped: kindgi.client.Stopped | None(optional)rescored: Optional[Literal[False]](optional)
ComparisonCaseResultTool
Section titled “ComparisonCaseResultTool”step: intcall_id: str(callIdon the wire)tool_id: str(toolIdon the wire)tool_version: str(toolVersionon the wire)arguments: Anysource: Literal['live', 'recorded', 'refused']recomputed: bool | None(optional)reason: str | None(optional)
ComparisonMetric
Section titled “ComparisonMetric”One metric, the recorded runs beside the candidate. null where a side had no judged evidence; n / weight are the candidate's evidence (cases with judged items, and the judgment weight behind them), baselineN / baselineWeight the recorded side's.
baseline: float | Nonecandidate: float | Nonedelta: float | Nonen: intweight: floatbaseline_n: int(baselineNon the wire)baseline_weight: float(baselineWeighton the wire)direction: Literal['higher']k: int | None(optional)spread: float | None(optional)fresh_weight: float | None(freshWeighton the wire) (optional)
CompleteApprovalBody
Section titled “CompleteApprovalBody”decision: Literal['approve', 'reject', 'escalate', 'withdraw']rationale: str | None(optional)value: Any | None(optional)
CompleteApprovalResult
Section titled “CompleteApprovalResult”A recorded decision, and what it did to the run waiting on the approval. runStatus is the run's status when the decision couldn't resolve its waitpoint because the run had already ended (e.g. cancelled after the decision was recorded); the decision stands.
kind: Union[Literal['terminal', 'escalated'], str]approval: kindgi.client.Approvaldecision: kindgi.client.ReviewDecisionnext_approval: kindgi.client.Approval | None(nextApprovalon the wire) (optional)waitpoint_resolved: bool(waitpointResolvedon the wire)run_status: Optional[Annotated[Union[Literal['pending', 'running', 'suspended', 'completed', 'failed', 'cancelled'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]](runStatuson the wire) (optional)resume: Optional[Annotated[kindgi.client.Resume | kindgi.client.Resume1 | kindgi.client.CompleteApprovalResultResumeUnrecognized, <kindgi.client._open.OpenUnion object at 0x107a703d0>]](optional)
CompleteApprovalResultResumeUnrecognized
Section titled “CompleteApprovalResultResumeUnrecognized”A kind this client doesn't know yet, from a newer runtime: the object as it came, every field kept.
kind: str
ComplianceEvidence
Section titled “ComplianceEvidence”One evidence record — matches @kindgi/specs/compliance-evidence.schema.json (payload is a versioned document opaque to the wire schema).
id: strtenant_id: uuid.UUID(tenantIdon the wire)project_id: uuid.UUID | None(projectIdon the wire) (optional)kind: strtimestamp: AwareDatetimeactor: kindgi.client.Actor | None(optional)subject: kindgi.client.Subject1 | None(optional)outcome: Optional[Annotated[Union[Literal['allowed', 'denied', 'succeeded', 'failed', 'escalated'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]](optional)payload: dict[str, Any]provenance_ref: kindgi.client.ProvenanceRef2 | None(provenanceRefon the wire) (optional)signature: kindgi.client.Signature1 | None(optional)
ComplianceEvidenceCollectionPage
Section titled “ComplianceEvidenceCollectionPage”data: list[kindgi.client.ComplianceEvidence]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)
Config
Section titled “Config”Transport-tagged config union. Server enforces config.transport === transport at registration.
transport: Literal['stdio']command: strargs: list[str] | None(optional)env: dict[str, str] | None(optional)
Config1
Section titled “Config1”Transport-tagged config union. Server enforces config.transport === transport at registration.
transport: Literal['http-sse']url: AnyUrlsse_url: AnyUrl | None(sseUrlon the wire) (optional)headers: dict[str, str] | None(optional)
Config2
Section titled “Config2”Transport-tagged config union. Server enforces config.transport === transport at registration.
transport: Literal['streamable-http']url: AnyUrlheaders: dict[str, str] | None(optional)
Config3
Section titled “Config3”Transport-tagged config union. Server enforces config.transport === transport at registration.
transport: Literal['stdio']command: strargs: list[str] | None(optional)env: dict[str, str] | None(optional)
Config4
Section titled “Config4”Transport-tagged config union. Server enforces config.transport === transport at registration.
transport: Literal['http-sse']url: AnyUrlsse_url: AnyUrl | None(sseUrlon the wire) (optional)headers: dict[str, str] | None(optional)
Config5
Section titled “Config5”Transport-tagged config union. Server enforces config.transport === transport at registration.
transport: Literal['streamable-http']url: AnyUrlheaders: dict[str, str] | None(optional)
Config6
Section titled “Config6”cron_expression: str(cronExpressionon the wire)timezone: str | None(optional)input: Any | None(optional)
Config7
Section titled “Config7”cron_expression: str | None(cronExpressionon the wire) (optional)timezone: str | None(optional)input: Any | None(optional)
Config8
Section titled “Config8”input: Any | None(optional)
Content
Section titled “Content”The new content: { values } for a settings block (its schema carries over), { template } for a prompt block (its parameters carry over).
values: dict[str, Any] | None(optional)template: str | None(optional)
Content1
Section titled “Content1”{ values } for a settings block (they must satisfy its schema), { template } for a prompt block.
values: dict[str, Any] | None(optional)template: str | None(optional)
Content2
Section titled “Content2”type: Literal['text']text: str
Content3
Section titled “Content3”type: Literal['image']data: strmime_type: str(mimeTypeon the wire)
Conversation
Section titled “Conversation”id: uuid.UUIDtenant_id: uuid.UUID(tenantIdon the wire)agent_id: str(agentIdon the wire)agent_version: str(agentVersionon the wire)title: strparticipant_id: str | None(participantIdon the wire) (optional)project_id: uuid.UUID | None(projectIdon the wire) (optional)opened_by: str | None(openedByon the wire) (optional)scope: dict[str, Any]status: Union[Literal['open', 'closed'], str]opened_at: AwareDatetime(openedAton the wire)closed_at: AwareDatetime | None(closedAton the wire) (optional)unregistered_at: AwareDatetime | None(unregisteredAton the wire) (optional)turn_count: int(turnCounton the wire)last_message_at: AwareDatetime | None(lastMessageAton the wire) (optional)metadata: dict[str, Any] | None(optional)
ConversationCollectionPage
Section titled “ConversationCollectionPage”data: list[kindgi.client.Conversation]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)opened_by: Optional[Annotated[Union[Literal['me'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]](openedByon the wire) (optional)
ConversationMessage
Section titled “ConversationMessage”sequence: introle: Union[Literal['user', 'agent', 'tool', 'system'], str]content: Anytool_call: kindgi.client.ToolCall | None(toolCallon the wire) (optional)actor: str | None(optional)created_at: AwareDatetime(createdAton the wire)
ConversationMessageCollectionPage
Section titled “ConversationMessageCollectionPage”data: list[kindgi.client.ConversationMessage]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
ConversationPolicy
Section titled “ConversationPolicy”history_limit: int | None(historyLimiton the wire) (optional)hitl_after_turns: int | None(hitlAfterTurnson the wire) (optional)
ConversationStatus
Section titled “ConversationStatus”root: Literal['open', 'closed']
CostAggregateGroup
Section titled “CostAggregateGroup”key: dict[str, str | None]count: inttotal_usd: float(totalUsdon the wire)tokens: kindgi.client.CostTokenTotals
CostAggregateResult
Section titled “CostAggregateResult”groups: list[kindgi.client.CostAggregateGroup]total_groups: int | None(totalGroupson the wire) (optional)truncated: bool | None(optional)total_usd: float(totalUsdon the wire)total_records: int(totalRecordson the wire)tokens: kindgi.client.CostTokenTotalstime_range: kindgi.client.TimeRange(timeRangeon the wire)group_by: list[Annotated[Union[Literal['agentId', 'runId', 'category', 'providerId', 'day', 'month', 'tenant', 'conversationId', 'model', 'servedModel', 'projectId', 'orgId', 'rootRunId', 'flowId'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]](groupByon the wire)
CostRecord
Section titled “CostRecord”id: strtenant_id: uuid.UUID(tenantIdon the wire)category: strprovider_id: str | None(providerIdon the wire) (optional)run_id: uuid.UUID | None(runIdon the wire) (optional)agent_id: str | None(agentIdon the wire) (optional)conversation_id: uuid.UUID | None(conversationIdon the wire) (optional)quantity: floatunit: strcost_usd: float | None(costUsdon the wire) (optional)occurred_at: AwareDatetime(occurredAton the wire)metrics: dict[str, Any] | None(optional)attributes: dict[str, Any] | None(optional)call_id: str | None(callIdon the wire) (optional)project_id: uuid.UUID | None(projectIdon the wire) (optional)root_run_id: uuid.UUID | None(rootRunIdon the wire) (optional)parent_run_id: uuid.UUID | None(parentRunIdon the wire) (optional)agent_version: str | None(agentVersionon the wire) (optional)flow_id: str | None(flowIdon the wire) (optional)node_id: str | None(nodeIdon the wire) (optional)step: int | None(optional)purpose: str | None(optional)model: str | None(optional)served_model: str | None(servedModelon the wire) (optional)fallback: bool | None(optional)status: Optional[Annotated[Union[Literal['ok', 'failed'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]](optional)usage: kindgi.client.ModelCallTokens | None(optional)duration_ms: int | None(durationMson the wire) (optional)finish_reason: str | None(finishReasonon the wire) (optional)provider_request_id: str | None(providerRequestIdon the wire) (optional)attempts: int | None(optional)error: kindgi.client.ModelCallError | None(optional)raw_usage: kindgi.client.RawUsage | None(rawUsageon the wire) (optional)
CostRecordCollectionPage
Section titled “CostRecordCollectionPage”data: list[kindgi.client.CostRecord]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
CostTokenTotals
Section titled “CostTokenTotals”prompt: intcompletion: intcache_read: int(cacheReadon the wire)cache_write: int(cacheWriteon the wire)reasoning: int
CreateJudgeClassBody
Section titled “CreateJudgeClassBody”scope: kindgi.client.JudgeClassScopeTenant | kindgi.client.JudgeClassScopeProject | kindgi.client.JudgeClassScopeAgent | kindgi.client.JudgeClassScopeUnrecognizedname: strweight: floatdescription: str | None(optional)assertable_by: kindgi.client.JudgeClassAssertableBy | None(assertableByon the wire) (optional)
CreateJudgmentBody
Section titled “CreateJudgmentBody”run_id: str(runIdon the wire)item: kindgi.client.JudgedItemverdict: Literal['yes', 'no']reason: str | None(optional)judge_class_id: str | None(judgeClassIdon the wire) (optional)participant_id: str | None(participantIdon the wire) (optional)
CreateMemoryErasureBody
Section titled “CreateMemoryErasureBody”root: kindgi.client.MemoryErasureFactSelector | kindgi.client.MemoryErasureSubjectSelector | kindgi.client.MemoryErasureConversationSelector
CreateProposalBody
Section titled “CreateProposalBody”A hand-written proposal: new content for a data block that fromVersion pins, for a live scope. The same change from the same version for the same scope is one proposal (answered with X-Proposal-Deduped: true).
agent_id: str(agentIdon the wire)from_version: str(fromVersionon the wire)scope: kindgi.client.LiveScopeTenant | kindgi.client.LiveScopeOrg | kindgi.client.LiveScopeProject | kindgi.client.LiveScopeSegment | kindgi.client.LiveScopeUnrecognizedtier: Union[Literal['settings-block', 'prompt-block'], str]change: kindgi.client.Changehypothesis: strevidence: kindgi.client.Evidence1 | None(optional)
CreateResourceResult
Section titled “CreateResourceResult”Shared 201 response body for platform-hierarchy create endpoints — the freshly-assigned id of the created row.
id: str
CreateServiceAccountBody
Section titled “CreateServiceAccountBody”name: strdescription: str | None(optional)grants: list[Annotated[kindgi.client.ServiceAccountGrantTenantAdmin | kindgi.client.ServiceAccountGrantTenantMember | kindgi.client.ServiceAccountGrantProjectBody, FieldInfo(annotation=NoneType, required=True, discriminator='kind')]] | None(optional)
CreateSystemTenantBody
Section titled “CreateSystemTenantBody”name: strslug: str | None(optional)production_allowed: bool | None(productionAllowedon the wire) (optional)test: bool | None(optional)image_prefix: str | None(imagePrefixon the wire) (optional)first_admin: kindgi.client.FirstAdmin | None(firstAdminon the wire) (optional)
CreateSystemTenantResult
Section titled “CreateSystemTenantResult”tenant: kindgi.client.SystemTenantfirst_admin: kindgi.client.FirstAdmin1 | None(firstAdminon the wire) (optional)admin_key: kindgi.client.AdminKey | None(adminKeyon the wire) (optional)
CreateUserBody
Section titled “CreateUserBody”display_name: str(displayNameon the wire)primary_email: str | None(primaryEmailon the wire) (optional)send_invite: bool | None(sendInviteon the wire) (optional)
CreateWebhookEndpointBody
Section titled “CreateWebhookEndpointBody”url: AnyUrlevents: list[Annotated[Union[Literal['run.finished', 'improvement-pass.finished', 'approval.requested'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]]filter: kindgi.client.WebhookEndpointFilter | None(optional)secret_ref: kindgi.client.WebhookSecretRef(secretRefon the wire)description: str | None(optional)