Pages
Deploy static files (build artifacts, dist folders) from workspaces to the edge. Pages are served directly by the edge proxy — no running VM required.
Pages are independent from workspaces. Deleting a workspace does not delete its exported pages.
How it works
- Build in a workspace VM (e.g.
npm run build) - Create a page with the output folder path (
POST /pages) - Files are copied from the VM to the host filesystem
- An etcd route is created so the edge proxy serves them as a static page
- The VM can be stopped or deleted — the page stays live
Each page gets a unique URL at https://{slug}.preview.oblien.com. You can optionally connect a custom domain with automatic SSL.
List pages
GET /pagescurl "https://api.oblien.com/pages" \
-H "Authorization: Bearer $TOKEN"Response
{
"success": true,
"pages": [
{
"name": "my-app",
"slug": "my-app",
"domain": "preview.oblien.com",
"url": "https://my-app.preview.oblien.com",
"status": "active",
"source_workspace_id": "ws_abc123",
"custom_domain": null,
"created_at": "2026-03-12T10:00:00Z"
}
]
}Create a page
Create a page by exporting files from a running workspace. The VM must be running — files are transferred during creation.
POST /pages
Content-Type: application/json
{
"workspace_id": "ws_abc123",
"path": "/app/dist",
"name": "my-app",
"slug": "my-app"
}curl -X POST "https://api.oblien.com/pages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"workspace_id": "ws_abc123", "path": "/app/dist", "name": "my-app"}'Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_id | string | Yes | Workspace to export files from |
path | string | Yes | Folder inside VM to export (e.g. /app/dist) |
name | string | No | Display name (max 100 chars, defaults to workspace name) |
slug | string | No | Subdomain slug (auto-generated if omitted) |
domain | string | No | Base domain (defaults to preview.oblien.com) |
Response
{
"success": true,
"page": {
"name": "my-app",
"slug": "my-app",
"domain": "preview.oblien.com",
"url": "https://my-app.preview.oblien.com",
"status": "active"
}
}Update a page
Update the page name or slug. Slug changes swap the etcd route atomically.
PUT /pages/:slug
Content-Type: application/json
{ "name": "new-name", "slug": "new-slug" }Re-deploy files
Replace the static files for an existing page with a fresh export from a workspace.
POST /pages/:slug/deploy
Content-Type: application/json
{ "workspace_id": "ws_abc123", "path": "/app/dist" }curl -X POST "https://api.oblien.com/pages/my-app/deploy" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"workspace_id": "ws_abc123", "path": "/app/dist"}'| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_id | string | Yes | Workspace to export files from |
path | string | Yes | Folder inside VM to export |
Enable / Disable
Toggle a page without deleting it. Disabling removes the etcd route key (traffic stops), enabling re-creates it.
POST /pages/:slug/enable
POST /pages/:slug/disableDelete a page
Removes the etcd route, DB record, and host files. If a custom domain is connected, it is also disconnected.
DELETE /pages/:slugCustom Domains
Connect a fully custom domain to a page with automatic SSL. Uses the same DNS verification and ACME certificate flow as workspace custom domains.
Connect a custom domain
POST /pages/:slug/domain
Content-Type: application/json
{
"domain": "docs.example.com",
"include_www": false
}curl -X POST "https://api.oblien.com/pages/my-app/domain" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"domain": "docs.example.com"}'| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Custom domain to connect |
include_www | boolean | No | Also route www. subdomain (defaults to false) |
Before connecting, configure DNS:
- CNAME record pointing your domain to the edge host (e.g.
edge.oblien.com) - TXT ownership record for verification
Use the DNS check endpoint to verify before connecting.
Response
{
"success": true,
"domain": "docs.example.com",
"ssl": { "status": "active", "expiresAt": "2026-06-10" },
"url": "https://docs.example.com"
}Check DNS (pre-verify)
Verify DNS configuration before connecting a domain. No side effects.
POST /pages/:slug/domain/check
Content-Type: application/json
{ "domain": "docs.example.com" }Get domain config
GET /pages/:slug/domainDisconnect custom domain
Removes the domain route, SSL keys from etcd, and clears the config.
DELETE /pages/:slug/domainRenew SSL
Force-renew the SSL certificate for a connected custom domain.
POST /pages/:slug/domain/ssl/renew