LaserData Cloud
API Reference

Organization

Manage tenants, workspace policy, divisions, and environments

API Variables
ld-api-key
{tenant_id}

Set variables to auto-fill all examples and run requests in-browser.

The resource hierarchy is Tenant, Division, Environment, and Deployment. These endpoints manage the first three levels through 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": "admin@acme.com",
  "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,
  "has_custom_email_domain": true
}

features reports plan limits and capabilities. deployment_tiers reports allowed tiers and deployment counts. starter_available reports whether another Free deployment can be created. has_payment_method is true for a valid card or invoice agreement.

has_custom_email_domain is true for tenants that claimed a corporate domain during sign-up. It is false for public email providers such as Gmail and Outlook. This field controls access to domain-based join policy and invitation restrictions in Tenant Config.

This request requires 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": "admin@acme.com",
  "protected": true
}'

Include only fields that you want to change. protected: true enables protection, which requires a one-time code for deletion. A successful request 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.

This request requires 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
}'

A successful request returns 204 No Content. Repeating unchanged configuration publishes no event. A lock flag set to true without email_domain returns 400 tenant_has_no_email_domain.

Join policies
invite_onlyopenrequest_to_join
  • open joins matching-domain users with the system viewer role and notifies the owner.
  • request_to_join creates a pending request and notifies the owner, who must approve it.
  • invite_only, the default, leaves matching-domain users waiting for an invitation without notifying the owner.

A change publishes the tenant_config_updated audit event.

This request requires 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
    }
  }
}'

In action, action_type selects the operation and payload supplies its resource IDs:

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

The endpoint returns 204 No Content and emails the code. Supply it as code on the matching delete request. Requests are 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"

Only the tenant owner can delete it. Deletion 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": "platform@acme.com"
}'
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 summarize runtime data within one 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