> 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.

# Modify MVE Details

PUT https://api.megaport.com/v2/product/mve/{productUid}
Content-Type: application/json

Once created, the SD-WAN controller manages most MVE changes. From the Megaport side, you can update only two values for an MVE through the API: `productName` and `costCentre`.

If you want to resize the instance, you need to create a new instance with the required size, move the services to the new instance, and then delete the old instance.

**Note:** You cannot add or remove vNICs from an MVE using this API endpoint. If you want to alter the number of vNICs on your MVE, you must reorder the MVE.

Reference: https://en.megaport.ferndocs.com/api-reference/megaport-virtual-edge-mve/modify-mve-details

## 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)

### Body (application/json)

This endpoint expects an object.

- `costCentre` (string, optional)
- `name` (string, optional)

## Response

### 200

Modify MVE Details - Name and Cost Centre / Modify MVE Details - Name and Cost Centre

- `data` (V2ProductMveProductUidPutResponsesContentApplicationJsonSchemaData, optional)
- `message` (string, optional)
- `terms` (string, optional)

## Types

### V2ProductMveProductUidPutResponsesContentApplicationJsonSchemaData

- `adminLocked` (boolean, optional)
- `attributeTags` (V2ProductMveProductUidPutResponsesContentApplicationJsonSchemaDataAttributeTags, optional)
- `attributes` (list of any, optional)
- `billableId` (double, optional)
- `billableUsageAlgorithm` (string, optional)
- `buyoutPort` (boolean, optional)
- `companyId` (double, optional)
- `companyName` (string, optional)
- `components` (list of any, optional)
- `configuredDate` (double, optional)
- `contractStartDate` (double, optional)
- `contractTermMonths` (double, optional)
- `costCentre` (string, optional)
- `createDate` (double, optional)
- `createdBy` (string, optional)
- `inAdvanceBillingStatus` (string, optional)
- `lagPrimary` (boolean, optional)
- `locked` (boolean, optional)
- `market` (string, optional)
- `marketplaceVisibility` (boolean, optional)
- `name` (string, optional)
- `productType` (string, optional)
- `prooductSpeed` (string, optional)
- `provisioningItems` (list of any, optional)
- `provisioningStatus` (string, optional)
- `rateType` (string, optional)
- `requestedDate` (double, optional)
- `serviceName` (string, optional)
- `tags` (list of any, optional)
- `technicalServiceId` (double, optional)
- `technicalServiceUid` (string, optional)
- `trialAgreement` (boolean, optional)
- `virtual` (boolean, optional)
- `vxcAutoApproval` (boolean, optional)
- `vxcPermitted` (boolean, optional)

### V2ProductMveProductUidPutResponsesContentApplicationJsonSchemaDataAttributeTags

## Examples

### Modify MVE Details - Name and Cost Centre

**Response**

```json
{
  "data": {
    "adminLocked": false,
    "attributeTags": {},
    "attributes": [],
    "billableId": 60547,
    "billableUsageAlgorithm": "POST_PAID_HOURLY_SPEED_MCR2",
    "buyoutPort": false,
    "companyId": 1153,
    "companyName": "Megaport Lab",
    "components": [],
    "configuredDate": 1594601042577,
    "contractStartDate": 1594601340908,
    "contractTermMonths": 1,
    "costCentre": "New name of the cost centre",
    "createDate": 1594601024595,
    "createdBy": "1235ce23-4b8d-44b5-818a-739e34f79e7a",
    "inAdvanceBillingStatus": "ACTIVE",
    "lagPrimary": false,
    "locked": false,
    "market": "Singapore",
    "marketplaceVisibility": true,
    "name": "New name of the MVE",
    "productType": "MVE",
    "prooductSpeed": "small",
    "provisioningItems": [],
    "provisioningStatus": "LIVE",
    "rateType": "MONTHLY",
    "requestedDate": 1594601024595,
    "serviceName": "New name of the MVE",
    "tags": [],
    "technicalServiceId": 61350,
    "technicalServiceUid": "c6e5235a-1583-45cc-a708-1e8809cac0e7",
    "trialAgreement": false,
    "virtual": true,
    "vxcAutoApproval": false,
    "vxcPermitted": true
  },
  "message": "Product [c6e5235a-1583-45cc-a708-1e8809cac0e7] has been updated",
  "terms": "This data is subject to the Acceptable Use Policy https://www.megaport.com/legal/acceptable-use-policy"
}
```

