Perceptron Domains

Perceptron Domains expose web servers or applications running on your local machine to the global internet with a persistent subdomain on *.pct.site via a HTTP tunnel. This allows anyone anywhere with an internet connection to access your web application at a URL like https://myapp.pct.site. The power of Perceptron Domains is most observable when AI Agents build web applications and serve them to a LIVE web URL in seconds, allowing you to access them from anywhere on any device. Agents can reserve and deploy to a Perceptron Domain without any human interaction or intervention. They simply call the Perceptron API directly.

Quick Start

Reserve and manage a domain from the Domains page in the Perceptron app, or via the API. Establishing the local tunnel (assigning a port and connecting) is done from the Perceptron TUI, or from a custom tunnel client using the tunnel-token API below.

Reserve + manage (web app):

  1. Open the Domains page in the Perceptron app
  2. Click Reserve, enter a subdomain name (e.g. myappmyapp.pct.site), and confirm
  3. Open the domain’s manage modal, then assign the local port your web server is running on (you can choose between port 10000 and 10099)
  4. Establish the tunnel from the Perceptron TUI (Domains page → manage modal → Connect Tunnel), or build a custom tunnel client using the tunnel-token API below

Reserve + manage (API):

curl -X POST https://perceptron.cloud/api/domains/reserve \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"subdomain": "myapp"}'

Then assign a port with POST /api/domains/{id}/assign, fetch a tunnel token with POST /api/domains/{id}/tunnel-token, and connect a WebSocket tunnel client to the domains server.

Your web application is now LIVE at https://myapp.pct.site, accessible from any web browser or HTTP client from any device with an internet connection.

You can use Perceptron Domains to host personal websites, Agent-built dashboards and kanban boards, and commercial web applications.

The web application is hosted directly on your local machine running the Domain tunnel, and requires it to be powered on and connected to the internet for as long as you want the web app to stay online. This works in principle like similar services such as ngrok or tailscale.

Note: always gate sensitive information or data behind a login screen or proper backend authentication.

API Reference

Method Path Description
GET /api/domains List all reserved domains
POST /api/domains/reserve Reserve a subdomain
POST /api/domains/{id}/assign Assign a local port
POST /api/domains/{id}/unassign Remove port assignment
POST /api/domains/{id}/tunnel-token Get a tunnel connection token
POST /api/domains/{id}/connect Connect the tunnel
POST /api/domains/{id}/disconnect Disconnect the tunnel
GET /api/domains/tunnels/status List active tunnel connections
POST /api/domains/release Release a domain

API Authentication

Include your API key in the Authorization header:

Authorization: Bearer PERCEPTRON_API_KEY

Reservation

POST /api/domains/reserve

curl -X POST https://perceptron.cloud/api/domains/reserve \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"subdomain": "myapp"}'
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "subdomain": "myapp",
  "full_domain": "myapp.pct.site",
  "hourly_cost": "x",
  "prepaid_until": 1740000000
}

Listing

GET /api/domains

curl https://perceptron.cloud/api/domains \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "domains": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "subdomain": "myapp",
      "full_domain": "myapp.pct.site",
      "service_id": "domain-abc12345",
      "created_at": 1740000000,
      "local_port": 8080,
      "tunnel_active": true
    }
  ],
  "base_domain": "pct.site",
  "hourly_cost": "x",
  "port_range": [10000, 10099]
}

Port Assignment

POST /api/domains/{id}/assign

curl -X POST https://perceptron.cloud/api/domains/{id}/assign \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"port": 8080}'
{
  "status": "assigned",
  "port": 8080
}

Tunnel Connection

POST /api/domains/{id}/connect

curl -X POST https://perceptron.cloud/api/domains/{id}/connect \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": "connected",
  "subdomain": "myapp",
  "local_port": 8080
}

Disconnection

POST /api/domains/{id}/disconnect

curl -X POST https://perceptron.cloud/api/domains/{id}/disconnect \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": "disconnected"
}

Release

POST /api/domains/release

curl -X POST https://perceptron.cloud/api/domains/release \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"}'
{
  "status": "released"
}

Subdomain Reservation Rules

Reserved subdomains: www, api, mail, ftp, admin, tunnel, ns1, ns2 and common internal service names cannot be reserved.

Pricing

Domains are billed hourly from your credits balance. You can check the latest price on the Domains page of the Perceptron app, or call the /api/domains/pricing endpoint. See Billing for more details.