{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Webhooks","description":"REST API for the Dyflexis workforce management platform: employees, scheduling, time clock, payroll, absence, and workload, demand forecasting, staff capacity.","keywords":["Dyflexis","workforce management API","staff scheduling API","time clock API","payroll API","staff capacity API","absence management API","OpenAPI 3.1"],"siteUrl":"https://beta-developer.dyflexis.com","lang":"en-US","llmstxt":{"sections":[{"title":"API reference","description":"OpenAPI 3.1 reference for every Dyflexis endpoint.","includeFiles":["openapi.yaml","paths/**","components/**"],"excludeFiles":[]},{"title":"Guides","description":"Onboarding, quickstart, integration patterns, webhook receiver contract, and the partner process.","includeFiles":["index.md","guides/**"],"excludeFiles":[]}],"hide":false,"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"webhooks","__idx":0},"children":["Webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhooks notify your system of events in Dyflexis without polling. They invert the direction of the API: Dyflexis sends an HTTP ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," request to a URL ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["you"]}," host, with the payload documented per event in the API reference."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"registering-a-receiver","__idx":1},"children":["Registering a receiver"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhooks cannot be registered through the API. Ask Dyflexis to register your receiver URL, or configure it in Dyflexis where your subscription allows it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"available-events","__idx":2},"children":["Available events"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Event"},"children":["Event"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Sent when"},"children":["Sent when"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Payroll period ready"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A payroll period is finalised and its hours are ready to be picked up"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sick leave registration"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A sick-leave registration is created or the employee recovers"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Time card"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A time card is available for an employment-agency (SETU) integration"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The exact payload of each event is documented in the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Webhooks"]}," section of the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/openapi"},"children":["API reference"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The sick-leave event wraps its payload in an envelope; use the envelope field ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," to determine which event you received (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sick_leave_created"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sick_leave_recovered"]},")."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-your-receiver-must-do","__idx":3},"children":["What your receiver must do"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Accept an HTTP ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," with a JSON body (XML for the SETU time card) at the registered URL."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Respond ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200 OK"]}," once the message is accepted. Respond ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["503 Service Unavailable"]}," when your system is temporarily unable to process it."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Treat the request as a notification: validate, store, and acknowledge quickly, then process asynchronously."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Dyflexis does not authenticate to your receiver with your Dyflexis API key, so do not reuse that key to protect your endpoint. Use an unguessable URL and verify the payload against the documented schema."]}]},"headings":[{"value":"Webhooks","id":"webhooks","depth":1},{"value":"Registering a receiver","id":"registering-a-receiver","depth":2},{"value":"Available events","id":"available-events","depth":2},{"value":"What your receiver must do","id":"what-your-receiver-must-do","depth":2}],"frontmatter":{"seo":{"title":"Webhooks"}},"lastModified":"2026-06-12T15:21:56.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/webhooks","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}