Teepod

Trusted Execution Environment (TEE) workload deployment and management

List Teepods

get

List teepods - shows all enabled ones for users, all for admins

Authorizations
Query parameters
enabledany ofOptional
booleanOptional
or
nullOptional
Responses
200
Successful Response
application/json
get
GET /api/v1/teepods HTTP/1.1
Host: 
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
[
  {
    "id": 1,
    "name": "text",
    "endpoint": "text",
    "kms_url": "text",
    "kms_version": "text",
    "kms_ca_cert": {
      "subject": {
        "common_name": "text",
        "organization": "text",
        "country": "text",
        "state": "text",
        "locality": "text"
      },
      "issuer": {
        "common_name": "text",
        "organization": "text",
        "country": "text"
      },
      "serial_number": "text",
      "not_before": "2025-07-04T04:41:34.966Z",
      "not_after": "2025-07-04T04:41:34.966Z",
      "version": "text",
      "fingerprint": "text",
      "signature_algorithm": "text",
      "sans": [
        "text"
      ],
      "is_ca": false,
      "position_in_chain": 1,
      "quote": "text"
    },
    "tproxy_url": "text",
    "tproxy_version": "text",
    "tproxy_base_domain": "text",
    "tproxy_port": 1,
    "tproxy_tappd_port": 1,
    "teepod_version": "text",
    "max_cvm_number": 1,
    "max_allocable_vcpu": 1,
    "max_allocable_memory_in_mb": 1,
    "max_disk_size_in_gb": 1,
    "status": "online",
    "enabled": true,
    "last_ping_at": "2025-07-04T04:41:34.966Z",
    "created_at": "2025-07-04T04:41:34.966Z",
    "region_identifier": "text"
  }
]

Create Teepod From Endpoint

post
Authorizations
Body
namestringRequired
endpointstringRequired
region_identifierany ofOptional
stringOptional
or
nullOptional
kms_endpointany ofOptional
stringOptional
or
nullOptional
tproxy_endpointany ofOptional
stringOptional
or
nullOptional
tproxy_base_domainany ofOptional
stringOptional
or
nullOptional
tproxy_portany ofOptional
integerOptional
or
nullOptional
tproxy_tappd_portany ofOptional
integerOptional
or
nullOptional
Responses
200
Successful Response
application/json
post
POST /api/v1/teepods HTTP/1.1
Host: 
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 173

{
  "name": "text",
  "endpoint": "text",
  "region_identifier": "text",
  "kms_endpoint": "text",
  "tproxy_endpoint": "text",
  "tproxy_base_domain": "text",
  "tproxy_port": 1,
  "tproxy_tappd_port": 1
}
{
  "id": 1,
  "name": "text",
  "endpoint": "text",
  "kms_url": "text",
  "kms_version": "text",
  "kms_ca_cert": {
    "subject": {
      "common_name": "text",
      "organization": "text",
      "country": "text",
      "state": "text",
      "locality": "text"
    },
    "issuer": {
      "common_name": "text",
      "organization": "text",
      "country": "text"
    },
    "serial_number": "text",
    "not_before": "2025-07-04T04:41:34.966Z",
    "not_after": "2025-07-04T04:41:34.966Z",
    "version": "text",
    "fingerprint": "text",
    "signature_algorithm": "text",
    "sans": [
      "text"
    ],
    "is_ca": false,
    "position_in_chain": 1,
    "quote": "text"
  },
  "tproxy_url": "text",
  "tproxy_version": "text",
  "tproxy_base_domain": "text",
  "tproxy_port": 1,
  "tproxy_tappd_port": 1,
  "teepod_version": "text",
  "max_cvm_number": 1,
  "max_allocable_vcpu": 1,
  "max_allocable_memory_in_mb": 1,
  "max_disk_size_in_gb": 1,
  "status": "online",
  "enabled": true,
  "last_ping_at": "2025-07-04T04:41:34.966Z",
  "created_at": "2025-07-04T04:41:34.966Z",
  "region_identifier": "text"
}

Handle Teepod Preflight Check

post
Authorizations
Query parameters
endpointstringRequired

Teepod Endpoint

