Destinations
Send events to other tools as they happen — a webhook for your own systems and automations, a Slack channel or a Telegram chat.
A destination forwards matching events the moment they arrive. Datahop stays the place you send events from your app, and other tools get the ones they need. Destinations in the sidebar lists them with how many events each one has delivered.
Slack
Post a message to a channel for the events you care about, such as every new signup or every order over $100.
- In Slack, create an incoming webhook for the channel and copy its URL.
- New destination → Slack, then paste the URL.
- Write the message. Click a variable to insert it, and the preview shows how it'll look:
*New order* {{properties.amount}} {{properties.currency}} from {{person.properties.email}}| Variable | Is |
|---|---|
{{event}} | The event name |
{{distinct_id}} | The id your app sent |
{{properties.key}} | An event property |
{{person.properties.key}} | A property of the person, such as their email |
{{timestamp}} | When it happened |
A variable with no value shows as —. Slack accepts about one message a second per webhook, so busy events queue up briefly.
Telegram
Post to a Telegram channel or group.
- New destination → Telegram. The page shows the Datahop bot's name.
- Add the bot to your channel or group. In a channel, make it an admin that can post messages.
- Enter the chat id. A public channel can use its
@name. Otherwise, forward a message from the chat to @userinfobot, which replies with the id. Channel and group ids start with-100. - Send test. If the bot isn't in the chat yet, the error says so.
Messages use the same variables as Slack, as plain text. Telegram allows about 20 messages a minute in a group, so busy events queue up.
Webhook
Send each event as a JSON POST to Zapier, Make, n8n, your CRM or your own API. Add headers, such as Authorization, if the endpoint needs them.
{
"uuid": "0193c4f2-…",
"event": "order_completed",
"distinct_id": "user_123",
"person_id": "0190…",
"timestamp": "2026-11-02T10:00:00.000Z",
"properties": { "amount": 49, "currency": "USD" },
"person": { "properties": { "email": "alex@example.com", "plan": "pro" } },
"project": { "id": 1, "name": "Acme" },
"destination": { "id": 3, "name": "Orders to CRM" }
}A 2xx response counts as delivered. On a 429 or 5xx, or if the endpoint can't be reached, Datahop tries 3 more times over about a minute. Destinations must be public https addresses.
Choose the events
- Which events: pick one or more events, or leave it empty to send every event.
- Only when: filter on event properties, such as
amount ≥ 100orplan = pro.
Send test posts a sample event, so you can check the endpoint or the Slack message before saving.
Watch it work
A destination's page shows how many events it has delivered or failed, the last error, and a log of recent deliveries. Pause one with the switch. Events that arrive while it's paused aren't sent later.
Agents
Agents can set these up over MCP with create_destination, list_destinations, get_destination, update_destination and delete_destination. For example: "Post every order over $500 to #sales with the customer's email." They'll ask you for the URL or chat id.