Skip to content

Webhook Settings

Webhooks send HTTP POST requests to external URLs when specific service order events occur. Use webhooks to integrate with external project management tools, CRMs, or notification services.

Navigate to WP Admin > Woo Sell Services and open the Webhooks tab.

Event Settings Key Fires When
Requirement Submitted requirement_submitted Customer submits the requirement form
Delivery Submitted delivery_submitted Vendor submits a final delivery
Delivery Accepted delivery_accepted Customer accepts the delivery
Review Submitted review_submitted Either party submits a review

For each event, enter the full URL where the webhook payload should be sent:

  1. Enter a valid HTTPS URL in the corresponding field
  2. Leave the field empty to disable that webhook
  3. Click Save

All URLs are validated and sanitized using esc_url_raw() on save. Only valid URLs are stored.

Each webhook sends a JSON payload via HTTP POST. The payload structure includes:

{
"order_id": "123",
"order_status": "requirement-submitted",
"buyer_id": "789",
"buyer_email": "buyer@example.com",
"buyer_name": "John Doe",
"seller_id": "101",
"products": {
"product_id": "456",
"product_name": "Service Name",
"quantity": "1"
},
"timestamp": "..."
}

The order_status field indicates the event type: requirement-submitted, delivery-submitted, delivery-accepted, or review-submitted.

The requirement webhook includes an additional products_requirement field containing the submitted questions and answers:

{
"products_requirement": {
"field-0": {
"question": "Describe your project",
"answer": "I need a logo redesign",
"attachment": []
}
}
}

Use a service like webhook.site to test your webhook configuration:

  1. Get a test URL from webhook.site
  2. Paste it into one of the webhook URL fields
  3. Trigger the corresponding event (submit a requirement, accept a delivery, etc.)
  4. Check webhook.site for the received payload
  • Payloads are sent using wp_remote_post() with the body encoded via wp_json_encode()
  • The WordPress default timeout of 5 seconds applies
  • No Content-Type: application/json header is set explicitly — receiving services should accept the default WordPress content type