Quick start guide

The page provides a walk through guide for provisioning a server using the VPS Provisioning API.

  • Create an API key using the customer control panel.

  • Set some evironment variables. Use the key details from the control panel, and set the path to your own SSH public key if different.

$ API_USER="abcd1234"
$ API_PASS="efgh5678"
$ SSH_KEY=~/.ssh/id_rsa.pub
  • Get an access token from the auth server:
$ TOKEN=$(curl -s -d 'grant_type=client_credentials' -u "$API_USER:$API_PASS" https://auth.mythic-beasts.com/login | jq -r .access_token)
  • Find a server product that fits your needs (e.g., 1G of RAM):
$ PRODUCT=$(curl -s -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/vps/products | jq -r '.[] | select(.specs.ram == 1024) | .code')
$ echo $PRODUCT
VPSX4
  • Find the image for the operating system that you'd like to use (e.g., Sympl on Debian):
$ IMAGE=$(curl -s -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/vps/images | jq -r '.[] | select(.description | test("Sympl")) | .name')
$ echo $IMAGE
01-cloudinit-debian-buster.raw.gz/sympl
  • Find a suitable disk size (e.g., smallest SSD size — SSD is the default disk type):
$ SIZE=$(curl -s -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/vps/disk-sizes | jq -r '.ssd | min')
$ echo $SIZE
5120
  • Create the server:
$ curl -D- -X POST -d "{\"product\": \"$PRODUCT\", \"image\": \"$IMAGE\", \"ssh_keys\": \"$(cat $SSH_KEY)\", \"disk_size\": $SIZE}" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/vps/servers
HTTP/1.1 202 Accepted
Location: https://api.mythic-beasts.com/beta/queue/vps/41
Content-Type: application/json

{"task":41}
  • Poll the URL provided in the Location header.
$ curl -D- -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/queue/vps/41
HTTP/1.1 200 OK
Content-Type: application/json

{"identifier":"c10524vtjv","status":"Waiting for DNS and DHCP updates (118 seconds remaining)"}
  • Poll again (after a minute or so):
$ curl -D- -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/queue/vps/41
HTTP/1.1 200 OK
Content-Type: application/json

{"identifier":"c10524vtjv","status":"OS installation 45% complete"}
  • Poll again (after a few more minutes):
$ curl -D- -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/queue/vps/41
HTTP/1.1 303 See other
Location: https://api.mythic-beasts.com/beta/vps/servers/c10524vtjv
Content-Type: application/json

{"identifier":"c10524vtjv"}
  • Get server details from the indicated URL and extract the identifier:
$ curl -s -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/vps/servers/c10524vtjv | jq
{
  "boot_device": "hd",
  "vnc": {
    "ipv6": "2a00:1098:3d::1",
    "display": 148,
    "port": 6048,
    "ipv4": "46.235.224.37",
    "mode": "disabled",
    "password": "aiRu4Ahj"
  },
  "ipv4": [],
  "net_device": "virtio",
  "specs": {
    "cores": 1,
    "disk_size": 5120,
    "ram": 1024,
    "disk_type": "ssd"
  },
  "cpu_mode": "performance",
  "ipv6": [
    "2a00:1098:3d::4:1"
  ],
  "zone": {
    "name": "Cambridge, UK",
    "code": "cam"
  },
  "iso_image": "automated-install-config",
  "disk_bus": "virtio",
  "product": "VPSX4",
  "name": null,
  "identifier": "c10524vtjv",
  "host_server": "vdstesthost",
  "status": "running",
  "price": 5.63,
  "admin_console": {
    "hostname": "admin.c10524vtjv.vs.mythic-beasts.com",
    "username": "c10524vtjv"
  },
  "ssh_proxy": {
    "hostname": "admin.c10524vtjv.vs.mythic-beasts.com",
    "port": 10048
  },
  "macs": [
    "52:54:00:3d:0d:81"
  ]
}
$ SERVER=$(curl -s -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/vps/servers/c10524vtjv | jq -r .identifier)
$ echo $SERVER
c10524vtjv
  • This server is IPv6-only (we did not request an IPv4 address), so if you have an IPv6 connection, you can login now:
$ ssh root@$SERVER.vs.mythic-beasts.com
  • Otherwise, you can grab the SSH proxy port number from the server details response above:
$ PORT=$(curl -s -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/vps/servers/c10524vtjv | jq -r .ssh_proxy.port)
$ echo $PORT
10048
  • And use that to login:
$ ssh -p $PORT root@admin.$SERVER.vs.mythic-beasts.com
The authenticity of host '[admin.c10524vtjv.vs.mythic-beasts.com]:10048 ([46.235.224.37]:10048)' can't be established.
ECDSA key fingerprint is SHA256:UmD8UxNB5iA6EbrutR2WA5Rs5x0dEoU8yBZdnShpTgE.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[admin.c10524vtjv.vs.mythic-beasts.com]:10048,[46.235.224.37]:10048' (ECDSA) to the list of known hosts.
Linux c10524vtjv.vs.mythic-beasts.com 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@c10524vtjv:~# 
  • Once you are done with the server, you can cancel it:
$ curl -D- -X DELETE -H "Authorization: Bearer $TOKEN" https://api.mythic-beasts.com/beta/vps/servers/c10524vtjv
HTTP/1.1 200 OK
Content-Type: application/json

{"message":"Service unprovisioned"}

For more information, please see the full API docs.