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

# Supabase Webhook Setup Guide

> Configure Supabase 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="/guides/explore-connectors">Managing Connectors</a>.

    <Columns cols={2}>
      <Card title="Connector Profile" href="/connectors/supabase/guides/connector-profile/personal-access-token-pat" icon="https://stackone-logos.com/api/supabase/filled/png" horizontal>
        Supabase - Personal Access Token (PAT)
      </Card>

      <Card title="Connector Profile" href="/connectors/supabase/guides/connector-profile/oauth-2-0" icon="https://stackone-logos.com/api/supabase/filled/png" horizontal>
        Supabase - OAuth 2.0
      </Card>
    </Columns>
  </Step>

  <Step title="Link an Account">
    Connect an account using <a href="/guides/embedding-stackone-hub">StackOne Hub</a> or <a href="/guides/auth-link">Auth Link</a>.

    <Columns cols={2}>
      <Card title="Link Account" href="/connectors/supabase/guides/link-account/personal-access-token-pat" icon="https://stackone-logos.com/api/supabase/filled/png" horizontal>
        Supabase - Personal Access Token (PAT)
      </Card>

      <Card title="Link Account" href="/connectors/supabase/guides/link-account/oauth-2-0" icon="https://stackone-logos.com/api/supabase/filled/png" horizontal>
        Supabase - OAuth 2.0
      </Card>
    </Columns>
  </Step>
</Steps>

