Skip to main content

VPC API

Base URL: https://api.sparbz.cloud/api/v1

Overview​

The VPC API allows you to create and manage Virtual Private Clouds (VPCs) for network isolation and resource organization. Create VPCs with custom CIDR blocks, manage subnets, configure routing, and control network access.

All endpoints require authentication via Bearer token or API key.


VPC Management​

GET /vpcs​

List all VPCs in your organization.

Headers:

Authorization: Bearer <token>

Query Parameters:

ParameterTypeDescription
regionstringFilter by region (us-east-1, eu-west-1, etc.)
statusstringFilter by status: provisioning, available, deleting, deleted
limitintegerNumber of results (default: 20, max: 100)
offsetintegerPagination offset

Response (200 OK):

[
{
"id": "uuid",
"name": "production-vpc",
"cidr_block": "10.0.0.0/16",
"region": "us-east-1",
"status": "available",
"is_default": false,
"subnet_count": 3,
"route_table_count": 2,
"nat_gateway_count": 1,
"flow_logs_enabled": true,
"created_at": "2024-10-15T10:30:00Z"
}
]

POST /vpcs​

Create a new VPC.

Request Body:

{
"name": "string",
"cidr_block": "string (CIDR notation)",
"region": "string",
"enable_dns_hostnames": true,
"enable_dns_support": true,
"enable_flow_logs": false
}

Response (201 Created):

{
"id": "uuid",
"name": "production-vpc",
"cidr_block": "10.0.0.0/16",
"region": "us-east-1",
"status": "provisioning",
"is_default": false,
"created_at": "2024-11-29T10:30:00Z"
}

GET /vpcs/:id​

Get details of a specific VPC.

Response (200 OK):

{
"id": "uuid",
"name": "production-vpc",
"cidr_block": "10.0.0.0/16",
"region": "us-east-1",
"status": "available",
"is_default": false,
"enable_dns_hostnames": true,
"enable_dns_support": true,
"enable_flow_logs": true,
"flow_logs_destination": "arn:aws:s3:::bucket/vpc-logs",
"subnet_count": 3,
"route_table_count": 2,
"nat_gateway_count": 1,
"internet_gateway_count": 1,
"security_group_count": 5,
"network_acl_count": 1,
"created_at": "2024-10-15T10:30:00Z",
"updated_at": "2024-11-29T15:45:00Z"
}

PATCH /vpcs/:id​

Update VPC settings.

Request Body:

{
"name": "string (optional)",
"enable_dns_hostnames": boolean,
"enable_dns_support": boolean,
"enable_flow_logs": boolean
}

Response (200 OK):

{
"id": "uuid",
"name": "production-vpc-updated",
"updated_at": "2024-11-29T15:45:00Z"
}

DELETE /vpcs/:id​

Delete a VPC.

Response (204 No Content)


Subnet Management​

GET /vpcs/:id/subnets​

List all subnets in a VPC.

Response (200 OK):

[
{
"id": "uuid",
"name": "public-subnet-1a",
"cidr_block": "10.0.1.0/24",
"availability_zone": "us-east-1a",
"available_ip_count": 251,
"map_public_ip_on_launch": true,
"route_table_id": "rtb-xxx",
"created_at": "2024-10-15T10:30:00Z"
}
]

POST /vpcs/:id/subnets​

Create a new subnet in a VPC.

Request Body:

{
"name": "string",
"cidr_block": "string",
"availability_zone": "string",
"map_public_ip_on_launch": false
}

Response (201 Created):

{
"id": "uuid",
"name": "public-subnet-1a",
"cidr_block": "10.0.1.0/24",
"availability_zone": "us-east-1a",
"available_ip_count": 251,
"created_at": "2024-11-29T10:30:00Z"
}

GET /vpcs/:id/subnets/:subnet_id​

Get details of a specific subnet.

Response (200 OK):

{
"id": "uuid",
"name": "public-subnet-1a",
"cidr_block": "10.0.1.0/24",
"availability_zone": "us-east-1a",
"available_ip_count": 251,
"assigned_ip_count": 5,
"map_public_ip_on_launch": true,
"route_table_id": "rtb-xxx",
"network_acl_id": "acl-xxx",
"created_at": "2024-10-15T10:30:00Z"
}

DELETE /vpcs/:id/subnets/:subnet_id​

Delete a subnet.

Response (204 No Content)


Security Groups​

GET /vpcs/:id/security-groups​

List all security groups in a VPC.

Response (200 OK):

[
{
"id": "sg-xxx",
"name": "web-sg",
"description": "Security group for web servers",
"inbound_rules": [
{
"protocol": "tcp",
"port_range": "80-80",
"source": "0.0.0.0/0"
}
],
"outbound_rules": [
{
"protocol": "-1",
"source": "0.0.0.0/0"
}
]
}
]

