# Device
The Device-API following functionality matrix indicates which devices are
required for an API call to be usable.
**O** - Optional: The device (column) **is not required** for a Firecracker
microVM API call to succeed. If the device (column) is omitted from a uVM
definition, a call to one of the [API Endpoints](#api-endpoints) will succeed.
**R** - Required: The device (column) **is required** for a Firecracker microVM
API call to succeed. If the device (column) is omitted from a uVM definition,
a call to one of the [API Endpoints](#api-endpoints) will fail with a
400 - BadRequest - HTTP response.
## API Endpoints
| Endpoint | keyboard | serial console | virtio-block | virtio-net | virtio-vsock | virtio-rng |
| ------------------------- | :------: | :------------: | :----------: |:----------:| :----------: | :--------: |
| `boot-source` | O | O | O | O | O | O |
| `cpu-config` | O | O | O | O | O | O |
| `drives/{id}` | O | O | **R** | O | O | O |
| `logger` | O | O | O | O | O | O |
| `machine-config` | O | O | O | O | O | O |
| `metrics` | O | O | O | O | O | O |
| `mmds` | O | O | O | **R** | O | O |
| `mmds/config` | O | O | O | **R** | O | O |
| `network-interfaces/{id}` | O | O | O | **R** | O | O |
| `snapshot/create` | O | O | O | O | O | O |
| `snapshot/load` | O | O | O | O | O | O |
| `vm` | O | O | O | O | O | O |
| `vsock` | O | O | O | O | O | O |
| `entropy` | O | O | O | O | O | **R** |
## Input Schema
All input schema fields can be found in the [Swagger](https://swagger.io)
specification: [firecracker.yaml](./../src/api_server/swagger/firecracker.yaml).
| Schema | Property | keyboard | serial console | virtio-block | virtio-net | virtio-vsock | virtio-rng |
|----------------------------|-----------------------| :------: | :------------: | :----------: |:-------------:| :----------: | :--------: |
| `BootSource` | boot_args | O | O | O | O | O | O |
| | initrd_path | O | O | O | O | O | O |
| | kernel_image_path | O | O | O | O | O | O |
| `CpuConfig` | cpuid_modifiers | O | O | O | O | O | O |
| | msr_modifiers | O | O | O | O | O | O |
| | reg_modifiers | O | O | O | O | O | O |
| `CpuTemplate` | enum | O | O | O | O | O | O |
| `CreateSnapshotParams` | mem_file_path | O | O | O | O | O | O |
| | snapshot_path | O | O | O | O | O | O |
| | snapshot_type | O | O | O | O | O | O |
| | version | O | O | O | O | O | O |
| `Drive` | drive_id | O | O | **R** | O | O | O |
| | is_read_only | O | O | **R** | O | O | O |
| | is_root_device | O | O | **R** | O | O | O |
| | partuuid | O | O | **R** | O | O | O |
| | path_on_host | O | O | **R** | O | O | O |
| | rate_limiter | O | O | **R** | O | O | O |
| `InstanceActionInfo` | action_type | O | O | O | O | O | O |
| `LoadSnapshotParams` | enable_diff_snapshots | O | O | O | O | O | O |
| | mem_file_path | O | O | O | O | O | O |
| | mem_backend | O | O | O | O | O | O |
| | snapshot_path | O | O | O | O | O | O |
| | resume_vm | O | O | O | O | O | O |
| `Logger` | level | O | O | O | O | O | O |
| | log_path | O | O | O | O | O | O |
| | show_level | O | O | O | O | O | O |
| | show_log_origin | O | O | O | O | O | O |
| `MachineConfiguration` | cpu_template | O | O | O | O | O | O |
| | smt | O | O | O | O | O | O |
| | mem_size_mib | O | O | O | O | O | O |
| | track_dirty_pages | O | O | O | O | O | O |
| | vcpu_count | O | O | O | O | O | O |
| `Metrics` | metrics_path | O | O | O | O | O | O |
| `MmdsConfig` | network_interfaces | O | O | O | **R** | O | O |
| | version | O | O | O | **R** | O | O |
| | ipv4_address | O | O | O | **R** | O | O |
| `NetworkInterface` | guest_mac | O | O | O | **R** | O | O |
| | host_dev_name | O | O | O | **R** | O | O |
| | iface_id | O | O | O | **R** | O | O |
| | rx_rate_limiter | O | O | O | **R** | O | O |
| | tx_rate_limiter | O | O | O | **R** | O | O |
| `PartialDrive` | drive_id | O | O | **R** | O | O | O |
| | path_on_host | O | O | **R** | O | O | O |
| `PartialNetworkInterface` | iface_id | O | O | O | **R** | O | O |
| | rx_rate_limiter | O | O | O | **R** | O | O |
| | tx_rate_limiter | O | O | O | **R** | O | O |
| `RateLimiter` | bandwidth | O | O | O | **R** | O | O |
| | ops | O | O | **R** | O | O | O |
| `TokenBucket`\* | one_time_burst | O | O | **R** | O | O | O |
| | refill_time | O | O | **R** | O | O | O |
| | size | O | O | **R** | O | O | O |
| `TokenBucket`\* | one_time_burst | O | O | O | **R** | O | O |
| | refill_time | O | O | O | **R** | O | O |
| | size | O | O | O | **R** | O | O |
| `Vm` | state | O | O | O | O | O | O |
| `Vsock` | guest_cid | O | O | O | O | **R** | O |
| | uds_path | O | O | O | O | **R** | O |
| | vsock_id | O | O | O | O | **R** | O |
| `EntropyDevice` | rate_limiter | O | O | O | O | O | **R** |
\*: The `TokenBucket` can be configured with any combination of
virtio-net, virtio-block and virtio-rng devices.
## Output Schema
All output schema fields can be found in the [Swagger](https://swagger.io)
specification: [firecracker.yaml](./../src/api_server/swagger/firecracker.yaml).
| Schema | Property | keyboard | serial console | virtio-block | virtio-net | virtio-vsock |
| ---------------------- | ----------------- | :------: | :------------: | :----------: | :--------: | :----------: |
| `Error` | fault_message | O | O | O | O | O |
| `InstanceInfo` | app_name | O | O | O | O | O |
| | id | O | O | O | O | O |
| | state | O | O | O | O | O |
| | vmm_version | O | O | O | O | O |
| `MachineConfiguration` | cpu_template | O | O | O | O | O |
| | smt | O | O | O | O | O |
| | mem_size_mib | O | O | O | O | O |
| | track_dirty_pages | O | O | O | O | O |
| | vcpu_count | O | O | O | O | O |
## Instance Actions
All instance actions can be found in the [Swagger](https://swagger.io)
specification: [firecracker.yaml](./../src/api_server/swagger/firecracker.yaml).
| Action | keyboard | serial console | virtio-block | virtio-net | virtio-vsock |
| ---------------- | :------: | :------------: | :----------: | :--------: | :----------: |
| `FlushMetrics` | O | O | O | O | O |
| `InstanceStart` | O | O | O | O | O |
| `SendCtrlAltDel` | **R** | O | O | O | O |