API reference

Version 2.0.1, June 2021

Endpoints

For most users the endpoint will be https://api.cloudrf.com Private server users will have an IP address instead. API functions will be relative to this address.

Security

All requests are encrypted at the transport layer wth TLS.

Authentication is performed using a HTTP header called key You can find this in your Cloud-RF account.

Transmitter object

{
lat	number($float)
minimum: -89
maximum: 89
default: 38.916
example: 38.916
Latitude of transmitter in WGS84 decimal degrees.

lon	number($float)
minimum: -180
maximum: 180
default: 1.448
example: 1.448
Longitude of transmitter in WGS84 decimal degrees.

alt	number($float)
minimum: 0.1
maximum: 60000
default: 1
example: 1
Altitude above ground level in meters OR feet. Units set in output object.

frq	number($float)
minimum: 2
maximum: 100000
default: 868
example: 868
Center frequency in megahertz.

txw	number($float)
minimum: 0.001
maximum: 2000000
default: 0.1
example: 0.1
Transmitter power in watts before the antenna.

bwi	number($float)
minimum: 0.1
maximum: 100
default: 0.1
example: 1
Bandwidth in MHz. Will directly affect coverage in SNR mode (out=4)
}

Receiver object

{
lat	number($float)
minimum: -89
maximum: 89
default: 0
example: 38.906986
Latitude in WGS84 decimal degrees.

lon	number($float)
minimum: -180
maximum: 180
default: 0
example: 1.421416
Longitude in WGS84 decimal degrees.

alt	number($float)
minimum: 0.1
maximum: 60000
default: 0.1
Altitude above ground level in meters OR feet. Units set in output object.

rxg	number($float)
minimum: -10
maximum: 60
default: 2.15
example: 3
Receiver antenna gain in dBi.

rxs	number($float)
minimum: -140
maximum: 200
default: -90
example: -100
Receiver sensitivity/threshold in measured units defined by 'out' parameter eg. dB/dBm/dBuV/dB SNR
}

Antenna object

{
txg	number($float)
minimum: -10
maximum: 60
default: 2.15
example: 2.15
Transmitter antenna gain in dBi.

txl	number($float)
minimum: 0
maximum: 60
default: 0
example: 1
Feeder loss in dB.

ant	integer($int32)
default: 1
example: 0
Antenna pattern code: 0=allows custom options (see: hbw; vbw; fbr) 
1=Vertical dipole (omni-directional).

azi	number($float)
minimum: 0
maximum: 360
default: 0
example: 1
Antenna azimuth in degrees north.

tlt	number($float)
minimum: -10
maximum: 90
default: 0
example: 10
Antenna tilt in degrees below the horizon (inverted) where horizon is 0.

hbw	number($float)
minimum: 0
maximum: 360
default: 0
example: 2
Custom antenna horizontal beamwidth in degrees; for use only with ant=0.

vbw	number($float)
minimum: 0
maximum: 360
default: 0
example: 2
Custom antenna vertical beamwidth in degrees; for use only with ant=0.

pol	string
default: v
example: h
Antenna polarization. Either horizontal or vertical (default v)
}

Model object

{
pm	integer($int32)
minimum: 1
maximum: 11
default: 1
example: 1
Propagation model: 1=Irregular Terrain Model; 2=Line of Sight (LOS); 3=Hata; 4=ECC33; 5=SUI Microwave; 6=COST231; 7=Free space path loss; 8=Reserved; 9=Ericsson9999; 10=Plane earth loss; 11=Egli.

pe	integer($int32)
minimum: 1
maximum: 3
default: 2
example: 2
Propagation model subtype/environment: 1=Conservative/Urban; 2=Average/Suburban; 3=Optimistic/rural.

cli	integer($int32)
minimum: 1
maximum: 7
default: 6
example: 7
Radio climate for ITM model: (1). 1=Equatorial (Congo); 2=Continental Subtropical (Sudan); 3=Maritime Subtropical (West coast of Africa); 4=Desert (Sahara); 5=Continental Temperate; 6=Maritime Temperate and Over Land (UK and West coasts of US & EU); 7=Maritime Temperate, Over Sea.

ked	number
default: 0
example: 1
Include knife edge diffraction for enhancing models (recommended in ITM). Switch on/off; 1=INCLUDE, 0=OFF. Having this off produces a 'line of sight' plot.

rel	number($float)
minimum: 50
maximum: 99
default: 95
example: 55
ITM model required reliability as %. A value of at least 80% is recommended.

ter	integer($int32)
minimum: 1
maximum: 6
default: 4
example: 3
Terrain short code for ITM model (1): 1=Water; 2=Wet ground; 3=Farmland; 4=Forest/Average; 5=Mountain/Sand; 6=City/Poor ground.

}

Environment object

