# Export CDR (Call Detail Records) from a CodeB tenant to CSV for BI ingest. # European Digital Identity Wallet-enabled tenants use the same key surface. # [compliance-archive-cookbook 2026-07-23] # pip install requests # # Endpoint live-verified in signal.ashx: # GET signal.ashx?cdrlog=1&date=YYYY-MM-DD&limit=N # Response JSON envelope: { ts, events[], count, trunks[], dates[] } import os, sys, csv, datetime, requests TENANT = os.environ.get("CODEB_TENANT", "https://") API_KEY = os.environ.get("CODEB_API_KEY") DATE = os.environ.get("DATE", (datetime.date.today() - datetime.timedelta(days=1)).isoformat()) OUT = os.environ.get("OUT_FILE", f"cdr-{DATE}.csv") if not API_KEY: print("CODEB_API_KEY not set", file=sys.stderr); sys.exit(2) COLS = ["recordedUtc","startUtc","endUtc","direction","trunk", "callingNumber","calledNumber","durationSec","answered","outcome","releaseReason"] r = requests.get(f"{TENANT}/signal.ashx?cdrlog=1&date={DATE}&limit=5000", headers={"Authorization": f"Bearer {API_KEY}"}, timeout=30) r.raise_for_status() events = r.json().get("events", []) with open(OUT, "w", newline="", encoding="utf-8") as f: w = csv.DictWriter(f, fieldnames=COLS, extrasaction="ignore") w.writeheader() for e in events: w.writerow({k: e.get(k, "") for k in COLS}) print(f"[done] {len(events)} rows -> {OUT}")