Organization
Manage tenants, divisions, and environments. The organizational hierarchy of LaserData Cloud.
Set variables to auto-fill all examples and run requests in-browser.
LaserData Cloud uses a four-level hierarchy: Tenant → Division → Environment → Deployment. The Organization API manages the top three levels. All endpoints use the main API at https://api.laserdata.cloud.
Tenant
Get Tenant
GET/tenants/{tenant_id}Retrieve tenant details including plan, features, and resource limits.
curl https://api.laserdata.cloud/tenants/{tenant_id} \
-H "ld-api-key: YOUR_API_KEY"{
"id": 1,
"name": "Acme Corp",
"description": "Main production tenant",
"email": "[email protected]",
"protected": false,
"created_at": "2025-01-10T08:00:00Z",
"updated_at": "2025-06-15T12:30:00Z",
"features": {
"invitations_limit": 100,
"members_limit": 100,
"roles_limit": 20,
"divisions_limit": 5,
"environments_limit": 20,
"deployment_tiers": [
{ "tier": "free", "limit": 1 },
{ "tier": "small", "limit": 3 },
{ "tier": "medium", "limit": 3 },
{ "tier": "large", "limit": 2 },
{ "tier": "xlarge", "limit": 1 },
{ "tier": "2xlarge", "limit": 1 }
],
"deployment_access_rules_limit": 10,
"deployment_configs_limit": 5,
"deployment_backups_limit": 3,
"deployment_snapshots_limit": 5,
"private_connections_limit": 3,
"private_endpoints_limit": 1,
"byoc_enabled": true,
"cluster_enabled": true,
"on_premise_enabled": false,
"private_networking_enabled": true,
"multi_az_enabled": true,
"dedicated_enabled": false,
"backup_enabled": true,
"cross_region_dr_enabled": false,
"audit_retention_days": 30,
"api_keys_limit": 10,
"cloud_accounts_limit": 5,
"notification_channels_limit": 5,
"notification_subscriptions_limit": 10,
"custom_domains_limit": 1,
"backup_regions_limit": 3,
"nodes_per_deployment_limit": 5,
"backup_retention_days": 30,
"snapshot_retention_days": 14,
"pending_invitations_limit": 100,
"api_key_allowed_ips_limit": 20,
"divisions_per_role_limit": 3,
"environments_per_division_limit": 3,
"concurrent_deployments_limit": 2,
"audit_export_enabled": true,
"advanced_connectors_enabled": true,
"customer_managed_keys_enabled": false,
"advanced_notification_channels_enabled": true
},
"subscription": {
"id": 1,
"plan": "pro",
"active": true,
"created_at": "2025-01-10T08:00:00Z",
"valid_from": "2025-01-10T08:00:00Z",
"valid_to": "2026-01-10T08:00:00Z"
},
"starter_available": true,
"has_payment_method": true
}The features object reflects your plan's limits and enabled capabilities. deployment_tiers lists each tier with the maximum deployment count. starter_available indicates whether you can create an additional Free tier deployment.
Required permission: info:read
Update Tenant
PUT/tenants/{tenant_id}Update the tenant display name.
curl -X PUT https://api.laserdata.cloud/tenants/{tenant_id} \
-H "ld-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corporation",
"description": "Updated description",
"email": "[email protected]",
"protected": true
}'All fields are optional. Setting protected: true enables resource protection: a one-time code is required to delete the tenant or its resources. Returns 204 No Content.
Get Organization Structure
GET/tenants/{tenant_id}/structureFull org tree: divisions, environments, and their deployment counts.
curl https://api.laserdata.cloud/tenants/{tenant_id}/structure \
-H "ld-api-key: YOUR_API_KEY"Get Tenant Summary
GET/tenants/{tenant_id}/summaryAggregated deployment stats across all divisions.
curl https://api.laserdata.cloud/tenants/{tenant_id}/summary \
-H "ld-api-key: YOUR_API_KEY"Get Tenant Config
GET/tenants/{tenant_id}/configRead the tenant workspace settings: join policy, invitation locks, and the claimed email domain.
curl https://api.laserdata.cloud/tenants/{tenant_id}/config \
-H "ld-api-key: YOUR_API_KEY"{
"join_policy": "invite_only",
"block_external_invitations": false,
"enforce_domain_only_invitations": false,
"email_domain": "acme.com",
"email_domain_verified_at": "2026-05-05T12:00:00Z"
}| Field | Description |
|---|---|
join_policy | What happens when a new user signs up with an email matching email_domain. One of invite_only (default), open, request_to_join. |
block_external_invitations | When true, other tenants cannot invite users on this domain. Requires email_domain to be set. Defaults to false. |
enforce_domain_only_invitations | When true, this tenant can only invite users whose email matches email_domain (or one of its claimed division subdomains). Requires email_domain to be set. Defaults to false. |
email_domain | The registrable domain the tenant claimed at signup. Omitted when the tenant was created with a public-email provider (Gmail, Outlook, etc.). Immutable. |
email_domain_verified_at | When the claim was verified. For now, set to the signup timestamp (OAuth proves ownership). Omitted when no claim exists. |
Required permission: settings:read.
Update Tenant Config
PUT/tenants/{tenant_id}/configUpdate the tenant workspace settings. All three TenantConfig fields are required.
curl -X PUT https://api.laserdata.cloud/tenants/{tenant_id}/config \
-H "ld-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"join_policy": "open",
"block_external_invitations": true,
"enforce_domain_only_invitations": true
}'Returns 204 No Content. Idempotent: replaying the same config does not publish an event. Sending either lock flag as true while the tenant has no email_domain returns 400 tenant_has_no_email_domain.
invite_onlyopenrequest_to_joinopen- matching-domain signups auto-join with the systemviewerrole; the tenant owner is notified.request_to_join- matching-domain signups create a pending request; the tenant owner is notified and must approve.invite_only(default) - matching-domain signups land in a stub state and must wait for an invite. No notification fires.
Side effects: publishes a tenant_config_updated audit event.
Required permission: settings:manage.
Request Resource Code
PUT/tenants/{tenant_id}/request_codeRequest a one-time protection code for deleting a protected resource. The code is sent to the organization email.
curl -X PUT https://api.laserdata.cloud/tenants/{tenant_id}/request_code \
-H "ld-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": {
"action_type": "delete_deployment",
"payload": {
"tenant_id": 615380456123456789,
"division_id": 615380456123456790,
"environment_id": 615380456123456791,
"deployment_id": 611298765432109056
}
}
}'The action envelope is a tagged enum: action_type selects the operation and payload carries the IDs needed to scope it. Action types and required payload fields:
| Action Type | Payload Fields |
|---|---|
delete_tenant | tenant_id |
delete_division | tenant_id, division_id |
delete_environment | tenant_id, division_id, environment_id |
delete_deployment | tenant_id, division_id, environment_id, deployment_id |
Returns 204 No Content. Use the emailed code as the code query parameter on the matching delete request. The endpoint is rate-limited per resource.
Delete Tenant
DELETE/tenants/{tenant_id}Permanently delete the tenant and all resources. Requires a protection code.
curl -X DELETE "https://api.laserdata.cloud/tenants/{tenant_id}?code={protection_code}" \
-H "ld-api-key: YOUR_API_KEY"Required permission: tenant owner only. This action is irreversible.
Divisions
Create Division
POST/tenants/{tenant_id}/divisionsCreate a new division within the tenant.
curl -X POST https://api.laserdata.cloud/tenants/{tenant_id}/divisions \
-H "ld-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "platform",
"description": "Core platform team",
"email": "[email protected]"
}'| Field | Required | Description |
|---|---|---|
name | Yes | Division name |
description | No | Optional description |
email | No | Optional contact email for this division |
List Divisions
GET/tenants/{tenant_id}/divisionsList all divisions in the tenant.
curl https://api.laserdata.cloud/tenants/{tenant_id}/divisions \
-H "ld-api-key: YOUR_API_KEY"Update Division
PUT/tenants/{tenant_id}/divisions/{division_id}Rename a division.
curl -X PUT https://api.laserdata.cloud/tenants/{tenant_id}/divisions/{division_id} \
-H "ld-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "platform-team"
}'Delete Division
DELETE/tenants/{tenant_id}/divisions/{division_id}Delete a division. All environments inside must be empty. Requires a protection code if the division is protected.
curl -X DELETE "https://api.laserdata.cloud/tenants/{tenant_id}/divisions/{division_id}?code={protection_code}" \
-H "ld-api-key: YOUR_API_KEY"Environments
Create Environment
POST/tenants/{tenant_id}/divisions/{division_id}/environmentsCreate a new environment inside a division.
curl -X POST https://api.laserdata.cloud/tenants/{tenant_id}/divisions/{division_id}/environments \
-H "ld-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "production"
}'List Environments
GET/tenants/{tenant_id}/divisions/{division_id}/environmentsList all environments in a division.
curl https://api.laserdata.cloud/tenants/{tenant_id}/divisions/{division_id}/environments \
-H "ld-api-key: YOUR_API_KEY"Update Environment
PUT/tenants/{tenant_id}/divisions/{division_id}/environments/{environment_id}Rename an environment.
curl -X PUT https://api.laserdata.cloud/tenants/{tenant_id}/divisions/{division_id}/environments/{environment_id} \
-H "ld-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "production-v2"
}'Delete Environment
DELETE/tenants/{tenant_id}/divisions/{division_id}/environments/{environment_id}Delete an environment. Must have no active deployments.
curl -X DELETE "https://api.laserdata.cloud/tenants/{tenant_id}/divisions/{division_id}/environments/{environment_id}?code={protection_code}" \
-H "ld-api-key: YOUR_API_KEY"Supervisor: Org Summaries
These supervisor endpoints return aggregated runtime data from a specific supervisor region.
Tenant Summary (Supervisor)
GET{supervisor_url}/tenants/{tenant_id}/summaryAggregated deployment health and resource stats from this supervisor region.
curl {supervisor_url}/tenants/{tenant_id}/summary \
-H "ld-api-key: YOUR_API_KEY"Division Summary (Supervisor)
GET{supervisor_url}/tenants/{tenant_id}/divisions/{division_id}/summaryPer-division deployment health summary from this supervisor region.
curl {supervisor_url}/tenants/{tenant_id}/divisions/{division_id}/summary \
-H "ld-api-key: YOUR_API_KEY"