> ## 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.

# Oneflow Webhook Setup Guide

> Configure Oneflow to deliver events to StackOne.

## Prerequisites

Before continuing, you should have already completed the following for this connector:

<Steps>
  <Step title="Configure the Connector">
    Enable the connector and set up its connector profile in your project. See <a href="/connect/managing-connectors/overview">Managing Connectors</a>.

    <Columns cols={2}>
      <Card title="Connector Profile" href="/connectors/oneflow/guides/connector-profile/api-token" icon="https://stackone-logos.com/api/oneflow/filled/svg" horizontal>
        Oneflow - API Token
      </Card>
    </Columns>
  </Step>

  <Step title="Link an Account">
    Connect an account using <a href="/embed/account-linking/overview">StackOne Hub</a> or <a href="/embed/account-linking/auth-link">Auth Link</a>.

    <Columns cols={2}>
      <Card title="Link Account" href="/connectors/oneflow/guides/link-account/api-token" icon="https://stackone-logos.com/api/oneflow/filled/svg" horizontal>
        Oneflow - API Token
      </Card>
    </Columns>
  </Step>
</Steps>

<section data-guide-section data-guide-scopes="">
  <h2>How webhooks are set up</h2>

  <p>Oneflow delivers events through a webhook subscription, and StackOne provisions it for you on connection. When you connect your account, StackOne creates one Oneflow webhook (`POST /webhooks`) pointing at a StackOne callback URL, with an EVENT\_TYPE filter covering the events you enable. When you disconnect, StackOne deletes that webhook (`DELETE /webhooks/{id}`). There is nothing to set up in Oneflow and no URL to paste.</p>

  <Steps>
    <Step title="Connect with your API token">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Authorize the connection with your Oneflow <strong>API token</strong> and <strong>user email</strong> so StackOne can create and delete the webhook subscription on your behalf. No further setup is needed in Oneflow.</p>
      </div>
    </Step>

    <Step title="Enable the events you need">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Enable the Oneflow events you want in StackOne. StackOne registers exactly those event types on the Oneflow webhook (via the EVENT\_TYPE filter rule) and dispatches them onward.</p>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>How events are delivered</h2>

  <p>Each delivery is a JSON body of the shape `{ "contract": { "id": … }, "callback_id": …, "events": [ { "id": …, "type": …, "created_time": … } ], "signature": … }`. The event type is carried in `events[0].type` and the affected contract in `contract.id`. Oneflow signs each delivery with `signature = sha1(callback_id + sign_key)` inside the body; StackOne forwards deliveries without enforcing this signature.</p>
