Integrations

Webhooks

Receive a JSON POST on every recorded click. Same event Zapier REST Hooks subscribe to.

On Growth and Ultimate, Letlink POSTs JSON to every HTTPS URL registered on the workspace when a click is recorded. Owners and admins add or remove URLs under Integrations → Webhooks. Members can see the list but cannot change it.

Add an endpoint

  1. Stand up an HTTPS URL that accepts POST with Content-Type: application/json. HTTP is rejected.
  2. Paste it into Integrations → Webhooks and save. The event name is link_visited.
  3. Click one of your short links (from a network that is not over the monthly cap). You should see a request within a few seconds — delivery is queued, not inline on the redirect.

You can also subscribe from the API: POST /api/v1/hooks/subscribe with target_url and optional event (defaults to link_visited). Zapier REST Hooks call that same pair of subscribe/unsubscribe routes.

Payload

The body is the canonical visit object. Empty UTM or store fields are null.

link_visited
{
  "visit_id": 42,
  "visit_time": "2026-09-09T18:01:22+00:00",
  "link_type": "utm",
  "link_shortcode": "summer",
  "link_domain": "letl.ink",
  "link_destination_url": "https://example.com/a",
  "utm_source": "newsletter",
  "utm_campaign": "sep",
  "utm_medium": "email",
  "google_play_app_url": null,
  "google_play_utm_source": null,
  "google_play_utm_campaign": null,
  "app_store_app_url": null,
  "app_store_ct": null,
  "instagram_username": null,
  "visitor_ip": "203.0.113.10",
  "visitor_browser": "Chrome",
  "visitor_device_type": "desktop",
  "visitor_referrer": "https://mail.example.com/",
  "visitor_variation": "hero-b"
}

When a webhook does not fire

  • The workspace is on Free or Solo (allowsWebhooks is off).
  • The monthly tracked-click cap is already reached — the redirect still happens, no row is written, so nothing is dispatched.
  • A per-device visit limit returned 429 before a click was stored.
  • A country access rule turned the visitor away. Blocked visits are never stored as clicks.
  • The target URL is down. Delivery is best-effort and must never delay the visitor; failed posts are not retried from this page.

Who receives what

Hooks are stored per user. Every member's link_visited URLs are notified for clicks on any link in the workspace. If two teammates each subscribed Zapier, both Zaps run. Remove unused URLs so a leftover Catch Hook does not keep firing.

Still have questions?

We're here to help. Reach out and we'll get back to you as soon as we can.