Using the API with curl
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.

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