Sari la conținutul principal
GeoPilot

Documentație API

O documentație minimală pentru API-ul public GeoPilot — fiecare punct final de mai jos este montat la /api/v1/public pe domeniul instanței tale GeoPilot, autentificat printr-o cheie API, nu printr-un cookie de sesiune.

Cum diferă ED-269 și ED-318, câmp cu câmp: citește ghidul. →

API pentru zonele de zbor ale dronelor: primii pași →

Cum convertești zonele ED-269 și ED-318 în GeoJSON sau KML →

Pentru mașini: descrierea OpenAPI 3.1 →

Istoric modificări

Ce s-a schimbat în API-ul public, de la cel mai recent la cel mai vechi. O modificare este marcată Breaking doar atunci când o cerere existentă, corect formată, se comportă altfel decât înainte; restul sunt adăugări sau corecturi.

Adăugat

Verificările conflictelor spun acum ce surse au omis

Răspunsurile POST /restrictions/intersect conțin un nou tablou excludedSources: fiecare sursă nelicențiată pentru API ale cărei restricții sunt atinse de formă, cu un număr, dar niciodată restricțiile în sine. Înainte, o verificare într-o astfel de țară returna total: 0, ceea ce părea o zonă liberă. Fiecare conflict conține și sourceAttribution, mențiunea sursei, pe care datele CC BY îți cer să o afișezi.

Adăugat

Descrierea OpenAPI și catalogul API publicate

API-ul public este acum descris în format OpenAPI 3.1 la /api/v1/public/openapi.json, generat din aceleași scheme cu care API-ul validează cererile, și listat într-un catalog RFC 9727 la /.well-known/api-catalog. Un endpoint de disponibilitate, GET /api/v1/public/health, răspunde fără cheie. Nicio cerere existentă nu se comportă diferit.

Corectat

Conversiile ED-318 au fost corectate față de două fluxuri reale

Codecul ED-318 fusese construit după schema publicată, fără un flux real cu care să fie verificat. Acum este verificat direct față de exporturile reale ale Transportstyrelsen (Suedia) și ANAC (Portugalia), iar mai multe corespondențe de câmpuri erau greșite: modul de scriere a valorii de autorizare, locul unde este transmisă altitudinea (pe geometrie, nu pe properties) și modul în care este reprezentată geometria unei zone cu mai multe volume. Orice conversie către sau de la ED-318 — ed269-ed318, kml-ed318, geojson-ed318 și sensurile inverse — poate returna, pentru un document ED-318 real, un rezultat diferit și corectat față de înainte de această remediere.

Obținerea unei chei

Accesul API este un produs separat de abonamentul pentru hartă, facturat independent și disponibil prin auto-servire imediat ce contul tău îl deține.

Ești nou aici? Abonează-te la acces API

Vrei să încerci înainte de a cumpăra sau ai nevoie de o limită de rată personalizată? Solicită acces

Ești deja abonat? Creează o cheie din profilul tău — denumește-o, alege doar permisiunile de care ai nevoie și copiază cheia brută atunci când este afișată, deoarece este afișată o singură dată. Gestionează cheile API

Autentificare

Fiecare cerere transmite cheia ta ca token bearer.

Authorization: Bearer <your-api-key>

Sunt distinse două stări de eșec:

  • Cheie lipsă, malformată, necunoscută, revocată sau expirată — 401 Unauthorized.
  • O cheie validă al cărei acces API al proprietarului a expirat (abonament anulat sau expirat) — 403 Forbidden.
  • O cheie validă care nu deține permisiunea cerută de un punct final — 403 Forbidden, cu numele permisiunii lipsă.

Permisiuni

Fiecare cheie este creată cu una sau mai multe permisiuni. O cerere are nevoie de permisiunea cerută de punctul final respectiv, indiferent dacă acel cont are acces API în general.

RESTRICTIONS_READ
Citește date despre restricțiile de spațiu aerian — listă, punct, rază și căutare după o singură restricție.
CONFLICT_CHECK
Verifică o zonă sau o rută desenată față de restricțiile active.
CONVERT_ED269
Convertește între ED-269 și GeoJSON.
CONVERT_KML
Convertește între KML și oricare alt format acceptat.
CONVERT_ED318
Convertește între ED-318 și oricare alt format acceptat.

Limite de rată

Fiecare grup de mai jos este contorizat per cheie, pe o fereastră glisantă de un minut. Fiecare răspuns include X-RateLimit-Limit și X-RateLimit-Remaining; un răspuns 429 include și Retry-After.

Conversie
/convert/ed269-to-geojson, /convert/geojson-to-ed269, /convert/:from-:to
60 de cereri pe minut (implicit).
Citiri de restricții
/restrictions, /at, /near, /:id
60 de cereri și 200 MB pe minut (implicit).
Verificare de conflict
/restrictions/intersect
60 de cereri pe minut (implicit).

Ai nevoie de o limită mai mare pentru o integrare anume? Solicită acces

Erori

Fiecare eșec — de la orice punct final — are aceeași formă JSON (RFC 9457, „problem details”), astfel încât clientul tău poate trata un singur tip de eroare în loc să ghicească pentru fiecare punct final.