<section data-guide-section data-guide-scopes="">
  <h2>Configure a Supabase Database Webhook</h2>

  <p>This connector uses <strong>Manual Webhooks</strong>. You must create a Database Webhook in the Supabase Dashboard for each table you want events from — `storage.objects` (files), `storage.buckets` (buckets), and/or `auth.users` (users) — pointing each webhook at the StackOne Native Webhook URL shown on this connection. Repeat the steps below once per table.</p>

  <Steps>
    <Step title="Copy the Native Webhook URL">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Before configuring the webhook, copy the <strong>Native Webhook URL</strong> from the Linked account.</p>

        <ul>
          <li>The URL is shown in the <strong>Native Webhook URL</strong> field on the Linked account — it is only available after the connection has been created.</li>
          <li>Copy the full URL and keep it ready for the webhook configuration step.</li>
        </ul>
      </div>
    </Step>

    <Step title="Enable Database Webhooks on your project">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the <a href="https://supabase.com/dashboard" target="_blank" rel="noopener noreferrer">Supabase Dashboard</a>, open your project, click <strong>Integrations</strong> in the left sidebar, and select <strong>Database Webhooks</strong>. If webhooks have not been enabled yet, the <strong>Overview</strong> tab shows <strong>Enable database webhooks on your project</strong> — click <strong>Enable webhooks</strong>.</p>

        <ul>
          <li>This is a one-time step per project. Once enabled, <strong>Database Webhooks</strong> appears under <strong>Installed</strong> in the Integrations sidebar.</li>
        </ul>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/events-enable-webhooks.png" alt="Supabase Database Webhooks overview page with the Enable webhooks button highlighted" />
      </div>
    </Step>

    <Step title="Create a new hook">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Open the <strong>Webhooks</strong> tab and click <strong>Create a new hook</strong>.</p>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/events-create-new-hook.png" alt="Webhooks tab with the Create a new hook button highlighted" />
      </div>
    </Step>

    <Step title="Enter a webhook name">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the <strong>Create a new database webhook</strong> panel, under <strong>General</strong>, enter a descriptive <strong>Name</strong> (e.g. `stackone_events`).</p>

        <ul>
          <li>Do not use spaces/whitespaces in the name.</li>
        </ul>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/events-hook-name.png" alt="Create a new database webhook panel with the Name field highlighted" />
      </div>
    </Step>

    <Step title="Select the table to watch">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Under <strong>Conditions to fire webhook</strong>, open the <strong>Table</strong> dropdown (<strong>Select a table</strong>) and pick the table whose events you want to receive.</p>

        <ul>
          <li>`objects` in the `storage` schema — file events (Supabase Storage keeps every file in this table).</li>
          <li>`buckets` in the `storage` schema — bucket events.</li>
          <li>`users` in the `auth` schema — user lifecycle events.</li>
          <li>You can only select 1 table for a trigger — create one webhook per table.</li>
          <li>Deliveries from any other table are ignored by StackOne.</li>
        </ul>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/events-select-table.png" alt="Table dropdown open showing schema-qualified tables to select" />
      </div>
    </Step>

    <Step title="Select the events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Under <strong>Events</strong>, tick the operations that should fire the webhook.</p>

        <ul>
          <li><strong>Insert</strong> — Any insert operation on the table</li>
          <li><strong>Update</strong> — Any update operation, of any column in the table</li>
          <li><strong>Delete</strong> — Any deletion of a record</li>
          <li>Only the events selected here will fire the webhook on the table you've selected.</li>
        </ul>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/events-select-events.png" alt="Table selected and the Insert, Update and Delete event checkboxes ticked" />
      </div>
    </Step>

    <Step title="Configure the HTTP request target">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Under <strong>Webhook configuration</strong>, keep <strong>Type of webhook</strong> set to <strong>HTTP Request</strong>. In the <strong>HTTP Request</strong> section, set <strong>Method</strong> to `POST` and paste the Native Webhook URL you copied earlier into the <strong>URL</strong> field.</p>

        <ul>
          <li>The URL of the HTTP request must include HTTP/HTTPS.</li>
          <li>Leave the default <strong>HTTP Headers</strong> row `Content-type: application/json` in place.</li>
          <li><strong>Timeout</strong> can stay at the default `5000` ms (allowed range: between 1000ms to 10,000ms).</li>
          <li>Optional: add a static secret header (e.g. `X-Supabase-Secret`) via <strong>Add a new header</strong> for your own validation — StackOne does not verify it automatically.</li>
        </ul>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/events-http-request-url.png" alt="HTTP Request configuration with Method POST and the URL field containing the Native Webhook URL highlighted" />
      </div>
    </Step>

    <Step title="Create the webhook">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Create webhook</strong>. The new hook appears in the <strong>Webhooks</strong> list showing its <strong>Name</strong>, <strong>Table</strong>, <strong>Events</strong>, and the <strong>Webhook</strong> target URL.</p>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/events-webhook-created.png" alt="Webhooks list showing the newly created webhook row with table, events and target URL" />
      </div>
    </Step>

    <Step title="Verify delivery">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Trigger a write operation (insert, update, or delete a row) on the configured table and confirm the event arrives in StackOne.</p>

        <ul>
          <li>Supabase delivers webhooks asynchronously via the `pg_net` extension. Delivery is best-effort — failed requests are not automatically retried.</li>
          <li>You can inspect deliveries in the Supabase Dashboard <strong>Logs</strong> section, or by querying the `net._http_response` table directly.</li>
          <li>If no event arrives, verify the webhook URL is correct, the connection is active, and the webhook's events include the operation you performed.</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

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

  <p>The following Supabase events can be received. Only events enabled in StackOne are processed — deliveries for events that are not enabled, or from unsupported tables, are ignored.</p>

  <Steps>
    <Step title="User events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>User lifecycle events from Supabase Auth. To receive them, configure a Database Webhook on the `users` table in the `auth` schema with the <strong>Insert</strong>, <strong>Update</strong>, and <strong>Delete</strong> events enabled.</p>

        <ul>
          <li><strong>User Created</strong> (`INSERT` on `auth.users`) — Fired when a new user signs up or is created.</li>
          <li><strong>User Updated</strong> (`UPDATE` on `auth.users`) — Fired when a user record changes (profile, confirmation, ban, metadata) — and on every sign-in, since Supabase records the sign-in time on the user row.</li>
          <li><strong>User Deleted</strong> (`DELETE` on `auth.users`) — Fired when a user is permanently deleted.</li>
        </ul>
      </div>
    </Step>

    <Step title="Storage object events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events for files in Supabase Storage. To receive them, configure a Database Webhook on the `objects` table in the `storage` schema with the <strong>Insert</strong>, <strong>Update</strong>, and <strong>Delete</strong> events enabled.</p>

        <ul>
          <li><strong>Storage Object Created</strong> (`INSERT` on `storage.objects`) — Fired when a file is uploaded to Supabase Storage.</li>
          <li><strong>Storage Object Updated</strong> (`UPDATE` on `storage.objects`) — Fired when a file is overwritten, moved, or its metadata changes.</li>
          <li><strong>Storage Object Deleted</strong> (`DELETE` on `storage.objects`) — Fired when a file is deleted from Supabase Storage.</li>
        </ul>
      </div>
    </Step>

    <Step title="Bucket events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events for storage buckets. To receive them, configure a Database Webhook on the `buckets` table in the `storage` schema with the <strong>Insert</strong>, <strong>Update</strong>, and <strong>Delete</strong> events enabled.</p>

        <ul>
          <li><strong>Bucket Created</strong> (`INSERT` on `storage.buckets`) — Fired when a storage bucket is created.</li>
          <li><strong>Bucket Updated</strong> (`UPDATE` on `storage.buckets`) — Fired when a bucket's settings change (visibility, size limit, allowed types).</li>
          <li><strong>Bucket Deleted</strong> (`DELETE` on `storage.buckets`) — Fired when a storage bucket is deleted.</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.
