{
    "schema": "https://saferpage.de/schemas/monitoring-alert-dispatch-runner.v1",
    "generated_at": "2026-08-04T18:04:33+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-08-04T02:05:24+00:00",
        "finished_at": "2026-08-04T02:05:25+00:00",
        "execute_ready": true,
        "dispatch_approved": false,
        "job_id": "alert-dispatch-2026-08-04T020524z0000",
        "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": "selbwerk.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/selbwerk.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/selbwerk.de"
        },
        {
            "host": "selbitz-evangelisch.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/selbitz-evangelisch.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/selbitz-evangelisch.de"
        },
        {
            "host": "seliger-autoteile.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seliger-autoteile.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seliger-autoteile.de"
        },
        {
            "host": "selam-lebenshilfe.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/selam-lebenshilfe.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/selam-lebenshilfe.de"
        },
        {
            "host": "selfassessment.uni-koeln.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/selfassessment.uni-koeln.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/selfassessment.uni-koeln.de"
        },
        {
            "host": "selbitz.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/selbitz.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/selbitz.de"
        },
        {
            "host": "selketalbahn.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/selketalbahn.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/selketalbahn.de"
        },
        {
            "host": "selbsthilfe-emden.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/selbsthilfe-emden.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/selbsthilfe-emden.de"
        },
        {
            "host": "seiten-zauber.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seiten-zauber.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seiten-zauber.de"
        },
        {
            "host": "sekundarschule-am-stoppenberg.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/sekundarschule-am-stoppenberg.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/sekundarschule-am-stoppenberg.de"
        },
        {
            "host": "seitz-autohaus.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seitz-autohaus.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seitz-autohaus.de"
        },
        {
            "host": "seitensprungzimmer.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seitensprungzimmer.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seitensprungzimmer.de"
        },
        {
            "host": "seitensprung-scout.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seitensprung-scout.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seitensprung-scout.de"
        },
        {
            "host": "seitz-busreisen.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seitz-busreisen.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seitz-busreisen.de"
        },
        {
            "host": "sek-nr.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/sek-nr.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/sek-nr.de"
        },
        {
            "host": "sektor-evolution.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/sektor-evolution.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/sektor-evolution.de"
        },
        {
            "host": "segula.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/segula.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/segula.de"
        },
        {
            "host": "seishin-weimar.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seishin-weimar.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seishin-weimar.de"
        },
        {
            "host": "lebensmed-baderlach.at",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/lebensmed-baderlach.at/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/lebensmed-baderlach.at"
        },
        {
            "host": "segu-bad.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/segu-bad.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/segu-bad.de"
        },
        {
            "host": "segensgemeinde-darmstadt.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/segensgemeinde-darmstadt.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/segensgemeinde-darmstadt.de"
        },
        {
            "host": "seibel-spielgeraete.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seibel-spielgeraete.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seibel-spielgeraete.de"
        },
        {
            "host": "seifer.de",
            "checked_at": "2026-08-04T02:05:24+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seifer.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seifer.de"
        },
        {
            "host": "seht-muenster.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seht-muenster.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seht-muenster.de"
        },
        {
            "host": "seilerseebad.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seilerseebad.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seilerseebad.de"
        },
        {
            "host": "seeweide.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seeweide.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seeweide.de"
        },
        {
            "host": "segelschule-fuerst.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/segelschule-fuerst.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/segelschule-fuerst.de"
        },
        {
            "host": "seewind-ferienwohnungen.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seewind-ferienwohnungen.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seewind-ferienwohnungen.de"
        },
        {
            "host": "segelschulemarx.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/segelschulemarx.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/segelschulemarx.de"
        },
        {
            "host": "segelschule-weber.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/segelschule-weber.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/segelschule-weber.de"
        },
        {
            "host": "seeyourent.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seeyourent.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seeyourent.de"
        },
        {
            "host": "seestern-sfb.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seestern-sfb.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seestern-sfb.de"
        },
        {
            "host": "seewohnen.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seewohnen.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seewohnen.de"
        },
        {
            "host": "seespitz-ammersee.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seespitz-ammersee.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seespitz-ammersee.de"
        },
        {
            "host": "seerose.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seerose.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seerose.de"
        },
        {
            "host": "seepark-suedheide.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seepark-suedheide.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seepark-suedheide.de"
        },
        {
            "host": "seelsorge-im-alter.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seelsorge-im-alter.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seelsorge-im-alter.de"
        },
        {
            "host": "seenami.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seenami.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seenami.de"
        },
        {
            "host": "seeloge.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seeloge.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seeloge.de"
        },
        {
            "host": "seestern-greetsiel.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seestern-greetsiel.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seestern-greetsiel.de"
        },
        {
            "host": "seelsorge-beratzhausen-pfraundorf.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seelsorge-beratzhausen-pfraundorf.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seelsorge-beratzhausen-pfraundorf.de"
        },
        {
            "host": "seegert-kaffee.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seegert-kaffee.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seegert-kaffee.de"
        },
        {
            "host": "seehotel-zur-post.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seehotel-zur-post.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seehotel-zur-post.de"
        },
        {
            "host": "seehotel-huberhof.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seehotel-huberhof.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seehotel-huberhof.de"
        },
        {
            "host": "seehofgernert.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seehofgernert.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seehofgernert.de"
        },
        {
            "host": "seeklause-leng.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seeklause-leng.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seeklause-leng.de"
        },
        {
            "host": "seehotel-kressbronn.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seehotel-kressbronn.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seehotel-kressbronn.de"
        },
        {
            "host": "seehaus.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seehaus.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seehaus.de"
        },
        {
            "host": "seehotel-belriva.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/seehotel-belriva.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/seehotel-belriva.de"
        },
        {
            "host": "sedlmeir-trachtenhof.de",
            "checked_at": "2026-08-04T02:05:25+00:00",
            "status": "error",
            "alert_count": 0,
            "deliverable_channel_count": 0,
            "sent_count": 0,
            "delivery_url": "https://saferpage.de/alarme/sedlmeir-trachtenhof.de/delivery-json",
            "error": "HTTP Error 402: Payment Required",
            "report_url": "https://saferpage.de/sedlmeir-trachtenhof.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."
}
