Fiber AI
Monitoring & signals

Webhooks & Notifications

Get notified the moment background jobs finish — machine-readable webhooks for your systems, in-app notifications for your team.

Webhooks & Notifications

Many Fiber operations — batch enrichments, lookups, searches, monitoring — run in the background. Instead of polling, you get told the moment a job finishes, success or failure, through two complementary channels:

ChannelAudienceWhat it's for
WebhooksYour systemsMachine-readable events delivered to your HTTPS endpoint
In-app notificationsYour team (in the Fiber app)Human-readable alerts with email backup — zero config

Both fire at the same moments, so you can build on whichever fits the workflow.

Setting up webhooks

  1. Go to fiber.ai/app/webhooksSet up webhooks.
  2. Add Endpoint — must be HTTPS.
  3. Select the event types to receive. Save — delivery starts immediately.

Delivery is fully managed for you: automatic retries with exponential backoff, cryptographic signature verification, a self-service portal with delivery logs, and one-click replay.

Event catalog

Enrichment

EventFires when
reveal.completedA contact reveal finishes
batch_live_enrich.completedA batch live enrichment job finishes
batch_contact_enrich.completedA batch contact enrichment job finishes
audience.enrichment_completedAn audience enrichment finishes
audience.prospect_export_completedA prospect CSV export finishes
audience.company_export_completedA company CSV export finishes

Lookup

EventFires when
github_to_linkedin.completedA GitHub→LinkedIn batch lookup finishes
github_lookup.completedA GitHub profile lookup finishes
domain_lookup.completedA domain lookup finishes
social_media_lookup.completedA social media lookup finishes

Search

EventFires when
saved_search.run_completedA saved search run finishes
combined_search.completedAn async combined search finishes
google_maps_search.completedA Google Maps search finishes
local_business_search.completedA local business search finishes
audience.build_completedAn audience build finishes

Monitoring

EventFires when
tracker.signal_detectedA Tracker rule fires a signal
tracker.list_run_upcomingA tracker list refreshes in ~1 day
tracker.list_run_completedA tracker list finished a scheduled refresh
job.changedTracked profiles changed jobs
job_changes.profiles_addedProfiles added to a job-change list

Other

EventFires when
depth_chart.completedA company depth-chart generation finishes
sales_nav_scrape.completedA Sales Navigator people scrape finishes
sales_nav_lite_scrape.completedA Sales Navigator lite scrape finishes

Payload structure

Every payload includes:

  • success — whether the job succeeded,
  • an identifiertask_id, run_id, search_id, or audience_id depending on the operation,
  • error — populated on failure.

Example (reveal.completed):

{
  "task_id": "abc123",
  "success": true,
  "emails": [{ "emailAddress": "jane@company.com", "type": "work" }],
  "phone_numbers": [{ "phoneNumber": "+1-555-0100", "type": "mobile" }],
  "linkedin_url": "https://www.linkedin.com/in/jane-doe"
}

Tracker signals use a richer envelope with the matched entity and rule details.

Verifying signatures

Every delivery carries svix-id, svix-timestamp, and svix-signature headers. Always verify before trusting a payload — official libraries exist for Node, Python, Go, Java, Ruby, Rust, PHP, and C#/.NET. The signing secret is in the webhook portal.

import { Webhook } from "svix";

const wh = new Webhook("whsec_your_signing_secret"); // from the portal

app.post("/webhooks/fiber", (req, res) => {
  try {
    const payload = wh.verify(req.body, {
      "svix-id": req.headers["svix-id"],
      "svix-timestamp": req.headers["svix-timestamp"],
      "svix-signature": req.headers["svix-signature"],
    });
    // verified — process payload
    res.status(200).send("OK");
  } catch {
    res.status(400).send("Invalid signature");
  }
});

Retry behavior

A delivery is considered failed if your endpoint returns non-2xx or doesn't respond within 30 seconds. Retries then run with exponential backoff:

immediate → 5s → 5min → 30min → 2h → 8h

After all retries the message is marked failed in the portal, where you can manually retry it.

In-app notifications

For humans, not systems: completed background jobs also show up as in-app notifications in the Fiber dashboard (with email follow-ups), powered by Novu. Batch jobs, searches, lookups, and scrapes all notify the team automatically — no configuration needed.

Use this when your team just wants to know "my audience export is done" without wiring an endpoint; use webhooks when another system needs to act on the result.

Testing

  • webhook.site — paste a unique URL as your endpoint and watch payloads live.
  • Send Example — every event type has a "Send Example" button in the portal.
  • Svix CLI — tunnel deliveries to local development:
svix listen http://localhost:3000/webhooks/fiber

Advice

  • Acknowledge fast, process later. Return a 2xx immediately and handle the payload asynchronously — slow handlers trip the 30-second timeout and cause pointless retries.
  • Make handlers idempotent. Retries mean you may receive the same event more than once; dedupe on the event identifier.
  • Verify signatures everywhere. Unverified endpoints are a spoofing risk.
  • Prefer webhooks over polling for async operations — you learn about completion sooner and save the polling calls entirely.

On this page