v1JSON over HTTPS

Reseller API

Provision and manage EggyWall VPSs using prepaid reseller balance. Servers created by the API are owned by the reseller account and remain fully accessible through both the API and the normal EggyWall VPS dashboard.

Base URL https://eggywall.org/api/reseller/v1/

Authentication

Create an API key from the reseller panel. The full key is shown once. EggyWall stores only a SHA-256 hash of the key.

Send the key with either of these headers:

Authorization: Bearer ewr_live_... # or X-API-Key: ewr_live_...

Base URL: https://eggywall.org/api/reseller/v1/

Idempotency

Provisioning, renewal, and VPS resource increases charge reseller balance, so each requires a unique Idempotency-Key header. Repeating a completed request with the same key returns the original result without charging again.

Idempotency-Key: customer-order-10428

Use a new key for each new billable operation. Maximum length: 128 characters.

Plans and operating systems

GET/api/reseller/v1/plans.php

Returns currently active VPS plans, list prices, effective prices after the account discount, billing periods and supported operating systems. The response also includes the current account discount percentage.

curl https://eggywall.org/api/reseller/v1/plans.php \ -H "Authorization: Bearer YOUR_API_KEY"

Balance

GET/api/reseller/v1/balance.php
Response
{ "success": true, "currency": "USD", "balance": 125.50 }

Top-ups are created from the reseller panel and credited automatically after NOWPayments confirms the payment. Account discounts do not reduce reseller credit top-ups.

VPS endpoints

MethodEndpointPurpose
GETvps.phpList all VPSs owned by the reseller.
GETvps.php?id=123Get one VPS.
POSTvps.phpProvision and charge balance.
DELETEvps.php?id=123Delete a VPS. Deletion does not refund used service credit.
POSTresources.phpIncrease CPU, RAM and/or storage on an existing VPS and update Proxmox.
POSTrenew.phpRenew a VPS from balance, including recurring resource extras.
POSTaction.phpStart, stop, shutdown, reboot or reset.
POSTreinstall.phpReinstall the operating system.
POSTrename.phpRename the VPS in EggyWall.
GETpassword.php?id=123Reveal the current root/Administrator password.
POSTconsole.phpCreate a temporary noVNC websocket session.

Provision VPS

POST/api/reseller/v1/vps.php
FieldRequiredDescription
plan_idYesPlan ID returned by plans.php.
osYesOS ID returned by plans.php, e.g. ubuntu24.
external_refNoYour own customer/order reference, up to 128 characters.
nameNoOptional EggyWall display name, up to 25 characters.
Request
curl -X POST https://eggywall.org/api/reseller/v1/vps.php \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Idempotency-Key: order-10001" \ -H "Content-Type: application/json" \ -d '{ "plan_id": 1, "os": "ubuntu24", "external_ref": "customer-8821", "name": "Customer 8821" }'
Response
{ "success": true, "order_id": 41, "charged_usd": 15, "balance": 110.50, "vps": { "id": 73, "vmid": 121, "name": "Customer 8821", "state": "active", "power_status": "running", "os": "ubuntu24", "ipv4": "107.150.72.210", "expires_at": "2026-10-03 13:00:00" } }

If provisioning fails, the API returns an error and the reserved wallet charge is refunded.

Increase VPS resources

POST/api/reseller/v1/resources.php

Increase resources on an already-provisioned reseller VPS. Provisioning always uses the selected standard plan; resource extras are added only afterward. This endpoint only increases resources and never decreases them.

FieldRequiredDescription
idYesExisting reseller VPS ID.
add_coresNoAdditional CPU cores. $3.50 per core per 30 days.
add_ram_mbNoAdditional RAM in 1024 MB increments. $1.50 per 1024 MB per 30 days.
add_storage_gbNoAdditional storage in 10 GB increments. $1.50 per 10 GB per 30 days.

At least one increase must be greater than zero. Final limits are 20 CPU cores, 122880 MB RAM (120 GB), and 1024 GB storage (1 TB). CPU, RAM and disk are changed on the Proxmox VM. Disk storage is expansion-only.

The immediate wallet charge is prorated for the full service time remaining on the VPS, including multiple prepaid billing periods when applicable. The full recurring addon price is then included in future renewals. If the account has a global discount configured, that discount is applied at charge time.

Request
curl -X POST https://eggywall.org/api/reseller/v1/resources.php \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Idempotency-Key: upgrade-73-1" \ -H "Content-Type: application/json" \ -d '{ "id": 73, "add_cores": 1, "add_ram_mb": 1024, "add_storage_gb": 10 }'
Response
{ "success": true, "upgrade_id": 9, "charged_usd": 4.11, "proration_factor": 0.85, "recurring_addon_delta_usd": 6.50, "vps": { "id": 73, "resources": { "extras": {"cores":1,"ram_mb":1024,"storage_gb":10}, "total": {"cores":9,"ram_mb":13312,"storage_gb":110}, "recurring_addons_usd": 6.50 } } }
If Proxmox cannot fully verify an upgrade after the wallet has been reserved, the request is marked for reconciliation instead of automatically refunding potentially-applied resources.

Renew VPS

POST/api/reseller/v1/renew.php

The current base plan price plus all recurring resource extras is combined, the account discount is applied, and the resulting amount is deducted from reseller balance. That plan’s billing period is then added to the existing expiry. If already expired, the new period starts from the renewal time. Suspended VPSs are reactivated automatically.

curl -X POST https://eggywall.org/api/reseller/v1/renew.php \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Idempotency-Key: renew-73-2026-10" \ -H "Content-Type: application/json" \ -d '{"id":73}'

Power actions

POST/api/reseller/v1/action.php

Supported actions: start, shutdown, stop, reboot, reset.

curl -X POST https://eggywall.org/api/reseller/v1/action.php \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"id":73,"action":"reboot"}'

Reinstall

POST/api/reseller/v1/reinstall.php
Reinstall destroys the VPS disk contents and generates a new password.
curl -X POST https://eggywall.org/api/reseller/v1/reinstall.php \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"id":73,"os":"debian12"}'

Rename and credentials

POST/api/reseller/v1/rename.php
{"id":73,"name":"Production API"}
GET/api/reseller/v1/password.php?id=73
{ "success": true, "id": 73, "password": "..." }
Treat password responses as secrets. Do not write them to application logs.

Console

POST/api/reseller/v1/console.php

Returns temporary websocket details for the same EggyWall noVNC console path used by the customer dashboard.

Request
curl -X POST https://eggywall.org/api/reseller/v1/console.php \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"id":73}'
Response
{ "success": true, "console": { "protocol": "wss", "host": "console.eggywall.cc", "port": 443, "path": "/vncws/...", "password": "...", "temporary": true } }

Delete VPS

DELETE/api/reseller/v1/vps.php?id=73
curl -X DELETE "https://eggywall.org/api/reseller/v1/vps.php?id=73" \ -H "Authorization: Bearer YOUR_API_KEY"
Deleting a VPS permanently removes it from Proxmox and EggyWall. Remaining service time is not automatically refunded.

Errors

Errors always use a JSON object with a machine-readable code and message.

{ "success": false, "error": { "code": "insufficient_balance", "message": "Insufficient reseller balance. Required $15.00, available $7.50." } }
HTTPMeaning
400Invalid input or VPS action.
401Missing, invalid or revoked API key.
402Insufficient reseller balance.
404VPS or credential not found.
405Wrong HTTP method.
409Idempotent request is already in progress or its key cannot be reused for a new operation.
502Provisioning/renewal failed while contacting infrastructure; balance is refunded when applicable.