VxCloud
SDKs & Libraries

SDKs

Five first-class SDKs (Python, TypeScript, Go, C++, Java) plus the Terraform provider — all share one wire contract, one auth model (X-API-Key + Bearer JWT), and one error taxonomy. Pick a language and ship.

This page is the index. Each SDK has a dedicated reference at /docs/sdks/<sdk> with examples for every module — auth, sessions, deploy, install, services, cicd, marketplace, cloud, salesshift, networks, agents, chat, observability, billing, workspace setup, and errors.

The salesshift module is narrower than the rest: in Python, TypeScript and Go it covers tracked email plus the leads pool and nothing else. See SalesShift for exactly what each language reaches, and what it does not.

1import vxsdk
2# Also published as a brand-alias package: `pip install vxcloud` then
3# `import vxcloud` — same code, lets your team pick the import name.
4
5c = vxsdk.Client.load_from_vxcli()
6# Equivalent: vxsdk.VxCloud.load_from_vxcli() · vxsdk.vxcloud.load_from_vxcli()
7
8# Symmetric VM API across all SDKs — `c.cloud.create_vm(...)` also works.
9vm = c.cloud.vm.provision(
10 name="api-vm", cloud="aws",
11 region="us-east-1", instance_type="t3.small",
12 key_pair_name="AWSPRODKEY2",
13)
14
15ssh = dict(host=vm["public_ip"], ssh_user="ubuntu",
16 key_pair_name="AWSPRODKEY1.PEM")
17
18sess = c.deploy.fastapi(
19 path="./", entry="app.app:app",
20 requirements="requirements.txt",
21 app_port=8000, http_port=80,
22 app_name="studio-backend", **ssh,
23)
24print(sess["session_id"])

One shape, four languages — pick your import name

Method names, argument names, and the returned session_id are identical regardless of language. Python: import vxsdk or import vxcloud — both work. TypeScript: import { VxCloud | vxcloud | Vxsdk | Client } from @vxcloud/sdk. Same class behind every name.

one wire contract · 4 languages
Python 3.9+ · Node 18+ · Go 1.22 · Terraform 1.5

Available SDKs

Python SDK

Python 3.9+2026.8.17 · 19 modules

Single-file SDK ships in two flavors: vxsdk (sync, stdlib only) and vxsdk_async (httpx). Available as `import vxsdk` or as the brand-alias `import vxcloud` — both resolve to the same Client class. Same wire contract, same auth model, same error taxonomy as vxsdk-go and @vxcloud/sdk.

Install

install · pythonbash
pip install vxsdk # canonical name
pip install vxsdk[async] # adds httpx for the async flavor
# Brand-alias package — same code, just `import vxcloud`:
pip install vxcloud
pip install vxcloud[async]

Quickstart

quickstart.pypython
import vxsdk
# Or equivalently: `import vxcloud` (alias package — same code).
# Auth: load credentials written by `vxcli auth login`
c = vxsdk.Client.load_from_vxcli()
# Equivalent aliases — all resolve to the same Client class:
# c = vxsdk.VxCloud.load_from_vxcli()
# c = vxsdk.vxcloud.load_from_vxcli()
# Or explicit:
# c = vxsdk.Client(api_key="xc_live_…", username="alice")
# Provision a VM — `c.cloud.vm.provision(...)` mirrors the TypeScript SDK.
# The legacy flat `c.cloud.create_vm(...)` also still works.
vm = c.cloud.vm.provision(name="api-vm", cloud="aws", region="us-east-1",
instance_type="t3.small", key_pair_name="AWSPRODKEY2")
# Deploy a Docker container WITH HTTPS — single call.
# Installs host nginx + Let's Encrypt cert in front of the first port (3000).
# Requires grafana.example.com A record -> vm["public_ip"] already set.
ssh = dict(host=vm["public_ip"], ssh_user="ubuntu",
key_pair_name="AWSPRODKEY1") # keypair must be in Vault
sess = c.deploy.container(
image="grafana/grafana:latest",
name="grafana",
ports=["3000:3000"],
enable_ssl=True,
domain="grafana.example.com",
ssl_email="[email protected]",
**ssh,
)
print(sess["session_id"], sess.get("ssl_certificate_status"))
# Manage it
print(c.services.list(**ssh))
print(c.services.status("grafana", **ssh))
c.services.restart("grafana", **ssh)

TypeScript SDK

Node.js 18+2026.8.17 · 19 modules

Hand-written TypeScript client for Node.js 18+. Full type definitions, ESM + CJS dual output, async-only API, single-flight 401 refresh. Entry class is exported under four interchangeable names (VxCloud / vxcloud / Vxsdk / Client) so it reads naturally from any of the platform's other-language SDKs.

Install

