Documentation

Integrate in minutes,
not hours.

One endpoint. One header. Every event you send is validated, GeoIP-enriched, streamed through Kafka, and queryable from your dashboard in real time.

Setup

Quick Start

1

Create an account

Go to the sign up page, enter your email and a password (min 8 characters). Your account is created instantly.

2

Provision a New Project

Navigate to the Projects & Keys hub and click New Project. ARGUS will instantly generate a globally unique API key. This key is your project's identity; the ingestion engine uses it to automatically route telemetry to your isolated workspace.

argus_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ_0123456789
3

Ingest & Verify

Execute a test event using the curl snippet below. Once you receive the202 Acceptedresponse, visit your project-specific dashboard to see the data point in the Event Inspector (real-time audit log).

BASH
curl -s -X POST https://argus-bt.duckdns.org:8443/api/events \
  -H "Content-Type: application/json" \
  -H "X-API-Key: argus_live_YOUR_KEY_HERE" \
  -d '{
    "eventId": "550e8400-e29b-41d4-a716-446655440000",
    "eventType": "api_call",
    "timestamp": "2026-03-16T12:00:00Z",
    "sessionId": "test-session",
    "service": "cli-test",
    "statusCode": 200,
    "latency": 5,
    "data": {
      "cli_version": "1.0.4",
      "os": "linux"
    }
  }'
# Expected Output: 202 Accepted

API Reference

Event Schema

All events are sent to POST /api/events with header X-API-Key.

FieldTypeRequiredDescription
eventIdstring (UUID)Unique ID for the event
eventTypestringpage_view · click · api_call · error · signup · purchase · service_health
timestampISO 8601 stringWhen the event occurred
sessionIdstringBrowser/session identifier
userIdstringAuthenticated user ID (if any)
urlstringPage URL or API path
servicestringName of the service sending the event
statusCodeinteger (100–599)HTTP status code
latencyinteger (ms)Response time in milliseconds
browserstringBrowser name
devicestringdesktop · mobile · tablet · server
osstringOperating system
dataobjectAny extra key/value data
errorobjectError details (message, stack, etc.)

RESPONSE CODES

202 AcceptedEvent queued
400 Bad RequestValidation failed (field errors in body)
401 UnauthorizedMissing or invalid API key
429 Too Many RequestsRate limit exceeded (50 req/s per IP, 5000/s per key)

Integration

JavaScript / Browser

Drop this file into your project. No npm package needed — just a tiny fetch wrapper.

JAVASCRIPT — ARGUS.JS
// argus.js — non-blocking fetch wrapper
const ARGUS_API_KEY = "argus_live_YOUR_KEY_HERE";
const ARGUS_ENDPOINT = "https://argus-bt.duckdns.org:8443/api/events";

function getSessionId() {
  let id = sessionStorage.getItem("argus_sid");
  if (!id) {
    id = crypto.randomUUID();
    sessionStorage.setItem("argus_sid", id);
  }
  return id;
}

export async function track(eventType, extra = {}) {
  try {
    // We use "keepalive: true" so events reach the server even if the page unloads
    fetch(ARGUS_ENDPOINT, {
      method: "POST",
      keepalive: true,
      headers: {
        "Content-Type": "application/json",
        "X-API-Key": ARGUS_API_KEY,
      },
      body: JSON.stringify({
        eventId: crypto.randomUUID(),
        eventType,
        timestamp: new Date().toISOString(),
        sessionId: getSessionId(),
        url: window.location.pathname,
        service: "web-frontend", // YOUR SERVICE NAME
        data: extra, // Safely nests custom properties
      }),
    });
  } catch (e) {
    // Fail silently in production to protect user experience
  }
}

Then use it anywhere:

JAVASCRIPT
import { track } from "./argus.js";

// 1. Tracks initial page load
track("page_view", { title: document.title, theme: "dark" });

// 2. Track specific user interactions
document.getElementById("signup-btn").addEventListener("click", () => {
  track("signup_click", { device: "desktop", plan: "pro" });
});

// 3. Track performance metrics
window.addEventListener("load", () => {
  const [navigation] = performance.getEntriesByType("navigation");
  track("performance_metric", {
    latency: Math.round(navigation.domInteractive)
  });
});

Integration

Python

PYTHON
# Standard requests library integration
import requests, uuid, os
from datetime import datetime, timezone

ARGUS_KEY = "argus_live_YOUR_KEY_HERE"
ARGUS_URL = "https://argus-bt.duckdns.org:8443/api/events"

def track_event(event_type: str, service_name="python-backend", **kwargs):
    """Asynchronous-style fire-and-forget ingestion"""
    payload = {
        "eventId": str(uuid.uuid4()),
        "eventType": event_type,
        "timestamp": datetime.now(timezone.utc).isoformat(),
        "sessionId": "backend-worker",
        "service": service_name,
        "data": kwargs, # Safely nests all custom **kwargs here
    }
    try:
        requests.post(
            ARGUS_URL,
            headers={"X-API-Key": ARGUS_KEY, "Content-Type": "application/json"},
            json=payload,
            timeout=1, # Keep timeouts short to avoid blocking workers
        )
    except requests.exceptions.RequestException:
        pass

# Example: Track a successful database operation
track_event("api_call", statusCode=201, latency=12, endpoint="/v1/users")

Integration

Node.js / Express

Use as an Express middleware to auto-track every API call with zero boilerplate.

NODE.JS
// Node.js backend integration
const fetch = require("node-fetch");

const ARGUS_KEY = "argus_live_YOUR_KEY_HERE";
const ARGUS_URL = "https://argus-bt.duckdns.org:8443/api/events";

const track = (eventType, options = {}, serviceName = "node-api") => {
  fetch(ARGUS_URL, {
    method: "POST",
    headers: { 
      "Content-Type": "application/json", 
      "X-API-Key": ARGUS_KEY 
    },
    body: JSON.stringify({
      eventId: require("crypto").randomUUID(),
      eventType,
      timestamp: new Date().toISOString(),
      sessionId: "server-runtime",
      service: serviceName,
      data: options, // Safely nests custom options here
    }),
  }).catch(() => {});
};

// Example Express middleware for automated monitoring
app.use((req, res, next) => {
  const start = Date.now();
  res.on("finish", () => {
    track("api_call", {
      url: req.path,
      statusCode: res.statusCode,
      latency: Date.now() - start
    }, "inventory-svc");
  });
  next();
});

Monitoring

Slack Alerts

Receive real-time notifications in Slack for critical events or specific status codes.

1

Create an Incoming Webhook

Go to your Slack App settings, enable Incoming Webhooks, and create a new webhook for your desired channel. Copy the generated URL.

2

Configure in ARGUS

Navigate to the Settings page, select your project, and paste the Webhook URL. Toggle "Alert on 5xx Errors" to get notified of server failures automatically.

Pro-tip: You can even set this up with a dummy URL to see the UI in action before deciding on your Slack channel.

3

Verify Setup

Click Send Test Alert. ARGUS will send a Block Kit formatted message to your channel to confirm the connection is active.

Ready to automate?

Set up your Slack URL in seconds to keep your team informed of every critical error.

Configure Slack Now

Ready to ship?

Create an account, get your API key, and start streaming events in under a minute.

Get Started