Webhooks
Webhooks send HTTP POST requests to external URLs when specific service order events occur. Use them to integrate with external project management tools, CRMs, or notification services.
Accessing Webhook Settings
Section titled “Accessing Webhook Settings”Go to WP Admin > WB Plugins > Woo Sell Services > Webhooks.
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 payload should be sent, then save:
- Enter a valid URL in the corresponding field.
- Leave a field empty to disable that webhook.
- Save.
All URLs are validated and sanitized with 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 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" }}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 with 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:
- Get a test URL.
- Paste it into one of the webhook fields.
- Trigger the event (submit a requirement, accept a delivery, and so on).
- Check the received payload.
Technical Notes
Section titled “Technical Notes”- Payloads are sent with
wp_remote_post(), the body encoded viawp_json_encode(). - The WordPress default timeout applies.
- No explicit
Content-Type: application/jsonheader is set, so the receiving service should accept the default WordPress content type.

