Event Payload Reference
All Kite events are delivered as CloudEvents v1.0. The original webhook payload is in data — unmodified.
Use kite stream --json to print full CloudEvent payloads to stdout. Filter by source with --source github or by type with --event-type com.github.push.
Kite delivers all webhook events as [CloudEvents](https://cloudevents.io/) v1.0. The original webhook payload is preserved in the `data` field without mutation.
CloudEvent envelope
Every event delivered by Kite has this shape:
{
"specversion": "1.0",
"id": "01HXYZ...",
"source": "https://github.com/owner/repo",
"type": "com.github.push",
"time": "2024-01-15T12:00:00Z",
"datacontenttype": "application/json",
"kitesummary": "alice pushed 2 commits to main in owner/repo",
"data": { "...original webhook payload..." }
}Envelope fields
| Field | Type | Description |
|---|---|---|
| `specversion` | string | Always `"1.0"` |
| `id` | string | ULID — unique per delivery, stable on retry |
| `source` | string | URI of the originating resource (repo URL, API base, etc.) |
| `type` | string | Reverse-DNS event type: `com.{source}.{event}` |
| `time` | string | ISO 8601 timestamp of when the event was received |
| `datacontenttype` | string | Always `"application/json"` |
| `kitesummary` | string | Human-readable one-line summary generated by Kite |
| `data` | object | Original webhook payload — passed through without modification |
Event types by source
GitHub (`source: github`)
Event type format: `com.github.{X-GitHub-Event header}`
| CloudEvent type | Trigger |
|---|---|
| `com.github.push` | Branch or tag push |
| `com.github.pull_request` | PR opened, closed, synchronized, labeled, etc. |
| `com.github.pull_request_review` | PR review submitted |
| `com.github.pull_request_review_comment` | Comment on PR diff |
| `com.github.issues` | Issue opened, closed, labeled, assigned, etc. |
| `com.github.issue_comment` | Comment on issue or PR |
| `com.github.create` | Branch or tag created |
| `com.github.delete` | Branch or tag deleted |
| `com.github.release` | Release published, created, edited |
| `com.github.workflow_run` | GitHub Actions workflow run started or completed |
| `com.github.check_run` | Check run created or completed |
| `com.github.ping` | Sent when a webhook is first configured — typically dropped |
The `source` URI is the repository's `html_url` (e.g. `https://github.com/owner/repo`).
**Example — push event:**
{
"specversion": "1.0",
"id": "01HXYZ...",
"source": "https://github.com/acme/api",
"type": "com.github.push",
"time": "2024-01-15T12:00:00Z",
"datacontenttype": "application/json",
"kitesummary": "alice pushed 3 commits to main in acme/api",
"data": {
"ref": "refs/heads/main",
"pusher": { "name": "alice" },
"commits": [{ "id": "abc123", "message": "fix: typo in README" }],
"repository": { "full_name": "acme/api", "html_url": "https://github.com/acme/api" }
}
}Stripe (`source: stripe`)
Event type format: `com.stripe.{event.type field}`
| CloudEvent type | Trigger |
|---|---|
| `com.stripe.payment_intent.succeeded` | Payment completed |
| `com.stripe.payment_intent.payment_failed` | Payment failed |
| `com.stripe.customer.subscription.created` | Subscription started |
| `com.stripe.customer.subscription.updated` | Subscription changed |
| `com.stripe.customer.subscription.deleted` | Subscription cancelled |
| `com.stripe.invoice.payment_succeeded` | Invoice paid |
| `com.stripe.invoice.payment_failed` | Invoice payment failed |
| `com.stripe.checkout.session.completed` | Checkout session completed |
The `source` URI is always `https://api.stripe.com`.
**Example — payment succeeded:**
{
"specversion": "1.0",
"id": "01HXYZ...",
"source": "https://api.stripe.com",
"type": "com.stripe.payment_intent.succeeded",
"time": "2024-01-15T12:00:00Z",
"datacontenttype": "application/json",
"kitesummary": "stripe event received",
"data": {
"id": "evt_abc123",
"type": "payment_intent.succeeded",
"data": { "object": { "amount": 2000, "currency": "usd" } }
}
}Paperclip (`source: paperclip`)
Event type format: `com.paperclip.{x-paperclip-event header or event field}`
| CloudEvent type | Trigger |
|---|---|
| `com.paperclip.heartbeat` | Agent heartbeat triggered |
| `com.paperclip.issue.assigned` | Issue assigned to agent |
| `com.paperclip.issue.commented` | Comment added to issue |
| `com.paperclip.issue.status_changed` | Issue status changed |
The `source` URI is `https://paperclip.ing/company/{companyId}`.
Other sources
For sources not listed above, the event type is `com.{source}.event` and the `source` URI is `https://{source}`.
Reading events in CLI output modes
# Summary line per event (default) kite stream # One-liner compact summaries kite stream --compact # Full CloudEvent JSON (one object per line) kite stream --json # Filter to a specific source kite stream --source github --json # Filter to a specific event type kite stream --event-type com.github.push --json
Reading events in kite.json
When using `kite run`, the CloudEvent JSON object is passed as stdin to the configured sink:
# exec sink — event JSON available on stdin echo '$EVENT_JSON' | ./handle-event.sh # proxy sink — event JSON POSTed to target URL # Headers forwarded: x-kite-source, x-kite-event-id, x-kite-event-type, x-kite-team-id
Importance levels
Kite assigns an importance level to each event via scoring rules or defaults. Use `--importance` or `sink.importance` to filter delivery:
| Level | Value | Use case |
|---|---|---|
| `low` | 1 | Informational events, pings |
| `normal` | 2 | Standard webhook events (default) |
| `high` | 3 | Events matching critical paths or triggers |
| `critical` | 4 | Security events, payment failures |
Set a minimum level in kite.json:
{ "type": "exec", "command": "./handle.sh", "importance": "high" }Or on the CLI:
kite stream --importance high