Complete API Workflow

See how our REST endpoints work together by following this example that covers a typical integration scenario.

Variables Used in Examples

These placeholder values are used consistently throughout the example requests:

sntest1: The serial number of the uas used.
sample_uuid: The UUID of the operation created and updated

Slot availability

Getting slot availability

POST https://portal.rnd-eureka.unifly.tech/api/gcs/slots/availability
# LEPA
{
    "timeFrame": {
        "start": "2025-07-04T11:08:26Z",
        "end": "2025-07-04T16:08:26Z"
    },
    "location": {
        "longitude": 2.7107256620075777,
        "latitude": 39.546638390251985
    },
    "operationType": "tko"
}

# LEMH
{
    "timeFrame": {
        "start": "2025-07-04T11:08:26Z",
        "end": "2025-07-04T16:08:26Z"
    },
    "location": {
        "longitude": 2.7107256620075777,
        "latitude": 39.546638390251985
    },
    "operationType": "lnd"
}

Operation creation

To select available slots to use for this operation make sure to set the properties.volume.{{start/end}} to match the chosen slots

POST https://portal.rnd-eureka.unifly.tech/api/gcs/uas/sntest1/operations
{
  "type": "Feature",
  "properties": {
    "description": "Sample operation",
    "isInFlight": false,
    "isAllowedToTakeOff": false,
    "volume": {
      "start": "2025-07-04T14:45:00Z",
      "end": "2025-07-04T16:30:00Z",
      "maxAltitude": 100
    },
    "markers": [
      {
        "longitude": 2.7107256620075777,
        "latitude": 39.546638390251985,
        "type": "TAKEOFF"
      },
      {
        "longitude": 4.216315807762642,
        "latitude": 39.85130382265734,
        "type": "LANDING"
      }
    ]
  },
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [2.711306903417477, 39.546620638030625],
        [2.707750914497427, 39.476770160038164],
        [2.704210036350697, 39.407076432755304],
        [2.762299138962739, 39.34581890261292],
        [2.8202658204155173, 39.284554071385905],
        [2.9405109667201854, 39.26979465817517],
        [3.060724523060415, 39.254908730189776],
        [3.6355681190213662, 39.53571553837298],
        [4.2149543300734456, 39.81360321884905],
        [4.215340327838291, 39.832333751182986],
        [4.215731624686052, 39.85131098194265],
        [4.215744661363931, 39.85139868668042],
        [4.215779646967113, 39.851482745893684],
        [4.215835237087393, 39.85155992921533],
        [4.215909295472436, 39.85162727050615],
        [4.2159989761139425, 39.85168218184634],
        [4.216100832615998, 39.851722552992385],
        [4.21621095064104, 39.85174683247756],
        [4.216325098343171, 39.85175408723775],
        [4.2164388890065965, 39.85174403847137],
        [4.216547949637363, 39.85171707235414],
        [4.2166480890276405, 39.85167422519759],
        [4.216735458831993, 39.85161714362131],
        [4.216806701463972, 39.85154802127015],
        [4.2168590791283735, 39.85146951450872],
        [4.216890579030215, 39.85138464033407],
        [4.216899990717833, 39.85129666043016],
        [4.216508372374733, 39.83231943356532],
        [4.216116969568399, 39.81334214311442],
        [4.21609641953198, 39.81323067840998],
        [4.216040659841029, 39.813126628315736],
        [4.215953175882197, 39.81303649644386],
        [4.215839435895781, 39.81296591643033],
        [3.636184710646094, 39.53495180016436],
        [3.0611597110883135, 39.25405672920038],
        [3.0610666182104844, 39.25401954373929],
        [3.0609664387223776, 39.25399598865131],
        [3.0608624428542957, 39.2539868328608],
        [3.0607580254101996, 39.25399237524612],
        [2.9403294431325433, 39.268905044861654],
        [2.819850015750796, 39.283693082808064],
        [2.8197406134802843, 39.28371512149757],
        [2.8196387957886087, 39.2837532430689],
        [2.819548435134739, 39.28380599763975],
        [2.8194729682513873, 39.28387137878534],
        [2.7613646282367172, 39.34528523754395],
        [2.703154509298698, 39.406669384683376],
        [2.703103387141391, 39.40673399394605],
        [2.7030669590299135, 39.40680434005678],
        [2.7030462572406937, 39.40687842968022],
        [2.7030418684341195, 39.40695416339807],
        [2.706589593064388, 39.47680562646935],
        [2.7101444203014893, 39.54665613956674],
        [2.7101600610168024, 39.54674358828861],
        [2.710197437558219, 39.546826994353495],
        [2.7102551136317197, 39.54690315249334],
        [2.710330872818907, 39.54696913596571],
        [2.7104218037465113, 39.54702240903104],
        [2.7105244119673086, 39.54706092440458],
        [2.7106347542532077, 39.54708320193702],
        [2.7107485901391803, 39.547088385499755],
        [2.710861544893061, 39.547076275887584],
        [2.7109692776466554, 39.547047338474805],
        [2.711067648225107, 39.54700268532972],
        [2.7111528762614845, 39.54694403247553],
        [2.7112216864803824, 39.54687363394026],
        [2.7112714345663766, 39.54679419513082],
        [2.7113002087801035, 39.54670876886123],
        [2.711306903417477, 39.546620638030625]
      ]
    ]
  }
}

