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

# October 2026

## Create and manage webhooks from the REST API, SDKs, and CLI

October 7, 2026

<Badge color="surface">New</Badge>  <Badge color="surface">Webhooks and Events</Badge>

You can now create webhooks and subscribe them to prompt and evaluator events from the REST API, the Python, TypeScript, and Go SDKs, or the `ax` CLI, so you can script event delivery to your own systems, such as a CI job that runs when a prompt version gets a new label. A webhook is an HTTPS endpoint in your organization that authenticates each delivery with a bearer token or an HMAC-SHA256 signature. A subscription connects one webhook to one event on one prompt or evaluator. These endpoints are in alpha and may change without notice.

* **Events**: `PROMPT_VERSION_CREATED`, `PROMPT_VERSION_LABELED`, and `PROMPT_VERSION_UNLABELED` for prompts; `EVALUATOR_VERSION_CREATED` for evaluators.
* **Tests and delivery history**: Send a test delivery to a bearer-token webhook, and list each webhook's delivery attempts, including retries.
* **Signing secrets**: Arize AX returns an HMAC-SHA256 webhook's signing secret only once, in the create response, so store it when you create the webhook.
* **Versions**: Python `arize` 8.54.0 or later (`client.webhooks`), TypeScript `@arizeai/ax-client` 1.30.0 or later, Go SDK v2 v0.24.0 or later, and `arize-ax-cli` 0.39.0 or later (`ax webhooks`).

The code example below creates a bearer-token webhook and subscribes it to new versions of a prompt:

<Tabs>
  <Tab title="Python">
    ```python theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
    import os

    from arize import ArizeClient
    from arize.webhooks.types import (
        WebhookAuthType,
        WebhookEventType,
        WebhookSourceType,
    )

    client = ArizeClient()  # reads ARIZE_API_KEY from the environment

    webhook = client.webhooks.create(
        organization="your-org-name-or-id",
        name="prompt-release-hook",
        url="https://hooks.example.com/arize",
        auth_type=WebhookAuthType.BEARER,
        # Sent as the full Authorization header value on each delivery
        auth_token=f"Bearer {os.environ['WEBHOOK_AUTH_TOKEN']}",
    )

    subscription = client.webhooks.create_subscription(
        webhook=webhook.id,
        source_type=WebhookSourceType.PROMPT,
        source_id="your-prompt-id",
        event=WebhookEventType.PROMPT_VERSION_CREATED,
    )

    print(subscription.id)
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
    import { createWebhook, createWebhookSubscription } from "@arizeai/ax-client";

    // The client reads ARIZE_API_KEY from the environment
    const webhook = await createWebhook({
      organization: "your-org-name-or-id",
      name: "prompt-release-hook",
      url: "https://hooks.example.com/arize",
      authType: "BEARER",
      // Sent as the full Authorization header value on each delivery
      authToken: `Bearer ${process.env.WEBHOOK_AUTH_TOKEN}`,
    });

    const subscription = await createWebhookSubscription({
      webhook: webhook.id,
      sourceType: "PROMPT",
      sourceId: "your-prompt-id",
      event: "PROMPT_VERSION_CREATED",
    });

    console.log(subscription.id);
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
    package main

    import (
        "context"
        "fmt"
        "log"
        "os"

        "github.com/Arize-ai/client-go-v2/arize"
        "github.com/Arize-ai/client-go-v2/arize/webhooks"
    )

    func main() {
        // An empty Config reads ARIZE_API_KEY from the environment
        client, err := arize.NewClient(arize.Config{})
        if err != nil {
            log.Fatal(err)
        }
        ctx := context.Background()

        wh, err := client.Webhooks.Create(ctx, webhooks.CreateRequest{
            Organization: "your-org-name-or-id",
            Name:         "prompt-release-hook",
            URL:          "https://hooks.example.com/arize",
            AuthType:     webhooks.WebhookAuthTypeBearer,
            // Sent as the full Authorization header value on each delivery
            AuthToken: "Bearer " + os.Getenv("WEBHOOK_AUTH_TOKEN"),
        })
        if err != nil {
            log.Fatal(err)
        }

        sub, err := client.Webhooks.CreateSubscription(ctx, webhooks.CreateSubscriptionRequest{
            Webhook:    wh.Id,
            SourceType: webhooks.WebhookSourceTypePrompt,
            SourceID:   "your-prompt-id",
            Event:      webhooks.WebhookEventTypePromptVersionCreated,
        })
        if err != nil {
            log.Fatal(err)
        }

        fmt.Println(sub.Id)
    }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
    # BEARER is the default auth type
    ax webhooks create \
      --organization "your-org-name-or-id" \
      --name "prompt-release-hook" \
      --url https://hooks.example.com/arize \
      --auth-token "Bearer $WEBHOOK_AUTH_TOKEN"

    # A webhook name needs --organization to resolve
    ax webhooks subscriptions create \
      --webhook "prompt-release-hook" \
      --organization "your-org-name-or-id" \
      --source-type PROMPT \
      --source-id "your-prompt-id" \
      --event PROMPT_VERSION_CREATED
    ```
  </Tab>
</Tabs>

Learn more about [webhooks](/docs/ax/security-and-settings/webhooks), the [`ax` CLI](/docs/api-clients/cli/overview), and the [Python](/docs/api-clients/python/version-8/client-resources/webhooks), [TypeScript](/docs/api-clients/typescript/version-1/client-resources/webhooks), and [Go](/docs/api-clients/go/version-2/client-resources/webhooks) SDK references.
