Models: W
WaitingOn
Section titled “WaitingOn”The run it waits (or waited) for, and until when; kept as the record of the wait.
run_id: uuid.UUID(runIdon the wire)until: AwareDatetime | None(optional)
Warning
Section titled “Warning”code: strmessage: str
Warning1
Section titled “Warning1”code: Literal['erasure-unmatchable']message: str
WebhookDelivery
Section titled “WebhookDelivery”delivery_id: str(deliveryIdon the wire)endpoint_id: str(endpointIdon the wire)event: kindgi.client.RunFinishedEvent | kindgi.client.ImprovementPassFinishedEvent | kindgi.client.ApprovalRequestedEvent | kindgi.client.WebhookTestEventstatus: Literal['pending', 'delivered', 'failed']attempts: intnext_attempt_at: AwareDatetime | None(nextAttemptAton the wire)last_attempt_at: AwareDatetime | None(lastAttemptAton the wire)last_response_status: int | None(lastResponseStatuson the wire)last_error: str | None(lastErroron the wire)created_at: AwareDatetime(createdAton the wire)delivered_at: AwareDatetime | None(deliveredAton the wire)
WebhookDeliveryCollectionPage
Section titled “WebhookDeliveryCollectionPage”data: list[kindgi.client.WebhookDelivery]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
WebhookEndpoint
Section titled “WebhookEndpoint”endpoint_id: str(endpointIdon the wire)url: AnyUrlevents: list[Literal['run.finished', 'improvement-pass.finished', 'approval.requested']]filter: kindgi.client.WebhookEndpointFilterdescription: str | Nonesecret_ref: kindgi.client.WebhookSecretRef(secretRefon the wire)created_at: AwareDatetime(createdAton the wire)updated_at: AwareDatetime(updatedAton the wire)
WebhookEndpointCollectionPage
Section titled “WebhookEndpointCollectionPage”data: list[kindgi.client.WebhookEndpoint]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
WebhookEndpointFilter
Section titled “WebhookEndpointFilter”Which events reach the endpoint. Every field narrows; absent fields do not. run.finished is sent for top-level runs only.
project_id: str | None(projectIdon the wire) (optional)flow_ids: list[kindgi.client.FlowId] | None(flowIdson the wire) (optional)include_dry_runs: bool | None(includeDryRunson the wire) (optional)
WebhookEndpointUnregisterResult
Section titled “WebhookEndpointUnregisterResult”endpoint_id: str(endpointIdon the wire)unregistered: bool
WebhookFire
Section titled “WebhookFire”One delivery to a webhook trigger and what came of it. A fire keeps the delivery's event only until its run starts; then only the run has it.
fire_id: str(fireIdon the wire)trigger_id: str(triggerIdon the wire)fired_at: AwareDatetime(firedAton the wire)outcome: Literal['pending', 'started', 'skipped', 'refused', 'failed']run_id: uuid.UUID | None(runIdon the wire) (optional)detail: str | None(optional)counts_toward_pause: bool | None(countsTowardPauseon the wire) (optional)duplicates: int | None(optional)last_duplicate_at: AwareDatetime | None(lastDuplicateAton the wire) (optional)
WebhookFirePage
Section titled “WebhookFirePage”data: list[kindgi.client.WebhookFire]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)
WebhookReceipt
Section titled “WebhookReceipt”What the receiver did with a delivery.
fire_id: str | None(fireIdon the wire) (optional)duplicate: bool | None(optional)skipped: Optional[Literal['paused', 'tenant-suspended', 'project-suspended']](optional)received: Optional[Literal['ping']](optional)
WebhookSecretRef
Section titled “WebhookSecretRef”A secret by name in the deployment's secrets store, resolved at tenant scope (the same shape as a provider's secret_ref). The value is whsec_ + base64 of at least 24 random bytes (or that base64 alone); the store keeps it, the endpoint keeps only this reference.
env_name: str(envNameon the wire)name: str
WebhookSignature1
Section titled “WebhookSignature1”How a webhook trigger's sender signs. hmac-sha256: an HMAC-SHA256 of the raw body under the secret's UTF-8 bytes, in header, hex or base64, after an optional prefix (GitHub and Drupal's Webhooks module: X-Hub-Signature-256, hex, sha256=; WooCommerce: X-WC-Webhook-Signature, base64; Shopify: X-Shopify-Hmac-Sha256, base64). No timestamp is signed, so only the trigger's dedupe catches a replay. standard-webhooks: the Standard Webhooks format (webhook-id, webhook-timestamp, webhook-signature: v1,<base64> over {id}.{timestamp}.{body}, a whsec_ secret), refused past toleranceSeconds (default 300) from the receiver's clock; it dedupes on its webhook-id.
kind: Literal['hmac-sha256']encoding: Literal['hex', 'base64']header: strprefix: str | None(optional)
WebhookSignature2
Section titled “WebhookSignature2”How a webhook trigger's sender signs. hmac-sha256: an HMAC-SHA256 of the raw body under the secret's UTF-8 bytes, in header, hex or base64, after an optional prefix (GitHub and Drupal's Webhooks module: X-Hub-Signature-256, hex, sha256=; WooCommerce: X-WC-Webhook-Signature, base64; Shopify: X-Shopify-Hmac-Sha256, base64). No timestamp is signed, so only the trigger's dedupe catches a replay. standard-webhooks: the Standard Webhooks format (webhook-id, webhook-timestamp, webhook-signature: v1,<base64> over {id}.{timestamp}.{body}, a whsec_ secret), refused past toleranceSeconds (default 300) from the receiver's clock; it dedupes on its webhook-id.
kind: Literal['standard-webhooks']tolerance_seconds: int | None(toleranceSecondson the wire) (optional)
WebhookTestEvent
Section titled “WebhookTestEvent”id: strtype: Literal['webhook.test']created_at: AwareDatetime(createdAton the wire)data: kindgi.client.Data2
WebhookTriggerCollectionPage
Section titled “WebhookTriggerCollectionPage”data: list[kindgi.client.WebhookTriggerRecord]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
WebhookTriggerRecord
Section titled “WebhookTriggerRecord”A webhook trigger: a signed request to its receiveUrl starts a run of its flow, as its owner. The signing secret is never on it, only its name.
trigger_id: str(triggerIdon the wire)webhook_id: str(webhookIdon the wire)receive_url: AnyUrl | None(receiveUrlon the wire) (optional)flow_id: str(flowIdon the wire)flow_version: str(flowVersionon the wire)project_id: uuid.UUID(projectIdon the wire)owner: kindgi.client.TriggerOwnerinput: Any | None(optional)hmac_secret_name: str(hmacSecretNameon the wire)hmac_secret_scope: kindgi.client.RecordedSecretScope1 | kindgi.client.RecordedSecretScope2 | kindgi.client.RecordedSecretScope3 | None(hmacSecretScopeon the wire) (optional)signing_secret: str | None(signingSecreton the wire) (optional)signature: kindgi.client.WebhookSignature1 | kindgi.client.WebhookSignature2delivery_id_header: str | None(deliveryIdHeaderon the wire) (optional)body_limit_bytes: int(bodyLimitByteson the wire)rate_limit_per_minute: int(rateLimitPerMinuteon the wire)label: str | Nonestatus: Literal['active', 'paused']status_reason: str | None(statusReasonon the wire) (optional)suppressed_refusals: kindgi.client.SuppressedRefusals | None(suppressedRefusalson the wire) (optional)last_fired_at: AwareDatetime | None(lastFiredAton the wire)created_at: AwareDatetime(createdAton the wire)updated_at: AwareDatetime(updatedAton the wire)
WebhookTriggerUnregisterResult
Section titled “WebhookTriggerUnregisterResult”trigger_id: str(triggerIdon the wire)unregistered: bool
WhoamiResult
Section titled “WhoamiResult”Introspection of the caller's current authentication context. Always carries tenantId and scopes (empty for static bearer tokens), plus userId when the token carries one; principal says whom the caller acts as, and an API key adds tokenId, its role and the projectId it is limited to; session-token callers additionally see sessionId, providerId, and expiresAt. user is the caller's directory record, present when the deployment wires an identity directory and it knows the userId. reviewerRole is set when the caller is a reviewer — its token carries a reviewer role, or its user is a registered reviewer — so clients can gate reviewer-only UI (the approvals surface) without a second round trip.
tenant_id: uuid.UUID(tenantIdon the wire)actor: str | None(optional)user_id: str | None(userIdon the wire) (optional)session_id: str | None(sessionIdon the wire) (optional)provider_id: str | None(providerIdon the wire) (optional)scopes: list[str]expires_at: AwareDatetime | None(expiresAton the wire) (optional)reviewer_role: Optional[Literal['standard', 'senior', 'admin']](reviewerRoleon the wire) (optional)user: kindgi.client.UserRecord | None(optional)principal: kindgi.client.ApiKeyPrincipal | None(optional)token_id: str | None(tokenIdon the wire) (optional)role: Optional[Literal['admin', 'member']](optional)project_id: str | None(projectIdon the wire) (optional)tenant_admin: bool | None(tenantAdminon the wire) (optional)
WireError
Section titled “WireError”error: kindgi.client.Error
WithdrawProposalBody
Section titled “WithdrawProposalBody”reason: str
Withdrawn
Section titled “Withdrawn”at: AwareDatetimeby: strreason: str
WriteFactBody
Section titled “WriteFactBody”Write a fact. type selects the retrieval-policy (which indexes populate); scope.tenantId MUST match the caller's tenant. Optional retention overrides tenant defaults; optional contentHash is a caller-supplied idempotence hint (runtime computes its own hash regardless). subjects names whom it is about; validFrom/validUntil when it is true in the world; observedAt when it was said or seen.
type: strscope: kindgi.client.FactScopecontent: Anyretention: kindgi.client.Retention | None(optional)content_hash: str | None(contentHashon the wire) (optional)subjects: list[kindgi.client.FactSubject] | None(optional)valid_from: AwareDatetime | None(validFromon the wire) (optional)valid_until: AwareDatetime | None(validUntilon the wire) (optional)observed_at: AwareDatetime | None(observedAton the wire) (optional)