Documentation

Integration Guide

Put Gatekeeper in front of your AI calls in a few minutes. Point your provider requests at the gateway, add one header, and every prompt is scanned, policy-enforced, and logged before it reaches the model.

Step-by-step setup

  1. 1. Get your API key

    In the dashboard, open Settings → Create App. You'll get an app_id and an api_key that looks like gk_live_xxxxxxxxxxxx. Save the key — you need it on every protected request.

  2. 2. Point your AI calls at Gatekeeper

    POST your provider request to the Gatekeeper proxy endpoint (/proxy/openai or /proxy/anthropic). Gatekeeper applies your policies and forwards the cleaned request to the provider. Note: this is a direct POST, not an SDK base_url swap — Gatekeeper wraps the reply in an envelope the provider SDK can't parse.

  3. 3. Add the Gatekeeper header

    Send your key in the X-Gatekeeper-Key header alongside your existing provider auth header. That's the only new header you need.

  4. 4. Send a protected AI request

    Make the request as usual. PII is redacted and policies are enforced before the provider sees the prompt — and every request lands in your audit log.

Code examples

Examples use the live gateway. Swap in your own gk_live_ key and provider credentials.

Scan text directly
// Quick check: scan any text for PII / policy hits
const res = await fetch("https://gatekeeper-production-7dd1.up.railway.app/scan", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    text: "My email is john@gmail.com"
  })
});

const result = await res.json();
// -> redacted text + the PII types that were detected
Protect an OpenAI request
// Protect an OpenAI call — POST to the proxy with your X-Gatekeeper-Key
const res = await fetch("https://gatekeeper-production-7dd1.up.railway.app/proxy/openai", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_OPENAI_KEY",
    "X-Gatekeeper-Key": "gk_live_xxxxxxxxxxxx"
  },
  body: JSON.stringify({
    model: "gpt-4o-mini",
    messages: [{ role: "user", content: "Hello AI" }],
    max_tokens: 300
  })
});

// Response is wrapped: { gatekeeper: {...audit}, response: {...reply|null} }
const { gatekeeper, response } = await res.json();
Protect an Anthropic request
// Protect an Anthropic call
const res = await fetch("https://gatekeeper-production-7dd1.up.railway.app/proxy/anthropic", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": "YOUR_ANTHROPIC_KEY",
    "X-Gatekeeper-Key": "gk_live_xxxxxxxxxxxx"
  },
  body: JSON.stringify({
    model: "claude-haiku-4-5-20251001",
    messages: [{ role: "user", content: "Hello AI" }],
    max_tokens: 300
  })
});

// Response is wrapped: { gatekeeper: {...audit}, response: {...reply|null} }
const { gatekeeper, response } = await res.json();

Supported integrations

  • OpenAI

    Route chat/completions through /proxy/openai. Keep your model and messages exactly as-is.

  • Anthropic

    Route messages through /proxy/anthropic with your X-Api-Key. Same request body, one extra header.

  • Workato

    Enterprise recipes connect via the Gatekeeper connector so no-code automations are policy-gated too.

Need the full walkthrough?

The customer guide covers dashboards, policy packs, automated tests, and Slack alerts end to end.