API Documentation
Overview
The FashFinder API provides programmatic access to classification data, pattern analysis, and LLM-generated insights. This is a read-only static JSON API hosted on GitHub Pages, designed for researchers, journalists, and developers to integrate FashFinder data into their own tools and analyses.
Note: This API serves static JSON files and is updated periodically as new classifications are processed. There is no backend server, so all endpoints are simple GET requests to JSON files.
Base URL
https://fash-finder.com/
All API endpoints are relative to this base URL. For local development, use http://localhost:8000/
Authentication
No authentication required. All data is publicly accessible. No API keys, tokens, or registration needed.
Endpoints
FashFinder provides four main data endpoints:
1. Classifications Data
Returns all classified articles with full evidence, source metadata, and categorization.
Response Structure
{
"classifications": [
{
"classification_id": "string",
"timestamp": "ISO 8601 datetime",
"source_metadata": {
"type": "official_government | investigative_journalism | legal_document | mainstream_news",
"name": "string",
"title": "string",
"date": "YYYY-MM-DD",
"url": "string",
"author": "string"
},
"content_type": "rhetoric | action",
"classification": {
"primary_category": "string",
"secondary_categories": ["string"],
"severity_level": 1-4,
"confidence": "High | Medium | Low"
},
"evidence": {
"quotes": [
{
"text": "string",
"category": "string",
"explanation": "string"
}
],
"observable_indicators": ["string"],
"distinguishing_features": ["string"]
},
"analysis": {
"rationale": "string",
"context_factors": ["string"]
}
}
]
}Key Fields
Whether this is rhetoric (statements, proposals) or action (implemented policies)
1: Rhetoric without implementation
2: Oppressive policies/systems without violence
3: State violence (arrests, prosecutions, killings)
4: Mass atrocities (genocide, industrial-scale violence)
Main taxonomy category (1-10) with optional subcategory (e.g., "2.1.1")
Example Request
fetch('https://fash-finder.com/data.json')
.then(response => response.json())
.then(data => console.log(data.classifications));2. Pattern Analysis
Statistical pattern analysis including three-metric assessment, category distribution, and rhetoric-to-action progressions.
Response Structure
{
"generated_at": "ISO 8601 datetime",
"total_classifications": integer,
"date_range": {
"earliest": "YYYY-MM-DD",
"latest": "YYYY-MM-DD"
},
"three_metric_assessment": {
"fascism_stage": {
"stage": 1-4,
"description": "string",
"justification": "string"
},
"current_intensity": {
"level": "mild | moderate | severe | extreme",
"description": "string"
},
"momentum": {
"status": "stable | accelerating | rapid | critical",
"description": "string",
"recent_30_day_count": integer,
"previous_30_day_count": integer,
"change_percentage": number
}
},
"rhetoric_vs_action": {
"rhetoric_count": integer,
"action_count": integer,
"rhetoric_percentage": number,
"action_percentage": number
},
"severity_distribution": {
"1": integer,
"2": integer,
"3": integer,
"4": integer
},
"category_distribution": {
"1": integer,
"2": integer,
...
},
"rhetoric_to_action_progressions": [
{
"rhetoric_id": "string",
"action_id": "string",
"category": "string",
"time_gap_days": integer,
"explanation": "string"
}
]
}Example Request
fetch('https://fash-finder.com/pattern_analysis.json')
.then(response => response.json())
.then(data => console.log(data.three_metric_assessment));3. LLM Narrative Analysis
AI-generated narrative analysis with key findings, systemic patterns, and recommendations.
Response Structure
{
"generated_at": "ISO 8601 datetime",
"narrative_summary": "string (markdown formatted)",
"key_findings": ["string"],
"systemic_patterns": ["string"],
"recommendations": ["string"]
}Example Request
fetch('https://fash-finder.com/llm_pattern_analysis.json')
.then(response => response.json())
.then(data => console.log(data.narrative_summary));4. LLM Prompts
Documentation of all LLM prompts used in the classification pipeline for transparency and reproducibility.
Response Structure
{
"generated_at": "string",
"classification_pipeline": [
{
"class_name": "string",
"docstring": "string (full prompt)",
"input_fields": [],
"output_fields": []
}
],
"pattern_analysis": [
{
"class_name": "string",
"docstring": "string (full prompt)",
"input_fields": [],
"output_fields": []
}
]
}Example Request
fetch('https://fash-finder.com/prompts.json')
.then(response => response.json())
.then(data => console.log(data.classification_pipeline));Example Usage
Filter Classifications by Severity
fetch('https://fash-finder.com/data.json')
.then(response => response.json())
.then(data => {
const severityThree = data.classifications.filter(
c => c.classification.severity_level >= 3
);
console.log(`${severityThree.length} high-severity classifications`);
});Get Recent Actions Only
fetch('https://fash-finder.com/data.json')
.then(response => response.json())
.then(data => {
const actions = data.classifications.filter(
c => c.content_type === 'action'
);
console.log(`${actions.length} action-based classifications`);
});Calculate Category Statistics
fetch('https://fash-finder.com/pattern_analysis.json')
.then(response => response.json())
.then(data => {
const topCategory = Object.entries(data.category_distribution)
.sort((a, b) => b[1] - a[1])[0];
console.log(`Top category: ${topCategory[0]} with ${topCategory[1]} instances`);
});Python Example
import requests
# Fetch classifications
response = requests.get('https://fash-finder.com/data.json')
data = response.json()
# Filter by category
category_7 = [
c for c in data['classifications']
if c['classification']['primary_category'].startswith('7')
]
print(f"Found {len(category_7)} classifications in Category 7")CORS & Rate Limits
CORS
All endpoints support CORS. You can fetch data from any domain without cross-origin restrictions.
Rate Limits
No rate limits. Since this is a static file API hosted on GitHub Pages, there are no server-side rate limits. However, please be considerate and cache responses when possible to reduce bandwidth usage.
Update Frequency
Data is updated periodically (typically daily or weekly) as new classifications are processed.
Check the generated_at field in each response to see when the data was last updated.
Additional Resources
- Data Documentation - Detailed field definitions and export formats
- Taxonomy Reference - Complete classification framework
- Prompts Viewer - Interactive view of LLM prompts
- About - Project background and methodology