Developer Reference

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.

RESTRICTED
Full API access requires a Command tier subscription. Operator tier subscribers have read-only access to the base dataset via the member portal. Upgrade your subscription.

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.

NOTE
Authentication headers are not required for the current JSON endpoint. Direct URL access returns the full dataset. Abuse of direct access without a valid subscription violates our Terms of Service.

Base URL

All API requests target the following base URL.

Base URL
https://artificialweapons.com

Weapons Database

Primary endpoint for querying the complete weapons systems dataset.

GET /data/weapons_database.json Full 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.

JSON — Response Structure
{
  "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

Python 3
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

Python 3 — 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

JavaScript — Fetch API
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

JavaScript — Node.js
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.

UPCOMING
Planned rate limits: 60 requests per hour for Operator tier, unlimited for Command tier. Implement client-side caching to remain within limits when they are enforced. Respect 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
Upgrade to Command Tier