-
Notifications
You must be signed in to change notification settings - Fork 2
API documentation
The API is accessed by making HTTP requests to an endpoint URL, in which GET, POST, PUT, PATCH, and DELETE methods dictate how you interact with the available information.
The default base URL for all the HTTP endpoints is:
http://$hostname:$port/libvirt/
$hostname and $port being respectively the address and port of the Web API server
Requests must be sent over HTTP with any payload formatted in JSON. All requests must include both X-AUTH-KEY and X-AUTH-USERNAME headers to authenticate. Requests that use X-AUTH-USER-SERVICE-KEY can use that instead of the Auth-Key and Auth-Username headers.
| Name | Format | Description |
|---|---|---|
| API Key | X-Auth-Key | API key located in config.ini |
| Username | X-Auth-Username | Username associated with a user of group libvirt and kvm |
| User Service Key | X-Auth-User-Service-Key | Special API key good for restricted set of endpoints |
| Name | Format | Description |
|---|---|---|
| Packet ID | X-Packet-ID | An identifier which will be replicated in the response |
Requests generally formatted as follows:
GET object/:id_type/:object_id
curl -X GET "http://127.0.0.1:8081/libvirt/domains/by-uuid/14" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-Username:smith"curl -X GET "http://127.0.0.1:8081/libvirt/domains/by-uuid/14" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-User-Service-Key:v1.0-e24fd090c02efcfecb4de8f4ff24..."Each response is a JSON object. The data request is wrapped in the RESULT tag. If you have a response, it will always be within the RESULT field. We also include a SUCCESS flag, an array of potential ERRORS, and MESSAGE in the response. Some responses can have additional pagination info wrapped in the RESULT_INFO
An error object will contain an integer CODE field and a MESSAGE
Date fields will always be in UTC ISO-8601 format, including microseconds.
{
"results": Array of $result,
"success": boolean,
"errors": Array of $error,
"messages": Array of strings
}
$result is an object specific to each request.
$error is an object determined with a CODE (integer) and a MESSAGE (string) :
{
"code": integer,
"message": string
}
For a list of errors, see Errors.
{
"results": [
{
"uuid": "4dea22b3-1d52-d8f3-2516-782e98ab3fa0",
"name": "debian-vm",
"...": "..."
},
{
"uuid": "fa8e1003-1f3f-4a92-a829-66dd523a68f5",
"name": "manjaro",
"...": "..."
}
],
"success": true,
"errors": [],
"messages": []
}{
"results": [],
"success": false,
"errors": [
{
"code": 42,
"message": "Invalid or missing domain."
}
],
"messages": []
}A Domain is a virtual machine on a host. It can be characterized by a name (max 253 characters string) or an UUID (string of 32 characters separated by - : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
List, search, sort, and filter your domains
GET domains:flags
| Name type | Description example | Constraints |
|---|---|---|
| state number or string | Domain state Running | See Status flags |
| active boolean | Activity specifier | true or false |
| persistent boolean | Persistence specifier | true or false |
| managed_save boolean | Save management policy specifier | true or false |
| has_snapshot boolean | Snaphshot policy specifier | true or false |
N.B. : Flags can be composed with a comma , e.g., ?flag=val1,val2
curl -X GET "http://127.0.0.1:8081/libvirt/domains?state=running&has_snapshot=true" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-Username:smith"curl -X POST "http://127.0.0.1:8081/libvirt/domains" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-Username:smith" \
--data '"<domain>...</domain>"'curl -X POST "http://127.0.0.1:8081/libvirt/domains" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-Username:smith" \
--data '{"name":"fedora-vm","os":"Linux"}'You may also send in an array of domains to be created
GET domains/:identifier_type/:identifier
:identifier_type can be by-name or by-uuid
curl -X GET "http://127.0.0.1:8081/libvirt/domains/by-uuid/4dea22b3-1d52-d8f3-2516-782e98ab3fa0" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-Username:smith"
GET domains/:identifier_type/:identifier/xml_desc
Return the XML description of :identifier as a string.
curl -X GET "http://127.0.0.1:8081/libvirt/domains/by-uuid/4dea22b3-1d52-d8f3-2516-782e98ab3fa0/xml_desc" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-Username:smith"{
"results": [
"<domain>...</domain>"
],
"success": true,
"errors": [],
"messages": []
}
PATCH domains/:identifier_type/:identifier
The JSon data can be an obect or an array of objects if you need to compose multiple requests relating to this domain.
{
"power_mgt": "$VALUE"
}$VALUE can be a string (see $ACTION values) or a JSON Object :
{
"$VALUE": {
"request": "$ACTION",
"type": "$FLAGS"
}
}For flags, see Power management flags.
If no flags are specified, using no flag.
| Value (string) | Action |
|---|---|
| start | Start a (previously defined) inactive domain |
| shutdown | Gracefully shutdown a domain |
| destroy | Destroy (stop) a domain |
| reboot | Reboot a domain |
| reset | Reset a domain |
| suspend | Suspend (pause) a domain |
| resume | Resume (unpause) |
curl -X PATCH "http://127.0.0.1:8081/libvirt/domains/by-name/debian-vm" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-Username:smith" \
--data '[{"power_mgt":{"request":"start", "type":"ACPI_POWER_BTN"}}]'N.B. : In this example, the array is useless, it serves only for example purposes.
{
"results": [],
"success": true,
"errors": [],
"messages": [
{
"start": "Domain started"
}
]
}{
"results": [],
"success": false,
"errors": [
{
"code": 201,
"message": "Domain is already active"
}
],
"messages": []
}
DELETE domains/:identifier_type/:identifier:options
The request can contain embedded args to specify options. See Delete flags. These options may be required, e.g., if your domain has NVRAM, you have to specify if you want to keep the NVRAM file or delete it.
curl -X PATCH "http://127.0.0.1:8081/libvirt/domains/by-name/debian-vm?options=keep_nvram" \
-H "Content-Type:application/json" \
-H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
-H "X-Auth-Username:smith"