QuoteWerks Webhooks allow you to receive real-time notifications when events occur in your QuoteWerks system. When an event happens (like a quote being accepted), the webhook system automatically sends an HTTP request to your specified URL with details about the event.
To create your first webhook:
When creating a webhook, you'll need to provide:
| Field | Description |
|---|---|
| Name | A friendly name to help you identify this webhook (e.g., "Slack Quote Notification" or "CRM Sync"). This is optional but recommended when you have multiple webhooks. |
| Event | The event that triggers this webhook (e.g., QuoteValet.Accepted) |
| Method | HTTP method: GET, POST, PUT, PATCH, or DELETE |
| URL | The endpoint URL to send the webhook request to |
| Headers | Optional custom HTTP headers to include |
| Body Content Type | The format of the request body (JSON, XML, etc.) |
| Body | The request body template with macro placeholders |
| Enabled | Toggle to enable/disable the webhook without deleting it |
Events are organized by context (e.g., QuoteValet, QuoteWerks) and specific event name.
The full event name follows the pattern: Context.EventName
Each context has a special *.ANY event that triggers for all events within that context.
For example, QuoteValet.ANY will fire for QuoteValet.Accepted, QuoteValet.Viewed, and all other QuoteValet events.
{{System.EventName}} macro
in your body to identify which specific event triggered the webhook.
Macros are placeholders that get replaced with actual values when the webhook fires.
They use the format {{MacroName}} and can be used in URLs, headers, and the body.
These macros are available for all events:
| Macro | Description | Example Value |
|---|---|---|
{{System.EventFullName}} |
The full event name including context | QuoteValet.Accepted |
{{System.EventContext}} |
The context portion of the event | QuoteValet |
{{System.EventName}} |
The event name without context | Accepted |
{{System.TenantAccountNumber}} |
Your tenant account number | AspireMikeR17001 |
{{System.EventDateTime}} |
When the event occurred (ISO 8601) | 2026-01-08T18:30:00.000Z |
Each event type has its own set of macros based on the data available. When you select an event in the webhook editor, the available macros are shown in the macro search fields.
{{QuoteValet.Document.Headers.quoteValetDocumentID}}{{QuoteValet.Acceptance.AcceptedByName}}{{QuoteValet.Acceptance.AcceptanceTotal}}
Above each field that supports macros, you'll find a search box to find and insert macros:
| Method | Typical Use | Has Body |
|---|---|---|
| POST | Create new resources, most common for webhooks | Yes |
| PUT | Update/replace a resource | Yes |
| PATCH | Partial update to a resource | Yes |
| GET | Retrieve data (data passed via URL) | No |
| DELETE | Remove a resource | No |
| Content Type | Description |
|---|---|
application/json |
JSON format - most common for modern APIs |
application/xml |
XML format - for legacy systems |
text/plain |
Plain text |
application/x-www-form-urlencoded |
Form data format |
| None | No body (for GET/DELETE requests) |
You can add custom HTTP headers to your webhook requests. Common uses include:
{{MacroName}} syntax.
Authorization: Bearer your-api-key-here
X-Webhook-Source: QuoteWerks
X-Tenant-ID: {{System.TenantAccountNumber}}
The body template defines what data is sent when the webhook fires. Click the magic wand button to generate a template with common macros for your selected event.
{
"eventContext": "{{System.EventContext}}",
"eventName": "{{System.EventName}}",
"tenantAccountNumber": "{{System.TenantAccountNumber}}",
"eventDateTime": "{{System.EventDateTime}}",
"quoteValetDocumentID": "{{QuoteValet.Document.Headers.quoteValetDocumentID}}",
"acceptedByName": "{{QuoteValet.Acceptance.AcceptedByName}}"
}
<?xml version="1.0" encoding="UTF-8"?>
<webhook>
<event>{{System.EventName}}</event>
<tenant>{{System.TenantAccountNumber}}</tenant>
<documentId>{{QuoteValet.Document.Headers.quoteValetDocumentID}}</documentId>
</webhook>
Before relying on your webhook in production, you should test it to ensure it's configured correctly.
webhook.site is a free service that provides a unique URL to capture webhook requests. It's perfect for testing:
The Logs tab shows the history of all webhook deliveries, including:
Use the filter options to narrow down the log entries by event, status, or URL.
{{MacroName}}| Code | Meaning | Action |
|---|---|---|
| 200 | Success | Webhook delivered successfully |
| 400 | Bad Request | Check your body format |
| 401 | Unauthorized | Check authentication headers |
| 404 | Not Found | Verify the URL is correct |
| 500 | Server Error | Issue with the receiving server |
Need more help? Contact your system administrator.