API Documentation
Programmatic access to the ArtificialWeapons database. Query 2,400+ weapon systems, AI integration profiles, export status, and geopolitical risk tags.
Introduction
The ArtificialWeapons API provides structured access to our weapons systems database. The API serves JSON data that can be filtered, sorted, and integrated into research workflows, dashboards, and investment tools.
The database is updated on a weekly cadence. Each record contains technical specifications, AI integration status, operational deployment data, export restrictions, and risk classification tags derived from open-source intelligence analysis.
Authentication
The current API version uses a static JSON endpoint. No API key is required to fetch the dataset — access control is enforced at the subscriber portal level.
Future API versions will introduce token-based authentication tied to Command tier accounts. Rate limiting and per-token usage tracking will be enforced at that time.
Base URL
All API requests target the following base URL.
https://artificialweapons.com
Weapons Database
Primary endpoint for querying the complete weapons systems dataset.
Returns the complete weapons database as a JSON array. Each element represents one weapons system with full field coverage. The response is not paginated — the full dataset is returned on every request.
Query Parameters
The static JSON endpoint does not support server-side filtering. All filtering, sorting, and querying should be performed client-side after fetching the dataset. See code examples below for common patterns.
Response Codes
| Code | Status | Description |
|---|---|---|
| 200 | OK | Dataset returned successfully. |
| 304 | Not Modified | Dataset unchanged since last fetch. Use ETag caching to reduce bandwidth. |
| 403 | Forbidden | Access restricted. Valid subscription required. |
| 429 | Too Many Requests | Rate limit exceeded. See rate limiting section. |
Response Format
The API returns a JSON object with a top-level metadata block and a data array containing individual weapon system records.
{
"meta": {
"version": "2.1.0",
"last_updated": "2026-03-24T00:00:00Z",
"total_records": 2418,
"schema_version": "v2"
},
"data": [
{
"id": "sys_0001",
"name": "MQ-9 Reaper",
"platform_type": "UAS",
"country_of_origin": "USA",
"manufacturer": "General Atomics",
"operational_status": "active",
"ai_integration_level": 3,
"ai_capabilities": ["target_recognition", "autonomous_loiter"],
"export_restricted": true,
"export_classifications": ["ITAR", "EAR"],
"deployment_regions": ["CENTCOM", "AFRICOM"],
"unit_cost_usd": 32000000,
"risk_tags": ["proliferation_risk", "dual_use"],
"last_updated": "2026-03-01"
}
]
}
Field Reference
Complete description of all fields returned in each weapons system record.
| Field | Type | Description |
|---|---|---|
| id | string | Unique system identifier. Stable across dataset versions. Format: sys_XXXX. |
| name | string | Official designation of the weapons system or platform. |
| platform_type | string | Platform category. Values: UAS, UCAV, IFV, MBT, Artillery, Missile, EW, DE, Naval, Submarine, Cyber, Space. |
| country_of_origin | string | ISO 3166-1 alpha-3 country code of the developing nation. |
| manufacturer | string | Primary contractor or state-owned enterprise responsible for production. |
| operational_status | string | Current deployment status. Values: concept, development, testing, active, retired. |
| ai_integration_level | integer | AI autonomy level on a 0-5 scale. 0 = none, 1 = decision support, 2 = supervised automation, 3 = conditional autonomy, 4 = high autonomy, 5 = full autonomy. |
| ai_capabilities | array<string> | Specific AI functions present in the system (e.g., target_recognition, swarm_coordination, route_planning). |
| export_restricted | boolean | Whether the system is subject to export control regimes. |
| export_classifications | array<string> | Applicable export control regimes (e.g., ITAR, EAR, EU Dual-Use, Wassenaar). |
| deployment_regions | array<string> | Known or reported geographic deployment zones using CCMD or regional designators. |
| unit_cost_usd | integer | null | Approximate per-unit cost in USD. Null when classified or unavailable. |
| risk_tags | array<string> | Analyst-assigned risk classification tags (e.g., proliferation_risk, dual_use, active_conflict, sanctions_exposure). |
| last_updated | string (ISO 8601) | Date of last record update in YYYY-MM-DD format. |
Python Examples
Common usage patterns for integrating the database into Python workflows.
Fetch and Filter by Platform Type
import requests # Fetch the full database response = requests.get("https://artificialweapons.com/data/weapons_database.json") response.raise_for_status() db = response.json() systems = db["data"] # Filter: autonomous drone systems (UAS) with AI level >= 3 advanced_uas = [ s for s in systems if s["platform_type"] == "UAS" and s["ai_integration_level"] >= 3 ] for system in advanced_uas: print(f"{system['name']} ({system['country_of_origin']}) — AI Level {system['ai_integration_level']}")
Export to CSV with Pandas
import requests import pandas as pd data = requests.get("https://artificialweapons.com/data/weapons_database.json").json() df = pd.DataFrame(data["data"]) # Filter export-restricted systems with active deployment restricted_active = df[ (df["export_restricted"] == True) & (df["operational_status"] == "active") ] restricted_active.to_csv("restricted_active_systems.csv", index=False) print(f"Exported {len(restricted_active)} records.")
JavaScript Examples
Browser and Node.js usage patterns using the Fetch API.
Fetch and Filter by Country
const API_URL = 'https://artificialweapons.com/data/weapons_database.json'; async function getSystemsByCountry(countryCode) { const response = await fetch(API_URL); if (!response.ok) { throw new Error(`HTTP error: ${response.status}`); } const db = await response.json(); return db.data.filter( system => system.country_of_origin === countryCode ); } // Get all Chinese systems with AI integration getSystemsByCountry('CHN') .then(systems => { const aiSystems = systems.filter(s => s.ai_integration_level > 0); console.log(`Found ${aiSystems.length} AI-integrated systems.`); console.table(aiSystems.map(s => ({ name: s.name, type: s.platform_type, ai_level: s.ai_integration_level }))); });
Search by Risk Tag
const { default: fetch } = await import('node-fetch'); const searchByRiskTag = async (tag) => { const db = await (await fetch('https://artificialweapons.com/data/weapons_database.json')).json(); return db.data.filter(s => s.risk_tags?.includes(tag)); }; const proliferationRisk = await searchByRiskTag('proliferation_risk'); console.log(`Proliferation risk systems: ${proliferationRisk.length}`);
Rate Limits
Rate limiting is not currently enforced on the static JSON endpoint. Future API versions will introduce per-token rate limiting.
Cache-Control headers and use ETag-based conditional requests.Caching Recommendations
The database is updated weekly. We recommend caching the full response locally for at least 24 hours rather than fetching on every request. Store the ETag or Last-Modified header and use conditional GET requests to minimize bandwidth.
Access Tiers
API access levels vary by subscription tier.
| Feature | Operator | Command |
|---|---|---|
| Database read access | Included | Included |
| Full field coverage | Partial | Full |
| Programmatic API access | Portal only | Direct API |
| Rate limit (future) | 60 req / hour | Unlimited |
| Custom intel requests | Not included | Included |
| Analyst contact | Not included | Priority access |