When something happens, your agent knows.
Subscribe to events in your users' apps: a new email, a closed deal, a failed payment. Hoook delivers each one to your agent or webhook in real time.
await hoook.triggers.deploy({ userId, id: "stripe-payment-failed", webhookUrl })
✓ listening to Stripe for u_42
invoice.payment_failed · verified · deduplicated
POST https://your-app.com/agent/events
agent: opened Linear issue ENG-812 and told #billing
The same integration, shipped.
Without Hoook
- Polling APIs on a timer and missing what changed in between
- Registering and renewing webhooks with every provider
- Events that arrive twice, or not at all
- Agents that only act when someone asks them to
With Hoook
- Real-time events wherever the app supports them, polling where it does not
- Hoook registers, renews and verifies every subscription
- Each event deduped, queued and delivered until it is accepted
- Agents that start work the moment something happens
From event to action
- 01
Deploy a trigger
Pick an event, like a new Zendesk ticket, for a connected account.
Event sourceawait hoook.triggers.deploy({ userId, id: "stripe-payment-failed", webhookUrl })
✓ listening to Stripe for u_42
invoice.payment_failed · verified · deduplicated
POST https://your-app.com/agent/events
agent: opened Linear issue ENG-812 and told #billing
- 02
Hoook watches the app
Webhooks or polling, whichever the app supports, with signatures checked.
Event sourceawait hoook.triggers.deploy({ userId, id: "stripe-payment-failed", webhookUrl })
✓ listening to Stripe for u_42
invoice.payment_failed · verified · deduplicated
POST https://your-app.com/agent/events
agent: opened Linear issue ENG-812 and told #billing
- 03
The event reaches your agent
Delivered with the full payload, once, and retried until it lands.
Event sourceawait hoook.triggers.deploy({ userId, id: "stripe-payment-failed", webhookUrl })
✓ listening to Stripe for u_42
invoice.payment_failed · verified · deduplicated
POST https://your-app.com/agent/events
agent: opened Linear issue ENG-812 and told #billing
- 04
Your agent responds
Triage the ticket, reply in the thread or open an incident, straight away.
Your agent, on ClaudeHoook connected Find the HubSpot deals that went quiet this month and send each owner a nudge from my Gmail.
Hoookhubspot.search_dealsHoookgmail.send_emailFive deals have had no activity for 21 days. I sent a short nudge to each owner from your Gmail.
5 emails sentMessage your agent
await hoook.triggers.deploy({ userId, id: "stripe-payment-failed", webhookUrl })
✓ listening to Stripe for u_42
invoice.payment_failed · verified · deduplicated
POST https://your-app.com/agent/events
agent: opened Linear issue ENG-812 and told #billing
What Hoook takes off your plate.
Proactive agents
An assistant that notices the failed payment before the customer writes in.
Sync without polling
Keep your product in step with the tools your customers use.
Alerts where people work
Turn events in one app into messages in another.
The numbers behind agent integrations
Public documentation from the providers, and our own figures, each labelled with its source.
is how long Stripe keeps retrying a webhook your endpoint did not accept, so the same event can arrive late or more than once.
Stripe webhooks documentationautomatic redeliveries of a failed GitHub webhook. If your endpoint was down, the event is gone unless you redeliver it.
GitHub webhooks documentationof prebuilt tools and triggers, across the apps your users already work in.
Hoook app catalogueBuilt for agents that act.
Real time where possible
Native webhooks first, with polling as the fallback.
Replay and inspect
Every event is kept in the history so you can see it and send it again.
Per user
Triggers run on each user's connected account, not a shared one.
Nothing to renew
Subscriptions that expire are renewed before they lapse.