</section>

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

  <p>The events below can be enabled for this connection, grouped by subject.</p>

  <Steps>
    <Step title="Contract events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for contracts.</p>

        <ul>
          <li><strong>Contract Create</strong> (`contract:create`) — A new contract was created.</li>
          <li><strong>Contract Publish</strong> (`contract:publish`) — A contract moved from draft to pending (sent out).</li>
          <li><strong>Contract Sign</strong> (`contract:sign`) — A contract became fully signed.</li>
          <li><strong>Contract Decline</strong> (`contract:decline`) — A contract was declined.</li>
          <li><strong>Contract Delete</strong> (`contract:delete`) — A contract was deleted.</li>
          <li><strong>Contract Restore</strong> (`contract:restore`) — A deleted contract was restored.</li>
          <li><strong>Contract Content Update</strong> (`contract:content_update`) — Contract content changed after sending.</li>
          <li><strong>Contract Signature Reset</strong> (`contract:signature_reset`) — Signatures were cleared after a change.</li>
          <li><strong>Contract Signing Period Expire</strong> (`contract:signing_period_expire`) — The signing deadline passed.</li>
          <li><strong>Contract Signing Period Revive</strong> (`contract:signing_period_revive`) — A new signing period began.</li>
          <li><strong>Contract Workspace Update</strong> (`contract:workspace_update`) — The contract's workspace changed.</li>
          <li><strong>Contract AI Extract Complete</strong> (`contract:ai_extract:complete`) — AI data extraction finished.</li>
          <li><strong>Draft Approval Flow Start</strong> (`contract:draft_approval_flow:start`) — Draft approval flow started.</li>
          <li><strong>Draft Approval Flow Complete</strong> (`contract:draft_approval_flow:complete`) — Draft approval flow completed.</li>
          <li><strong>Draft Approval Flow Reset</strong> (`contract:draft_approval_flow:reset`) — Draft approval flow was reset.</li>
          <li><strong>Lifecycle Settings Update</strong> (`contract:lifecycle_settings:update`) — Lifecycle settings changed.</li>
          <li><strong>Lifecycle State Start</strong> (`contract:lifecycle_state:start`) — The contract began its first period.</li>
          <li><strong>Lifecycle State New Period</strong> (`contract:lifecycle_state:new_period`) — The contract entered a new period.</li>
          <li><strong>Lifecycle State Cancel</strong> (`contract:lifecycle_state:cancel`) — A recurring contract was cancelled.</li>
          <li><strong>Lifecycle State Terminate</strong> (`contract:lifecycle_state:terminate`) — The contract was terminated.</li>
          <li><strong>Lifecycle State End</strong> (`contract:lifecycle_state:end`) — The contract expired naturally.</li>
          <li><strong>Lifecycle Reminder New</strong> (`contract:lifecycle_reminder:new`) — A new lifecycle reminder fired.</li>
          <li><strong>Lifecycle Reminder End</strong> (`contract:lifecycle_reminder:end`) — A lifecycle reminder ended.</li>
        </ul>
      </div>
    </Step>

    <Step title="Participant events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for participants on a contract.</p>

        <ul>
          <li><strong>Participant Create</strong> (`participant:create`) — A participant was added.</li>
          <li><strong>Participant Publish</strong> (`participant:publish`) — A participant gained contract access.</li>
          <li><strong>Participant Sign</strong> (`participant:sign`) — A participant signed.</li>
          <li><strong>Participant Decline</strong> (`participant:decline`) — A participant declined.</li>
          <li><strong>Participant Signature Reset</strong> (`participant:signature_reset`) — A participant's signature was cleared.</li>
          <li><strong>Participant Update</strong> (`participant:update`) — A participant's attributes changed.</li>
          <li><strong>Participant Delegate</strong> (`participant:delegate`) — A participant delegated to someone else.</li>
          <li><strong>Participant Delete</strong> (`participant:delete`) — A participant was removed.</li>
          <li><strong>Participant Delivery Failure</strong> (`participant:delivery_failure`) — Invitation delivery failed.</li>
          <li><strong>Participant First Visit</strong> (`participant:first_visit`) — A participant opened the contract for the first time.</li>
          <li><strong>Participant Draft Approval Approve</strong> (`participant:draft_approval_flow:approve`) — A participant approved in the draft flow.</li>
          <li><strong>Participant Draft Approval Reset</strong> (`participant:draft_approval_flow:reset`) — A participant's draft approval was reset.</li>
        </ul>
      </div>
    </Step>

    <Step title="Party events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for parties on a contract.</p>

        <ul>
          <li><strong>Party Create</strong> (`party:create`) — A party was added.</li>
          <li><strong>Party Update</strong> (`party:update`) — A party's attributes changed.</li>
          <li><strong>Party Delete</strong> (`party:delete`) — A party was removed.</li>
        </ul>
      </div>
    </Step>

    <Step title="Product events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for products on a contract.</p>

        <ul>
          <li><strong>Product Create</strong> (`product:create`) — A product was added.</li>
          <li><strong>Product Update</strong> (`product:update`) — A product's attributes changed.</li>
          <li><strong>Product Delete</strong> (`product:delete`) — A product was removed.</li>
        </ul>
      </div>
    </Step>

    <Step title="Other events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Data field, comment, and reminder events.</p>

        <ul>
          <li><strong>Data Field Update</strong> (`data_field:update`) — A contract data field changed.</li>
          <li><strong>Comment Create</strong> (`comment:create`) — A comment was added to a contract.</li>
          <li><strong>Reminder Expire</strong> (`reminder:expire`) — A reminder expired.</li>
        </ul>
      </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.
