OPX uses webhooks to notify your application when important events happen on your worksites. Instead of polling our API for changes, you receive an HTTP POST request as soon as an event occurs.
Webhooks are managed directly in OPX, under Settings › Developers › Webhooks (this requires the permission to manage the developer space). For each webhook, you provide:
URL: the HTTPS endpoint that will receive the notifications.
Events: at least one of the available events. A webhook only receives the events it is subscribed to.
Secret (optional, 16 characters minimum): used to sign every notification. If you leave it empty, OPX generates one for you.
The secret is displayed only once, right after the webhook is created. Store it securely: it cannot be displayed again.
You can create several webhooks, for instance to send different events to different endpoints.
This request is not signed: at this point, your endpoint may not know the secret yet (especially if it was generated by OPX). Your endpoint should answer it with a 2XX status code without checking the signature. If it does not, the webhook is still created, but OPX warns that the URL could not be reached.
Triggered when a worksite moves forward to a new status. No notification is sent when a worksite goes back to a previous status, nor when it is deleted or cancelled.
Each notification includes a Signature header, which lets you verify that the request was sent by OPX and was not altered in transit. The only exception is the connectivity check, which is not signed.The signature is the HMAC-SHA256 of the raw request body, computed with your secret and encoded in lowercase hexadecimal, with no prefix.PHP:
If your endpoint does not respond within 3 seconds, or responds with a non-2XX status code, OPX retries the delivery. Each notification is attempted 3 times in total:
1st attempt: immediately;
2nd attempt: 10 seconds after the first failure;
3rd attempt: 100 seconds after the second failure.
After the third failed attempt, the notification is dropped.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OPX","colors":{"primary":"#1730BF","light":"#4F95FF","dark":"#1730BF"},"logo":{"light":"https://mintcdn.com/opx/OMvPuuHV3xFuPVay/logo/opx-dark.svg?fit=max\u0026auto=format\u0026n=OMvPuuHV3xFuPVay\u0026q=85\u0026s=399ae365414d8cf0abb91632d4cda098","dark":"https://mintcdn.com/opx/OMvPuuHV3xFuPVay/logo/opx-dark.svg?fit=max\u0026auto=format\u0026n=OMvPuuHV3xFuPVay\u0026q=85\u0026s=399ae365414d8cf0abb91632d4cda098"},"favicon":"https://mintcdn.com/opx/OMvPuuHV3xFuPVay/favicon.svg?fit=max\u0026auto=format\u0026n=OMvPuuHV3xFuPVay\u0026q=85\u0026s=3519a4f79e70542ffa636d07bc0e585d","navbar":{"links":[{"href":"mailto:contact@opx.co","label":"Support"}],"primary":{"type":"button","label":"Fonctionnalités","href":"https://www.opx.co/features"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/opx-co"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Features","icon":"globe","href":"https://www.opx.co/"},{"anchor":"Book a demo","icon":"hand-holding-heart","href":"https://www.opx.co/demo"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"opx","hasAudioNarration":false,"actualSubdomain":"opx","customDomains":["docs.opx.co"],"gitSource":{"type":"github","owner":"drapo-solutions","repo":"mintlify-doc","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae818021795b614d9d55e98","collectionId":"ca037f98-fd71-41e5-b196-f01d968b268d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae818021795b614d9d55e98"},"entitlements":{},"buildId":"6ae818021795b614d9d55e98","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API Reference (beta)","count":58},{"language":"default","tag":"Documentation","count":8},{"language":"default","tag":"WorksiteTags","count":8},{"language":"default","tag":"Beneficiaries","count":5},{"language":"default","tag":"Materials","count":5},{"language":"default","tag":"Subcontractors","count":5},{"language":"default","tag":"Worksites","count":5},{"language":"default","tag":"WorksitesDocuments","count":5},{"language":"default","tag":"WorksitesOperations","count":5},{"language":"default","tag":"Conventions","count":4}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/partners/webhooks","slug":"/api-reference/partners/webhooks","pageMetadata":{"title":"Webhooks","description":"Receive OPX webhook notifications","href":"/api-reference/partners/webhooks"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Receive OPX webhook notifications\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`OPX uses webhooks to notify your application when important events happen on your worksites. Instead of polling our API for changes, you receive an HTTP `,_jsx(_components.code,{children:`POST`}),` request as soon as an event occurs.`]}),`\n`,_jsx(Heading,{level:`3`,id:`setup`,children:`Setup`}),`\n`,_jsx(Heading,{level:`4`,id:`creating-a-webhook`,children:`Creating a webhook`}),`\n`,_jsxs(_components.p,{children:[`Webhooks are managed directly in OPX, under `,_jsx(_components.strong,{children:`Settings › Developers › Webhooks`}),` (this requires the permission to manage the developer space). For each webhook, you provide:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`URL`}),`: the HTTPS endpoint that will receive the notifications.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Events`}),`: at least one of the `,_jsx(_components.a,{href:`#available-events`,children:`available events`}),`. A webhook only receives the events it is subscribed to.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secret`}),` (optional, 16 characters minimum): used to `,_jsx(_components.a,{href:`#security`,children:`sign`}),` every notification. If you leave it empty, OPX generates one for you.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`The secret is displayed only once, right after the webhook is created. Store it securely: it cannot be displayed again.`})}),`\n`,_jsx(_components.p,{children:`You can create several webhooks, for instance to send different events to different endpoints.`}),`\n`,_jsx(Heading,{level:`4`,id:`connectivity-check`,children:`Connectivity check`}),`\n`,_jsx(_components.p,{children:`When a webhook is created, OPX sends a single test request to its URL to check that it is reachable:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6f1c2b0e-8d4a-4f7e-9a51-3c2d8e7b9f10\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"webhook_ping\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-24T10:00:00.000000Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This request is `,_jsx(_components.strong,{children:`not signed`}),`: at this point, your endpoint may not know the secret yet (especially if it was generated by OPX). Your endpoint should answer it with a 2XX status code without checking the signature. If it does not, the webhook is still created, but OPX warns that the URL could not be reached.`]}),`\n`,_jsx(Heading,{level:`3`,id:`payload-format`,children:`Payload format`}),`\n`,_jsx(_components.p,{children:`Every notification shares the same envelope:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`event_id`})}),_jsx(_components.td,{children:`string (UUID)`}),_jsxs(_components.td,{children:[`Unique identifier of the notification. It stays the same across `,_jsx(_components.a,{href:`#retry-strategy`,children:`retries`}),`: use it to ignore duplicates.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`event`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`Name of the event.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`timestamp`})}),_jsx(_components.td,{children:`string (ISO 8601, UTC)`}),_jsx(_components.td,{children:`Date and time at which the event occurred.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`data`})}),_jsx(_components.td,{children:`object`}),_jsx(_components.td,{children:`Event-specific data, detailed below.`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`available-events`,children:`Available events`}),`\n`,_jsxs(Heading,{level:`4`,id:`status-changed-worksite_status_changed`,children:[`Status changed `,_jsx(_components.code,{children:`worksite_status_changed`})]}),`\n`,_jsx(_components.p,{children:`Triggered when a worksite moves forward to a new status. No notification is sent when a worksite goes back to a previous status, nor when it is deleted or cancelled.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0b8e7c5a-1f2d-4e3b-8a9c-7d6e5f4a3b21\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"worksite_status_changed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-24T10:00:00.000000Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"worksite_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"4\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Etape 4 : Etude finale du dossier\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`status_id`}),` is sent as a string.`]})}),`\n`,_jsx(_components.p,{children:`Possible statuses, in workflow order:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`status_id`}),_jsx(_components.th,{children:`status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`1`}),_jsx(_components.td,{children:`Etape 1 : Constitution de dossier`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2`}),_jsx(_components.td,{children:`Etape 2 : Etude préliminaire du dossier`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`3`}),_jsx(_components.td,{children:`Etape 3 : En attente des pièces finales`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`4`}),_jsx(_components.td,{children:`Etape 4 : Etude finale du dossier`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`5`}),_jsx(_components.td,{children:`Etape 5 : Contrôles`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`51`}),_jsx(_components.td,{children:`Etape 5bis : Contrôle contact`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`6`}),_jsx(_components.td,{children:`Etape 6 : A déposer auprès du PNCEE`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`7`}),_jsx(_components.td,{children:`Etape 7 : En attente du retour du PNCEE`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`8`}),_jsx(_components.td,{children:`Etape 8 : Dossier terminé`})]})]})]}),`\n`,_jsxs(Heading,{level:`4`,id:`operation-updated-worksite_operation_updated`,children:[`Operation updated `,_jsx(_components.code,{children:`worksite_operation_updated`})]}),`\n`,_jsx(_components.p,{children:`Triggered when an operation of a worksite is updated. Several changes made to the same operation in a single action are grouped into one notification.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"9c4d2e1f-3a5b-4c6d-8e7f-1a2b3c4d5e6f\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"worksite_operation_updated\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-24T10:00:00.000000Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"worksite_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"worksite_operation_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`789`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The payload only identifies the operation: use the API to retrieve its current data.`}),`\n`,_jsxs(Heading,{level:`4`,id:`operation-custom-status-changed-worksite_operation_custom_status_changed`,children:[`Operation custom status changed `,_jsx(_components.code,{children:`worksite_operation_custom_status_changed`})]}),`\n`,_jsx(_components.p,{children:`Triggered when a custom status is applied to an operation. Only webhooks of the entity that owns this custom status receive this event.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2e3f4a5b-6c7d-4e8f-9a0b-1c2d3e4f5a6b\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"worksite_operation_custom_status_changed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-24T10:00:00.000000Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"worksite_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"worksite_operation_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`789`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The payload does not include the new custom status: use the API to retrieve it.`}),`\n`,_jsxs(Heading,{level:`4`,id:`document-generated-worksite_document_generated`,children:[`Document generated `,_jsx(_components.code,{children:`worksite_document_generated`})]}),`\n`,_jsx(_components.p,{children:`Triggered when a new document is generated for a worksite.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"worksite_document_generated\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-24T10:00:00.000000Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"worksite_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"document_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`456`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(Heading,{level:`4`,id:`documents-controlled-worksite_documents_controlled`,children:[`Documents controlled `,_jsx(_components.code,{children:`worksite_documents_controlled`})]}),`\n`,_jsx(_components.p,{children:`Triggered when all documents of a worksite have been reviewed and validated.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"worksite_documents_controlled\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-24T10:00:00.000000Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"worksite_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`receiving-webhooks`,children:`Receiving webhooks`}),`\n`,_jsx(_components.p,{children:`To receive webhooks correctly, your endpoint must:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verify the authenticity`}),` of each notification using the `,_jsx(_components.code,{children:`Signature`}),` header (see `,_jsx(_components.a,{href:`#security`,children:`Security`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Respond quickly`}),`, within 3 seconds, with a `,_jsx(_components.strong,{children:`2XX`}),` status code. Any other final response, or a timeout, counts as a failure.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Process asynchronously`}),` any logic that takes longer.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ignore duplicates`}),` using `,_jsx(_components.code,{children:`event_id`}),`: a notification can be delivered more than once.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`security`,children:`Security`}),`\n`,_jsxs(_components.p,{children:[`Each notification includes a `,_jsx(_components.code,{children:`Signature`}),` header, which lets you verify that the request was sent by OPX and was not altered in transit. The only exception is the `,_jsx(_components.a,{href:`#connectivity-check`,children:`connectivity check`}),`, which is not signed.`]}),`\n`,_jsxs(_components.p,{children:[`The signature is the `,_jsx(_components.strong,{children:`HMAC-SHA256`}),` of the raw request body, computed with your secret and encoded in lowercase hexadecimal, with no prefix.`]}),`\n`,_jsx(_components.p,{children:`PHP:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$signature`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $_SERVER`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'HTTP_SIGNATURE'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`??`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ''`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` file_get_contents`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'php://input'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$expectedSignature`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` hash_hmac`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'sha256'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$payload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'your_secret'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`hash_equals`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$expectedSignature`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$signature`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` http_response_code`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` exit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Invalid signature'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Quick response`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`http_response_code`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Async logic`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Java:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`java`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`java`,children:_jsxs(_components.code,{language:`java`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#4EC9B0`},children:`Mac`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` sha256Hmac`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Mac`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getInstance`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"HmacSHA256\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#4EC9B0`},children:`SecretKeySpec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` secretKey`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` SecretKeySpec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`secret`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getBytes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`StandardCharsets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`UTF_8`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`), `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"HmacSHA256\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`sha256Hmac`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`init`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(secretKey);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#4EC9B0`},children:`byte`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`[] `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hash`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` sha256Hmac`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`doFinal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getBytes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`StandardCharsets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`UTF_8`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#4EC9B0`},children:`StringBuilder`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` computedSignature`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` StringBuilder`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#4EC9B0`},children:`byte`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` b`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` :`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hash) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` computedSignature`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`append`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`String`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`format`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"%02x\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, b));`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#4EC9B0`},children:`boolean`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` matches`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MessageDigest`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`isEqual`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` computedSignature`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`toString`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`().`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getBytes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`StandardCharsets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`UTF_8`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` signature`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getBytes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`StandardCharsets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`UTF_8`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`retry-strategy`,children:`Retry strategy`}),`\n`,_jsxs(_components.p,{children:[`If your endpoint does not respond within 3 seconds, or responds with a non-2XX status code, OPX retries the delivery. Each notification is attempted `,_jsx(_components.strong,{children:`3 times`}),` in total:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`1st attempt: immediately;`}),`\n`,_jsx(_components.li,{children:`2nd attempt: 10 seconds after the first failure;`}),`\n`,_jsx(_components.li,{children:`3rd attempt: 100 seconds after the second failure.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`After the third failed attempt, the notification is dropped.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Webhooks","description":"Receive OPX webhook notifications","href":"/api-reference/partners/webhooks"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Setup","slug":"setup","depth":3,"children":[]},{"title":"Creating a webhook","slug":"creating-a-webhook","depth":4,"children":[]},{"title":"Connectivity check","slug":"connectivity-check","depth":4,"children":[]},{"title":"Payload format","slug":"payload-format","depth":3,"children":[]},{"title":"Available events","slug":"available-events","depth":3,"children":[]},{"title":"Status changed worksite_status_changed","slug":"status-changed-worksite_status_changed","depth":4,"children":[]},{"title":"Operation updated worksite_operation_updated","slug":"operation-updated-worksite_operation_updated","depth":4,"children":[]},{"title":"Operation custom status changed worksite_operation_custom_status_changed","slug":"operation-custom-status-changed-worksite_operation_custom_status_changed","depth":4,"children":[]},{"title":"Document generated worksite_document_generated","slug":"document-generated-worksite_document_generated","depth":4,"children":[]},{"title":"Documents controlled worksite_documents_controlled","slug":"documents-controlled-worksite_documents_controlled","depth":4,"children":[]},{"title":"Receiving webhooks","slug":"receiving-webhooks","depth":3,"children":[]},{"title":"Security","slug":"security","depth":3,"children":[]},{"title":"Retry strategy","slug":"retry-strategy","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"opx","siteName":"OPX","title":"Webhooks - OPX","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-24T11:38:37.496Z","originalFileLocation":"api-reference/partners/webhooks.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Receive OPX webhook notifications\">\u003cmeta data-mint-head name=\"application-name\" content=\"OPX\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Webhooks - OPX\">\u003cmeta data-mint-head property=\"og:description\" content=\"Receive OPX webhook notifications\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OPX\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.opx.co/api-reference/partners/webhooks\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://opx.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Webhooks\u0026amp;description=Receive+OPX+webhook+notifications\u0026amp;theme=99af38e6c8e1ab7ef495ff8a\u0026amp;signature=8e916f29e0728fa10ffeddeb34d0281e2090252c6e405c995935e2572c13aeda\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Webhooks - OPX\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Receive OPX webhook notifications\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://opx.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Webhooks\u0026amp;description=Receive+OPX+webhook+notifications\u0026amp;theme=99af38e6c8e1ab7ef495ff8a\u0026amp;signature=8e916f29e0728fa10ffeddeb34d0281e2090252c6e405c995935e2572c13aeda\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/opx/dGb8qmtXvw14_Q6S/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OPX\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1730BF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.opx.co/api-reference/partners/webhooks\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/partners/webhooks.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OPX\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OPX","nav":{"global":{"anchors":[{"anchor":"Features","icon":"globe","href":"https://www.opx.co/"},{"anchor":"Book a demo","icon":"hand-holding-heart","href":"https://www.opx.co/demo"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Energy Bonus API","pages":[{"title":"Introduction","href":"/api-reference/energy-bonus/introduction"},{"title":"Step by step example","href":"/api-reference/energy-bonus/example"},{"title":"Available operations","href":"/api-reference/energy-bonus/operations"}]},{"group":"Partners API","pages":[{"title":"Introduction","href":"/api-reference/partners/introduction"},{"title":"Document Types","href":"/api-reference/partners/document-types"}]},{"group":"More","pages":[{"title":"Changelog","href":"/changelog-fr"}]}]},{"tab":"API Reference (beta)","groups":[{"group":"ApprovedMaterials","pages":[{"title":"Approved materials list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/approved-materials","href":"/partners-api/approvedmaterials/approved-materials-list"},{"title":"Approved material details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/approved-materials/{id}","href":"/partners-api/approvedmaterials/approved-material-details"}]},{"group":"Beneficiaries","pages":[{"title":"Beneficiaries list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/beneficiaries","href":"/partners-api/beneficiaries/beneficiaries-list"},{"title":"Beneficiary creation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/beneficiaries","href":"/partners-api/beneficiaries/beneficiary-creation"},{"title":"Beneficiary details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/beneficiaries/{id}","href":"/partners-api/beneficiaries/beneficiary-details"},{"title":"Beneficiary update","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json put /v1/beneficiaries/{id}","href":"/partners-api/beneficiaries/beneficiary-update"},{"title":"Beneficiary deletion","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json delete /v1/beneficiaries/{id}","href":"/partners-api/beneficiaries/beneficiary-deletion"}]},{"group":"ContractsTemplates","pages":[{"title":"Contracts templates list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/contracts-templates","href":"/partners-api/contractstemplates/contracts-templates-list"},{"title":"Contract template details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/contracts-templates/{id}","href":"/partners-api/contractstemplates/contract-template-details"}]},{"group":"Conventions","pages":[{"title":"Conventions list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/conventions","href":"/partners-api/conventions/conventions-list"},{"title":"Convention creation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/conventions","href":"/partners-api/conventions/convention-creation"},{"title":"Convention details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/conventions/{id}","href":"/partners-api/conventions/convention-details"},{"title":"Convention operations list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/conventions/{id}/operations","href":"/partners-api/conventions/convention-operations-list"}]},{"group":"CustomWorksiteOperationStatus","pages":[{"title":"List custom worksite operation statuses","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/custom-worksite-operation-statuses","href":"/partners-api/customworksiteoperationstatus/list-custom-worksite-operation-statuses"}]},{"group":"Document","pages":[{"title":"Get available document types","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/documents/types","href":"/partners-api/document/get-available-document-types"},{"title":"Get available document statuses","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/documents/statuses","href":"/partners-api/document/get-available-document-statuses"}]},{"group":"Materials","pages":[{"title":"Materials list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/materials","href":"/partners-api/materials/materials-list"},{"title":"Material creation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/materials","href":"/partners-api/materials/material-creation"},{"title":"Material details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/materials/{id}","href":"/partners-api/materials/material-details"},{"title":"Material update","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json put /v1/materials/{id}","href":"/partners-api/materials/material-update"},{"title":"Material deletion","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json delete /v1/materials/{id}","href":"/partners-api/materials/material-deletion"}]},{"group":"Operations","pages":[{"title":"Operations list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/operations","href":"/partners-api/operations/operations-list"},{"title":"Operation details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/operations/{id}","href":"/partners-api/operations/operation-details"},{"title":"Operation Aids parameters list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/operations/{id}/parameters","href":"/partners-api/operations/operation-aids-parameters-list"},{"title":"Operation AH parameters list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/operations/{id}/parameters/attestation","href":"/partners-api/operations/operation-ah-parameters-list"}]},{"group":"Professionals","pages":[{"title":"Professionals list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/professionals","href":"/partners-api/professionals/professionals-list"},{"title":"Professional details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/professionals/{id}","href":"/partners-api/professionals/professional-details"},{"title":"Professional registration documents","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/professionals/{id}/documents","href":"/partners-api/professionals/professional-registration-documents"}]},{"group":"Subcontractors","pages":[{"title":"Subcontractors list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/subcontractors","href":"/partners-api/subcontractors/subcontractors-list"},{"title":"Subcontractor creation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/subcontractors","href":"/partners-api/subcontractors/subcontractor-creation"},{"title":"Subcontractor details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/subcontractors/{id}","href":"/partners-api/subcontractors/subcontractor-details"},{"title":"Subcontractor update","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json put /v1/subcontractors/{id}","href":"/partners-api/subcontractors/subcontractor-update"},{"title":"Subcontractor deletion","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json delete /v1/subcontractors/{id}","href":"/partners-api/subcontractors/subcontractor-deletion"}]},{"group":"Tags","pages":[{"title":"Tags list: system tags and the custom tags of the account and of its partners","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/tags","href":"/partners-api/tags/tags-list:-system-tags-and-the-custom-tags-of-the-account-and-of-its-partners"}]},{"group":"Utils","pages":[{"title":"Health check","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/health-check","href":"/partners-api/utils/health-check"}]},{"group":"WorksiteTags","pages":[{"title":"Custom tags of a worksite","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/worksites/{id}/tags","href":"/partners-api/worksitetags/custom-tags-of-a-worksite"},{"title":"Replace the custom tags of a worksite, an empty list removes them all","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json put /v1/worksites/{id}/tags","href":"/partners-api/worksitetags/replace-the-custom-tags-of-a-worksite-an-empty-list-removes-them-all"},{"title":"Add custom tags to a worksite","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/worksites/{id}/tags","href":"/partners-api/worksitetags/add-custom-tags-to-a-worksite"},{"title":"Remove custom tags from a worksite","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json delete /v1/worksites/{id}/tags","href":"/partners-api/worksitetags/remove-custom-tags-from-a-worksite"},{"title":"Custom tags of a worksite operation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/worksites/{id}/operations/{worksite_operation_id}/tags","href":"/partners-api/worksitetags/custom-tags-of-a-worksite-operation"},{"title":"Replace the custom tags of a worksite operation, an empty list removes them all","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json put /v1/worksites/{id}/operations/{worksite_operation_id}/tags","href":"/partners-api/worksitetags/replace-the-custom-tags-of-a-worksite-operation-an-empty-list-removes-them-all"},{"title":"Add custom tags to a worksite operation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/worksites/{id}/operations/{worksite_operation_id}/tags","href":"/partners-api/worksitetags/add-custom-tags-to-a-worksite-operation"},{"title":"Remove custom tags from a worksite operation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json delete /v1/worksites/{id}/operations/{worksite_operation_id}/tags","href":"/partners-api/worksitetags/remove-custom-tags-from-a-worksite-operation"}]},{"group":"Worksites","pages":[{"title":"Worksites list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/worksites","href":"/partners-api/worksites/worksites-list"},{"title":"Worksite creation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/worksites","href":"/partners-api/worksites/worksite-creation"},{"title":"Worksite details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/worksites/{id}","href":"/partners-api/worksites/worksite-details"},{"title":"Worksite update","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json put /v1/worksites/{id}","href":"/partners-api/worksites/worksite-update"},{"title":"Worksite deletion","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json delete /v1/worksites/{id}","href":"/partners-api/worksites/worksite-deletion"}]},{"group":"WorksitesDocuments","pages":[{"title":"Worksite documents list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/worksites/{id}/documents","href":"/partners-api/worksitesdocuments/worksite-documents-list"},{"title":"Worksite document creation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/worksites/{id}/documents","href":"/partners-api/worksitesdocuments/worksite-document-creation"},{"title":"Worksite document show","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/worksites/{id}/documents/{document_id}","href":"/partners-api/worksitesdocuments/worksite-document-show"},{"title":"Worksite document update","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json put /v1/worksites/{id}/documents/{document_id}","href":"/partners-api/worksitesdocuments/worksite-document-update"},{"title":"Worksite document deletion","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json delete /v1/worksites/{id}/documents/{document_id}","href":"/partners-api/worksitesdocuments/worksite-document-deletion"}]},{"group":"WorksitesOperations","pages":[{"title":"Worksite operations list","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/worksites/{id}/operations","href":"/partners-api/worksitesoperations/worksite-operations-list"},{"title":"Worksite operation creation","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json post /v1/worksites/{id}/operations","href":"/partners-api/worksitesoperations/worksite-operation-creation"},{"title":"Worksite operation details","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json get /v1/worksites/{id}/operations/{worksite_operation_id}","href":"/partners-api/worksitesoperations/worksite-operation-details"},{"title":"Worksite operation update","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json put /v1/worksites/{id}/operations/{worksite_operation_id}","href":"/partners-api/worksitesoperations/worksite-operation-update"},{"title":"Worksite operation deletion","deprecated":null,"version":null,"openapi":"/api-reference/partners/api.json delete /v1/worksites/{id}/operations/{worksite_operation_id}","href":"/partners-api/worksitesoperations/worksite-operation-deletion"}]}]}]},"basePath":"","title":"Webhooks - OPX","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":[],"chunks":[]}