REST API Reference
Vapor is built with an API-first philosophy. Every action available in the web interface is powered by a comprehensive, fully documented REST API.
Authentication
The Vapor API uses Bearer Token authentication via JSON Web Tokens (JWT).
- First, generate an API Token via the UI (API Token menu) or authenticate via the
/api/v1/auth/loginendpoint using your username and password. - Include the token in the
Authorizationheader of all subsequent requests:
Authorization: Bearer <your_jwt_token>OpenAPI Specification
Vapor publishes its complete OpenAPI 3.1.0 specification. You can access the raw openapi.yaml file from the source code or query the /api/v1 endpoint (if Swagger UI is enabled on your deployment).
The API covers all platform features including:
- Host System Management (
/api/v1/system/*) - Networking (
/api/v1/network/*) - Storage (
/api/v1/storage/*) - Virtualization (
/api/v1/virtualization/*) - Kubernetes (
/api/v1/kubernetes/*)
Large File Uploads (TUS Protocol)
For endpoints that require uploading massive files—such as Virtual Machine ISOs or Docker/Container images—Vapor implements the TUS Protocol v1.0.0.
TUS is an open protocol for resumable file uploads over HTTP. It ensures that multi-gigabyte uploads (like a 4GB Ubuntu ISO) can survive network interruptions without needing to restart from scratch.
Supported TUS Endpoints
/api/v1/virtualmachines/isos/upload/*/api/v1/containers/images/upload/*/api/v1/docker/images/upload/*
Integration Example (JavaScript)
If you are building a custom frontend integration, we highly recommend using the official tus-js-client library:
import * as tus from 'tus-js-client';
const upload = new tus.Upload(file, {
endpoint: 'https://<vapor-ip>:7770/api/v1/virtualmachines/isos/upload',
headers: {
'Authorization': 'Bearer ' + token
},
chunkSize: 10 * 1024 * 1024, // 10MB chunks
metadata: {
filename: file.name,
filetype: file.type
},
onError: (error) => console.error('Upload failed:', error),
onProgress: (bytesUploaded, bytesTotal) => {
const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);
console.log(`${percentage}% uploaded`);
},
onSuccess: () => {
console.log('Upload complete');
// Call the finalization endpoint
fetch(`/api/v1/virtualmachines/isos/upload/${upload.url.split('/').pop()}/complete`, {
method: 'POST',
headers: { 'Authorization': 'Bearer ' + token }
});
}
});
upload.start();For more details on the TUS protocol, visit tus.io.
View Full API Reference
The complete, interactive API documentation is generated dynamically and can be viewed here: