Request port 25 opening for a VPS
POST /api/v2/support/port25-requests
Asks Hostup to open outbound port 25 (SMTP) for one IPv4 address of a VPS. Explain in reason what the server will send.
Either the account is verified with BankID or the VPS has a paid invoice for a billing period of a year or longer. Without either, the call returns 403 port25_requirements_not_met.
Some requests are approved at once. Then status is approved, port 25 opens and the account holder gets an e-mail. Other requests stay pending until Hostup has reviewed them. Follow them with GET /api/v2/support/port25-requests. When port 25 is already open for the VPS, the call returns that entry with status approved. A second request while one is pending returns 409 port25_request_pending.
Authentication: An API key with the scopes write:support and write:network. About keys and scopes
Request
Body
vpsIdstringrequiredvps_…).reasonstringrequiredipAddressstringExample
curl -X POST "https://cloud.hostup.se/api/v2/support/port25-requests" \ -H "Authorization: Bearer $HOSTUP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "vpsId": "vps_01hxa3b4c5d6e7f8g9h0j1k2m3", "reason": "We send transactional email for example.com from authenticated users with bounce handling and abuse monitoring." }'curl -X POST "https://cloud.hostup.se/api/v2/support/port25-requests" \ -H "Authorization: Bearer $HOSTUP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "vpsId": "vps_01hxa3b4c5d6e7f8g9h0j1k2m3", "reason": "We send transactional email for example.com from authenticated users with bounce handling and abuse monitoring.", "ipAddress": "192.0.2.11" }'Responses
201 The request was made. When port 25 was already open for this VPS, the response is the existing entry.
{ "id": "p25_01hxa3b4c5d6e7f8g9h0j1k2m3", "vpsId": "vps_01hxa3b4c5d6e7f8g9h0j1k2m3", "vpsName": "mail.example.com", "ipAddress": "192.0.2.10", "status": "pending", "reason": "We send transactional email for example.com from authenticated users with bounce handling and abuse monitoring.", "requestedAt": "2026-06-03T03:25:00.000Z", "resolvedAt": null}Response fields
idstringp25_…). A p25wl_… ID means port 25 was already open.vpsIdstring or nullvps_…).vpsNamestring or nullipAddressstringstatusstringapproved when port 25 is open, pending while Hostup reviews the request. One of pending, approved, rejected, unknown.reasonstring or nullnull when port 25 was already open.requestedAtstring or nullresolvedAtstring or nullnull while it is pending.Errors
Errors are Problem Details with a stable code. Branch on the code, not on the text.
| 400 | code is invalid_request. A field is missing or invalid. The same code is returned when the service is not a VPS. |
| 401 | code is unauthorized. The key is missing or lacks write:support or write:network. |
| 403 | code is port25_requirements_not_met. The account is not verified with BankID and the VPS has no paid annual invoice. |
| 404 | code is vps_not_found. The VPS does not exist or is not yours. |
| 409 | code is port25_request_pending when a request for this address is already waiting for review. A 409 with another code means the address is already open for a different service. |
| 422 | code is invalid_request. ipAddress is not one of the VPS’s public IPv4 addresses. |
| 429 | Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers. |
| 500 | Unexpected error. Try again later. |
| 502 | Upstream failure. A dependent provider request failed; the Problem Details code is upstream_failed. Retry later or contact support if the issue persists. |