{
clt	string
default: Minimal.clt
Clutter profile name. If not supplied, but cll > 0 then Minimal.clt will be used

cll	integer($int32)
minimum: 0
maximum: 2
default: 2
example: 1
Clutter mode: 0=Disabled/DSM only; 1=Enabled/System 10m landcover; 2=Enabled/Landcover plus 3D buildings.

clm	integer($int32)
minimum: 1
maximum: 2
default: 1
Custom clutter: 0=Disabled; 1=Enabled; This requires that you have created clutter in the local area first

mat	number($float)
minimum: 0.1
maximum: 2
default: 0.5
example: 0.5
Clutter attenuation override for 3D buildings (Code #18) in dB/m based on a hollow building; Requires cll=2
}

Output object

{
units	string
default: metric
Define global distance units applied to heights and distances; either meters/kilometers (metric) or feet/miles (imperial).

col	string
default: RAINBOW.dBm
Color schema code OR filename string. Codes: 1=Cellular (5); 2=Red; 3=Green; 4=Blue; 5=Microwave(7); 7=Custom RGB; 8=Automatic by frequency; 9=Greyscale/GIS; 10=Rainbow(24); 11=Green/Blue/Red; 13=Sub noise floor (10); 14=TV broadcasting (4); 15=Red threshold; 16=Green threshold; 17=Blue threshold. Filename examples: RAINBOW.dBm; CUSTOMSCHEMA.dBm.

out	integer($int32)
minimum: 1
maximum: 4
default: 2
example: 2
Measured units: 1=dB; 2=dBm; 3=dBuV; 4=SNR (4 supports nf option).

ber	integer($int32)
minimum: 0
maximum: 12
default: 0
example: 2
Bit error rate: 1=0.1; 2=0.01; 3=0.001; 4=0.0001; 5=0.00001; 6=0.000001; >6=Lora; 7=SF7; 8=SF8; 9=SF9; 10=SF10; 11=SF11; 12=SF12.

mod	integer($int32)
minimum: 1
maximum: 11
default: 1
example: 7
Modulation: 1=4QAM; 2=16QAM; 3=64QAM; 4=256QAM; 5=1024QAM; 6=BPSK; 7=QPSK; 8=8PSK; 9=16PSK; 10=32PSK; 11=LoRa.

nf	number($float)
minimum: -120
maximum: -90
default: -114
example: -100
Noise floor in dBm for use with out=4/SNR. Set with care.

res	number($float)
minimum: 2
maximum: 200
default: 10
example: 10
Resolution in meters for output. A high resolution (2) is much slower than a medium resolution (20) for area calculations.

rad	number($float)
minimum: 0.03
maximum: 300
default: 5
example: 5
Radius in kilometers for output. This is not a guarantee a signal will reach.
}

Clutter object

This GeoJSON structure is used in the /clutter/add API

{
type	<string>
default: Feature
Identifier for item of clutter.

features	{
    geometry	<string>
    default: Polygon
    example: Polygon
    Shape describing an item of clutter

    coordinates	<string>
    example: [-2.646178,51.639692]
    GeoJSON coordinate pairs. Locations of item/s of clutter passed as an array. 

    properties	{
        height	<string>
        example: 4
        Clutter object height in m
        
        material	<string>
        example: 1
        Clutter object material. The material code/type/attenuation options are: 1 Tree/s:0.25; 2 Trees:0.5; 3 Timber:1.0; 4\tTimber:1.5; 5\tBrick:1.5; 6\tBrick:2.0; 7\tConcrete:3.0; 8\tConcrete:4.0; 9\tMetal:6.0.;
    }
}
}

Create

This set of endpoints allows the user to create new links, site heatmaps, routes, and networks. Requests must contain a JSON string in the body. Responses are JSON strings containing hyperlinks to image files, projection metadata, identifiers, colour schemas and metrics.

/area

This endpoint returns an omni-directional coverage plot point-to-multipoint (PtMp) as an image, rendered with a color schema. This function assumes the same receiver height at all locations out to fixed radius (300 km maximum). Due to its recursive processing, this is the most resource intensive of all the API calls. Speed can be improved significantly by adjusting the resolution “res” parameter upwards so 20 (m) is faster than 10 (m). A standard request requires transmitter, receiver, antenna, and output objects; providing model and environment enhances accuracy.

Request example: 868MHz LPWAN gateway, 10km radius

{
    "site": "NODE_1",
    "network": "MY_NET",
    "transmitter": {
        "lat": 38.916,
        "lon": 1.448,
        "alt": 1,
        "frq": 868,
        "txw": 0.1,
        "bwi": 0.1
    },
    "receiver": {
        "lat": 0,
        "lon": 0,
        "alt": 0.1,
        "rxg": 2.15,
        "rxs": -110
    },
    "antenna": {
        "txg": 2.15,
        "txl": 0,
        "ant": 39,
        "azi": 0,
        "tlt": 0,
        "hbw": 0,
        "vbw": 0,
        "pol": "v"
    },
    "output": {
        "units": "metric",
        "col": "RAINBOW.dBm",
        "out": 2,
        "ber": 0,
        "mod": 1,
        "nf": -120,
        "res": 20,
        "rad": 10
    },
    "model": {
        "pm": 1,
        "pe": 2,
        "cli": 6,
        "ked": 1,
        "rel": 95,
        "ter": 4
    },
    "environment": {
        "clt": "Minimal.clt",
        "cll": 2,
        "clm": 0
    }
}

Response example:

{
"kmz": "<uri>",
"PNG_WGS84": "<uri>",
"PNG_Mercator": "<uri>",
"bounds": [
    "<float>",
    "<float>"
],
"id": "<string>",
"sid": "<string>",
"area": "<string>",
"coverage": "<string>",
"key": [
    {
    "l": "<string>",
    "r": "<integer>",
    "g": "<integer>",
    "b": "<integer>"
    },
    {
    "l": "<string>",
    "r": "<integer>",
    "g": "<integer>",
    "b": "<integer>"
    }
],
"elapsed": "<int32>",
"balance": "<integer>"
}

/path

This endpoint allows users to analyse a point-to-point (Ptp) path. A path profile is a single link from A to B out to a maximum of 300 km. It is much faster than an area calculation. A basic request requires transmitter, receiver, antenna, and output objects; providing model and environment enhances accuracy further.

The output is JSON and contains a Receiver block followed by a single Transmitter block. For a path you will have only one Transmitter block but other API calls like /points return a Transmitter array here.

Request example: 868MHz LPWAN gateway link

{
    "site": "NODE_1",
    "network": "MY_NET",
    "transmitter": {
        "lat": 38.916,
        "lon": 1.448,
        "alt": 1,
        "frq": 868,
        "txw": 0.1,
        "bwi": 0.1
    },
    "receiver": {
        "lat": 38.9145,
        "lon": 1.5232,
        "alt": 0.1,
        "rxg": 2.15,
        "rxs": -110
    },
    "antenna": {
        "txg": 2.15,
        "txl": 0,
        "ant": 39,
        "azi": 0,
        "tlt": 0,
        "hbw": 0,
        "vbw": 0,
        "pol": "v"
    },
    "output": {
        "units": "metric",
        "col": "RAINBOW.dBm",
        "out": 2,
        "ber": 0,
        "mod": 1,
        "nf": -120,
        "res": 20,
        "rad": 10
    },
    "model": {
        "pm": 1,
        "pe": 2,
        "cli": 6,
        "ked": 1,
        "rel": 95,
        "ter": 4
    },
    "environment": {
        "clt": "Minimal.clt",
        "cll": 2,
        "clm": 0
    }
}

Example response.

{
"Engine": "<string>",
"kmz": "<uri>",
"Chart image": "<uri>",
"elapsed": "<Int32>",
"Frequency MHz": "<float>",
"Propagation model": "<string>",
"Earth dielectric constant": "<float>",
"Earth conductivity": "<float>",
"Radio climate": "<string>",
"Atmospheric bending constant": "<Int32>",
"Fraction of situations": "<Int32>",
"Fraction of time": "<Int32>",
"Receiver": {
    "Latitude": "<float>",
    "Longitude": "<float>",
    "Ground elevation m": "<float>",
    "Antenna height m": "<float>",
    "Receiver gain dBd": "<float>",
    "Receiver gain dBi": "<float>"
},
"Transmitters": {
    "Latitude": "<float>",
    "Longitude": "<float>",
    "Ground elevation m": "<float>",
    "Antenna height m": "<float>",
    "Distance to receiver km": "<float>",
    "Azimuth to receiver deg": "<float>",
    "Downtilt angle deg": "<float>",
    "Antenna gain dBd": "<float>",
    "Antenna gain dBi": "<float>",
    "Polarisation": "<string>",
    "Power W": "<float>",
    "Power dBm": "<string>",
    "ERP W": "<float>",
    "EIRP W": "<float>",
    "ERP dBm": "<float>",
    "EIRP dBm": "<float>",
    "Free space path loss dB": "<float>",
    "Bandwidth MHz": "<float>",
    "Johnson Nyquist noise dB": "<float>",
    "Noise floor dBm": "<float>",
    "Channel noise dBm": "<float>",
    "Signal power at receiver dBm": "<float>",
    "Signal to Noise Ratio dB": "<float>",
    "Computed path loss dB": "<float>",
    "Model attenuation dB": "<float>",
    "Field strength at receiver dBuV/m": "<float>",
    "Raise RX antenna for LOS": "<integer>",
    "Raise RX antenna for fresnel 60%": "<integer>",
    "Raise RX antenna for full fresnel": "<integer>"
}
}

/points

The points function tests many transmitters to one receiver and is designed for route analysis and MANET networks. The simplest request requires a transmitter array of tuples (latitude, longitude, altitude) locations, antenna, receiver, and output objects defined. Model and environment options enhance accuracy.

  • The same settings (except location) are used for each transmitter

  • A maximum of 100 transmitters per request can be tested

  • Processing time is determined by radius and resolution

  • Mixed hardware MANET networks will require multiple requests / profiles

  • The response contains limited data per transmitter compared with a /path response

  • The response array of transmitters contains an index called server which starts at 1

Example request for three 868MHz transmitters:

{
    "site": "Points",
    "network": "Testing",
    "transmitter": {
        "lat": 38.916,
        "lon": 1.448,
        "alt": 1,
        "frq": 868,
        "txw": 0.1,
        "bwi": 0.1
    },
    "points": [
        {
            "lat": 38.916,
            "lon": 1.458,
            "alt": 1
        },
        {
            "lat": 38.916,
            "lon": 1.5111,
            "alt": 1
        },
        {
            "lat": 38.916,
            "lon": 1.5234,
            "alt": 12
        }
    ],
    "antenna": {
        "txg": 2.15,
        "txl": 0,
        "ant": 39,
        "azi": 0,
        "tlt": 0,
        "hbw": 0,
        "vbw": 0,
        "pol": "v"
    },
    "receiver": {
        "lat": 38.916,
        "lon": 1.4,
        "alt": 0.1,
        "rxg": 2.15,
        "rxs": -110
    },
    "model": {
        "pm": 1,
        "pe": 2,
        "cli": 6,
        "ked": 1,
        "rel": 95,
        "ter": 4
    },
    "environment": {
        "clt": "Minimal.clt",
        "cll": 2,
        "clm": 1,
        "mat": 0.5
    },
    "output": {
        "units": "metric",
        "col": "RAINBOW.dBm",
        "out": 2,
        "ber": 0,
        "mod": 1,
        "nf": -114,
        "res": 10,
        "rad": 5
    }
}

Example response for a points request:

{
"Engine": "<string>",
"kmz": "<uri>",
"Chart image": "<uri>",
"elapsed": "<Int32>",
"Frequency MHz": "<float>",
"Propagation model": "<string>",
"Earth dielectric constant": "<float>",
"Earth conductivity": "<float>",
"Radio climate": "<string>",
"Atmospheric bending constant": "<Int32>",
"Fraction of situations": "<Int32>",
"Fraction of time": "<Int32>",
"Receiver": {
    "Latitude": "<float>",
    "Longitude": "<float>",
    "Ground elevation m": "<float>",
    "Antenna height m": "<float>",
    "Receiver gain dBd": "<float>",
    "Receiver gain dBi": "<float>"
},
"Transmitters": [{
    "Latitude": "<float>",
    "Longitude": "<float>",
    "Ground elevation m": "<float>",
    "Antenna height m": "<float>",
    "Distance to receiver km": "<float>",
    "Azimuth to receiver deg": "<float>",
    "Downtilt angle deg": "<float>",
    "Antenna gain dBd": "<float>",
    "Antenna gain dBi": "<float>",
    "Polarisation": "<string>",
    "Power W": "<float>",
    "Power dBm": "<string>",
    "ERP W": "<float>",
    "EIRP W": "<float>",
    "ERP dBm": "<float>",
    "EIRP dBm": "<float>",
    "Free space path loss dB": "<float>",
    "Bandwidth MHz": "<float>",
    "Johnson Nyquist noise dB": "<float>",
    "Noise floor dBm": "<float>",
    "Channel noise dBm": "<float>",
    "Signal power at receiver dBm": "<float>",
    "Signal to Noise Ratio dB": "<float>",
    "Computed path loss dB": "<float>",
    "Model attenuation dB": "<float>",
    "Field strength at receiver dBuV/m": "<float>",
    "Raise RX antenna for LOS": "<integer>",
    "Raise RX antenna for fresnel 60%": "<integer>",
    "Raise RX antenna for full fresnel": "<integer>",
    "server": "<integer>"
}]
}

Analyse

This set of endpoints allows the user to use and derive information from pre-defined networks and layers.

/mesh

This endpoint returns a consolidated super-layer of many area calculations as a single image layer. Stronger signals are promoted over weaker ones.

A consistent color schema for sites must be used.

Example HTTP request for meshing the IBIZA network into a layer called Mesh:

/mesh?network=IBIZA&name=Mesh

Example JSON response showing the URLs and image metadata:

{
"png_wgs84": "https://api.cloudrf.com/users/1/0418190402_Mesh.4326.png",
"png_mercator": "https://api.cloudrf.com/users/1/0418190402_Mesh.3857.png",
"kmz": "https://api.cloudrf.com/archive/Tkl4WnNyWGFqOWdPRi9IeE5VRWRBQT09/kmz",
"id": "4999659",
"sid": "Tkl4WnNyWGFqOWdPRi9IeE5VRWRBQT09",
"filename": "0418190402_Mesh",
"bounds": [38.93797,1.4760836842105263,38.88184693779905,1.411788],
"calculations": [4999539,4999584]
}

/network

This endpoint allows users to query a network to find the best server(s) for a given receiver/customer location. A previously generated network is required. This method returns more data than the points API as it includes the arrays for terrain, landcover, obstructions, and path loss for each server.

Example HTTP request for testing a location against the IBIZA network:

/network?lat=38.896978&lon=1.439291&net=IBIZA&rxg=2.15&rxh=1.5

Example JSON response:

[{
    "Server ID": 4999584,
    "Server name": "0418190346_IBIZA_Site",
    "Chart image": "https://api.cloudrf.com/API/archive/data?ppa=a07a0450&uid=1",
    "Network KML": "https://api.cloudrf.com/users/1/ac6f6cc8.kml",
    "Frequency MHz": 868,
    "Propagation model": "ITM",
    "Earth dielectric constant": 13, "Earth conductivity": 0.002,
    "Radio climate": "Maritime Temperate (Land)", "Atmospheric bending constant": 301,
    "Fraction of situations": 95, "Fraction of time": 95,
    "Receiver": [{
        "Latitude": 38.89698, "Longitude": 1.439291,
        "Ground elevation m": 0, "Antenna height m": 1.5,
        "Receiver gain dBd": 0, "Receiver gain dBi": 2.15
    }],
    "Transmitters": [
        {
        "Latitude": 38.90494, "Longitude": 1.45307,
        "Ground elevation m": 0, "Antenna height m": 1.5,
        "Distance to receiver km": 1.487,
        "Azimuth to receiver deg": 233.41,
        "Downtilt angle deg": 0,
        "Antenna gain dBd": 0, "Antenna gain dBi": 2.15,
        "Polarisation": "Vertical",
        "Power W": "0.1",
        "Power dBm": "22.15",
        "ERP W": 0.1, "EIRP W": 0.16,
        "ERP dBm": 20, "EIRP dBm": 22.15,
        "Free space path loss dB": 90.4,
        "Bandwidth MHz": 0.1,
        "Johnson Nyquist noise dB": 0.2,
        "Noise floor dBm": -115,
        "Channel noise dBm": -114.8,
        "Signal power at receiver dBm": -107.9,
        "Signal to Noise Ratio dB": 6.9,
        "Computed path loss dB": 127.9,
        "Model attenuation dB": 37.6,
        "Field strength at receiver dBuV/m": 30.2,
        "RX voltage 50 ohm dipole uV": 1,
        "RX voltage 50 ohm dipole dBuV": 3,
        "RX voltage 75 ohm dipole uV": 2,
        "RX voltage 75 ohm dipole dBuV": 5,
        "Raise RX antenna for LOS": 0,
        "Raise RX antenna for fresnel 60%": 129.5,
        "Raise RX antenna for full fresnel": 226.5,
        "Obstructions": [
        ],
        "Distance": [0.021,0.042,0.062,0.083,0.104,0.125,0.145,0.166,0.187,0.208,0.228,0.249,0.27,0.291,0.312,0.332,0.353,0.374,0.395,0.415,0.436,0.457,0.478,0.498,0.519,0.54,0.561,0.581,0.602,0.623,0.644,0.665,0.685,0.706,0.727,0.748,0.768,0.789,0.81,0.831,0.851,0.872,0.893,0.914,0.935,0.955,0.976,0.997,1.018,1.038,1.059,1.08,1.101,1.121,1.142,1.163,1.184,1.204,1.225,1.246,1.267,1.288,1.308,1.329,1.35,1.371,1.391,1.412,1.433,1.454,1.474,1.487],
        "Terrain": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
        "Landcover distance": [0.021,0.042,0.062,0.083,0.104,0.125,0.145,0.166,0.187,0.208,0.228,0.249,0.27,0.291,0.312,0.332,0.353,0.374,0.395,0.415,0.436,0.457,0.478,0.498,0.519,0.54,0.561,0.581,0.602,0.623,0.644,0.665,0.685,0.706,0.727,0.748,0.768,0.789,0.81,0.831,0.851,0.872,0.893,0.914,0.935,0.955,0.976,0.997,1.018,1.038,1.059,1.08,1.101,1.121,1.142,1.163,1.184,1.204,1.225,1.246,1.267,1.288,1.308,1.329,1.35,1.371,1.391,1.412,1.433,1.454,1.474,1.487],
        "Landcover codes": [50,50,80,80,80,80,80,80,50,50,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80],
        "Landcover heights": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
        "Fresnel": [-2.72,-3.82,-4.65,-5.33,-5.91,-6.43,-6.89,-7.31,-7.69,-8.04,-8.37,-8.66,-8.94,-9.2,-9.44,-9.66,-9.87,-10.06,-10.24,-10.41,-10.56,-10.7,-10.83,-10.95,-11.06,-11.16,-11.24,-11.32,-11.39,-11.45,-11.49,-11.53,-11.56,-11.58,-11.6,-11.6,-11.59,-11.58,-11.55,-11.52,-11.48,-11.42,-11.36,-11.29,-11.21,-11.12,-11.02,-10.9,-10.78,-10.65,-10.5,-10.34,-10.17,-9.99,-9.79,-9.57,-9.34,-9.1,-8.83,-8.55,-8.24,-7.9,-7.54,-7.14,-6.71,-6.23,-5.68,-5.06,-4.33,-3.42,-2.1,-0],
        "dBm": [-46.4,-52.4,-56,-59.8,-63.5,-66.5,-69,-71.2,-73.1,-74.8,-76.4,-77.8,-79.1,-80.4,-81.5,-82.6,-83.6,-84.5,-85.4,-86.3,-87.1,-87.8,-88.6,-89.3,-90,-90.6,-91.3,-91.9,-92.4,-93,-93.6,-94.1,-94.6,-95.1,-95.6,-96.1,-96.5,-97,-97.4,-97.9,-98.3,-98.7,-99.1,-99.5,-99.8,-100.2,-100.6,-100.9,-101.3,-101.6,-102,-102.3,-102.6,-103,-103.3,-103.6,-103.9,-104.2,-104.5,-104.8,-105.1,-105.3,-105.6,-105.9,-106.2,-106.4,-106.7,-106.9,-107.2,-107.4,-107.7,-107.9],
        "dB": [66.4,72.4,76,79.8,83.5,86.5,89,91.2,93.1,94.8,96.4,97.8,99.1,100.4,101.5,102.6,103.6,104.5,105.4,106.3,107.1,107.8,108.6,109.3,110,110.6,111.3,111.9,112.4,113,113.6,114.1,114.6,115.1,115.6,116.1,116.5,117,117.4,117.9,118.3,118.7,119.1,119.5,119.8,120.2,120.6,120.9,121.3,121.6,122,122.3,122.6,123,123.3,123.6,123.9,124.2,124.5,124.8,125.1,125.3,125.6,125.9,126.2,126.4,126.7,126.9,127.2,127.4,127.7,127.9]
        }
    ]
}
,{
    "Server ID": 4999539,
    "Server name": "0418190337_IBIZA_Site",
    "Chart image": "https://api.cloudrf.com/API/archive/data?ppa=de512206&uid=1",
    "Network KML": "https://api.cloudrf.com/users/1/ac6f6cc8.kml",
    "Frequency MHz": 868,
    "Propagation model": "ITM",
    "Earth dielectric constant": 13, "Earth conductivity": 0.002,
    "Radio climate": "Maritime Temperate (Land)", "Atmospheric bending constant": 301,
    "Fraction of situations": 95, "Fraction of time": 95,
    "Receiver": [{
        "Latitude": 38.89698, "Longitude": 1.439291,
        "Ground elevation m": 0, "Antenna height m": 1.5,
        "Receiver gain dBd": 0, "Receiver gain dBi": 2.15
    }],
    "Transmitters": [
        {
        "Latitude": 38.91488, "Longitude": 1.434879,
        "Ground elevation m": 1, "Antenna height m": 1.5,
        "Distance to receiver km": 2.029,
        "Azimuth to receiver deg": 169.14,
        "Downtilt angle deg": 0,
        "Antenna gain dBd": 0, "Antenna gain dBi": 2.15,
        "Polarisation": "Vertical",
        "Power W": "0.1",
        "Power dBm": "22.15",
        "ERP W": 0.1, "EIRP W": 0.16,
        "ERP dBm": 20, "EIRP dBm": 22.15,
        "Free space path loss dB": 93.1,
        "Bandwidth MHz": 0.1,
        "Johnson Nyquist noise dB": 0.2,
        "Noise floor dBm": -115,
        "Channel noise dBm": -114.8,
        "Signal power at receiver dBm": -134.3,
        "Signal to Noise Ratio dB": -19.5,
        "Computed path loss dB": 154.3,
        "Model attenuation dB": 61.2,
        "Field strength at receiver dBuV/m": 3.9,
        "RX voltage 50 ohm dipole uV": 0,
        "RX voltage 50 ohm dipole dBuV": -23,
        "RX voltage 75 ohm dipole uV": 0,
        "RX voltage 75 ohm dipole dBuV": -21,
        "Raise RX antenna for LOS": 101.5,
        "Raise RX antenna for fresnel 60%": 137.5,
        "Raise RX antenna for full fresnel": 246.5,
        "Obstructions": [
            [38.89956,1.438655],
            [38.90042,1.438442],
            [38.90085,1.438336],
            [38.90107,1.438283],
            [38.90129,1.43823],
            [38.9015,1.438177],
            [38.90172,1.438123],
            [38.90215,1.438017],
            [38.90236,1.437964],
            [38.90258,1.437911],
            [38.9028,1.437857],
            [38.90301,1.437804],
            [38.90323,1.437751],
            [38.90344,1.437698],
            [38.90366,1.437645],
            [38.90388,1.437592],
            [38.90409,1.437538],
            [38.90431,1.437485],
            [38.90452,1.437432],
            [38.90474,1.437379],
            [38.90495,1.437326],
            [38.90517,1.437272],
            [38.90539,1.437219],
            [38.9056,1.437166],
            [38.90582,1.437113],
            [38.90603,1.43706],
            [38.90625,1.437007],
            [38.90647,1.436953],
            [38.90668,1.4369],
            [38.9069,1.436847],
            [38.90711,1.436794],
            [38.90733,1.436741],
            [38.90754,1.436687]
        ],
        "Distance": [0.024,0.049,0.073,0.098,0.122,0.147,0.171,0.196,0.22,0.245,0.269,0.294,0.318,0.342,0.367,0.391,0.416,0.44,0.465,0.489,0.514,0.538,0.563,0.587,0.612,0.636,0.661,0.685,0.709,0.734,0.758,0.783,0.807,0.832,0.856,0.881,0.905,0.93,0.954,0.979,1.003,1.027,1.052,1.076,1.101,1.125,1.15,1.174,1.199,1.223,1.248,1.272,1.297,1.321,1.345,1.37,1.394,1.419,1.443,1.468,1.492,1.517,1.541,1.566,1.59,1.615,1.639,1.664,1.688,1.712,1.737,1.761,1.786,1.81,1.835,1.859,1.884,1.908,1.933,1.957,1.982,2.006,2.029],
        "Terrain": [1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,4,5,6,7,8,10,11,13,16,19,22,26,30,33,36,39,41,43,45,46,46,45,44,43,43,42,41,40,38,36,34,32,29,27,24,21,19,16,14,12,11,9,8,7,7,6,5,4,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1],
        "Landcover distance": [0.024,0.049,0.073,0.098,0.122,0.147,0.171,0.196,0.22,0.245,0.269,0.294,0.318,0.342,0.367,0.391,0.416,0.44,0.465,0.489,0.514,0.538,0.563,0.587,0.612,0.636,0.661,0.685,0.709,0.734,0.758,0.783,0.807,0.832,0.856,0.881,0.905,0.93,0.954,0.979,1.003,1.027,1.052,1.076,1.101,1.125,1.15,1.174,1.199,1.223,1.248,1.272,1.297,1.321,1.345,1.37,1.394,1.419,1.443,1.468,1.492,1.517,1.541,1.566,1.59,1.615,1.639,1.664,1.688,1.712,1.737,1.761,1.786,1.81,1.835,1.859,1.884,1.908,1.933,1.957,1.982,2.006,2.029],
        "Landcover codes": [90,90,60,50,50,50,50,50,50,50,50,80,80,80,80,80,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,60,50,30,10,10,20,20,30,30,30,20,20,20,30,30,60,60,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80],
        "Landcover heights": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            "Fresnel": [-2.96,-4.16,-5.06,-5.81,-6.45,-7.02,-7.53,-8,-8.43,-8.82,-9.19,-9.53,-9.85,-10.15,-10.43,-10.69,-10.94,-11.17,-11.39,-11.59,-11.78,-11.96,-12.13,-12.29,-12.44,-12.57,-12.7,-12.82,-12.92,-13.02,-13.11,-13.19,-13.27,-13.33,-13.38,-13.43,-13.47,-13.5,-13.53,-13.54,-13.55,-13.55,-13.54,-13.53,-13.5,-13.47,-13.43,-13.38,-13.33,-13.26,-13.19,-13.11,-13.02,-12.92,-12.81,-12.69,-12.57,-12.43,-12.28,-12.13,-11.96,-11.78,-11.58,-11.38,-11.16,-10.93,-10.68,-10.42,-10.14,-9.84,-9.52,-9.18,-8.81,-8.41,-7.98,-7.51,-7,-6.43,-5.78,-5.03,-4.12,-2.9,-0],
            "dBm": [-47.8,-53.9,-59.2,-62.7,-71.1,-74,-75.9,-77.6,-79.4,-81.3,-83.3,-83.7,-83.5,-84.6,-85.2,-85.5,-86.3,-85.3,-84.9,-84,-83.7,-82.9,-82.8,-81.9,-80.9,-80.1,-79.1,-78.7,-78.9,-79.5,-80.2,-81.1,-82,-82.9,-83.9,-84.8,-86,-107.6,-112.7,-114.8,-115.6,-117,-117.9,-119.6,-119.3,-122.7,-125.1,-126.9,-128.2,-129.1,-130.1,-131.6,-131.1,-132.3,-132.9,-134.2,-134.3,-134.1,-134.3,-134.4,-134.5,-134.6,-134.5,-134.6,-134.5,-134.4,-134.4,-134.4,-134.4,-134.3,-134.3,-134.3,-134.3,-134.3,-134.2,-134.2,-134.2,-134.2,-134.2,-134.2,-134.2,-134.2,-134.3],
            "dB": [67.8,73.9,79.2,82.7,91.1,94,95.9,97.6,99.4,101.3,103.3,103.7,103.5,104.6,105.2,105.5,106.3,105.3,104.9,104,103.7,102.9,102.8,101.9,100.9,100.1,99.1,98.7,98.9,99.5,100.2,101.1,102,102.9,103.9,104.8,106,127.6,132.7,134.8,135.6,137,137.9,139.6,139.3,142.7,145.1,146.9,148.2,149.1,150.1,151.6,151.1,152.3,152.9,154.2,154.3,154.1,154.3,154.4,154.5,154.6,154.5,154.6,154.5,154.4,154.4,154.4,154.4,154.3,154.3,154.3,154.3,154.3,154.2,154.2,154.2,154.2,154.2,154.2,154.2,154.2,154.3]
            }
        ]
    }]

/interference

This endpoint allows users to merge and analyse sites within a network channel to determine the best server at a given location. Each site will be dynamically allocated a monochrome color from a palette and the strongest signal promoted at a given location.

The input and output structure is comparable to a /network request with only the styling being different due to the promotion algorithm.

Example HTTP request comparing the IBIZA network sites:

/interference?network=IBIZA&name=QRM

Example JSON response showing the dynamic coloured layer:

{
"png_wgs84": "https://api.cloudrf.com/users/1/0418191251_QRM.4326.png",
"png_mercator": "https://api.cloudrf.com/users/1/0418191251_QRM.3857.png",
"id": "",
"sid": "dnJteTFMYzl2YTgyNmNhZTlYUEJqQT09",
"filename": "0418191251_QRM",
"bounds": [38.937970,1.476234,38.881880,1.411788],
"calculations": [4999539,4999584]
}

Archive

/archive/data

This function enumerates calculations from your archive. It will recover area, path, network, interference, mesh and MANET results. You can use the north,east,south,west bounding box parameters to filter the area of interest.

Ensure you set the key authentication header

Example HTTP request:

/archive/data?n=<float>&e=<float>&s=<float>&w=<float>

Example JSON response:

{ "calcs": [
    {
    "id": "5001905",
    "sid": "Sk1jMHNrRlowNlNkYU1DeEExcXFZZz09",
    "fname": "0418191251_QRM",
    "network": "QRM",
    "lat": "38.90494",
    "lon": "1.45307",
    "time": "2022-04-18 19:12:51",
    "freq": "868",
    "erp": "0.06",
    "txrf": "0.1",
    "gain": "0",
    "txh": "1.5m",
    "rxgain": "0",
    "rxh": "1.5m",
    "ae": "39",
    "rad": "",
    "res": "20",
    "pm": "ITM",
    "rxs": "-110dBm"
    },
    {
    "id": "5001904",
    "sid": "RnZWK2lTNUM0cWp6eXRxY2hHeDhUZz09",
    "fname": "0418191230_QRM",
    "network": "QRM",
    "lat": "53.298725",
    "lon": "-1.777369",
    "time": "2022-04-18 19:12:31",
    "freq": "806",
    "erp": "0.61",
    "txrf": "1",
    "gain": "0",
    "txh": "20m",
    "rxgain": "0",
    "rxh": "1m",
    "ae": "39",
    "rad": "",
    "res": "20",
    "pm": "ITM",
    "rxs": "-90dBm"}
]
}

/archive/delete

This deletes a single calculation from the database and from your folder. You need to know the calculation ID number (CID) which can be enumerated from the /archive/data API. The authentication ensures that only the rightful owner can delete their data.

Warning! You could lose data. This endpoint deletes the entry from the database and the file from the disk.

Example for deleting calculation 12345

/archive/delete?cid=12345

Example response:

{"message": "0418193421_IBIZA_PPA deleted!"}

/archive/delete/network

This deletes multiple calculations from the database and from your folder. You need to know the network name which can be enumerated from the /archive/data API. The authentication ensures that only the rightful owner can delete their data.

Warning! You could lose lots of data! This endpoint deletes all associated child entries from the database and the files from the disk.

Example request for deleting the TEST network

/archive/delete/network?nid=TEST

Example response:

{"message": "Deleted 6 sites from TEST in 0.1 s"}

/archive/export

This endpoint downloads your data in a format suitable for a third-party viewer such as Google Earth or QGIS. Supported formats are KML, KMZ, GEOTIFF, SHP, URL, HTML

KMZ

/archive/data?sid=Sk1jMHNrRlowNlNkYU1DeEExcXFZZz09&fmt=kmz

KML

/archive/data?sid=Sk1jMHNrRlowNlNkYU1DeEExcXFZZz09&fmt=kml

KMZ with Google Earth path-profile widget

/archive/data?sid=Sk1jMHNrRlowNlNkYU1DeEExcXFZZz09&fmt=kmzppa

SHP

/archive/data?sid=Sk1jMHNrRlowNlNkYU1DeEExcXFZZz09&fmt=shp

GeoTIFF

/archive/data?sid=Sk1jMHNrRlowNlNkYU1DeEExcXFZZz09&fmt=tiff

/archive/calc

Export a layer as a public URL using the secure ID obtained from the data API

/archive/calc?id=Sk1jMHNrRlowNlNkYU1DeEExcXFZZz09

Clutter

/clutter/add

This endpoint supports upload of GeoJSON lineString and polygon features to your account. Throught the web interface you may also upload KML polygons which are converted to GeoJSON for this API.

https://geojson.org/

Example GeoJSON body for two polygons

{
    "name": "Clutter",
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "features": {
                "geometry": "Polygon",
                "coordinates": "<string>",
                "properties": {
                    "height": "<string>",
                    "material": "<string>"
                }
            }
        },
        {
            "type": "Feature",
            "features": {
                "geometry": "Polygon",
                "coordinates": "<string>",
                "properties": {
                    "height": "<string>",
                    "material": "<string>"
                }
            }
        }
    ]
}

Example response for a successful upload:

{"info": "Added 2 item(s) of clutter"}

/clutter/get

This endpoint fetches private clutter items for the given co-ordinates out to 1 decimal degree radius (~120 km at the equator). Results are limited to 100 items sorted by nearest first. GeoJSON coordinates are passed as a clean URL:

/clutter/get/51.637723/-2.649606

Example GeoJSON response:

{"type":"FeatureCollection",
"features":[
    {"type":"Feature",
    "geometry":
    {"type":"Polygon",
    "coordinates":[
        [[1.450659,38.906329],
        [1.451538,38.906425],
        [1.451575,38.906277],
        [1.45052,38.906139],
        [1.450336,38.906182],
        [1.450431,38.906263],
        [1.450659,38.906329]]
        ]},
    "properties":{
        "height":"6",
        "material":"1",
        "id":"4945"
        }
    }
    ]
}

/clutter/delete

Delete a private clutter item referenced by its id passed as a clean URL

/clutter/delete/4945

The id property is returned by the get clutter endpoint /clutter/get

Exanple response:

{"info": "Deleted clutter #4945"}