Webhooks out. Webhooks in. Same terminal.
Ship signed events from a schema-generated client, and stream everyone else's webhooks straight to localhost. Five commands out. One command in.
For developers adding customer-facing webhooks to an existing application.
the whole session · nothing skipped
Send
From an empty directory to the first signed delivery.
- 01
Initialize
Run
repost schema initand define the first catalog event and payload model. - 02
Validate and migrate
Format the schema, validate it locally, and create a reviewable migration.
- 03
Generate and deploy
Generate the TypeScript client and deploy the migration to an environment.
- 04
Send
Call the generated webhook method with a customer ID and typed data.
Receive
The webhook hits prod. Your breakpoint catches it.
repost forward streams a bucket straight to localhost, live or with the backlog you missed while you slept. repost replay re-fires any capture until your handler behaves.
In CI, repost expect blocks until the webhook you're testing for actually arrives. A real assertion, not a sleep().
No tunnel anywhere in that loop: forwarding webhooks to localhost without a tunnel, four steps end to end.
● Listening on acme-hooks.repost.sh → localhost:3000
| Time | Method | Path | Code | Status | Duration |
|---|---|---|---|---|---|
| 14:05:18.412 | POST | /stripe/invoice.paid | 200 | SUCCESS | 43ms |
| 14:05:14.205 | POST | /github/pull_request.opened | 200 | SUCCESS | 95ms |
| 14:05:11.998 | POST | /stripe/charge.failed | 402 | FAILED | 51ms |
| 14:05:09.122 | POST | /twilio/message.delivered | 200 | SUCCESS | 58ms |
$ repost forward -b acme-hooks -f local-webhooks
From schema to delivery