EU AI Act Article 50 โ€” 20 days to seal | Get passport
๐Ÿ‰

DEFONEOS โ€” API Documentation

Complete API reference for the sovereign defence AI platform โ€” v1.0

v1.0 REST+gRPC+WS+MCP
30
MCP Servers
87
REST Endpoints
4
Protocols
100%
SIGIL Logged
OAuth2
Auth

๐Ÿ”Œ Base URLs

EnvironmentBase URLProtocol
Productionhttps://api.defoneos.ukHTTPS / gRPC
Staginghttps://staging-api.defoneos.ukHTTPS / gRPC
Edge (on-prem)http://10.0.0.x:8080HTTP / gRPC
MCP Federationmcp://federation.defoneos.ukMCP (JSON-RPC)
SIGIL Chainhttps://sigil.defoneos.ukREST + WebSocket
Cesium COPwss://cop.defoneos.uk/streamWebSocket

๐Ÿ” Authentication

OAuth 2.0 + JWT (Ed25519)

# Get token curl -X POST https://api.defoneos.uk/auth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "client_credentials", "client_id": "defoneos-client-001", "client_secret": "", "scope": "isr:read swarm:cmd c2:cmd sigil:write" }' # Response { "access_token": "eyJhbGciOiJFZERTQSIs...", "token_type": "Bearer", "expires_in": 3600, "scope": "isr:read swarm:cmd c2:cmd sigil:write" } # Use token curl -H "Authorization: Bearer eyJhbGci..." \ https://api.defoneos.uk/api/v1/isr/sources

Scopes

ScopeDescriptionRBAC Role
isr:readRead ISR data from MCP sourcesAnalyst+
isr:writeWrite sensor data to fusion engineSensor Operator+
swarm:readRead swarm telemetry and statusAnalyst+
swarm:cmdSend commands to drone swarmSwarm Commander+
c2:readRead C2 messages and CoT eventsAnalyst+
c2:cmdSend C2 messages via FreeTAKServerC2 Operator+
sigil:readRead SIGIL audit chainAuditor+
sigil:writeEmit SIGIL entriesSystem/Agent
govern:bftParticipate in BFT council votesCouncil Member
adminFull system administrationAdministrator

๐Ÿ“ก ISR Fusion API

GET/api/v1/isr/sources

List all available ISR sensor sources (30 MCPs)

