{
    "schema": "https://saferpage.de/schemas/monitoring-alert-dispatch-runner.v1",
    "generated_at": "2026-07-17T20:54:27+00:00",
    "available": true,
    "health": "attention",
    "summary": "Alert-Dispatch-Runner: 50 Domain(s) geprüft, 0 zustellbare Outbox-Einträge, 0 gesendet, 0 blockiert, 50 Fehler.",
    "metrics": {
        "evaluated_count": 50,
        "deliverable_count": 0,
        "sent_count": 0,
        "blocked_count": 0,
        "error_count": 50,
        "no_alert_count": 0,
        "channel_count": 4,
        "configured_channel_count": 1,
        "signed_channel_count": 0,
        "outbox_count": 0,
        "external_send_attempt_count": 0,
        "local_file_sink_attempt_count": 0,
        "dry_run_queued_count": 0,
        "credential_reference_count": 6,
        "configured_credential_reference_count": 0
    },
    "run_policy": {
        "base_url": "http://127.0.0.1",
        "recent_limit": 300,
        "max_hosts": 50,
        "timeout_seconds": 20,
        "execute_ready": true,
        "dispatch_approved": false,
        "external_delivery_only_if": "--execute-ready was passed, SAFERPAGE_ALERT_DISPATCH_APPROVED=yes and the channel target is configured",
        "external_send_attempt_count": 0,
        "local_file_sink_attempt_count": 0,
        "dry_run_queued_count": 0,
        "local_file_sink_policy": "Writes sanitized JSONL summary rows only when dispatch is approved and --execute-ready is passed.",
        "no_secret_export": true
    },
    "credential_manifest": {
        "reference_count": 6,
        "present_reference_count": 0,
        "external_native_target_ready": false,
        "dispatch_approved": false,
        "secret_policy": "Only env_ref and present flags are exported; never secret values, webhook URLs, recipients, target URLs or raw payloads.",
        "references": [
            {
                "id": "dispatch_approval",
                "env_ref": "SAFERPAGE_ALERT_DISPATCH_APPROVED",
                "present": false,
                "required_for_external_delivery": true,
                "purpose": "Explicit approval gate for productive alert delivery."
            },
            {
                "id": "generic_webhook_url",
                "env_ref": "SAFERPAGE_WEBHOOK_URL",
                "present": false,
                "required_for_external_delivery": false,
                "purpose": "Generic operator webhook target."
            },
            {
                "id": "generic_webhook_secret",
                "env_ref": "SAFERPAGE_WEBHOOK_SECRET",
                "present": false,
                "required_for_signed_webhook": true,
                "purpose": "HMAC-SHA256 signing secret for generic webhook deliveries."
            },
            {
                "id": "slack_webhook_url",
                "env_ref": "SAFERPAGE_SLACK_WEBHOOK_URL",
                "present": false,
                "required_for_external_delivery": false,
                "purpose": "Slack incoming webhook target."
            },
            {
                "id": "teams_webhook_url",
                "env_ref": "SAFERPAGE_TEAMS_WEBHOOK_URL",
                "present": false,
                "required_for_external_delivery": false,
                "purpose": "Microsoft Teams incoming webhook target."
            },
            {
                "id": "local_file_sink_path",
                "env_ref": "SAFERPAGE_LOCAL_FILE_SINK_PATH",
                "present": false,
                "required_for_external_delivery": false,
                "purpose": "Optional override for sanitized local JSONL audit sink; default path is used when absent."
            }
        ]
    },
    "receiver_contract": {
        "event": "monitoring.alert",
        "method": "POST",
        "content_type": "application/json; charset=utf-8",
        "required_headers": [
            "X-SaferPage-Event",
            "X-SaferPage-Domain",
            "X-SaferPage-Idempotency-Key"
        ],
        "optional_headers": [
            "X-SaferPage-Signature"
        ],
        "signature_algorithm": "HMAC-SHA256 over the compact JSON request body, formatted as sha256=<hex>.",
        "signature_header": "X-SaferPage-Signature",
        "idempotency_policy": "Receivers must deduplicate on X-SaferPage-Idempotency-Key and may compare body_sha256 for replay diagnostics.",
        "secret_policy": "Secrets, target URLs, recipients and raw payloads are never included in public runner state."
    },
    "last_run": {
        "started_at": "2026-07-17T02:16:20+00:00",
        "finished_at": "2026-07-17T02:16:21+00:00",
        "execute_ready": true,
        "dispatch_approved": false,
        "job_id": "alert-dispatch-2026-07-17T021620z0000",
        "user_agent": "SaferPageAlertDispatcher/0.1 (+https://saferpage.de/bot; scheduled privacy and security alert delivery)"
    },
    "schedule": {
        "manager": "systemd",
        "unit": "saferpage-alert-dispatch.service",
        "timer": "saferpage-alert-dispatch.timer",
        "cadence": "daily",
        "run_window": "04:05-04:20 Europe/Berlin plus RandomizedDelaySec 15min",
        "environment_file": "/etc/saferpage/alert-dispatch.env",
        "max_hosts_per_run": 50,
        "recent_limit": 300,
        "timeout_seconds": 20
    },
    "gate_policy": {
        "delivery_endpoint": "https://saferpage.de/alarme/{domain}/delivery-json",
        "execute_only_if": "--execute-ready und SAFERPAGE_ALERT_DISPATCH_APPROVED=yes aktiv sind.",
        "configured_targets": "SAFERPAGE_WEBHOOK_URL, SAFERPAGE_SLACK_WEBHOOK_URL oder SAFERPAGE_TEAMS_WEBHOOK_URL sind serverseitig gesetzt.",
        "signature_secret": "SAFERPAGE_WEBHOOK_SECRET signiert generische Webhook-Payloads, falls gesetzt.",
        "current_public_evidence": "Der letzte State zeigt Dry-run/Outbox oder blockierte Zielsysteme ohne echte Sendung."
    },
    "operations_runbook": {
        "purpose": "Betriebsnachweis für automatische Alert-Zustellung: Timer, Outbox, Kanäle, Freigabe, Signatur, Idempotenz und Stop-Bedingungen sind ohne Secret-Ausgabe prüfbar.",
        "systemd_checks": [
            {
                "label": "Timer sichtbar",
                "command": "systemctl list-timers saferpage-alert-dispatch.timer --no-pager",
                "expected": "NEXT, LAST und UNIT sind sichtbar; Timer ist für den täglichen Lauf geplant."
            },
            {
                "label": "Service-Status",
                "command": "systemctl status saferpage-alert-dispatch.service --no-pager",
                "expected": "Type=oneshot, ExecStart zeigt run-alert-dispatch.py mit --execute-ready."
            },
            {
                "label": "Letzte Logs",
                "command": "journalctl -u saferpage-alert-dispatch.service -n 80 --no-pager",
                "expected": "Abschlusszeile done evaluated=... errors=0; keine Secret-Werte oder Webhook-URLs in Logs."
            },
            {
                "label": "Öffentlicher State",
                "command": "curl -fsS https://saferpage.de/alarme/dispatch-runner-json",
                "expected": "JSON enthält metrics, channels, rows, outbox und guardrails ohne Ziel-URLs oder Secrets."
            }
        ],
        "dry_run_drill": [
            {
                "step": "Einzelne Domain ohne Versand prüfen",
                "command": "python3 scripts/run-alert-dispatch.py anrufer.info --base-url http://127.0.0.1 --max 1 --timeout 15",
                "expected": "Outbox entsteht; sent_count bleibt 0."
            },
            {
                "step": "Isolierten Dry-run-Smoke ausführen",
                "command": "scripts/run-alert-dispatch-dry-run-smoke.sh",
                "expected": "Schreibt nur temporaere State-Dateien, sent_count=0 und external_send_attempt_count=0."
            },
            {
                "step": "Freigabe-Gate ohne Zielsystem prüfen",
                "command": "python3 scripts/run-alert-dispatch.py anrufer.info --base-url http://127.0.0.1 --max 1 --timeout 15 --execute-ready",
                "expected": "Ohne SAFERPAGE_ALERT_DISPATCH_APPROVED=yes wird nicht gesendet."
            },
            {
                "step": "Delivery-Payload prüfen",
                "command": "curl -fsS https://saferpage.de/alarme/anrufer.info/delivery-json",
                "expected": "Payloads enthalten Idempotency-Key, Slack/Teams/Webhook/Jira/E-Mail-Vorlagen."
            }
        ],
        "go_live_sequence": [
            "Zielsysteme, Empfänger und Owner intern freigeben.",
            "Secrets und Ziel-URLs in /etc/saferpage/alert-dispatch.env setzen, nie in öffentlichen URLs oder Unit-Dateien.",
            "SAFERPAGE_ALERT_DISPATCH_APPROVED=yes erst nach Testempfänger-Dry-run setzen.",
            "Timer starten oder manuell systemctl start saferpage-alert-dispatch.service ausführen.",
            "dispatch-runner-json und Zielsystem-Logs auf Idempotency-Key, Signatur und Duplikate prüfen."
        ],
        "stop_conditions": [
            "error_count größer 0 oder wiederholte HTTP-/TLS-/Rate-Limit-Fehler.",
            "sent_count größer 0 ohne dokumentierte Betreiberfreigabe.",
            "Öffentliche Exports enthalten Webhook-URLs, Tokens, E-Mail-Adressen, API-Keys oder private Rohpayloads.",
            "Zielsysteme duplizieren Tickets trotz Idempotency-Key."
        ]
    },
    "channels": [
        {
            "id": "generic_webhook",
            "label": "Generischer Webhook",
            "configured": false,
            "signed": false,
            "url_ref": "SAFERPAGE_WEBHOOK_URL",
            "secret_ref": "SAFERPAGE_WEBHOOK_SECRET"
        },
        {
            "id": "slack",
            "label": "Slack",
            "configured": false,
            "signed": false,
            "url_ref": "SAFERPAGE_SLACK_WEBHOOK_URL",
            "secret_ref": "provider_webhook_secret"
        },
        {
            "id": "teams",
            "label": "Microsoft Teams",
            "configured": false,
            "signed": false,
            "url_ref": "SAFERPAGE_TEAMS_WEBHOOK_URL",
            "secret_ref": "provider_webhook_secret"
        },
        {
            "id": "local_file_sink",
            "label": "Lokaler Audit-File-Sink",
            "configured": true,
            "signed": false,
            "url_ref": "SAFERPAGE_LOCAL_FILE_SINK_PATH",
            "secret_ref": "provider_webhook_secret"
        }
    ],
    "rows": [
        {
            "host": "nelson-gomes.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/nelson-gomes.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/nelson-gomes.de"
        },
        {
            "host": "schuh-sommer.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schuh-sommer.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schuh-sommer.de"
        },
        {
            "host": "fondsfinanz.br-idge.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/fondsfinanz.br-idge.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/fondsfinanz.br-idge.de"
        },
        {
            "host": "schule-ge-velbert.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schule-ge-velbert.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schule-ge-velbert.de"
        },
        {
            "host": "libertas-makler.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/libertas-makler.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/libertas-makler.de"
        },
        {
            "host": "maximumlife.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/maximumlife.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/maximumlife.de"
        },
        {
            "host": "koelner-vm.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/koelner-vm.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/koelner-vm.de"
        },
        {
            "host": "finanzberatung-grudovik.baufi-cockpit.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/finanzberatung-grudovik.baufi-cockpit.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/finanzberatung-grudovik.baufi-cockpit.de"
        },
        {
            "host": "mein-immostar.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/mein-immostar.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/mein-immostar.de"
        },
        {
            "host": "immostar.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/immostar.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/immostar.de"
        },
        {
            "host": "makler-menden.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/makler-menden.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/makler-menden.de"
        },
        {
            "host": "mein.comfortinvest.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/mein.comfortinvest.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/mein.comfortinvest.de"
        },
        {
            "host": "heitzer-finanz.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/heitzer-finanz.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/heitzer-finanz.de"
        },
        {
            "host": "fsk-finanz.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/fsk-finanz.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/fsk-finanz.de"
        },
        {
            "host": "fragholtz.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/fragholtz.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/fragholtz.de"
        },
        {
            "host": "finfero.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/finfero.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/finfero.de"
        },
        {
            "host": "grudovik.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/grudovik.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/grudovik.de"
        },
        {
            "host": "beratung.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/beratung.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/beratung.de"
        },
        {
            "host": "ff-comfortinvest.edisoft.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/ff-comfortinvest.edisoft.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/ff-comfortinvest.edisoft.de"
        },
        {
            "host": "fondsdocs.edisoft.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/fondsdocs.edisoft.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/fondsdocs.edisoft.de"
        },
        {
            "host": "behrens-versicherungsmakler.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/behrens-versicherungsmakler.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/behrens-versicherungsmakler.de"
        },
        {
            "host": "finestep.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/finestep.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/finestep.de"
        },
        {
            "host": "bvp24.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/bvp24.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/bvp24.de"
        },
        {
            "host": "finanzhaus-kiss.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/finanzhaus-kiss.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/finanzhaus-kiss.de"
        },
        {
            "host": "comfortinvest.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/comfortinvest.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/comfortinvest.de"
        },
        {
            "host": "cavendum-gmbh.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/cavendum-gmbh.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/cavendum-gmbh.de"
        },
        {
            "host": "ankerfinanz.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/ankerfinanz.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/ankerfinanz.de"
        },
        {
            "host": "chantraine-ganser.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/chantraine-ganser.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/chantraine-ganser.de"
        },
        {
            "host": "scholl-stukkateur.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/scholl-stukkateur.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/scholl-stukkateur.de"
        },
        {
            "host": "schuetzenbruderschaft-affeln.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schuetzenbruderschaft-affeln.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schuetzenbruderschaft-affeln.de"
        },
        {
            "host": "schuh-schweizer.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schuh-schweizer.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schuh-schweizer.de"
        },
        {
            "host": "schottland-ferien.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schottland-ferien.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schottland-ferien.de"
        },
        {
            "host": "makler-homepages.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/makler-homepages.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/makler-homepages.de"
        },
        {
            "host": "schreinerei-oest.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schreinerei-oest.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schreinerei-oest.de"
        },
        {
            "host": "schuetzen.garbeck.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schuetzen.garbeck.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schuetzen.garbeck.de"
        },
        {
            "host": "schober-versicherungen.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schober-versicherungen.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schober-versicherungen.de"
        },
        {
            "host": "schmiedel.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schmiedel.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schmiedel.de"
        },
        {
            "host": "schoeneckarchiv.gemeindeparlamentsfernsehen.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schoeneckarchiv.gemeindeparlamentsfernsehen.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schoeneckarchiv.gemeindeparlamentsfernsehen.de"
        },
        {
            "host": "eventlive.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/eventlive.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/eventlive.de"
        },
        {
            "host": "schlosserei-blueggel.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schlosserei-blueggel.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schlosserei-blueggel.de"
        },
        {
            "host": "nks.klimafahrplan.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/nks.klimafahrplan.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/nks.klimafahrplan.de"
        },
        {
            "host": "nicolekruse.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/nicolekruse.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/nicolekruse.de"
        },
        {
            "host": "captimizer.de",
            "checked_at": "2026-07-17T02:16:20+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/captimizer.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/captimizer.de"
        },
        {
            "host": "schifffahrt-in-potsdam.de",
            "checked_at": "2026-07-17T02:16:21+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schifffahrt-in-potsdam.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schifffahrt-in-potsdam.de"
        },
        {
            "host": "schlagercouch.de",
            "checked_at": "2026-07-17T02:16:21+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/schlagercouch.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/schlagercouch.de"
        },
        {
            "host": "runder-tisch-klima.de",
            "checked_at": "2026-07-17T02:16:21+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/runder-tisch-klima.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/runder-tisch-klima.de"
        },
        {
            "host": "sabine-christmann.de",
            "checked_at": "2026-07-17T02:16:21+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/sabine-christmann.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/sabine-christmann.de"
        },
        {
            "host": "logical-line.de",
            "checked_at": "2026-07-17T02:16:21+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/logical-line.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/logical-line.de"
        },
        {
            "host": "sachsenfahnen.de",
            "checked_at": "2026-07-17T02:16:21+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/sachsenfahnen.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/sachsenfahnen.de"
        },
        {
            "host": "habicht-kommunikation.de",
            "checked_at": "2026-07-17T02:16:21+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/habicht-kommunikation.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/habicht-kommunikation.de"
        }
    ],
    "outbox": [],
    "guardrails": [
        "No delivery is sent unless --execute-ready and SAFERPAGE_ALERT_DISPATCH_APPROVED=yes are both active.",
        "Public state shows only environment reference names, body hashes, idempotency keys and status, never target URLs or secrets.",
        "Generic webhooks are HMAC signed when SAFERPAGE_WEBHOOK_SECRET is present.",
        "Failed or missing targets remain in the public dry-run outbox for operator follow-up."
    ],
    "links": {
        "html": "https://saferpage.de/alarme/dispatch-runner",
        "json": "https://saferpage.de/alarme/dispatch-runner-json",
        "csv": "https://saferpage.de/alarme/dispatch-runner-csv",
        "markdown": "https://saferpage.de/alarme/dispatch-runner-md",
        "integrations": "https://saferpage.de/integrationen",
        "alert_example": "https://saferpage.de/alarme/anrufer.info/delivery-json",
        "bot": "https://saferpage.de/bot",
        "comparison": "https://saferpage.de/vergleich",
        "runtime_controls": "https://saferpage.de/evidence/delivery-runtime-controls.json"
    },
    "disclaimer": "Dieser Export zeigt nur Dispatch-Status, Outbox-Hashes, Env-Referenzen und öffentliche Alertlinks. Er veröffentlicht keine Webhook-URLs, API-Keys, Tokens, E-Mail-Empfänger oder privaten Rohpayloads."
}
