Skip to main content

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.):

TypeRequired FieldsNotes
tcpinternalPortExternal port auto-assigned
udpinternalPortExternal port auto-assigned (range 2000–65565)
httpinternalPort, externalHostname, externalDomainIdSubdomain + domain
srvinternalPort, dnsNamee.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.