DroneLedger API V1 API

Source-backed drone incident dossiers. Each dossier separates three claims: drone presence, impact and attribution, each with its own evidence state and supporting sources. 'reported' means a source describes the claim without sufficient identification evidence; claims by parties to a conflict are n

Operations 9

GET /api/v1/incidents.json All published dossiers
GET /api/v1/incidents.geojson Coarse current dossier points
GET /api/v1/incidents/{id}.json One dossier by id
GET /api/v1/drone-types.json Drone type catalogue
GET /api/v1/drone-profiles.json Source-bound research profiles
GET /api/v1/drone-profiles/{id}.json One source-bound research profile
GET /data/drone-observations.csv Source-bound observations CSV
GET /api/v1/trends.json Counts per period
POST /mcp Model Context Protocol endpoint (Streamable HTTP, JSON-RPC 2.0)

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/droneincidents-com:droneledger-api-v1-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

droneincidents-com-v1-openapi.json Raw ↑
{
 "openapi": "3.1.0",
 "info": {
  "title": "DroneLedger API",
  "version": "1",
  "description": "Source-backed drone incident dossiers. Each dossier separates three claims: drone presence, impact and attribution, each with its own evidence state and supporting sources. 'reported' means a source describes the claim without sufficient identification evidence; claims by parties to a conflict are never 'confirmed' on their own. Counts reflect dossiers in this curated archive, not all incidents worldwide. windowStart/windowEnd are reporting-window calendar bounds, not individual event days; legacy date remains the compatibility/sorting date for such records."
 },
 "servers": [
  {
   "url": "https://droneincidents.com"
  }
 ],
 "paths": {
  "/api/v1/incidents.json": {
   "get": {
    "summary": "All published dossiers",
    "description": "Each dossier separates three claims: drone presence, impact and attribution, each with its own evidence state and supporting sources. 'reported' means a source describes the claim without sufficient identification evidence; claims by parties to a conflict are never 'confirmed' on their own. Counts reflect dossiers in this curated archive, not all incidents worldwide. windowStart/windowEnd are reporting-window calendar bounds, not individual event days; legacy date remains the compatibility/sorting date for such records.",
    "responses": {
     "200": {
      "description": "JSON"
     }
    }
   }
  },
  "/api/v1/incidents.geojson": {
   "get": {
    "summary": "Coarse current dossier points",
    "description": "Coordinates are public dossier coordinates rounded to a 0.1-degree grid, not exact incident sites or trajectories. Grid rounding is not a confidence radius. Null geometry means no valid dossier coordinates; display reference points are never substituted for incident locations. Calendar dates/windows retain their original meaning. This is the DroneLedger archive, not a worldwide incident census. Unknown status is not a negative finding.",
    "responses": {
     "200": {
      "description": "JSON"
     }
    }
   }
  },
  "/api/v1/incidents/{id}.json": {
   "get": {
    "summary": "One dossier by id",
    "description": "Includes sources, timeline, history and citation.",
    "responses": {
     "200": {
      "description": "JSON"
     }
    }
   }
  },
  "/api/v1/drone-types.json": {
   "get": {
    "summary": "Drone type catalogue",
    "description": "Manufacturer, origin, operators, published unit-cost estimates with sources.",
    "responses": {
     "200": {
      "description": "JSON"
     }
    }
   }
  },
  "/api/v1/drone-profiles.json": {
   "get": {
    "summary": "Source-bound research profiles",
    "description": "All five languages, observation bounds, sources and disjoint model/family archive counts. Rebuilt per release.",
    "responses": {
     "200": {
      "description": "JSON",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "/api/v1/schemas/drone-profiles.schema.json"
        }
       }
      }
     }
    },
    "externalDocs": {
     "description": "Release changelog and compatibility",
     "url": "https://droneincidents.com/data/drone-profiles-changelog.json"
    }
   }
  },
  "/api/v1/drone-profiles/{id}.json": {
   "get": {
    "summary": "One source-bound research profile",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Profile, research edition, source observations and archive links.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "/api/v1/schemas/drone-profile.schema.json"
        }
       }
      }
     },
     "404": {
      "description": "Unknown profile"
     }
    },
    "externalDocs": {
     "description": "Release changelog and compatibility",
     "url": "https://droneincidents.com/data/drone-profiles-changelog.json"
    }
   }
  },
  "/data/drone-observations.csv": {
   "get": {
    "summary": "Source-bound observations CSV",
    "description": "One row per observation; empty bounds are unknown, not zero. Source IDs and URLs are JSON arrays. Text cells with spreadsheet formula prefixes are apostrophe-prefixed.",
    "responses": {
     "200": {
      "description": "UTF-8 CSV, one row per source observation",
      "content": {
       "text/csv": {
        "schema": {
         "type": "string"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/trends.json": {
   "get": {
    "summary": "Counts per period",
    "description": "Dossiers by compatibility/sorting date compared with the previous period of the same length; reporting windows count once, never once per covered day.",
    "responses": {
     "200": {
      "description": "JSON"
     }
    }
   }
  },
  "/mcp": {
   "post": {
    "summary": "Model Context Protocol endpoint (Streamable HTTP, JSON-RPC 2.0)",
    "description": "Read-only tools: search_incidents, get_incident, get_trends, list_drone_types, get_drone_type, get_methodology.",
    "responses": {
     "200": {
      "description": "JSON-RPC response"
     }
    }
   }
  }
 }
}