Partner Live Sync
An optional hosted endpoint for live-polling ATR confirmed rules, so an integrator can track upstream releases without manually chasing each version. Partner-tier API key required. The standard itself — the spec plus the MIT-licensed rules — is fully usable offline without this service.
The standard comes first — this is optional
Threat Cloud is an optional reference service operated by the ATR maintainers — not part of the standard. The standard is the spec plus the MIT-licensed rules, fully usable offline via npm / PyPI / raw YAML. Threat Cloud only adds hosted convenience (rule sync, threat submission); the same outcomes are reachable without it.
Start with the open, offline path: npm install agent-threat-rules, pip install pyatr, or pull the raw YAML rules directly. That path needs no key, no network at runtime, and no dependency on any hosted service. This partner endpoint is one optional convenience layered on top.
Who this is for
Security platforms, model vendors, and enterprise SOC teams that already embed the ATR rules into their own detection stack via npm / PyPI / YAML, and want their integration to follow upstream releases automatically rather than waiting on a manual re-install. Keeping a detection stack current is the standard's job, not the integrator's — this endpoint is one way to make that automatic, the same shape as the weekly auto-sync workflow Microsoft AGT runs against ATR upstream. For most users, the offline npm install agent-threat-rules or pip install pyatr path is the right one — this endpoint is not required to use the standard.
Getting a key
Email [email protected] with: organisation name, intended use, approximate poll interval. Keys are issued manually during the early-partner phase. No cost. MIT terms still apply to the rules themselves.
Endpoint
GET https://tc.agentthreatrule.org/api/atr-rules/live?since=<ISO-8601> Authorization: Bearer <partner-key>
Responds with ETag + Last-Modified. Send If-None-Match on subsequent polls to get a 304 Not Modified when nothing has changed — no body, no rate-limit cost.
Response shape
{
"ok": true,
"data": [
{
"ruleId": "ATR-2026-00150",
"ruleContent": "title: ...\nid: ATR-2026-00150\n...",
"publishedAt": "2026-04-17T00:03:42.124Z",
"source": "atr" | "atr-community",
"category": "context-exfiltration",
"severity": "critical",
"mitreTechniques": "AML.T0057",
"tags": "..."
}
],
"meta": { "total": 652, "etag": "W/\"652-2026-06-14T00:00:00Z\"" }
}Minimum polling example
# 5-minute cadence, ETag-aware
LAST_ETAG=""
while true; do
RESP=$(curl -sS -w '\n%{http_code}' \
-H "Authorization: Bearer $ATR_PARTNER_KEY" \
${LAST_ETAG:+-H "If-None-Match: $LAST_ETAG"} \
"https://tc.agentthreatrule.org/api/atr-rules/live")
STATUS=$(echo "$RESP" | tail -1)
if [ "$STATUS" = "304" ]; then
echo "no change"
elif [ "$STATUS" = "200" ]; then
echo "$RESP" | head -n-1 | jq '.data | length' # process rules
LAST_ETAG=$(curl -sSI -H "Authorization: Bearer $ATR_PARTNER_KEY" \
"https://tc.agentthreatrule.org/api/atr-rules/live" | grep -i etag | cut -d' ' -f2- | tr -d '\r')
fi
sleep 300
doneLimits
- Global rate limit applies. 1-minute polls are fine; sub-minute will 429.
- Rules can change in both directions — a rule can be quarantined post-canary. Treat the full response as the current authoritative set, not an append-only log.
- Partner keys are audit-logged. Key compromise? Email us, we revoke and re-issue.
- Confirmed only. Canary rules are not exposed here. If you want canary signal, email.
Why this exists
A detection standard is only as useful as it is current — a rule written today against an attack first seen yesterday has to reach the engines that run it. npm publish cycles give ~10-minute latency before a confirmed rule lands in a released package. That is fine for most, and the offline npm / PyPI / YAML path remains the canonical way to consume the standard. The point of this endpoint is that staying current shouldn't require chasing version numbers by hand: partners that want to tie rule updates to their own deploy cadence, or who cannot re-install npm packages on every cycle, can opt into it. Nothing here is exclusive to the endpoint — it is one delivery path for the same MIT-licensed rules everyone else gets.