Subscribe webhook

POST/api/v1/triggers/{event}/subscribe

Subscribe a callback URL to a QuoteCloud event

The required OAuth scope depends on event; the exact mapping is on TriggerEvent. status is required for documentStatusChange and is an optional subtype filter for delivery, product, payment, and comment events. Callback URLs must pass QuoteCloud's public HTTPS webhook URL validation.

Permission

An OAuth access token with any one of these scopes. How to get a token

webhooks:document_status
Subscribe to document status changes.
webhooks:form_submission
Subscribe to form submissions.
webhooks:contact_created
Subscribe to contact creation.
webhooks:document_created
Subscribe to document creation.
webhooks:recipient_activity
Subscribe to recipient views and signatures.
webhooks:contact_changes
Subscribe to contact updates and removals.
webhooks:document_delivery
Subscribe to delivery status changes.
webhooks:product_changes
Subscribe to product changes.
webhooks:document_payments
Subscribe to document payment events.
webhooks:document_comments
Subscribe to document comment events.

Parameters

Not sure what to enter? Here’s where to find IDs.

eventpath · stringrequired
Scope mapping: documentStatusChange → webhooks:document_status; formSubmitted → webhooks:form_submission; contactCreated → webhooks:contact_created; documentCreated → webhooks:document_created; recipientFirstViewed and recipientSigned → webhooks:recipient_activity; contactUpdated and contactRemoved → webhooks:contact_changes; documentDeliveryStatusChanged → webhooks:document_delivery; productChanged → webhooks:product_changes; documentPaymentEvent → webhooks:document_payments; documentCommentEvent → webhooks:document_comments.One of documentStatusChange, formSubmitted, contactCreated, documentCreated, recipientFirstViewed, recipientSigned, contactUpdated, contactRemoved, documentDeliveryStatusChanged, productChanged, documentPaymentEvent, documentCommentEvent.
client_idquery · stringrequired
The Client ID of your OAuth client. It’s public, and goes on every request alongside your access token. Find it in QuoteCloud under Settings → API dashboard → Manage Integrations → OAuth Clients.Length at least 1.
statusquery · string
Document status for documentStatusChange; optional subtype for delivery (scheduled, paused_addon, queued, preparing, sending, sent, skipped, failed, needs_review, cancelled), product (created, updated, activated, deactivated), payment (received, failed, refunded), or comment (created, resolved, reopened).
zapIdquery · string
Sent by Zapier to identify the Zap. You can leave this out.

Request body

Sent as application/json.

hookUrlstring (uri)required

Responses

200Webhook created or reactivated.
dataobjectrequired
Fields
statusstringrequired
Always success.
messagestringrequired
400Invalid request or validation failure.
dataobjectrequired
Fields
statusstringrequired
Always error.
messagestringrequired
codestring
documentRefstring
assetGenerationIdstring
errorsarray of object
Item fields
fieldstringrequired
messagestringrequired
401Missing or invalid bearer token or client ID.
errorstringrequired
error_descriptionstring
403Insufficient scope, missing add-on, usage limit, or permission denial.

Exactly one of these:

OAuthError
errorstringrequired
error_descriptionstring
ApiErrorEnvelope
dataobjectrequired
Fields
statusstringrequired
Always error.
messagestringrequired
codestring
documentRefstring
assetGenerationIdstring
errorsarray of object
Item fields
fieldstringrequired
messagestringrequired
429Shared company API request quota exceeded. Wait before retrying.
Retry-Afterheader · integer
Minimum seconds to wait before retrying.Value at least 1.
dataobjectrequired
Fields
statusstringrequired
Always error.
messagestringrequired
retryAfterSecondsintegerrequired
Value at least 1.

Callbacks