Request acceptance

POST https://portal.rnd-eureka.unifly.tech/api/gcs/uasoperations/sample_uuid/requestAcceptance

Get permission status

Optional Step

This can be performed in any status as soon as it’s past draft

Gives an overview of all permission requests / clearances / slot requests. Also shows the given alternative slot for slot requests if provided.

GET https://portal.rnd-eureka.unifly.tech/api/gcs/uasoperations/sample_uuid/permissions/status

Accept alternative slots

Optional Step

This can only be performed if one of the accepted slots is revalidated and an alternative is provided, this can be seen in the permission status.

POST https://portal.rnd-eureka.unifly.tech/api/gcs/slots/sample_uuid/alternative

Submit permission requests

POST https://portal.rnd-eureka.unifly.tech/api/gcs/uasoperations/sample_uuid/permissionrequests/submitall
Manual Approval Required

These permission requests need to get approved manually first before proceeding past this step.

Submit taxi clearance

POST https://portal.rnd-eureka.unifly.tech/api/gcs/uasOperations/sample_uuid/clearances/TAXI
Manual Approval Required

This needs to be approved before proceeding

Submit take-off clearance

POST https://portal.rnd-eureka.unifly.tech/api/gcs/uasOperations/sample_uuid/clearances/TAKEOFF
Manual Approval Required

This needs to be approved before proceeding

Request activation

Make sure all permissions / clearances / slot requests are approved by this point.
POST https://portal.rnd-eureka.unifly.tech/api/gcs/uasoperations/sample_uuid/requestActivation

Perform the take-off

GCS does not currently support auto takeoff, so this is required when sending telemetry
POST https://portal.rnd-eureka.unifly.tech/api/gcs/uas/sntest1/takeoff
From this point on the operation is allowed to fly, until it is ended.

Send an updated ETA

Optional Step

This can be used to indicate to the authority that the flight ETA changed

POST https://portal.rnd-eureka.unifly.tech/api/gcs/uasoperations/sample_uuid/updateETA

{
    "estimatedArrivalTime": "2025-07-04T16:25:26Z"
}

Submit the landing clearance

Before being allowed to land a landing clearance needs to be submitted and approved.
POST https://portal.rnd-eureka.unifly.tech/api/gcs/uasOperations/sample_uuid/clearances/LANDING

Indicate that the UAS has landed

POST https://portal.rnd-eureka.unifly.tech/api/gcs/uas/sntest1/landing

End the operation

POST https://portal.rnd-eureka.unifly.tech/api/gcs/uasoperations/sample_uuid/requestEnd