Skip to main content

Overview

PIPELINE supports webhook integrations to notify external services when events occur in your job tracking workflow. Currently, Discord webhooks are fully implemented with additional webhook types planned for v1.
Webhooks enable real-time notifications to Discord channels, Slack workspaces, and other services that support incoming webhooks.

Discord Webhooks

Event Types

The following Discord webhook events are currently available:
Triggered when a new job is saved to your pipeline.Payload Data:
{
  company: string;
  title: string;
  source: 'manual' | 'linkedin' | 'indeed' | 'github';
  match_score?: number;
  url?: string;
}
Triggered when a job’s status changes.Payload Data:
{
  company: string;
  title: string;
  old_status: 'saved' | 'applied' | 'interview' | 'offer' | 'rejected';
  new_status: 'saved' | 'applied' | 'interview' | 'offer' | 'rejected';
  interview_at?: string;
}
Triggered when a scraper finishes running.Payload Data:
{
  source: 'linkedin' | 'indeed' | 'github';
  jobs_found: number;
  jobs_new: number;
  jobs_duplicates: number;
  duration_seconds: number;
}
Triggered once per day with a summary of activity.Payload Data:
{
  date: string;
  jobs_added: number;
  applications_sent: number;
  interviews_scheduled: number;
  top_match: {
    company: string;
    title: string;
    score: number;
  };
}
Triggered when critical errors occur.Payload Data:
{
  title: string;
  message: string;
  error_code?: string;
}

Configuration

Set up Discord webhooks using environment variables:
.env
DISCORD_WEBHOOK_ALERTS=https://discord.com/api/webhooks/...
DISCORD_WEBHOOK_DIGEST=https://discord.com/api/webhooks/...

Webhook Features

Retry Logic

Automatic retry with exponential backoff (up to 3 attempts)

Circuit Breaker

Temporarily disables webhooks after repeated failures

Rate Limiting

Respects Discord’s rate limits automatically

Rich Embeds

Color-coded embeds with formatted data

Error Handling

Webhook errors are handled gracefully:
Error CodeDescriptionRetry
SEND_FAILEDGeneric send failureYes
RATE_LIMITEDDiscord rate limit hitYes (with delay)
CIRCUIT_OPENCircuit breaker activatedNo
INVALID_WEBHOOKWebhook URL invalidNo
TIMEOUTRequest timed outYes
If webhooks fail repeatedly, the circuit breaker will temporarily disable them to prevent excessive retries. Check your webhook URL and Discord server settings.

Planned Webhooks (v1)

The following webhook integrations are planned for the v1 release:
1

Slack Webhooks

Similar to Discord, post notifications to Slack channels
2

Custom HTTP Webhooks

Send POST requests to any URL with custom payloads
3

Email Notifications

Trigger email notifications via webhook events
4

Generic Webhook Events

Subscribe to any event in the system

Best Practices

  • Store webhook URLs in environment variables
  • Use separate webhooks for different environments
  • Rotate webhook URLs periodically
  • Never commit webhook URLs to version control
  • Webhooks are sent asynchronously to avoid blocking API requests
  • Failed webhooks don’t prevent the main operation from completing
  • Circuit breaker prevents webhook storms
  • Check circuit breaker status if webhooks stop working
  • Monitor Discord’s rate limit headers
  • Set up error alerts for webhook failures

Example: Discord Webhook Payload

{
  "embeds": [
    {
      "title": "📋 New Job Saved",
      "description": "**Senior Software Engineer** at **Acme Corp**",
      "url": "https://example.com/jobs/123",
      "color": 9807270,
      "fields": [
        {
          "name": "Source",
          "value": "linkedin",
          "inline": true
        },
        {
          "name": "AI Match",
          "value": "92%",
          "inline": true
        }
      ],
      "footer": {
        "text": "Pipeline Job Tracker"
      },
      "timestamp": "2026-03-04T12:00:00Z"
    }
  ]
}

Rate Limits

Learn about API rate limiting

Error Codes

View all error codes and handling

Build docs developers (and LLMs) love