This webhook is triggered for each stage of the Proposal lifecycle. It is first triggered when a draft changes to an active proposal, which might then get accepted, rejected, withdrawn or expired. You will also get notified if a draft is turned into a template.

The resulting POST request will have the following data in its body:

{
  id: string;
  created: number;
  type: 'proposal.statusChanged';
  integration: IntegrationSessionData;
  proposal: Proposal;
}

id and created are a random UUID and UNIX timestamp, respectively, and common for all webhooks.

Refer to the IntegrationSessionData and Proposal entities for the exact shape the payload can take.

Optional response

In some cases the integration might want to store some metadata in the sent proposal (for example an external booking ID or similar). In these cases, you can respond to this webhook with the following format

The values in data will be stored in the proposal’s integration metadata (proposal.data.integration.metadata).