Teepod
Trusted Execution Environment (TEE) workload deployment and management
List teepods - shows all enabled ones for users, all for admins
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"
}
]
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"
}
Teepod Endpoint
POST /api/v1/teepods/preflight?endpoint=text HTTP/1.1
Host:
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
No content
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
GET /api/v1/teepods/available HTTP/1.1
Host:
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
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 a specific teepod (admin only)
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 a teepod (admin only)
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"
}
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.
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
}
]
Check target CVM in database or not, create if not exists, then mark it as listed.
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?