logo

Winfast

Webhooks

Real-time job notifications delivered to your endpoints

Quick Start
1

Configure Feed

Select which job feeds trigger notifications

2

Create Webhook

Set up your webhook endpoint in the dashboard

3

Receive Alerts

Get real-time job notifications at your endpoint

How Webhooks Work

When new jobs are posted on Upwork that match your configured feeds, Winfast automatically:

  • Processes the job against your feed criteria
  • Queues webhook notifications for matching jobs
  • Sends HTTP POST requests to your configured endpoints
  • Logs delivery status and manages retries
  • Failed attempts remain for automatic retries
  • Maximum 10 retry attempts before disabling webhook
Webhook Payload

Each webhook delivers a JSON payload with comprehensive job information:

{
  "event": "job.matched",
  "webhook_id": "webhook_123456",
  "timestamp": "2024-01-15T10:30:00Z",
  "feed": {
    "id": "feed_789",
    "name": "React Developer Jobs"
  },
  "data": {
    "job": {
      "idx": 1,
      "client_active_assignments": 68,
      "client_avg_hourly_jobs_rate": "15.662137248512389",
      "client_city": "Las Vegas",
      "client_country": "United States",
      "client_country_timezone": "America/Managua (UTC-06:00)",
      "client_feedback_count": 1576,
      "client_hired_in_past": 0,
      "client_hours_count": "2240.17",
      "client_is_enterprise": false,
      "client_open_jobs": 4,
      "client_payment_method_is_verified": true,
      "client_posted_jobs": 67,
      "client_rating": "5",
      "client_total_assignments": 2365,
      "client_total_charges": "115430.33",
      "client_total_jobs_with_hires": 93,
      "job_category": "editing-proofreading-services",
      "job_category_group": "writing",
      "job_category_group_label": "Writing",
      "job_client_activity_invitations_sent": 20,
      "job_client_activity_last_buyer_activity": "2025-10-01T14:20:14.206Z",
      "job_client_activity_total_applicants": 0,
      "job_client_activity_total_hired": 140,
      "job_client_activity_total_invited_to_interview": 0,
      "job_client_activity_unanswered_invites": 15,
      "job_contractor_tier": "ENTRY_LEVEL",
      "job_currency": "USD",
      "job_description": "We’re looking for people in the U.S. to join a focus group and give feedback on the customer experience of our online materials. This one-time task takes about 30 minutes and involves reviewing our website, identifying strengths, and suggesting improvements. Your input will play a key role in helping us enhance the customer experience of our online educational resources. If you have a good eye for detail, we’d love to hear from you. Compensation for your time is $25.",
      "job_fixed_budget": "25.0",
      "job_fixed_duration": 3,
      "job_fixed_duration_label": "Less than 1 month",
      "job_hourly_duration": null,
      "job_hourly_duration_label": null,
      "job_hourly_max": null,
      "job_hourly_min": null,
      "job_hourly_type": null,
      "job_id": "1955564428051706341",
      "job_is_contract_to_hire": true,
      "job_number_of_positions_to_hire": 50,
      "job_published_at": "2025-08-13T09:38:07.565Z",
      "job_qualifications": "{\"type\": \"INDEPENDENT\", \"countries\": [\"United States\"], \"prefEnglishSkill\": \"NATIVE\"}",
      "job_questions": [
            "This project is only open to U.S. participants. Are you a U.S. citizen currently in the United States?",
            "In what U.S. state are you located?"
      ],
      "job_skills": [
            "English",
            "Writing"
      ],
      "job_title": "Quick Evaluation of Website Customer Experience | PK2",
      "job_type": "FIXED",
      "job_url": "https://www.upwork.com/jobs/~021955564428051706341",
      "work_history": [],
      "created_at": "2025-10-01 14:22:32.644644+00",
      "id": "1955564428051706341"
},
    "feed": {
      "id": "feed_789",
      "name": "React Developer Jobs"
    }
  }
}

Payload Fields Reference

Root Payload Fields
FieldTypeDescription
eventstringAlways "job.matched" for job notifications
webhook_idstringUnique identifier for the webhook configuration
timestampstringISO 8601 timestamp when webhook was triggered
dataobjectContains job and feed details
Job Object Fields

