Python SDK

Use the ServersCamp Python SDK to manage your infrastructure programmatically.

Installation

Bash
pip install serverscamp

Authentication

Get your API token from the API Settings page in your dashboard.

Python
import serverscamp

# Option 1: Set environment variable
# export SCAMP_API_TOKEN=your-token

# Option 2: Pass token directly
client = serverscamp.Client(token="your-api-token")

# Option 3: Use token from env (default)
client = serverscamp.Client()

Quick Start Examples

List all VMs

Python
from serverscamp import Client

client = Client()

# List all VMs
vms = client.vms.list()
for vm in vms:
    print(f"{vm.name}: {vm.ip_address} ({vm.status})")

Create a VM

Python
from serverscamp import Client

client = Client()

# Create a new VM
vm = client.vms.create(
    name="web-server",
    region="eu-central-1",
    image="ubuntu-22.04",
    size="burst-xs",
    ssh_keys=["my-key"],
    storage={
        "size_gb": 50,
        "class": "standard"
    }
)

print(f"Created VM: {vm.id}")

# Wait for VM to be ready
vm.wait_until_running()
print(f"VM is running at {vm.ip_address}")

Create a VPC with Subnet

Python
from serverscamp import Client

client = Client()

# Create VPC
vpc = client.vpcs.create(
    name="production-vpc",
    region="eu-central-1",
    cidr_block="10.0.0.0/16"
)

# Create subnet
subnet = client.subnets.create(
    name="web-subnet",
    vpc_id=vpc.id,
    cidr_block="10.0.1.0/24",
    availability_zone="eu-central-1a"
)

print(f"VPC: {vpc.id}, Subnet: {subnet.id}")

Manage Databases

Python
from serverscamp import Client

client = Client()

# Create PostgreSQL database
db = client.databases.create(
    name="app-db",
    engine="postgres",
    version="15",
    size="db-small",
    region="eu-central-1",
    vpc_id="vpc-123"
)

# Wait for database to be ready
db.wait_until_available()

# Get connection string
print(f"Host: {db.host}")
print(f"Port: {db.port}")
print(f"Connection: {db.connection_string}")

Complete Example: Full Stack Setup

Python
from serverscamp import Client

def setup_production_stack():
    client = Client()

    # 1. Create VPC
    vpc = client.vpcs.create(
        name="prod-vpc",
        region="eu-central-1",
        cidr_block="10.0.0.0/16"
    )

    # 2. Create subnets
    web_subnet = client.subnets.create(
        name="web-subnet",
        vpc_id=vpc.id,
        cidr_block="10.0.1.0/24"
    )

    db_subnet = client.subnets.create(
        name="db-subnet",
        vpc_id=vpc.id,
        cidr_block="10.0.2.0/24"
    )

    # 3. Create database
    db = client.databases.create(
        name="prod-db",
        engine="postgres",
        version="15",
        size="db-medium",
        region="eu-central-1",
        vpc_id=vpc.id,
        subnet_id=db_subnet.id
    )

    # 4. Create web servers
    web_servers = []
    for i in range(2):
        vm = client.vms.create(
            name=f"web-{i+1}",
            region="eu-central-1",
            image="ubuntu-22.04",
            size="standard",
            vpc_id=vpc.id,
            subnet_id=web_subnet.id,
            ssh_keys=["prod-key"],
            user_data=f"""#!/bin/bash
                apt-get update
                apt-get install -y nginx
                echo "Server {i+1}" > /var/www/html/index.html
            """
        )
        web_servers.append(vm)

    # 5. Create load balancer
    lb = client.load_balancers.create(
        name="prod-lb",
        region="eu-central-1",
        vpc_id=vpc.id,
        targets=[vm.id for vm in web_servers],
        health_check={
            "path": "/health",
            "interval": 30
        }
    )

    # Wait for everything
    db.wait_until_available()
    for vm in web_servers:
        vm.wait_until_running()

    print(f"Load Balancer URL: {lb.dns_name}")
    print(f"Database Host: {db.host}")

    return {
        "vpc": vpc,
        "lb": lb,
        "db": db,
        "servers": web_servers
    }

if __name__ == "__main__":
    stack = setup_production_stack()

Error Handling

Python
from serverscamp import Client
from serverscamp.exceptions import (
    AuthenticationError,
    NotFoundError,
    RateLimitError,
    ValidationError
)

client = Client()

try:
    vm = client.vms.get("vm-invalid")
except NotFoundError:
    print("VM not found")
except AuthenticationError:
    print("Invalid API token")
except RateLimitError as e:
    print(f"Rate limited, retry after {e.retry_after}s")
except ValidationError as e:
    print(f"Invalid request: {e.message}")

Async Support

The SDK also provides an async client for use with asyncio:

Python
import asyncio
from serverscamp import AsyncClient

async def main():
    client = AsyncClient()

    # Create multiple VMs concurrently
    tasks = [
        client.vms.create(name=f"worker-{i}", ...)
        for i in range(5)
    ]
    vms = await asyncio.gather(*tasks)

    print(f"Created {len(vms)} VMs")

asyncio.run(main())

Resources