openapi: 3.1.0
info:
title: Globalping API
summary: The public Globalping API.
description: |
The Globalping API allows you to monitor, debug, and benchmark your internet infrastructure using a globally distributed network of probes.
The supported test types are ping, traceroute, MTR, DNS resolve, and HTTP.
The API is public, free to use, and doesn't require authentication, but it implements rate limits to ensure fair usage and reliability.
Authenticated users get higher free limits and may run additional tests by spending credits.
Sign up on the [Globalping Dashboard](https://dash.globalping.io/) to enjoy the higher limits.
Root endpoint: https://api.globalping.io
## Limits and credits
| Operation | Unauthenticated user | Authenticated user |
|---|---|---|
| **Measurements** |||
| Create a measurement | 250 free tests/hour
50 probes/measurement | 500 free tests/hour*
500 probes/measurement |
| Get a measurement by ID | 2 requests/second/measurement | 2 requests/second/measurement |
| **Probes** |||
| List probes currently online | no limit | no limit |
| **Limits** |||
| Get current rate limits | no limit | no limit |
\*Additional measurements may be created by spending credits. Each test above the limit costs one credit. Learn more about credits on the [Globalping website](https://globalping.io/credits).
## Client guidelines
If you're implementing an application that interacts with the API, please refer to the "Client guidelines"
section in the description of each endpoint. This way, you can provide the best UX and reduce the likelihood
of your app breaking in the future.
### General guidelines for non-browser-based apps:
- Set a `User-Agent` header. We recommend that you follow the format and approach [used here](https://github.com/jsdelivr/data.jsdelivr.com/blob/60c5154d26c403ba9dd403a8ddc5e42a31931f0d/config/default.js#L9).
- Set an `Accept-Encoding` header with a value of either `br` (preferred) or `gzip`, depending on what your client can support. Compression has a significant impact on the response size.
- Implement ETag-based client-side caching using the `ETag`/`If-None-Match` headers when requesting the measurement status.
version: 1.0.0
termsOfService: https://github.com/jsdelivr/globalping
contact:
url: https://github.com/jsdelivr/globalping/issues
email: d@globalping.io
license:
name: Open Software License 3.0
identifier: OSL-3.0
servers:
- url: https://api.globalping.io
tags:
- name: Measurements
- name: Probes
- name: Limits
paths:
/v1/measurements:
post:
summary: Create a measurement
operationId: createMeasurement
description: |
Creates a new measurement with parameters set in the request body.
The measurement runs asynchronously and you can retrieve its current state at the URL returned in the `Location` header.
### Client guidelines
- If the application is running in interactive mode, set the `inProgressUpdates` option to `true` to have the API
return partial results as soon as they are available. This allows the user to see the measurement progress in real time.
- If the application is interactive by default but also implements a "CI" mode for scripting, do not set the flag in the CI mode.
- To perform multiple measurements using exactly the same probes, create a single measurement first, then pass its `id` in the `locations` field for the other measurements.
- When you receive a `429` response, inform the user about their current rate limit status based on the response headers. Depending on the exact situation and on what your application supports, you may also suggest:
- Signing in or using an access token.
- Learning more about how to get additional credits at https://globalping.io/credits.
- Repeating the measurement with fewer probes.
requestBody:
description: Use the request body to set the measurement parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/MeasurementRequest'
examples:
pingLocations:
$ref: '#/components/examples/createMeasurementPingLocations'
pingLocationsLimit:
$ref: '#/components/examples/createMeasurementPingLocationsLimit'
pingLocationsMagic:
$ref: '#/components/examples/createMeasurementPingLocationsMagic'
pingCustom:
$ref: '#/components/examples/createMeasurementPingCustom'
pingLocationsMeasurementId:
$ref: '#/components/examples/createMeasurementPingLocationsMeasurementId'
responses:
'202':
$ref: '#/components/responses/measurements202'
'400':
$ref: '#/components/responses/400'
'422':
$ref: '#/components/responses/measurements422'
'429':
$ref: '#/components/responses/measurements429'
tags:
- Measurements
security:
- {}
- BearerAuth: []
- OAuth2:
- measurements
/v1/measurements/{id}:
parameters:
- $ref: '#/components/parameters/measurementId'
get:
summary: Get a measurement by ID
operationId: getMeasurement
description: |
Returns the status and results of an existing measurement.
Measurements are typically available for up to 7 days after creation.
> **Tip**: A link to this endpoint is returned in the `Location` response header when creating the measurement.
### Client guidelines
As it can take a few seconds for a measurement to complete, you should use the following process for retrieving the results:
1. Request the measurement to retrieve its status.
2. If the status is `in-progress`, wait 500 milliseconds and start again at step 1. Note that it's important to wait 500 ms *after* receiving the response rather than using an "every 500ms" interval as for large measurements, the request itself may take a few hundred milliseconds to complete.
3. If the status is anything **other** than `in-progress`, stop. The measurement is no longer running, and its results are final.
> **Important**: Do not query the results of a single measurement more often than every 500 milliseconds. Sending more than two
requests per second may trigger a rate limit and prevent you from accessing the results for a few seconds.
responses:
'200':
$ref: '#/components/responses/measurement200'
'404':
$ref: '#/components/responses/404'
'429':
$ref: '#/components/responses/measurement429'
tags:
- Measurements
/v1/probes:
get:
summary: List probes currently online
operationId: listProbes
description: |
Returns a list of all probes currently online and their metadata, such as location and assigned tags.
> **Note**: Probes don't expose unique IDs that would allow you to explicitly select them.
Instead, specify the requested location or an ID of an existing measurement when creating new measurements.
responses:
'200':
$ref: '#/components/responses/probes200'
tags:
- Probes
/v1/limits:
get:
summary: Get current rate limits
operationId: getLimits
description: |
Returns rate limits for the current user (if authenticated) or IP address (if not authenticated).
responses:
'200':
$ref: '#/components/responses/limits'
tags:
- Limits
security:
- {}
- BearerAuth: []
- OAuth2: []
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: |
For end users - generate a token in the [Globalping Dashboard](https://dash.globalping.io/tokens) and send it with your requests to get higher limits.
OAuth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://auth.globalping.io/oauth/authorize
tokenUrl: https://auth.globalping.io/oauth/token
refreshUrl: https://auth.globalping.io/oauth/token
scopes:
measurements: execute measurements under your account
description: |
For developers building applications on top of Globalping - if you want to allow end users to sign in and run measurements under their own accounts,
we can provide OAuth2 access. Please e-mail d@globalping.io for more information.
schemas:
PingProtocol:
type: string
description: The transport protocol to use.
enum:
- ICMP
- TCP
default: ICMP
IpVersion:
type: integer
description: |
EXPERIMENTAL: The IP version to use. Only allowed if the target is a hostname.
enum:
- 4
- 6
default: 4
MeasurementPingOptions:
type: object
title: PingOptions
additionalProperties: false
properties:
packets:
type: integer
description: The number of packets to send.
default: 3
minimum: 1
maximum: 16
protocol:
$ref: '#/components/schemas/PingProtocol'
port:
type: integer
description: |
The destination port for the packets. Applies only for the `TCP` protocol.
minimum: 0
maximum: 65535
default: 80
ipVersion:
$ref: '#/components/schemas/IpVersion'
TracerouteProtocol:
type: string
description: The transport protocol to use.
enum:
- ICMP
- TCP
- UDP
default: ICMP
MeasurementTracerouteOptions:
type: object
title: TracerouteOptions
additionalProperties: false
properties:
protocol:
$ref: '#/components/schemas/TracerouteProtocol'
port:
type: integer
description: |
The destination port for the packets. Applies only for the `TCP` protocol.
minimum: 0
maximum: 65535
default: 80
ipVersion:
$ref: '#/components/schemas/IpVersion'
DnsQueryType:
type: string
description: The type of DNS query.
enum:
- A
- AAAA
- ANY
- CNAME
- DNSKEY
- DS
- HTTPS
- MX
- NS
- NSEC
- PTR
- RRSIG
- SOA
- TXT
- SRV
- SVCB
default: A
DnsMeasurementResolver:
description: A DNS resolver to use for the query. Defaults to the probe system resolver.
anyOf:
- type: string
format: ipv4
description: The IPv4 address of the resolver.
- type: string
format: ipv6
description: |
EXPERIMENTAL: The IPv6 address of the resolver.
- type: string
format: hostname
description: The Fully Qualified Domain Name (FQDN) of the resolver.
DnsProtocol:
type: string
description: The protocol to use for the DNS query.
enum:
- TCP
- UDP
default: UDP
MeasurementDnsOptions:
type: object
title: DnsOptions
additionalProperties: false
properties:
query:
type: object
description: The DNS query properties.
additionalProperties: false
properties:
type:
$ref: '#/components/schemas/DnsQueryType'
resolver:
$ref: '#/components/schemas/DnsMeasurementResolver'
protocol:
$ref: '#/components/schemas/DnsProtocol'
port:
type: integer
description: The port number to send the query to.
minimum: 0
maximum: 65535
default: 53
ipVersion:
$ref: '#/components/schemas/IpVersion'
trace:
type: boolean
description: |
Toggles tracing of the delegation path from the root servers down to the target domain name.
default: false
MtrProtocol:
type: string
description: The transport protocol to use.
enum:
- ICMP
- TCP
- UDP
default: ICMP
MeasurementMtrOptions:
type: object
title: MtrOptions
additionalProperties: false
properties:
packets:
type: integer
description: The number of packets to send to each hop.
default: 3
minimum: 1
maximum: 16
protocol:
$ref: '#/components/schemas/MtrProtocol'
port:
type: integer
description: |
The destination port for the packets. Applies only for the `TCP` and `UDP` protocols.
minimum: 0
maximum: 65535
default: 80
ipVersion:
$ref: '#/components/schemas/IpVersion'
HttpRequestMethod:
type: string
description: The HTTP method to use.
enum:
- HEAD
- GET
- OPTIONS
default: HEAD
HttpMeasurementResolver:
description: A DNS resolver to use for the query. Defaults to the probe system resolver.
anyOf:
- type: string
format: ipv4
description: The IPv4 address of the resolver.
- type: string
format: ipv6
description: |
EXPERIMENTAL: The IPv6 address of the resolver.
HttpProtocol:
type: string
enum:
- HTTP
- HTTPS
- HTTP2
default: HTTPS
MeasurementHttpOptions:
type: object
title: HttpOptions
additionalProperties: false
properties:
request:
type: object
description: The HTTP request properties.
additionalProperties: false
properties:
host:
type: string
description: |
An optional override for the `Host` header. The default value is based on the `target`.
path:
type: string
description: The path portion of the URL.
query:
type: string
description: The query string portion of the URL.
method:
$ref: '#/components/schemas/HttpRequestMethod'
headers:
type: object
description: |
Additional request headers. Note that the `Host` and `User-Agent` are reserved and internally overridden.
additionalProperties:
type: string
resolver:
$ref: '#/components/schemas/HttpMeasurementResolver'
protocol:
$ref: '#/components/schemas/HttpProtocol'
port:
type: integer
description: The port number to use.
minimum: 0
maximum: 65535
default: 80
ipVersion:
$ref: '#/components/schemas/IpVersion'
MeasurementOptionsConditions:
allOf:
- if:
type: object
properties:
type:
const: ping
then:
type: object
properties:
measurementOptions:
$ref: '#/components/schemas/MeasurementPingOptions'
- if:
type: object
properties:
type:
const: traceroute
then:
type: object
properties:
measurementOptions:
$ref: '#/components/schemas/MeasurementTracerouteOptions'
- if:
type: object
properties:
type:
const: dns
then:
type: object
properties:
measurementOptions:
$ref: '#/components/schemas/MeasurementDnsOptions'
- if:
type: object
properties:
type:
const: mtr
then:
type: object
properties:
measurementOptions:
$ref: '#/components/schemas/MeasurementMtrOptions'
- if:
type: object
properties:
type:
const: http
then:
type: object
properties:
measurementOptions:
$ref: '#/components/schemas/MeasurementHttpOptions'
MeasurementType:
type: string
description: The measurement type.
enum:
- ping
- traceroute
- dns
- mtr
- http
MeasurementTarget:
type: string
description: |
A publicly reachable measurement target.
Typically a hostname, an IPv4 address, or IPv6 address, depending on the measurement `type`.
Support for IPv6 targets is currently considered experimental.
ContinentCode:
type: string
description: A two-letter continent code.
enum:
- AF
- AN
- AS
- EU
- NA
- OC
- SA
RegionName:
type: string
description: |
A geographic region name based on UN [Standard Country or Area Codes for Statistical Use (M49)](https://unstats.un.org/unsd/methodology/m49/).
enum:
- Northern Africa
- Eastern Africa
- Middle Africa
- Southern Africa
- Western Africa
- Caribbean
- Central America
- South America
- Northern America
- Central Asia
- Eastern Asia
- South-eastern Asia
- Southern Asia
- Western Asia
- Eastern Europe
- Northern Europe
- Southern Europe
- Western Europe
- Australia and New Zealand
- Melanesia
- Micronesia
- Polynesia
CountryCode:
type: string
description: A two-letter country code based on [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements).
StateCode:
type:
- string
- 'null'
description: A two-letter [US state code](https://www.faa.gov/air_traffic/publications/atpubs/cnt_html/appendix_a.html).
CityName:
type: string
description: A city name in English.
AsnCode:
type: integer
description: An autonomous system number (ASN).
NetworkName:
type: string
description: A network name, such as "Google LLC" or "DigitalOcean, LLC".
Tags:
type: array
description: |
An array of additional values to fine-tune probe selection:
- Probes hosted in [AWS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions) and [Google Cloud](https://cloud.google.com/compute/docs/regions-zones#available) are automatically assigned the service region code. For example: `aws-eu-west-1` and `gcp-us-south1`.
- Probes are automatically assigned `datacenter-network` and `eyeball-network` tags to distinguish between datacenter and end-user locations.
items:
type: string
MeasurementLocationOption:
type: object
additionalProperties: false
properties:
continent:
$ref: '#/components/schemas/ContinentCode'
region:
$ref: '#/components/schemas/RegionName'
country:
$ref: '#/components/schemas/CountryCode'
state:
$ref: '#/components/schemas/StateCode'
city:
$ref: '#/components/schemas/CityName'
asn:
$ref: '#/components/schemas/AsnCode'
network:
$ref: '#/components/schemas/NetworkName'
tags:
$ref: '#/components/schemas/Tags'
magic:
type: string
description: |
Locations defined in a single string instead of the respective location properties.
The API performs fuzzy matching on the `country`, `city`, `state` (using `US-` prefix, e.g., `US-NY`), `continent`, `region`, `asn` (using `AS` prefix, e.g., `AS123`), `tags`, and `network` values.
Supports full names, ISO codes (where applicable), and common aliases.
Multiple conditions can be combined using the `+` character, which behaves as a logical `AND`.
Note that in some cases, the names of cities, states, and countries, as well as the ISO codes of countries and continents, overlap. Additionally, city names are not unique across countries.
We recommend that you:
- refer to US states via their full [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2:US) codes, e.g., `US-NY`,
- refer to cities in combination with their country or US state,
- refer to continents by their name (not the two letter codes).
limit:
type: integer
description: |
The maximum number of probes that should run the measurement in this location.
Non-authenticated requests are limited to a maximum of 50 probes.
The result count might be lower if there aren't enough probes available in this location.
Mutually exclusive with the global `limit` property.
minimum: 1
maximum: 200
default: 1
MeasurementLocations:
oneOf:
- type: array
description: |
An array of locations from which to run the measurement. Each object specifies a location using one or more keys, such as country, city, ASN, etc.
items:
$ref: '#/components/schemas/MeasurementLocationOption'
- type: string
description: |
The `id` of a previous measurement whose probes you want to reuse.
The probes are returned in the same order as in the previous measurement.
Measurement type and options are not reused and need to be specified in the request.
Note that this option only works for the lifetime of the original measurement
and will result in a `422` response for expired or invalid `id` values.
MeasurementLimit:
type: integer
description: |
The maximum number of probes that should run the measurement.
The result count might be lower if there aren't enough probes available in the specified locations.
Mutually exclusive with the `limit` property that can be set for individual locations.
Non-authenticated requests are limited to a maximum of 50 probes.
minimum: 1
maximum: 500
default: 1
MeasurementOptions:
description: Additional optional fields depending on the measurement `type`.
anyOf:
- $ref: '#/components/schemas/MeasurementPingOptions'
- $ref: '#/components/schemas/MeasurementTracerouteOptions'
- $ref: '#/components/schemas/MeasurementDnsOptions'
- $ref: '#/components/schemas/MeasurementMtrOptions'
- $ref: '#/components/schemas/MeasurementHttpOptions'
MeasurementRequest:
allOf:
- $ref: '#/components/schemas/MeasurementOptionsConditions'
- type: object
additionalProperties: false
required:
- type
- target
properties:
type:
$ref: '#/components/schemas/MeasurementType'
target:
$ref: '#/components/schemas/MeasurementTarget'
inProgressUpdates:
type: boolean
description: |
Indicates whether you want to get partial results while the measurement is still running:
- If `true`, partial results are returned as soon as they are available, and you can present them to the user in real time. Note that only the first 5 tests from the `results` array will update in real time.
- If `false`, the result of each test is updated only after the test finishes.
default: false
locations:
$ref: '#/components/schemas/MeasurementLocations'
limit:
$ref: '#/components/schemas/MeasurementLimit'
measurementOptions:
$ref: '#/components/schemas/MeasurementOptions'
MeasurementProbesCount:
type: integer
description: |
The actual number of probes that performed the measurement tests.
Smaller or equal to `limit`, depending on probe availability.
CreateMeasurementResponse:
description: Contains information about the newly created measurement.
type: object
required:
- id
- probesCount
properties:
id:
type: string
description: |
The measurement ID.
> **Tip**: You can use the ID to create a new measurement request, reusing the same probes.
probesCount:
$ref: '#/components/schemas/MeasurementProbesCount'
BaseTestStatus:
type: string
description: The current test status. Any value other than `in-progress` is final.
FinishedTestStatus:
allOf:
- $ref: '#/components/schemas/BaseTestStatus'
- const: finished
TestRawOutput:
type: string
description: |
The raw output of the test. Can be presented to users but is not meant to be parsed by clients.
Please use the individual values provided in other fields for automated processing.
BaseFinishedTestResult:
type: object
required:
- status
- rawOutput
properties:
status:
$ref: '#/components/schemas/FinishedTestStatus'
rawOutput:
$ref: '#/components/schemas/TestRawOutput'
ResolvedAddress:
type:
- string
- 'null'
description: The resolved IP address of the `target`.
ResolvedHostname:
type:
- string
- 'null'
description: The resolved hostname of the `target`.
NullableNumber:
type:
- number
- 'null'
StatsRttMinNullable:
allOf:
- $ref: '#/components/schemas/NullableNumber'
- description: The lowest `rtt` value.
StatsRttAvgNullable:
allOf:
- $ref: '#/components/schemas/NullableNumber'
- description: The average `rtt` value.
StatsRttMaxNullable:
allOf:
- $ref: '#/components/schemas/NullableNumber'
- description: The highest `rtt` value.
StatsPacketsTotal:
type: integer
description: The number of packets sent.
StatsPacketsRcv:
type: integer
description: The number of received packets.
StatsPacketsDrop:
type: integer
description: The number of dropped packets (`total` - `rcv`).
StatsPacketsLoss:
type: number
description: The percentage of dropped packets.
TimingPacketRtt:
type: number
description: The round-trip time for this packet.
TimingPacketTtl:
type: number
description: The time-to-live value of this packet.
IcmpPingTiming:
type: object
title: IcmpPingTiming
required:
- rtt
- ttl
properties:
rtt:
$ref: '#/components/schemas/TimingPacketRtt'
ttl:
$ref: '#/components/schemas/TimingPacketTtl'
TcpPingTiming:
type: object
title: TcpPingTiming
required:
- rtt
properties:
rtt:
$ref: '#/components/schemas/TimingPacketRtt'
FinishedPingTestResult:
title: FinishedPingTestResult
description: Represents a `finished` ping test.
allOf:
- $ref: '#/components/schemas/BaseFinishedTestResult'
- type: object
required:
- resolvedAddress
- resolvedHostname
- stats
- timings
properties:
resolvedAddress:
$ref: '#/components/schemas/ResolvedAddress'
resolvedHostname:
$ref: '#/components/schemas/ResolvedHostname'
stats:
type: object
description: |
Summary `rtt` and packet loss statistics.
All times are in milliseconds.
required:
- min
- avg
- max
- total
- rcv
- drop
- loss
properties:
min:
$ref: '#/components/schemas/StatsRttMinNullable'
avg:
$ref: '#/components/schemas/StatsRttAvgNullable'
max:
$ref: '#/components/schemas/StatsRttMaxNullable'
total:
$ref: '#/components/schemas/StatsPacketsTotal'
rcv:
$ref: '#/components/schemas/StatsPacketsRcv'
drop:
$ref: '#/components/schemas/StatsPacketsDrop'
loss:
$ref: '#/components/schemas/StatsPacketsLoss'
timings:
type: array
description: |
An array containing details for each packet.
All times are in milliseconds.
items:
anyOf:
- $ref: '#/components/schemas/IcmpPingTiming'
- $ref: '#/components/schemas/TcpPingTiming'
FinishedTracerouteTestResult:
title: FinishedTracerouteTestResult
description: Represents a `finished` traceroute test.
allOf:
- $ref: '#/components/schemas/BaseFinishedTestResult'
- type: object
required:
- resolvedAddress
- resolvedHostname
- hops
properties:
resolvedAddress:
$ref: '#/components/schemas/ResolvedAddress'
resolvedHostname:
$ref: '#/components/schemas/ResolvedHostname'
hops:
type: array
description: An array containing details about each hop.
items:
type: object
required:
- resolvedAddress
- resolvedHostname
- timings
properties:
resolvedAddress:
$ref: '#/components/schemas/ResolvedAddress'
resolvedHostname:
$ref: '#/components/schemas/ResolvedHostname'
timings:
type: array
description: |
An array containing details for each packet.
All times are in milliseconds.
items:
type: object
required:
- rtt
properties:
rtt:
$ref: '#/components/schemas/TimingPacketRtt'
DnsStatusCode:
type: integer
description: The DNS [response code](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#table-dns-parameters-6).
DnsStatusCodeName:
type: string
description: The DNS [response code name](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#table-dns-parameters-6).
DnsTestAnswer:
type: object
required:
- name
- type
- ttl
- class
- value
properties:
name:
type: string
description: The record domain name.
type:
type: string
description: The record type.
ttl:
type: integer
description: The record time-to-live value in seconds.
class:
type: string
description: The record class.
value:
type: string
description: The record value.
DnsTestHopResult:
type: object
required:
- resolver
- answers
- timings
properties:
resolver:
type: string
description: The hostname or IP of the resolver that answered the query.
answers:
type: array
description: An array of the received resource records.
items:
$ref: '#/components/schemas/DnsTestAnswer'
timings:
type: object
description: |
Details about the query times.
All times are in milliseconds.
required:
- total
properties:
total:
type: number
description: The total query time.
FinishedSimpleDnsTestResult:
title: FinishedSimpleDnsTestResult
description: Represents a `finished` DNS test with `trace` disabled.
allOf:
- $ref: '#/components/schemas/BaseFinishedTestResult'
- type: object
required:
- statusCode
- statusCodeName
properties:
statusCode:
$ref: '#/components/schemas/DnsStatusCode'
statusCodeName:
$ref: '#/components/schemas/DnsStatusCodeName'
- $ref: '#/components/schemas/DnsTestHopResult'
FinishedTraceDnsTestResult:
title: FinishedTraceDnsTestResult
description: Represents a `finished` DNS test with `trace` enabled.
allOf:
- $ref: '#/components/schemas/BaseFinishedTestResult'
- type: object
required:
- hops
properties:
hops:
type: array
description: An array containing details about each hop.
items:
$ref: '#/components/schemas/DnsTestHopResult'
FinishedDnsTestResult:
title: FinishedDnsTestResult
anyOf:
- $ref: '#/components/schemas/FinishedSimpleDnsTestResult'
- $ref: '#/components/schemas/FinishedTraceDnsTestResult'
StatsRttMin:
type: number
description: The lowest `rtt` value.
StatsRttAvg:
type: number
description: The average `rtt` value.
StatsRttMax:
type: number
description: The highest `rtt` value.
StatsStDev:
type: number
description: The standard deviation of the `rtt` values.
StatsJitterMin:
type: number
description: The lowest jitter value.
StatsJitterAvg:
type: number
description: The average jitter value.
StatsJitterMax:
type: number
description: The highest jitter value.
FinishedMtrTestResult:
title: FinishedMtrTestResult
description: Represents a `finished` MTR test.
allOf:
- $ref: '#/components/schemas/BaseFinishedTestResult'
- type: object
required:
- resolvedAddress
- resolvedHostname
- hops
properties:
resolvedAddress:
$ref: '#/components/schemas/ResolvedAddress'
resolvedHostname:
$ref: '#/components/schemas/ResolvedHostname'
hops:
type: array
description: An array containing details about each hop.
items:
type: object
required:
- resolvedAddress
- resolvedHostname
- asn
- timings
- stats
properties:
resolvedAddress:
allOf:
- $ref: '#/components/schemas/ResolvedAddress'
- description: The resolved IP address of this hop.
resolvedHostname:
allOf:
- $ref: '#/components/schemas/ResolvedHostname'
- description: The resolved hostname of this hop.
asn:
type: array
description: An array containing the ASNs assigned to this hop.
items:
type: integer
stats:
type: object
description: |
Summary `rtt` and packet loss statistics.
All times are in milliseconds.
required:
- min
- avg
- max
- stDev
- jMin
- jAvg
- jMax
- total
- rcv
- drop
- loss
properties:
min:
$ref: '#/components/schemas/StatsRttMin'
avg:
$ref: '#/components/schemas/StatsRttAvg'
max:
$ref: '#/components/schemas/StatsRttMax'
stDev:
$ref: '#/components/schemas/StatsStDev'
jMin:
$ref: '#/components/schemas/StatsJitterMin'
jAvg:
$ref: '#/components/schemas/StatsJitterAvg'
jMax:
$ref: '#/components/schemas/StatsJitterMax'
total:
$ref: '#/components/schemas/StatsPacketsTotal'
rcv:
$ref: '#/components/schemas/StatsPacketsRcv'
drop:
$ref: '#/components/schemas/StatsPacketsDrop'
loss:
$ref: '#/components/schemas/StatsPacketsLoss'
timings:
type: array
description: |
An array containing details for each packet.
All times are in milliseconds.
items:
type: object
required:
- rtt
properties:
rtt:
$ref: '#/components/schemas/TimingPacketRtt'
HttpStatusCode:
type: integer
description: The HTTP response status code.
HttpStatusCodeName:
type: string
description: The HTTP response status code name.
NullableInteger:
type:
- integer
- 'null'
TimingHttpTotalNullable:
allOf:
- $ref: '#/components/schemas/NullableInteger'
- description: The total HTTP request time.
TimingHttpDnsNullable:
allOf:
- $ref: '#/components/schemas/NullableInteger'
- description: The time required to perform the DNS lookup.
TimingHttpTcpNullable:
allOf:
- $ref: '#/components/schemas/NullableInteger'
- description: The time from performing the DNS lookup to establishing the TCP connection.
TimingHttpTlsNullable:
allOf:
- $ref: '#/components/schemas/NullableInteger'
- description: The time from establishing the TCP connection to establishing the TLS session.
TimingHttpFirstByteNullable:
allOf:
- $ref: '#/components/schemas/NullableInteger'
- description: The time from establishing the TCP/TLS connection to the first response byte.
TimingHttpDownloadNullable:
allOf:
- $ref: '#/components/schemas/NullableInteger'
- description: The time from the first response byte to downloading the entire response.
TlsCertificateSubject:
type: object
description: Information about the certificate subject.
properties:
CN:
type: string
description: The subject's common name.
alt:
type: string
description: The subject's alternative names.
TlsCertificateIssuer:
type: object
description: Information about the certificate issuer.
properties:
C:
type: string
description: The issuer's country.
O:
type: string
description: The issuer's organization.
CN:
type: string
description: The issuer's common name.
TlsKeyType:
type:
- string
- 'null'
enum:
- RSA
- EC
- 'null'
description: The type of the used key, or `null` for unrecognized types.
TlsCertificate:
type: object
title: TlsCertificate
required:
- authorized
- protocol
- cipherName
- createdAt
- expiresAt
- subject
- issuer
- keyType
- keyBits
- serialNumber
- fingerprint256
- publicKey
properties:
protocol:
type: string
description: |
The negotiated SSL/TLS protocol version.
cipherName:
type: string
description: |
The OpenSSL name of the cipher suite.
authorized:
type: boolean
description: |
Indicates whether a trusted authority signed the certificate.
error:
type: string
description: |
The reason for rejecting the certificate if `authorized` is `false`.
createdAt:
type: string
description: The creation date and time of the certificate.
format: date-time
expiresAt:
type: string
description: The expiration date and time of the certificate.
format: date-time
subject:
$ref: '#/components/schemas/TlsCertificateSubject'
issuer:
$ref: '#/components/schemas/TlsCertificateIssuer'
keyType:
$ref: '#/components/schemas/TlsKeyType'
keyBits:
type:
- number
- 'null'
description: The size of the used key, or `null` for unrecognized types.
serialNumber:
type: string
description: |
The certificate serial number as a : separated HEX string.
fingerprint256:
type: string
description: |
The SHA-256 digest of the DER-encoded certificate as a : separated HEX string.
publicKey:
type:
- string
- 'null'
description: |
The public key as a : separated HEX string, or `null` for unrecognized types.
FinishedHttpTestResult:
title: FinishedHttpTestResult
description: Represents a `finished` HTTP test.
allOf:
- $ref: '#/components/schemas/BaseFinishedTestResult'
- type: object
required:
- rawHeaders
- rawBody
- truncated
- headers
- resolvedAddress
- statusCode
- statusCodeName
- timings
- tls
properties:
rawHeaders:
type: string
description: The raw HTTP response headers.
rawBody:
type:
- string
- 'null'
description: |
The raw HTTP response body or `null` if there was no body in response.
Note that only the first 10 kb are returned.
truncated:
type: boolean
description: |
Indicates whether the `rawBody` value was truncated due to being too big.
headers:
type: object
description: The HTTP response headers. The value may be an array of strings for headers with multiple values, e.g., `Set-Cookie`.
additionalProperties:
oneOf:
- type: string
- type: array
items:
type: string
statusCode:
$ref: '#/components/schemas/HttpStatusCode'
statusCodeName:
$ref: '#/components/schemas/HttpStatusCodeName'
resolvedAddress:
$ref: '#/components/schemas/ResolvedAddress'
timings:
type: object
description: |
Details about the HTTP request times.
All times are in milliseconds.
required:
- total
- dns
- tcp
- tls
- firstByte
- download
properties:
total:
$ref: '#/components/schemas/TimingHttpTotalNullable'
dns:
$ref: '#/components/schemas/TimingHttpDnsNullable'
tcp:
$ref: '#/components/schemas/TimingHttpTcpNullable'
tls:
$ref: '#/components/schemas/TimingHttpTlsNullable'
firstByte:
$ref: '#/components/schemas/TimingHttpFirstByteNullable'
download:
$ref: '#/components/schemas/TimingHttpDownloadNullable'
tls:
description: Information about the TLS certificate or `null` if no TLS certificate is available.
oneOf:
- $ref: '#/components/schemas/TlsCertificate'
- type: 'null'
MeasurementResultsConditions:
allOf:
- if:
type: object
properties:
type:
const: ping
results:
type: array
items:
type: object
properties:
result:
type: object
properties:
status:
const: finished
then:
type: object
properties:
results:
type: array
items:
type: object
properties:
result:
$ref: '#/components/schemas/FinishedPingTestResult'
- if:
type: object
properties:
type:
const: traceroute
results:
type: array
items:
type: object
properties:
result:
type: object
properties:
status:
const: finished
then:
type: object
properties:
results:
type: array
items:
type: object
properties:
result:
$ref: '#/components/schemas/FinishedTracerouteTestResult'
- if:
type: object
properties:
type:
const: dns
results:
type: array
items:
type: object
properties:
result:
type: object
properties:
status:
const: finished
then:
type: object
properties:
results:
type: array
items:
type: object
properties:
result:
$ref: '#/components/schemas/FinishedDnsTestResult'
- if:
type: object
properties:
type:
const: mtr
results:
type: array
items:
type: object
properties:
result:
type: object
properties:
status:
const: finished
then:
type: object
properties:
results:
type: array
items:
type: object
properties:
result:
$ref: '#/components/schemas/FinishedMtrTestResult'
- if:
type: object
properties:
type:
const: http
results:
type: array
items:
type: object
properties:
result:
type: object
properties:
status:
const: finished
then:
type: object
properties:
results:
type: array
items:
type: object
properties:
result:
$ref: '#/components/schemas/FinishedHttpTestResult'
MeasurementStatus:
type: string
description: The current measurement status. Any value other than `in-progress` is final.
enum:
- in-progress
- finished
Latitude:
type: number
description: The latitude of probe location.
Longitude:
type: number
description: The longitude of probe location.
ProbeLocation:
type: object
description: The probe location information.
required:
- continent
- region
- country
- state
- city
- asn
- network
- latitude
- longitude
properties:
continent:
$ref: '#/components/schemas/ContinentCode'
region:
$ref: '#/components/schemas/RegionName'
country:
$ref: '#/components/schemas/CountryCode'
state:
$ref: '#/components/schemas/StateCode'
city:
$ref: '#/components/schemas/CityName'
asn:
$ref: '#/components/schemas/AsnCode'
network:
$ref: '#/components/schemas/NetworkName'
latitude:
$ref: '#/components/schemas/Latitude'
longitude:
$ref: '#/components/schemas/Longitude'
ProbeResolver:
anyOf:
- type: string
format: ipv4
description: The IPv4 address of the resolver.
- type: string
format: ipv6
description: |
EXPERIMENTAL: The IPv6 address of the resolver.
- type: string
const: private
description: Indicates that the resolver points to a private IP address.
ProbeResolvers:
type: array
description: An array of the default resolvers configured on the probe.
items:
$ref: '#/components/schemas/ProbeResolver'
InProgressTestStatus:
allOf:
- $ref: '#/components/schemas/BaseTestStatus'
- const: in-progress
InProgressTestResult:
type: object
title: InProgressTestResult
description: |
Represents an `in-progress` test where most fields are not yet available.
required:
- status
- rawOutput
properties:
status:
$ref: '#/components/schemas/InProgressTestStatus'
rawOutput:
$ref: '#/components/schemas/TestRawOutput'
FailedTestStatus:
allOf:
- $ref: '#/components/schemas/BaseTestStatus'
- const: failed
FailedTestResult:
type: object
title: FailedTestResult
description: |
Represents a `failed` test where most fields are not available.
required:
- status
- rawOutput
properties:
status:
$ref: '#/components/schemas/FailedTestStatus'
rawOutput:
$ref: '#/components/schemas/TestRawOutput'
OfflineTestStatus:
allOf:
- $ref: '#/components/schemas/BaseTestStatus'
- const: offline
OfflineTestResult:
type: object
title: OfflineTestResult
description: |
Represents an `offline` test where the requested probe was not available to run the test and most fields are not available.
Only possible when you pass the `id` of a previous measurement in the `locations` field.
required:
- status
- rawOutput
properties:
status:
$ref: '#/components/schemas/OfflineTestStatus'
rawOutput:
$ref: '#/components/schemas/TestRawOutput'
TestResult:
anyOf:
- $ref: '#/components/schemas/InProgressTestResult'
- $ref: '#/components/schemas/FailedTestResult'
- $ref: '#/components/schemas/OfflineTestResult'
- $ref: '#/components/schemas/FinishedPingTestResult'
- $ref: '#/components/schemas/FinishedTracerouteTestResult'
- $ref: '#/components/schemas/FinishedDnsTestResult'
- $ref: '#/components/schemas/FinishedMtrTestResult'
- $ref: '#/components/schemas/FinishedHttpTestResult'
MeasurementResultItem:
type: object
required:
- probe
- result
properties:
probe:
allOf:
- $ref: '#/components/schemas/ProbeLocation'
- type: object
description: Information about the probe that performed this test, such as its location, tags, and resolvers.
required:
- tags
- resolvers
properties:
tags:
$ref: '#/components/schemas/Tags'
resolvers:
$ref: '#/components/schemas/ProbeResolvers'
result:
$ref: '#/components/schemas/TestResult'
MeasurementResponse:
type: object
required:
- id
- type
- status
- createdAt
- updatedAt
- target
- probesCount
- results
properties:
id:
type: string
description: The measurement ID.
type:
$ref: '#/components/schemas/MeasurementType'
target:
$ref: '#/components/schemas/MeasurementTarget'
status:
$ref: '#/components/schemas/MeasurementStatus'
createdAt:
type: string
format: date-time
description: The date and time when the measurement was created.
updatedAt:
type: string
format: date-time
description: The date and time when the measurement was last updated.
probesCount:
$ref: '#/components/schemas/MeasurementProbesCount'
locations:
type: array
description: |
The locations you specified when creating the measurement.
If you passed in an `id` of a previous measurement, the value will be filled in from that measurement.
items:
$ref: '#/components/schemas/MeasurementLocationOption'
limit:
allOf:
- $ref: '#/components/schemas/MeasurementLimit'
- description: The limit you specified when creating the measurement if different from the default value.
measurementOptions:
allOf:
- $ref: '#/components/schemas/MeasurementOptions'
- description: The options you specified when creating the measurement if different from the default.
results:
type: array
description: An array containing the measurement results.
items:
$ref: '#/components/schemas/MeasurementResultItem'
Probe:
type: object
required:
- version
- location
- tags
- resolvers
properties:
version:
type: string
description: The probe version.
location:
$ref: '#/components/schemas/ProbeLocation'
tags:
$ref: '#/components/schemas/Tags'
resolvers:
$ref: '#/components/schemas/ProbeResolvers'
Probes:
type: array
items:
$ref: '#/components/schemas/Probe'
RateLimitType:
type: string
description: Type of the rate limit.
enum:
- ip
- user
RateLimitDetails:
type: object
required:
- type
- limit
- remaining
- reset
properties:
type:
$ref: '#/components/schemas/RateLimitType'
limit:
type: integer
description: The number of rate limit points available in a given time window.
remaining:
type: integer
description: The number of rate limit points remaining in the current time window.
reset:
type: integer
description: The number of seconds until the limit resets.
Limits:
type: object
required:
- rateLimit
properties:
rateLimit:
type: object
description: Object containing rate limits information.
required:
- measurements
properties:
measurements:
type: object
description: Measurements rate limits.
required:
- create
properties:
create:
allOf:
- $ref: '#/components/schemas/RateLimitDetails'
- description: Rate limit for creating measurements.
credits:
type: object
description: Object containing credits information (only for authenticated requests).
properties:
remaining:
type: integer
description: The number of user's remaining credits.
examples:
createMeasurementPingLocations:
summary: 'ping: specific locations'
description: |
Use the `locations` object to define locations from which the API should select probes.
In this example, we're selecting probes based on the `country`, but you can use other properties like `city`, `asn`, etc. to fine-tune the selection.
value:
type: ping
target: cdn.jsdelivr.net
locations:
- country: DE
- country: PL
createMeasurementPingLocationsLimit:
summary: 'ping: specific locations and limit'
description: |
Use the `limit` property to specify how many probes the API should pick per location.
Alternatively, you can use the measurement's global `limit` property to have the API divide the probes evenly among the locations.
If you don't define a limit value, the global limit value is set to 1.
value:
type: ping
target: cdn.jsdelivr.net
locations:
- country: DE
limit: 4
- country: PL
limit: 2
createMeasurementPingLocationsMagic:
summary: 'ping: magic location filter'
description: |
Instead of defining the individual object properties for each location type, you can ask the API to find the best match across
all location fields. For example, rather than explicitly defining a country and a city, you can write `magic: country+city`.
We recommend using this field in real time applications that allow free-form user input. On the other hand, defining the
specific location keys may be a better option for scripts, as it makes the selection stricter and therefore more predictable.
value:
type: ping
target: cdn.jsdelivr.net
locations:
- magic: FR
- magic: Poland
- magic: Berlin+Germany
- magic: California
- magic: Europe
- magic: Western Europe
- magic: AS13335
- magic: aws-us-east-1
- magic: Google
createMeasurementPingCustom:
summary: 'ping: custom options'
description: Depending on the measurement `type`, you may provide additional measurement options. In this example, we set the number of packets to send for our ping test. You can find all available options in the request body schema.
value:
type: ping
target: cdn.jsdelivr.net
measurementOptions:
packets: 6
createMeasurementPingLocationsMeasurementId:
summary: 'ping: previous measurement id'
description: If you want to reuse probes from a previous measurement, pass its `id` in the `locations` field. Note that some probes may be offline and no longer unavailable - this will be indicated in the results.
value:
type: ping
target: cdn.jsdelivr.net
locations: 1wzMrzLBZfaPoT1c
createMeasurementResponse:
value:
id: PY5fMsREMmIq45VR
probesCount: 1
getPingMeasurementResponse:
summary: 'type: ping'
value:
id: nzGzfAGL7sZfUs3c
type: ping
status: finished
createdAt: '2023-07-14T18:25:52.414Z'
updatedAt: '2023-07-14T18:25:53.207Z'
target: cdn.jsdelivr.net
probesCount: 1
measurementOptions:
packets: 2
results:
- probe:
continent: OC
region: Australia and New Zealand
country: NZ
state: null
city: Auckland
asn: 61138
longitude: 174.77
latitude: -36.87
network: Zappie Host LLC
tags:
- datacenter-network
resolvers:
- 1.1.1.1
- 8.8.8.8
result:
status: finished
rawOutput: |-
PING jsdelivr.map.fastly.net (151.101.129.229) 56(84) bytes of data.
64 bytes from 151.101.129.229 (151.101.129.229): icmp_seq=1 ttl=59 time=24.2 ms
64 bytes from 151.101.129.229 (151.101.129.229): icmp_seq=2 ttl=59 time=24.2 ms
--- jsdelivr.map.fastly.net ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 201ms
rtt min/avg/max/mdev = 24.174/24.183/24.193/0.009 ms
resolvedAddress: 151.101.129.229
resolvedHostname: 151.101.129.229
timings:
- ttl: 59
rtt: 24.2
- ttl: 59
rtt: 24.2
stats:
min: 24.174
max: 24.193
avg: 24.183
total: 2
loss: 0
rcv: 2
drop: 0
getTracerouteMeasurementResponse:
summary: 'type: traceroute'
value:
id: MH97NFzqirjA9NZZ
type: traceroute
status: finished
createdAt: '2023-07-14T18:29:19.630Z'
updatedAt: '2023-07-14T18:29:21.165Z'
target: cdn.jsdelivr.net
probesCount: 1
results:
- probe:
continent: OC
region: Australia and New Zealand
country: AU
state: null
city: Sydney
asn: 16276
longitude: 151.21
latitude: -33.87
network: OVH SAS
tags:
- datacenter-network
resolvers:
- 213.186.33.99
result:
rawOutput: |-
traceroute to cdn.jsdelivr.net (104.16.85.20), 20 hops max, 60 byte packets
1 139.99.172.1 (139.99.172.1) 0.315 ms 0.301 ms
2 192.168.143.254 (192.168.143.254) 0.295 ms 0.292 ms
3 10.29.250.254 (10.29.250.254) 0.289 ms 0.286 ms
4 10.29.231.208 (10.29.231.208) 0.338 ms 0.349 ms
5 10.133.18.32 (10.133.18.32) 0.502 ms 0.596 ms
6 10.75.8.8 (10.75.8.8) 0.322 ms 0.344 ms
7 10.75.248.66 (10.75.248.66) 1.101 ms 1.106 ms
8 syd-sy2-bb1-a9.au.asia (103.5.14.220) 1.105 ms 1.160 ms
9 as13335.nsw.ix.asn.au (218.100.52.11) 1.097 ms 1.097 ms
10 172.68.208.3 (172.68.208.3) 1.777 ms 1.778 ms
11 104.16.85.20 (104.16.85.20) 0.826 ms 0.733 ms
status: finished
resolvedAddress: 104.16.85.20
resolvedHostname: 104.16.85.20
hops:
- resolvedHostname: 172.68.208.3
resolvedAddress: 172.68.208.3
timings:
- rtt: 1.777
- rtt: 1.778
- resolvedHostname: 104.16.85.20
resolvedAddress: 104.16.85.20
timings:
- rtt: 0.826
- rtt: 0.733
getSimpleDnsMeasurementResponse:
summary: 'type: dns'
value:
id: av5Z6kM6FXLAfKO0
type: dns
status: finished
createdAt: '2023-07-14T18:31:01.002Z'
updatedAt: '2023-07-14T18:31:01.844Z'
target: cdn.jsdelivr.net
probesCount: 1
results:
- probe:
continent: OC
region: Australia and New Zealand
country: AU
state: null
city: Sydney
asn: 202422
longitude: 151.21
latitude: -33.87
network: G-Core Labs S.A.
tags:
- datacenter-network
resolvers:
- 8.8.8.8
result:
status: finished
statusCodeName: NOERROR
statusCode: 0
rawOutput: "\n; <<>> DiG 9.16.37-Debian <<>> -t A cdn.jsdelivr.net -p 53 -4 +timeout=3 +tries=2 +nocookie +nsid\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50465\n;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 512\n; NSID: 67 70 64 6e 73 2d 73 79 64 (\"gpdns-syd\")\n;; QUESTION SECTION:\n;cdn.jsdelivr.net.\t\tIN\tA\n\n;; ANSWER SECTION:\ncdn.jsdelivr.net.\t180\tIN\tCNAME\tjsdelivr.map.fastly.net.\njsdelivr.map.fastly.net. 23\tIN\tA\t151.101.1.229\njsdelivr.map.fastly.net. 23\tIN\tA\t151.101.65.229\njsdelivr.map.fastly.net. 23\tIN\tA\t151.101.129.229\njsdelivr.map.fastly.net. 23\tIN\tA\t151.101.193.229\n\n;; Query time: 99 msec\n;; SERVER: 8.8.8.8#53(8.8.8.8)\n;; WHEN: Fri Jul 14 18:31:01 UTC 2023\n;; MSG SIZE rcvd: 156\n"
answers:
- name: cdn.jsdelivr.net.
type: CNAME
ttl: 180
class: IN
value: jsdelivr.map.fastly.net.
- name: jsdelivr.map.fastly.net.
type: A
ttl: 23
class: IN
value: 151.101.1.229
- name: jsdelivr.map.fastly.net.
type: A
ttl: 23
class: IN
value: 151.101.65.229
- name: jsdelivr.map.fastly.net.
type: A
ttl: 23
class: IN
value: 151.101.129.229
- name: jsdelivr.map.fastly.net.
type: A
ttl: 23
class: IN
value: 151.101.193.229
timings:
total: 99
resolver: 8.8.8.8
getTraceDnsMeasurementResponse:
summary: 'type: dns + trace'
value:
id: xgaym4ha2736BCPe
type: dns
status: finished
createdAt: '2023-07-14T18:32:52.259Z'
updatedAt: '2023-07-14T18:32:54.312Z'
target: cdn.jsdelivr.net
probesCount: 1
measurementOptions:
trace: true
results:
- probe:
continent: OC
region: Australia and New Zealand
country: AU
state: null
city: Melbourne
asn: 20473
longitude: 144.96
latitude: -37.81
network: Choopa, LLC
tags: []
resolvers:
- 108.61.10.10
result:
status: finished
rawOutput: "\n; <<>> DiG 9.16.37-Debian <<>> -t A cdn.jsdelivr.net -p 53 -4 +timeout=3 +tries=2 +nocookie +nsid +trace\n;; global options: +cmd\n.\t\t\t59490\tIN\tNS\ta.root-servers.net.\n.\t\t\t59490\tIN\tNS\tb.root-servers.net.\n.\t\t\t59490\tIN\tNS\ti.root-servers.net.\n.\t\t\t59490\tIN\tNS\tm.root-servers.net.\n.\t\t\t59490\tIN\tNS\th.root-servers.net.\n.\t\t\t59490\tIN\tNS\tc.root-servers.net.\n.\t\t\t59490\tIN\tNS\tk.root-servers.net.\n.\t\t\t59490\tIN\tNS\tf.root-servers.net.\n.\t\t\t59490\tIN\tNS\tg.root-servers.net.\n.\t\t\t59490\tIN\tNS\tj.root-servers.net.\n.\t\t\t59490\tIN\tNS\te.root-servers.net.\n.\t\t\t59490\tIN\tNS\tl.root-servers.net.\n.\t\t\t59490\tIN\tNS\td.root-servers.net.\n.\t\t\t59490\tIN\tRRSIG\tNS 8 0 518400 20230727050000 20230714040000 11019 . pU6YT+mpbxCmYTvPIpmujeuOZGvCxDVtJ/uaHdwosmjsnZWcvZgQvHJl Li0gl3HcpSSYTGAmMsi27yvGYh0Vm+7gtcuZMTTcsCZmZnz6bv+OAapD ZDqhnWfKmp5tj4ew5tibSXVCDFPmjX0Tt01ly4e5Z+xn5K+AyQqtAIHO oB2weZ/K9sqUMqXgYZZVXjjkNkhO7FE8CtUNi3ZDOVkKvSIHeT1LLFOw AvCDCtnL9rqka9xb0ZoKZCf8Q3JicirNnRGNjA/9Rn3XenyYwuI0K8f3 xrIhDg7CdKRvgL8C9oLfCMvtr1HuMfQbNQq4MYrsv17eWfE45ccyLRLY CIqSfQ==\n;; Received 525 bytes from 108.61.10.10#53(108.61.10.10) in 1 ms\n\nnet.\t\t\t172800\tIN\tNS\ta.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\tb.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\tc.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\td.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\te.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\tf.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\tg.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\th.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\ti.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\tj.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\tk.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\tl.gtld-servers.net.\nnet.\t\t\t172800\tIN\tNS\tm.gtld-servers.net.\nnet.\t\t\t86400\tIN\tDS\t35886 8 2 7862B27F5F516EBE19680444D4CE5E762981931842C465F00236401D 8BD973EE\nnet.\t\t\t86400\tIN\tRRSIG\tDS 8 1 86400 20230727170000 20230714160000 11019 . vdkTxdYXe7XI50EjlQeDlO0zqKWElUR64o8SHfgB3+Kki58EkAB7heQY PplYxcxZ8U0eVEwVyqAd2Nhph9ra5V/jRWDRSbSwml0D9H2a5oUTfeun HRyy9VhojElZ8HShYZFDtgbzp5X1WbV96CmHP4YqCDnwVpHsvzG15mVM eswavjwHiSyxKpW9plE4qD2Ch4gzX3Ja/SriIWvhNp7ghh+n8uZf7owU BhGWrHDwIydv5tRXtDrJ3ae0fBaMucUIxWqSLAsTx+6aYcjfh+MhMZVg xkvIOCSiTWo/pUrjEx1nd2hXJHZX3jfkrYt5tkOwDT5YL75kHKPsE+V/ zTB3Jg==\n;; Received 1203 bytes from 198.97.190.53#53(h.root-servers.net) in 258 ms\n\njsdelivr.net.\t\t172800\tIN\tNS\tdns1.p01.nsone.net.\njsdelivr.net.\t\t172800\tIN\tNS\tns1.gcorelabs.net.\njsdelivr.net.\t\t172800\tIN\tNS\tns2.gcdn.services.\nA1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - A1RTLNPGULOGN7B9A62SHJE1U3TTP8DR NS SOA RRSIG DNSKEY NSEC3PARAM\nA1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20230721064011 20230714053011 27554 net. sTPenGEoqRbNRlbCqO1wBUuSLViplkAUYileU6k5aqSx5GcWmFcASmwX xxXcU4Ck2el9/p5UTMA/IN8s6FliHkyhHMban0w8yTAgllMB44BJfyKw J7d3gQGMSpEi7dJHYEW9epunLB0qIb3GjFvNANouw4qnnDJMBPo3y8gn U+tr2cLBz5cce4KitJVl+smFdSkIEDTeU1tdHieXAEL3zA==\nGBMIV90GKKAHN7P6PL113RFI1O4TFNCK.net. 86400 IN NSEC3 1 1 0 - GBMJLF8O7TPSKBNV9CGB4OIIK74L9AVN NS DS RRSIG\nGBMIV90GKKAHN7P6PL113RFI1O4TFNCK.net. 86400 IN RRSIG NSEC3 8 2 86400 20230719063901 20230712052901 27554 net. n1r0f+ShvkocU0OSXs1SO2GOc0X8Li1qwZSApLja76RyS7TkEoPtwmUr cJ/Z3TAqLNuHKUOGBcVHl2XPoWe5f4GO+Dnw59ym2V5lCHUQu6P0V7g2 1+99KT4x879xVbh6K5liRlHNdJyCsQiI17pnmhfSLVEn3vxumA7e68pu o12GX4W3XIv3wtcQ7P2I2aYqXbT6sP4AKWV7GlY4qtHMiw==\n;; Received 783 bytes from 192.31.80.30#53(d.gtld-servers.net) in 231 ms\n\ncdn.jsdelivr.net.\t180\tIN\tCNAME\tjsdelivr.map.fastly.net.\n;; Received 130 bytes from 92.223.100.53#53(ns1.gcorelabs.net) in 0 ms\n"
hops:
- answers:
- name: .
type: NS
ttl: 59490
class: IN
value: a.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: b.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: i.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: m.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: h.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: c.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: k.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: f.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: g.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: j.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: e.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: l.root-servers.net.
- name: .
type: NS
ttl: 59490
class: IN
value: d.root-servers.net.
- name: .
type: RRSIG
ttl: 59490
class: IN
value: CIqSfQ==
timings:
total: 1
resolver: 108.61.10.10
- answers:
- name: net.
type: NS
ttl: 172800
class: IN
value: a.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: b.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: c.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: d.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: e.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: f.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: g.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: h.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: i.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: j.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: k.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: l.gtld-servers.net.
- name: net.
type: NS
ttl: 172800
class: IN
value: m.gtld-servers.net.
- name: net.
type: DS
ttl: 86400
class: IN
value: 8BD973EE
- name: net.
type: RRSIG
ttl: 86400
class: IN
value: 'zTB3Jg== '
timings:
total: 258
resolver: h.root-servers.net
- answers:
- name: jsdelivr.net.
type: NS
ttl: 172800
class: IN
value: dns1.p01.nsone.net.
- name: jsdelivr.net.
type: NS
ttl: 172800
class: IN
value: ns1.gcorelabs.net.
- name: jsdelivr.net.
type: NS
ttl: 172800
class: IN
value: ns2.gcdn.services.
- name: A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net.
type: NSEC3
ttl: 86400
class: IN
value: NSEC3PARAM
- name: A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net.
type: RRSIG
ttl: 86400
class: IN
value: U+tr2cLBz5cce4KitJVl+smFdSkIEDTeU1tdHieXAEL3zA==
- name: GBMIV90GKKAHN7P6PL113RFI1O4TFNCK.net.
type: NSEC3
ttl: 86400
class: IN
value: RRSIG
- name: GBMIV90GKKAHN7P6PL113RFI1O4TFNCK.net.
type: RRSIG
ttl: 86400
class: IN
value: 'o12GX4W3XIv3wtcQ7P2I2aYqXbT6sP4AKWV7GlY4qtHMiw== '
timings:
total: 231
resolver: d.gtld-servers.net
- answers:
- name: cdn.jsdelivr.net.
type: CNAME
ttl: 180
class: IN
value: jsdelivr.map.fastly.net.
timings:
total: 0
resolver: ns1.gcorelabs.net
getMtrMeasurementResponse:
summary: 'type: mtr'
value:
id: 1aJyGDZkWVGuXLYL
type: mtr
status: finished
createdAt: '2023-07-14T18:33:15.039Z'
updatedAt: '2023-07-14T18:33:19.886Z'
target: cdn.jsdelivr.net
probesCount: 1
measurementOptions:
packets: 2
results:
- probe:
continent: AF
region: Southern Africa
country: ZA
state: null
city: Johannesburg
asn: 199524
longitude: 28.04
latitude: -26.2
network: G-Core Labs S.A.
tags:
- datacenter-network
resolvers:
- private
result:
status: finished
rawOutput: |
Host Loss% Drop Rcv Avg StDev Javg
1. AS199524 _gateway (94.156.93.1) 0.0% 0 2 0.5 0.2 0.4
2. AS199524 5.188.133.2 (5.188.133.2) 0.0% 0 2 0.3 0.1 0.1
3. AS??? 10.255.31.184 (10.255.31.184) 0.0% 0 2 0.4 0.1 0.1
4. AS174 206.249.1.209 (206.249.1.209) 0.0% 0 2 1.1 0.2 0.4
5. AS174 be2385.ccr21.lon01.atlas.cogentco.com (154.54.40.93) 0.0% 0 2 177.0 0.0 0.0
6. AS174 149.6.2.38 (149.6.2.38) 0.0% 0 2 176.4 0.0 0.1
7. AS54113 151.101.1.229 (151.101.1.229) 0.0% 0 2 178.3 0.1 0.1
resolvedAddress: 151.101.1.229
resolvedHostname: 151.101.1.229
hops:
- stats:
min: 176.348
max: 176.416
avg: 176.4
total: 2
loss: 0
rcv: 2
drop: 0
stDev: 0
jMin: 0.1
jMax: 0.1
jAvg: 0.1
asn:
- 174
timings:
- rtt: 176.348
- rtt: 176.416
resolvedAddress: 149.6.2.38
resolvedHostname: 149.6.2.38
- stats:
min: 178.287
max: 178.403
avg: 178.3
total: 2
loss: 0
rcv: 2
drop: 0
stDev: 0.1
jMin: 0.1
jMax: 0.1
jAvg: 0.1
asn:
- 54113
timings:
- rtt: 178.403
- rtt: 178.287
resolvedAddress: 151.101.1.229
resolvedHostname: 151.101.1.229
getHttpMeasurementResponse:
summary: 'type: http'
value:
id: 9J2BCohDSuxoiaOD
type: http
status: finished
createdAt: '2023-07-14T18:34:05.161Z'
updatedAt: '2023-07-14T18:34:06.310Z'
target: cdn.jsdelivr.net
probesCount: 1
measurementOptions:
request:
method: GET
path: /npm/jquery
results:
- probe:
continent: AS
region: Eastern Asia
country: KR
state: null
city: Seoul
asn: 40676
longitude: 126.98
latitude: 37.57
network: Psychz Networks
tags:
- datacenter-network
resolvers:
- 8.8.8.8
- 8.8.4.4
result:
status: finished
resolvedAddress: 104.16.88.20
headers:
date: Fri, 14 Jul 2023 18:34:05 GMT
content-type: application/javascript; charset=utf-8
transfer-encoding: chunked
connection: close
access-control-allow-origin: '*'
access-control-expose-headers: '*'
timing-allow-origin: '*'
cache-control: public, max-age=604800, s-maxage=43200
cross-origin-resource-policy: cross-origin
x-content-type-options: nosniff
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-jsd-version: 3.7.0
x-jsd-version-type: version
etag: W/"155a6-Wp7qw02G6S5WYOD0+HIE8e0Mj/Y"
x-served-by: cache-fra-eddf8230065-FRA, cache-yyz4549-YYZ
x-cache: HIT, MISS
vary: Accept-Encoding
alt-svc: h3=":443"; ma=86400
cf-cache-status: HIT
report-to: '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=jAS6bE6d4YvFOALu6Ejvo6BHcys8BXTVxTfBGQFf%2FvCGLTG7QIUpQUvyIag14NgmMeUcvzfaUJIwQVZ6qL4bl534ErmcTXKm9%2BZG3sRCD1hOLOD5SF4f%2BzD1IEYZze2eSt8%3D"}],"group":"cf-nel","max_age":604800}'
nel: '{"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}'
server: cloudflare
cf-ray: 7e6bdb9999778a57-NRT
content-encoding: br
rawHeaders: |-
Date: Fri, 14 Jul 2023 18:34:05 GMT
Content-Type: application/javascript; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Timing-Allow-Origin: *
Cache-Control: public, max-age=604800, s-maxage=43200
Cross-Origin-Resource-Policy: cross-origin
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-JSD-Version: 3.7.0
X-JSD-Version-Type: version
ETag: W/"155a6-Wp7qw02G6S5WYOD0+HIE8e0Mj/Y"
X-Served-By: cache-fra-eddf8230065-FRA, cache-yyz4549-YYZ
X-Cache: HIT, MISS
Vary: Accept-Encoding
alt-svc: h3=":443"; ma=86400
CF-Cache-Status: HIT
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=jAS6bE6d4YvFOALu6Ejvo6BHcys8BXTVxTfBGQFf%2FvCGLTG7QIUpQUvyIag14NgmMeUcvzfaUJIwQVZ6qL4bl534ErmcTXKm9%2BZG3sRCD1hOLOD5SF4f%2BzD1IEYZze2eSt8%3D"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
CF-RAY: 7e6bdb9999778a57-NRT
Content-Encoding: br
rawBody: |-
/*! jQuery v3.7.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.0",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},R=function(){V()},M=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&z(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function X(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&M(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function U(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function z(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",R),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getEl
rawOutput: |-
HTTP/1.1 200
Date: Fri, 14 Jul 2023 18:34:05 GMT
Content-Type: application/javascript; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Timing-Allow-Origin: *
Cache-Control: public, max-age=604800, s-maxage=43200
Cross-Origin-Resource-Policy: cross-origin
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-JSD-Version: 3.7.0
X-JSD-Version-Type: version
ETag: W/"155a6-Wp7qw02G6S5WYOD0+HIE8e0Mj/Y"
X-Served-By: cache-fra-eddf8230065-FRA, cache-yyz4549-YYZ
X-Cache: HIT, MISS
Vary: Accept-Encoding
alt-svc: h3=":443"; ma=86400
CF-Cache-Status: HIT
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=jAS6bE6d4YvFOALu6Ejvo6BHcys8BXTVxTfBGQFf%2FvCGLTG7QIUpQUvyIag14NgmMeUcvzfaUJIwQVZ6qL4bl534ErmcTXKm9%2BZG3sRCD1hOLOD5SF4f%2BzD1IEYZze2eSt8%3D"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
CF-RAY: 7e6bdb9999778a57-NRT
Content-Encoding: br
/*! jQuery v3.7.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.0",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},R=function(){V()},M=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&z(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function X(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&M(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function U(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function z(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",R),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getEl
truncated: true
statusCode: 200
statusCodeName: OK
timings:
total: 325
download: 1
firstByte: 219
dns: 37
tls: 36
tcp: 32
tls:
authorized: true
protocol: TLSv1.3
cipherName: TLS_AES_256_GCM_SHA384
createdAt: '2023-05-02T00:00:00.000Z'
expiresAt: '2024-05-01T23:59:59.000Z'
issuer:
C: US
O: Cloudflare, Inc.
CN: Cloudflare Inc ECC CA-3
subject:
C: US
ST: California
L: San Francisco
O: Cloudflare, Inc.
CN: sni.cloudflaressl.com
alt: DNS:cdn.jsdelivr.net, DNS:sni.cloudflaressl.com
keyType: EC
keyBits: 256
serialNumber: 07:2D:BB:27:D4:67:BF:66:ED:70:DD:7B:A1:32:C6:22
fingerprint256: 52:EC:FB:20:C4:64:3A:25:2F:F7:C5:BE:F0:4A:32:86:18:03:71:D8:F6:62:57:B6:B3:1B:68:14:82:B1:35:D5
publicKey: 04:32:0D:64:C9:2D:88:E7:EC:D9:74:35:89:31:95:FD:68:6F:73:A0:8D:8C:9B:55:42:86:DF:5F:E9:14:BF:99:44:B6:A7:74:69:59:50:2D:F4:E8:F9:24:9A:61:9D:5C:9E:BC:B1:C2:9A:74:E4:29:03:26:4E:A4:15:6B:E2:26:92
probes:
value:
- version: 0.20.0
location:
continent: NA
region: Northern America
country: US
state: VA
city: Ashburn
asn: 14618
network: Amazon.com, Inc.
latitude: 39.04
longitude: -77.49
tags:
- aws-us-east-1
- datacenter-network
resolvers:
- private
nonAuthenticatedLimits:
summary: non authenticated
value:
rateLimit:
measurements:
create:
type: ip
limit: 100
remaining: 95
reset: 3599
authenticatedLimits:
summary: authenticated
value:
rateLimit:
measurements:
create:
type: user
limit: 250
remaining: 240
reset: 3599
credits:
remaining: 1000
headers:
MeasurementLocation:
description: A link to the newly created measurement.
required: true
schema:
type: string
format: uri
RateLimitLimit:
description: The number of rate limit points available in a given time window.
required: true
schema:
type: integer
RateLimitConsumed:
description: The number of rate limit points consumed by the request.
required: true
schema:
type: integer
RateLimitRemaining:
description: The number of rate limit points remaining in the current time window.
required: true
schema:
type: integer
RateLimitReset:
description: The number of seconds until the limit resets.
required: true
schema:
type: integer
CreditsConsumed:
description: The number of credits consumed by the request. Returned only when an attempt to use credits was made (requests with a valid token exceeding the hourly rate limit).
required: false
schema:
type: integer
CreditsRemaining:
description: The number of credits remaining. Returned only when an attempt to use credits was made (requests with a valid token exceeding the hourly rate limit).
required: false
schema:
type: integer
RequestCost:
description: The number of rate limit points or credits required to accept the request.
required: false
schema:
type: integer
RetryAfter:
description: The number of seconds to wait before retrying this request.
required: true
schema:
type: integer
responses:
'400':
description: |
If the API couldn't process the request due to malformed parameters or other client errors, it returns status `400 Bad Request`
and a body with more information about the error. Please modify your request before trying again.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
description: Information about the error.
required:
- type
- message
properties:
type:
type: string
description: The type of the error.
message:
type: string
description: A human-readable description of the error.
params:
type: object
description: Additional information that might be present if the error is related to a specific parameter or payload field.
additionalProperties:
type: string
examples:
json:
value:
error:
type: validation_error
message: Parameter validation failed.
params:
measurement: \"measurement\" does not match any of the allowed types
'404':
description: |
If the API couldn't find the requested resource, it returns status `404 Not Found`
and a body containing more information about the error.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- type
- message
properties:
type:
type: string
message:
type: string
examples:
json:
value:
error:
type: not_found
message: Couldn't find the requested item.
measurements202:
description: |
If the API accepted the request for processing, it returns status `202 Accepted` and a body containing the ID of the newly created measurement.
You can use the URL from the `Location` header to retrieve the measurement status.
headers:
Location:
$ref: '#/components/headers/MeasurementLocation'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Consumed:
$ref: '#/components/headers/RateLimitConsumed'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
X-Credits-Consumed:
$ref: '#/components/headers/CreditsConsumed'
X-Credits-Remaining:
$ref: '#/components/headers/CreditsRemaining'
X-Request-Cost:
$ref: '#/components/headers/RequestCost'
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMeasurementResponse'
examples:
'0':
$ref: '#/components/examples/createMeasurementResponse'
measurements422:
description: |
If the API couldn't find suitable probes for your request, it returns status `422 Unprocessable Content` and a body with more
information about the error. Please modify your request before trying again.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- type
- message
properties:
type:
type: string
message:
type: string
examples:
json:
value:
error:
type: no_probes_found
message: No matching IPv4 probes available.
measurements429:
description: |
If you've exceeded the API rate limit, you'll receive status `429 Too Many Requests` and a body containing more information about the error.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Consumed:
$ref: '#/components/headers/RateLimitConsumed'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
X-Credits-Consumed:
$ref: '#/components/headers/CreditsConsumed'
X-Credits-Remaining:
$ref: '#/components/headers/CreditsRemaining'
X-Request-Cost:
$ref: '#/components/headers/RequestCost'
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- type
- message
properties:
type:
type: string
message:
type: string
examples:
json:
value:
error:
type: rate_limit_exceeded
message: API rate limit exceeded.
measurement200:
description: |
A successful request returns status `200 OK` and a body containing the requested measurement results.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/MeasurementOptionsConditions'
- $ref: '#/components/schemas/MeasurementResultsConditions'
- $ref: '#/components/schemas/MeasurementResponse'
examples:
pingMeasurement:
$ref: '#/components/examples/getPingMeasurementResponse'
tracerouteMeasurement:
$ref: '#/components/examples/getTracerouteMeasurementResponse'
simpleDnsMeasurement:
$ref: '#/components/examples/getSimpleDnsMeasurementResponse'
traceDnsMeasurement:
$ref: '#/components/examples/getTraceDnsMeasurementResponse'
mtrMeasurement:
$ref: '#/components/examples/getMtrMeasurementResponse'
httpMeasurement:
$ref: '#/components/examples/getHttpMeasurementResponse'
measurement429:
description: |
If you've exceeded the API rate limit, you'll receive status `429 Too Many Requests` and a body containing more information about the error.
headers:
Retry-After:
$ref: '#/components/headers/RetryAfter'
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- type
- message
properties:
type:
type: string
message:
type: string
examples:
json:
value:
error:
type: too_many_requests
message: Too many requests. Please retry in 4 seconds.
probes200:
description: |
A successful request returns status `200 OK` and a body containing a list of all probes currently online and their metadata.
content:
application/json:
schema:
$ref: '#/components/schemas/Probes'
examples:
'0':
$ref: '#/components/examples/probes'
limits:
description: |
A successful request returns status `200 OK` and a body containing information about the current rate limits and user credits.
content:
application/json:
schema:
$ref: '#/components/schemas/Limits'
examples:
noAuthLimits:
$ref: '#/components/examples/nonAuthenticatedLimits'
authLimits:
$ref: '#/components/examples/authenticatedLimits'
parameters:
measurementId:
description: The ID of the measurement you want to retrieve.
in: path
name: id
required: true
schema:
type: string