Models: M
MCPAuthHeader
Section titled “MCPAuthHeader”One header a header auth sends: <name>: <prefix><secret>.
name: strsecret_ref: kindgi.client.MCPEndpointSecretRef(secretRefon the wire)prefix: str | None(optional)
MCPBasicAuth
Section titled “MCPBasicAuth”HTTP Basic: the runtime sends Authorization: Basic base64(<username>:<secret>), with the secret secretRef names (a WordPress Application Password, for one).
scheme: Literal['basic']username: strsecret_ref: kindgi.client.MCPEndpointSecretRef(secretRefon the wire)
MCPEndpoint
Section titled “MCPEndpoint”endpoint_id: str(endpointIdon the wire)name: strtransport: Union[Literal['stdio', 'http-sse', 'streamable-http'], str]config: kindgi.client.MCPEndpointConfigStdio | kindgi.client.MCPEndpointConfigHttpSse | kindgi.client.MCPEndpointConfigStreamableHttp | kindgi.client.MCPEndpointConfigUnrecognizedsecret_ref: kindgi.client.MCPEndpointSecretRef | None(secretRefon the wire) (optional)auth: Optional[Annotated[kindgi.client.MCPBasicAuth | kindgi.client.MCPOAuth2ClientCredentialsAuth | kindgi.client.MCPHeaderAuth | kindgi.client.MCPEndpointAuthUnrecognized, <kindgi.client._open.OpenUnion object at 0x10a55c2d0>]](optional)instructions: str | None(optional)metadata: dict[str, Any] | None(optional)send_traceparent: bool | None(sendTraceparenton 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 0x10a55c610>]]] | None(secretScopeson the wire) (optional)
MCPEndpointAuthUnrecognized
Section titled “MCPEndpointAuthUnrecognized”A scheme this client doesn't know yet, from a newer runtime: the object as it came, every field kept.
scheme: str
MCPEndpointCollectionPage
Section titled “MCPEndpointCollectionPage”data: list[kindgi.client.MCPEndpoint]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
MCPEndpointConfigHttpSse
Section titled “MCPEndpointConfigHttpSse”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)
MCPEndpointConfigStdio
Section titled “MCPEndpointConfigStdio”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)
MCPEndpointConfigStreamableHttp
Section titled “MCPEndpointConfigStreamableHttp”Transport-tagged config union. Server enforces config.transport === transport at registration.
transport: Literal['streamable-http']url: AnyUrlheaders: dict[str, str] | None(optional)
MCPEndpointConfigUnrecognized
Section titled “MCPEndpointConfigUnrecognized”A transport this client doesn't know yet, from a newer runtime: the object as it came, every field kept.
transport: str
MCPEndpointSecretRef
Section titled “MCPEndpointSecretRef”The secret an MCP endpoint authenticates with: a name in the deployment's secrets store, resolved at the endpoint's tenant scope by the runtime (the shape webhooks and providers use). As the endpoint's own secretRef, it is sent as its bearer; inside auth, it is the scheme's password, client secret or header value. The endpoint keeps only this reference.
env_name: str(envNameon the wire)name: str
MCPHeaderAuth
Section titled “MCPHeaderAuth”Headers of the server's own, each with a secret: an API key in X-Api-Key, a key and a secret in two headers, or Authorization with a prefix other than Bearer (Token …). The runtime resolves each secretRef when it connects, and refuses to follow a redirect with them, as it does for every auth.
scheme: Literal['header']headers: list[kindgi.client.MCPAuthHeader]
MCPOAuth2ClientCredentialsAuth
Section titled “MCPOAuth2ClientCredentialsAuth”OAuth 2 client credentials: the runtime asks tokenUrl for an access token (grant_type=client_credentials) as clientId, with the client secret secretRef names, sends it as the endpoint's bearer, and asks for a new one before it expires (Drupal's Simple OAuth, for one). The token is never stored.
scheme: Literal['oauth2-client-credentials']token_url: AnyUrl(tokenUrlon the wire)client_id: str(clientIdon the wire)secret_ref: kindgi.client.MCPEndpointSecretRef(secretRefon the wire)scope: str | None(optional)audience: str | None(optional)client_auth: Optional[Annotated[Union[Literal['client_secret_basic', 'client_secret_post'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]](clientAuthon the wire) (optional)
MCPPrompt
Section titled “MCPPrompt”name: strdescription: str | None(optional)arguments: list[kindgi.client.MCPPromptArgument] | None(optional)
MCPPromptArgument
Section titled “MCPPromptArgument”name: strdescription: str | None(optional)required: bool | None(optional)
MCPPromptCollection
Section titled “MCPPromptCollection”data: list[kindgi.client.MCPPrompt]
MCPPromptMessage
Section titled “MCPPromptMessage”role: Union[Literal['user', 'assistant'], str]content: kindgi.client.MCPPromptMessageContentText | kindgi.client.MCPPromptMessageContentImage | kindgi.client.MCPPromptMessageContentUnrecognized
MCPPromptMessageContentImage
Section titled “MCPPromptMessageContentImage”type: Literal['image']data: strmime_type: str(mimeTypeon the wire)
MCPPromptMessageContentText
Section titled “MCPPromptMessageContentText”type: Literal['text']text: str
MCPPromptMessageContentUnrecognized
Section titled “MCPPromptMessageContentUnrecognized”A type this client doesn't know yet, from a newer runtime: the object as it came, every field kept.
type: str
MCPResource
Section titled “MCPResource”uri: strname: strdescription: str | None(optional)mime_type: str | None(mimeTypeon the wire) (optional)
MCPResourceCollection
Section titled “MCPResourceCollection”data: list[kindgi.client.MCPResource]
MCPResourceContent
Section titled “MCPResourceContent”uri: strmime_type: str | None(mimeTypeon the wire) (optional)text: str | None(optional)blob: str | None(optional)
MailFire
Section titled “MailFire”One mail a mail trigger found and what came of it. A thread's mail runs one at a time, oldest first.
fire_id: str(fireIdon the wire)trigger_id: str(triggerIdon the wire)fired_at: AwareDatetime(firedAton the wire)outcome: Union[Literal['pending', 'started', 'skipped', 'refused', 'failed'], str]run_id: uuid.UUID | None(runIdon the wire) (optional)version: int | None(optional)detail: str | None(optional)counts_toward_pause: bool | None(countsTowardPauseon the wire) (optional)
MailFirePage
Section titled “MailFirePage”data: list[kindgi.client.MailFire]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)
MailTriggerCollectionPage
Section titled “MailTriggerCollectionPage”data: list[kindgi.client.MailTriggerRecord]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
MailTriggerDefinition
Section titled “MailTriggerDefinition”What a mail trigger's version runs, as whom, and which mailbox it reads at what pace, as its record names them, and never its state (status, next or last fire).
flow_id: str | None(flowIdon the wire) (optional)flow_version: str | None(flowVersionon the wire) (optional)agent_id: str | None(agentIdon the wire) (optional)agent_version: str | None(agentVersionon the wire) (optional)project_id: uuid.UUID(projectIdon the wire)owner: kindgi.client.TriggerOwnermailbox: kindgi.client.MailTriggerMailboxfolder: str | None(optional)poll_seconds: int(pollSecondson the wire)runs_per_hour: int(runsPerHouron the wire)label: str | Nonetools_allowed_unattended: list[kindgi.client.ToolsAllowedUnattendedItem] | None(toolsAllowedUnattendedon the wire) (optional)
MailTriggerMailbox
Section titled “MailTriggerMailbox”The mailbox a mail trigger reads: its app (google: Gmail; microsoft: Outlook) and whose it is (company: the company's mailbox, through the company's connection of that app; person: the trigger owner's own, through their connection).
app: Union[Literal['google', 'microsoft'], str]as_: Union[Literal['person', 'company'], str](ason the wire)
MailTriggerRecord
Section titled “MailTriggerRecord”A mail trigger: each new mail in its mailbox's folder starts a run of its agent or flow, with the mail as the run's input, as its owner. In such a run, every call that changes something, or uses the run's own mailbox, waits for a person's yes unless the trigger lists it (toolsAllowedUnattended).
trigger_id: str(triggerIdon the wire)flow_id: str | None(flowIdon the wire) (optional)flow_version: str | None(flowVersionon the wire) (optional)agent_id: str | None(agentIdon the wire) (optional)agent_version: str | None(agentVersionon the wire) (optional)project_id: uuid.UUID(projectIdon the wire)owner: kindgi.client.TriggerOwnermailbox: kindgi.client.MailTriggerMailboxfolder: str | None(optional)poll_seconds: int(pollSecondson the wire)runs_per_hour: int(runsPerHouron the wire)label: str | Nonestatus: Union[Literal['active', 'paused'], str]status_reason: str | None(statusReasonon the wire) (optional)version: int | None(optional)account: kindgi.client.Account | None(optional)last_polled_at: AwareDatetime | None(lastPolledAton the wire) (optional)tools_allowed_unattended: list[kindgi.client.ToolsAllowedUnattendedItem] | None(toolsAllowedUnattendedon the wire) (optional)last_fired_at: AwareDatetime | None(lastFiredAton the wire)created_at: AwareDatetime(createdAton the wire)updated_at: AwareDatetime(updatedAton the wire)
MailTriggerVersion
Section titled “MailTriggerVersion”One version of a mail trigger: what it was from createdAt until the next. A new mail's run uses the newest when it starts, and keeps it.
trigger_id: str(triggerIdon the wire)version: intcreated_at: AwareDatetime(createdAton the wire)created_by: str | None(createdByon the wire) (optional)cause: Union[Literal['register', 'edit', 'owner', 'first-fire', 'unversioned-edit', 'pin'], str]definition: kindgi.client.MailTriggerDefinition
MailTriggerVersionPage
Section titled “MailTriggerVersionPage”Newest first.
data: list[kindgi.client.MailTriggerVersion]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)
MemoryErasure
Section titled “MemoryErasure”id: uuid.UUIDselector_kind: Union[Literal['fact', 'participant', 'external', 'conversation'], str](selectorKindon the wire)selector: kindgi.client.MemoryErasureFactSelector | kindgi.client.MemoryErasureSubjectSelector | kindgi.client.MemoryErasureConversationSelector | None(optional)status: Union[Literal['pending', 'running', 'waiting-on-run', 'completed', 'failed'], str]phase: Union[Literal['seed', 'expand', 'settle', 'erase', 'done'], str]requested_by: str(requestedByon the wire)matchable: boolcounts: dict[str, CountsAdditionalProperty]attempts: intlast_error: str | None(lastErroron the wire) (optional)waiting_on: kindgi.client.WaitingOn | None(waitingOnon the wire) (optional)forced: Optional[Literal[True]](optional)settle_rounds_capped: Optional[Literal[True]](settleRoundsCappedon the wire) (optional)created_at: AwareDatetime(createdAton the wire)started_at: AwareDatetime | None(startedAton the wire) (optional)completed_at: AwareDatetime | None(completedAton the wire) (optional)replayed_at: AwareDatetime | None(replayedAton the wire) (optional)
MemoryErasureConversationSelector
Section titled “MemoryErasureConversationSelector”One conversation.
conversation_id: str(conversationIdon the wire)
MemoryErasureCreated
Section titled “MemoryErasureCreated”id: uuid.UUIDselector_kind: Union[Literal['fact', 'participant', 'external', 'conversation'], str](selectorKindon the wire)selector: kindgi.client.MemoryErasureFactSelector | kindgi.client.MemoryErasureSubjectSelector | kindgi.client.MemoryErasureConversationSelector | None(optional)status: Union[Literal['pending', 'running', 'waiting-on-run', 'completed', 'failed'], str]phase: Union[Literal['seed', 'expand', 'settle', 'erase', 'done'], str]requested_by: str(requestedByon the wire)matchable: boolcounts: dict[str, CountsAdditionalProperty]attempts: intlast_error: str | None(lastErroron the wire) (optional)waiting_on: kindgi.client.WaitingOn | None(waitingOnon the wire) (optional)forced: Optional[Literal[True]](optional)settle_rounds_capped: Optional[Literal[True]](settleRoundsCappedon the wire) (optional)created_at: AwareDatetime(createdAton the wire)started_at: AwareDatetime | None(startedAton the wire) (optional)completed_at: AwareDatetime | None(completedAton the wire) (optional)replayed_at: AwareDatetime | None(replayedAton the wire) (optional)warnings: list[kindgi.client.Warning1] | None(optional)
MemoryErasureFactSelector
Section titled “MemoryErasureFactSelector”One fact.
fact_id: str(factIdon the wire)
MemoryErasureLedger
Section titled “MemoryErasureLedger”data: list[kindgi.client.MemoryErasureLedgerEntry]
MemoryErasureLedgerEntry
Section titled “MemoryErasureLedgerEntry”id: uuid.UUIDselector_kind: Union[Literal['fact', 'participant', 'external', 'conversation'], str](selectorKindon the wire)selector_hmac: str | None(selectorHmacon the wire) (optional)key_id: str | None(keyIdon the wire) (optional)requested_by: str(requestedByon the wire)status: Union[Literal['pending', 'running', 'waiting-on-run', 'completed', 'failed'], str]created_at: AwareDatetime(createdAton the wire)completed_at: AwareDatetime | None(completedAton the wire) (optional)
MemoryErasurePage
Section titled “MemoryErasurePage”data: list[kindgi.client.MemoryErasure]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)
MemoryErasureSubjectSelector
Section titled “MemoryErasureSubjectSelector”A person: an app's end user (participant), or an external subject facts name. Erasing a Kindgi user isn't offered.
subject: kindgi.client.Subject
Metadatum
Section titled “Metadatum”root: str
Methods
Section titled “Methods”The ways in this deployment allows, for a sign-in page to show. Absent from older servers.
identity_providers: bool(identityProviderson the wire)api_token: bool(apiTokenon the wire)session_cookie: Optional[Annotated[Union[Literal['secure', 'plain'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]](sessionCookieon the wire) (optional)email_link: kindgi.client.EmailLink | None(emailLinkon the wire) (optional)
Metric
Section titled “Metric”name: Union[Literal['weightedYesShare', 'judgedCoverage', 'weightedPrecisionAtK'], str]k: int | None(optional)min_candidate: float | None(minCandidateon the wire) (optional)max_drop: float | None(maxDropon the wire) (optional)
Metrics
Section titled “Metrics”weighted_yes_share: kindgi.client.ComparisonMetric(weightedYesShareon the wire)judged_coverage: kindgi.client.ComparisonMetric(judgedCoverageon the wire)weighted_precision_at_k: kindgi.client.ComparisonMetric(weightedPrecisionAtKon the wire)
MintPublicRunTokenBody
Section titled “MintPublicRunTokenBody”run_ids: list[kindgi.client.RunId](runIdson the wire)expires_in_seconds: int | None(expiresInSecondson the wire) (optional)
MintPublicRunTokenResult
Section titled “MintPublicRunTokenResult”token: strexpires_at: AwareDatetime(expiresAton the wire)run_ids: list[str](runIdson the wire)
MintSystemKeyBody
Section titled “MintSystemKeyBody”scopes: list[Literal['system:tenants', 'system:tenants:create', 'system:tenants:image-prefix', 'system:tenants:production', 'system:tenants:limits', 'system:tenants:contacts', 'system:tenants:purge', 'system:suspend', 'system:deployments', 'system:pack-env', 'system:usage:read', 'system:license', 'kindgi:system']]label: str | None(optional)expires_at: AwareDatetime | None(expiresAton the wire) (optional)
MintSystemKeyResult
Section titled “MintSystemKeyResult”The new system key, plus its secret.
id: strlabel: str | None(optional)scopes: list[Annotated[Union[Literal['system:tenants', 'system:tenants:create', 'system:tenants:image-prefix', 'system:tenants:production', 'system:tenants:limits', 'system:tenants:contacts', 'system:tenants:purge', 'system:suspend', 'system:deployments', 'system:pack-env', 'system:usage:read', 'system:license', 'kindgi:system'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]]created_at: AwareDatetime(createdAton the wire)expires_at: AwareDatetime | None(expiresAton the wire) (optional)revoked_at: AwareDatetime | None(revokedAton the wire) (optional)minted_by: str(mintedByon the wire)token: str
MintTokenBody
Section titled “MintTokenBody”A new API key. for is whom it acts for: the caller by default; only a tenant admin mints for someone else.
for_: kindgi.client.ApiKeyPrincipal | None(foron the wire) (optional)role: Optional[Literal['admin', 'member']](optional)capabilities: list[kindgi.client.Capability] | None(optional)label: str | None(optional)expires_at: AwareDatetime | None(expiresAton the wire) (optional)project_id: uuid.UUID | None(projectIdon the wire) (optional)
MintTokenResult
Section titled “MintTokenResult”The new key, plus its secret.
token_id: uuid.UUID(tokenIdon the wire)principal: kindgi.client.ApiKeyPrincipal | None(optional)role: Union[Literal['admin', 'member'], str]capabilities: list[kindgi.client.Capability]label: str | None(optional)project_id: uuid.UUID | None(projectIdon the wire) (optional)created_by: str | None(createdByon the wire) (optional)created_at: AwareDatetime(createdAton the wire)expires_at: AwareDatetime | None(expiresAton the wire) (optional)revoked_at: AwareDatetime | None(revokedAton the wire) (optional)last_used_at: AwareDatetime | None(lastUsedAton the wire) (optional)token: str
For a drafter that used a model: which.
provider_id: str(providerIdon the wire)model: str
Model1
Section titled “Model1”For a prompt pass: the provider and model that drafts the templates.
provider_id: str(providerIdon the wire)model: str
Model2
Section titled “Model2”For a prompt pass: the tenant's provider and model that drafts the templates.
provider_id: str(providerIdon the wire)model: str
Model3
Section titled “Model3”provider_id: str(providerIdon the wire)model: strruns: int
Model4
Section titled “Model4”provider_id: str(providerIdon the wire)model: str
ModelCallError
Section titled “ModelCallError”Why a model call failed (status: failed).
message: str
ModelCallThinking
Section titled “ModelCallThinking”The call's thinking. asked without level: nothing was sent (the model doesn't think, or its adapter doesn't say). level without asked: the model's thinking.default. asked and level differ: the level was rounded to one the model takes, and the call warned thinking-level-adjusted.
asked: Optional[Annotated[Union[Literal['lowest', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]](optional)level: Optional[Annotated[Union[Literal['lowest', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]](optional)sent: dict[str, str] | None(optional)
ModelCallTokens
Section titled “ModelCallTokens”The call's tokens. promptTokens / completionTokens are the totals; cacheReadTokens / cacheWriteTokens are parts of promptTokens, reasoningTokens of completionTokens, present when the provider reports them.
prompt_tokens: int(promptTokenson the wire)completion_tokens: int(completionTokenson the wire)cache_read_tokens: int | None(cacheReadTokenson the wire) (optional)cache_write_tokens: int | None(cacheWriteTokenson the wire) (optional)reasoning_tokens: int | None(reasoningTokenson the wire) (optional)
ModelInfo
Section titled “ModelInfo”name: strcontext_window: int(contextWindowon the wire)features: list[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 0x10980e890>]]cost: kindgi.client.ProviderCostp95_latency_ms: float | None(p95LatencyMson the wire) (optional)max_output_tokens: int | None(maxOutputTokenson the wire) (optional)sampling: bool | None(optional)thinking: kindgi.client.ModelThinking | None(optional)description: str | None(optional)
ModelThinking
Section titled “ModelThinking”How the model thinks before it answers, and the levels it takes, so a call's level (an agent's model settings, or a judge's lowest) is sent as one it takes: any other is rounded to the next one it takes, or its highest, with a thinking-level-adjusted warning. Absent: it doesn't think, or nothing is known, and nothing is sent for it.
mode: Union[Literal['adaptive', 'always'], str]lowest: strlevels: list[Annotated[Union[Literal['minimal', 'low', 'medium', 'high', 'xhigh', 'max'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]] | None(optional)default: Optional[Annotated[Union[Literal['lowest', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]](optional)
MyKeyLimits
Section titled “MyKeyLimits”The caller's API key, when it is one, and what it limits.
token_id: str(tokenIdon the wire)role: Optional[Annotated[Union[Literal['admin', 'member'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]](optional)project_id: str | None(projectIdon the wire) (optional)
MyOrgAccess
Section titled “MyOrgAccess”org_id: str(orgIdon the wire)name: strrole: Union[Literal['admin', 'member'], str]
MyPermissions
Section titled “MyPermissions”What the caller may do, with its API key's limits applied: tenant admin and member, its reviewer role, its key's limits and capabilities, the projects it may read with its role in each and how it holds it, its orgs and teams, and what each project role allows. Only what the caller may see: nothing names a project it can't read, or anyone else's role.
tenant_id: uuid.UUID(tenantIdon the wire)tenant: kindgi.client.MyTenantAccessreviewer: kindgi.client.MyReviewerAccess | None(optional)key: kindgi.client.MyKeyLimits | None(optional)token_capabilities: list[str](tokenCapabilitieson the wire)projects: list[kindgi.client.MyProjectAccess]orgs: list[kindgi.client.MyOrgAccess]teams: list[kindgi.client.MyTeamAccess]capabilities: kindgi.client.RoleCapabilitiesread_only_notice: str | None(readOnlyNoticeon the wire) (optional)license_operator_only: bool | None(licenseOperatorOnlyon the wire) (optional)
MyProjectAccess
Section titled “MyProjectAccess”project_id: str(projectIdon the wire)name: strrole: Union[Literal['owner', 'admin', 'editor', 'viewer'], str]via: list[Annotated[kindgi.client.AccessPathDirect | kindgi.client.AccessPathTeam | kindgi.client.AccessPathOrgAdmin | kindgi.client.AccessPathTenantAdmin | kindgi.client.AccessPathUnrecognized, <kindgi.client._open.OpenUnion object at 0x10a3da610>]]
MyReviewerAccess
Section titled “MyReviewerAccess”role: Union[Literal['standard', 'senior', 'admin'], str]id: str | None(optional)decides: list[Annotated[Union[Literal['standard', 'senior', 'admin'], str], <kindgi.client._open.OpenEnum object at 0x10980e890>]]can_decide: bool(canDecideon the wire)
MyTeamAccess
Section titled “MyTeamAccess”team_id: str(teamIdon the wire)name: strrole: Union[Literal['admin', 'member'], str]
MyTenantAccess
Section titled “MyTenantAccess”admin: boolmember: bool | None(optional)