All documentation

Integration Examples

Fraud detection API integration examples in Node.js, Python, and cURL, with webhook handlers for ALLOW, REVIEW, and BLOCK decisions.

Code Examples

Complete integration examples showing how to submit events and handle decisions in your application.

const axios = require("axios");

async function submitEvent(eventData) {
  try {
    const response = await axios.post(
      "https://api.naiza.ai/api/v1/events",
      eventData,
      {
        headers: {
          "x-api-key": process.env.NAIZA_API_KEY,
          "Content-Type": "application/json",
        },
      },
    );

    const { decision, score } = response.data;

    if (decision === "BLOCK") {
      throw new Error("Access denied due to fraud detection");
    }

    if (decision === "REVIEW") {
      return { require2FA: true, score };
    }

    return { allowed: true, score };
  } catch (error) {
    console.error("Fraud check failed:", error);
    return { allowed: true }; // Fail open
  }
}

// Usage in login endpoint
app.post("/login", async (req, res) => {
  const { email, password } = req.body;
  const user = await authenticateUser(email, password);

  const fraudCheck = await submitEvent({
    eventName: "user.login",
    eventCategory: "AUTHENTICATION",
    customer: {
      externalId: user.id,
      email: email,
    },
    device: {
      fingerprint: req.body.deviceFingerprint,
    },
    ip: req.ip,
    userAgent: req.headers["user-agent"],
    sessionId: req.sessionID,
    metadata: {
      login_method: "password",
      auth_result: "success",
    },
  });

  if (fraudCheck.require2FA) {
    return res.json({ nextStep: "2fa_required" });
  }

  if (!fraudCheck.allowed) {
    return res.status(403).json({ error: "Access denied" });
  }

  res.json({ token: sessionToken });
});