> For the complete documentation index, see [llms.txt](https://help.paintscout.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.paintscout.com/developers/webhooks.md).

# Webhooks

## GET /webhooks

> List Webhooks

```json
{"openapi":"3.0.0","info":{"title":"Core API","version":"v2"},"servers":[{"url":"https://openapi.paintscout.com/v2"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Webhook":{"properties":{"events":{"type":"array","additionalProperties":false,"description":"A list of events covering events the Webhook is subscripted to. Allowed values: company-created, company-tags-changed, contact-created, contact-tags-changed, deal-created, deal-tags-changed, deal-stage-changed, event-created, task-created, task-completed, quote-created, quote-sent, invoice-sent, send-work-order, quote-accepted, quote-additional-work-accepted, quote-declined, quote-status-changed, quote-owner-changed, quote-tags-changed, quote-viewed, invoice-viewed","items":{"type":"string","enum":["company-created","company-tags-changed","contact-created","contact-tags-changed","deal-created","deal-tags-changed","deal-stage-changed","event-created","task-created","task-completed","quote-created","quote-sent","invoice-sent","send-work-order","quote-accepted","quote-additional-work-accepted","quote-declined","quote-status-changed","quote-owner-changed","quote-tags-changed","quote-viewed","invoice-viewed"]}}}},"Timestamp":{"type":"object","additionalProperties":false,"properties":{"created":{"type":"number","description":"The timestamp when this entity was created"},"updated":{"type":"number","description":"The timestamp when this entity was last updated"}}},"Error":{"type":"object","additionalProperties":false,"properties":{"errors":{"type":"array","items":{"type":"string"},"description":"Array of error messages"}}}}},"paths":{"/webhooks":{"get":{"summary":"List Webhooks","operationId":"listWebhooks","tags":["Webhooks"],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"perPage","in":"query","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"List of webhooks","content":{"application/json":{"schema":{"type":"object","properties":{"totalRows":{"type":"number"},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"A unique ID for the Webhook."},"url":{"type":"string","description":"The URL of the webhook, which will receive requests with data for any events fired that fall within the events of the Webhook."},"events":{"type":"array","$ref":"#/components/schemas/Webhook/properties/events"},"params":{"type":"object","nullable":true,"additionalProperties":false,"description":"An optional object of key-value pairs used to customize webhook trigger behavior.","properties":{"isInvoice":{"type":"boolean","description":"Whether or not the quote webhook is only to toggle for invoices. Only applicable for quote-related webhooks."},"quoteTypes":{"type":"array","description":"A list of quote types (by Id or Label) to filter quote-related webhooks. Only applicable for quote-related webhooks.","items":{"type":"string"}},"quoteStatus":{"type":"array","description":"A list of quote statuses to filter quote-related webhooks. Only applicable for quote or invoice related webhooks.","items":{"type":"string"}},"eventTypes":{"type":"array","description":"A list of event types (by Id or Label) to filter event-created webhooks. Only applicable for event-created webhooks.","items":{"type":"string"}},"stageIds":{"type":"array","description":"A list of Deal Stage Ids to filter deal-stage-changed webhooks.","items":{"type":"string"}},"tagsAdded":{"type":"array","description":"A list of tags, if any of these tags are added to the entity, the webhook will trigger.","items":{"type":"string"}},"tagsRemoved":{"type":"array","description":"A list of tags, if any of these tags are removed from the entity, the webhook will trigger.","items":{"type":"string"}}}},"token":{"type":"string","description":"A string used to hash the webhook body for verification."},"enabled":{"type":"boolean","description":"Whether or not the Webhook is enabled/active."},"timestamp":{"$ref":"#/components/schemas/Timestamp"}},"required":["id","url","events"]}}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not Authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /webhooks

> Create Webhook

```json
{"openapi":"3.0.0","info":{"title":"Core API","version":"v2"},"servers":[{"url":"https://openapi.paintscout.com/v2"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Webhook":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"A unique ID for the Webhook. Ignored when creating & updating webhooks."},"url":{"type":"string","description":"The URL of the webhook, which will receive requests with data for any events fired that fall within the events of the Webhook."},"events":{"type":"array","additionalProperties":false,"description":"A list of events covering events the Webhook is subscripted to. Allowed values: company-created, company-tags-changed, contact-created, contact-tags-changed, deal-created, deal-tags-changed, deal-stage-changed, event-created, task-created, task-completed, quote-created, quote-sent, invoice-sent, send-work-order, quote-accepted, quote-additional-work-accepted, quote-declined, quote-status-changed, quote-owner-changed, quote-tags-changed, quote-viewed, invoice-viewed","items":{"type":"string","enum":["company-created","company-tags-changed","contact-created","contact-tags-changed","deal-created","deal-tags-changed","deal-stage-changed","event-created","task-created","task-completed","quote-created","quote-sent","invoice-sent","send-work-order","quote-accepted","quote-additional-work-accepted","quote-declined","quote-status-changed","quote-owner-changed","quote-tags-changed","quote-viewed","invoice-viewed"]}},"params":{"type":"object","nullable":true,"additionalProperties":false,"description":"An optional object of key-value pairs used to customize webhook trigger behavior.","properties":{"isInvoice":{"type":"boolean","description":"Whether or not the quote webhook is only to toggle for invoices. Only applicable for quote-related webhooks."},"quoteTypes":{"type":"array","description":"A list of quote types (by Id or Label) to filter quote-related webhooks. Only applicable for quote-related webhooks.","items":{"type":"string"}},"quoteStatus":{"type":"array","description":"A list of quote statuses to filter quote-related webhooks. Only applicable for quote or invoice related webhooks.","items":{"type":"string"}},"eventTypes":{"type":"array","description":"A list of event types (by Id or Label) to filter event-created webhooks. Only applicable for event-created webhooks.","items":{"type":"string"}},"stageIds":{"type":"array","description":"A list of Deal Stage Ids to filter deal-stage-changed webhooks.","items":{"type":"string"}},"tagsAdded":{"type":"array","description":"A list of tags, if any of these tags are added to the entity, the webhook will trigger.","items":{"type":"string"}},"tagsRemoved":{"type":"array","description":"A list of tags, if any of these tags are removed from the entity, the webhook will trigger.","items":{"type":"string"}}}},"token":{"type":"string","description":"A string used to hash the webhook body for verification."},"enabled":{"type":"boolean","description":"Whether or not the Webhook is enabled/active."},"timestamp":{"$ref":"#/components/schemas/Timestamp"}},"required":["url","events"]},"Timestamp":{"type":"object","additionalProperties":false,"properties":{"created":{"type":"number","description":"The timestamp when this entity was created"},"updated":{"type":"number","description":"The timestamp when this entity was last updated"}}},"Error":{"type":"object","additionalProperties":false,"properties":{"errors":{"type":"array","items":{"type":"string"},"description":"Array of error messages"}}}}},"paths":{"/webhooks":{"post":{"summary":"Create Webhook","operationId":"createWebhook","tags":["Webhooks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"responses":{"200":{"description":"Details about the new Webhook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not Authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## GET /webhooks/{id}

> Retrieve Webhook

```json
{"openapi":"3.0.0","info":{"title":"Core API","version":"v2"},"servers":[{"url":"https://openapi.paintscout.com/v2"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Webhook":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"A unique ID for the Webhook. Ignored when creating & updating webhooks."},"url":{"type":"string","description":"The URL of the webhook, which will receive requests with data for any events fired that fall within the events of the Webhook."},"events":{"type":"array","additionalProperties":false,"description":"A list of events covering events the Webhook is subscripted to. Allowed values: company-created, company-tags-changed, contact-created, contact-tags-changed, deal-created, deal-tags-changed, deal-stage-changed, event-created, task-created, task-completed, quote-created, quote-sent, invoice-sent, send-work-order, quote-accepted, quote-additional-work-accepted, quote-declined, quote-status-changed, quote-owner-changed, quote-tags-changed, quote-viewed, invoice-viewed","items":{"type":"string","enum":["company-created","company-tags-changed","contact-created","contact-tags-changed","deal-created","deal-tags-changed","deal-stage-changed","event-created","task-created","task-completed","quote-created","quote-sent","invoice-sent","send-work-order","quote-accepted","quote-additional-work-accepted","quote-declined","quote-status-changed","quote-owner-changed","quote-tags-changed","quote-viewed","invoice-viewed"]}},"params":{"type":"object","nullable":true,"additionalProperties":false,"description":"An optional object of key-value pairs used to customize webhook trigger behavior.","properties":{"isInvoice":{"type":"boolean","description":"Whether or not the quote webhook is only to toggle for invoices. Only applicable for quote-related webhooks."},"quoteTypes":{"type":"array","description":"A list of quote types (by Id or Label) to filter quote-related webhooks. Only applicable for quote-related webhooks.","items":{"type":"string"}},"quoteStatus":{"type":"array","description":"A list of quote statuses to filter quote-related webhooks. Only applicable for quote or invoice related webhooks.","items":{"type":"string"}},"eventTypes":{"type":"array","description":"A list of event types (by Id or Label) to filter event-created webhooks. Only applicable for event-created webhooks.","items":{"type":"string"}},"stageIds":{"type":"array","description":"A list of Deal Stage Ids to filter deal-stage-changed webhooks.","items":{"type":"string"}},"tagsAdded":{"type":"array","description":"A list of tags, if any of these tags are added to the entity, the webhook will trigger.","items":{"type":"string"}},"tagsRemoved":{"type":"array","description":"A list of tags, if any of these tags are removed from the entity, the webhook will trigger.","items":{"type":"string"}}}},"token":{"type":"string","description":"A string used to hash the webhook body for verification."},"enabled":{"type":"boolean","description":"Whether or not the Webhook is enabled/active."},"timestamp":{"$ref":"#/components/schemas/Timestamp"}},"required":["url","events"]},"Timestamp":{"type":"object","additionalProperties":false,"properties":{"created":{"type":"number","description":"The timestamp when this entity was created"},"updated":{"type":"number","description":"The timestamp when this entity was last updated"}}},"Error":{"type":"object","additionalProperties":false,"properties":{"errors":{"type":"array","items":{"type":"string"},"description":"Array of error messages"}}}}},"paths":{"/webhooks/{id}":{"get":{"summary":"Retrieve Webhook","operationId":"getWebhook","tags":["Webhooks"],"parameters":[{"name":"id","in":"path","description":"ID of the Webhooks","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the webhooks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not Authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## PUT /webhooks/{id}

> Update Webhook

```json
{"openapi":"3.0.0","info":{"title":"Core API","version":"v2"},"servers":[{"url":"https://openapi.paintscout.com/v2"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Webhook":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"A unique ID for the Webhook. Ignored when creating & updating webhooks."},"url":{"type":"string","description":"The URL of the webhook, which will receive requests with data for any events fired that fall within the events of the Webhook."},"events":{"type":"array","additionalProperties":false,"description":"A list of events covering events the Webhook is subscripted to. Allowed values: company-created, company-tags-changed, contact-created, contact-tags-changed, deal-created, deal-tags-changed, deal-stage-changed, event-created, task-created, task-completed, quote-created, quote-sent, invoice-sent, send-work-order, quote-accepted, quote-additional-work-accepted, quote-declined, quote-status-changed, quote-owner-changed, quote-tags-changed, quote-viewed, invoice-viewed","items":{"type":"string","enum":["company-created","company-tags-changed","contact-created","contact-tags-changed","deal-created","deal-tags-changed","deal-stage-changed","event-created","task-created","task-completed","quote-created","quote-sent","invoice-sent","send-work-order","quote-accepted","quote-additional-work-accepted","quote-declined","quote-status-changed","quote-owner-changed","quote-tags-changed","quote-viewed","invoice-viewed"]}},"params":{"type":"object","nullable":true,"additionalProperties":false,"description":"An optional object of key-value pairs used to customize webhook trigger behavior.","properties":{"isInvoice":{"type":"boolean","description":"Whether or not the quote webhook is only to toggle for invoices. Only applicable for quote-related webhooks."},"quoteTypes":{"type":"array","description":"A list of quote types (by Id or Label) to filter quote-related webhooks. Only applicable for quote-related webhooks.","items":{"type":"string"}},"quoteStatus":{"type":"array","description":"A list of quote statuses to filter quote-related webhooks. Only applicable for quote or invoice related webhooks.","items":{"type":"string"}},"eventTypes":{"type":"array","description":"A list of event types (by Id or Label) to filter event-created webhooks. Only applicable for event-created webhooks.","items":{"type":"string"}},"stageIds":{"type":"array","description":"A list of Deal Stage Ids to filter deal-stage-changed webhooks.","items":{"type":"string"}},"tagsAdded":{"type":"array","description":"A list of tags, if any of these tags are added to the entity, the webhook will trigger.","items":{"type":"string"}},"tagsRemoved":{"type":"array","description":"A list of tags, if any of these tags are removed from the entity, the webhook will trigger.","items":{"type":"string"}}}},"token":{"type":"string","description":"A string used to hash the webhook body for verification."},"enabled":{"type":"boolean","description":"Whether or not the Webhook is enabled/active."},"timestamp":{"$ref":"#/components/schemas/Timestamp"}},"required":["url","events"]},"Timestamp":{"type":"object","additionalProperties":false,"properties":{"created":{"type":"number","description":"The timestamp when this entity was created"},"updated":{"type":"number","description":"The timestamp when this entity was last updated"}}},"Error":{"type":"object","additionalProperties":false,"properties":{"errors":{"type":"array","items":{"type":"string"},"description":"Array of error messages"}}}}},"paths":{"/webhooks/{id}":{"put":{"summary":"Update Webhook","parameters":[{"name":"id","in":"path","description":"ID of the Webhook","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"operationId":"updateWebhook","tags":["Webhooks"],"responses":{"200":{"description":"The updated webhook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not Authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## DELETE /webhooks/{id}

> Delete Webhook

```json
{"openapi":"3.0.0","info":{"title":"Core API","version":"v2"},"servers":[{"url":"https://openapi.paintscout.com/v2"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Error":{"type":"object","additionalProperties":false,"properties":{"errors":{"type":"array","items":{"type":"string"},"description":"Array of error messages"}}}}},"paths":{"/webhooks/{id}":{"delete":{"summary":"Delete Webhook","parameters":[{"name":"id","in":"path","description":"ID of the Webhook","required":true,"schema":{"type":"string"}}],"operationId":"deleteWebhook","tags":["Webhooks"],"responses":{"204":{"description":"No Content"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not Authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.paintscout.com/developers/webhooks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
