Version 2017-03-22

Thomas Schreiber
Dubravko Jagar
RTR-NetTest team

1. Introduction and terms of use

The present document specifies requests for Open Data collected by the RTR-NetTest and is available under https://www.netztest.at/en/Opendata. Open Data can be obtained at the user’s discretion in two possible formats:

  • Zipped CSV files for data collected within the last 31 days or within a specified month (Content-Type: application/zip; cf. Chapter CSV-Export) and

  • JSON data for any requests, even for combinations of several criteria (Content-Type: application/json;charset=UTF-8).

JSON data can be provided for two types of requests:

The Open Data interface is accessible via https://www.netztest.at/opendata

Occurrences of INTERFACE in URLs in this document have to be replaced with the above link.

The services are specified by means of their attributes. Sample requests and responses are also provided. Names within angle brackets <> are mandatory, within curly brackets {} are optional and have to be replaced with actual values. Attributes in a query after ? are always defined as <key>=<value> parameter pairs. Multiple attributes are delimited with ampersand &. The general format is hence:

GET INTERFACE<path>{?key-1=value-1}{&key-2=value-2}…​{&key-n=value-n}

The parameter "sender" is optional for low-volume requests. For high-volume requests, please contact RTR (netztest@rtr.at) for instructions regarding the parameter "sender". Users with a registered sender ID can be informed in case of major interface changes.

Data accessible via the Open Data Interface are made available under Creative Commons Attribution 3.0 Austria (CC BY 3.0). Regarding privacy policy and terms of use, please refer to https://www.rtr.at/en/tk/netztestterms.

2. Search for tests by open-data

2.1. Request

Method URL

GET

INTERFACE/opentests/search{?parameters}

2.2. Parameters

Type Name Description

Url

filter-criteria

Optional. The criteria, which search-results have to meet. Possible criteria are:

download_kbit: LONG

download_kbit[]: LONG

upload_kbit: LONG

upload_kbit[]: LONG

ping_ms: DOUBLE

ping_ms[]: DOUBLE

time: DATE

time[]: DATE

zip_code: LONG

zip_code[]: LONG

cat_technology: STRING

cat_technology[]: STRING

client_version: STRING

client_version[]: STRING

model: STRING

model[]: STRING

network_name: STRING

network_name[]: STRING

network_type: STRING

network_type[]: STRING

platform: STRING

platform[]: STRING

signal_strength: LONG

signal_strength[]: LONG

open_uuid: UUID

client_uuid: UUID

long: DOUBLE

long[]: DOUBLE

lat: DOUBLE

lat[]: DOUBLE

mobile_provider_name: STRING

mobile_provider_name[]: STRING

provider_name: STRING

provider_name[]: STRING

sim_mcc_mnc: STRING

sim_mcc_mnc[]: STRING

sim_country: STRING

sim_country[]: STRING

asn: LONG

asn[]: LONG

network_country: STRING

network_country[]: STRING

country_geoip: STRING

country_geoip[]: STRING

loc_accuracy: LONG

loc_accuracy[]: LONG

public_ip_as_name: STRING

format: ["json", "csv"]

Date fields have to be submitted as a number, representing the number of milliseconds that have elapsed since midnight, January 1st, 1970 or in the format “yyyy-MM-dd HH:mm:ss”. The time is given in UTC.

Decimal point (Full Stop “.”) is always used to separate the integer part from the fractional part of a number written in decimal form. This is independent from the local or regional settings.

Numeric fields also allow using the comparators ‘>’ and ‘<’ (meaning ‘=>’ and ‘=<’ respectively). Dates have always to be queried as ranges by using these comparators.

String fields allow using the wildcard ‘*’ for matching any literals and ‘?’ for matching one arbitrary literal.

It is possible, to begin each filter argument with an exclamation mark (!) to negate the filter. E.g. network_type=!LAN will yield all tests where the network type was not LAN.

The criteria denoted with [] can be used more than once in a query. Data has to match all criteria. If an array for one criterion is given, the data has to match each entry.

Generally a query on a parameter value ‘null’ is not possible, except for the parameter loc_accuracy, where the value -1 means ‘null’. Non-‘null’ values are queried with any single or multiple values.

Url

sort_by, sort_order

Optional. The field for which the data are sorted. Valid fields are: “download_kbit", "upload_kbit", "time", "signal_strength" and "ping_ms”.

For this, the sort_by-Parameter specifies the field, the sort_order-Parameter specifies the direction (‘asc’ or ‘desc’).

Per Default, the results are sorted by the time of the test in descending order (i.e. sort_by=time&sort_order=desc).

Url

max_results

Optional. This is the page size, i.e. maximum number of result items that are returned per page.

The default value is 100 items per page. The page size limit is 10000 items, i.e. not more than 10000 results can be displayed in a page.

Url

cursor

Optional. It is used for pagination if the query returns more than the number of items according to parameter max_results. The value to be used for the display of the next page is given by the previous response in returned parameter next_cursor.

Url

format

Optional. Using the String values "json" or "csv" it is possible to specify the desired output format of the query. Default: "json".

If the sort parameters are specified, the value of the cursor is a multiple of the parameter max_results, otherwise it is an arbitrary number.

Url

_, timestamp

Optional. Will be ignored and can be used to prevent caching of the response.

Url

sender

Optional. ID of the sender, for authentication.

2.3. Response

Status Response

200

The resulting JSON or CSV, specified as following.

400

A JSON Error Message containing all fields with invalid values.

2.3.1. Returned JSON

Value Type Example

duration_ms

Numeric

124

next_cursor

Numeric

1455

results

JSONArray

[{opendata-summary-item}]

duration_ms

The time it took the server to search for tests matching all criteria in milliseconds.

next_cursor

Cursor for obtaining the next page, if the number of matched items exceeds the page size. ‘null’ if there are no more pages. Cf. search parameters max_results and cursor.

results

The array containing the summaries of all matching tests. It is empty, if no tests matched the criteria.

2.3.2. Opendata-summary-item

Value Type Example

platform

String

