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

FieldTypeDescription
`specversion`stringAlways `"1.0"`
`id`stringULID — unique per delivery, stable on retry
`source`stringURI of the originating resource (repo URL, API base, etc.)
`type`stringReverse-DNS event type: `com.{source}.{event}`
`time`stringISO 8601 timestamp of when the event was received
`datacontenttype`stringAlways `"application/json"`
`kitesummary`stringHuman-readable one-line summary generated by Kite
`data`objectOriginal webhook payload — passed through without modification

Event types by source

GitHub (`source: github`)

Event type format: `com.github.{X-GitHub-Event header}`

CloudEvent typeTrigger
`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 typeTrigger
`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 typeTrigger
`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:

LevelValueUse case
`low`1Informational events, pings
`normal`2Standard webhook events (default)
`high`3Events matching critical paths or triggers
`critical`4Security 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