Build your first evidence adapter
Scaffold, validate, and test a TypeScript evidence adapter against the Kiket platform ingestion API.
Evidence adapters normalize external systems into Kiket's raw inbox and evidence graph. They use scoped API keys and /platform/* routes.
Quick start
kiket extension init --root ./my-adapter
kiket extension validate --file kiket-extension.yaml
kiket extension test --file fixtures/raw-event.json
# Install from catalog (JWT) or run a local runner (push/pull)
kiket extension install --key kiket-ext-webhook --display-name "Webhook" --version 1.0.0 --transport catalog_hosted
kiket extension run --transport pull --port 3020Use createIngestionClient() from @kiket-dev/sdk to POST raw events and evidence with least-privilege API keys (raw-events:write, evidence:write). Extension runners installed via Settings receive a scoped runner key (raw-events:submit, raw-events:claim) and submit normalization with POST /api/v1/platform/raw-events/{rawEventId}/submit. Pull workers lease work via GET /api/v1/platform/raw-events/claim; push installs receive an HMAC dispatch secret. Runtime health is available at GET /api/v1/platform/extensions/{installationId}/runtime.
Architecture
| Layer | Owner | Responsibility |
|---|---|---|
| Ingress shell | Kiket API | Webhook trust, tenant/source routing, quarantine |
| Adapter | Your repo | Normalization + evidence emission via SDK |
| Platform | /platform/* | Scanner, findings, remediation, reports |
First-party adapters
| Adapter | Extension key | Ingress |
|---|---|---|
| GitHub | kiket-ext-github | POST /integrations/github/webhook |
| Slack | kiket-ext-slack | POST /integrations/slack/webhook |
| Generic webhook | kiket-ext-webhook | POST /integrations/webhook |
| Jira | kiket-ext-jira | POST /integrations/jira/webhook |
| ServiceNow | kiket-ext-servicenow | POST /integrations/servicenow/webhook |
Publish third-party adapters with kiket extension publish; listings merge into GET /platform/extensions/catalog for your organization.
Register an event source with POST /platform/event-sources, then send webhooks with:
X-Kiket-Organization-IdX-Kiket-Event-Source-Key
Generic field mapping
Configure mapping on the event source:
configuration:
mapping:
defaultEventType: approval.recorded
defaultEvidenceType: approval
fields:
caseId: case_id
sourceObjectId: object_id
title: title
approved: approvedSecurity
- Verify webhook signatures when the provider supports them.
- Never log secrets or raw auth headers.
- Emit normalized evidence — avoid storing unnecessary PII from source payloads.