**SDK Code**

```python Modify MVE Details - Name and Cost Centre
import requests

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

response = requests.put(url)

print(response.json())
```

```javascript Modify MVE Details - Name and Cost Centre
const url = 'https://api.megaport.com/v2/product/mve/productUid';
const options = {method: 'PUT'};

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

```go Modify MVE Details - Name and Cost Centre
package main

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

func main() {

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

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

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

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

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

}
```

```ruby Modify MVE Details - Name and Cost Centre
require 'uri'
require 'net/http'

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

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

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

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

```java Modify MVE Details - Name and Cost Centre
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

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

```php Modify MVE Details - Name and Cost Centre
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp Modify MVE Details - Name and Cost Centre
using RestSharp;

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

```swift Modify MVE Details - Name and Cost Centre
import Foundation

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

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()
```

### Modify MVE Details

**Request**

```json
{
  "costCentre": "New name of the cost centre",
  "name": "New name of the MVE"
}
```

**Response**

```json
{
  "data": {
    "adminLocked": false,
    "attributeTags": {},
    "attributes": [],
    "billableId": 60547,
    "billableUsageAlgorithm": "POST_PAID_HOURLY_SPEED_MCR2",
    "buyoutPort": false,
    "companyId": 1153,
    "companyName": "Megaport Lab",
    "components": [],
    "configuredDate": 1594601042577,
    "contractStartDate": 1594601340908,
    "contractTermMonths": 1,
    "costCentre": "New name of the cost centre",
    "createDate": 1594601024595,
    "createdBy": "1235ce23-4b8d-44b5-818a-739e34f79e7a",
    "inAdvanceBillingStatus": "ACTIVE",
    "lagPrimary": false,
    "locked": false,
    "market": "Singapore",
    "marketplaceVisibility": true,
    "name": "New name of the MVE",
    "productType": "MVE",
    "prooductSpeed": "small",
    "provisioningItems": [],
    "provisioningStatus": "LIVE",
    "rateType": "MONTHLY",
    "requestedDate": 1594601024595,
    "serviceName": "New name of the MVE",
    "tags": [],
    "technicalServiceId": 61350,
    "technicalServiceUid": "c6e5235a-1583-45cc-a708-1e8809cac0e7",
    "trialAgreement": false,
    "virtual": true,
    "vxcAutoApproval": false,
    "vxcPermitted": true
  },
  "message": "Product [c6e5235a-1583-45cc-a708-1e8809cac0e7] has been updated",
  "terms": "This data is subject to the Acceptable Use Policy https://www.megaport.com/legal/acceptable-use-policy"
}
```

**SDK Code**

```python Modify MVE Details
import requests

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

payload = {
    "costCentre": "New name of the cost centre",
    "name": "New name of the MVE"
}
headers = {"Content-Type": "application/json"}

response = requests.put(url, json=payload, headers=headers)

print(response.json())
```

```javascript Modify MVE Details
const url = 'https://api.megaport.com/v2/product/mve/productUid';
const options = {
  method: 'PUT',
  headers: {'Content-Type': 'application/json'},
  body: '{"costCentre":"New name of the cost centre","name":"New name of the MVE"}'
};

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

```go Modify MVE Details
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"costCentre\": \"New name of the cost centre\",\n  \"name\": \"New name of the MVE\"\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("Content-Type", "application/json")

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

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

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

}
```

```ruby Modify MVE Details
require 'uri'
require 'net/http'

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

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

request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"costCentre\": \"New name of the cost centre\",\n  \"name\": \"New name of the MVE\"\n}"

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

```java Modify MVE Details
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.put("https://api.megaport.com/v2/product/mve/productUid")
  .header("Content-Type", "application/json")
  .body("{\n  \"costCentre\": \"New name of the cost centre\",\n  \"name\": \"New name of the MVE\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api.megaport.com/v2/product/mve/productUid', [
  'body' => '{
  "costCentre": "New name of the cost centre",
  "name": "New name of the MVE"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp Modify MVE Details
using RestSharp;

var client = new RestClient("https://api.megaport.com/v2/product/mve/productUid");
var request = new RestRequest(Method.PUT);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"costCentre\": \"New name of the cost centre\",\n  \"name\": \"New name of the MVE\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Modify MVE Details
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "costCentre": "New name of the cost centre",
  "name": "New name of the MVE"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.megaport.com/v2/product/mve/productUid")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```