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

# Getting Started with Blnk Watch

> Learn how to install, configure, and run Blnk Watch to monitor transactions with custom risk rules.

export const CtaCallout = props => {
  const {title, buttonLabel, href, trackingEvent, buttonTarget, rel = "noopener noreferrer", children} = props;
  const handleCtaClick = () => {
    if (typeof window === "undefined" || !trackingEvent) {
      return;
    }
    try {
      window.dispatchEvent(new CustomEvent("blnk:docs-cta", {
        detail: {
          name: trackingEvent,
          href
        }
      }));
    } catch {}
    try {
      window.posthog?.capture?.(trackingEvent, {
        href
      });
    } catch {}
    const gaPayload = {
      cta_href: href
    };
    try {
      window.gtag?.("event", trackingEvent, gaPayload);
    } catch {}
    try {
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({
        event: trackingEvent,
        ...gaPayload
      });
    } catch {}
  };
  const isExternal = typeof href === "string" && (/^https?:\/\//i).test(href);
  const target = buttonTarget ?? (isExternal ? "_blank" : undefined);
  const linkRel = isExternal ? rel : undefined;
  return <section className="cta-callout not-prose relative my-8 w-full min-w-0 overflow-hidden rounded-xl border border-zinc-200 p-5 dark:border-white/10">
      <div className="cta-callout-noise" aria-hidden="true" />
      <div className="cta-callout-layout">
        {title ? <div className="cta-callout-title-row">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="14" height="14" className="cta-callout-icon shrink-0 text-zinc-800 dark:text-zinc-200" aria-hidden="true">
              <g fill="none" fillRule="nonzero">
                <path d="M28 0v28H0V0h28ZM14.691833333333335 27.134333333333334l-0.012833333333333334 0.0023333333333333335 -0.08283333333333333 0.04083333333333334 -0.023333333333333334 0.004666666666666667 -0.016333333333333335 -0.004666666666666667 -0.08283333333333333 -0.04083333333333334c-0.011666666666666667 -0.004666666666666667 -0.022166666666666668 -0.0011666666666666668 -0.028000000000000004 0.005833333333333334l-0.004666666666666667 0.011666666666666667 -0.019833333333333335 0.49933333333333335 0.005833333333333334 0.023333333333333334 0.011666666666666667 0.015166666666666667 0.12133333333333333 0.08633333333333333 0.0175 0.004666666666666667 0.014000000000000002 -0.004666666666666667 0.12133333333333333 -0.08633333333333333 0.014000000000000002 -0.018666666666666668 0.004666666666666667 -0.019833333333333335 -0.019833333333333335 -0.4981666666666667c-0.0023333333333333335 -0.011666666666666667 -0.0105 -0.019833333333333335 -0.019833333333333335 -0.021Zm0.3091666666666667 -0.13183333333333336 -0.015166666666666667 0.0023333333333333335 -0.21583333333333335 0.1085 -0.011666666666666667 0.011666666666666667 -0.0035000000000000005 0.012833333333333334 0.021 0.5016666666666667 0.005833333333333334 0.014000000000000002 0.009333333333333334 0.008166666666666668 0.23450000000000004 0.1085c0.014000000000000002 0.004666666666666667 0.026833333333333334 0 0.03383333333333334 -0.009333333333333334l0.004666666666666667 -0.016333333333333335 -0.03966666666666667 -0.7163333333333334c-0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.023333333333333334 -0.023333333333333334 -0.025666666666666667Zm-0.8341666666666667 0.0023333333333333335a0.026833333333333334 0.026833333333334334 0 0 0 -0.0315 0.007000000000000001l-0.007000000000000001 0.016333333333333335 -0.03966666666666667 0.7163333333333334c0 0.014000000000000002 0.008166666666666668 0.023333333333333334 0.019833333333333335 0.028000000000000004l0.0175 -0.0023333333333333335 0.23450000000000004 -0.1085 0.011666666666666667 -0.009333333333333334 0.004666666666666667 -0.012833333333333334 0.019833333333333335 -0.5016666666666667 -0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.011666666666666667 -0.21466666666666667 -0.10733333333333334Z" strokeWidth="1.1667" />
                <path fill="currentColor" d="M14 2.916666666666667A1.75 1.75 0 0 1 15.750000000000002 4.666666666666667v6.302333333333334L21.207666666666668 7.816666666666667a1.75 1.75 0 0 1 1.75 3.031L17.5 14l5.457666666666667 3.151166666666667a1.75 1.75 0 0 1 -1.75 3.031l-5.457666666666667 -3.1500000000000004V23.333333333333336a1.75 1.75 0 0 1 -3.5 0v-6.302333333333334L6.792333333333334 20.183333333333337a1.75 1.75 0 1 1 -1.75 -3.031L10.5 14 5.042333333333334 10.848833333333333a1.75 1.75 0 0 1 1.75 -3.031l5.457666666666667 3.1500000000000004V4.666666666666667A1.75 1.75 0 0 1 14 2.916666666666667Z" strokeWidth="1.1667" />
              </g>
            </svg>
            <p className="cta-callout-title min-w-0 font-semibold text-zinc-800 dark:text-zinc-200">
              {title}
            </p>
          </div> : null}
        <div className={`cta-callout-body text-sm leading-normal text-zinc-800 dark:text-zinc-200${title ? " cta-callout-body--indented" : ""}`}>
          {children}
        </div>
        <a href={href} target={target} rel={linkRel} onClick={handleCtaClick} data-docs-cta={trackingEvent || undefined} className="cta-callout-button inline-flex items-center justify-center gap-1 rounded-full bg-white px-3 py-1.5 text-sm font-semibold transition hover:bg-zinc-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white/50 dark:bg-white dark:hover:bg-zinc-200">
          {buttonLabel}
          <span className="cta-callout-button-arrow" aria-hidden="true">
            →
          </span>
        </a>
      </div>
    </section>;
};

<Note>Blnk Watch is currently in beta. [Send us a message](mailto:support@blnkfinance.com)</Note>

Blnk Watch is a lightweight, rule-based transaction monitoring engine.

Watch evaluates transactions using rules written in a simple domain specific language (DSL) called WatchScript `.ws`.

Here's how it works: you send transactions to Watch, and it returns a risk verdict, so you can enforce limits, detect fraud, and stay compliant without running heavy infrastructure.

<CtaCallout title="Need help with Blnk Watch?" href="https://blnkfinance.com/contact/us?utm_source=blnk_docs&utm_medium=documentation&utm_campaign=watch%2Fquick-start" buttonLabel="Get Pro Support" trackingEvent="clicked_pro_support">
  Get hands-on help setting up transaction monitoring, managing rules, alerts, and reporting with Blnk Watch.
</CtaCallout>

In this quick start, you will:

1. Start the Watch service
2. Write a rule
3. Send a transaction for evaluation
4. See the risk decision

Let's dive in!

***

<Steps titleSize="h3">
  <Step title="Install Blnk Watch">
    <Tabs>
      <Tab title="Direct download" icon="download">
        Install Watch with direct download (no repo or Go required), then start the service:

        ```bash theme={"system"}
        curl -fsSL https://blnkfinance.xyz/install/watch | bash
        blnk-watch start
        ```
      </Tab>

      <Tab title="Build from source" icon="square-terminal">
        Download Watch from the repository and run it:

        ```bash theme={"system"}
        git clone https://github.com/blnkfinance/watch && cd watch
        ```

        <CodeGroup>
          ```bash macOS/Linux theme={"system"}
          make start
          ```

          ```bash Windows theme={"system"}
          go build -o blnk-watch ./cmd/blnk-watch
          ./blnk-watch start
          ```
        </CodeGroup>
      </Tab>
    </Tabs>

    By default Watch listens on port 8081. The service is ready when it starts listening on the port.
  </Step>

  <Step title="Create your first rule">
    Create a rules directory and add a rule file:

    ```bash theme={"system"}
    mkdir -p watch_scripts && cd watch_scripts
    touch HighValueUSD.ws
    ```

    Add this rule to `HighValueUSD.ws`:

    ```bash theme={"system"}
    rule HighValueUSD {
      description "Flag USD transactions over 4,000 for review"

      when amount > 4000 and currency == "USD"

      then review
           score   0.5
           reason  "USD transaction exceeds 4,000"
    }
    ```

    This rule triggers for any USD transaction above \$4,000.
  </Step>

  <Step title="Send a transaction">
    Use the [inject endpoint](/watch/reference/inject-transaction) to send a transaction to Watch.

    ```bash Request {5,6} theme={"system"}
    curl -X POST http://localhost:8081/inject \
      -H "Content-Type: application/json" \
      -d '{
        "transaction_id": "txn_quickstart_001",
        "amount": 5000,
        "currency": "USD",
        "source": "acct_sender",
        "destination": "acct_receiver",
        "reference": "ref_001",
        "description": "Sample transfer"
      }'
    ```

    If successful (200), Watch queues the transaction for evaluation.

    ```json Response theme={"system"}
    {
        "message": "Call GET /transactions/{id} to fetch the processed transaction or set ALERT_WEBHOOK_URL to get webhooks when a rule triggers for the transaction.",
        "transaction_id": "txn_quickstart_001"
    }
    ```
  </Step>

  <Step title="Check the result">
    Fetch the processed transaction:

    ```bash theme={"system"}
    curl http://localhost:8081/transactions/txn_quickstart_001
    ```

    You should see a response similar to:

    ```json Response theme={"system"}
    {
        "meta_data": {
            "consolidated_risk_assessment": {
                "final_reason": "USD transaction exceeds 4,000",
                "final_risk_score": 0.5,
                "final_verdict": "review",
                "source_count": 1
            },
            "dsl_verdicts": [
                {
                    "reason": "USD transaction exceeds 4,000",
                    "rule_id": 0,
                    "score": 0.5,
                    "verdict": "review"
                }
            ],
            "evaluation_status": "completed",
            "risk_evaluation_timestamp": "2026-03-15T22:12:00.99813+01:00"
        }
    }
    ```

    The verdict appears because the transaction amount, 5000 USD, triggered the rule.

    Try sending another transaction with a smaller amount, such as 3000 USD. Because it does not meet the rule condition, the rule will not trigger. You can also experiment with different amounts or currencies to see how the rule behaves.
  </Step>
</Steps>

***

## Related docs

<CardGroup cols={2}>
  <Card title="Changelog" icon="scroll-text" href="/changelog/blnk-watch">
    Watch releases and version history.
  </Card>

  <Card title="How Watch works" icon="brain" href="/watch/mental-model">
    Evaluation workflow and verdicts.
  </Card>
</CardGroup>