POST /vpcs/:id/security-groups​

Create a new security group.

Request Body:

{
"name": "string",
"description": "string",
"inbound_rules": [
{
"protocol": "tcp | udp | icmp",
"port_range": "string (e.g., 80-80, 3306-3306)",
"source": "CIDR or security group id"
}
]
}

Response (201 Created):

{
"id": "sg-xxx",
"name": "web-sg",
"description": "Security group for web servers",
"created_at": "2024-11-29T10:30:00Z"
}

Network ACLs​

GET /vpcs/:id/network-acls​

List all Network ACLs in a VPC.

Response (200 OK):

[
{
"id": "acl-xxx",
"is_default": false,
"inbound_rules": [
{
"rule_number": 100,
"protocol": "tcp",
"port_range": "80-80",
"source": "0.0.0.0/0",
"action": "allow"
}
],
"outbound_rules": [
{
"rule_number": 100,
"protocol": "-1",
"action": "allow"
}
]
}
]

Route Tables​

GET /vpcs/:id/route-tables​

List all route tables in a VPC.

Response (200 OK):

[
{
"id": "rtb-xxx",
"name": "public-routes",
"routes": [
{
"destination": "10.0.0.0/16",
"target": "local"
},
{
"destination": "0.0.0.0/0",
"target": "igw-xxx"
}
],
"subnet_associations": 2
}
]

POST /vpcs/:id/route-tables/:rtb_id/routes​

Add a route to a route table.

Request Body:

{
"destination_cidr_block": "string",
"target": "internet_gateway | nat_gateway | vpn_gateway | instance | network_interface"
}

Response (201 Created)


Internet Gateways​

POST /vpcs/:id/internet-gateways​

Attach an Internet Gateway to a VPC.

Request Body:

{
"name": "string"
}

Response (201 Created):

{
"id": "igw-xxx",
"name": "main-igw",
"status": "available",
"created_at": "2024-11-29T10:30:00Z"
}

GET /vpcs/:id/internet-gateways​

List Internet Gateways attached to a VPC.

Response (200 OK):

[
{
"id": "igw-xxx",
"name": "main-igw",
"status": "available",
"created_at": "2024-10-15T10:30:00Z"
}
]

NAT Gateways​

GET /vpcs/:id/nat-gateways​

List NAT Gateways in a VPC.

Response (200 OK):

[
{
"id": "nat-xxx",
"status": "available",
"public_ip": "203.0.113.1",
"elastic_ip_allocation_id": "eipalloc-xxx",
"subnet_id": "subnet-xxx",
"created_at": "2024-10-15T10:30:00Z"
}
]

POST /vpcs/:id/nat-gateways​

Create a NAT Gateway.

Request Body:

{
"subnet_id": "string",
"allocation_id": "string (elastic IP allocation)"
}

Response (201 Created):

{
"id": "nat-xxx",
"status": "pending",
"created_at": "2024-11-29T10:30:00Z"
}

Error Responses​

CodeDescription
400Bad Request - Invalid CIDR block, region, or subnet configuration
401Unauthorized - Invalid or missing token
403Forbidden - Insufficient permissions
404Not Found - VPC, subnet, or related resource doesn't exist
409Conflict - CIDR block overlaps or resource already exists
429Too Many Requests - VPC limit reached
500Internal Server Error

Common Use Cases​

Creating a Production VPC with Public and Private Subnets​

# Create VPC
POST /vpcs
{
"name": "production",
"cidr_block": "10.0.0.0/16",
"region": "us-east-1"
}

# Create public subnet
POST /vpcs/{vpc_id}/subnets
{
"name": "public-1a",
"cidr_block": "10.0.1.0/24",
"availability_zone": "us-east-1a",
"map_public_ip_on_launch": true
}

# Create private subnet
POST /vpcs/{vpc_id}/subnets
{
"name": "private-1a",
"cidr_block": "10.0.10.0/24",
"availability_zone": "us-east-1a"
}

Setting Up Internet Access​

# Create and attach Internet Gateway
POST /vpcs/{vpc_id}/internet-gateways
{
"name": "main-igw"
}

# Add route to Internet Gateway
POST /vpcs/{vpc_id}/route-tables/{rtb_id}/routes
{
"destination_cidr_block": "0.0.0.0/0",
"target": "internet_gateway"
}

Creating a Web Server Security Group​

POST /vpcs/{vpc_id}/security-groups
{
"name": "web-servers",
"description": "Allow HTTP and HTTPS",
"inbound_rules": [
{
"protocol": "tcp",
"port_range": "80-80",
"source": "0.0.0.0/0"
},
{
"protocol": "tcp",
"port_range": "443-443",
"source": "0.0.0.0/0"
}
]
}