1openapi: 3.0.1 2info: 3 title: Cloud Hypervisor API 4 description: Local HTTP based API for managing and inspecting a cloud-hypervisor virtual machine. 5 license: 6 name: Apache 2.0 7 url: http://www.apache.org/licenses/LICENSE-2.0.html 8 version: 0.3.0 9 10servers: 11 - url: http://localhost/api/v1 12 13paths: 14 /vmm.ping: 15 get: 16 summary: Ping the VMM to check for API server availability 17 responses: 18 200: 19 description: The VMM information 20 content: 21 application/json: 22 schema: 23 $ref: "#/components/schemas/VmmPingResponse" 24 25 /vmm.shutdown: 26 put: 27 summary: Shuts the cloud-hypervisor VMM. 28 operationId: shutdownVMM 29 responses: 30 204: 31 description: The VMM successfully shutdown. 32 33 /vm.info: 34 get: 35 summary: Returns general information about the cloud-hypervisor Virtual Machine (VM) instance. 36 responses: 37 200: 38 description: The VM information 39 content: 40 application/json: 41 schema: 42 $ref: "#/components/schemas/VmInfo" 43 44 /vm.counters: 45 get: 46 summary: Get counters from the VM 47 responses: 48 200: 49 description: The VM counters 50 content: 51 application/json: 52 schema: 53 $ref: "#/components/schemas/VmCounters" 54 55 /vm.create: 56 put: 57 summary: Create the cloud-hypervisor Virtual Machine (VM) instance. The instance is not booted, only created. 58 operationId: createVM 59 requestBody: 60 description: The VM configuration 61 content: 62 application/json: 63 schema: 64 $ref: "#/components/schemas/VmConfig" 65 required: true 66 responses: 67 204: 68 description: The VM instance was successfully created. 69 70 /vm.delete: 71 put: 72 summary: Delete the cloud-hypervisor Virtual Machine (VM) instance. 73 operationId: deleteVM 74 responses: 75 204: 76 description: The VM instance was successfully deleted. 77 78 /vm.boot: 79 put: 80 summary: Boot the previously created VM instance. 81 operationId: bootVM 82 responses: 83 204: 84 description: The VM instance successfully booted. 85 404: 86 description: The VM instance could not boot because it is not created yet 87 88 /vm.pause: 89 put: 90 summary: Pause a previously booted VM instance. 91 operationId: pauseVM 92 responses: 93 204: 94 description: The VM instance successfully paused. 95 404: 96 description: The VM instance could not pause because it is not created yet 97 405: 98 description: The VM instance could not pause because it is not booted. 99 100 /vm.resume: 101 put: 102 summary: Resume a previously paused VM instance. 103 operationId: resumeVM 104 responses: 105 204: 106 description: The VM instance successfully paused. 107 404: 108 description: The VM instance could not resume because it is not booted yet 109 405: 110 description: The VM instance could not resume because it is not paused. 111 112 /vm.shutdown: 113 put: 114 summary: Shut the VM instance down. 115 operationId: shutdownVM 116 responses: 117 204: 118 description: The VM instance successfully shut down. 119 404: 120 description: The VM instance could not shut down because is not created. 121 405: 122 description: The VM instance could not shut down because it is not started. 123 124 /vm.reboot: 125 put: 126 summary: Reboot the VM instance. 127 operationId: rebootVM 128 responses: 129 204: 130 description: The VM instance successfully rebooted. 131 404: 132 description: The VM instance could not reboot because it is not created. 133 405: 134 description: The VM instance could not reboot because it is not booted. 135 136 /vm.power-button: 137 put: 138 summary: Trigger a power button in the VM 139 operationId: power-buttonVM 140 responses: 141 204: 142 description: Power button successfully triggered in the VM 143 404: 144 description: The button could not be triggered because it is not created yet 145 405: 146 description: The button could not be triggered because it is not booted. 147 148 /vm.resize: 149 put: 150 summary: Resize the VM 151 requestBody: 152 description: The target size for the VM 153 content: 154 application/json: 155 schema: 156 $ref: "#/components/schemas/VmResize" 157 required: true 158 responses: 159 204: 160 description: The VM instance was successfully resized. 161 404: 162 description: The VM instance could not be resized because it is not created. 163 164 /vm.resize-zone: 165 put: 166 summary: Resize a memory zone 167 requestBody: 168 description: The target size for the memory zone 169 content: 170 application/json: 171 schema: 172 $ref: "#/components/schemas/VmResizeZone" 173 required: true 174 responses: 175 204: 176 description: The memory zone was successfully resized. 177 500: 178 description: The memory zone could not be resized. 179 180 /vm.add-device: 181 put: 182 summary: Add a new device to the VM 183 requestBody: 184 description: The path of the new device 185 content: 186 application/json: 187 schema: 188 $ref: "#/components/schemas/DeviceConfig" 189 required: true 190 responses: 191 200: 192 description: The new device was successfully added to the VM instance. 193 content: 194 application/json: 195 schema: 196 $ref: "#/components/schemas/PciDeviceInfo" 197 204: 198 description: The new device was successfully (cold) added to the VM instance. 199 404: 200 description: The new device could not be added to the VM instance. 201 202 /vm.remove-device: 203 put: 204 summary: Remove a device from the VM 205 requestBody: 206 description: The identifier of the device 207 content: 208 application/json: 209 schema: 210 $ref: "#/components/schemas/VmRemoveDevice" 211 required: true 212 responses: 213 204: 214 description: The device was successfully removed from the VM instance. 215 404: 216 description: The device could not be removed from the VM instance. 217 218 /vm.add-disk: 219 put: 220 summary: Add a new disk to the VM 221 requestBody: 222 description: The details of the new disk 223 content: 224 application/json: 225 schema: 226 $ref: "#/components/schemas/DiskConfig" 227 required: true 228 responses: 229 200: 230 description: The new disk was successfully added to the VM instance. 231 content: 232 application/json: 233 schema: 234 $ref: "#/components/schemas/PciDeviceInfo" 235 204: 236 description: The new disk was successfully (cold) added to the VM instance. 237 500: 238 description: The new disk could not be added to the VM instance. 239 240 /vm.add-fs: 241 put: 242 summary: Add a new virtio-fs device to the VM 243 requestBody: 244 description: The details of the new virtio-fs 245 content: 246 application/json: 247 schema: 248 $ref: "#/components/schemas/FsConfig" 249 required: true 250 responses: 251 200: 252 description: The new device was successfully added to the VM instance. 253 content: 254 application/json: 255 schema: 256 $ref: "#/components/schemas/PciDeviceInfo" 257 204: 258 description: The new device was successfully (cold) added to the VM instance. 259 500: 260 description: The new device could not be added to the VM instance. 261 262 /vm.add-pmem: 263 put: 264 summary: Add a new pmem device to the VM 265 requestBody: 266 description: The details of the new pmem device 267 content: 268 application/json: 269 schema: 270 $ref: "#/components/schemas/PmemConfig" 271 required: true 272 responses: 273 200: 274 description: The new device was successfully added to the VM instance. 275 content: 276 application/json: 277 schema: 278 $ref: "#/components/schemas/PciDeviceInfo" 279 204: 280 description: The new device was successfully (cold) added to the VM instance. 281 500: 282 description: The new device could not be added to the VM instance. 283 284 /vm.add-net: 285 put: 286 summary: Add a new network device to the VM 287 requestBody: 288 description: The details of the new network device 289 content: 290 application/json: 291 schema: 292 $ref: "#/components/schemas/NetConfig" 293 required: true 294 responses: 295 200: 296 description: The new device was successfully added to the VM instance. 297 content: 298 application/json: 299 schema: 300 $ref: "#/components/schemas/PciDeviceInfo" 301 204: 302 description: The new device was successfully (cold) added to the VM instance. 303 500: 304 description: The new device could not be added to the VM instance. 305 306 /vm.add-vsock: 307 put: 308 summary: Add a new vsock device to the VM 309 requestBody: 310 description: The details of the new vsock device 311 content: 312 application/json: 313 schema: 314 $ref: "#/components/schemas/VsockConfig" 315 required: true 316 responses: 317 200: 318 description: The new device was successfully added to the VM instance. 319 content: 320 application/json: 321 schema: 322 $ref: "#/components/schemas/PciDeviceInfo" 323 204: 324 description: The new device was successfully (cold) added to the VM instance. 325 500: 326 description: The new device could not be added to the VM instance. 327 328 /vm.add-vdpa: 329 put: 330 summary: Add a new vDPA device to the VM 331 requestBody: 332 description: The details of the new vDPA device 333 content: 334 application/json: 335 schema: 336 $ref: "#/components/schemas/VdpaConfig" 337 required: true 338 responses: 339 200: 340 description: The new vDPA device was successfully added to the VM instance. 341 content: 342 application/json: 343 schema: 344 $ref: "#/components/schemas/PciDeviceInfo" 345 204: 346 description: The new vDPA device was successfully (cold) added to the VM instance. 347 500: 348 description: The new vDPA device could not be added to the VM instance. 349 350 /vm.snapshot: 351 put: 352 summary: Returns a VM snapshot. 353 requestBody: 354 description: The snapshot configuration 355 content: 356 application/json: 357 schema: 358 $ref: "#/components/schemas/VmSnapshotConfig" 359 required: true 360 responses: 361 204: 362 description: The VM instance was successfully snapshotted. 363 404: 364 description: The VM instance could not be snapshotted because it is not created. 365 405: 366 description: The VM instance could not be snapshotted because it is not booted. 367 368 /vm.coredump: 369 put: 370 summary: Takes a VM coredump. 371 requestBody: 372 description: The coredump configuration 373 content: 374 application/json: 375 schema: 376 $ref: "#/components/schemas/VmCoredumpData" 377 required: true 378 responses: 379 204: 380 description: The VM instance was successfully coredumped. 381 404: 382 description: The VM instance could not be coredumped because it is not created. 383 405: 384 description: The VM instance could not be coredumped because it is not booted. 385 386 /vm.restore: 387 put: 388 summary: Restore a VM from a snapshot. 389 requestBody: 390 description: The restore configuration 391 content: 392 application/json: 393 schema: 394 $ref: "#/components/schemas/RestoreConfig" 395 required: true 396 responses: 397 204: 398 description: The VM instance was successfully restored. 399 404: 400 description: The VM instance could not be restored because it is already created. 401 402 /vm.receive-migration: 403 put: 404 summary: Receive a VM migration from URL 405 requestBody: 406 description: The URL for the reception of migration state 407 content: 408 application/json: 409 schema: 410 $ref: "#/components/schemas/ReceiveMigrationData" 411 required: true 412 responses: 413 204: 414 description: The VM migration was successfully received. 415 500: 416 description: The VM migration could not be received. 417 418 /vm.send-migration: 419 put: 420 summary: Send a VM migration to URL 421 requestBody: 422 description: The URL for sending the migration state 423 content: 424 application/json: 425 schema: 426 $ref: "#/components/schemas/SendMigrationData" 427 required: true 428 responses: 429 204: 430 description: The VM migration was successfully sent. 431 500: 432 description: The VM migration could not be sent. 433 434components: 435 schemas: 436 VmmPingResponse: 437 required: 438 - version 439 type: object 440 properties: 441 version: 442 type: string 443 description: Virtual Machine Monitor information 444 445 VmInfo: 446 required: 447 - config 448 - state 449 type: object 450 properties: 451 config: 452 $ref: "#/components/schemas/VmConfig" 453 state: 454 type: string 455 enum: [Created, Running, Shutdown, Paused] 456 memory_actual_size: 457 type: integer 458 format: int64 459 device_tree: 460 type: object 461 additionalProperties: 462 $ref: "#/components/schemas/DeviceNode" 463 description: Virtual Machine information 464 465 DeviceNode: 466 type: object 467 properties: 468 id: 469 type: string 470 resources: 471 type: array 472 items: 473 # Rust enum type (with data) which can't be better represented here 474 type: object 475 children: 476 type: array 477 items: 478 type: string 479 pci_bdf: 480 type: string 481 482 VmCounters: 483 type: object 484 additionalProperties: 485 type: object 486 additionalProperties: 487 type: integer 488 format: int64 489 490 PciDeviceInfo: 491 required: 492 - id 493 - bdf 494 type: object 495 properties: 496 id: 497 type: string 498 bdf: 499 type: string 500 description: Information about a PCI device 501 502 PayloadConfig: 503 type: object 504 properties: 505 firmware: 506 type: string 507 kernel: 508 type: string 509 cmdline: 510 type: string 511 initramfs: 512 type: string 513 description: Payloads to boot in guest 514 515 VmConfig: 516 required: 517 - payload 518 type: object 519 properties: 520 cpus: 521 $ref: "#/components/schemas/CpusConfig" 522 memory: 523 $ref: "#/components/schemas/MemoryConfig" 524 payload: 525 $ref: "#/components/schemas/PayloadConfig" 526 disks: 527 type: array 528 items: 529 $ref: "#/components/schemas/DiskConfig" 530 net: 531 type: array 532 items: 533 $ref: "#/components/schemas/NetConfig" 534 rng: 535 $ref: "#/components/schemas/RngConfig" 536 balloon: 537 $ref: "#/components/schemas/BalloonConfig" 538 fs: 539 type: array 540 items: 541 $ref: "#/components/schemas/FsConfig" 542 pmem: 543 type: array 544 items: 545 $ref: "#/components/schemas/PmemConfig" 546 serial: 547 $ref: "#/components/schemas/ConsoleConfig" 548 console: 549 $ref: "#/components/schemas/ConsoleConfig" 550 devices: 551 type: array 552 items: 553 $ref: "#/components/schemas/DeviceConfig" 554 vdpa: 555 type: array 556 items: 557 $ref: "#/components/schemas/VdpaConfig" 558 vsock: 559 $ref: "#/components/schemas/VsockConfig" 560 sgx_epc: 561 type: array 562 items: 563 $ref: "#/components/schemas/SgxEpcConfig" 564 numa: 565 type: array 566 items: 567 $ref: "#/components/schemas/NumaConfig" 568 iommu: 569 type: boolean 570 default: false 571 watchdog: 572 type: boolean 573 default: false 574 platform: 575 $ref: "#/components/schemas/PlatformConfig" 576 tpm: 577 $ref: "#/components/schemas/TpmConfig" 578 description: Virtual machine configuration 579 580 CpuAffinity: 581 type: object 582 properties: 583 vcpu: 584 type: integer 585 host_cpus: 586 type: array 587 items: 588 type: integer 589 590 CpuFeatures: 591 type: object 592 properties: 593 amx: 594 type: boolean 595 596 CpuTopology: 597 type: object 598 properties: 599 threads_per_core: 600 type: integer 601 cores_per_die: 602 type: integer 603 dies_per_package: 604 type: integer 605 packages: 606 type: integer 607 608 CpusConfig: 609 required: 610 - boot_vcpus 611 - max_vcpus 612 type: object 613 properties: 614 boot_vcpus: 615 minimum: 1 616 default: 1 617 type: integer 618 max_vcpus: 619 minimum: 1 620 default: 1 621 type: integer 622 topology: 623 $ref: "#/components/schemas/CpuTopology" 624 kvm_hyperv: 625 type: boolean 626 default: false 627 max_phys_bits: 628 type: integer 629 affinity: 630 type: array 631 items: 632 $ref: "#/components/schemas/CpuAffinity" 633 features: 634 $ref: "#/components/schemas/CpuFeatures" 635 636 PlatformConfig: 637 type: object 638 properties: 639 num_pci_segments: 640 type: integer 641 format: int16 642 iommu_segments: 643 type: array 644 items: 645 type: integer 646 format: int16 647 serial_number: 648 type: string 649 uuid: 650 type: string 651 oem_strings: 652 type: array 653 items: 654 type: string 655 tdx: 656 type: boolean 657 default: false 658 659 MemoryZoneConfig: 660 required: 661 - id 662 - size 663 type: object 664 properties: 665 id: 666 type: string 667 size: 668 type: integer 669 format: int64 670 default: 512 MB 671 mergeable: 672 type: boolean 673 default: false 674 shared: 675 type: boolean 676 default: false 677 hugepages: 678 type: boolean 679 default: false 680 hugepage_size: 681 type: integer 682 format: int64 683 host_numa_node: 684 type: integer 685 format: int32 686 hotplug_size: 687 type: integer 688 format: int64 689 hotplugged_size: 690 type: integer 691 format: int64 692 prefault: 693 type: boolean 694 default: false 695 696 MemoryConfig: 697 required: 698 - size 699 type: object 700 properties: 701 size: 702 type: integer 703 format: int64 704 default: 512 MB 705 hotplug_size: 706 type: integer 707 format: int64 708 hotplugged_size: 709 type: integer 710 format: int64 711 mergeable: 712 type: boolean 713 default: false 714 hotplug_method: 715 type: string 716 default: "Acpi" 717 shared: 718 type: boolean 719 default: false 720 hugepages: 721 type: boolean 722 default: false 723 hugepage_size: 724 type: integer 725 format: int64 726 prefault: 727 type: boolean 728 default: false 729 thp: 730 type: boolean 731 default: true 732 zones: 733 type: array 734 items: 735 $ref: "#/components/schemas/MemoryZoneConfig" 736 737 TokenBucket: 738 required: 739 - size 740 - refill_time 741 type: object 742 properties: 743 size: 744 type: integer 745 format: int64 746 minimum: 0 747 description: The total number of tokens this bucket can hold. 748 one_time_burst: 749 type: integer 750 format: int64 751 minimum: 0 752 description: The initial size of a token bucket. 753 refill_time: 754 type: integer 755 format: int64 756 minimum: 0 757 description: The amount of milliseconds it takes for the bucket to refill. 758 description: 759 Defines a token bucket with a maximum capacity (_size_), an initial burst size 760 (_one_time_burst_) and an interval for refilling purposes (_refill_time_). 761 The refill-rate is derived from _size_ and _refill_time_, and it is the constant 762 rate at which the tokens replenish. The refill process only starts happening after 763 the initial burst budget is consumed. 764 Consumption from the token bucket is unbounded in speed which allows for bursts 765 bound in size by the amount of tokens available. 766 Once the token bucket is empty, consumption speed is bound by the refill-rate. 767 768 RateLimiterConfig: 769 type: object 770 properties: 771 bandwidth: 772 $ref: "#/components/schemas/TokenBucket" 773 ops: 774 $ref: "#/components/schemas/TokenBucket" 775 description: 776 Defines an IO rate limiter with independent bytes/s and ops/s limits. 777 Limits are defined by configuring each of the _bandwidth_ and _ops_ token buckets. 778 779 DiskConfig: 780 required: 781 - path 782 type: object 783 properties: 784 path: 785 type: string 786 readonly: 787 type: boolean 788 default: false 789 direct: 790 type: boolean 791 default: false 792 iommu: 793 type: boolean 794 default: false 795 num_queues: 796 type: integer 797 default: 1 798 queue_size: 799 type: integer 800 default: 128 801 vhost_user: 802 type: boolean 803 default: false 804 vhost_socket: 805 type: string 806 rate_limiter_config: 807 $ref: "#/components/schemas/RateLimiterConfig" 808 pci_segment: 809 type: integer 810 format: int16 811 id: 812 type: string 813 814 NetConfig: 815 type: object 816 properties: 817 tap: 818 type: string 819 ip: 820 type: string 821 default: "192.168.249.1" 822 mask: 823 type: string 824 default: "255.255.255.0" 825 mac: 826 type: string 827 host_mac: 828 type: string 829 mtu: 830 type: integer 831 iommu: 832 type: boolean 833 default: false 834 num_queues: 835 type: integer 836 default: 2 837 queue_size: 838 type: integer 839 default: 256 840 vhost_user: 841 type: boolean 842 default: false 843 vhost_socket: 844 type: string 845 vhost_mode: 846 type: string 847 default: "Client" 848 id: 849 type: string 850 pci_segment: 851 type: integer 852 format: int16 853 rate_limiter_config: 854 $ref: "#/components/schemas/RateLimiterConfig" 855 856 RngConfig: 857 required: 858 - src 859 type: object 860 properties: 861 src: 862 type: string 863 default: "/dev/urandom" 864 iommu: 865 type: boolean 866 default: false 867 868 BalloonConfig: 869 required: 870 - size 871 type: object 872 properties: 873 size: 874 type: integer 875 format: int64 876 deflate_on_oom: 877 type: boolean 878 default: false 879 description: Deflate balloon when the guest is under memory pressure. 880 free_page_reporting: 881 type: boolean 882 default: false 883 description: Enable guest to report free pages. 884 885 FsConfig: 886 required: 887 - num_queues 888 - queue_size 889 - socket 890 - tag 891 type: object 892 properties: 893 tag: 894 type: string 895 socket: 896 type: string 897 num_queues: 898 type: integer 899 default: 1 900 queue_size: 901 type: integer 902 default: 1024 903 pci_segment: 904 type: integer 905 format: int16 906 id: 907 type: string 908 909 PmemConfig: 910 required: 911 - file 912 type: object 913 properties: 914 file: 915 type: string 916 size: 917 type: integer 918 format: int64 919 iommu: 920 type: boolean 921 default: false 922 discard_writes: 923 type: boolean 924 default: false 925 pci_segment: 926 type: integer 927 format: int16 928 id: 929 type: string 930 931 ConsoleConfig: 932 required: 933 - mode 934 type: object 935 properties: 936 file: 937 type: string 938 mode: 939 type: string 940 enum: [Off, Pty, Tty, File, Null] 941 iommu: 942 type: boolean 943 default: false 944 945 DeviceConfig: 946 required: 947 - path 948 type: object 949 properties: 950 path: 951 type: string 952 iommu: 953 type: boolean 954 default: false 955 pci_segment: 956 type: integer 957 format: int16 958 id: 959 type: string 960 961 TpmConfig: 962 required: 963 - socket 964 type: object 965 properties: 966 socket: 967 type: string 968 969 VdpaConfig: 970 required: 971 - path 972 - num_queues 973 type: object 974 properties: 975 path: 976 type: string 977 num_queues: 978 type: integer 979 default: 1 980 iommu: 981 type: boolean 982 default: false 983 pci_segment: 984 type: integer 985 format: int16 986 id: 987 type: string 988 989 VsockConfig: 990 required: 991 - cid 992 - socket 993 type: object 994 properties: 995 cid: 996 type: integer 997 format: int64 998 minimum: 3 999 description: Guest Vsock CID 1000 socket: 1001 type: string 1002 description: Path to UNIX domain socket, used to proxy vsock connections. 1003 iommu: 1004 type: boolean 1005 default: false 1006 pci_segment: 1007 type: integer 1008 format: int16 1009 id: 1010 type: string 1011 1012 SgxEpcConfig: 1013 required: 1014 - id 1015 - size 1016 type: object 1017 properties: 1018 id: 1019 type: string 1020 size: 1021 type: integer 1022 format: int64 1023 prefault: 1024 type: boolean 1025 default: false 1026 1027 NumaDistance: 1028 required: 1029 - destination 1030 - distance 1031 type: object 1032 properties: 1033 destination: 1034 type: integer 1035 format: int32 1036 distance: 1037 type: integer 1038 format: int32 1039 1040 NumaConfig: 1041 required: 1042 - guest_numa_id 1043 type: object 1044 properties: 1045 guest_numa_id: 1046 type: integer 1047 format: int32 1048 cpus: 1049 type: array 1050 items: 1051 type: integer 1052 format: int32 1053 distances: 1054 type: array 1055 items: 1056 $ref: "#/components/schemas/NumaDistance" 1057 memory_zones: 1058 type: array 1059 items: 1060 type: string 1061 sgx_epc_sections: 1062 type: array 1063 items: 1064 type: string 1065 1066 VmResize: 1067 type: object 1068 properties: 1069 desired_vcpus: 1070 minimum: 1 1071 type: integer 1072 desired_ram: 1073 description: desired memory ram in bytes 1074 type: integer 1075 format: int64 1076 desired_balloon: 1077 description: desired balloon size in bytes 1078 type: integer 1079 format: int64 1080 1081 VmResizeZone: 1082 type: object 1083 properties: 1084 id: 1085 type: string 1086 desired_ram: 1087 description: desired memory zone size in bytes 1088 type: integer 1089 format: int64 1090 1091 VmRemoveDevice: 1092 type: object 1093 properties: 1094 id: 1095 type: string 1096 1097 VmSnapshotConfig: 1098 type: object 1099 properties: 1100 destination_url: 1101 type: string 1102 1103 VmCoredumpData: 1104 type: object 1105 properties: 1106 destination_url: 1107 type: string 1108 1109 RestoreConfig: 1110 required: 1111 - source_url 1112 type: object 1113 properties: 1114 source_url: 1115 type: string 1116 prefault: 1117 type: boolean 1118 1119 ReceiveMigrationData: 1120 required: 1121 - receiver_url 1122 type: object 1123 properties: 1124 receiver_url: 1125 type: string 1126 1127 SendMigrationData: 1128 required: 1129 - destination_url 1130 type: object 1131 properties: 1132 destination_url: 1133 type: string 1134 local: 1135 type: boolean 1136