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

# Lokalise Webhook Setup Guide

> Configure Lokalise 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/lokalise#getting-started) on the Lokalise connector page.

<section data-guide-section data-guide-scopes="">
  <h2>Connect Lokalise webhooks</h2>

  <p>Lokalise sends webhooks from the <strong>Webhooks</strong> app installed in each project. Add the StackOne Native Webhook URL as a handler in every project you want to watch.</p>

  <Steps>
    <Step title="Retrieve StackOne Native Webhook URL">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>The <strong>Native Webhook URL</strong> is generated once an account has been linked.</p>

        <ul>
          <li>Open the linked account in StackOne.</li>
          <li>Copy the value from <strong>Native Webhook URL</strong>.</li>
        </ul>
      </div>
    </Step>

    <Step title="Open the project apps">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Sign in to your <a href="https://app.lokalise.com/login" target="_blank" rel="noopener noreferrer">Lokalise account</a> and open the project you want to receive events from.</p>

        <ul>
          <li>Click <strong>Apps</strong> in the project navigation bar.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/-m_Wkya09ptn4WD9/connectors/lokalise/images/events-open-apps.png?fit=max&auto=format&n=-m_Wkya09ptn4WD9&q=85&s=63ee041f7d3f84e47ddd5e8b2b99a957" alt="The Lokalise project editor with the Apps tab highlighted" width="1280" height="800" data-path="connectors/lokalise/images/events-open-apps.png" />
      </div>
    </Step>

    <Step title="Open the Webhooks app">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the apps list, find the <strong>Webhooks</strong> app (<strong>Custom webhook integration.</strong>) and click it.</p>

        <img src="https://mintcdn.com/stackone-60/-m_Wkya09ptn4WD9/connectors/lokalise/images/events-webhooks-app.png?fit=max&auto=format&n=-m_Wkya09ptn4WD9&q=85&s=d18327417d04e540a60d3fc2bc8efb1f" alt="The Lokalise apps list with the Webhooks app card highlighted" width="1280" height="800" data-path="connectors/lokalise/images/events-webhooks-app.png" />
      </div>
    </Step>

    <Step title="Install the Webhooks app">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Install</strong> to open the webhook configuration. If the app is already installed in this project, the button reads <strong>Manage</strong> instead.</p>

        <ul>
          <li>The app is marked <strong>Unlimited on all plans</strong>.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/-m_Wkya09ptn4WD9/connectors/lokalise/images/events-install-webhooks.png?fit=max&auto=format&n=-m_Wkya09ptn4WD9&q=85&s=4225b565b830f88f6908939fb0f27e0f" alt="The Webhooks app details with the Install button highlighted" width="1280" height="800" data-path="connectors/lokalise/images/events-install-webhooks.png" />
      </div>
    </Step>

    <Step title="Add a handler for StackOne">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>If the project already has a webhook handler, click <strong>Add another handler</strong> so the existing one keeps working. A new, empty <strong>Configuration</strong> block appears.</p>

        <img src="https://mintcdn.com/stackone-60/-m_Wkya09ptn4WD9/connectors/lokalise/images/events-add-another-handler.png?fit=max&auto=format&n=-m_Wkya09ptn4WD9&q=85&s=82e8365176b281f0c6633fb6b0667632" alt="The Webhooks configuration page with the Add another handler button highlighted" width="1280" height="800" data-path="connectors/lokalise/images/events-add-another-handler.png" />
      </div>
    </Step>

    <Step title="Paste the Native Webhook URL">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Paste the StackOne Native Webhook URL into <strong>Webhook URL</strong>.</p>

        <ul>
          <li>Leave <strong>HTTP header</strong> set to <strong>X-Secret</strong>. Lokalise generates the secret for you.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/-m_Wkya09ptn4WD9/connectors/lokalise/images/events-webhook-url.png?fit=max&auto=format&n=-m_Wkya09ptn4WD9&q=85&s=3a76313cfba087840a2a1016333fbc5e" alt="The Webhook URL field of the new handler highlighted" width="1280" height="800" data-path="connectors/lokalise/images/events-webhook-url.png" />
      </div>
    </Step>

    <Step title="Select the events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Under <strong>Select events</strong>, tick every event you want StackOne to receive. The groups are <strong>Translation</strong>, <strong>Project</strong>, <strong>Key</strong>, <strong>Task</strong>, <strong>Language</strong>, <strong>Contributor</strong> and <strong>Order</strong>. Each checkbox covers both the single and the bulk version of an event, so <strong>added</strong> under <strong>Key</strong> delivers single and bulk key additions.</p>

        <ul>
          <li>Optional: restrict <strong>Translation</strong> > <strong>updated</strong> or <strong>reviewed</strong> to specific languages with the <strong>in languages...</strong> field.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/-m_Wkya09ptn4WD9/connectors/lokalise/images/events-select-events.png?fit=max&auto=format&n=-m_Wkya09ptn4WD9&q=85&s=11e5fb3b3996ff46c2a52187b4265ae6" alt="The Select events checklist of the new handler with every event ticked" width="1280" height="800" data-path="connectors/lokalise/images/events-select-events.png" />
      </div>
    </Step>

    <Step title="Save the handler">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Save changes</strong>. Lokalise sends a `ping` to the Native Webhook URL and saves the handler once StackOne answers.</p>

        <ul>
          <li>A green <strong>App configuration saved.</strong> banner confirms the handler is active.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/-m_Wkya09ptn4WD9/connectors/lokalise/images/events-save-changes.png?fit=max&auto=format&n=-m_Wkya09ptn4WD9&q=85&s=262879765f58c2921dd0ef5427417d90" alt="The Save changes button at the bottom of the Webhooks configuration highlighted" width="1280" height="800" data-path="connectors/lokalise/images/events-save-changes.png" />
      </div>
    </Step>
  </Steps>
