When a quote.updated event is triggered, FastSpring sends a webhook payload containing details about the updated quote. This webhook fires only when a quote's status or content changes via the FastSpring app or API. Status changes include the following:
Status
Description
Quote Accepted
Moves from open to pending payment when the prospect accepts the quote but payment has not yet been completed (e.g. invoice generated instead of clicking Pay Now.
Quote Canceled
Moves from open or pending payment to canceled; the associated order is canceled in the FastSpring app.
Quote Completed
Moves from open to completed when the prospect accepts the quote and completes payment.
Quote Expired
Moves from open to expired; after expiration you can create a new quote or extend the expiration date to complete the order.
Quote Modified via App
Indicates the quote was updated by a seller directly in the FastSpring app.
Quote Modified via API
Indicates the quote was updated by a seller using the Create a quote API endpoint.
This page provides:
A full sample payload showing a populated quote.updated webhook
A detailed table listing every payload property, including name, type, and description
Notes on when this webhook is triggered and which fields appear based on Webhook Expansion
Browse the table sections below or use the quick links to jump to a specific group of fields.
Tip: Not all fields are always included. Refer to the Payload properties table to understand when a field appears.
Webhook payload example (expansion enabled)
When a quote.updated event is triggered, the webhook sends the following JSON payload:
The quote.updated webhook payload includes details about the completed quote, including quote metadata, related order information, timestamps, recipient details, and quoted items. Use the cards below to jump to a specific section of the property reference.
<tr><td>quote</td><td>string</td><td>Unique identifier for the quote</td></tr>
<tr><td>quoteName</td><td>string</td><td>Display name or label for the quote</td></tr>
<tr><td>type</td><td>string</td><td>Quote type, such as <code>Assisted</code> or <code>Self-Service</code></td></tr>
<tr><td>updatedBy</td><td>string</td><td>Email of the user who last updated the quote</td></tr>
<tr><td>Reason</td><td>string</td><td>Reason associated with this quote event, e.g., <code>Quote Completed</code></td></tr>
<tr><td>creator</td><td>string</td><td>Email address of the user who originally created the quote</td></tr>
<tr><td>quoteStatus</td><td>string</td><td>Current status of the quote, e.g., <code>COMPLETED</code></td></tr>
<tr><td>language</td><td>string</td><td>Two-letter ISO language code used for the quote</td></tr>
<tr><td>quoteCurrency</td><td>string</td><td>Three-letter ISO currency code of the quote</td></tr>
<tr><td>quoteUrl</td><td>string</td><td>Direct URL to view the completed quote in checkout</td></tr>
<tr><td>live</td><td>boolean</td><td>Indicates whether the quote was created in live or test mode</td></tr>
<tr><td>account</td><td>string</td><td>FastSpring account ID associated with the quote</td></tr>
<tr><td>coupon</td><td>string</td><td>Applied coupon code, if any</td></tr>
<tr><td>fulfillmentSetting</td><td>string</td><td>Specifies when fulfillment occurs, e.g., <code>ON PAYMENT</code></td></tr>
<tr><td>notes</td><td>string</td><td>Internal note text included with the quote</td></tr>
<tr><td>tags</td><td>object</td><td>Custom tag metadata applied to the quote (usually empty by default)</td></tr>
<tr id="order-details" style={{ borderTop: "4px solid #ddd" }}>
<td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
<a href="#navigate-this-webhook">Order details</a>
</td>
</tr>
<tr><td>order</td><td>string</td><td>Unique identifier of the order created from the quote</td></tr>
<tr><td>order reference</td><td>string</td><td>Customer-facing order reference string</td></tr>
<tr><td>order status</td><td>string</td><td>Status of the generated order, e.g., <code>COMPLETED</code></td></tr>
<tr><td>invoiceUrl</td><td>string</td><td>Direct URL to view or download the related invoice</td></tr>
<tr id="timestamps" style={{ borderTop: "4px solid #ddd" }}>
<td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
<a href="#navigate-this-webhook">Timestamps</a>
</td>
</tr>
<tr><td>changed</td><td>number</td><td>Timestamp of the last update in milliseconds</td></tr>
<tr><td>changedInSeconds</td><td>number</td><td>Timestamp of the last update in seconds</td></tr>
<tr><td>changedDisplay</td><td>string</td><td>Human-readable date of the last change</td></tr>
<tr><td>changedTimeDisplay</td><td>string</td><td>Human-readable time of the last change with timezone</td></tr>
<tr id="recipient-object" style={{ borderTop: "4px solid #ddd" }}>
<td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
<a href="#navigate-this-webhook">Recipient object</a>
</td>
</tr>
<tr><td>recipient.first</td><td>string</td><td>Recipient’s first name</td></tr>
<tr><td>recipient.last</td><td>string</td><td>Recipient’s last name</td></tr>
<tr><td>recipient.email</td><td>string</td><td>Email address of the recipient</td></tr>
<tr><td>recipient.company</td><td>string</td><td>Company name of the recipient</td></tr>
<tr><td>recipient.phone</td><td>string</td><td>Phone number of the recipient</td></tr>
<tr><td>recipient.taxID</td><td>null</td><td>Recipient’s tax ID if available</td></tr>
<tr id="address-object" style={{ borderTop: "4px solid #ddd" }}>
<td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
<a href="#navigate-this-webhook">Address object</a>
</td>
</tr>
<tr><td>address.addressLine1</td><td>string</td><td>Primary street address line</td></tr>
<tr><td>address.city</td><td>string</td><td>City</td></tr>
<tr><td>address.region</td><td>string</td><td>Region or state</td></tr>
<tr><td>address.postalCode</td><td>string</td><td>Postal or ZIP code</td></tr>
<tr><td>address.country</td><td>string</td><td>Two-letter ISO country code</td></tr>
<tr><td>address.display</td><td>string</td><td>Formatted full address display</td></tr>
<tr id="items-array" style={{ borderTop: "4px solid #ddd" }}>
<td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
<a href="#navigate-this-webhook">Items array</a>
</td>
</tr>
<tr><td>items</td><td>array</td><td>List of products included in the completed quote</td></tr>
<tr><td>items.product</td><td>string</td><td>Product name or identifier</td></tr>
<tr><td>items.quantity</td><td>number</td><td>Quantity of the quoted product</td></tr>
<tr><td>items.display</td><td>string</td><td>Customer-facing product display name</td></tr>
<tr><td>items.subtotal</td><td>number</td><td>Item subtotal in transaction currency</td></tr>
<tr><td>items.subtotalDisplay</td><td>string</td><td>Formatted display of item subtotal</td></tr>
<tr><td>items.discount</td><td>string</td><td>Discount amount applied to the item (numeric string)</td></tr>
<tr><td>items.discountDisplay</td><td>string</td><td>Formatted display of the item discount</td></tr>