Webhooks: how your customer's services talk to your AI agents
Webhooks are how the world's most popular services send updates.
On Trigger.dev you can receive webhooks and do three things:
Start an agent
A GitHub pull request, a Stripe payment or a Slack message starts a new run.
Resume an agent
A run paused for a payment or an approval picks up when the webhook arrives.
Message an agent
An event lands in the right agent's conversation, so it acts with full context.
Example: a Slack refund agent
Let's see what happens when a user asks a Slack agent to refund one of their customers.
Connect to services your customers use
Svix
webhooks.svix() verifies any service that signs with Svix, using the svix-id, svix-timestamp, svix-signature headers. Clerk, Resend and Brex use it.
Standard Webhooks
webhooks.standardWebhooks() verifies any service that signs with Standard Webhooks, using the webhook-id, webhook-timestamp, webhook-signature headers. OpenAI, Replicate, Recall.ai and Composio use it.
Native integrations for Linear and Slack
At Trigger.dev we use Slack and Linear all day so we built custom packages to make it even easier to build agents on top of Linear and Slack.
Slack agents
@trigger.dev/slack- Messages and @mentions in a DM or channel thread
- Approve and Deny button clicks
- Files shared in the thread
- Each tool call as a step in a plan, ticked off as it finishes
- The reply, streamed as the model writes it
- Approval buttons, and Block Kit messages
Handled for you
Verifies Slack's signing secret, answers its URL handshake, and acknowledges each event right away. Slack's stop button stops the turn.
Linear agents
@trigger.dev/linear- A @mention in an issue
- An issue assigned to the agent
- Follow-up prompts and approval choices
- Thoughts and actions as the agent works
- A plan, and an approval card when it needs a decision
- A response when it's done, all in Linear's agent session UI
Handled for you
Verification, the 5-second acknowledgement, the first activity Linear expects within 10 seconds, and dedup of Linear's retries.
You could build…
Code review agent
Review every pull request as it opens: read the diff, leave comments, and re-review when new commits land.
Bug-fixing agent
A new Sentry issue starts an agent that finds the cause, writes a fix and opens a pull request.
Coding agent in Linear
Assign an issue to the agent. It posts its plan in the issue, writes the code, and links the pull request when it's done.
AI SRE
A PagerDuty alert wakes an agent that pulls the logs, finds the deploy that caused it, and posts a summary.
AI SDR
When a lead fills in a form, research the company and draft the outreach for a rep to approve.
Meeting prep agent
When someone books a call, research them and their company and send you a brief before the meeting.
Voice agent follow-ups
When an ElevenLabs voice call ends, read the transcript, update the customer's record and send the follow-up.
Support triage agent
Tag each new Intercom conversation, draft a reply from your docs, and route the hard ones to the right team.
Customer success agent
Reply to customers on WhatsApp, look up their account, and hand off to a human when it's unsure.
Onboarding agent
When someone signs up in Clerk, research their company, set up their workspace and draft a personal welcome email.
Billing ops agent
Handle refunds, failed payments and plan changes from Stripe events, with a human approving each refund.
Fraud review agent
Check every new Shopify order for fraud, hold the risky ones, and ask a human to release or cancel them.
Route webhooks to the right agents
GitHub · PR opened
A pull request sends one webhook.
Webhook endpoint
Verify, deduplicate, and start all four subscribers.
Code review agent
waitingReviews the diff
Left 3 review comments on the diff
Triage agent
waitingLabels the PR and picks reviewers
Labeled it webhooks and requested 2 reviewers
Security scan agent
waitingChecks for secrets and risky dependencies
No secrets or vulnerable dependencies found
Preview deploy
waitingDeploys a preview of the branch
Preview deployed and linked on the PR
One webhook can start up to 25 different tasks or agents.
Wait for events, humans or other agents
Asks for approval
The agent asks in Slack: refund $240 for order #4821?
PendingWaits for a human
The run suspends until someone approves. No compute while it waits.
ApproveDenyJordan approved in SlackPendingIssues the refund
Slack’s webhook resumes the run. Stripe refunds the payment.
PendingReplies in the thread
The agent confirms the refund in the original Slack thread.
Pending
Wait for human response, for any length of time. Even if the user takes months to respond.
You only pay while it runs. Waiting is free.
Your webhooks will never be lost
Stored before it's processed
Processing webhooks in the request is risky: Trigger.dev stores every webhook first. Then responds to the provider. And only then processes asynchronously with retries.
Deduplicated retries
Trigger.dev matches retries on the provider's event ID where it sends one (Stripe's event id, GitHub's delivery header), so a retry doesn't start a second run.
Rate limits per endpoint
Each endpoint and each environment has a request limit. Over it, we tell the provider to try again later (429 with Retry-After), so the event is sent again rather than lost.
Provider
Stripe, GitHub, Slack…
Verified
signature or secret checked
Deduplicated
seen it before? dropped
Recorded
durably queued
Trigger.dev only returns 200 OK once the delivery is durably stored.
Full observability over every webhook, every function and every tool call
Every delivery recorded
Headers, body and the result for every agent it was routed to, with links to the runs it started.
See why it was filtered
A filtered delivery shows the reason, so you can tell a skipped event from a broken one.
Every agent run traced
Every run has a full trace. With the AI SDK, you can trace each LLM call and tool call, with the model, tokens and cost.
Replay from your coding agent
Replay a delivery from the API or MCP server. Your coding agent can list, inspect and replay failed ones.
Secure and enterprise ready
Signature verification
Built-in sources for Stripe, GitHub, Shopify and dozens more check each provider's signature. Bad requests are rejected before a run starts.
Any auth scheme
For anything else, define a custom source with an HMAC, a shared secret (header, bearer token or basic auth), a URL secret, or a public key (Ed25519, ECDSA or RSA).
Replay protection
Sources can enforce a timestamp tolerance, so an old signed request can't be sent again to start a run.
Encrypted, rotatable secrets
Signing secrets and public keys are stored encrypted and never shown again after you save them. Rotate one from the dashboard, the API or the MCP server, with no code change.
We had a separate webhook service that checked signatures, filtered events and handed them to our Trigger tasks. With Trigger webhooks the events go straight to the tasks that already do the work, which means one less service to deploy, keep secrets for, and keep alive.
I've been waiting for this feature! Previously, I had to route everything through Vercel, which felt unnecessary. Trigger.dev keeps my codebase much cleaner by avoiding endless endpoint switches for dozens of events.
Frequently asked questions
How much do webhooks cost?
There's no separate charge for receiving webhooks. The tasks and agents a webhook starts are billed like any other run, by compute time. See pricing for each plan.
Am I charged while a run waits for a webhook?
No. A waiting run is suspended and uses no compute. A run can wait up to 90 days for a webhook, and an agent can wait as long as it takes for a human to answer.
Am I charged for webhooks my filters skip?
No. As we ingest the webhook, we run this filter, and we don't run any compute if this filter says false. You can still see it in your dashboard and you could replay it.
What are the limits on each plan?
Each endpoint accepts 100 requests every 10 seconds on Free, 300 on Hobby and 1,000 on Pro, with custom limits on Enterprise. Over a limit, the endpoint answers 429 with Retry-After, so the provider sends the event again later. See the limits docs for waiters and per-environment limits. Delivery history is kept for 3 days on Free, 7 on Hobby and 30 on Pro, and 90 to 365 days on Enterprise.
What if my provider isn't on the list?
Define a custom source with an HMAC signature, a shared secret, a URL secret or a public key. Providers that sign with Svix or Standard Webhooks work with webhooks.svix() and webhooks.standardWebhooks(). See sources .
Can I self-host webhooks?
Yes. Webhooks are open source, part of the Apache 2.0 Trigger.dev project. You can self-host them or run them on Trigger.dev Cloud. View on GitHub .
Ready to connect your first provider?
Declare an endpoint, run trigger dev, and paste the URL into your provider.














Deeplead