“Android 4G”

model

String

"SM-N910F"

time

String

"2013-07-16 09:57:17"

provider_name

String

"Some Provider"

download_kbit

Numeric

81180

upload_kbit

Numeric

77883

ping_ms

Numeric

4.254356

signal_strength

Numeric

-67

lte_rsrp

Numeric

-70

lat

Numeric

48.1977655

long

Numeric

16.349674

open_test_uuid

String

“Of7d6e88b-e883-467f-8435-ee6f6abc5080”

open_uuid

String

"P9f2b7bb1-39ea-454e-aa97-538564d7f8f1"

For detailed explanation, please refer to chapter Open data for one specific test.

2.4. Example

2.4.1. Request

GET INTERFACE/opentests/search?asn=1764&sender=a1b2c3d4e5f6

This request searches for all conducted tests where the autonomous system number matches 1764 and displays the recent ones of them according to the default page size (cf. max_results). The sender ID is optionally supplied as well.

GET INTERFACE/opentests/search?download_kbit=>10&download_kbit=<100&platform=An*&time=<2014-06-01 13:10:00&sort_by=upload_kbit&sort_order=asc&max_results=1000&cursor=2000

This request searches for all conducted tests where the download speed is between 10 and 100 kbps, were conducted before June 1st, 2014 13:10:00 UTC and the platform starts with “An”. All results are then sorted by the upload-speed in ascending order. The cursor is set to 2000 in order to display the 3rd page with 1000 items.

GET INTERFACE/opentests/search?lat⇒48.09&lat=<48.35&long⇒16.14&long=<16.62&loc_accuracy⇒0&loc_accuracy=<2000&max_results=10000

This query searches for all conducted tests within the rectangular area around Vienna with a position accuracy of up to 2 km. The recent 10000 tests are returned in one page.

2.4.2. Response

{
    "next_cursor": 866505,
    "results": [
    {
        "platform": " LAN",
        "model": "IE",
        "long": 16.393557,
        "open_test_uuid": "Od1e399e6-2a82-4801-a3e7-d125af88b55d",
        "time": "2014-10-03 14:19:22",
        "open_uuid": "P250081fe-a79e-4fbc-8b0b-76b901de2b4b",
        "download_kbit": 42281,
        "signal_strength": null,
        "ping_ms": 4.000914,
        "lte_rsrp": null,
        "upload_kbit": 1124,
        "lat": 48.233243,
        "provider_name": "next layer"
    },
    ...
    {
        "platform": "Android WLAN",
        "model": "LGE Nexus 5",
        "long": 16.3497029,
        "open_test_uuid": "Oa1f286be-3c91-4f7d-b3d3-29d0e143e20d",
        "time": "2014-08-14 07:59:13",
        "open_uuid": "Pf9b785d8-d0c4-45c0-abd6-b1d492e72fe2",
        "download_kbit": 62864,
        "signal_strength": -57,
        "ping_ms": 2.769414,
        "lte_rsrp": null,
        "upload_kbit": 74528,
        "lat": 48.1977398,
        "provider_name": "next layer"
    }
    ],
    "duration_ms": 424
}

The reference interface implementation is available at https://www.netztest.at/en/Opentests via the “Advanced search” input option. The GET-parameters on this site are exactly the same as the parameters of the Open Data interface.

3. Open data for one specific test

This call gets all the open-data for one specific test by its open-test-uuid. The response is a JSON-Object with the values or ‘null’, if a value is unknown.

3.1. Request

Method URL

GET

INTERFACE/opentests/<open-test-uuid>{?parameters}

3.2. Parameters

Type Name Description

Url

open-test-uuid

Mandatory. The open-test-uuid of the test.

Url

verbose

Optional. If >0 the threadwise speed curve is additionally returned.

Url

sender

Optional. ID of the sender, for authentification.

3.3. Response

Status Response

200

The resulting JSON, specified as following.

404

If the UUID is invalid.

3.3.1. Returned JSON

Value Type Example

asn

Numeric

6830

bytes_download

Numeric

13653343

bytes_upload

Numeric

3712431

cat_technology

String

“3G”

client_version

String

“1.1”

country_asn

String

“AT”

country_geoip

String

“AT”

country_location

String

“AT”

connection

String

"nat_local_to_public_ipv4"

distance

Numeric

667.15

download_classification

Numeric

3

download_kbit

Numeric

6903

duration_download_ms

Numeric

7000.13

duration_upload_ms

Numeric

7000.12

implausible

Boolean

false

ip_anonym

String

“80.108.108”

lat

Numeric

48.2029024

loc_src

String

“network”

loc_accuracy

Numeric

5345

long

Numeric

16.3967841

lte_rsrp

Numeric

-6

lte_rsrq

Numeric

-81

model

String

“Sony Xperia Tablet Z LTE”

model_native

String

“SGP321“

ndt_download_kbit

Numeric

1443

ndt_upload_kbit

Numeric

2334

network_country

String

“DE”

network_mcc_mnc

String

232-05

network_name

String

“3 AT”

network_type

String

“WLAN”

num_threads

Numeric

3

num_threads_requested

Numeric

3

num_theads_ul

Numeric

3

open_test_uuid

String

"O10b9e95c-d47a-4328-b2ff-82ef24c8e6fe"

open_uuid

String

“Pa19046c3-cecf-437a-a3d0-062466c8a32c”

ping_classification

Numeric

3

ping_ms

Numeric

16.178334

platform

String

“Android”

product

String

“SGP321”

provider_name

String

“Provider”

public_ip_as_name

String

“AS32768 Provider“

roaming_type

Integer

0

server_name

String

“RTR-DEVELOP-SERVER”

signal_classification

Numeric

3

signal_strength

Numeric

-56

sim_country

String

“at”

sim_mcc_mnc

String

“232-05”

speed_curve

Speed-Curve-Item

{speed-curve-item}

speed_curve_threadwise

Speed-Curve-Threadwise

{speed-curve-threadwise}

test_if_bytes_download

Numeric

4991145

test_if_bytes_upload

