Skip to main content
This reference covers the external integration interfaces supported by Kiwi. Use the endpoint shown by the signed-in app’s setup helper; the hosted service origin is not something to guess. Use the Kiwi app to manage accounts, invitations, project members, workflow publication, run decisions, and credentials.

Remote MCP

Connect an existing agent environment to the hosted Streamable HTTP MCP endpoint at /mcp. OAuth protected-resource metadata is available at /.well-known/oauth-protected-resource/mcp on the same host. The setup helper provides the full endpoint and selected project context. For OAuth setup, the client targets the exact /mcp resource and requests the user:org:read scope. A project-bound MCP key can be used by clients that support static Bearer authentication. See Remote MCP for authentication boundaries and the supported tool list.

Checker HTTP API

A project-bound checker credential can read the current verification context and report a named result for a run. It cannot manage project settings, submit ordinary workflow outputs, or make human decisions. The checker API uses the origin of the exact MCP URL copied from the signed-in Kiwi setup helper. Keep its scheme, host, and any port; remove only the /mcp path and append /v1/runs/{runId}/checks. For example, if the copied MCP URL is https://<host>:<port>/mcp, the checker request URL is https://<host>:<port>/v1/runs/{runId}/checks. Do not guess a host or use Kiwi’s website or documentation origin. This route is part of hosted Kiwi; customers do not deploy a separate service. MCP requests continue to use the full URL ending in /mcp.

Read the current context

Send a Bearer token:
The response contains the current runVersion, acceptedPlanRevision, candidateRef, candidateRevision, implementationAttemptId, verificationAttemptId, verificationState, and the checks assigned to the credential under the accepted Plan. Read this context immediately before reporting; do not use a cached candidate or version.

Report a check

POST /v1/runs/{runId}/checks accepts these fields: Example body for the customer task used across this guide:
Use only the current values from GET. If verificationAttemptId is null and Verify is ready, create one UUID for the first check report and use the returned attempt on later reports. Allowed statuses are pass, fail, blocked, and not-applicable. Only pass satisfies the gate. A successful POST returns a receipt and refreshed context. The receipt uses camelCase fields; the HTTP request uses snake_case. The response has this shape:
These values are synthetic examples, not a real run or credential. See CI reporting for the full report sequence and Connections for credential handling.

Errors and retries

Integration errors return a JSON object with error and message. Common responses include 400 for invalid input, 401 for a missing or invalid credential, 403 for insufficient project or check authority, 404 for a missing run, 409 for stale state or a conflicting command replay, and 503 when an integration dependency is unavailable. MCP clients receive isError: true with an error and message in the text content. If a check POST may have reached Kiwi but its response is missing, retry the same command_id with the identical body. After a definitive stale response, read the context again and create a new command_id using the current version and attempt. See Retries and recovery.