{
  "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 listează erorile de validare la nivel de câmp și apare doar pentru un răspuns 400 sau 422.

400
Corpul cererii, parametrii de interogare sau parametrii de rută nu au trecut validarea.
401
Cheie lipsă, malformată, necunoscută, revocată sau expirată.
403
Proprietarul cheii nu mai are acces API activ, sau cheia nu are permisiunea cerută de punctul final.
404
Resursa cerută nu există sau nu este vizibilă pentru cheia ta — vezi nota despre licențiere de mai sus.
422
Geometria trimisă este invalidă sau prea complexă pentru a fi evaluată.
429
Limita de rată a fost depășită. Reîncearcă după numărul de secunde indicat în Retry-After.

Țările deservite de API

API-ul servește doar date din surse ai căror publicatori permit reutilizarea comercială și redistribuirea, deci acoperă mai puține țări decât harta. În rest, citirile de restricții nu returnează nimic, iar o verificare a conflictelor listează sursele omise în excludedSources, în loc să raporteze zona ca liberă.

Deservite:
Australia, Finlanda, Luxemburg, Norvegia, Elveția, Statele Unite ale Americii
Doar pe hartă (condiții de reutilizare nestabilite):
Letonia, Portugalia, România

Puncte finale

Citirile de restricții returnează doar date din surse a căror licență permite utilizarea comercială și redistribuirea. O sursă exclusă din acest motiv se comportă ca și cum nu ar exista: GET /restrictions/:id returnează 404 pentru ea exact ca pentru un id necunoscut. Verificarea conflictelor este singura excepție: numește ce a omis în excludedSources, astfel încât o țară exclusă nu este niciodată raportată ca liberă.

GET /api/v1/public/restrictions

Scope: RESTRICTIONS_READ

Listează restricțiile, filtrabile după țară, casetă de delimitare, tip, efect și altele.

curl "https://geopilot.space/api/v1/public/restrictions?country=FI" \
  -H "Authorization: Bearer $GEOPILOT_API_KEY"

Răspuns

{
  "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

Toate restricțiile din datele API suprapuse într-un punct.

curl "https://geopilot.space/api/v1/public/restrictions/at?lat=60.32&lon=24.95" \
  -H "Authorization: Bearer $GEOPILOT_API_KEY"

Răspuns

{
  "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

Restricții într-o rază față de un punct, în ordinea apropierii.

curl "https://geopilot.space/api/v1/public/restrictions/near?lat=60.32&lon=24.95&radiusMeters=5000" \
  -H "Authorization: Bearer $GEOPILOT_API_KEY"

Răspuns

{
  "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

O singură restricție, după id.

curl "https://geopilot.space/api/v1/public/restrictions/3f1b2c4d-0000-4000-8000-000000000000" \
  -H "Authorization: Bearer $GEOPILOT_API_KEY"

Răspuns

{
  "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

Verifică un poligon sau o rută față de restricțiile active și raportează ce întâlnește.

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]]]
    }
  }'

Răspuns

{
  "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

Convertește un document ED-269 publicat într-o colecție de elemente GeoJSON.

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" } } }'

Răspuns

{
  "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

Convertește un element sau o colecție de elemente GeoJSON într-un document ED-269.

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" }
  }'

Răspuns

{
  "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": []
}

Puncte finale — /convert/:from-:to

Pe lângă cele două puncte finale ED-269⇄GeoJSON de mai sus, POST /convert/:from-:to convertește între oricare două dintre ED-269, ED-318, KML și GeoJSON — douăsprezece perechi direcționate în total, listate mai jos împreună cu permisiunea (permisiunile) cerute de fiecare. ed269-geojson și geojson-ed269 sub această adresă scurtă se comportă identic cu cele două puncte finale dedicate de mai sus și coexistă cu ele; ambele forme rămân funcționale.

fromtoscope(s) required
ed269ed318CONVERT_ED269 + CONVERT_ED318
ed269kmlCONVERT_ED269 + CONVERT_KML
ed269geojsonCONVERT_ED269
ed318ed269CONVERT_ED318 + CONVERT_ED269
ed318kmlCONVERT_ED318 + CONVERT_KML
ed318geojsonCONVERT_ED318
kmled269CONVERT_KML + CONVERT_ED269
kmled318CONVERT_KML + CONVERT_ED318
kmlgeojsonCONVERT_KML
geojsoned269CONVERT_ED269
geojsoned318CONVERT_ED318
geojsonkmlCONVERT_KML

POST /api/v1/public/convert/ed269-kml

Scope: CONVERT_ED269 + CONVERT_KML

Convertește un document ED-269 publicat într-un document KML.

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]]] } } ] } ] } }'

Răspuns

{
  "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

Convertește un document KML într-un document ED-318.

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>" }'

Răspuns

{
  "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": []
}
GeoPilot

Un instrument independent de planificare pentru drone, construit pe restricțiile de spațiu aerian publicate de autoritățile naționale, pentru țările europene acoperite și pentru Statele Unite.

Date

  • Datele de spațiu aerian sunt publicate de autoritățile naționale ale fiecărei țări acoperite. GeoPilot nu este afiliat cu niciuna dintre ele și nici susținut de vreuna.
  • Vezi sursele și actualitatea

GeoPilot este un instrument independent de planificare, neafiliat cu nicio autoritate aeronautică și nesusținut de vreuna. Afișează date publicate de autoritățile naționale, care pot fi incomplete, depășite sau simplificate la procesare, și nu autorizează niciun zbor. Verifică întotdeauna publicația autorității și NOTAM-urile în vigoare înainte de zbor.