API-referens
En kortfattad referens för GeoPilots publika API – varje endpoint nedan finns under /api/v1/public på domänen för din GeoPilot-installation och autentiseras med en API-nyckel i stället för en sessionskaka.
Hur ED-269 och ED-318 skiljer sig åt, fält för fält: läs guiden. →
API för flygförbudszoner för drönare: kom igång →
Så konverterar du geozoner i ED-269 och ED-318 till GeoJSON eller KML →
Maskinläsbar: OpenAPI 3.1-beskrivningen →
Ändringslogg
Vad som har ändrats i det publika API:et, nyaste först. En ändring markeras som Bakåtinkompatibel endast när en befintlig, korrekt utformad begäran nu beter sig annorlunda; allt annat är tillägg eller rättningar.
Konfliktkontroller anger nu vilka källor de utelämnat
Svar från POST /restrictions/intersect innehåller en ny array, excludedSources: varje källa som inte är licensierad för API:et vars restriktioner formen också berör, med ett antal men aldrig själva restriktionerna. Tidigare gav en kontroll i ett sådant land total: 0, vilket såg ut som ett fritt område. Varje konflikt har också sourceAttribution, källans erkännande, som CC BY-data kräver att du visar.
OpenAPI-beskrivning och API-katalog publicerade
Det publika API:et beskrivs nu som OpenAPI 3.1 på /api/v1/public/openapi.json, genererad från samma scheman som API:et validerar begäranden med, och listad i en RFC 9727-katalog på /.well-known/api-catalog. En hälsokontroll, GET /api/v1/public/health, svarar utan nyckel. Ingen befintlig begäran beter sig annorlunda.
ED-318-konverteringar rättade mot två riktiga dataflöden
ED-318-kodeken hade byggts utifrån det publicerade schemat utan något riktigt dataflöde att kontrollera mot. Den är nu verifierad direkt mot faktiska exporter, och flera fältmappningar var fel: stavningen av värdet för tillstånd, var höjden anges (på geometrin, inte i egenskaperna) och hur geometrin för en zon med flera volymer representeras. Varje konvertering till eller från ED-318 – ed269-ed318, kml-ed318, geojson-ed318 och deras omvända riktningar – kan ge annan, rättad utdata för ett riktigt ED-318-dokument jämfört med före rättningen.
Skaffa en nyckel
API-åtkomst är en separat produkt från kartabonnemanget, faktureras för sig och fungerar som självbetjäning när ditt konto har den.
Ny här? Prenumerera på API-åtkomst
Vill du prova innan du köper, eller behöver du en anpassad anropsgräns? Ansök om åtkomst
Prenumererar du redan? Skapa en nyckel från din profil – namnge den, välj bara de behörigheter du behöver och kopiera den råa nyckeln när den visas, eftersom den bara visas en gång. Hantera API-nycklar
Autentisering
Varje begäran bär din nyckel som en bearer-token.
Authorization: Bearer <your-api-key>Två fellägen särskiljs:
- Saknad, felformaterad, okänd, återkallad eller utgången nyckel – 401 Unauthorized.
- En giltig nyckel vars ägare inte längre har API-åtkomst (prenumerationen uppsagd eller utgången) – 403 Forbidden.
- En giltig nyckel som saknar den behörighet som en endpoint kräver – 403 Forbidden, med den saknade behörigheten angiven.
Behörigheter
Varje nyckel skapas med en eller flera behörigheter (scopes). En begäran behöver den behörighet som dess endpoint kräver, oavsett om kontot över huvud taget har API-åtkomst.
- RESTRICTIONS_READ
- Läs data om luftrumsrestriktioner – listor, punkt- och radiesökningar och uppslag av enskilda restriktioner.
- CONFLICT_CHECK
- Kontrollera ett ritat område eller en rutt mot aktiva restriktioner.
- CONVERT_ED269
- Konvertera mellan ED-269 och GeoJSON.
- CONVERT_KML
- Konvertera mellan KML och alla andra format som stöds.
- CONVERT_ED318
- Konvertera mellan ED-318 och alla andra format som stöds.
Anropsgränser
Varje kategori nedan räknas per nyckel över ett rullande fönster på en minut. Varje svar innehåller X-RateLimit-Limit och X-RateLimit-Remaining; ett 429-svar innehåller även Retry-After.
- Konvertering
- /convert/ed269-to-geojson, /convert/geojson-to-ed269, /convert/:from-:to
- 60 anrop per minut (standard).
- Läsning av restriktioner
- /restrictions, /at, /near, /:id
- 60 anrop och 200 MB per minut (standard).
- Konfliktkontroll
- /restrictions/intersect
- 60 anrop per minut (standard).
Behöver du en högre gräns för en viss integration? Ansök om åtkomst
Fel
Varje fel – från varje endpoint – har samma JSON-form (RFC 9457 "problem details"), så att din klient kan hantera en enda felväg i stället för att gissa per endpoint.
{
"type": "https://geopilot.space/problems/forbidden",
"title": "Insufficient permissions",
"status": 403,
"detail": "This API key does not have the CONFLICT_CHECK scope.",
"instance": "/api/v1/public/restrictions/intersect",
"requestId": "b3f2b8b0-8b7a-4c9b-9c9a-2f6a7a2b6b34"
}errors listar valideringsfel på fältnivå och förekommer bara vid 400 eller 422.
- 400
- Begärans body, query eller parametrar klarade inte valideringen.
- 401
- Saknad, felformaterad, okänd, återkallad eller utgången nyckel.
- 403
- Nyckelns ägare har inte längre aktiv API-åtkomst, eller så saknar nyckeln den behörighet som endpointen kräver.
- 404
- Den begärda resursen finns inte eller är inte synlig för din nyckel – se licensanmärkningen ovan.
- 422
- Den inskickade geometrin är ogiltig eller för komplex för att bedömas.
- 429
- Anropsgränsen har överskridits. Försök igen efter det antal sekunder som anges i Retry-After.
Länder som API:et omfattar
API:et levererar bara data från källor vars utgivare tillåter kommersiell återanvändning och vidarespridning, så det omfattar färre länder än kartan. På andra håll returnerar läsningar av restriktioner ingenting, och en konfliktkontroll listar de källor den utelämnat under excludedSources i stället för att rapportera området som fritt.
- Ingår:
- Australien, Finland, Luxemburg, Norge, Schweiz, USA
- Endast på kartan (villkor för återanvändning ej fastställda):
- Lettland, Portugal, Rumänien
Endpoints
Läsning av restriktioner returnerar bara data från källor vars licens tillåter kommersiell användning och vidarespridning. En källa som undantas av det skälet beter sig som om den inte fanns: GET /restrictions/:id returnerar 404 för den precis som för ett okänt id. Konfliktkontrollen är det enda undantaget: den namnger det som utelämnats under excludedSources, så att ett undantaget land aldrig rapporteras som fritt.
GET /api/v1/public/restrictions
Scope: RESTRICTIONS_READ
Lista restriktioner, filtrerbara efter land, omgivande rektangel, typ, verkan med mera.
curl "https://geopilot.space/api/v1/public/restrictions?country=FI" \
-H "Authorization: Bearer $GEOPILOT_API_KEY"Svar
{
"meta": {
"freshness": {
"state": "FRESH",
"sources": [{ "sourceId": "fi-traficom-zones", "state": "FRESH", "lastSyncedAt": "2026-09-01T09:00:00.000Z" }],
"generatedAt": "2026-09-01T12:00:00.000Z"
},
"pagination": { "limit": 1000, "nextCursor": null, "returned": 214, "truncated": false },
"detail": "FULL",
"attributions": ["Source: Finnish Transport and Communications Agency Traficom, licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Modified by GeoPilot: geometry simplified, zones classified."],
"sources": [
{
"id": "fi-traficom-zones",
"providerKey": "fi-traficom-zones",
"name": "Traficom UAS geographical zones",
"attribution": "Source: Finnish Transport and Communications Agency Traficom, licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Modified by GeoPilot: geometry simplified, zones classified.",
"sourceTimestamp": "2026-09-01T06:00:00.000Z",
"lastSyncedAt": "2026-09-01T09:00:00.000Z"
}
],
"authorities": [{ "id": "traficom", "name": "Traficom", "phone": null, "email": null, "website": null }],
"evaluatedAt": "2026-09-01T12:00:00.000Z",
"disclaimer": "GeoPilot is an independent planning tool and is not affiliated with or endorsed by any aviation authority. It shows data published by national authorities, which may be incomplete, out of date or simplified in processing, and it does not authorize any flight. Always check the authority's own publication and current NOTAMs before flying."
},
"geojson": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": "3f1b2c4d-0000-4000-8000-000000000000",
"geometry": { "type": "Polygon", "coordinates": [[[24.90,60.29],[25.00,60.29],[25.00,60.35],[24.90,60.35],[24.90,60.29]]] },
"properties": {
"id": "3f1b2c4d-0000-4000-8000-000000000000",
"externalId": "EF-UAS-EXAMPLE",
"countryIso2": "FI",
"name": "Example aerodrome UAS zone",
"description": null,
"type": "RESTRICTED_AREA",
"effect": "AUTHORIZATION_REQUIRED",
"effectBasis": "PROVIDER_RULE",
"status": "ACTIVE",
"lowerLimit": { "meters": 0, "datum": "GND", "raw": "GND", "parsed": true },
"upperLimit": { "meters": 1500, "datum": "AMSL", "raw": "1500 AMSL", "parsed": true },
"activationStart": null,
"activationEnd": null,
"schedule": null,
"activeNow": true,
"sourceId": "fi-traficom-zones",
"authorityId": "traficom",
"firstSeenAt": "2025-01-15T00:00:00.000Z",
"lastSeenAt": "2026-09-01T09:00:00.000Z"
}
}
]
}
}GET /api/v1/public/restrictions/at
Scope: RESTRICTIONS_READ
Alla restriktioner i API:ets data som överlappar på en punkt.
curl "https://geopilot.space/api/v1/public/restrictions/at?lat=60.32&lon=24.95" \
-H "Authorization: Bearer $GEOPILOT_API_KEY"Svar
{
"meta": { "…": "same shape as GET /restrictions, above" },
"geojson": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": "3f1b2c4d-0000-4000-8000-000000000000",
"geometry": { "type": "Polygon", "coordinates": [[[24.90,60.29],[25.00,60.29],[25.00,60.35],[24.90,60.35],[24.90,60.29]]] },
"properties": {
"id": "3f1b2c4d-0000-4000-8000-000000000000",
"externalId": "EF-UAS-EXAMPLE",
"name": "Example aerodrome UAS zone",
"type": "RESTRICTED_AREA",
"effect": "AUTHORIZATION_REQUIRED",
"effectBasis": "PROVIDER_RULE",
"status": "ACTIVE",
"activeNow": true,
"sourceId": "fi-traficom-zones",
"authorityId": "traficom"
}
}
]
}
}GET /api/v1/public/restrictions/near
Scope: RESTRICTIONS_READ
Restriktioner inom en radie från en punkt, närmaste först.
curl "https://geopilot.space/api/v1/public/restrictions/near?lat=60.32&lon=24.95&radiusMeters=5000" \
-H "Authorization: Bearer $GEOPILOT_API_KEY"Svar
{
"meta": { "…": "same shape as GET /restrictions, above" },
"geojson": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": "3f1b2c4d-0000-4000-8000-000000000000",
"geometry": { "type": "Polygon", "coordinates": [[[24.90,60.29],[25.00,60.29],[25.00,60.35],[24.90,60.35],[24.90,60.29]]] },
"properties": {
"id": "3f1b2c4d-0000-4000-8000-000000000000",
"externalId": "EF-UAS-EXAMPLE",
"name": "Example aerodrome UAS zone",
"type": "RESTRICTED_AREA",
"effect": "AUTHORIZATION_REQUIRED",
"effectBasis": "PROVIDER_RULE",
"status": "ACTIVE",
"activeNow": true,
"sourceId": "fi-traficom-zones",
"authorityId": "traficom",
"distanceMeters": 842.6
}
}
]
}
}GET /api/v1/public/restrictions/:id
Scope: RESTRICTIONS_READ
En restriktion via id.
curl "https://geopilot.space/api/v1/public/restrictions/3f1b2c4d-0000-4000-8000-000000000000" \
-H "Authorization: Bearer $GEOPILOT_API_KEY"Svar
{
"type": "Feature",
"id": "3f1b2c4d-0000-4000-8000-000000000000",
"geometry": { "type": "Polygon", "coordinates": [[[24.90,60.29],[25.00,60.29],[25.00,60.35],[24.90,60.35],[24.90,60.29]]] },
"properties": {
"id": "3f1b2c4d-0000-4000-8000-000000000000",
"externalId": "EF-UAS-EXAMPLE",
"countryIso2": "FI",
"name": "Example aerodrome UAS zone",
"description": null,
"type": "RESTRICTED_AREA",
"effect": "AUTHORIZATION_REQUIRED",
"effectBasis": "PROVIDER_RULE",
"status": "ACTIVE",
"lowerLimit": { "meters": 0, "datum": "GND", "raw": "GND", "parsed": true },
"upperLimit": { "meters": 1500, "datum": "AMSL", "raw": "1500 AMSL", "parsed": true },
"activationStart": null,
"activationEnd": null,
"schedule": null,
"activeNow": true,
"authority": { "id": "traficom", "name": "Traficom", "phone": null, "email": null, "website": null },
"source": {
"id": "fi-traficom-zones",
"providerKey": "fi-traficom-zones",
"name": "Traficom UAS geographical zones",
"attribution": "Source: Finnish Transport and Communications Agency Traficom, licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Modified by GeoPilot: geometry simplified, zones classified.",
"sourceTimestamp": "2026-09-01T06:00:00.000Z",
"lastSyncedAt": "2026-09-01T09:00:00.000Z"
},
"raw": { "…": "the provider's original record, preserved verbatim" },
"firstSeenAt": "2025-01-15T00:00:00.000Z",
"lastSeenAt": "2026-09-01T09:00:00.000Z"
}
}POST /api/v1/public/restrictions/intersect
Scope: CONFLICT_CHECK
Kontrollera en polygon eller rutt mot aktiva restriktioner och rapportera vad den berör.
curl -X POST "https://geopilot.space/api/v1/public/restrictions/intersect" \
-H "Authorization: Bearer $GEOPILOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"geometry": {
"type": "Polygon",
"coordinates": [[[24.90,60.29],[25.00,60.29],[25.00,60.35],[24.90,60.35],[24.90,60.29]]]
}
}'Svar
{
"conflicts": [
{
"restrictionId": "3f1b2c4d-0000-4000-8000-000000000000",
"externalId": "EF-UAS-EXAMPLE",
"name": "Example aerodrome UAS zone",
"type": "RESTRICTED_AREA",
"effect": "AUTHORIZATION_REQUIRED",
"effectBasis": "PROVIDER_RULE",
"authorityName": "Traficom",
"intersectionAreaM2": 482310.5,
"intersectionRatio": 0.61,
"activeAtQueryTime": true,
"sourceName": "Traficom UAS geographical zones",
"sourceAttribution": "Source: Finnish Transport and Communications Agency Traficom, licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Modified by GeoPilot: geometry simplified, zones classified."
}
],
"summary": { "total": 1, "prohibited": 0, "authorizationRequired": 1, "coordinationRequired": 0, "informationOnly": 0, "unknown": 0 },
"evaluatedAt": "2026-09-01T12:00:00.000Z",
"disclaimer": "GeoPilot is an independent planning tool and is not affiliated with or endorsed by any aviation authority. It shows data published by national authorities, which may be incomplete, out of date or simplified in processing, and it does not authorize any flight. Always check the authority's own publication and current NOTAMs before flying.",
"excludedSources": []
}POST /api/v1/public/convert/ed269-to-geojson
Scope: CONVERT_ED269
Konvertera ett publicerat ED-269-dokument till en GeoJSON FeatureCollection.
curl -X POST "https://geopilot.space/api/v1/public/convert/ed269-to-geojson" \
-H "Authorization: Bearer $GEOPILOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "document": { "UASZoneVersion": { "...": "the published ED-269 document" } } }'Svar
{
"geojson": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": { "type": "Polygon", "coordinates": [[[26.05,44.40],[26.15,44.40],[26.15,44.47],[26.05,44.47],[26.05,44.40]]] },
"properties": {
"externalId": "ROU-001",
"name": "Example zone",
"description": null,
"type": "OTHER",
"effect": "PROHIBITED",
"effectBasis": "PROVIDER_RULE",
"lowerLimit": { "meters": 0, "datum": "AGL", "display": "0 m AGL" },
"upperLimit": { "meters": 120, "datum": "AGL", "display": "120 m AGL" },
"activationStart": null,
"activationEnd": null,
"schedule": null,
"authorityHint": null
}
}
]
},
"errors": [],
"totalFeatures": 1
}POST /api/v1/public/convert/geojson-to-ed269
Scope: CONVERT_ED269
Konvertera en GeoJSON Feature eller FeatureCollection till ett ED-269-dokument.
curl -X POST "https://geopilot.space/api/v1/public/convert/geojson-to-ed269" \
-H "Authorization: Bearer $GEOPILOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "Feature",
"geometry": { "type": "Polygon", "coordinates": [[[26.05,44.40],[26.15,44.40],[26.15,44.47],[26.05,44.47],[26.05,44.40]]] },
"properties": { "name": "Example zone", "effect": "PROHIBITED" }
}'Svar
{
"document": {
"title": "GeoPilot ED-269 export",
"description": "Generated by GeoPilot's GeoJSON → ED-269 conversion endpoint.",
"features": [
{
"name": "Example zone",
"type": "CUSTOMIZED",
"restriction": "PROHIBITED",
"applicability": [],
"zoneAuthority": [],
"geometry": [
{
"uomDimensions": "M",
"horizontalProjection": {
"type": "Polygon",
"coordinates": [[[26.05,44.40],[26.15,44.40],[26.15,44.47],[26.05,44.47],[26.05,44.40]]]
}
}
]
}
]
},
"warnings": []
}Endpoints — /convert/:from-:to
Utöver de två ED-269⇄GeoJSON-endpoints ovan konverterar POST /convert/:from-:to mellan två valfria av ED-269, ED-318, KML och GeoJSON – tolv riktade par totalt, listade nedan med den eller de behörigheter som var och en kräver. ed269-geojson och geojson-ed269 under den här korta URL:en beter sig identiskt med, och finns parallellt med, de två dedikerade endpoints ovan; båda formerna fortsätter att fungera.
| from | to | scope(s) required |
|---|---|---|
| ed269 | ed318 | CONVERT_ED269 + CONVERT_ED318 |
| ed269 | kml | CONVERT_ED269 + CONVERT_KML |
| ed269 | geojson | CONVERT_ED269 |
| ed318 | ed269 | CONVERT_ED318 + CONVERT_ED269 |
| ed318 | kml | CONVERT_ED318 + CONVERT_KML |
| ed318 | geojson | CONVERT_ED318 |
| kml | ed269 | CONVERT_KML + CONVERT_ED269 |
| kml | ed318 | CONVERT_KML + CONVERT_ED318 |
| kml | geojson | CONVERT_KML |
| geojson | ed269 | CONVERT_ED269 |
| geojson | ed318 | CONVERT_ED318 |
| geojson | kml | CONVERT_KML |
POST /api/v1/public/convert/ed269-kml
Scope: CONVERT_ED269 + CONVERT_KML
Konvertera ett publicerat ED-269-dokument till ett KML-dokument.
curl -X POST "https://geopilot.space/api/v1/public/convert/ed269-kml" \
-H "Authorization: Bearer $GEOPILOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "document": { "title": "t", "features": [ { "identifier": "ROU-001", "name": "Example zone", "restriction": "PROHIBITED", "geometry": [ { "uomDimensions": "M", "horizontalProjection": { "type": "Polygon", "coordinates": [[[26.05,44.40],[26.15,44.40],[26.15,44.47],[26.05,44.47],[26.05,44.40]]] } } ] } ] } }'Svar
{
"document": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n <Document>\n <Placemark>\n <name>Example zone</name>\n <ExtendedData>\n <Data name=\"effect\"><value>PROHIBITED</value></Data>\n </ExtendedData>\n <Polygon>\n <altitudeMode>clampToGround</altitudeMode>\n <outerBoundaryIs><LinearRing><coordinates>26.05,44.40,0 26.15,44.40,0 26.15,44.47,0 26.05,44.47,0 26.05,44.40,0</coordinates></LinearRing></outerBoundaryIs>\n </Polygon>\n </Placemark>\n </Document>\n</kml>",
"errors": [],
"totalFeatures": 1,
"warnings": []
}POST /api/v1/public/convert/kml-ed318
Scope: CONVERT_KML + CONVERT_ED318
Konvertera ett KML-dokument till ett ED-318-dokument.
curl -X POST "https://geopilot.space/api/v1/public/convert/kml-ed318" \
-H "Authorization: Bearer $GEOPILOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "document": "<kml><Document><Placemark><name>Example zone</name><ExtendedData><Data name=\"effect\"><value>PROHIBITED</value></Data></ExtendedData><Polygon><outerBoundaryIs><LinearRing><coordinates>26.05,44.40,0 26.15,44.40,0 26.15,44.47,0 26.05,44.47,0 26.05,44.40,0</coordinates></LinearRing></outerBoundaryIs></Polygon></Placemark></Document></kml>" }'Svar
{
"document": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": { "type": "Polygon", "coordinates": [[[26.05,44.40],[26.15,44.40],[26.15,44.47],[26.05,44.47],[26.05,44.40]]] },
"properties": {
"name": "Example zone",
"type": "CUSTOMIZED",
"restriction": "PROHIBITED",
"applicability": [],
"zoneAuthority": [],
"uomDimensions": "M"
}
}
]
},
"errors": [],
"totalFeatures": 1,
"warnings": []
}