</section>

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

  <p>The following Lokalise events can be enabled. Only events selected in StackOne are delivered to your application, and Lokalise sends only the events ticked in the project's handler.</p>

  <Steps>
    <Step title="Key events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to translation keys and their comments.</p>

        <ul>
          <li><strong>Key Added</strong> (`project.key.added`) — Fired when a single key is added to a project</li>
          <li><strong>Keys Added (Bulk)</strong> (`project.keys.added`) — Fired when keys are added in bulk, by file upload, or by copy or move</li>
          <li><strong>Key Modified</strong> (`project.key.modified`) — Fired when a single key is modified</li>
          <li><strong>Keys Modified (Bulk)</strong> (`project.keys.modified`) — Fired when keys are modified by a bulk action, a replace, a file upload or an API call</li>
          <li><strong>Keys Deleted</strong> (`project.keys.deleted`) — Fired when keys are deleted individually, in bulk, by a move or through the API</li>
          <li><strong>Key Comment Added</strong> (`project.key.comment.added`) — Fired when a comment is added to a key</li>
        </ul>
      </div>
    </Step>

    <Step title="Translation events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to translation values and review status.</p>

        <ul>
          <li><strong>Translation Updated</strong> (`project.translation.updated`) — Fired when a single translation is modified</li>
          <li><strong>Translations Updated (Bulk)</strong> (`project.translations.updated`) — Fired when translations are modified in bulk, for example by translation memory, machine translation or a file upload</li>
          <li><strong>Translation Reviewed</strong> (`project.translation.proofread`) — Fired when a translation is marked or unmarked as reviewed</li>
          <li><strong>Translations Reviewed (Bulk)</strong> (`project.translations.proofread`) — Fired when several translations are marked or unmarked as reviewed at once</li>
        </ul>
      </div>
    </Step>

    <Step title="Project and file events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to the project, its files, snapshots and branches.</p>

        <ul>
          <li><strong>Project Imported</strong> (`project.imported`) — Fired when a translation file is uploaded to a project (one event per file)</li>
          <li><strong>Project Exported</strong> (`project.exported`) — Fired when translation files are downloaded from a project</li>
          <li><strong>Project Copied</strong> (`project.copied`) — Fired when a project is copied</li>
          <li><strong>Project Snapshot Created</strong> (`project.snapshot`) — Fired when a project snapshot is created</li>
          <li><strong>Branch Added</strong> (`project.branch.added`) — Fired when a project branch is created</li>
          <li><strong>Branch Deleted</strong> (`project.branch.deleted`) — Fired when a project branch is deleted</li>
          <li><strong>Branch Merged</strong> (`project.branch.merged`) — Fired when a branch is merged into another branch</li>
        </ul>
      </div>
    </Step>

    <Step title="Language events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to the languages of a project.</p>

        <ul>
          <li><strong>Languages Added</strong> (`project.languages.added`) — Fired when one or more languages are added to a project</li>
          <li><strong>Language Removed</strong> (`project.language.removed`) — Fired when a language is removed from a project</li>
          <li><strong>Language Settings Changed</strong> (`project.language.settings_changed`) — Fired when a project language's settings are changed</li>
        </ul>
      </div>
    </Step>

    <Step title="Task events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to translation and review tasks.</p>

        <ul>
          <li><strong>Task Created</strong> (`project.task.created`) — Fired when a translation or review task is created</li>
          <li><strong>Task Queued</strong> (`project.task.queued`) — Fired when a review task is queued behind an unfinished parent task or order</li>
          <li><strong>Task Closed</strong> (`project.task.closed`) — Fired when a task is closed, manually or on completion</li>
          <li><strong>Task Deleted</strong> (`project.task.deleted`) — Fired when a task is deleted</li>
          <li><strong>Task Language Closed</strong> (`project.task.language.closed`) — Fired when one language of a task is closed</li>
          <li><strong>Task TM Leverage Calculated</strong> (`project.task.initial_tm_leverage.calculated`) — Fired when Lokalise finishes calculating the initial translation memory leverage for a task</li>
        </ul>
      </div>
    </Step>

    <Step title="Contributor events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to project contributors.</p>

        <ul>
          <li><strong>Contributor Added</strong> (`project.contributor.added`) — Fired when an admin adds a contributor to a project</li>
          <li><strong>Contributor Joined via Public Link</strong> (`project.contributor.added_public`) — Fired when a contributor joins through the public signup link</li>
          <li><strong>Contributor Removed</strong> (`project.contributor.deleted`) — Fired when a contributor is removed from a project</li>
        </ul>
      </div>
    </Step>

    <Step title="Order events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to professional translation orders.</p>

        <ul>
          <li><strong>Order Created</strong> (`team.order.created`) — Fired when a translation order is created</li>
          <li><strong>Order Completed</strong> (`team.order.completed`) — Fired when a translation order is marked completed</li>
          <li><strong>Order Deleted</strong> (`team.order.deleted`) — Fired when a translation order is deleted</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

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

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

  <Steps>
    <Step title="Review bulk and retry behavior">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Each request carries one event. Bulk events (<strong>Keys Added (Bulk)</strong>, <strong>Keys Modified (Bulk)</strong>, <strong>Keys Deleted</strong>, <strong>Translations Updated (Bulk)</strong>, <strong>Translations Reviewed (Bulk)</strong>) hold up to 300 items; larger actions arrive as several events.</p>

        <ul>
          <li>Lokalise sends no event ID, so StackOne builds one from the event name, project, affected item and event time. It stays the same across retries.</li>
          <li>Unanswered deliveries are retried for up to 24 hours, after which Lokalise disables the handler.</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.


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