/api/v2/vps/{id} Return one VPS in the same canonical inventory shape as GET /api/v2/vps, with optional overdue invoice context for pending or suspended services.
Get {id} from GET /api/v2/vps data[].id.
Inspect billing.isPayg: false is a regular fixed-cycle VPS, true is a pay-as-you-go Cloud VPS with billing.amount: null.
This detail response additionally includes hardware — facts about the physical host machine the VPS runs on: hardware.cpuModel is the host CPU model string (for example "AMD EPYC 7R13") and hardware.cpuVendor is one of amd, intel, or other.
Both hardware fields are nullable: they are null when the VPS is not provisioned yet (pending/terminated services) or when the placement lookup is temporarily unavailable — treat null as "unknown right now", not as an error.
hardware.guestCpuModel is the CPU type the operating system inside the VPS reports (a virtual CPU profile such as "EPYC-Rome-v5", not the physical chip).
The hardware field is present only on this detail endpoint, never on the GET /api/v2/vps list.
For suspended, terminated or cancelled services this endpoint also returns suspendedAt and, once terminated, terminatedAt; terminated or cancelled services additionally carry backupRetention — whether the server's backups are still stored (and until when they can be restored onto another server), were deleted (and when), or never existed.
Use /api/v2/vps/{id}/status or richer detail/action endpoints when you need action gates.
If the service mapping conflicts with the platform's native ownership record, the endpoint returns 409 vps_ownership_mapping_conflict; all VPS access is blocked and support must reconcile ownership before retrying.
read:services
Authenticate with an API key in the Authorization: Bearer <token> header.
id string required
Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m3 Public VPS ID. Get it from GET /api/v2/vps data[].id. Do not invent this value; use the exact ID returned by the referenced API response.
Authorization Bearer <token> Accept application/json paidPeriod object Present when verified paid-period presentation is enabled. Unknown/refreshing states must never fall back to expiresAt as payment evidence.
paidPeriod.revision integer · min: 0 required Monotonic source revision used to reject stale responses.
paidPeriod.refreshRevision integer · min: 0 required Refresh generation. Compare this before revision when merging concurrent reads.
paidPeriod.status string · enum required verified refreshing needs_review unavailable paidPeriod.paidThroughDate string · nullable required Inclusive last verified paid calendar day in Europe/Stockholm. Not an invoice due date or a suspension instruction.
paidPeriod.outstandingInvoiceDueDate string · nullable required Nullable: may be null when not applicable.
paidPeriod.sourceInvoiceNumbers array<string> required paidPeriod.observedAt string · nullable required Nullable: may be null when not applicable.
id string
· Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m3 name string
· Example: app-01 primaryIp string · nullable
· Example: 192.0.2.10 serviceStatus string · enum
· Example: active active suspended terminated pending cancelled expired fraud unknown powerState string · nullable · enum
· Example: running running stopped starting stopping paused provisioning error unknown operatingSystem object · nullable
· Example: {"displayName":"Ubuntu 24.04","family":"ubuntu","version":"24.04","variant":null} customerMetadata object Customer-owned display labels. These do not replace canonical name, hostname, or operatingSystem fields.
customerMetadata.displayName string · nullable required
· Example: Production DB Nullable: may be null when not applicable.
customerMetadata.operatingSystemName string · nullable required
· Example: Debian 13 Nullable: may be null when not applicable.
customerMetadata.operatingSystemSourceName string · nullable required
· Example: Debian 12 Nullable: may be null when not applicable.
customerMetadata.updatedAt string · nullable required
· Example: 2026-06-30T10:00:00.000Z Nullable: may be null when not applicable.
billing object billing.amount number · nullable required
· Example: 199 Recurring fixed-cycle amount in the resource currency. Null when no fixed recurring amount applies, such as PAYG Cloud VPS billing.
billing.currencyCode string required
· Example: SEK billing.billingCycle string · nullable · enum required
· Example: annually Canonical billing cycle. VPS services with isPayg: true still report monthly for summary display; use isPayg to distinguish PAYG Cloud VPS from fixed-cycle VPS.
monthly quarterly semiannually annually biennially triennially free billing.isPayg boolean required
· Example: false For VPS service/order billing, true means pay-as-you-go Cloud VPS and false means fixed-cycle/prepaid VPS. Non-VPS resources normally return false.
billing.periodYears integer · nullable
· Example: 1 Nullable: may be null when not applicable.
resources object resources.cpuCores number
· Example: 2 resources.memoryGb number
· Example: 4 resources.storageGb number
· Example: 80 bandwidth object bandwidth.usedGb number required
· Example: 12.5 bandwidth.limitGb number required
· Example: 1000 bandwidth.inboundGb number required
· Example: 4.2 bandwidth.outboundGb number required
· Example: 8.3 bandwidth.hasOverage boolean required
· Example: false availability object availability.available boolean required
· Example: true availability.reason string · nullable required
· Example: null Nullable: may be null when not applicable.
tags array<string>
· Example: ["production"] pinned boolean
· Example: false createdAt string · nullable
· Example: 2026-04-27T12:00:00.000Z pendingMaintenance boolean
· Example: false Only present when the list route is called with include=pendingMaintenance.
pendingMaintenanceHasDeadline boolean
· Example: false Only present together with pendingMaintenance.
overdueInvoices array<object> Only present on single-detail routes when overdue invoices were queried.
diskThrottle object Disk throttle status for this VPS. active:false means the API checked local throttle state and found no active disk limit.
diskThrottle.active boolean required
· Example: true True when an active disk throttle exists for this VPS.
diskThrottle.limitedRead boolean required
· Example: false diskThrottle.limitedWrite boolean required
· Example: true diskThrottle.readDrpd number · nullable required
· Example: null Disk reads per disk per day, when reads triggered the throttle.
diskThrottle.writeDwpd number · nullable required
· Example: 10.06 Disk writes per disk per day, when writes triggered the throttle.
diskThrottle.diskSizeGb number · nullable required
· Example: 100 Nullable: may be null when not applicable.
diskThrottle.estimatedDailyReadGb number · nullable required
· Example: null Nullable: may be null when not applicable.
diskThrottle.estimatedDailyWriteGb number · nullable required
· Example: 1006 Nullable: may be null when not applicable.
diskThrottle.totalReadLast7DaysGb number · nullable required
· Example: null Nullable: may be null when not applicable.
diskThrottle.totalWriteLast7DaysGb number · nullable required
· Example: 7042 Nullable: may be null when not applicable.
diskThrottle.limitReadMbps number · nullable required
· Example: null Nullable: may be null when not applicable.
diskThrottle.limitWriteMbps number · nullable required
· Example: 1 Nullable: may be null when not applicable.
diskThrottle.throttledAt string · nullable required
· Example: 2026-06-17T14:00:09.000Z Nullable: may be null when not applicable.
diskThrottle.expiresAt string · nullable required
· Example: 2026-06-18T14:00:09.000Z Nullable: may be null when not applicable.
diskThrottle.escalationLevel integer · min: 0 required
· Example: 1 hardware object Host and guest CPU facts. Present on GET /api/v2/vps/{id} only (absent on the list read). Each field is null when the platform cannot resolve node placement right now (e.g. service pending or terminated) — null means "unknown", not an error.
hardware.cpuModel string · nullable Physical CPU model of the host node, e.g. "AMD EPYC 7R13".
hardware.cpuVendor string · nullable · enum CPU vendor family derived from the model.
amd intel other hardware.guestCpuModel string · nullable
· Example: EPYC-Rome-v5 The CPU type the operating system inside the VPS reports (for example in lscpu): the virtual CPU profile of the node family the VPS runs on, not the physical chip — "EPYC-Rome-v5" or "EPYC-Milan" on AMD nodes, "Cascade Lake" on Intel nodes. A server with a pending CPU type change keeps its previous type until its next restart. The physical host CPU is cpuModel.
suspendedAt string · nullable
· Example: 2026-08-25T00:00:00.000Z When the service was suspended. Present on GET /api/v2/vps/{id} only, and only while the service is suspended, terminated or cancelled; null when no date is recorded.
terminatedAt string · nullable
· Example: 2026-09-03T00:00:00.000Z When the service was terminated (the server was deleted). Present on GET /api/v2/vps/{id} only, and only for terminated or cancelled services; null when no date is recorded.
backupRetention object What happened to this server's backups after it ended. Present on GET /api/v2/vps/{id} only, and only for terminated or cancelled services.
backupRetention.status string · enum required
· Example: deleted retained deleted none unknown backupRetention.backupCount integer · nullable required
· Example: 6 Backups still stored (retained) or removed after the service ended (deleted); 0 for none; null when unknown.
backupRetention.latestBackupAt string · nullable required
· Example: 2026-08-24T01:35:45.000Z When the newest backup of this server was taken.
backupRetention.deleteAfter string · nullable required
· Example: null retained only: the earliest moment automatic cleanup may delete the stored backups.
backupRetention.deletedAt string · nullable required
· Example: 2026-09-12T13:16:18.998Z deleted only: when the last backup was removed.
backupRetention.deletionReason string · nullable · enum required
· Example: retention_elapsed deleted only: retention_elapsed when the retention period after termination ended, removed_by_staff when support removed them; null when not recorded.
retention_elapsed removed_by_staff backupRetention.reason string required
· Example: The backups of this server were deleted on 2026-09-12 when the retention period after t... Plain-English explanation of the state, ready to show.
type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object code is vps_not_found. 10 fields type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object Retry-After seconds plus X-RateLimit-* headers. 10 fields type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object https://cloud.hostup.se/api/v2/vps/{id} curl -X GET "https://cloud.hostup.se/api/v2/vps/vps_01hxa3b4c5d6e7f8g9h0j1k2m3" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" {
"id": "vps_01hxa3b4c5d6e7f8g9h0j1k2m3",
"name": "app-01",
"primaryIp": "192.0.2.10",
"serviceStatus": "active",
"powerState": "running",
"operatingSystem": {
"displayName": "Ubuntu 24.04",
"family": "ubuntu",
"version": "24.04",
"variant": null
},
"customerMetadata": {
"displayName": "Production DB",
"operatingSystemName": "Debian 13",
"operatingSystemSourceName": "Debian 12",
"updatedAt": "2026-06-30T10:00:00.000Z"
},
"hardware": {
"cpuModel": "AMD EPYC 7R13",
"cpuVendor": "amd",
"guestCpuModel": "EPYC-Rome-v5"
},
"resources": {
"cpuCores": 2,
"memoryGb": 4,
"storageGb": 80
},
"billing": {
"amount": 99,
"currencyCode": "SEK",
"billingCycle": "monthly",
"isPayg": false
},
"bandwidth": {
"usedGb": 12.5,
"limitGb": 1000,
"inboundGb": 4.2,
"outboundGb": 8.3,
"hasOverage": false
},
"availability": {
"available": true,
"reason": null
},
"tags": [
"production"
],
"pinned": false,
"createdAt": "2026-04-27T12:00:00.000Z",
"diskThrottle": {
"active": false,
"limitedRead": false,
"limitedWrite": false,
"readDrpd": null,
"writeDwpd": null,
"diskSizeGb": null,
"estimatedDailyReadGb": null,
"estimatedDailyWriteGb": null,
"totalReadLast7DaysGb": null,
"totalWriteLast7DaysGb": null,
"limitReadMbps": null,
"limitWriteMbps": null,
"throttledAt": null,
"expiresAt": null,
"escalationLevel": 0
}
}