API Reference

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

  1. Build in a workspace VM (e.g. npm run build)
  2. Create a page with the output folder path (POST /pages)
  3. Files are copied from the VM to the host filesystem
  4. An etcd route is created so the edge proxy serves them as a static page
  5. 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 /pages
curl "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

ParameterTypeRequiredDescription
workspace_idstringYesWorkspace to export files from
pathstringYesFolder inside VM to export (e.g. /app/dist)
namestringNoDisplay name (max 100 chars, defaults to workspace name)
slugstringNoSubdomain slug (auto-generated if omitted)
domainstringNoBase 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"}'
ParameterTypeRequiredDescription
workspace_idstringYesWorkspace to export files from
pathstringYesFolder 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/disable

Delete a page

Removes the etcd route, DB record, and host files. If a custom domain is connected, it is also disconnected.

DELETE /pages/:slug

Custom 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"}'
ParameterTypeRequiredDescription
domainstringYesCustom domain to connect
include_wwwbooleanNoAlso route www. subdomain (defaults to false)

Before connecting, configure DNS:

  1. CNAME record pointing your domain to the edge host (e.g. edge.oblien.com)
  2. 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/domain

Disconnect custom domain

Removes the domain route, SSL keys from etcd, and clears the config.

DELETE /pages/:slug/domain

Renew SSL

Force-renew the SSL certificate for a connected custom domain.

POST /pages/:slug/domain/ssl/renew