On-demand sandboxes
A sandbox is a fully isolated Tango Vision tenant: its own PostgreSQL database, a seeded building graph, and a dedicated tv-api stack — at its own subdomain. You develop against it instead of production.
Why
- Isolation. Your sandbox's data is physically separate from every other tenant.
- Realism. It's seeded with a parameterized building (mall or office) with spaces, elements, and telemetry — so your module renders against real-shaped data.
- Disposability. Reset it when you've made a mess; it expires automatically.
Create one — from the dashboard
The platform console has a Sandboxes page (under the admin nav). Paste your API key, then New sandbox:
| Field | Meaning |
|---|---|
| Name | Display name; the subdomain is derived from it |
| Building type | mall or office |
| Storeys | 1–50 |
| Area (m²) | Total gross area |
| TTL (days) | 1–30; auto-cleanup after |
Within ~30 seconds the row flips to ready with a URL like:
https://acme-cafm-dev-x7k2.sandbox.k8s.tangovision.devCreate one — from the API
bash
curl -X POST https://sandbox-api.k8s.tangovision.dev/api/v1/sandboxes \
-H "Authorization: Bearer $SANDBOX_API_KEY" \
-H "content-type: application/json" \
-d '{
"name": "acme-cafm-dev",
"buildingType": "mall",
"storeys": 3,
"areaSqm": 20000,
"ttlDays": 14
}'Response:
json
{
"sandboxId": "sbx_...",
"name": "acme-cafm-dev",
"slug": "acme-cafm-dev-x7k2",
"status": "ready",
"apiUrl": "https://acme-cafm-dev-x7k2.sandbox.k8s.tangovision.dev",
"expiresAt": "2026-06-13T...",
"extensionsRemaining": 2
}Lifecycle
| Action | Endpoint |
|---|---|
| List | GET /api/v1/sandboxes |
| Create | POST /api/v1/sandboxes |
| Extend TTL | POST /api/v1/sandboxes/:id/extend (body { "days": 7 }) |
| Reset (wipe + re-seed) | POST /api/v1/sandboxes/:id/reset |
| Delete | DELETE /api/v1/sandboxes/:id |
Quotas
To keep the shared cluster healthy:
- 3 concurrently-active sandboxes per external developer
- 2 TTL extensions per sandbox
- 30 day maximum TTL
These are enforced by the provisioner; you'll get a clear 429/400 when you hit them.
What's inside a fresh sandbox
- An organization + site + building seeded by
@tv/sandbox-seed - Storeys, spaces, elements, and points sized by your parameters
- Up to 30 days of backfilled telemetry (configurable via
seedTelemetryDays) - The standard tv-api schema, so every platform endpoint works
Point your module's PlatformContext at the sandbox's apiUrl and develop as if it were production — because, structurally, it is.