Examples

Practical request/response snippets for common tasks

Replace dc_your_api_key_here with your actual key. All examples use JSON over HTTPS.

Submit a Flight Request (cURL)

JSON
curl -X POST "https://droneclearance.nl/api/flight-requests" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: dc_your_api_key_here" \
  -d '{
    "operator_name": "John Doe",
    "operator_email": "john@example.com",
    "operator_phone": "+31612345678",
    "operator_company": "Drone Operations BV",
    "operational_authorisation_number": "NL-AUTH-12345",
    "start_time": "2026-02-10T09:00:00Z",
    "end_time": "2026-02-10T11:00:00Z",
    "max_altitude": 120,
    "aircraft_type": "quadcopter",
    "purpose": "Aerial photography for construction",
    "flight_area": {
      "type": "FeatureCollection",
      "features": [{
        "type": "Feature",
        "geometry": { "type": "Polygon",
          "coordinates": [[[5.123,52.456],[5.124,52.456],[5.124,52.457],[5.123,52.457],[5.123,52.456]]]
        },
        "properties": {}
      }]
    }
  }'

Get a Flight Request

JSON
curl -H "X-API-Key: dc_your_api_key_here" \
"https://droneclearance.nl/api/v1/flight-requests/7c9e6679-7425-40de-944b-e07fc1f90ae7?include_geometry=true"

List Requests (filter by date and status)

JSON
curl -H "X-API-Key: dc_your_api_key_here" \
"https://droneclearance.nl/api/flight-requests?from_date=2026-02-01&to_date=2026-02-28&status=Pending&per_page=50&page=1"

Cancel a Request

JSON
curl -X DELETE -H "X-API-Key: dc_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"reason":"Flight no longer required"}' \
"https://droneclearance.nl/api/flight-requests/7c9e6679-7425-40de-944b-e07fc1f90ae7"

Receive Webhooks (example Express.js handler)

JSON
import express from 'express';
const app = express();
app.use(express.json());

app.post('/webhooks/droneclearance', (req, res) => { const sig = req.header('X-Webhook-Signature'); // t=...,v1=... // TODO: verify signature with shared secret (HMAC SHA-256) const event = req.body.event;

if (event === 'status_change') { // handle status update } else if (event === 'cascade_rejection') { // handle cascade rejection info } else if (event === 'review_complete') { // handle group summary } res.sendStatus(200); });

app.listen(3000);