POST /api/servers/:server/transfer
Initiates an outgoing server transfer to a destination node. This endpoint archives the server data and streams it to the target node.
The server must be offline before the transfer can begin. The transfer process will automatically stop the server if it’s running.
Path Parameters
The UUID of the server to transfer
Request Body
The destination node’s transfer endpoint URL where the archive will be sent
JWT bearer token for authenticating with the destination node
Server configuration details for the destination node Whether to start the server after transfer completes (default: false)
Response
Returns 202 Accepted when the transfer is successfully initiated. The transfer runs asynchronously in the background.
Error Responses
A transfer is already in progress for this server {
"error" : "A transfer is already in progress for this server."
}
500 Internal Server Error
Failed to stop the server before initiating transfer
Transfer Process
When you initiate a transfer, Wings performs the following steps:
Server Stop
Stops the server if it’s currently running (waits up to 15 seconds)
Archive Creation
Creates a compressed archive of all server files
Stream to Destination
Streams the archive to the destination node with progress updates every 5 seconds
Checksum Verification
Sends a SHA-256 checksum for the destination to verify data integrity
The source node does not send a success status to the panel. Only the destination node reports success. If the transfer fails, the source node notifies the panel to reset the transfer state.
Example Request
curl -X POST https://wings.example.com/api/servers/12345678-1234-1234-1234-123456789012/transfer \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://destination.example.com/api/transfers",
"token": "Bearer DESTINATION_JWT_TOKEN",
"server": {
"uuid": "12345678-1234-1234-1234-123456789012",
"start_on_completion": false
}
}'
const response = await fetch (
'https://wings.example.com/api/servers/12345678-1234-1234-1234-123456789012/transfer' ,
{
method: 'POST' ,
headers: {
'Authorization' : 'Bearer YOUR_TOKEN' ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
url: 'https://destination.example.com/api/transfers' ,
token: 'Bearer DESTINATION_JWT_TOKEN' ,
server: {
uuid: '12345678-1234-1234-1234-123456789012' ,
start_on_completion: false
}
})
}
);
import requests
response = requests.post(
'https://wings.example.com/api/servers/12345678-1234-1234-1234-123456789012/transfer' ,
headers = {
'Authorization' : 'Bearer YOUR_TOKEN' ,
'Content-Type' : 'application/json'
},
json = {
'url' : 'https://destination.example.com/api/transfers' ,
'token' : 'Bearer DESTINATION_JWT_TOKEN' ,
'server' : {
'uuid' : '12345678-1234-1234-1234-123456789012' ,
'start_on_completion' : False
}
}
)
Example Response
Monitoring Transfer Progress
You can monitor transfer progress through the server’s WebSocket connection. The transfer system publishes events:
Transfer logs : Real-time progress messages (upload percentage, status updates)
Transfer status : Current status (pending, processing, cancelling, cancelled, failed, completed)
Receive Transfer Receive an incoming server transfer
Cancel Transfer Cancel an outgoing server transfer