Responses
200
Successful Response
application/json
Responseany
post
POST /api/v1/teepods/preflight?endpoint=text HTTP/1.1
Host: 
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*

No content

Handle Get Available Teepods

get

Get a list of available Teepods with their capacity information.

This endpoint returns Teepods that are available for use, taking into account:

  • User's credit balance (returns empty list if balance is 0)

  • User's role (admin sees all Teepods, regular users only see listed ones)

  • Teepod availability status

Returns: TierCapacity: A list of available Teepods with their capacity details

Authorizations
Responses
200
Successful Response
application/json
get
GET /api/v1/teepods/available HTTP/1.1
Host: 
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
200

Successful Response

{
  "tier": "FREE",
  "capacity": {
    "max_instances": 1,
    "max_vcpu": 1,
    "max_memory": 1,
    "max_disk": 1
  },
  "nodes": [
    {
      "teepod_id": 1,
      "name": "text",
      "listed": true,
      "resource_score": 1,
      "remaining_vcpu": 1,
      "remaining_memory": 1,
      "remaining_cvm_slots": 1,
      "images": [
        {
          "name": "text",
          "is_dev": true,
          "version": [],
          "os_image_hash": "text"
        }
      ],
      "dedicated_for_team_id": 1,
      "support_onchain_kms": false,
      "fmspc": "text",
      "device_id": "text",
      "region_identifier": "text"
    }
  ],
  "kms_list": [
    {
      "id": "usr_K8fJ3pQm",
      "url": "text",
      "version": "text",
      "chain_id": 1,
      "kms_contract_address": "text",
      "gateway_app_id": "text"
    }
  ]
}

Get Teepod

get

Get a specific teepod (admin only)

Authorizations
Path parameters
teepod_idintegerRequired
Responses
200
Successful Response
application/json
get
GET /api/v1/teepods/{teepod_id} HTTP/1.1
Host: 
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
{
  "id": 1,
  "name": "text",
  "endpoint": "text",
  "kms_url": "text",
  "kms_version": "text",
  "kms_ca_cert": {
    "subject": {
      "common_name": "text",
      "organization": "text",
      "country": "text",
      "state": "text",
      "locality": "text"
    },
    "issuer": {
      "common_name": "text",
      "organization": "text",
      "country": "text"
    },
    "serial_number": "text",
    "not_before": "2025-07-04T04:41:34.966Z",
    "not_after": "2025-07-04T04:41:34.966Z",
    "version": "text",
    "fingerprint": "text",
    "signature_algorithm": "text",
    "sans": [
      "text"
    ],
    "is_ca": false,
    "position_in_chain": 1,
    "quote": "text"
  },
  "tproxy_url": "text",
  "tproxy_version": "text",
  "tproxy_base_domain": "text",
  "tproxy_port": 1,
  "tproxy_tappd_port": 1,
  "teepod_version": "text",
  "max_cvm_number": 1,
  "max_allocable_vcpu": 1,
  "max_allocable_memory_in_mb": 1,
  "max_disk_size_in_gb": 1,
  "status": "online",
  "enabled": true,
  "last_ping_at": "2025-07-04T04:41:34.966Z",
  "created_at": "2025-07-04T04:41:34.966Z",
  "region_identifier": "text"
}

Update Teepod

put

Update a teepod (admin only)

Authorizations
Path parameters
teepod_idintegerRequired
Body
nameany ofOptional
stringOptional
or
nullOptional
enabledany ofOptional
booleanOptional
or
nullOptional
Responses
200
Successful Response
application/json
put
PUT /api/v1/teepods/{teepod_id} HTTP/1.1
Host: 
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 30