Response 200: { "sources": [ {"id": "sentinel-hub", "name": "Sentinel Hub", "type": "satellite", "status": "online", "latency_ms": 145}, {"id": "ais-stream", "name": "AIS Maritime", "type": "maritime", "status": "online", "latency_ms": 89}, {"id": "openaq", "name": "OpenAQ Air Quality", "type": "environmental", "status": "online", "latency_ms": 210}, {"id": "gdelt", "name": "GDELT News/OSINT", "type": "osint", "status": "online", "latency_ms": 320}, // ... 30 total ], "total": 30, "online": 30 }
GET/api/v1/isr/fusion/cop

Get current Common Operating Picture โ€” all fused data layers

curl -H "Authorization: Bearer $TOKEN" \ "https://api.defoneos.uk/api/v1/isr/fusion/cop?bbox=53.8,-1.5,53.9,-1.4&layers=all" Response 200: { "timestamp": "2026-07-06T07:00:00Z", "bbox": [53.8, -1.5, 53.9, -1.4], "layers": { "satellite": {"source": "sentinel-hub", "url": "tiles/...", "age_min": 12}, "maritime": {"vessels": 23, "anomalies": 2}, "air_quality": {"pm25": 12.3, "no2": 18.7, "status": "normal"}, "osint": {"events": 5, "sentiment": "neutral"}, "iot": {"sensors": 147, "alerts": 0} }, "anomalies_detected": 2, "sigil_id": "a3f7e2..." }
POST/api/v1/isr/anomaly/detect

Run YOLOv8 detection on submitted imagery or trigger on live feed

curl -X POST -H "Authorization: Bearer $TOKEN" \ -F "image=@recon_photo.jpg" \ -F "model=yolov8-defoneos-v3" \ "https://api.defoneos.uk/api/v1/isr/anomaly/detect" Response 200: { "detections": [ {"class": "vehicle", "confidence": 0.94, "bbox": [120, 85, 200, 160]}, {"class": "person", "confidence": 0.87, "bbox": [340, 120, 380, 210]}, {"class": "structure", "confidence": 0.79, "bbox": [50, 200, 180, 300]} ], "model": "yolov8-defoneos-v3", "inference_ms": 132, "image_hash": "sha256:e1b2...", "sigil_id": "b4c8d1..." }

๐Ÿš Swarm API

GET/api/v1/swarm/status

Get status of all drones in the swarm

POST/api/v1/swarm/launch

Launch a drone swarm mission (requires BFT council approval)

curl -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "mission_type": "isr_recon", "target_grid": "S4", "num_drones": 4, "altitude_m": 120, "duration_min": 30, "geofence": { "type": "polygon", "coordinates": [[53.8,-1.5],[53.9,-1.5],[53.9,-1.4],[53.8,-1.4]] }, "rules_of_engagement": "observe_only" }' \ "https://api.defoneos.uk/api/v1/swarm/launch" Response 202 (Pending BFT): { "mission_id": "msn-2026-0706-001", "status": "bft_pending", "bft_quorum": "23/33 required", "bft_timeout_sec": 30 } Response 200 (Approved): { "mission_id": "msn-2026-0706-001", "status": "launched", "drones": [ {"id": "drn-001", "position": [53.85,-1.45,0], "battery": 100}, {"id": "drn-002", "position": [53.85,-1.46,0], "battery": 100}, {"id": "drn-003", "position": [53.85,-1.44,0], "battery": 100}, {"id": "drn-004", "position": [53.86,-1.45,0], "battery": 100} ], "sigil_id": "c5d9e2..." }
GET/api/v1/swarm/telemetry/{mission_id}

Stream real-time telemetry from active mission (Server-Sent Events)

curl -N -H "Authorization: Bearer $TOKEN" \ "https://api.defoneos.uk/api/v1/swarm/telemetry/msn-2026-0706-001" data: {"drone":"drn-001","lat":53.852,"lon":-1.451,"alt":120,"speed":15.2,"battery":87,"heading":45} data: {"drone":"drn-002","lat":53.853,"lon":-1.462,"alt":121,"speed":14.8,"battery":86,"heading":47} data: {"drone":"drn-003","lat":53.854,"lon":-1.443,"alt":119,"speed":15.5,"battery":88,"heading":43} data: {"event":"target_detected","drone":"drn-001","class":"vehicle","confidence":0.92,"bbox":[...]}
POST/api/v1/swarm/rtl/{mission_id}

Issue Return-to-Launch command to all drones in mission

๐Ÿ“ป C2 API (FreeTAKServer)

GET/api/v1/c2/cot

Get Cursor on Target events

POST/api/v1/c2/cot/publish

Publish a CoT event to the C2 backbone

curl -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "event_type": "a-f-A-M", // Friend, Air, Military "uid": "DRN-001", "point": {"lat": 53.852, "lon": -1.451, "ce": 5.0, "le": 10.0, "hae": 120.0}, "detail": {"contact": {"callsign": "EAGLE-1"}}, "remarks": "ISR patrol grid S4" }' \ "https://api.defoneos.uk/api/v1/c2/cot/publish"

๐Ÿ“œ SIGIL Audit Chain API

GET/api/v1/sigil/events

Query the SIGIL audit chain

curl "https://api.defoneos.uk/api/v1/sigil/events?hours=24&actor=jeeves&action=mcp_federation_call" Response 200: { "events": [ {"ts":"2026-07-06T07:15:00Z","actor":"jeeves","action":"page_deploy","digest":"ceaed9d4...","sig":"cef92dd2..."}, {"ts":"2026-07-06T06:45:00Z","actor":"jeeves","action":"page_deploy","digest":"ca4ff7f3...","sig":"5f6210fb..."}, // ... ], "total": 847, "chain_valid": true }
GET/api/v1/sigil/verify

Verify the entire SIGIL chain integrity

curl "https://api.defoneos.uk/api/v1/sigil/verify" Response 200: { "chain_valid": true, "entries_checked": 15432, "first_entry": "2026-07-04T17:12:00Z", "last_entry": "2026-07-06T07:15:00Z", "hash_algorithm": "SHA-256", "signature_algorithm": "Ed25519" }

๐Ÿ›๏ธ Governance (BFT Council) API

GET/api/v1/govern/bft/status

Get BFT council status โ€” active agents, quorum, pending votes

POST/api/v1/govern/bft/vote

Cast a vote on a pending proposal (requires govern:bft scope)

curl -X POST -H "Authorization: Bearer $TOKEN" \ -d '{"proposal_id": "prop-042", "vote": "for", "reasoning": "Mission within ROE"}' \ "https://api.defoneos.uk/api/v1/govern/bft/vote"
GET/api/v1/govern/jsp936/report/{model_id}

Get auto-generated JSP 936 compliance report for a deployed AI model

๐Ÿ”Œ MCP Federation (JSON-RPC)

DEFONEOS uses the Model Context Protocol (MCP) for all sensor integrations. Each MCP server exposes tools via JSON-RPC 2.0.

# List available MCP tools curl -X POST -H "Authorization: Bearer $TOKEN" \ -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' \ "mcp://federation.defoneos.uk/sentinel-hub-mcp" Response: {"jsonrpc":"2.0","id":1,"result":{ "tools":[ {"name":"get_satellite_imagery","description":"Get Sentinel-2 imagery for bbox","inputSchema":{ "type":"object","properties":{ "bbox":{"type":"array","items":{"type":"number"},"description":"[minLat,minLon,maxLat,maxLon]"}, "date":{"type":"string","description":"YYYY-MM-DD"}, "max_cloud_cover":{"type":"number","default":20} } }}, {"name":"get_cloud_mask","description":"Get cloud mask layer"}, {"name":"detect_changes","description":"Detect changes between two dates"} ] }} # Call a tool curl -X POST -H "Authorization: Bearer $TOKEN" \ -d '{"jsonrpc":"2.0","method":"tools/call","params":{ "name":"get_satellite_imagery", "arguments":{"bbox":[53.8,-1.5,53.9,-1.4],"date":"2026-07-06"} },"id":2}' \ "mcp://federation.defoneos.uk/sentinel-hub-mcp"

Available MCP Servers (30)

ServerCategoryToolsStatus
sentinel-hub-mcpSatellite4ONLINE
os-opendata-mcpGeospatial6ONLINE
data-gov-uk-mcpGovernment5ONLINE
companies-house-mcpBusiness3ONLINE
ons-statistics-mcpStatistics4ONLINE
gdelt-news-mcpOSINT5ONLINE
openaq-air-mcpEnvironmental3ONLINE
aisstream-maritime-mcpMaritime4ONLINE
rtsp-camera-mcpVideo3ONLINE
mqtt-bridge-mcpIoT4ONLINE
+ 20 more serversโ€”ALL ONLINE

๐Ÿ“Š WebSocket Streams

StreamURLProtocolData
COP Live Updateswss://cop.defoneos.uk/streamWebSocketFused ISR data layers
Swarm Telemetrywss://swarm.defoneos.uk/telemetryWebSocketPer-drone GPS/alt/battery/speed
SIGIL Feedwss://sigil.defoneos.uk/feedWebSocketReal-time audit events
C2 CoT Feedwss://c2.defoneos.uk/cotWebSocketCursor on Target events
BFT Voteswss://govern.defoneos.uk/votesWebSocketLive council deliberations
Alertswss://alerts.defoneos.uk/wsWebSocketP0-P3 system alerts

๐Ÿ“ˆ Rate Limits

TierReq/minConcurrent WSMCP calls/hrMonthly
Free (Citizen)602100ยฃ0
Pro (MEOK)6002010,000ยฃ49
Defence (MOD)6,000200UnlimitedContract
EnterpriseCustomCustomCustomCustom

๐Ÿ› ๏ธ SDKs

# Python SDK pip install defoneos-sdk from defoneos import DEFONEOSClient client = DEFONEOSClient(token="your-jwt-token") # Get COP cop = client.isr.get_cop(bbox=[53.8, -1.5, 53.9, -1.4]) print(f"Vessels: {cop.layers.maritime.vessels}") # Launch swarm mission = client.swarm.launch( mission_type="isr_recon", num_drones=4, geofence={"type":"polygon","coordinates":[[53.8,-1.5],[53.9,-1.5],[53.9,-1.4],[53.8,-1.4]]} ) print(f"Mission {mission.id} status: {mission.status}") # TypeScript SDK npm install @defoneos/sdk import { DEFONEOS } from '@defoneos/sdk'; const client = new DEFONEOS({ token: 'your-jwt' }); const cop = await client.isr.getCOP({ bbox: [53.8,-1.5,53.9,-1.4] });