Authentication
Argus separates reading from writing on purpose. An API key can read everything in your workspace but write nothing. A source can write telemetry but read nothing. If a source secret ever leaks from an app server, the blast radius is "someone could send you fake events" — never "someone could read your spend".
API keys — reading
Create one in Settings → API keys. The key is shown once, then stored only as a hash. Send it on every request:
Authorization: Bearer argus_mcp_...
A key belongs to one workspace and sees only that workspace's data. Revoke it any time from the same Settings table — revocation is immediate. The same key also authenticates the MCP server.
Sources — writing
A source represents one app that sends telemetry — your API server, a worker, a batch job. Create one in Settings → Telemetry sources and you get two values, shown once:
source_idstringA public identifier. It names where events came from and goes in a request header, unencrypted.
source_secretstringSigns every batch you send (HMAC-SHA256). Keep it in your app's secret store — Argus stores it encrypted and can't show it again.
To rotate a source, create a new one and revoke the old — events keep flowing under the new name, and revoked sources are refused immediately.
Responses
Every field in requests and responses is snake_case. Every response is an envelope, so you can always check one field before touching the rest:
{ "success": true, "data": … }
{ "success": false, "error": "what went wrong, in plain words" }Errors you'll actually see
401 unauthorizedThe bearer key is missing, revoked, or wrong — or an ingest signature didn't verify.
403 use the Argus app, or a bearer API keyYou called the API without any credential. Browser sessions only work through the Argus app itself; scripts and servers use bearer keys.
400 …requiredValidation, with the specific field named in the message.