install · typescriptbash
npm install @vxcloud/sdk
# or: pnpm add @vxcloud/sdk
# or: yarn add @vxcloud/sdk
# All four named exports below alias the SAME class — pick whichever
# import name your team prefers:
# import { VxCloud } from '@vxcloud/sdk'; // canonical (PascalCase)
# import { vxcloud } from '@vxcloud/sdk'; // lowercase brand
# import { Vxsdk } from '@vxcloud/sdk'; // mirrors Python `vxsdk`
# import { Client } from '@vxcloud/sdk'; // mirrors `vxsdk.Client`

Quickstart

quickstart.tstypescript
import { VxCloud } from '@vxcloud/sdk';
// Equivalent imports (all alias the same class):
// import { vxcloud, Vxsdk, Client } from '@vxcloud/sdk';
// Auth: load credentials written by `vxcli auth login`
const c = await VxCloud.loadFromVxcli();
// or: new VxCloud({ apiKey: 'xc_live_…', username: 'alice' });
// Provision a VM
const vm = await c.cloud.vm.provision({
cloud: 'aws', instanceType: 't3.small', region: 'us-east-1',
keyPairName: 'AWSPRODKEY2',
});
// Deploy a Docker container WITH HTTPS — single call.
// Installs host nginx + Let's Encrypt cert in front of the first port (3000).
// Requires grafana.example.com A record -> vm.public_ip already set.
const ssh = {
host: vm.public_ip as string,
sshUser: 'ubuntu',
keyPairName: 'AWSPRODKEY1', // must be in Vault
};
const sess = await c.deploy.container({
image: 'grafana/grafana:latest', name: 'grafana',
ports: ['3000:3000'],
enableSsl: true,
domain: 'grafana.example.com',
sslEmail: '[email protected]',
...ssh,
});
console.log(sess.sessionId, sess.sslCertificateStatus);
// Manage it
console.log(await c.services.list(ssh));
await c.services.restart('grafana', ssh);

Go SDK

Go 1.22+v0.20260817.0 · 19 modules

Idiomatic Go client. One *http.Client per Client, retry/backoff, single-flight refresh on 401, full interface coverage for all platform endpoints.

Install

install · gobash
go get github.com/prodxcloud/vxcloud@latest

Quickstart

main.gogo
package main
import (
"context"
"fmt"
vxsdk "github.com/prodxcloud/vxcloud"
)
import (
"github.com/prodxcloud/vxcloud/deploy"
"github.com/prodxcloud/vxcloud/install"
)
func main() {
ctx := context.Background()
c, err := vxsdk.LoadFromVxcli(ctx) // or vxsdk.New(ctx, vxsdk.WithAPIKey(...))
if err != nil { panic(err) }
pipelines, _ := c.CICD().Pipelines().List(ctx)
for _, p := range pipelines {
fmt.Println(p.ID, p.Name)
}
// Single-call HTTPS deploy: container + nginx + Let's Encrypt cert.
// Requires grafana.example.com A record -> 13.216.243.13 already set.
sess, _ := c.Deploy().Container(ctx, deploy.ContainerOpts{
SSH: install.SSH{
Host: "13.216.243.13", User: "ubuntu",
KeyPairName: "AWSPRODKEY1", // must be in Vault
},
Name: "grafana",
Image: "grafana/grafana:latest",
Ports: []string{"3000:3000"},
EnableSSL: true,
Domain: "grafana.example.com",
SSLEmail: "[email protected]",
})
fmt.Println(sess.SessionID, sess.AccessURL)
}

Terraform Provider

Terraform 1.3+v1.0.0-beta3 · 7 modules

Manage VxCloud workspaces, credentials, VMs, databases, deploys, and Kubernetes clusters as Terraform-native resources. Full import support; state diffs against the live platform.

Install

install · terraformbash
terraform {
required_providers {
VxCloud = {
source = "VxCloud/VxCloud"
version = "~> 1.0"
}
}
}

Quickstart

main.tfhcl
provider "VxCloud" {
api_key = var.VxCloud_api_key
workspace = var.workspace_id
}
resource "VxCloud_aws_credentials" "main" {
access_key_id = var.aws_access_key_id
secret_access_key = var.aws_secret_access_key
region = "us-east-1"
}
resource "VxCloud_vm" "api" {
provider = "aws"
instance_type = "t3.small"
region = "us-east-1"
key_pair_name = "AWSPRODKEY2"
tags = { app = "studio-backend" }
depends_on = [VxCloud_aws_credentials.main]
}
output "api_ip" { value = VxCloud_vm.api.public_ip }

Authentication: shared across all three SDKs

Every SDK supports the same auth flow:

  1. Construct the client with an API key (xc_dev_*, xc_test_*, or xc_live_*).
  2. The first protected call exchanges the key for a JWT against /api/v1/auth/developer/keys/login.
  3. On 401, a single-flight refresh re-exchanges and retries once.
  4. Or call .loadFromVxcli() to pick up credentials written by vxcli auth login.

For SSH-bound operations (deploy / install / services / networks), pass either keyPairName (Vault-managed) or keyPairLocation (local PEM, attached as a private_key_pem multipart part).