Skip to content

Using the API with curl

Interactive API Docs

Your server hosts interactive Swagger documentation at /api with a "Try it out" console, full request/response schemas, and authentication support.

Outdated Documentation

This page predates the last major rewrite and may not be accurate. Check back weekly for updates.

API endpoint: https://manager.os.mieweb.org

Prerequisites:

  • Active account, an API key, curl, and your site ID (from the web interface).

1. List Available Templates

curl -X GET 'https://create-a-container.opensource.mieweb.org/api/templates' \
  -H "Authorization: Bearer YOUR_API_KEY"

2. Get External Domain IDs

curl -X GET 'https://create-a-container.opensource.mieweb.org/api/external-domains' \
  -H "Authorization: Bearer YOUR_API_KEY"

3. Create a Container

curl -X POST 'https://create-a-container.opensource.mieweb.org/sites/1/containers' \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'hostname=my-app' \
  --data-urlencode 'template=pve1,100' \
  --data-urlencode 'services[0][type]=tcp' \
  --data-urlencode 'services[0][internalPort]=22' \
  --data-urlencode 'services[1][type]=http' \
  --data-urlencode 'services[1][internalPort]=3000' \
  --data-urlencode 'services[1][externalHostname]=my-app' \
  --data-urlencode 'services[1][externalDomainId]=1'

Required: hostname (letters/numbers/hyphens), template (nodeName,templateVmid).

Service Types

Services use a zero-indexed array (services[0], services[1], etc.):

Type Required Fields Notes
tcp internalPort External port auto-assigned
udp internalPort External port auto-assigned (range 2000–65565)
http internalPort, externalHostname, externalDomainId Subdomain + domain
srv internalPort, dnsName e.g., _ldap._tcp

4. Complete Example

API_KEY="your_api_key_here"

curl -X POST 'https://create-a-container.opensource.mieweb.org/sites/1/containers' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'hostname=my-web-app' \
  --data-urlencode 'template=pve1,100' \
  --data-urlencode 'services[0][type]=tcp' \
  --data-urlencode 'services[0][internalPort]=22' \
  --data-urlencode 'services[1][type]=http' \
  --data-urlencode 'services[1][internalPort]=8080' \
  --data-urlencode 'services[1][externalHostname]=my-web-app' \
  --data-urlencode 'services[1][externalDomainId]=1' \
  --data-urlencode 'services[2][type]=tcp' \
  --data-urlencode 'services[2][internalPort]=5432'

Returns 302 redirect on success, error message on failure.

5. List Your Containers

curl -X GET 'https://create-a-container.opensource.mieweb.org/api/containers' \
  -H "Authorization: Bearer YOUR_API_KEY"

6. Access Your Container

SSH: ssh -p <assigned-port> <username>@<hostname>.<domain>

HTTP: https://<externalHostname>.<externalDomain>

Proxmox: Navigate to https://os.mieweb.org:8006 — your container is listed with your username in the tags field.

Hostname

Note

You can start, stop, and reboot through Proxmox. To delete, contact an administrator.