API & Data Endpoints
Open JSON endpoints, public-domain underlying files, no auth, no rate limits, no scraping required. Built for journalists, researchers, and anyone who wants to ingest the Trump PURSUE UFO archive into their own pipeline.
Core endpoints
Files index
https://pursueufotracker.com/generated/api/files.jsonAll 164 files with title, agency, category, type, score, canonical page URL, and a pointer to the per-file detail endpoint. Use this as your starting point.
Per-file detail
https://pursueufotracker.com/generated/api/files/<id>.jsonFull metadata for one file: title, agency, dates, source URL, SHA-256, size, summary, full score components and contributions, video URL + caption tracks (for video files), thumbnail URL.
Verification manifest (SHA-256 + war.gov source URLs)
https://pursueufotracker.com/generated/verification-manifest.jsonFor each file: id, title, SHA-256 hash, size in bytes, and the original war.gov source URL. Use this to verify any file mirrored on this site matches the canonical war.gov asset byte-for-byte.
Scoring rubric
https://pursueufotracker.com/data/scoring-rubric.jsonThe six-component Anomalousness Index rubric: weights, value scales, presets. Weights sum to exactly 1.00. Anyone can recompute every score on this site by combining a file's score.components values with this rubric. The math is auditable.
Timeline data
https://pursueufotracker.com/generated/timeline.jsonChronological ordering of all 164 files with event dates. Useful for date-keyed visualizations or filtering.
Search index (Lunr-compatible)
https://pursueufotracker.com/generated/search-index.jsonPrebuilt Lunr.js search index over titles, summaries, full PDF text, and Whisper-generated video transcripts. Hydrate client-side with Lunr.js to add full-text search to your own UI.
RSS feed
https://pursueufotracker.com/generated/feed.xmlRSS 2.0. One item per file, sorted by release date. Polls war.gov every 30 min (weekday business hours), so new drops appear in the feed within hours. Includes a styled XSL view if opened directly in a browser.
Sitemaps
https://pursueufotracker.com/sitemap-index.xmlXML sitemap index. Points to the main sitemap (~180 URLs: homepage, editorial pages, category landing pages, all 164 file pages) and the video sitemap (30 video files with Google Video Search metadata).
Quick recipes
List all files (curl + jq)
curl -s https://pursueufotracker.com/generated/api/files.json \
| jq '.files[] | {id, title, agency, score, url}'
Get the top 10 by score
curl -s https://pursueufotracker.com/generated/api/files.json \
| jq '.files | sort_by(.score) | reverse | .[0:10]'
Verify a file against war.gov
# 1. Get the SHA-256 from our manifest
curl -s https://pursueufotracker.com/generated/verification-manifest.json \
| jq '.[] | select(.id == "fbi-photo-a1") | .sha256'
# 2. Download the file from war.gov
curl -O https://www.war.gov/medialink/ufo/release_1/fbi-photo-a1.png
# 3. Hash it locally and compare
sha256sum fbi-photo-a1.png
# Windows PowerShell: Get-FileHash fbi-photo-a1.png -Algorithm SHA256
Recompute a file's score from the open rubric
// JavaScript / Node
const rubric = await fetch('https://pursueufotracker.com/data/scoring-rubric.json').then(r => r.json());
const file = await fetch('https://pursueufotracker.com/generated/api/files/nasa-uap-d3a-gemini-7-audio-excerpt-1965.json').then(r => r.json());
const score = Object.entries(file.score.components).reduce((sum, [k, choice]) => {
const comp = rubric.components[k];
return sum + comp.scale[choice] * comp.weight;
}, 0);
console.log('Recomputed score:', Math.round(score), '/ Published score:', file.score.value);
// Recomputed score: 72 / Published score: 72
Subscribe to new-drop alerts (RSS)
# Any RSS reader. Examples:
# Feedly: https://feedly.com/i/subscription/feed%2Fhttps%3A%2F%2Fpursueufotracker.com%2Fgenerated%2Ffeed.xml
# Inoreader: https://www.inoreader.com/?add_feed=https%3A%2F%2Fpursueufotracker.com%2Fgenerated%2Ffeed.xml
# Or visit the feed directly: https://pursueufotracker.com/generated/feed.xml
Stability & SLAs
This is a personal-budget project, not an enterprise API. That said:
- No rate limits on these endpoints. Cloudflare handles bandwidth.
- No auth required. No API keys, no signups.
- Schema may change. Open an issue if you depend on a field and want a heads-up before breaking changes. GitHub issues
- If you build something cool with these endpoints, tell me. I'd like to feature it on the press page.