Application endpoints - list, retrieve, create, deploy, rename, move, delete, and manage custom domains.
Applications
An application is one deployed project. Creating one also creates its production environment, so a single call gets you a live URL.
With an API key the organisation is inferred. Session tokens must add targetOrganisationId to every body.
List applications#
/api/applicationsApplications in the organisation, newest first, paginated.
- permission
- read:projects
Parameters
pagenumberdefault 1- 1-based page number
limitnumberdefault 10- Between 1 and 100
filterstringoptional- Free text, matched against the name
sortColumnstringdefault created_at- Field to order by
sortOrderstringdefault desc- asc or desc
targetOrganisationIdstringsession only- Required when using a session token
curl -X POST https://api.light-cloud.com/api/applications \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"limit": 100}'{
"items": [
{
"id": "app_4kQ2",
"name": "shop",
"slug": "shop",
"deployment_type": "container",
"framework": "nextjs",
"runtime": "nodejs",
"github_repo_url": "https://github.com/acme/shop",
"github_branch": "main",
"source_type": "github",
"status": "healthy",
"url": "https://main-shop-acme.light-cloud.io",
"created_at": "2026-08-01T09:14:00.000Z",
"updated_at": "2026-08-28T07:02:00.000Z"
}
],
"totalItems": 1,
"totalPages": 1,
"currentPage": 1
}Retrieve an application#
/api/applications/getOne application with its environments. status is one of pending, building, deploying, healthy, degraded, failed, deleting.
- permission
- read:projects
Parameters
applicationIdstringrequired- The application to read
targetOrganisationIdstringsession only- Required when using a session token
curl -X POST https://api.light-cloud.com/api/applications/get \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"applicationId": "app_4kQ2"}'{
"id": "app_4kQ2",
"name": "shop",
"status": "healthy",
"url": "https://main-shop-acme.light-cloud.io",
"environments": [
{ "id": "env_7Tz", "name": "production", "is_production": true }
]
}Retrieve status#
/api/applications/statusThe same shape as retrieve, cheaper. Use it when polling a deploy rather than re-reading the whole record.
- permission
- read:projects
Parameters
applicationIdstringrequired- The application to poll
targetOrganisationIdstringsession only- Required when using a session token
until [ "$(curl -sS -X POST https://api.light-cloud.com/api/applications/status \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"applicationId\":\"$APP_ID\"}" | jq -r .status)" = "healthy" ]; do
sleep 10
done{
"id": "app_4kQ2",
"status": "building",
"url": "https://main-shop-acme.light-cloud.io"
}Detect a framework#
/api/applications/detect-frameworkReads a repository the way the console's create page does and returns the settings it would fill in. Call this before create rather than guessing.
- permission
- read:projects
Parameters
ownerstringrequired- Repository owner
repostringrequired- Repository name
branchstringrequired- Branch to inspect
rootDirectorystringoptional- Subdirectory, for a monorepo
targetOrganisationIdstringsession only- Required when using a session token
curl -X POST https://api.light-cloud.com/api/applications/detect-framework \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"owner": "acme", "repo": "shop", "branch": "main"}'{
"framework": "nextjs",
"runtime": "nodejs",
"deploymentType": "container",
"buildCommand": "npm run build",
"outputDirectory": ".next"
}Create an application#
/api/applications/createCreates the application and its production environment, and starts the first build. Creates are not idempotent — if one times out, list before retrying.
- permission
- create:projects
Parameters
namestringrequired- Becomes part of the generated subdomain
githubRepoUrlstringrequired- Repository URL on GitHub, GitLab or Bitbucket - must be reachable
gitProviderstringdefault github- github, gitlab or bitbucket; a gitlab.com or bitbucket.org URL implies its provider
gitlabProjectIdnumberdefault resolved- GitLab only - the numeric project id; resolved from the URL when omitted
bitbucketRepoUuidstringdefault resolved- Bitbucket only - the repository uuid (braced); resolved from the URL when omitted
githubBranchstringdefault main- The production environment's branch
isPrivatebooleandefault false- Private repositories need an installation (GitHub) or a connected GitLab or Bitbucket user
projectIdstringoptional- Folder to file it under
deploymentTypestringdefault static- static or container
frameworkstringdefault react- See Frameworks
runtimestringoptional- Container only
buildCommandstringdefault detected- Command that produces the build
outputDirectorystringdefault detected- Static only
rootDirectorystringoptional- Monorepo subdirectory
environmentVarsobjectoptional- String values only
containerPortnumberdefault detected- Container only
memorystringdefault 512Mi- See Limits
cpustringoptional- Container only
minInstancesnumberdefault 0- 0 to 5
maxInstancesnumberdefault 10- 1 to 100, plan-capped
concurrencynumberdefault 80- Requests served per instance
cpuTargetnumberdefault 80- Percentage that triggers a scale-up
regionstringoptional- See Limits
customDomainstringoptional- Can be added later
autoDeployOnPushbooleanoptional- Deploy on every push
autoDeployBranchesstring[]optional- Branches that auto-deploy
autoDeleteStaleEnvsbooleanoptional- Remove environments for deleted branches
curl -X POST https://api.light-cloud.com/api/applications/create \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "shop",
"githubRepoUrl": "https://github.com/acme/shop",
"githubBranch": "main",
"deploymentType": "container",
"framework": "nextjs",
"runtime": "nodejs",
"buildCommand": "npm run build",
"environmentVars": { "NODE_ENV": "production" },
"memory": "512Mi",
"maxInstances": 5
}'{
"id": "app_4kQ2",
"name": "shop",
"status": "pending",
"url": "https://main-shop-acme.light-cloud.io"
}Create from an upload#
/api/applications/create-from-uploadBuilds an application from an archive instead of a repository. Nothing auto-deploys afterwards, since there is no repository to watch.
- permission
- create:projects
Parameters
namestringrequired- Becomes part of the generated subdomain
uploadIdstringrequired- From the uploads flow
deploymentTypestringrequired- static or container
projectIdstringoptional- Folder to file it under
frameworkstringoptional- Overrides detection
runtimestringoptional- Container only
buildCommandstringoptional- Command that produces the build
outputDirectorystringoptional- Static only
startCommandstringoptional- Container only
environmentVarsobjectoptional- String values only
curl -X POST https://api.light-cloud.com/api/applications/create-from-upload \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "marketing-site",
"uploadId": "upl_8Xa1",
"deploymentType": "static",
"outputDirectory": "."
}'{
"id": "app_9Lm3",
"name": "marketing-site",
"source_type": "upload",
"status": "pending"
}Deploy#
/api/applications/deployBuilds the current head of the environment's branch and releases it. Returns as soon as the deployment starts — poll status for the outcome.
- permission
- update:projects
Parameters
applicationIdstringrequired- The application to deploy
environmentIdstringoptional- Defaults to production
targetOrganisationIdstringsession only- Required when using a session token
curl -X POST https://api.light-cloud.com/api/applications/deploy \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"applicationId": "app_4kQ2"}'{
"id": "dep_9f2a",
"environment_id": "env_7Tz",
"status": "pending",
"commit_sha": "9f3c1ab",
"started_at": "2026-08-28T07:00:12.000Z"
}Rename#
/api/applications/renameRenaming changes the generated subdomain, and the old URL stops resolving.
- permission
- update:projects
Parameters
applicationIdstringrequired- The application to rename
namestringrequired- The new name
curl -X POST https://api.light-cloud.com/api/applications/rename \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"applicationId": "app_4kQ2", "name": "storefront"}'{ "id": "app_4kQ2", "name": "storefront", "url": "https://main-storefront-acme.light-cloud.io" }Move#
/api/applications/moveFiles the application under a different folder.
- permission
- update:projects
Parameters
applicationIdstringrequired- The application to move
targetFolderIdstringrequired- Folder id, or null for the root
curl -X POST https://api.light-cloud.com/api/applications/move \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"applicationId": "app_4kQ2", "targetFolderId": "prj_2Bd"}'{ "id": "app_4kQ2", "project_id": "prj_2Bd" }Delete#
/api/applications/deleteTears down every environment. Not reversible, and issued as a POST despite the verb shown here.
- permission
- delete:projects
Parameters
applicationIdstringrequired- The application to delete
targetOrganisationIdstringsession only- Required when using a session token
curl -X POST https://api.light-cloud.com/api/applications/delete \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"applicationId": "app_4kQ2"}'{ "message": "Application deleted" }Custom domains#
Each of these takes either applicationId (which targets the production environment) or environmentId. See Custom domains for the DNS records to create.
/api/applications/add-domainAttaches a domain and starts certificate issuance. Certificates are issued asynchronously — poll check-domain for progress.
- permission
- update:projects
Parameters
applicationIdstringone of two- Targets the production environment
environmentIdstringone of two- Targets a specific environment
domainstringrequired- The hostname to attach
curl -X POST https://api.light-cloud.com/api/applications/add-domain \
-H "Authorization: Bearer $LIGHT_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"applicationId": "app_4kQ2", "domain": "shop.example.com"}'{
"domain": "shop.example.com",
"dns_verified": false,
"certificate_status": "provisioning"
}| Endpoint | Extra parameters | Description |
|---|---|---|
POST /api/applications/check-domain | Reports DNS and certificate state | |
POST /api/applications/update-domain | newDomain | Replaces the attached domain |
POST /api/applications/retry-domain | Retries a failed verification | |
POST /api/applications/remove-domain | revertToAutoSubdomain (default true) | Detaches it |
Repository helpers#
| Endpoint | Description |
|---|---|
POST /api/applications/list-repo-directories | Folders in a repository, for root-directory pickers |
POST /api/applications/public-branches | Branches of a public repository, no installation needed |
GET /api/applications/lookup/:subdomain | Which application owns a subdomain |