> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://en.megaport.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://en.megaport.ferndocs.com/_mcp/server.

# Get MVE Telemetry

GET https://api.megaport.com/v2/product/mve/{productUid}/telemetry

Returns telemetry details for the specified MVE.

The `productUid` is the unique product ID and is required.

Multiple telemetry types can be passed. For example, GET /v2/product/mve/5624060e-32gb-4267-a340-c15e91bc0f82/telemetry?type=BITS\&type=PACKETS\&days=30. When multiple telemetry types are passed, the top level type is set to `null` in the response. The key information for each telemetry type is in the \{data} section of the response.

A minimum of one telemetry type must be provided.

Telemetry details can be returned by number of days in the past, or by passing a date range: 'from' and 'to'. If no `days`, or `to` and `from` are passed, the single most recent measurement is returned, which is approximately every 5 minutes.

The maximum number of days that can be requested is 180 days.

**Note:** The `days` parameter is mutually exclusive from `to` and `from`. If both `days` and `from` and `to` are passed, an error is returned explaining that the fields are mutually exclusive.

You can return telemetry details in CSV format by specifying the text/csv header parameter.

Reference: https://en.megaport.ferndocs.com/api-reference/service-status/metric-types/get-mve-telemetry

## Servers

- `https://api.megaport.com` (Production environment, default)
- `https://api-staging.megaport.com` (Staging environment (test only, reset every 24 hours))

## Request

### Path parameters

- `productUid` (string, required)

### Query parameters

- `type` (string, optional) — Indicates the type of metric. Values include `BITS` and `PACKETS`. Multiple telemetry types can be passed. (Required - string)
- `from` (string, optional) — Milliseconds since epoch. When not provided, returns the single most recent measurement. You can use a tool such as https://www.epochconverter.com/ for conversion to and from dates. (Optional - string)
- `to` (string, optional) — Milliseconds since epoch. When not provided, returns the single most recent measurement. You can use a tool such as https://www.epochconverter.com/ for conversion to and from dates. (Optional - string)
- `days` (string, optional) — The number of days in the past from today for which to return telemetry details. This parameter is mutually exclusive from "to" and "from". (Optional - string)

## Response

### 200

Get MVE Telemetry - Single Telemetry Type (From, To) / Get MVE Telemetry - Single Telemetry Type (Days) / Get MVE Telemetry - Multiple Telemetry Types (Days) / Get MVE Telemetry - CSV Single Telemetry Type (From, To) / Get MVE Telemetry - CSV Single Telemetry Type (Days) / Get MVE Telemetry - CSV Multiple Telemetry Types (Days) / Get MVE Telemetry - CSV Multiple Telemetry Types (Days) / Get MVE Telemetry - CSV Single Telemetry Type (Days) / Get MVE Telemetry - Single Telemetry Type (Days) / Get MVE Telemetry - Multiple Telemetry Types (Days) / Get MVE Telemetry - CSV Single Telemetry Type (From, To) / Get MVE Telemetry - Single Telemetry Type (From, To)

## Examples

**Response**

```json
{}
```

**SDK Code**

```python
import requests

url = "https://api.megaport.com/v2/product/mve/productUid/telemetry"

response = requests.get(url)

print(response.json())
```

```javascript
const url = 'https://api.megaport.com/v2/product/mve/productUid/telemetry';
const options = {method: 'GET'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.megaport.com/v2/product/mve/productUid/telemetry"

	req, _ := http.NewRequest("GET", url, nil)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.megaport.com/v2/product/mve/productUid/telemetry")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.megaport.com/v2/product/mve/productUid/telemetry")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.megaport.com/v2/product/mve/productUid/telemetry');

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.megaport.com/v2/product/mve/productUid/telemetry");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://api.megaport.com/v2/product/mve/productUid/telemetry")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```