QuoteCloud webhook delivery. QuoteCloud sends POST to {$request.body#/hookUrl}.

X-QuoteCloud-Event-Idheader · stringrequired
Present on every delivery. Legacy document-status deliveries use document_status:<documentId>:<status>; domain-event deliveries use the payload's id.
Payload

Exactly one of these:

DocumentStatusChangeWebhook

The complete body delivered for documentStatusChange. This payload is intentionally minimal; hydrate the full document with GET /api/v1/zapierDocument?document_id=<documentId>.

eventIdstring
Unique status occurrence ID, stable across retries.
occurredAtstring (date-time)
previousStatusstring
One of sent, opened, signing, signing_complete, part_paid, paid, accepted, lost, canceled, creating, revising, workflow_review_requested, workflow_review_accepted, pending_sent, scheduled_send, delivery_delayed, delivered, alert, email_complained, email_bounced, send_failed, expired, custom, template, system_template.
documentIdstringrequired
statusstringrequired
One of sent, opened, signing, signing_complete, part_paid, paid, accepted, lost, canceled, creating, revising, workflow_review_requested, workflow_review_accepted, pending_sent, scheduled_send, delivery_delayed, delivered, alert, email_complained, email_bounced, send_failed, expired, custom, template, system_template.
userIdstringrequired
reasonstring
reasonDetailsstring
FormSubmittedWebhook
idstringrequired
eventstringrequired
Always form_submission.
submissionIdstringrequired
documentIdstringrequired
recipientIdstring or nullrequired
submittedAtstring (date-time)required
valueCountintegerrequired
ContactCreatedWebhook
idstringrequired
eventstringrequired
Always contact_created.
contactIdstringrequired
emailstringrequired
firstNamestringrequired
lastNamestring or nullrequired
fullNamestringrequired
phonestring or nullrequired
mobilestring or nullrequired
jobTitlestring or nullrequired
addressstring or nullrequired
createdAtstring (date-time)required
DocumentCreatedWebhook
idstringrequired
eventstringrequired
Always document_created.
documentIdstringrequired
documentRefstringrequired
titlestringrequired
statusstringrequired
sourcestringrequired
ownerIdstringrequired
ownerEmailstring or nullrequired
sourceDocumentIdstring or nullrequired
templateIdstring or nullrequired
createdAtstring (date-time)required
documentobjectrequired
Fields
idstringrequired
documentRefstringrequired
titlestringrequired
statusstringrequired
RecipientFirstViewedWebhook
idstringrequired
eventstringrequired
Always recipient_first_viewed.
documentIdstringrequired
documentRefstringrequired
documentTitlestringrequired
documentStatusstringrequired
recipientIdstringrequired
recipientEmailstring or nullrequired
recipientNamestringrequired
firstViewedAtstring (date-time)required
viewCountnumberrequired
documentobjectrequired
Fields
idstringrequired
documentRefstringrequired
titlestringrequired
statusstringrequired
recipientobjectrequired
Fields
idstringrequired
emailstring or nullrequired
firstNamestringrequired
lastNamestring or nullrequired
RecipientSignedWebhook
idstringrequired
eventstringrequired
Always recipient_signed.
documentIdstringrequired
documentRefstringrequired
documentTitlestringrequired
documentStatusstringrequired
recipientIdstringrequired
recipientEmailstring or nullrequired
recipientNamestringrequired
signedAtstring (date-time)required
completedFieldCountintegerrequired
remainingSignerCountintegerrequired
documentSigningCompletebooleanrequired
documentobjectrequired
Fields
idstringrequired
documentRefstringrequired
titlestringrequired
statusstringrequired
recipientobjectrequired
Fields
idstringrequired
emailstring or nullrequired
firstNamestringrequired
lastNamestring or nullrequired
ContactChangedWebhook
idstringrequired
eventstringrequired
One of contact_updated, contact_removed.
contactIdstringrequired
emailstringrequired
firstNamestringrequired
lastNamestring or nullrequired
fullNamestringrequired
phonestring or nullrequired
mobilestring or nullrequired
jobTitlestring or nullrequired
addressstring or nullrequired
changedFieldsarray of stringrequired
occurredAtstring (date-time)required
DocumentDeliveryWebhook
idstringrequired
eventstringrequired
Always document_delivery_status_changed.
deliveryRefstringrequired
documentIdstringrequired
documentRefstring or null
previousStatusstring or nullrequired
One of scheduled, paused_addon, queued, preparing, sending, sent, skipped, failed, needs_review, cancelled.
statusstringrequired
One of scheduled, paused_addon, queued, preparing, sending, sent, skipped, failed, needs_review, cancelled.
occurredAtstring (date-time)required
ProductChangedWebhook
idstringrequired
eventstringrequired
Always product_changed.
changestringrequired
One of created, updated, activated, deactivated.
productIdstringrequired
namestringrequired
skustringrequired
activebooleanrequired
changedFieldsarray of stringrequired
occurredAtstring (date-time)required
DocumentPaymentWebhook
idstringrequired
eventstringrequired
Always document_payment_event.
paymentEventstringrequired
One of received, failed, refunded.
transactionIdstringrequired
transactionRefstringrequired
documentIdstringrequired
documentRefstring or nullrequired
documentTitlestringrequired
documentStatusstringrequired
recipientIdstring or nullrequired
providerPaymentRefstringrequired
amountMinorintegerrequired
refundTotalMinorintegerrequired
currencystringrequired
statusstringrequired
payerEmailstring or nullrequired
failureCodestring or nullrequired
failureMessagestring or nullrequired
occurredAtstring (date-time)required
DocumentCommentWebhook
idstringrequired
eventstringrequired
Always document_comment_event.
commentEventstringrequired
One of created, resolved, reopened.
commentIdstringrequired
commentRefstringrequired
documentIdstringrequired
documentRefstring or nullrequired
documentTitlestringrequired
documentStatusstringrequired
bodystringrequired
statusstringrequired
One of open, resolved.
authorIdstringrequired
authorNamestring or nullrequired
authorEmailstring or nullrequired
createdAtstring (date-time)required
updatedAtstring (date-time)required
resolvedAtstring (date-time) or nullrequired

Reply with 2XX: Acknowledge the event.

Rate limit

120 requests a minute per company, shared across REST, Zapier and MCP. On a 429, wait for Retry-After.