Numeric

1961967

testdl_if_bytes_download

Numeric

4580781

testdl_if_bytes_upload

Numeric

107077

testul_if_bytes_download

Numeric

57372

testul_if_bytes_upload

Numeric

1627790

test_duration

Numeric

7

Time

String

"2013-07-15 01:55"

time_dl_ms

Numeric

3692.15

time_ul_ms

Numeric

13496.54

upload_classification

Numeric

3

upload_kbit

Numeric

711

wifi_link_speed

Numeric

7562

zip_code

Numeric

1030

asn

Autonomous system number.

bytes_download

Total number of bytes downloaded during download test (excluding training-phase).

bytes_upload

Total number of bytes uploaded during upload test (excluding training-phase).

cat_technology

Technology category of the network, e.g. “3G”, “4G”, “WLAN”.

client_version

Software version number of the client.

community

Name of Austrian community (Gemeinde).

connection/nat_type

Type of connection in terms of NAT and IP-Version (e.g. behind NAT with local to public IP and IPv4).

country_asn

Country of AS of client IP.

country_geoip

Country according client IP address.

country_location

Country of geo-location.

cov800cat

Community category of Austrian 800 MHz coverage obligation derived from gkz (see https://www.rtr.at/en/tk/multibandauktionVersorgungsauflage800MHz).

distance

The distance that the user moved in meters.

district

Name of Austrian district (Bezirk).

download_classification

Classification for the download speed in a traffic-light system.
0 = unknown, 1 = red, 2 = yellow, 3 = green.

download_kbit

The download-speed in kilobit per second.

duration_download_ms

Duration of download test in ms.

duration_upload_ms

Duration of upload test in ms.

gkz

Community ID (Gemeindekennzahl, see http://www.statistik.at/web_de/klassifikationen/regionale_gliederungen/gemeinden/index.html).

implausible

Identification of implausible test results.

ip_anonym

The anonymized IP-Address of the client.

lat

Latitude of the client position.

loc_accuracy

Estimation of accuracy of client location.

loc_src

Source for the geo location-data. Valuse: “gps”, “network”.

long

Longitude of the client position.

lte_rsrp

LTE signal strength in dBm.

lte_rsrq

LTE signal quality in decibels.

model

Name of the device used.

model_native

Name of the device used, raw device name.

ndt_download_kbit

Download speed in the NDT-test in kilobit per second.

ndt_upload_kbit

Upload speed in the NDT-test in kilobit per second.

network_country

Country of the network in ISO 3166.

network_mcc_mnc

Network identification whereas the first three digits represent the country, the digits following the dash represent the mobile network provider within that country.

network_name

Display name of the mobile network.

network_type

Type of the network, e.g. MOBILE, LAN, WLAN.

num_threads

Number of threads used for the downlink test.

num_threads_requested

Number of threads requested by the server.

num_threads_ul

Number of threads used for the uplink test.

open_test_uuid

Open-Test-UUID: The UUID of the Test.

open_uuid

Open-UUID: Identifies the client that conducted the test. The a new Open-UUID is assigned to the client on a regular basis.

ping_classification

Classification for the ping speed in a traffic-light system.

ping_ms

Median ping (round-trip time) in milliseconds, measured on the server side. In previous versions (before June 3rd 2015) this was the minimum ping measured on the client side.

platform

Platform on which the test has been conducted. E.g.

  • “Android” (= Google Android App),

  • “iOS” (= Apple iOs App),

  • Applet (= Java applet test within a browser),

  • RMBTjs (= simple JavaScript test within a browser, without Java),

  • RMBTws (= advanced JavaScript test using WebSockets within the browser).

product Product

Name of the client device.

provider_name

Name of the internet service provider.

province

Name of Austrian province (Bundesland).

public_ip_as_name

Name of the AS of the clients public IP.

roaming_type

Integer representing the roaming status of the client:

  • 0: no roaming,

  • 1: national roaming,

  • 2: international roaming.

server_name

Name of the test-server.

signal_classification

Classification for the signal strength in a traffic-light system.

signal_strength

Signal strength (RSSI) in dBm.

sim_country

Home country of the SIM card in ISO 3166.

sim_mcc_mnc

Network identification of the SIM provider. The digits of MCC and MNC have the same meaning as described in “network_mcc_mnc”.

speed_curve

Aggregated history of transferred data bytes during a test.

speed_curve_threadwise

History of transferred data bytes per thread during a test. Returned only if verbose>0.

test_duration

Duration of the test per direction (up- or download) in seconds.

test_if_bytes_download

Data volume received on the interface during the test (including training phase).

test_if_bytes_upload

Data volume transmitted on the interface during the test (including training phase).

testdl_if_bytes_download

Data volume received on the interface during the download test.

testdl_if_bytes_upload

Data volume transmitted on the interface during the download test.

testul_if_bytes_download

Data volume received on the interface during the upload test.

testul_if_bytes_upload

Data volume transmitted on the interface during the upload test.

time/time_utc

UTC date and time when test was started.

time_dl_ms

Relative start time of download in ms.

time_ul_ms

Relative start time of upload in ms.

upload_classification

Classification for the upload speed in a traffic-light system.

upload_kbit

Upload speed in kilobit per second.

wifi_link_speed

WLAN link speed according to the Android API.

zip_code

ZIP-Code of the clients location (if available).

Note: Only the italic marked items are included in the open data zipped csv file.

3.3.2. Speed-curve-item

Value Type Example

download

JSONArray

[{measurement-item}]

upload

JSONArray

[{measurement-item}]

signal

JSONArray

[{signal-item}]

location

JSONArray

[{location-item}]

download

Measurements of downloaded bytes at various times during the test.

upload

Measurements of uploaded bytes at various times during the test.

signal

Measurements of signal strength and network type at various times during the test.

location

The client’s locations throughout the test.

3.3.3. Measurement-item

Value Type Example

time_elapsed

Numeric

55

bytes_total

Numeric

4096

time_elapsed

The time elapsed since the start of the test phase in milliseconds.

bytes_total

The sum of all bytes transferred since the start of the test phase.

3.3.4. Signal-item

Value Type Example

time_elapsed

Numeric

55

network_type

String

“LTE”

cat_technology

String

“4G”

signal_strength

Numeric

-85

lte_rsrq

Numeric

-6

lte_rsrp

Numeric

-77

time_elapsed

The time elapsed since the start of the test in milliseconds.

network_type

Type of the network, e.g. GSM, EDGE, UMTS, HSPA, LTE, LAN, WLAN…

cat_technology

Technology category of the network, e.g. “3G”, “4G”, “WLAN”.

signal_strength

Signal strength (RSSI) in dBm.

lte_rsrq

LTE signal quality in decibels.

lte_rsrp

LTE signal strength in dBm.

3.3.5. Location-item

Value Type Example

time_elapsed

Numeric

55

loc_accuracy

Numeric

8

long

Numeric

14.20882799

lat

Numeric

47.76077786

time_elapsed

The time elapsed since the start of the test in milliseconds.

loc_accuracy

Estimation of accuracy of client location.

long

Longitude of the client position.

lat

Latitude of the client position.

3.3.6. Speed-curve-threadwise

Value Type Example

download

JSONArray

"2": [{measurement-threadwise}]

upload

JSONArray

"0": [{measurement-threadwise}]

download

Measurements of downloaded bytes per thread at various times during the test. The download threads are named "0", "1", "2" etc.

upload

Measurements of uploaded bytes per thread at various times during the test. The upload threads are named "0", "1", "2" etc.

Note: If there is no data transmitted in a thread, this thread is not reported at all. The threads may also differ in duration and number of speed curve measurement items. The time gaps between single items are variable as well.

3.3.7. Measurement-threadwise

Value Type Example

time_elapsed_ns

Numeric

41183662

bytes_total

Numeric

319488

time_elapsed_ns

The time elapsed since the start of the test phase for this thread, in nanoseconds.

bytes_total

The sum of all bytes transferred since the start of the test phase for this thread.

3.4. Example

3.4.1. Request

GET INTERFACE/opentests/O211ec703-71db-4c32-b61a-77fc1bbf1705?sender=m7n8o9p10q11

3.4.2. Response

{
    "testdl_if_bytes_download": null,
    "testul_if_bytes_upload": null,
    "time_dl_ms": null,
    "model_native": "Firefox",
    "implausible": false,
    "ndt_download_kbit": null,
    "download_classification": 3,
    "testul_if_bytes_download": null,
    "public_ip_as_name": "NEXTLAYER-AS next layer Telekommunikationsdienstleistungs- GmbH,AT",
    "speed_curve": {
        "location": [
            {
                "time_elapsed": 44488,
                "loc_accuracy": 100,
                "long": 16.3495225,
                "lat": 48.1979063
            }
        ],
        "signal": [ ],
        "download": [
            {
                "time_elapsed": 41,
                "bytes_total": 319488
            },
            ...
            {
                "time_elapsed": 7280,
                "bytes_total": 76959744
            }
        ],
        "upload": [
            {
                "time_elapsed": 107,
                "bytes_total": 4096
            },
            ...
            {
                "time_elapsed": 7148,
                "bytes_total": 78868480
            }
        ]
    },
    "long": 16.349527665317,
    "open_test_uuid": "O211ec703-71db-4c32-b61a-77fc1bbf1705",
    "time": "2014-10-01 14:46",
    "testdl_if_bytes_upload": null,
    "ping_classification": 3,
    "open_uuid": "P7241cee2-7773-47cb-b398-dd047260db32",
    "cat_technology": "LAN",
    "test_duration": 7,
    "ndt_upload_kbit": null,
    "loc_accuracy": 100,
    "num_threads_ul": 3,
    "duration_upload_ms": 7126.321333,
    "platform": null,
    "country_asn": "EU",
    "connection": null,
    "time_ul_ms": null,
    "roaming_type": null,
    "wifi_link_speed": null,
    "lte_rsrq": null,
    "asn": 1764,
    "lte_rsrp": null,
    "country_geoip": "AT",
    "num_threads_requested": 3,
    "provider_name": "next layer Telekommunikationsdienstleistungs-GmbH",
    "model": "Firefox",
    "network_type": "LAN",
    "zip_code": 1060,
    "sim_mcc_mnc": null,
    "test_if_bytes_download": null,
    "server_name": "RTR Websocket",
    "distance": null,
    "sim_country": null,
    "duration_download_ms": 7040.742745,
    "loc_src": "rastered",
    "download_kbit": 87445,
    "network_mcc_mnc": null,
    "country_location": "AT",
    "network_country": null,
    "lat": 48.19801980198,
    "ip_anonym": "2a01:190:15fd::",
    "bytes_download": 76959744,
    "network_name": null,
    "upload_classification": 3,
    "test_if_bytes_upload": null,
    "num_threads": 3,
    "product": "Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko\/20100101 Firefox\/32.0",
    "signal_classification": null,
    "signal_strength": null,
    "ping_ms": 2.165636,
    "bytes_upload": 78868480,
    "upload_kbit": 88537,
    "client_version": "0.3"
}

3.4.3. Request Threadwise

GET INTERFACE/opentests/O211ec703-71db-4c32-b61a-77fc1bbf1705?verbose=1

3.4.4. Response Threadwise

{
    "testdl_if_bytes_download": null,
    "testul_if_bytes_upload": null,
    "time_dl_ms": null,
    "model_native": "Firefox",
    "implausible": false,
    "ndt_download_kbit": null,
    "download_classification": 3,
    "testul_if_bytes_download": null,
    "public_ip_as_name": "NEXTLAYER-AS next layer Telekommunikationsdienstleistungs- GmbH,AT",
    "speed_curve": {...}    //same as speed-curve-item
    "long": 16.34952766531714,
    "open_test_uuid": "O211ec703-71db-4c32-b61a-77fc1bbf1705",
    "time": "2014-10-01 14:46:06",
    "testdl_if_bytes_upload": null,
    "ping_classification": 3,
    "open_uuid": "P7241cee2-7773-47cb-b398-dd047260db32",
    "cat_technology": "LAN",
    "test_duration": 7,
    "ndt_upload_kbit": null,
    "loc_accuracy": 100,
    "num_threads_ul": 3,
    "duration_upload_ms": 7126.321333,
    "platform": "RMBTws",
    "country_asn": "EU",
    "connection": null,
    "time_ul_ms": null,
    "roaming_type": null,
    "speed_curve_threadwise": {
        "download": {
            "0": [
                {
                    "time_elapsed_ns": 41183662,
                    "bytes_total": 319488
                },
                ...
                {
                    "time_elapsed_ns": 7280490842,
                    "bytes_total": 17825792
                }
            ],
            "1": [
                {
                    "time_elapsed_ns": 41273266,
                    "bytes_total": 40960
                },
                ...
                {
                    "time_elapsed_ns": 7040742745,
                    "bytes_total": 42909696
                }
            ],
            "2": [
                {
                    "time_elapsed_ns": 41228267,
                    "bytes_total": 49152
                },
                ...
                {
                    "time_elapsed_ns": 7240738087,
                    "bytes_total": 16224256
                }
            ]
        },
        "upload": {...} //similar to download
    },
    "wifi_link_speed": null,
    "lte_rsrq": null,
    "asn": 1764,
    "lte_rsrp": null,
    "country_geoip": "AT",
    "num_threads_requested": 3,
    "provider_name": "next layer Telekommunikationsdienstleistungs-GmbH",
    "model": "Firefox",
    "network_type": "LAN",
    "zip_code": 1060,
    "sim_mcc_mnc": null,
    "test_if_bytes_download": null,
    "server_name": "RTR Websocket AT",
    "distance": null,
    "sim_country": null,
    "duration_download_ms": 7040.742745,
    "loc_src": "rastered",
    "download_kbit": 87445,
    "network_mcc_mnc": null,
    "country_location": "AT",
    "network_country": null,
    "lat": 48.198019801980195,
    "ip_anonym": "2a01:190:15fd::",
    "bytes_download": 76959744,
    "network_name": null,
    "upload_classification": 3,
    "test_if_bytes_upload": null,
    "num_threads": 3,
    "product": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0",
    "signal_classification": null,
    "signal_strength": null,
    "ping_ms": 2.165636,
    "bytes_upload": 78868480,
    "upload_kbit": 88537,
    "client_version": "0.3"
}

4. CSV-Export

4.1. Request

Method URL

GET

INTERFACE/export

GET

INTERFACE/export/netztest-opendata-<year>-<month>.zip

4.2. Parameters

No parameters need to be sent in order to obtain the test results of the last 31 days. For the second type of request, it is necessary to replace <year> with a four-digit year number ≥ 2000 and < 3000 and <month> with a two-digit month number ≥ 01 and ≤ 12).

4.3. Response

Status Response

200

Returns a zip file containing a csv file. This file contains the test results of the given period from the open data database. Please refer to chapter Returned JSON for the differences in included items compared to the JSON data.

4.4. Example

4.4.1. Request

GET INTERFACE/export

4.4.2. Response

open_uuid,open_test_uuid,time,cat_technology,network_type,lat,long,loc_src,loc_accuracy,zip_code,download_kbit,upload_kbit,ping_ms,lte_rsrp,server_name,test_duration,num_threads,platform,model,client_version,network_mcc_mnc,network_name,sim_mcc_mnc,nat_type,asn,ip_anonym,ndt_download_kbit,ndt_upload_kbit,implausible,signal_strength

P51bbdd95-8b47-493e-9e51-b752fdad8ef3,O2f5e300f-eedd-4865-920c-2c3aa7852e51,2014-08-25
22:00,WLAN,WLAN,48.25202520252025,16.41025641025641,,65.0,1210,34821,4481,9.550473,,RTR-SERVER,7,3,iOS,iPhone
5s,1.2.3,,,,nat_local_to_public_ipv4,6830,84.113.23,,,false,

Pa5e8df81-298f-47e8-a389-ec6ca8ab7d8a,Ocd9d1c5e-4a04-4bb0-8b9e-6818d2acc2ed,2014-08-25
22:00,3G,HSPA+,,,,,,23811,4256,19.720521,,RTR-SERVER,7,3,Android,Galaxy
S5,1.5.4,232-01,A1,232-01,no_nat_ipv4,16305,46.206.119,,,false,-65

P90a489fb-143a-4206-8687-bda2f00aaeef,O5b5f9cee-b551-47f3-8c01-32d672887349,2014-08-25
22:01,WLAN,WLAN,48.317731773177314,16.58434547908232,,65.0,2232,230,874,202.222417,,RTR-SERVER,7,1,iOS,iPad
mini WiFi,1.2.3,,,,nat_local_to_public_ipv4,8412,212.95.7,,,false,

...

5. ShareImage-Generation

This call generates images containing the results of a user’s speed test.

5.1. Request

Method URL

GET

INTERFACE/<language>/<open-test-uuid>/<imagetype>.png

5.2. Parameters

Type Name Description Example

Url

language

The language of all text contained in the image. Can currently either be “de” or “en”.

“de”

Url

open-test-uuid

The Open-Test-UUID for the specific speed-test event. Can be obtained by calling /opentests.

O10b9e95c-d47a-4328-b2ff-82ef24c8e6fe

Url

imagetype

The type of image that should be generated. Can currently either be “forumlarge”, “forumsmall” or “thumbnail”.

“forumlarge”

5.3. Response

Status Response

200

The generated image of mimetype image/png.

400

“invalid language”

400

"invalid image type"

404

“Invalid open-uuid”

5.4. Example

5.4.1. Request

GET INTERFACE/en/O211ec703-71db-4c32-b61a-77fc1bbf1705/forumsmall.png

5.4.2. Response

image

6. Quality of Service

6.1. Request

Method URL

GET

INTERFACE/qos/<open-test-uuid>

6.2. Parameters

Type Name Description

Url

open-test-uuid

Mandatory. The open-test-uuid of the test.

6.3. Response

Status Response

200

The resulting JSON, specified as following.

200

Test result could not be loaded.

6.3.1. Returned JSON

Value Type Example

error

JSONArray

[{error-item}]

testresultdetail_testdesc

JSONArray

[{testresultdetail-testdesc-item}]

testresultdetail

JSONArray

[{testresultdetail-item}]

testresultdetail_desc

JSONArray

[{testresultdetail-desc-item}]

error

Error message(s).

testresultdetail_testdesc

Subtest descriptions containing description, name, and type of each subtest.

testresultdetail

Detailed results of each subtest.

testresultdetail_desc

Summaries of groups of subtest results.

6.3.2. Error-item

An array of strings, e.g. ["Test result could not be loaded."] if the open-test-uuid does not exist, and [] if no error has occurred.

6.3.3. Testresultdetail-testdesc-item

Value Type Example

desc

String

"Bei diesem Test wird überprüft, ob die HTTP-Anfrage durch einen Proxy oder eine andere \"Middlebox\" verändert wird."

name

String

"Transparente Verbindung"

test_type

String

"NON_TRANSPARENT_PROXY"

desc

Description of the subtest.

name

Name of the subtest.

test_type

Type of the subtest, i.e., WEBSITE, HTTP_PROXY, NON_TRANSPARENT_PROXY, DNS, TCP, or UDP.

6.3.4. Testresultdetail-item

Value Type Example

failure_count

Numeric

0

uid

Numeric

432645

result

JSONObject

{result-item}

test_summary

String

"TCP Outgoing, Port: 585"

success_count

Numeric

1

test_desc

String

"TCP Outgoing:\nEs wurde versucht, eine ausgehende Verbindung zum QoS-Testserver über den Port: 585 aufzubauen."

test_type

String

"tcp"

failure_count

Number of failures of this subtest.

uid

Primary key of the subtest.

result

Subtest results and objectives.

test_summary

Short description of subtest, e.g. protocol, incoming/outgoing, and port.

success_count

Number of successful test evaluations.

test_desc

Description of subtest type category.

test_type

Type of the test, i.e., website, http_proxy, non_transparent_proxy, dns, tcp, or udp.

6.3.5. Result-item

Values with name prefix dns_, http_, nontransproxy_, tcp_, udp_, and website_ are specific to the respective subtest types.

Value Type Example

dns_objective_dns_record

String

"A"

dns_objective_host

String

"ebay.de",

dns_objective_resolver

String

"Standard"

dns_objective_timeout

String

"2000000000"

dns_result_duration

String

"47716302"

dns_result_entries

String

"[\{\"dns_result_address\":\"66.135.211.132\",\"dns_result_ttl\":\"1884\"},\{\"dns_result_address\":\"66.135.215.61\",\"dns_result_ttl\":\"1884\"},\{\"dns_result_address\":\"66.211.181.235\",\"dns_result_ttl\":\"1884\"}]"

dns_result_entries_found

String

"3"

dns_result_info

String

"OK"

dns_result_status

String

"NOERROR"

duration_ns

String

"614812708"

http_objective_range

String

"bytes=1000000-1004999"

http_objective_url

String

http://webtest.netztest.at/qostest/reference01.jpg

http_result_hash

String

"fc563e1e80b8cb964d712982fa2143c8"

http_result_header

String

"Server: nginx\nDate: Fri, 03 Oct 2014 16:43:36 GMT\nContent-Type: image/jpeg\nContent-Length: 5000\nLast-Modified: Sat, 27 Sep 2014 14:07:37 GMT\nConnection: keep-alive\nContent-Range: bytes 1000000-1004999/9982005\n"

http_result_length

String

"5000"

http_result_status

String

"206"

nontransproxy_objective_port

String

"51182"

nontransproxy_objective_request

String

"GET / HTTR/7.9"

nontransproxy_objective_timeout

String

"3000000000"

nontransproxy_result

String

"OK"

nontransproxy_result_response

String

"GET / HTTR/7.9"

start_time_ns

String

"24429032022"

tcp_objective_out_port

String

"585"

tcp_objective_timeout

String

"2000000000"

tcp_result_out

String

"OK"

tcp_result_out_response

String

"PING"

test_type

String

"tcp"

udp_objective_delay

String

"300000000"

udp_objective_out_num_packets

String

"1"

udp_objective_out_port

String

"27015"

udp_objective_timeout

String

"2000000000"

udp_result_out_num_packets

String

"1"

udp_result_out_packet_loss_rate

String

"0"

udp_result_out_response_num_packets

String

"1"

website_objective_timeout

String

"10000000000"

website_objective_url

String

http://webtest.netztest.at/kepler

website_result_duration

String

"795957031"

website_result_info

String

"OK"

website_result_rx_bytes

String

"144439"

website_result_status

String

"200"

website_result_tx_bytes

String

"14900"

dns_objective_dns_record

DNS record to request.

dns_objective_host

Target host of this subtest.

dns_objective_resolver

DNS resolver to be used for this subtest.

dns_objective_timeout

DNS query timeout in ns.

dns_result_duration

Time needed to complete the test.

dns_result_entries

Result of this test containing all dns entries that were found.

dns_result_entries_found

Number of entries found.

dns_result_info

Result status of this subtest (OK, TIMEOUT, or ERROR).

dns_result_status

Query status, e.g. NOERROR or NXDOMAIN.

duration_ns

Duration of the subtest in ns.

http_objective_range

String passed to the range request header.

http_objective_url

Target URL of this subtest.

http_result_hash

Checksum of downloaded content or TIMEOUT or ERROR.

http_result_header

Header of HTTP response.

http_result_length

Length of downloaded content.

http_result_status

Status code in header of HTTP response (or -1 if no response).

nontransproxy_objective_port

Test port for non-transparent proxy subtest.

nontransproxy_objective_request

Request string for this subtest.

nontransproxy_objective_timeout

Timeout for this subtest in ns.

nontransproxy_result

Result status of this subtest (OK, TIMEOUT, or ERROR).

nontransproxy_result_response

Response (echo of the test server).

start_time_ns

Starting time of test in ns relative to beginning of RTR- NetTest.

tcp_objective_out_port

Port number used for outgoing TCP subtest.

tcp_objective_timeout

Timeout of this subtest in ns.

tcp_result_out

Result status of this subtest (OK or FAILED).

tcp_result_out_response

Response received by client after sending message to test server.

test_type

Type of subtest.

udp_objective_delay

Delay between packets in ns.

udp_objective_out_num_packets

Number of packets sent by client.

udp_objective_out_port

Port number used for outgoing subtest.

udp_objective_timeout

Timeout for this subtest in ns.

udp_result_out_num_packets

Number of packets received by test server.

udp_result_out_packet_loss_rate

Outgoing packet loss rate.

udp_result_out_response_num_packets

Responses to outgoing packets (used to determine packet loss rate).

website_objective_timeout

Timeout for website subtest.

website_objective_url

Target URL of this subtest.

website_result_duration

Time needed to download and render website in ns.

website_result_info

Result status of this subtest (OK, TIMEOUT, or ERROR).

website_result_rx_bytes

Bytes received during subtest.

website_result_status

Status code in header of HTTP response (or -1 if no response).

website_result_tx_bytes

Bytes transmitted during subtest.

6.3.6. Testresultdetail-desc-item

Value Type Example

uid

JSONArray

[432659, 432660]

desc

String

"Der übertragene Inhalt entspricht exakt dem Original, er wurde nicht modifiziert."

test

String

"HTTP_PROXY"

status

String

"ok"

uid

Array of (numeric) primary keys of the subtest.

desc

Description of the subtest result.

test

Type of the subtest, i.e., WEBSITE, HTTP_PROXY, NON_TRANSPARENT_PROXY, DNS, TCP, or UDP.

status

Status of the subtest result.

6.4. Example

6.4.1. Request

GET INTERFACE/qos/O56b5cc79-5669-4457-bce2-0aeaf3b7242f

6.4.2. Response

{

    "error": [ ],
    "testresultdetail_testdesc": [
        {
            "desc": "Beim Webseiten-Test wird eine Referenz-Webseite (mobile Kepler-Seite der ETSI) heruntergeladen. Es wird dabei überprüft, ob die Übertragung der Seite möglich ist, und wie lange die Übertragung der Seite dauert.",
            "name": "Webseite",
            "test_type": "WEBSITE"
        },
        {
            "desc": "Bei diesem Test wird ein Test-Webobjekt (z.B. Bild) heruntergeladen und überprüft, ob es beim Transport verändert wurde.",
            "name": "Unveränderter Inhalt",
            "test_type": "HTTP_PROXY"
        },
        {
            "desc": "Bei diesem Test wird überprüft, ob die HTTP-Anfrage durch einen Proxy oder eine andere \"Middlebox\" verändert wird.",
            "name": "Transparente Verbindung",
            "test_type": "NON_TRANSPARENT_PROXY"
        },
        {
            "desc": "DNS ist ein fundamentaler Internetdienst. Er wird zur Übersetzung von Domain-Namen auf IP-Adressen verwendet. Es wird - je nach Test - getestet, ob der Dienst verfügbar ist, ob die Antworten korrekt sind und wie schnell der Server antwortet.",
            "name": "DNS",
            "test_type": "DNS"
        },
        {
            "desc": "TCP ist ein wichtiges verbindungsloses Internetprotokoll. Es wird z.B. für die Übertragung von Webseiten und Mails verwendet.",
            "name": "TCP Ports",
            "test_type": "TCP"
        },
        {
            "desc": "UDP ist ein wichtiges verbindungsorientiertes Internet-Protokoll, das für Echtzeitübertragungen (zB. VoIP, Video) verwendet wird.",
            "name": "UDP Ports",
            "test_type": "UDP"
        }
    ],
    "testresultdetail": [
        {
            "failure_count": 0,
            "uid": 432645,
            "result": {
                "tcp_objective_timeout": "2000000000",
                "start_time_ns": "24429032022",
                "tcp_result_out_response": "PING",
                "tcp_result_out": "OK",
                "tcp_objective_out_port": "585",
                "duration_ns": "614812708"
            },
            "test_summary": "TCP Outgoing, Port: 585",
            "success_count": 1,
            "test_desc": "TCP Outgoing:\nEs wurde versucht, eine ausgehende Verbindung zum QoS-Testserver über den Port: 585 aufzubauen.",
            "test_type": "tcp"
        },
        {
            "failure_count": 0,
            "uid": 432646,
            "result": {
                "start_time_ns": "24435081033",
                "udp_objective_out_port": "27015",
                "udp_result_out_response_num_packets": "1",
                "udp_result_out_packet_loss_rate": "0",
                "udp_objective_out_num_packets": "1",
                "udp_result_out_num_packets": "1",
                "udp_objective_timeout": "2000000000",
                "udp_objective_delay": "300000000",
                "duration_ns": "783956145"
            },
            "test_summary": "UDP Outgoing, Port: 27015, Anzahl Pakete: 1",
            "success_count": 1,
            "test_desc": "UDP Outgoing:\nAnzahl verschickter Pakete: 1, am Server angekommen: 1, am Client zurückgekommen: 1.\nPaketverlustrate: 0%",
            "test_type": "udp"
        },
        ...,
        {
            "failure_count": 0,
            "uid": 432657,
            "result": {
                "start_time_ns": "25296847907",
                "nontransproxy_result": "OK",
                "nontransproxy_result_response": "GET / HTTR/7.9",
                "nontransproxy_objective_timeout": "3000000000",
                "nontransproxy_objective_port": "51182",
                "nontransproxy_objective_request": "GET / HTTR/7.9",
                "duration_ns": "452739583"
            },
            "test_summary": "Port: 51182\nAnfrage: GET / HTTR/7.9",
            "success_count": 1,
            "test_desc": "Eine HTTP Anfrage mit dem Inhalt: 'GET / HTTR/7.9' wurde an den Testserver (Port: 51182) geschickt.\nDie Antwort war: 'GET / HTTR/7.9'",
            "test_type": "non_transparent_proxy"
        },
        {
            "failure_count": 0,
            "uid": 432659,
            "result": {
                "http_objective_range": "bytes=1000000-1004999",
                "start_time_ns": "25759770876",
                "http_result_status": "206",
                "http_result_length": "5000",
                "http_result_header": "Server: nginx\nDate: Fri, 03 Oct 2014 16:43:36 GMT\nContent-Type: image/jpeg\nContent-Length: 5000\nLast-Modified: Sat, 27 Sep 2014 14:07:37 GMT\nConnection: keep-alive\nContent-Range: bytes 1000000-1004999/9982005\n",
                "http_objective_url": "http://webtest.netztest.at/qostest/reference01.jpg",
                "http_result_hash": "fc563e1e80b8cb964d712982fa2143c8",
                "duration_ns": "225194896"
            },
            "test_summary": "Ziel: http://webtest.netztest.at/qostest/reference01.jpg",
            "success_count": 1,
            "test_desc": "Ziel: 'http://webtest.netztest.at/qostest/reference01.jpg'\nIntervall: bytes=1000000-1004999\nDauer: 0,2 s\nLänge: 5000\r\nStatus Code: 206\nHash: fc563e1e80b8cb964d712982fa2143c8\nHeader: \r\nServer: nginx\nDate: Fri, 03 Oct 2014 16:43:36 GMT\nContent-Type: image/jpeg\nContent-Length: 5000\nLast-Modified: Sat, 27 Sep 2014 14:07:37 GMT\nConnection: keep-alive\nContent-Range: bytes 1000000-1004999/9982005\n",
            "test_type": "http_proxy"
        },
        ...,
        {
            "failure_count": 0,
            "uid": 432661,
            "result": {
                "start_time_ns": "26652727959",
                "website_result_tx_bytes": "14900",
                "website_objective_url": "http://webtest.netztest.at/kepler",
                "website_result_rx_bytes": "144439",
                "website_result_info": "OK",
                "website_result_duration": "795957031",
                "website_objective_timeout": "10000000000",
                "website_result_status": "200",
                "duration_ns": "813012239"
            },
            "test_summary": "Ziel: http://webtest.netztest.at/kepler",
            "success_count": 1,
            "test_desc": "Die Übertragung von http://webtest.netztest.at/kepler dauerte 0,8 s.\r\n\nDatenvolumen Downlink: 144,4 kB\nDatenvolumen Uplink: 14,9 kB\nHTTP Status code: 200",
            "test_type": "website"
        },
        {
            "failure_count": 0,
            "uid": 432662,
            "result": {
                "start_time_ns": "27471066031",
                "dns_objective_timeout": "2000000000",
                "dns_result_info": "OK",
                "dns_result_entries_found": "3",
                "dns_objective_resolver": "Standard",
                "dns_result_duration": "34847865",
                "dns_result_entries": "[{\"dns_result_address\":\"17.142.160.59\",\"dns_result_ttl\":\"3540\"},{\"dns_result_address\":\"17.178.96.59\",\"dns_result_ttl\":\"3540\"},{\"dns_result_address\":\"17.172.224.47\",\"dns_result_ttl\":\"3540\"}]",
                "dns_result_status": "NOERROR",
                "dns_objective_dns_record": "A",
                "dns_objective_host": "apple.com",
                "duration_ns": "34921927"
            },
            "test_summary": "Ziel: apple.com \nEintrag: A\nDNS-Auflöser: Standard",
            "success_count": 1,
            "test_desc": "DNS Anfrage für die Domain: apple.com\nAbgefragter Typ: A-Record.\n\nTestergebnis: \nDNS Status: NOERROR\nDNS-Einträge: [[address=17.172.224.47, ttl=3540], [address=17.178.96.59, ttl=3540], [address=17.142.160.59, ttl=3540]]\r\nDauer: 35 ms",
            "test_type": "dns"
        },
        ...
    ],
    "testresultdetail_desc": [
        {
            "uid": [
                432659,
                432660
            ],
            "desc": "Der übertragene Inhalt entspricht exakt dem Original, er wurde nicht modifiziert.",
            "test": "HTTP_PROXY",
            "status": "ok"
        },
        {
            "uid": [
                432646,
                ...,
                432656
            ],
            "desc": "Der UDP-Test war erfolgreich. Alle Pakete sind angekommen.",
            "test": "UDP",
            "status": "ok"
        },
        {
            "uid": [
                432645,
                ...,
                432644
            ],
            "desc": "Der TCP-Test war erfolgreich. Es konnte eine Verbindung aufgebaut werden.",
            "test": "TCP",
            "status": "ok"
        },
        {
            "uid": [
                432701
            ],
            "desc": "DNS Abfrage erfolgreich (verwendeter DNS-Server: 8.8.8.8)",
            "test": "DNS",
            "status": "ok"
        },
        ...,
        {
            "uid": [
                432667,
                ...,
                432703
            ],
            "desc": "Eine DNS-Anfrage für eine nicht existierende Domain war erfolgreich, es wurden keine Einträge gefunden.",
            "test": "DNS",
            "status": "ok"
        },
        {
            "uid": [
                432657,
                432658
            ],
            "desc": "Die HTTP Anfrage an den QoS-Testserver wurde nicht verfälscht.",
            "test": "NON_TRANSPARENT_PROXY",
            "status": "ok"
        },
        {
            "uid": [
                432661
            ],
            "desc": "Die Webseite wurde erfolgreich übertragen.",
            "test": "WEBSITE",
            "status": "ok"
        }
    ]

}

7. Change history

Date Comment

2015-09-14

Introduction of the change history.

Correction of various typos.

Hints for sender ID and threadwise speed curve added.

2017-03-22

New filter criteria client_uuid and new output format csv in search for tests by open-data.

New RTR logo.