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
Create an account
Go to the sign up page, enter your email and a password (min 8 characters). Your account is created instantly.
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
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).
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 AcceptedAPI Reference
Event Schema
All events are sent to POST /api/events with header X-API-Key.
| Field | Type | Required | Description |
|---|---|---|---|
| eventId | string (UUID) | ✅ | Unique ID for the event |
| eventType | string | ✅ | page_view · click · api_call · error · signup · purchase · service_health |
| timestamp | ISO 8601 string | ✅ | When the event occurred |
| sessionId | string | ✅ | Browser/session identifier |
| userId | string | — | Authenticated user ID (if any) |
| url | string | — | Page URL or API path |
| service | string | — | Name of the service sending the event |
| statusCode | integer (100–599) | — | HTTP status code |
| latency | integer (ms) | — | Response time in milliseconds |
| browser | string | — | Browser name |
| device | string | — | desktop · mobile · tablet · server |
| os | string | — | Operating system |
| data | object | — | Any extra key/value data |
| error | object | — | Error details (message, stack, etc.) |
RESPONSE CODES
202 AcceptedEvent queued400 Bad RequestValidation failed (field errors in body)401 UnauthorizedMissing or invalid API key429 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.
// 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:
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
# 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 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.
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.
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.
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 NowReady to ship?
Create an account, get your API key, and start streaming events in under a minute.
Get Started