VPC APIv1

Download OpenAPI

Introduction

VPC is a set of products and features allowing you to build your own virtual private cloud on top of Scaleway's shared public cloud. It currently consists of Private Networks, which allows instances to be interconnected through a dedicated, private, and flexible L2 network.

You can add as many servers to your networks as you want, and add up to eight (8) different networks per server, taking the form of additional network interfaces inside your instance. This allows you to run services isolated from the public internet and expose them to the rest of your infrastructure without worrying about public network filtering.

Instances can be plugged and unplugged from a network at will, even when the instance is running: the network interface will be hot-plugged to the server, and software can be configured to automatically set it up as soon as it appears.

Technnical limitations

  • A maximum of eight (8) private networks can be plugged to any single instance
  • The MAC address of an instance in a network cannot be changed
  • Broadcast and Multicast traffic, while supported, are heavily rate-limited

You need to have an HTTP client such as curl to use Scaleway API. It is also a good idea to have jq which will help you to read and parse JSON output. Make sure you have these two tools before you begin. Otherwise use your package manager to install them.

To call Scaleway API, you need an X-Auth-Token. If you don't have one yet, refer to our doc about generating API keys.

Next, you will need your Project ID to create VPC resources in. If you don't have it, refer to our doc about creating a Project.

Finally, you will need to chose the Availability Zone in which to create your Private Networks. Keep in mind that Private Networks are per zone and not per region, thus you will only be able to connect Instances to networks from the same Availability Zone.

You can customize the name, tags and project ID for the created Private Network.

Keep the id field of the response: it is your Private Network ID, and is useable across all Scaleway products that support Private Networks. Since it will be used in the next steps, we will put it in a variable for the sake of readability.

To delete your Private Network, you can use the following call:

Please note that the Private Network must be empty to be deleted, so be sure to remove any other Scaleway product from your network prior to deletion.

Each product has its own API to interact with Private Networks, and each will be described here.

Instance

Scaleway Instances support Private Networks on a per-server basis. For this, you will need an instance in the same Availability Zone as your Private Network, and the Instance ID. For readability purposes, we will put the Instance ID in a variable:

Then, use the following call to attach the Instance to your Private Network:

Keep the id field of the response: it is your Private NIC ID. For readability purposes, we will put it in a variable:

Keep the mac_address field of the response, as it will allow you to identify the Private NIC inside your Instance. If successful, a new network interface will appear inside your Instance, ready to be configured to transmit traffic to other instances of the same network, with the MAC address returned by the API call.

By running dmesg, you can confirm that the network interface has been plugged:

By running ip -br link, you can confirm the presence of the network interface, and confirm its name if several networks are plugged to your instance:

You can now refer to our online documentation on how to configure those network interfaces.

To delete your Private NIC, which equates to unplugging your Instance from the Private Network, you can use the following call:

Then the network interface should disappear from your Instance.

A private network allows interconnecting your instances in an isolated and private network. The network reachability is limited to the instances that are on the same private network. Network Interface Controllers (NICs) are available on the instance and can be freely managed (adding IP addresses, shutdown interface...)

Note that an instance can be a part of multiple private networks.

List private networks

GET
/vpc/v1/zones/{zone}/private-networks
Path Parameters

zone
required string
The zone you want to target. Possible values are fr-par-1, fr-par-2, fr-par-3, nl-ams-1, nl-ams-2, pl-waw-1 and pl-waw-2.
Query Parameters

order_by
string
The sort order of the returned private networks. Possible values are created_at_asc, created_at_desc, name_asc and name_desc. The default value is created_at_asc.

page
integer
The page number for the returned private networks. The default value is 1.

page_size
integer
The maximum number of private networks per page. The default value is 20.

name
string
Filter private networks with names containing this string.

tags
array
Filter private networks with one or more matching tags.

organization_id
string
The organization ID on which to filter the returned private networks.

project_id
string
The project ID on which to filter the returned private networks.

private_network_ids
array
The PrivateNetwork IDs on which to filter the returned private networks. (UUID format).
200 Response

private_networks
array

total_count
integer
Response Example
POST
/vpc/v1/zones/{zone}/private-networks
Path Parameters

zone
required string
The zone you want to target. Possible values are fr-par-1, fr-par-2, fr-par-3, nl-ams-1, nl-ams-2, pl-waw-1 and pl-waw-2.
Body

name
required string
The name of the private network.

project_id
required string
The project ID of the private network.

tags
array
The private networks tags.

subnets
array
Private network subnets CIDR. (IP network).
Request Example
200 Response

id
string
The private network ID.

name
string
The private network name.

organization_id
string
The private network organization.

project_id
string
The private network project ID.

zone
string
The zone in which the private network is available.

tags
array
The private network tags.

created_at
nullable string
The private network creation date. (RFC 3339 format).

updated_at
nullable string
The last private network modification date. (RFC 3339 format).

subnets
array
Private network subnets CIDR. (IP network).
Response Example
GET
/vpc/v1/zones/{zone}/private-networks/{private_network_id}
Path Parameters

zone
required string
The zone you want to target. Possible values are fr-par-1, fr-par-2, fr-par-3, nl-ams-1, nl-ams-2, pl-waw-1 and pl-waw-2.

private_network_id
required string
The private network id.
200 Response

id
string
The private network ID.

name
string
The private network name.

organization_id
string
The private network organization.

project_id
string
The private network project ID.

zone
string
The zone in which the private network is available.

tags
array
The private network tags.

created_at
nullable string
The private network creation date. (RFC 3339 format).

updated_at
nullable string
The last private network modification date. (RFC 3339 format).

subnets
array
Private network subnets CIDR. (IP network).
Response Example
PATCH
/vpc/v1/zones/{zone}/private-networks/{private_network_id}
Path Parameters

zone
required string
The zone you want to target. Possible values are fr-par-1, fr-par-2, fr-par-3, nl-ams-1, nl-ams-2, pl-waw-1 and pl-waw-2.

private_network_id
required string
The private network ID.
Body

name
nullable string
The name of the private network.

tags
nullable array
The private networks tags.

subnets
deprecated array
Private network subnets CIDR (deprecated).
Request Example
200 Response

id
string
The private network ID.

name
string
The private network name.

organization_id
string
The private network organization.

project_id
string
The private network project ID.

zone
string
The zone in which the private network is available.

tags
array
The private network tags.

created_at
nullable string
The private network creation date. (RFC 3339 format).

updated_at
nullable string
The last private network modification date. (RFC 3339 format).

subnets
array
Private network subnets CIDR. (IP network).
Response Example
DELETE
/vpc/v1/zones/{zone}/private-networks/{private_network_id}
Path Parameters

zone
required string
The zone you want to target. Possible values are fr-par-1, fr-par-2, fr-par-3, nl-ams-1, nl-ams-2, pl-waw-1 and pl-waw-2.

private_network_id
required string
The private network ID.
204 Response

Empty response