LaserData Cloud
API Reference

Organization

Manage tenants, divisions, and environments. The organizational hierarchy of LaserData Cloud.

API Variables
ld-api-key
{tenant_id}

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.

bash
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.

bash
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}/structure

Full org tree: divisions, environments, and their deployment counts.

bash
curl https://api.laserdata.cloud/tenants/{tenant_id}/structure \
-H "ld-api-key: YOUR_API_KEY"

Get Tenant Summary

GET
/tenants/{tenant_id}/summary

Aggregated deployment stats across all divisions.

bash
curl https://api.laserdata.cloud/tenants/{tenant_id}/summary \
-H "ld-api-key: YOUR_API_KEY"

Get Tenant Config

GET
/tenants/{tenant_id}/config

Read the tenant workspace settings: join policy, invitation locks, and the claimed email domain.

bash
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"
}
FieldDescription
join_policyWhat happens when a new user signs up with an email matching email_domain. One of invite_only (default), open, request_to_join.
block_external_invitationsWhen true, other tenants cannot invite users on this domain. Requires email_domain to be set. Defaults to false.
enforce_domain_only_invitationsWhen 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_domainThe 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_atWhen 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}/config

Update the tenant workspace settings. All three TenantConfig fields are required.

bash
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.

Join policies
invite_onlyopenrequest_to_join
  • open - matching-domain signups auto-join with the system viewer role; 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_code

Request a one-time protection code for deleting a protected resource. The code is sent to the organization email.

bash
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 TypePayload Fields
delete_tenanttenant_id
delete_divisiontenant_id, division_id
delete_environmenttenant_id, division_id, environment_id
delete_deploymenttenant_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.

bash
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}/divisions

Create a new division within the tenant.

bash
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]"
}'
FieldRequiredDescription
nameYesDivision name
descriptionNoOptional description
emailNoOptional contact email for this division

List Divisions

GET
/tenants/{tenant_id}/divisions

List all divisions in the tenant.

bash
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.

bash
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.

bash
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}/environments

Create a new environment inside a division.

bash
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}/environments

List all environments in a division.

bash
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.

bash
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.

bash
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}/summary

Aggregated deployment health and resource stats from this supervisor region.

bash
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}/summary

Per-division deployment health summary from this supervisor region.

bash
curl {supervisor_url}/tenants/{tenant_id}/divisions/{division_id}/summary \
-H "ld-api-key: YOUR_API_KEY"

On this page