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.
Accessing Webhook Settings
Section titled “Accessing Webhook Settings”Navigate to WP Admin > Woo Sell Services and open the Webhooks tab.
Available Webhook Events
Section titled “Available Webhook Events”| 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 |
Configuration
Section titled “Configuration”For each event, enter the full URL where the webhook payload should be sent:
- Enter a valid HTTPS URL in the corresponding field
- Leave the field empty to disable that webhook
- Click Save
All URLs are validated and sanitized using esc_url_raw() on save. Only valid URLs are stored.
Webhook Payload
Section titled “Webhook Payload”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": [] } }}Testing Webhooks
Section titled “Testing Webhooks”Use a service like webhook.site to test your webhook configuration:
- Get a test URL from webhook.site
- Paste it into one of the webhook URL fields
- Trigger the corresponding event (submit a requirement, accept a delivery, etc.)
- Check webhook.site for the received payload
Technical Notes
Section titled “Technical Notes”- Payloads are sent using
wp_remote_post()with the body encoded viawp_json_encode() - The WordPress default timeout of 5 seconds applies
- No
Content-Type: application/jsonheader is set explicitly — receiving services should accept the default WordPress content type

