Webhook
Create a webhook endpoint that captures incoming HTTP requests without needing a local server. Point third-party services (Stripe, GitHub, Slack, etc.) to the URL and all requests are captured with full headers, body, and metadata. Same pricing as tunnels.
npx otterkit webhookThis creates a public URL like https://agent-e5f6g7h8.otterkit.app that captures all incoming HTTP requests. The webhook stays alive as long as the terminal is open. Costs $0.01.
$ npx otterkit webhook
Initializing payment...
Provisioning webhook...
Webhook provisioned: agent-e5f6g7h8
Webhook ready: https://agent-e5f6g7h8.otterkit.app
Press Ctrl+C to disconnect
POST /webhook (Stripe) 204 (3ms)
POST /events (GitHub) 204 (5ms)Every request is also saved to ~/.otterkit/requests/<subdomain>.jsonl, so nothing is lost when the terminal closes — view it any time with otterkit inspect <subdomain>.
Custom Auto-Response
By default the endpoint answers every request with 200 {"received":true}. Some providers require a specific status or body before they deliver events (challenge echoes, strict 2xx checks) — customize it with --respond and --respond-body:
npx otterkit webhook --respond 204
npx otterkit webhook --respond 200 --respond-body '{"challenge":"accepted"}'Daemon Mode for Webhooks
Run a webhook in the background as a detached process. Same daemon pricing as tunnels.
# Background webhook for 4 hours
npx otterkit webhook --daemon --ttl 4h
# Quick 1-minute background webhook
npx otterkit webhook --daemon --ttl 1mContinue a /try Session
Started on otterkit.com/try? The page shows a claim command that moves the session into your terminal — same public URL, converted to a normal metered session on your account, with everything captured on the page imported into your local log:
npx otterkit webhook --claim <code-from-the-try-page>