Skip to main content

Webhooks

Webhooks push Dealops events to your systems as they happen, so you don't have to poll for changes. When a quote is signed, an approval is decided, or an opportunity syncs from your CRM, Dealops sends a signed HTTPS POST to an endpoint you register.

How it works​

Something happens in Dealops
└─► matching endpoints selected
└─► signed HTTPS POST to your URL
└─► your 2xx ──► done
non-2xx ──► retried with backoff

Each endpoint has its own URL, its own set of subscribed event types, and its own signing secret. You can register several — for example one for billing events and one for a data warehouse — and each is delivered to independently.

Registering an endpoint​

Endpoints can be managed from Dealops settings, or through the API:

curl -X POST https://api.dealops.com/external/v1/webhook-configs \
-H "x-api-key: $DEALOPS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Billing sync",
"url": "https://hooks.example.com/dealops",
"eventTypes": ["quote.signed", "quote.crm_submitted"]
}'

The response includes a signingSecret — the only time it is ever returned. Store it before you close the connection; if you lose it, rotate to get a new one. Use it to verify every delivery.

Your URL must be HTTPS, and must resolve to a public address — private, loopback, and link-local ranges are rejected, both when you register and again at delivery time. A localhost tunnel from a development machine works only if it has a real public hostname.

See the API reference for the full set of endpoint-management routes: list, update, delete, rotate the secret, and inspect recent deliveries.

Events you can subscribe to​

Event typeFires when
quote.createdA new pricing quote was created.
quote.updatedA pricing quote was updated.
quote.exportedA quote document was exported.
quote.approval_submittedA quote was submitted for approval.
quote.approval_decidedAn approver approved or rejected a quote.
quote.approval_recalledThe submitter recalled an in-flight approval.
quote.crm_submittedA quote was written back to the CRM.
quote.deletedA pricing quote was deleted.
quote.signature_requestedA signature envelope was sent for a quote.
quote.signedAll signers completed the envelope.
quote.signature_declinedA signer declined the envelope.
quote.signature_voidedAn envelope was voided before completion.
quote.primary_setThe primary quote on an opportunity changed.
opportunity.createdA new opportunity was created in Dealops.
opportunity.updatedAn opportunity was updated.
opportunity.deletedAn opportunity was deleted.
opportunity.refreshedAn opportunity was refreshed from the CRM.
opportunity.crm_pushedDealops pushed opportunity updates back to the CRM.
quote_proposal.createdA quote proposal was created.
quote_proposal.quotes_changedThe quote membership on a proposal changed.
quote_proposal.archivedA quote proposal was archived.
quote_proposal.unarchivedA quote proposal was un-archived.

Subscribing to an event type that isn't on this list is rejected at registration. Subscribe only to what you act on — every extra type is traffic your endpoint has to absorb and acknowledge.

Next steps​

  • Verifying deliveries — the headers, the payload envelope, and the signature check you should run before trusting a request.
  • Delivery and retries — what happens when your endpoint is down, how to stay idempotent, and how endpoints get disabled.