DataVibe
AI SafetyDocsIntegrationAPI ReferenceBook a demoLogin

© 2026 DataVibe. Built for fintech analytics, ML, and data operations.

HomeDocsDemoLogin
Docs/Integration guide

Last updated · May 2026

·
  • Production-ready APIs
  • SOC 2 Type I - In Progress
  • No-code quickstart
  • TypeScript & Python SDK
  • REST API

Integration guide

Live API - https://api.datavibe.cc/v1/gate/outbound

Put DataVibe between your AI and your customers. Every outbound message is checked against your policies, held for approval when needed, and logged for audit, before anything is sent.

At a glance

DataVibe sits between AI-generated content and your customer. You do not replace your email tool or your AI, you add one safety step in the middle.

Your AI writes a message  →  DataVibe checks it  →  Your team approves (if needed)  →  Message sends

Every check returns one of three outcomes:

OutcomeWhat it meansWhat you do
SafePassed your policy checks.Send the message or let your system continue.
Needs reviewNothing risky enough to block, but a human should confirm.Open the approval queue and approve or edit.
BlockedA hard rule was broken (e.g. fake pricing, PHI, guarantee language).Fix the content and submit again: it will not send as-is.

Choose your setup path

Pick the option that matches your team today. You can start without code and add a developer integration later.

No code

Ops, RevOps, compliance leads

Use the dashboard setup wizard, pick a policy pack, and run a test message in Quickstart.

Open setup wizard →

Policy packs

Anyone choosing compliance coverage

Browse ready-made industry and country packs (HIPAA, FINRA, GDPR, sales safety, and more) and apply with one click.

Browse policy library →

Developer SDK or API

Engineering teams

Install the SDK or call the Gate API from your app so every AI send is checked automatically.

Jump to SDK guide →

For developers. SDK (recommended)

The SDK is a small connector your engineering team installs once. After that, your app sends each AI-generated message to DataVibe before it reaches a customer. Your OpenAI or Anthropic keys stay on your servers, DataVibe only sees the text you choose to check.

Step 1: Install

Share these commands with your developer (TypeScript or Python):

npm install @datavibe.cc/sdk
pip install datavibe

Create an API key in the dashboard under Security → API Keys. Treat it like a password, your developer stores it in environment variables, not in source code.

Step 2: Check content before you send

Most teams use check(): your app already has AI output; DataVibe scores it and tells you whether to send, wait for approval, or stop.

TypeScript example

import { DataVibeClient } from "@datavibe.cc/sdk";

const dv = new DataVibeClient({ apiKey: process.env.DATAVIBE_API_KEY! });

// Send AI output to DataVibe before it goes to a customer
const result = await dv.check({
  content: modelOutput,
  contentType: "email", // or "agent_action" for tool / workflow steps
});

if (result.verdict === "blocked") {
  // Hard stop, fix the content and try again
  throw new Error("Blocked by policy");
}
if (result.verdict === "review_required") {
  // Held for a human, share the review link with your team
  return { status: "waiting_for_approval", reviewUrl: result.reviewUrl };
}
// safe, continue sending

Python example

from datavibe import DataVibeClient

dv = DataVibeClient(api_key="dv_live_…")

result = dv.check(
    "Agent proposed a $500 credit without manager approval",
    content_type="agent_action",
)

if result.verdict == "blocked":
    raise RuntimeError("Blocked, edit and resubmit")
if result.verdict == "review_required":
    return {"waiting": result.review_url}

Optional, generate and check in one step

If you prefer DataVibe to draft and check the message, use generateAndCheck(). Configure your AI provider in the dashboard under Settings → AI Provider.

// Optional: DataVibe drafts the message and checks it in one step
const result = await dv.generateAndCheck({
  prompt: "Write a polite follow-up for a churn-risk account",
  contentType: "email",
});
// Use result.content when the verdict is safe

Using LangChain or LangGraph? See the agent guide →

Advanced developer options

Streaming AI responses

If your agent streams tokens as they are generated, use streamCheck() to inspect output in real time and stop early when a rule is broken.

// Advanced: check AI output while it is still being generated
let sessionId: string | undefined;
for await (const chunk of openaiStream) {
  const res = await dv.streamCheck({
    content: chunk,
    sessionId,
    final: false,
  });
  sessionId = res.session_id;
  if (res.verdict === "blocked") throw new Error("Blocked mid-stream");
}
await dv.streamCheck({ content: "", sessionId, final: true });

Cursor, Claude Code, and other MCP tools

Developers can expose DataVibe inside MCP-compatible editors. Add your API key to the MCP config:

{
  "mcpServers": {
    "datavibe": {
      "command": "npx",
      "args": ["-y", "@datavibe/mcp-server"],
      "env": { "DATAVIBE_API_KEY": "dv_live_…" }
    }
  }
}

More samples

Runnable examples live in the examples/ folder on GitHub.

For developers, direct API (email)

Prefer not to use the SDK? Send a single web request when you would normally click “send.” The Gate scans the message immediately and tells you whether it is safe, queued for review, or blocked.

Non-technical teams can skip this section, use Quickstart in the dashboard instead.

Where DataVibe fits

Today, AI outbound often looks like this:

AI / sales tool writes email  →  Email provider sends  →  Customer inbox

With DataVibe, you add one step:

AI writes email  →  DataVibe checks & approves  →  Email provider sends  →  Customer inbox

Your existing tools stay the same. You are adding a safety layer, not replacing your stack.

API keys (for developers)

Each request needs a secret API key (starts with dv_live_). Create one in Security → API Keys. Keys belong to your workspace, only your team can see submissions for that workspace.

