How ARC Warning verifies records
This is the methodology behind the public pages, the open feed, and the labels on each record.
Is ARC Warning an emergency service?
No. If you need help now, call your local emergency number. ARC Warning publishes situational awareness from public feeds. It does not dispatch responders.
What do the verification labels mean?
OFFICIAL means one official source published the record. CONFIRMED means at least two distinct sources, and either an official source or two sources that are not unverified. REPORTED means a single non-official report a reviewer approved. UNVERIFIED records stay off the public page until a reviewer approves them. DISPUTED means a reviewer accepted a correction or marked a conflict. Disputed records stay visible and never page anyone.
How are duplicate reports combined?
Records of the same category, close in time and distance, with similar titles, collapse into one incident. The public URL is the oldest record in that group. Each extra distinct source can raise confidence by 0.08, up to 0.25. The page lists every source.
Why are crime locations shown at block level?
Chicago, Los Angeles, and NYPD crime records are stored and shown at about a 100-meter block, not a rooftop or apartment. Private names are removed from public text.
Why do some positions wait before they appear?
A report tagged as a live military unit position waits six hours before it is shown or paged.
What can trigger an alert?
Push, SMS, and email go out only for official or confirmed records. A personal rule cannot drop below confirmed. Unverified and disputed records never page anyone. Watchpoints and alert rules are private to the signed-in account. They are not indexed and they are not in the public feed.
How are photos and video handled?
Social posts from YouTube, Vimeo, X, Instagram, TikTok, Facebook, Threads, and Reddit stay official embeds. The verification badge and source credit sit outside the frame, and ARC Warning does not change those files. Licensed, public-domain, government, and rights-granted uploads can be hosted. A worker marks that copy with “ARC Warning · arcwarning.com”, a VERIFIED date, and “Source: @handle / outlet”. The mark means the copy was checked. It does not mean ARC Warning created or owns the media. The unmarked original stays in storage. A takedown request removes the public embed or the watermarked copy.
How are non-English reports shown?
The original text stays one tap away. Machine translation uses MyMemory when quota allows, and an onboard glossary when it does not.
How do corrections work?
The corrections log is public. A reviewer who accepts a correction marks the record disputed.
What are the weapons-system reference cards?
When an approved public record names a known system, such as Shahed-136, Kh-101, Kalibr, Iskander, ATACMS, Patriot, or a FAB glide bomb, the event page links to a reference card at /systems. Each card lists the published name and aliases, type and role, manufacturer and country, operators, launch method, guidance, propulsion, speed, range, warhead, blast or fragmentation radius, interceptability, reported cost, and service history. Every field cites an open source and a confidence note. If a source does not state a fact, the card says unknown/disputed. The cards are encyclopedic. They are not targeting, manufacturing, or acquisition guidance. A seen-in-ARC-Warning timeline lists approved records in this database that name the system. Photos and video are official embeds or public-domain government files, with the verification note outside an embed frame. Graphic casualty footage is not shown.
What is the conflict sandbox?
The conflict sandbox at /conflicts reads public datasets for Russia–Ukraine, the Middle East, Sudan, Myanmar, the Democratic Republic of the Congo, and the Sahel. The Middle East page is one theater from 7 October 2023: Israel, the Gaza Strip, the West Bank, Lebanon, Iran, Syria, Iraq, Yemen, Jordan, Saudi Arabia, and Qatar. It shows a combined regional total and a per-country breakdown. Country totals are every UCDP organized-violence event located there, including local wars, not only cross-border strikes. Cross-border arcs use UCDP’s dyad names and schematic country anchors. They are not flight paths or launch sites. The United Kingdom and United States campaign coded against the Government of Yemen (North Yemen) is listed and not drawn. Countries checked with no events in the extract, and Egypt’s domestic events, are labeled and kept out of the total. Fatality charts use UCDP’s own low, best, and high estimates, including a civilian count when UCDP recorded one. Injuries are not in that source, so the page does not show an injury number. Displacement rows are UNHCR year-end stocks and are not added to deaths. Official military claims are labeled claimed by and left blank when no figure was copied from the government page. Equipment counts, where shown, are Oryx visually documented vehicles and equipment, not people. The map draws one-degree event density and waits 72 hours after a month ends. It is not a front line and not a unit position. Control maps that cannot be redistributed are linked, not copied. Nothing on the page is a forecast or a target list.
Where do live ship positions come from?
When AISSTREAM_API_KEY is set on the worker, the worker opens one AISStream websocket and keeps the key on the server. The browser never sees it. If the key is empty, that source is disabled and source health says so. Positions for the same MMSI are one track, including when another ship feed reports that ship. They are drawn on the signed-in map. They are not public incidents and they do not send alerts. An AIS ship type of 35 waits six hours before the dot is shown. When AISSTREAM_BBOX is empty, the worker listens to the Black Sea, the Eastern Mediterranean and Levant, the Red Sea and Gulf of Aden, the Persian Gulf and Strait of Hormuz, the Taiwan Strait and South China Sea, and the English Channel. Set AISSTREAM_BBOX=world for a worldwide listen, or west,south,east,north with extra boxes separated by a semicolon. The Railway worker owns this socket. Vercel does not run a cron for it.
Where do live aircraft positions come from?
The worker polls the OpenSky Network /states/all feed. When both OPENSKY_CLIENT_ID and OPENSKY_CLIENT_SECRET are set on the worker, it requests an OAuth2 client-credentials bearer token, caches that token until shortly before it expires, and sends it only on the server-to-server call. If either value is empty, the same feed is polled anonymously. The browser never receives the client id, the secret, or the token. A worldwide query spends 4 OpenSky credits. Anonymous use waits 20 minutes so it stays inside the 400-credit daily budget. Authenticated use waits 2 minutes so it stays inside the 4,000-credit daily budget. HTTP 429 and a low remaining-credit header pause the next request. Positions for the same ICAO24 address are one track, including when another air feed reports that address. The fresher position is kept. They are drawn on the signed-in map. They are not public incidents and they do not send alerts. OpenSky state vectors do not include a military flag, so an OpenSky-only track is not delayed and is not labeled military. The worker also polls airplanes.live /v2/mil for aircraft that feed tags as military. That poll uses no key, waits 15 seconds between requests, and backs off after HTTP 429. AIRPLANESLIVE_ENABLED stays off unless it is set to true. Their API returns HTTP 403 until they grant permission. The worker also polls adsb.lol, which needs no key and is on unless ADSBLOL_ENABLED is false. That feed uses a radius around each theater plus /v2/mil, merges by ICAO hex, and is credited as adsb.lol (ODbL). Those tracks are tagged military, merged by ICAO hex with OpenSky, and wait six hours before the map shows them. The signed-in map has a Military aircraft layer toggle. Credit airplanes.live. Their terms ask commercial users to contact them for permission. The Railway worker polls these feeds. Vercel does not.
What is in the public data feed?
Approved records are available as JSON, CSV, and GeoJSON at /api/public/events. Anonymous use is 30 requests a minute. An API key allows 300. Pending, rejected, and not-yet-displayed rows are omitted. Watchpoints and alerts are not in the feed.