Skip to content

Add 186 doc-sourced samples for verified-sources batch 2 (26 providers) - #70

Merged
garethx merged 2 commits into
mainfrom
feature/samples-verified-sources-batch-2
Oct 21, 2026
Merged

garethx merged 2 commits into
mainfrom
feature/samples-verified-sources-batch-2

Conversation

@garethx

@garethx garethx commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Gareth · project thread

Before: hookdeck/webhook-registry#102 (verified sources batch 2, merged) added 45 provider rows and exported doc examples for 26 of them to the registry's samples-doc/ tree. None of those 26 had a directory here.

After: 26 new provider directories with 186 doc-sourced samples. providers.json goes from 155 to 181 providers. The other 19 rows have no published example body, so they get no directory: appsflyer, bolt, buildkite, cloudflare, databricks, drata, gravity-forms, mailparser, maintainx, marketo, maxio, microsoft-dynamics, mongodb-atlas, ninjaone, pusher, signal-sciences, tailscale, whop and zoominfo. No existing file is changed. This touches only new directories, so it doesn't conflict with the pilot or batch 1 PRs.

Provider Samples Version dir topic_identifier
asaas 14 latest event
callrail 3 latest null (no discriminator)
castle 2 v1 type
daytona 7 latest event
dbt-cloud 3 latest eventType
didit 5 latest webhook_type
dropbox 1 latest null (no discriminator)
dwolla 1 latest topic
fivetran 1 latest event
gopuff 1 latest null (no discriminator)
helius 1 latest [].type
heroku 10 latest webhook_metadata.event.include
hibob 28 v2 type
launchdarkly 1 latest accesses[].action
lemon-squeezy 4 latest x-event-name (header)
mailjet 7 latest event
modern-treasury 14 latest null (composed: X-Topic + . + event)
motive 10 latest action
onfido 5 latest payload.action
ramp 3 latest type
rutter 11 latest code
stytch 41 latest null (composed: source.object_type.action)
unipile 2 latest event
veriff 9 latest list: action, verification.status, checkType, eventType, type
webex 1 latest null (composed: resource + . + event)
zernio 1 latest event
Total 186

How: I copied samples-doc/providers/<p>/ from webhook-registry main (7e60bde1) into providers/, the same way #65 to #67 did. Every sample file is byte-identical to the export. Three index.json files differ, and those changes are listed first below. Every other topic_identifier equals the registry row's discriminator path. I checked each one with a port of resolveTopic against every sample. Each file carries source.type: vendor-documentation and its page URL, and each version is marked sourced_via: docs. yarn compile passes (155 → 181 providers, compiled topic count equals file count for all 26). yarn test passes 14/14.

Worth a look:

  • castle is filed under v1/, not latest/. Both bodies carry "api_version": "v1", and the README rule says a payload api_version is the value. Castle doesn't document what the field versions, so this rests on the field name alone. The files were moved, and latest_version and the provenance key were changed to match.
  • lemon-squeezy uses x-event-name, not meta.event_name. The registry row records the X-Event-Name header as the discriminator, and the body field as a fallback. The export keyed on the fallback. All 4 samples carry the header, and it resolves to the topic in each.
  • veriff uses the README's list form. The export wrote the five family carriers as one " | "-joined string, which the resolver would have treated as a single key. As a list (scrapfly precedent), the carriers resolve all 9 samples to their topics. The decision webhook has no type field, so verification.status is its carrier.
  • Composed rows are null: modern-treasury, stytch and webex, as exported. This follows the strava and facebook precedent. Batch 1's nash, also composed, kept its primary path (type), following sentry. It's a one-line change if you want them aligned.
  • helius [].type: the body is a root-level array that resolveTopic can't read, so a capture would be untitled-<hash>. This matches sparkpost (feat: add 57 doc-sourced samples for aftership, circleci, docker-hub, grafana, snipcart, sparkpost + checkout Identity Verification #58).
  • Not re-versioned: ramp's docs URL has /v1/, but that's the management API version (as with snipcart and nylas). onfido's payload_version is set at registration and isn't in the delivery. heroku's version is the Platform API media type of data. All three stay latest.
  • Filenames differ from topics in two providers. castle's type is $list_item.created and heroku's include is api:app. The files are list_item.created.json and api.app.json, but the published topic keys come from each file's topic field and match the wire values.
  • unipile: event resolves 1 of 2. The CREDENTIALS body belongs to a family with no event field.

Update (ee74cc5): unipile's topic_identifier is now ["event", "AccountStatus.message"]. It resolves 2/2 samples (was 1/2). helius's [].type resolves 1/1 once the resolver fix in #68 merges. All four composed rows (nash in #69 too) are now null. yarn compile passes and yarn test passes 14/14.


Generated by Claude Code

Copied from hookdeck/webhook-registry samples-doc/ at 7e60bde1 (rows added
in hookdeck/webhook-registry#102): asaas, callrail, castle, daytona,
dbt-cloud, didit, dropbox, dwolla, fivetran, gopuff, helius, heroku, hibob,
launchdarkly, lemon-squeezy, mailjet, modern-treasury, motive, onfido, ramp,
rutter, stytch, unipile, veriff, webex, zernio. The other 19 rows in that PR
have no doc sample, so they get no directory.

Sample files are unchanged. Three index.json files differ from the export:

- castle: files under v1/ with latest_version "v1" rather than latest/.
  Both bodies carry "api_version": "v1", and the README says a payload
  api_version is the value.
- lemon-squeezy: topic_identifier is x-event-name, the registry row's
  header discriminator, rather than the meta.event_name body fallback.
  Every sample carries the header.
- veriff: topic_identifier is the README's ordered list form (action,
  verification.status, checkType, eventType, type), one carrier per
  registry family. The export wrote them as one " | "-joined string, which
  the resolver would read as a single key.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D7eqaQdKAUzQXRbGtym1PF
@garethx garethx self-assigned this Oct 21, 2026
["event", "AccountStatus.message"]: the registry's messaging/email/users
family carrier, then the account-status webhook's, whose body is only
{"AccountStatus": {...}} with no top-level event. This resolves 2 of 2
samples, where "event" alone resolved 1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D7eqaQdKAUzQXRbGtym1PF
@vercel

vercel Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
webhook-samples Ready Ready Preview Oct 21, 2026 2:48pm UTC

Request Review

@garethx
garethx merged commit 345bd13 into main Oct 21, 2026
3 checks passed
@garethx
garethx deleted the feature/samples-verified-sources-batch-2 branch October 21, 2026 15:18

This branch was successfully deployed

1 active deployment
Preview — ee74cc5e Deployed Oct 21, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants