Skip to main content

tool using Clouding.io API

This is an unofficial CLI that interacts with Clouding.io's REST API. Its main purpose is to provide a simple interface to create and destroy servers from snapshots/images. It is not an all-encompassing tool as it neither provides access to all API endpoints nor all actions.

Installation

tuca is on PyPi, use the package manager of your choice to set yourself up. Here is an example using uv:

uv tool install tuca

Usage

The basics

The CLI interface follows this pattern:

tuca <endpoint> <action> [options]
  • endpoint is the same as in the API documentation
    💁 Not all endpoints are supported!
  • action is one of create, list and delete
    💁 Supported actions depend on endpoint!
  • options depend on endpoint and action
    💁 Consult --help for details!

tuca writes pretty-printed JSON (no colors) to stdout. It's human-readable and can be piped into jq for non-interactive usage. The following example shows the output from listing the keypairs endpoint (values redacted):

{
    "keypairs": [
        {
            "fingerprint": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
            "id": "xxxxxxxxxxxxxxxx",
            "name": "default"
        }
    ]
}

The output is

  • always presented as list, even if the result count is 1 or 0
  • usually named after the endpoint
  • contains an opionated subset of the available attributes, but always id and name where applicable (use -v to show everything)
  • limited to a maximum of 100 entries

Setup authentication

First order of business is setting up an API token. You can do that via environment variable:

export CLOUDINGIO_API_TOKEN=my_secret_token

Or, more securely, have tuca write it into your system's keyring. Keyring support is optional, install tuca with the keyring extra to enable it:

uv tool install 'tuca[keyring]'

The following command will give you an interactive prompt to store the token:

tuca auth create

If credentials are present in both keyring and environment, the environment variable takes precedence.

Create a server

Pick one of the available Windows images.

tuca images list --filter windows
Output
{
    "images": [
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "Lka79zd4JDnxyr85",
            "minimumSizeGb": 25,
            "name": "Windows Server 2022 Datacenter (English 64Bit)"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "jG4bZNnEQznYx7LP",
            "minimumSizeGb": 25,
            "name": "Windows Server 2016 Datacenter (English 64Bit) EOL"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "WwQ6kDdVqb2Jeaml",
            "minimumSizeGb": 25,
            "name": "Windows Server 2019 Datacenter (English 64Bit) EOL"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "kbxmpG2bXvKwlaDg",
            "minimumSizeGb": 25,
            "name": "Windows Server 2025 Datacenter (English 64Bit)"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "jXEm7yK3MJ2VYkQ9",
            "minimumSizeGb": 25,
            "name": "Windows 11 (English 64Bit | Based on Windows Server 2025)"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "q58XEgdA0P26mA0j",
            "minimumSizeGb": 25,
            "name": "Windows 11 (Espa\u00f1ol 64Bit | Basado en Windows Server 2025)"
        }
    ]
}

Now pick one of the available flavors (server sizes).

tuca flavors list
Output

(output shortened)

{
    "sizes/flavors": [
        ...
        {
            "id": "8x16",
            "pricePerHour": 0.05472,
            "ramGb": 16,
            "vCores": 8.0
        },
        ...
    ]
}

That's sufficient to create a server with minimal configuration.

# Windows 11 compatible image
# 8 cores, 16 GB RAM
# default firewall
# default image size
tuca servers create --image jXEm7yK3MJ2VYkQ9 --name MyWinServer --flavorid 8x16 --password start123
Output
{
    "servers": [
        {
            "action": {
                "completedAt": null,
                "id": "aaaaaaaaaaaaaaaa",
                "resourceId": "rrrrrrrrrrrrrrrr",
                "resourceType": "server",
                "startedAt": "2026-02-28T14:38:52.312803Z",
                "status": "inProgress",
                "type": "create"
            },
            "createdAt": "",
            "id": "rrrrrrrrrrrrrrrr",
            "name": "MyWinServer",
            "publicPorts": [],
            "status": "Pending"
        }
    ]
}

Creating the server can take some time and you can check how it's doing.

tuca servers list --name MyWinServer
Output
{
    "servers": [
        {
            "createdAt": "2026-02-28T14:38:52",
            "id": "rrrrrrrrrrrrrrrr",
            "name": "MyWinServer",
            "publicPorts": [
                {
                    "id": "pppppppppppppppp",
                    "ipAddress": "000.000.000.000",
                    "macAddress": "00:00:00:00:00:00"
                }
            ],
            "status": "Creating"
        }
    ]
}

The server will be ready eventually.

Output
{
    "servers": [
        {
            "createdAt": "2026-02-04T23:42:16",
            "id": "rrrrrrrrrrrrrrrr",
            "name": "MyWinServer",
            "publicPorts": [
                {
                    "id": "pppppppppppppppp",
                    "ipAddress": "000.000.000.000",
                    "macAddress": "00:00:00:00:00:00"
                }
            ],
            "status": "Active"
        }
    ]
}

License

GPL-2.0-or-later

Metadata

Release files for tuca 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tuca 0.10.0
File Size Uploaded Provenance Actions
tuca-0.10.0.tar.gz 47.3 kB With provenance Details for tuca-0.10.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for tuca 0.10.0
File Interpreter ABI Platform Actions
tuca-0.10.0-py3-none-any.whl Python 3 none any Details for tuca-0.10.0-py3-none-any.whl

Total release size: 92.7 kB

Release files / tuca-0.10.0.tar.gz

Download URL tuca-0.10.0.tar.gz
Size 47.3 kB
Tags Source
SHA-256 checksum
How to use checksums
6d28422c94658b117aed4ee5e0ae60869e9585fe77a3bd9ecd9ea3ceb5082a4e
BLAKE2b-256 checksum
How to use checksums
8d86fe7e19512619965d57447961217daf88e9ae172d8187190e4433113a4c85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / tuca-0.10.0-py3-none-any.whl

Download URL tuca-0.10.0-py3-none-any.whl
Size 45.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
942dcea69f3850a6776f7314e942750920f55c20ba8b279eb80f32fa85963f46
BLAKE2b-256 checksum
How to use checksums
b33de0935e4cfe5347de0f2ff27faa756c17bc337028f40c67d102dcda9d4a64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Security for tuca 0.10.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for tuca-0.10.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page