1. Send a draft for review

Instead of sending email directly, post the draft to DataVibe. Think of it as “submit for safety check” rather than “send now.”

curl -X POST https://api.datavibe.cc/v1/gate/outbound \
  -H "Authorization: Bearer dv_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient": "[email protected]",
    "subject": "Quick question regarding your infrastructure",
    "body_html": "<p>Hi there, I noticed...</p>",
    "source_model": "gpt-4o",
    "campaign_id": "outbound_q3"
  }'

What to include in the request

FieldRequired?Plain English
recipientYesWho the email is going to.
subjectYesEmail subject line.
body_htmlYesThe email body (HTML).
body_textOptionalPlain-text version: helps deliverability.
source_modelOptionalWhich AI model wrote this (for your records).
campaign_idOptionalYour campaign name: useful for reporting.
metadataOptionalAny extra context your team wants logged.
idempotency_keyOptionalPrevents duplicate sends if you retry the same request.

2. Read the result

DataVibe replies immediately. If the message passes automated checks, it lands in your team's approval queue:

{
  "action_id": "gov_8f72c91a",
  "status": "queued",
  "policy_passed": true,
  "policy_violations": [],
  "review_url": "https://app.datavibe.cc/queue?action=gov_8f72c91a",
  "message": "Submission queued for human review. Approve at the review_url."
}

If something serious is wrong, invented pricing, guarantees, or other hard-block rules, the message is rejected on the spot and never enters the queue:

{
  "action_id": "gov_3c12d04f",
  "status": "BLOCKED",
  "policy_passed": false,
  "policy_violations": [
    {
      "rule": "pricing_hallucination",
      "severity": "BLOCK",
      "detail": "Pricing or discount claim detected: '30% off'. LLMs frequently hallucinate pricing: this cannot be auto-approved."
    }
  ],
  "review_url": null,
  "message": "Submission blocked by policy engine. Fix and resubmit."
}

Tip for RevOps teams

Share the review_url in Slack so managers can approve outbound from their phone. No need to learn the full dashboard on day one.

3. Check send status (optional)

Developers can poll to learn when a queued message was actually sent. Most business users handle this in the approval queue instead.

curl https://api.datavibe.cc/v1/gate/outbound/gov_8f72c91a \
  -H "Authorization: Bearer dv_live_YOUR_API_KEY"
{
  "action_id": "gov_8f72c91a",
  "status": "SENT",
  "sent_at": "2026-05-12T10:43:22Z",
  "provider_message_id": "re_123abc456",
  "reviewed_at": "2026-05-12T10:43:18Z"
}

Status meanings

StatusWhat it means
QUEUEDPassed automated checks. Waiting for a person to approve.
BLOCKEDStopped at the gate. Fix the content and submit again.
APPROVEDA reviewer said yes. Sending is in progress.
SENTDelivered successfully.
FAILEDApproved, but the email provider could not send. Check error details.
REJECTEDA reviewer declined it. Draft something new.

4. List past submissions (optional)

Developers building a custom UI or CRM sync can fetch queued and historical messages:

curl "https://api.datavibe.cc/v1/gate/submissions?status=QUEUED&limit=20" \
  -H "Authorization: Bearer dv_live_YOUR_API_KEY"

Filter by status (QUEUED, SENT, etc.). Default page size is 50.

Python example (no SDK)

A minimal drop-in if your team prefers plain HTTP over the SDK:

import requests

def send_via_gate(recipient: str, subject: str, body_html: str, campaign_id: str | None = None):
    """Submit a draft to DataVibe instead of sending email directly."""
    response = requests.post(
        "https://api.datavibe.cc/v1/gate/outbound",
        json={
            "recipient": recipient,
            "subject": subject,
            "body_html": body_html,
            "source_model": "gpt-4o",
            "campaign_id": campaign_id,
        },
        headers={"Authorization": "Bearer dv_live_YOUR_API_KEY"},
        timeout=10,
    )
    response.raise_for_status()
    data = response.json()

    if data["status"] == "BLOCKED":
        raise ValueError(f"Blocked: {data['policy_violations']}")

    print(f"Queued for review: {data['review_url']}")
    return data["action_id"]

What gets checked automatically

Every submission is scanned before it can send. Some issues block the message entirely; others flag it for a human reviewer but still allow queueing.

CheckSeverityWhy it matters
Competitor mentionsReviewAI may name rivals: sales should confirm tone.
Pricing & discountsBlockModels often invent prices or promos.
Guarantees & refundsBlockCreates legal exposure if untrue.
Spam-style phrasesReviewHurts deliverability and brand trust.
ProfanityBlockNot appropriate for customer-facing mail.
ALL CAPS shoutingReviewLooks like spam to filters.
Too many !!! marksReviewSame: reads as low-quality outreach.
Fake attachment claimsBlockGate does not send attachments.
Missing unsubscribeReviewCAN-SPAM / GDPR expectation.
Suspicious short linksReviewbit.ly-style links reduce trust.

Need HIPAA, FINRA, GDPR, or industry-specific packs? Browse the Policy Library in the dashboard or start from the setup wizard.

Continue reading

  • Full API referenceFor engineers who want every endpoint and error code.
  • Clay RevOps: Temporal freshnessHTTP gate for Clay M&A, funding, and job-change personalization.
  • LangChain / LangGraphAdd governance to agent workflows.
  • Approval queueReview and approve messages in the dashboard.

Gate your first AI submission in under 60 seconds →

Sign up, generate an API key, and POST one message to the gate. It lands in your approval queue instantly.

Get started freeView quickstart