Models: C
CallbackBody
Section titled “CallbackBody”code: strstate: str
CallbackResult
Section titled “CallbackResult”session_token: str(sessionTokenon the wire)session_id: str(sessionIdon the wire)expires_at: AwareDatetime(expiresAton the wire)
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, Literal['structured-output', 'vision', 'audio-input', 'audio-output', 'tool-use', 'parallel-tool-use', 'thinking', 'long-context', 'code-execution', 'web-search', 'file-search', 'streaming', 'batch']]description: strkind: str | None(optional)params_schema: dict[str, Any] | None(paramsSchemaon the wire) (optional)
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)
CodeArtifactRef1
Section titled “CodeArtifactRef1”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)
CodeArtifactRef2
Section titled “CodeArtifactRef2”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)
CompleteApprovalBody
Section titled “CompleteApprovalBody”decision: Literal['approve', 'reject', 'escalate', 'withdraw']rationale: str | None(optional)value: Any | None(optional)
CompleteApprovalResult
Section titled “CompleteApprovalResult”kind: Literal['terminal', 'escalated']approval: kindgi.client.Approvaldecision: kindgi.client.ReviewDecisionnext_approval: kindgi.client.Approval | None(nextApprovalon the wire) (optional)waitpoint_resolved: bool(waitpointResolvedon the wire)
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.Subject | None(optional)outcome: Optional[Literal['allowed', 'denied', 'succeeded', 'failed', 'escalated']](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)
Config10
Section titled “Config10”input: Any | 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”event_kind: str(eventKindon the wire)input: Any | None(optional)
Config9
Section titled “Config9”event_kind: str | None(eventKindon the wire) (optional)input: Any | None(optional)
Content
Section titled “Content”type: Literal['text']text: str
Content1
Section titled “Content1”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)scope: dict[str, Any]status: Literal['open', 'closed']opened_at: AwareDatetime(openedAton the wire)closed_at: AwareDatetime | None(closedAton 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)
ConversationMessage
Section titled “ConversationMessage”sequence: introle: Literal['user', 'agent', 'tool', 'system']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)auto_close_after_inactive_seconds: int | None(autoCloseAfterInactiveSecondson 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)
CostAggregateResult
Section titled “CostAggregateResult”groups: list[kindgi.client.CostAggregateGroup]total_usd: float(totalUsdon the wire)total_records: int(totalRecordson the wire)time_range: kindgi.client.TimeRange(timeRangeon the wire)group_by: list[Literal['agentId', 'runId', 'category', 'providerId', 'day', 'month', 'tenant', 'conversationId']](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)
CostRecordCollectionPage
Section titled “CostRecordCollectionPage”data: list[kindgi.client.CostRecord]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
CreateResourceResult
Section titled “CreateResourceResult”Shared 201 response body for platform-hierarchy create endpoints — the freshly-assigned id of the created row.
id: str
CreateWebhookEndpointBody
Section titled “CreateWebhookEndpointBody”url: AnyUrlevents: list[Literal['run.finished']]filter: kindgi.client.WebhookEndpointFilter | None(optional)secret_ref: kindgi.client.WebhookSecretRef(secretRefon the wire)description: str | None(optional)
Criterion
Section titled “Criterion”How the dry-run judges whether the candidate is good enough to submit for review. Two kinds: min-pass-rate (candidate pass rate ≥ threshold) or strict-improvement (candidate pass rate exceeds baseline by ≥ delta).
kind: Literal['min-pass-rate']min_pass_rate: float(minPassRateon the wire)
Criterion1
Section titled “Criterion1”How the dry-run judges whether the candidate is good enough to submit for review. Two kinds: min-pass-rate (candidate pass rate ≥ threshold) or strict-improvement (candidate pass rate exceeds baseline by ≥ delta).
kind: Literal['strict-improvement']baseline_pass_rate: float(baselinePassRateon the wire)min_delta: float(minDeltaon the wire)