{
  "name": "text",
  "enabled": true
}
{
  "id": 1,
  "name": "text",
  "endpoint": "text",
  "kms_url": "text",
  "kms_version": "text",
  "kms_ca_cert": {
    "subject": {
      "common_name": "text",
      "organization": "text",
      "country": "text",
      "state": "text",
      "locality": "text"
    },
    "issuer": {
      "common_name": "text",
      "organization": "text",
      "country": "text"
    },
    "serial_number": "text",
    "not_before": "2025-07-04T04:41:34.966Z",
    "not_after": "2025-07-04T04:41:34.966Z",
    "version": "text",
    "fingerprint": "text",
    "signature_algorithm": "text",
    "sans": [
      "text"
    ],
    "is_ca": false,
    "position_in_chain": 1,
    "quote": "text"
  },
  "tproxy_url": "text",
  "tproxy_version": "text",
  "tproxy_base_domain": "text",
  "tproxy_port": 1,
  "tproxy_tappd_port": 1,
  "teepod_version": "text",
  "max_cvm_number": 1,
  "max_allocable_vcpu": 1,
  "max_allocable_memory_in_mb": 1,
  "max_disk_size_in_gb": 1,
  "status": "online",
  "enabled": true,
  "last_ping_at": "2025-07-04T04:41:34.966Z",
  "created_at": "2025-07-04T04:41:34.966Z",
  "region_identifier": "text"
}

List Teepod Available Image

get
Path parameters
teepod_idintegerRequired
Responses
200
Successful Response
application/json
Responseany
get
GET /api/v1/teepods/{teepod_id}/images HTTP/1.1
Host: 
Accept: */*

No content

Handle List Hosted Cvms

get

Get CVM list from Teepod. This API will retrieve all hosted CVMs from Teepod, not just managed CVMs by this Teehouse instance. It useful for integration with existing DStack deployment.

Authorizations
Path parameters
teepod_idintegerRequired
Responses
200
Successful Response
application/json
get
GET /api/v1/teepods/{teepod_id}/cvms HTTP/1.1
Host: 
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
[
  {
    "hosted": {
      "id": "text",
      "name": "text",
      "status": "text",
      "uptime": "text",
      "app_url": "text",
      "app_id": "text",
      "instance_id": "text",
      "configuration": {
        "name": "text",
        "image": "text",
        "compose_file": {
          "allowed_envs": [
            "text"
          ],
          "bash_script": "text",
          "docker_compose_file": "text",
          "kms_enabled": true,
          "local_key_provider_enabled": false,
          "manifest_version": 2,
          "name": "text",
          "no_instance_id": false,
          "pre_launch_script": "text",
          "public_logs": true,
          "public_sysinfo": true,
          "runner": "docker-compose",
          "gateway_enabled": true,
          "features": [
            "text"
          ],
          "salt": "text",
          "tproxy_enabled": true
        },
        "vcpu": 1,
        "memory": 1,
        "disk_size": 1,
        "ports": [
          {
            "protocol": "text",
            "host_port": 1,
            "vm_port": 1,
            "host_address": "text"
          }
        ],
        "encrypted_env": "text",
        "app_id": "text",
        "user_config": "text",
        "hugepages": false,
        "pin_numa": false,
        "gpus": [
          {
            "product_id": "text",
            "slot": "text"
          }
        ],
        "kms_urls": [
          "text"
        ],
        "gateway_urls": [
          "text"
        ]
      },
      "exited_at": "text",
      "boot_progress": "text",
      "boot_error": "text",
      "shutdown_progress": "text",
      "image_version": "text"
    },
    "name": "text",
    "managed_user": {
      "id": 1,
      "username": "text"
    },
    "node": {
      "id": 1,
      "name": "text",
      "region_identifier": "text"
    },
    "listed": false,
    "status": "text",
    "in_progress": false,
    "dapp_dashboard_url": "text",
    "syslog_endpoint": "text",
    "allow_upgrade": false,
    "project_id": "usr_K8fJ3pQm",
    "project_type": "text",
    "billing_period": "text",
    "kms_info": {
      "id": "usr_K8fJ3pQm",
      "url": "text",
      "version": "text",
      "chain_id": 1,
      "kms_contract_address": "text",
      "gateway_app_id": "text"
    },
    "contract_address": "text",
    "deployer_address": "text",
    "vcpu": 1,
    "memory": 1,
    "disk_size": 1
  }
]

Handle Bind Cvm

post

Check target CVM in database or not, create if not exists, then mark it as listed.

Authorizations
Path parameters
teepod_idintegerRequired
app_idstringRequired
Responses
200
Successful Response
application/json
Responseany
post
POST /api/v1/teepods/{teepod_id}/cvms/{app_id}/list HTTP/1.1
Host: 
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*

No content

Was this helpful?