QuoteWerks Webhooks Documentation

Overview

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.

Use Cases: Integrate with CRM systems, trigger automated workflows, sync data with external applications, send notifications to Slack or Teams, update databases, and more.

Getting Started

To create your first webhook:

  1. Click the Add New button on the Webhooks page
  2. Give your webhook a friendly Name (optional but recommended)
  3. Select the event you want to listen for
  4. Enter the URL where you want to receive notifications
  5. Configure the HTTP method and body content
  6. Click Save
Tip: Use webhook.site to quickly test your webhooks. It provides a free URL that captures and displays all incoming requests.

Creating Webhooks

Basic Information

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

Events are organized by context (e.g., QuoteValet, QuoteWerks) and specific event name. The full event name follows the pattern: Context.EventName

Wildcard Events

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.

Note: When using wildcard events, consider using the {{System.EventName}} macro in your body to identify which specific event triggered the webhook.

Macros

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.

System Macros

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

Event-Specific Macros

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.

Example - QuoteValet.Accepted:
{{QuoteValet.Document.Headers.quoteValetDocumentID}}
{{QuoteValet.Acceptance.AcceptedByName}}
{{QuoteValet.Acceptance.AcceptanceTotal}}

Using the Macro Inserter

Above each field that supports macros, you'll find a search box to find and insert macros:

  1. Type in the search box to filter available macros
  2. Click on a macro to insert it at your cursor position
  3. Use Ctrl+M while in a field to jump to its macro search

HTTP Configuration

HTTP Methods

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

Body Content Types

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)

Custom Headers

You can add custom HTTP headers to your webhook requests. Common uses include:

  • Authentication: API keys, bearer tokens
  • Identification: Custom headers to identify the source
  • Routing: Headers used by the receiving system
Tip: Headers also support macros! You can include dynamic values in header values using the same {{MacroName}} syntax.

Example Headers

Authorization: Bearer your-api-key-here
X-Webhook-Source: QuoteWerks
X-Tenant-ID: {{System.TenantAccountNumber}}

Body Templates

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.

JSON Example

{
  "eventContext": "{{System.EventContext}}",
  "eventName": "{{System.EventName}}",
  "tenantAccountNumber": "{{System.TenantAccountNumber}}",
  "eventDateTime": "{{System.EventDateTime}}",
  "quoteValetDocumentID": "{{QuoteValet.Document.Headers.quoteValetDocumentID}}",
  "acceptedByName": "{{QuoteValet.Acceptance.AcceptedByName}}"
}

XML Example

<?xml version="1.0" encoding="UTF-8"?>
<webhook>
  <event>{{System.EventName}}</event>
  <tenant>{{System.TenantAccountNumber}}</tenant>
  <documentId>{{QuoteValet.Document.Headers.quoteValetDocumentID}}</documentId>
</webhook>

Testing Webhooks

Before relying on your webhook in production, you should test it to ensure it's configured correctly.

Using the Test Feature

  1. Open the webhook you want to test (click the edit button)
  2. Click the Test button in the modal
  3. Review the pre-populated values - macros are replaced with sample data
  4. Modify any values as needed for your test
  5. Click Test to send the request
  6. Check the Logs tab to see the result

Using webhook.site

webhook.site is a free service that provides a unique URL to capture webhook requests. It's perfect for testing:

  1. Visit webhook.site
  2. Copy your unique URL
  3. Use this URL as your webhook destination
  4. Test your webhook and view the results on webhook.site
Tip: If your webhook URL is a webhook.site URL, a convenient "Open webhook.site" button appears in the test modal to quickly view results.

Viewing Logs

The Logs tab shows the history of all webhook deliveries, including:

  • Status: Success, Failed, or Pending
  • Event: Which event triggered the webhook
  • URL: The destination URL
  • Response: HTTP status code and response body
  • Timestamp: When the delivery was attempted

Filtering Logs

Use the filter options to narrow down the log entries by event, status, or URL.

Troubleshooting

Webhook Not Firing

  • Ensure the webhook is enabled (toggle should be on)
  • Verify the event name matches exactly
  • Check that the tenant account number is correct

Receiving Errors

  • Check the Logs tab for error details
  • Verify the destination URL is accessible
  • Ensure headers and authentication are correct
  • Validate your JSON/XML body is well-formed

Macros Not Replaced

  • Ensure the macro syntax is correct: {{MacroName}}
  • Verify the macro name matches exactly (case-sensitive)
  • Check that the event provides the data for that macro

Common HTTP Status Codes

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.