> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stackone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Deel Webhook Setup Guide

> Configure Deel to deliver events to StackOne.

## Prerequisites

The connector should already be set up, with a Connector Profile and a Linked Account. See [Getting Started](/connectors/deel#getting-started) on the Deel connector page.

<section data-guide-section data-guide-scopes="">
  <h2>Automatic webhook subscription</h2>

  <p>StackOne creates and manages the Deel webhook subscription automatically when the account is connected, and deletes it when the account is disconnected. There is nothing to configure in Deel.</p>

  <Steps>
    <Step title="Token and scope requirements">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>The connection must be able to manage webhooks in Deel.</p>

        <ul>
          <li><strong>API Token</strong> connections need an <strong>Organization token</strong> with the `webhooks:read` and `webhooks:write` scopes.</li>
          <li><strong>OAuth 2.0</strong> connections need the `webhooks:read` and `webhooks:write` scopes granted on the Deel app.</li>
        </ul>
      </div>
    </Step>

    <Step title="Select events in StackOne">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Enable the webhook events you want on the Deel connector in StackOne. StackOne registers one organization-wide subscription, named <strong>StackOne</strong>, for exactly those events and re-creates it when the selection changes.</p>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Available webhook events</h2>

  <p>The following Deel events can be enabled. Only events selected in StackOne are included in the subscription, and Deel does not deliver events that are not subscribed.</p>

  <Steps>
    <Step title="People events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on worker and employee records.</p>

        <ul>
          <li><strong>Employee Created Contractor</strong> (`employee.created.contractor`) — Fired when a contractor's contract has been signed and the worker record has been created</li>
          <li><strong>Employee Created Direct</strong> (`employee.created.direct`) — Fired when a direct employee record is created</li>
          <li><strong>Employee Created EOR</strong> (`employee.created.eor`) — Fired when an EOR employee record is created</li>
          <li><strong>Employee Updated Direct</strong> (`employee.updated.direct`) — Fired when direct employee information is updated</li>
          <li><strong>Profile KYC Changed</strong> (`profile.kyc.changed`) — Fired when a profile's KYC status changes</li>
          <li><strong>Worker Created (SCIM)</strong> (`worker.created`) — Fired when a worker record is created through SCIM provisioning</li>
          <li><strong>Worker Profile Created</strong> (`worker.v2.created`) — Fired when a worker profile is created</li>
          <li><strong>Worker Profile Deleted</strong> (`worker.v2.deleted`) — Fired when a worker profile is deleted</li>
          <li><strong>Worker Profile Updated</strong> (`worker.v2.updated`) — Fired when a worker profile's data changes, covering profile, contract, compensation, address, phone, custom fields, or position</li>
        </ul>
      </div>
    </Step>

    <Step title="Contracts events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on contractor, EOR and Global Payroll contracts.</p>

        <ul>
          <li><strong>Contract Amended</strong> (`contract.amended`) — Fired when a contract amendment is applied</li>
          <li><strong>Contract Created</strong> (`contract.created`) — Fired when a contractor or EOR contract is created</li>
          <li><strong>Contract Duplicated</strong> (`contract.duplicated`) — Fired when a contract is duplicated</li>
          <li><strong>Contract Sign Team Member Invited</strong> (`contract.sign.team-member-invited`) — Fired when a team member is invited into a contract-signing flow</li>
          <li><strong>Contract Status Updated</strong> (`contract.status.updated`) — Fired whenever a contract's status changes</li>
          <li><strong>Contract Terminated</strong> (`contract.terminated`) — Fired when a contract termination is completed, for contractor, EOR, and Global Payroll contracts</li>
        </ul>
      </div>
    </Step>

    <Step title="Onboarding events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on worker onboarding progress.</p>

        <ul>
          <li><strong>Onboarding Checklist Updated</strong> (`onboarding.checklist.updated`) — Fired when an individual onboarding checklist step changes status</li>
          <li><strong>Onboarding Status Updated</strong> (`onboarding.status.updated`) — Fired when a worker's overall onboarding status changes, for example moving from invited, to onboarding, to complete</li>
        </ul>
      </div>
    </Step>

    <Step title="Time Off & Timesheets events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on time-off requests and timesheets.</p>

        <ul>
          <li><strong>Time Off Created</strong> (`time-off.created`) — Fired when a time-off request is created</li>
          <li><strong>Time Off Deleted</strong> (`time-off.deleted`) — Fired when a time-off request is deleted</li>
          <li><strong>Time Off Reviewed</strong> (`time-off.reviewed`) — Fired when a time-off request is reviewed</li>
          <li><strong>Time Off Updated</strong> (`time-off.updated`) — Fired when a time-off request is updated</li>
          <li><strong>Timesheet Created</strong> (`timesheet.created`) — Fired when a timesheet is created</li>
          <li><strong>Timesheet Reviewed</strong> (`timesheet.reviewed`) — Fired when a timesheet is reviewed</li>
        </ul>
      </div>
    </Step>

    <Step title="Payroll & Payments events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on invoice adjustments, payment statements, payslips and tax documents.</p>

        <ul>
          <li><strong>Invoice Adjustment Created</strong> (`invoice-adjustment.created`) — Fired when an invoice adjustment is created, covering categories such as bonus, commission, deduction, expense, overtime, time off, and VAT</li>
          <li><strong>Invoice Adjustment Pending For Approval</strong> (`invoice-adjustment.pending-for-approval`) — Fired when an invoice adjustment requires approval</li>
          <li><strong>Invoice Adjustment Reviewed</strong> (`invoice-adjustment.reviewed`) — Fired when an invoice adjustment is reviewed</li>
          <li><strong>Payment Statement Initiated</strong> (`payment.statement.initiated`) — Fired when a payment statement is initiated</li>
          <li><strong>Payment Statement Marked Paid</strong> (`payment.statement.mark-paid`) — Fired when a payment statement is marked as paid</li>
          <li><strong>Payslip Document Deleted</strong> (`payslip.document.deleted`) — Fired when a published payslip document is deleted</li>
          <li><strong>Tax Document Available</strong> (`tax.document.available`) — Fired when a tax document is published</li>
          <li><strong>Tax Document Deleted</strong> (`tax.document.deleted`) — Fired when a published tax document is deleted</li>
        </ul>
      </div>
    </Step>

    <Step title="EOR & Global Payroll events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events specific to Employer of Record and Global Payroll workers.</p>

        <ul>
          <li><strong>EOR Amendment Status Updated</strong> (`eor.amendment.status.updated`) — Fired when an EOR amendment's status changes</li>
          <li><strong>EOR Payslips Available</strong> (`eor.payslips.available`) — Fired when one or more EOR payslips become available</li>
          <li><strong>EOR Project Assignment Check-in Created</strong> (`eor.project-assignment-checkin.created`) — Fired when a recurring check-in for an EOR project assignment is created and becomes available to complete</li>
          <li><strong>EOR Project Assignment Created</strong> (`eor.project-assignment.created`) — Fired when a project assignment for an EOR contract is created and ready for the client to review</li>
          <li><strong>EOR Quote Created</strong> (`eor.quote.created`) — Fired when an EOR quote is created</li>
          <li><strong>GP Payslips Available</strong> (`gp.payslips.available`) — Fired when one or more Global Payroll payslips become available</li>
          <li><strong>GP Termination Confirmed</strong> (`gp.termination.confirmed`) — Fired when a Global Payroll termination is confirmed</li>
        </ul>
      </div>
    </Step>

    <Step title="ATS events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events from Deel ATS. Requires the ATS feature on the Deel organization.</p>

        <ul>
          <li><strong>ATS Application Created</strong> (`ats.application.created`) — Fired when a candidate application is created in Deel ATS</li>
          <li><strong>ATS Application Transitioned</strong> (`ats.application.transitioned`) — Fired when a candidate application moves between interview stages</li>
          <li><strong>ATS Job Posting Publication Created</strong> (`ats.job-posting-publication.created`) — Fired when a job posting begins publication to a specific job board</li>
          <li><strong>ATS Job Posting Publication Updated</strong> (`ats.job-posting-publication.updated`) — Fired when a job-board publication is updated</li>
          <li><strong>ATS Job Posting Created</strong> (`ats.job-posting.created`) — Fired when a job posting is created in Deel ATS, ahead of any job-board publication</li>
          <li><strong>ATS Job Posting Updated</strong> (`ats.job-posting.updated`) — Fired when a job posting is updated</li>
        </ul>
      </div>
    </Step>

    <Step title="IT Assets events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on IT assets and IT equipment orders.</p>

        <ul>
          <li><strong>IT Asset Archived</strong> (`it-asset.archived`) — Fired when an IT asset is archived, removing it from active assignment</li>
          <li><strong>IT Asset Created</strong> (`it-asset.created`) — Fired when an IT asset is created</li>
          <li><strong>IT Asset Location Updated</strong> (`it-asset.location-updated`) — Fired when an IT asset's location changes</li>
          <li><strong>IT Order Created</strong> (`it-order.created`) — Fired when an IT order is created</li>
          <li><strong>IT Order Updated</strong> (`it-order.updated`) — Fired when an IT order is updated</li>
        </ul>
      </div>
    </Step>

    <Step title="Immigration events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on immigration cases.</p>

        <ul>
          <li><strong>Immigration Case Process Status Updated</strong> (`immigration.case.process.status.update`) — Fired when an immigration case process's status changes</li>
          <li><strong>Immigration Case Renewal Created</strong> (`immigration.case.renewal.created`) — Fired when an expiring immigration document causes a renewal case to be created automatically</li>
        </ul>
      </div>
    </Step>

    <Step title="Learning events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on Deel Engage learning journeys.</p>

        <ul>
          <li><strong>Engage Learning Journeys Assignments Created</strong> (`engage.learning.journeys.assignments.created`) — Fired when a learning-journey assignment is created</li>
          <li><strong>Engage Learning Journeys Assignments Reminded</strong> (`engage.learning.journeys.assignments.reminded`) — Fired when a reminder is sent for a learning-journey assignment</li>
        </ul>
      </div>
    </Step>

    <Step title="Background Checks events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events on background checks.</p>

        <ul>
          <li><strong>Background Check Result Available</strong> (`bgcheck.result.available`) — Fired when a background-check result becomes available</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Delivery format</h2>

  <p>Details of how Deel delivers events to StackOne.</p>

  <Steps>
    <Step title="JSON payloads">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Deel sends one event per HTTP POST. The event type is in `data.meta.event_type`, the organization in `data.meta.organization_id`, the affected record in `data.resource`, and the delivery time in `timestamp`. StackOne uses the changed record's ID from `data.resource` as the event ID.</p>

        <ul>
          <li>Some events, such as payslip and tax document events, carry a list of records in `data.resource` instead of a single record.</li>
        </ul>
      </div>
    </Step>

    <Step title="Signature verification">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Deel signs each delivery with the `x-deel-signature` header, a hex HMAC-SHA256 of `POST` followed by the raw body, using the subscription's signing key.</p>
      </div>
    </Step>

    <Step title="Retries and auto-disable">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Deel retries failed deliveries with backoff for about a day and may deliver an event more than once. After 10 consecutive failed deliveries Deel disables the subscription; reconnecting the account in StackOne or changing the event selection re-creates it.</p>
      </div>
    </Step>
  </Steps>
</section>

## Verify

Your Connector should now be able to receive and process events. Try triggering an event and you should see an Event appear in the Connector logs.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.