Watchtower validates every AI output against a rule set you define — pass/fail, score, and the exact constraints that failed. One HTTP call. Sub-100ms. No model dependency.
# Validate an AI output against a rule set curl -X POST https://nexxtool.ai/wt/v1/validate \ -H "Authorization: Bearer wtk_live_..." \ -H "Content-Type: application/json" \ -d '{ "output": "Order confirmed for John Doe.", "contract": { "type": "text", "must_contain": ["Order confirmed"], "min_length": 10 } }' # → { pass: true, score: 1.00, issues: [], duration_ms: 8 }
const r = await fetch("https://nexxtool.ai/wt/v1/validate", { method: "POST", headers: { "Authorization": "Bearer " + process.env.WT_API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ output: aiOutput, contract: { type: "text", must_not_contain: ["as an AI"] }, }), }); const result = await r.json(); if (!result.pass) alertOps(result.issues);
import os, requests r = requests.post( "https://nexxtool.ai/wt/v1/validate", headers={"Authorization": f"Bearer {os.environ['WT_API_KEY']}"}, json={"output": ai_output, "contract": {"type": "text"}}, ) result = r.json() if not result["pass"]: log.warning("AI slop detected", extra={"issues": result["issues"]})
Edit the AI output and the rule set on the left. Click Run validation. Same rule set format the API uses — no key required for this preview.
text
Most teams running AI in production have no objective signal for output quality. They find out about failure modes from customer complaints. Watchtower is the missing CI step for AI workloads.
Describe what "good" looks like in JSON: substring, schema, structural, brand-conformance. Six types: text, html, json, script, research, automation.
Every call returns a verdict, a 0–1 score, and an issues array naming each constraint that failed. Predictable, structured, machine-readable.
Built-in checks run deterministically — no LLM in the validation path. Sub-100ms server time. Optional repair returns a fixed output (HTML doctype, palette, CTA).
If your AI output reaches a real user, customer, or downstream system, Watchtower is the safety net. If it's just an internal experiment, you don't need us yet.
Add a single check after your model call. Fail loud, repair quietly, log everything. Hooks into existing observability.
Stop relying on prompt engineering hope. Define the rule set once, enforce it on every output, ship with confidence.
When AI generates HTML, JSON, scripts, or research outputs, Watchtower verifies structure, fields, palette, fonts, length — before they hit downstream systems.
Move from notebook benchmarks to runtime rule sets. Sample any percentage, fail builds when score drops, page on regressions.
Idempotency-Key, sliding-window per-key rate limit, monthly quota, every result persisted and queryable from the dashboard.
Hashed at rest. wtk_live_ / wtk_test_ prefix. Revoke any key instantly — 401 on next call.
Postgres RLS enforces tenant isolation on every read. No cross-tenant leakage possible at the database layer.
Pass Idempotency-Key for safe retries. Replay returns the original response. Conflicting body returns 409.
Per-tier monthly cap + per-second rate limit, surfaced in every response header and the dashboard. No surprise overage charges.
Simple monthly tiers. No commitment. No overage charges — hit the cap and requests pause until next period or upgrade.
Sign in, create a key, paste the curl. Your first validation runs in real time and shows up in your dashboard immediately.
repair: true in your rule set and Watchtower attempts to fix common issues (HTML doctype, palette, CTA gaps). The repaired output is returned alongside the verdict. Repair counts as 1 extra credit per call.POST /wt/v1/validate = 1 credit. Failed-input requests (400/401/etc.) are not billed. Repair runs add 1 credit if applied.X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Window headers.402 quota_exceeded until the next period (1st of each month UTC) or upgrade. No silent overage charges, ever.