The data.job object contains comprehensive job information from Upwork:

FieldTypeDescription
job_idstringUnique Upwork job identifier
job_titlestringJob title as posted by client
job_descriptionstringFull job description text
job_urlstringDirect link to the Upwork job posting
job_typestringJob type: "FIXED" or "HOURLY"
job_published_atstringISO 8601 timestamp when job was posted
job_skillsarrayRequired skills for the job
job_categorystringUpwork job category slug
job_category_groupstringJob category group slug
job_category_group_labelstringHuman-readable category group name
job_currencystringCurrency code (e.g., "USD")
job_fixed_budgetnumberFixed project budget (if job_type is FIXED)
job_hourly_minnumberMinimum hourly rate (if job_type is HOURLY)
job_hourly_maxnumberMaximum hourly rate (if job_type is HOURLY)
job_contractor_tierstringRequired experience level
job_questionsarrayScreening questions from client
job_qualificationsobjectLocation and language requirements
job_number_of_positions_to_hirenumberNumber of freelancers to hire
job_is_contract_to_hirebooleanWhether job may become long-term
Client Information Fields

Client details are included in the job object with client_* prefixed fields:

FieldTypeDescription
client_countrystringClient's country
client_citystringClient's city
client_ratingnumberClient's average rating (1-5)
client_feedback_countnumberNumber of reviews received
client_total_chargesnumberTotal amount spent on Upwork
client_posted_jobsnumberTotal jobs posted by client
client_total_jobs_with_hiresnumberJobs where client hired someone
client_payment_method_is_verifiedbooleanWhether payment method is verified
client_is_enterprisebooleanWhether client is enterprise account
client_active_assignmentsnumberCurrent active projects
Job Activity Fields

Current activity and competition metrics for the job:

FieldTypeDescription
job_client_activity_total_applicantsnumberTotal number of proposals submitted
job_client_activity_total_hirednumberNumber of freelancers hired for this job
job_client_activity_invitations_sentnumberInvitations sent by client
job_client_activity_total_invited_to_interviewnumberFreelancers invited to interview
job_client_activity_last_buyer_activitystringTimestamp of client's last activity

Pricing & Reliability

Pricing & Credits
Monthly included requests1,000
Cost per webhook delivery$0.007

Each webhook attempt (successful or failed) consumes 1 credit.

Reliability
Maximum retries10 attempts
Request timeout10 seconds
Retry strategyExponential backoff

Security Best Practices

Webhook Security

HTTPS Required

All webhook URLs must use HTTPS

Validate Payloads

Always validate incoming webhook payloads

Idempotent Processing

Handle duplicate deliveries gracefully using job_id

Example Webhook Handler
// Node.js Express example
app.post('/webhook/winfast', (req, res) => {
  try {
    const payload = req.body;
    
    // Validate payload structure
    if (!payload.webhook_id || !payload.data.job) {
      return res.status(400).send('Invalid payload');
    }
    
    // Process the job notification
    processJobNotification(payload);
    
    // Respond with 200 to acknowledge receipt
    res.status(200).send('OK');
  } catch (error) {
    console.error('Webhook error:', error);
    res.status(500).send('Internal server error');
  }
});

Troubleshooting

Common Issues

Webhook Not Receiving Notifications

  • Verify your endpoint URL is accessible and returns 200 status
  • Check that your feed criteria match available jobs
  • Ensure webhook is enabled and has sufficient credits
  • Confirm HTTPS is properly configured

Webhook Disabled Automatically

  • Check webhook credit balance in dashboard
  • Review webhook event logs for repeated failures
  • Verify endpoint is responding within 10-second timeout
  • Ensure endpoint returns proper HTTP status codes

Duplicate Notifications

  • Implement idempotent processing using job_id
  • Store processed job_ids to prevent duplicates
  • Check for network issues causing retry attempts

Ready to Get Started?

Set up your first webhook in minutes and start receiving real-time job notifications that match your criteria.

Need Help or Have Questions?

Our support team is here to help you with any questions about Winfast, your account, or these policies.

Email Support

Get detailed help via email

Quick Response

Usually within 24 hours

Privacy First

Your data stays secure

Email us at john@winfast.app