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 vxsdk2# Also published as a brand-alias package: `pip install vxcloud` then3# `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.
Available SDKs
- Python SDK — 19 modules · 2026.8.17
- TypeScript SDK — 19 modules · 2026.8.17
- Go SDK — 19 modules · v0.20260817.0
- Terraform Provider — 7 modules · v1.0.0-beta3
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
pip install vxsdk # canonical namepip install vxsdk[async] # adds httpx for the async flavor# Brand-alias package — same code, just `import vxcloud`:pip install vxcloudpip install vxcloud[async]
Quickstart
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 Vaultsess = 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 itprint(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
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
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 VMconst 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',...ssh,});console.log(sess.sessionId, sess.sslCertificateStatus);// Manage itconsole.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
go get github.com/prodxcloud/vxcloud@latest
Quickstart
package mainimport ("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",})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
terraform {required_providers {VxCloud = {source = "VxCloud/VxCloud"version = "~> 1.0"}}}
Quickstart
provider "VxCloud" {api_key = var.VxCloud_api_keyworkspace = var.workspace_id}resource "VxCloud_aws_credentials" "main" {access_key_id = var.aws_access_key_idsecret_access_key = var.aws_secret_access_keyregion = "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:
- Construct the client with an API key (
xc_dev_*,xc_test_*, orxc_live_*). - The first protected call exchanges the key for a JWT against
/api/v1/auth/developer/keys/login. - On 401, a single-flight refresh re-exchanges and retries once.
- Or call
.loadFromVxcli()to pick up credentials written byvxcli 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).
Was this page helpful?