{
    "meta": {
        "lookup": "09470.a442.aa0.fm.radiodns.org",
        "bearer": "fm:aa0.a442.09470",
        "gcc": "aa0",
        "pi": "a442",
        "mhz": 94.7,
        "station": {
            "call": "KSHE",
            "pi": "a442",
            "mhz": "94.70",
            "facility": "19523",
            "city": "CRESTWOOD",
            "state": "MO",
            "kind": "full-service"
        },
        "checked_at": "2026-10-20T20:04:33+00:00",
        "fqdn": "radiodns.hubbardradio.com",
        "name": "KSHE 95 - Real Rock Radio"
    },
    "verdict": {
        "level": "fail",
        "headline": "1 problem found"
    },
    "counts": {
        "pass": 19,
        "warn": 8,
        "fail": 1,
        "info": 7
    },
    "sections": [
        {
            "title": "What is being checked",
            "steps": [
                {
                    "status": "info",
                    "title": "KSHE - CRESTWOOD, MO",
                    "detail": "From the NRSC list: 94.70 MHz, PI code A442, FCC facility 19523.",
                    "fix": ""
                },
                {
                    "status": "info",
                    "title": "RadioDNS lookup name",
                    "detail": "09470.a442.aa0.fm.radiodns.org  (frequency 94.70 MHz, PI A442, country code aa0)",
                    "fix": ""
                }
            ],
            "extra": []
        },
        {
            "title": "1. RadioDNS registration",
            "steps": [
                {
                    "status": "pass",
                    "title": "Registered",
                    "detail": "09470.a442.aa0.fm.radiodns.org points to the station's authoritative domain: radiodns.hubbardradio.com",
                    "fix": ""
                }
            ],
            "extra": []
        },
        {
            "title": "2. Service discovery (SRV records)",
            "steps": [
                {
                    "status": "pass",
                    "title": "_radiospi._tcp.radiodns.hubbardradio.com published",
                    "detail": "priority 10, weight 5, port 443 -> radiodns.hubbardradio.com  [target is an alias of dcmqfs8ti5c7m.cloudfront.net]",
                    "fix": ""
                },
                {
                    "status": "warn",
                    "title": "SRV target radiodns.hubbardradio.com is a CNAME alias",
                    "detail": "DNS rules (RFC 2782) say an SRV record should point at a name that has address records directly, not at an alias. Many resolvers cope, some do not.",
                    "fix": "Give radiodns.hubbardradio.com its own A/AAAA record (or point the SRV record at the real host name)."
                },
                {
                    "status": "pass",
                    "title": "_radioepg._tcp.radiodns.hubbardradio.com published",
                    "detail": "priority 10, weight 5, port 80 -> radiodns.hubbardradio.com  [target is an alias of dcmqfs8ti5c7m.cloudfront.net]",
                    "fix": ""
                },
                {
                    "status": "warn",
                    "title": "SRV target radiodns.hubbardradio.com is a CNAME alias",
                    "detail": "DNS rules (RFC 2782) say an SRV record should point at a name that has address records directly, not at an alias. Many resolvers cope, some do not.",
                    "fix": "Give radiodns.hubbardradio.com its own A/AAAA record (or point the SRV record at the real host name)."
                },
                {
                    "status": "info",
                    "title": "_radiovis._tcp: not published",
                    "detail": "Slideshow/visuals (STOMP) - optional, only needed for a live slideshow service.",
                    "fix": ""
                },
                {
                    "status": "info",
                    "title": "_radiopush._tcp: not published",
                    "detail": "Slideshow/visuals (Server-Sent Events) - optional, only needed for a live slideshow service.",
                    "fix": ""
                },
                {
                    "status": "info",
                    "title": "_radiovis-http._tcp: not published",
                    "detail": "Slideshow/visuals (HTTP) - optional, only needed for a live slideshow service.",
                    "fix": ""
                }
            ],
            "extra": []
        },
        {
            "title": "3. Service Information file (SI.xml)",
            "steps": [
                {
                    "status": "pass",
                    "title": "HTTPS endpoint https://radiodns.hubbardradio.com/radiodns/spi/3.1/SI.xml answered",
                    "detail": "58 ms, 174,831 bytes",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "The HTTPS certificate is valid",
                    "detail": "",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Content type is application/xml",
                    "detail": "",
                    "fix": ""
                },
                {
                    "status": "warn",
                    "title": "SI file has no caching headers",
                    "detail": "",
                    "fix": "Add Cache-Control: max-age (for example 86400 for 24 hours). Without it, receivers guess - and some ignore the content."
                },
                {
                    "status": "warn",
                    "title": "The file does not strictly follow the official SI schema (3.1)",
                    "detail": "line 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\n(62 more not shown)",
                    "fix": "Many receivers are forgiving, but strict ones may ignore a file that does not match the schema. RadioDNS's SI tool (si.radiodns.org) can rebuild a correct file."
                },
                {
                    "status": "pass",
                    "title": "HTTP endpoint http://radiodns.hubbardradio.com/radiodns/spi/3.1/SI.xml answered",
                    "detail": "8 ms, 174,831 bytes",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Content type is application/xml",
                    "detail": "",
                    "fix": ""
                },
                {
                    "status": "warn",
                    "title": "SI file has no caching headers",
                    "detail": "",
                    "fix": "Add Cache-Control: max-age (for example 86400 for 24 hours). Without it, receivers guess - and some ignore the content."
                },
                {
                    "status": "warn",
                    "title": "The file does not strictly follow the official SI schema (3.1)",
                    "detail": "line 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\nline 2: Element 'radiodns': This element is not expected. Expected is one of ( serviceGroupMember, ##other* ).\n(62 more not shown)",
                    "fix": "Many receivers are forgiving, but strict ones may ignore a file that does not match the schema. RadioDNS's SI tool (si.radiodns.org) can rebuild a correct file."
                }
            ],
            "extra": {
                "links": [
                    [
                        "Make an SI file accessible (PDF)",
                        "https://radiodns.org/wp-content/uploads/2014/02/HOWTO-MakeSIandXSIfilesaccessibletoRadioDNSHybridRadiodevices.pdf"
                    ],
                    [
                        "Build an SI file with RadioDNS's tool",
                        "https://si.radiodns.org/"
                    ]
                ]
            }
        },
        {
            "title": "4. Your station in the file",
            "steps": [
                {
                    "status": "info",
                    "title": "74 services in the file",
                    "detail": "",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Station found: KSHE 95",
                    "detail": "Matched on bearer fm:aa0.a442.09470",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Short name: KSHE",
                    "detail": "",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Medium name: KSHE 95",
                    "detail": "",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Long name: KSHE 95 - Real Rock Radio",
                    "detail": "",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Short description present",
                    "detail": "KSHE 95 is Real Rock Radio for St. Louis... Now in our 55th year.",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Long description present",
                    "detail": "KSHE 95 is Real Rock Radio for St. Louis... Now in our 55th year.",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Keywords present",
                    "detail": "KSHE, 95, rock, rock music, st. louis, U-Man, Favazz, Lern,",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "1 link",
                    "detail": "Homepage https://kshe95.com",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "The <radiodns> element matches the registration",
                    "detail": "fqdn radiodns.hubbardradio.com, service identifier stlkshe28",
                    "fix": ""
                }
            ],
            "extra": []
        },
        {
            "title": "5. Logos",
            "steps": [
                {
                    "status": "warn",
                    "title": "Not all five standard logo sizes are listed",
                    "detail": "Missing: 32x32, 112x32",
                    "fix": "RadioDNS asks for either no logos or at least the five standard sizes, so every receiver finds one that fits."
                },
                {
                    "status": "fail",
                    "title": "5 of 5 logos have problems",
                    "detail": "See the table below.",
                    "fix": "Every logo URL must return a real PNG or JPEG of the declared size."
                }
            ],
            "extra": {
                "logos": [
                    {
                        "url": "https://radiodns.hubbardradio.com/radiodns/spi/3.1/radiodns/spi/3.1/img/ec96590c8d04f3ecd9040e10cae52932.png",
                        "declared": "600x600",
                        "actual": "",
                        "bytes": 0,
                        "ok": false,
                        "note": "HTTP 404",
                        "preview": null
                    },
                    {
                        "url": "https://radiodns.hubbardradio.com/radiodns/spi/3.1/radiodns/spi/3.1/img/86d0972f9e047ee4c021862bedd32e4f.png",
                        "declared": "320x240",
                        "actual": "",
                        "bytes": 0,
                        "ok": false,
                        "note": "HTTP 404",
                        "preview": null
                    },
                    {
                        "url": "https://radiodns.hubbardradio.com/radiodns/spi/3.1/radiodns/spi/3.1/img/5c96549a7249b5b752bedf49a1e4d862.png",
                        "declared": "128x128",
                        "actual": "",
                        "bytes": 0,
                        "ok": false,
                        "note": "HTTP 404",
                        "preview": null
                    },
                    {
                        "url": "https://radiodns.hubbardradio.com/radiodns/spi/3.1/radiodns/spi/3.1/img/2f53d33c7a7e8eb498210118021d4245.png",
                        "declared": "?",
                        "actual": "",
                        "bytes": 0,
                        "ok": false,
                        "note": "HTTP 404",
                        "preview": null
                    },
                    {
                        "url": "https://radiodns.hubbardradio.com/radiodns/spi/3.1/radiodns/spi/3.1/img/dc093fac3390cd31451f5d0b16c067d4.png",
                        "declared": "?",
                        "actual": "",
                        "bytes": 0,
                        "ok": false,
                        "note": "HTTP 404",
                        "preview": null
                    }
                ]
            }
        },
        {
            "title": "6. Transmitters and streams",
            "steps": [
                {
                    "status": "pass",
                    "title": "FM bearer fm:aa0.a442.09470",
                    "detail": "cost 10, offset 0 ms",
                    "fix": ""
                },
                {
                    "status": "info",
                    "title": "Other bearer: hd:292.04c43",
                    "detail": "Not checked by this tool.",
                    "fix": ""
                },
                {
                    "status": "warn",
                    "title": "Stream OK: https://playerservices.streamtheworld.com/api/livestream-redirect/KSHEFMAAC.aac?dist=hubbard&source=hubbard-web&ttag=radiodns",
                    "detail": "audio/aacp, 64 kbps, offset 25000 ms\nThe file says audio/aac but the stream answers audio/aacp.",
                    "fix": ""
                },
                {
                    "status": "pass",
                    "title": "Stream OK: https://playerservices.streamtheworld.com/api/livestream-redirect/KSHEFM.mp3?dist=hubbard&source=hubbard-web&ttag=radiodns",
                    "detail": "audio/mpeg, 96 kbps, offset 25000 ms",
                    "fix": ""
                }
            ],
            "extra": []
        }
    ]
}