{"components":{"responses":{"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Error","x-scope":["","#/components/responses/400"]},{"$ref":"#/components/schemas/MultiError","x-scope":["","#/components/responses/400"]}]}}},"description":"Input data was invalid"},"401":{"content":{"application/json":{"schema":{"properties":{"detail":{"description":"Verbose error message explaining the error","type":"string"}},"type":"object"}}},"description":"No / invalid token provided"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error","x-scope":["","#/components/responses/403"]}}},"description":"Permission denied for this user"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error","x-scope":["","#/components/responses/404"]}}},"description":"One of the specified resources could not be found"}},"schemas":{"BOM":{"properties":{"quantity":{"description":"How many units of a billable entity that a Resource utilises","type":"integer"},"sku_name":{"description":"An identifier for a billable entity that a Resource utilises","type":"string"}},"required":["quantity","sku_name"],"type":"object"},"BOMList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":[""]},"content":{"items":{"$ref":"#/components/schemas/BOM","x-scope":[""]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"BOMResponse":{"properties":{"content":{"$ref":"#/components/schemas/BOM","x-scope":[""]}},"type":"object"},"BaseIPAddress":{"properties":{"address":{"description":"The IP address of the IPAddress record.","type":"string"},"created":{"description":"Timestamp, in ISO format, of when the IPAddress record was created.","type":"string"},"id":{"description":"The ID of the IPAddress record.","type":"integer"},"name":{"description":"A verbose name given to the IPAddress record.","type":"string"},"notes":{"description":"The note attached to IPAddress that made it.","type":"string"},"public_ip":{"$ref":"#/components/schemas/NATIPAddress","x-scope":["","#/components/schemas/NetworkRoutersList","#/components/schemas/NetworkRouters","#/components/schemas/RouterMetadata","#/components/schemas/BaseIPAddress"]},"public_ip_id":{"description":"The ID of the Public IPAddress record.","type":"integer"},"subnet_id":{"description":"The ID of the Subnet record.","type":"integer"},"updated":{"description":"Timestamp, in ISO format, of when the IPAddress record was last updated.","type":"string"}},"required":["address","created","id","name","notes","public_ip_id","subnet_id","updated","public_ip"],"type":"object"},"BaseIPAddressList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":[""]},"content":{"items":{"$ref":"#/components/schemas/BaseIPAddress","x-scope":[""]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"BaseIPAddressResponse":{"properties":{"content":{"$ref":"#/components/schemas/BaseIPAddress","x-scope":[""]}},"type":"object"},"ComputeBackups":{"properties":{"created":{"description":"Timestamp, in ISO format, of when the Compute Backups record was created.","type":"string"},"id":{"description":"The ID of the Compute Backups record","type":"integer"},"instance":{"description":"The Compute Instance the Compute Backup record is of.","properties":{"id":{"description":"The ID of the Compute Instance the Compute Backup is of.","type":"integer"},"name":{"description":"The user-friendly name of the Compute Instance the Compute Backup is of.\n","type":"string"},"state":{"description":"The current state of the Compute Instance the Compute Backup is of.\n","type":"string"}},"type":"object"},"name":{"description":"The user-friendly name given to this Compute Backups instance","type":"string"},"project_id":{"description":"The id of the Project that this Compute Backups belongs to","type":"integer"},"specs":{"description":"An array of the specs for the Compute Backups","items":{"$ref":"#/components/schemas/BOM","x-scope":["","#/components/schemas/ComputeBackupsList","#/components/schemas/ComputeBackups"]},"type":"array"},"state":{"description":"The current state of the Compute Backups","type":"string"},"type":{"description":"The type of the Compute Backups","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Compute Backups record was last updated.","type":"string"},"uri":{"description":"URL that can be used to run methods in the API associated with the Compute Backups instance.","format":"url","type":"string"}},"required":["created","id","instance","name","project_id","specs","state","type","updated","uri"],"type":"object"},"ComputeBackupsCreate":{"properties":{"instance_id":{"description":"The id of the Compute Instance the Compute Backup is to be taken of.","type":"integer"},"name":{"description":"The user-friendly name for the Compute Backup. If not sent, it will default to the name\n\"Backup HyperV\" or \"Backup LXD\" depending on the type chosen.\n","type":"string"},"project_id":{"description":"The ID of the User's Project into which this new Compute Backups should be added.","type":"integer"},"type":{"description":"The type of Compute Backup to create. Valid options are:\n- \"hyperv\"\n- \"lxd\"\n","type":"string"}},"required":["project_id","instance_id"],"type":"object"},"ComputeBackupsList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/ComputeBackupsList"]},"content":{"items":{"$ref":"#/components/schemas/ComputeBackups","x-scope":["","#/components/schemas/ComputeBackupsList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"ComputeBackupsResponse":{"properties":{"content":{"$ref":"#/components/schemas/ComputeBackups","x-scope":["","#/components/schemas/ComputeBackupsResponse"]}},"type":"object"},"ComputeBackupsUpdate":{"properties":{"name":{"description":"The user-friendly name for the Compute Backups Resource. If not sent, it will default to the\ncurrent name.\n","type":"string"},"state":{"description":"Change the state of the Compute Backup, triggering the CloudCIX Robot to perform the requested action.\nUsers can only request state changes from certain current states:\n\n- running -> delete\n","type":"string"}},"type":"object"},"ComputeGPUs":{"properties":{"created":{"description":"Timestamp, in ISO format, of when the Compute GPU record was created.","type":"string"},"id":{"description":"The ID of the Compute GPU record","type":"integer"},"instance":{"description":"The \"lxd\" Compute Instance the Compute GPU is attached to.","properties":{"id":{"description":"The ID of the \"lxd\" Compute Instance the Compute GPU is attached to.","type":"integer"},"name":{"description":"The user-friendly name of the \"lxd\" Compute Instance the Compute GPU is attached to.\n","type":"string"},"state":{"description":"The current state of the \"lxd\" Compute Instance the Compute GPU is attached to.\n","type":"string"}},"type":"object"},"name":{"description":"The user-friendly name given to this Compute GPU","type":"string"},"project_id":{"description":"The id of the Project that this Compute GPU belongs to","type":"integer"},"specs":{"description":"An array of the specs for the Compute GPU","items":{"$ref":"#/components/schemas/BOM","x-scope":["","#/components/schemas/ComputeGPUsList","#/components/schemas/ComputeGPUs"]},"type":"array"},"state":{"description":"The current state of the Compute GPU","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Compute GPU record was last updated.","type":"string"},"uri":{"description":"URL that can be used to run methods in the API associated with the Compute GPU instance.","format":"url","type":"string"}},"required":["created","id","instance","name","project_id","specs","state","updated","uri"],"type":"object"},"ComputeGPUsCreate":{"properties":{"instance_id":{"description":"The ID of the LXD Resource the GPU is requested to be mounted to.","example":456,"type":"integer"},"name":{"description":"The user-friendly name for the Compute GPU. If not sent, it will default to the name 'GPU'","example":"HighPerformance-GPU","type":"string"},"project_id":{"description":"The ID of the Project which this GPU Resource should be in.","example":123,"type":"integer"},"specs":{"description":"List of specs (SKUs) for the GPU resource.","example":[{"sku_name":"A100_GPU"}],"items":{"properties":{"sku_name":{"description":"The name of the SKU for the GPU","type":"string"}},"type":"object"},"type":"array"}},"required":["project_id","instance_id","specs"],"type":"object"},"ComputeGPUsList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/ComputeGPUsList"]},"content":{"items":{"$ref":"#/components/schemas/ComputeGPUs","x-scope":["","#/components/schemas/ComputeGPUsList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"ComputeGPUsResponse":{"properties":{"content":{"$ref":"#/components/schemas/ComputeGPUs","x-scope":["","#/components/schemas/ComputeGPUsResponse"]}},"type":"object"},"ComputeGPUsUpdate":{"properties":{"name":{"description":"The user-friendly name for the GPU Resource.","example":"HighPerformance-GPU","type":"string"},"state":{"description":"Change the state of the Compute GPU, triggering the CloudCIX Robot to perform the requested action.\n\nTo detach a Compute GPU from an lxd Compute Instance, send request to change the state to delete\n","type":"string"}},"type":"object"},"ComputeImages":{"properties":{"filename":{"description":"The name of the file containing the Image.","type":"string"},"id":{"description":"The ID of the Image.","type":"integer"},"os_variant":{"description":"Is a unique word to define each Image.","type":"string"},"protocol":{"description":"The protocl for images supported by LXD Hypervisor device types.","type":"string"},"sku_name":{"description":"The SKU for the Image.","type":"string"}},"required":["filename","id","os_variant","protocol","sku_name"],"type":"object"},"ComputeImagesList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/ComputeImagesList"]},"content":{"items":{"$ref":"#/components/schemas/ComputeImages","x-scope":["","#/components/schemas/ComputeImagesList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"ComputeImagesResponse":{"properties":{"content":{"$ref":"#/components/schemas/ComputeImages","x-scope":["","#/components/schemas/ComputeImagesResponse"]}},"type":"object"},"ComputeInstances":{"properties":{"created":{"description":"Timestamp, in ISO format, of when the Compute Instance record was created.","type":"string"},"grace_period":{"description":"Number of days after a user sets the state of the Compute Instance Resource to Scrub (8) before it is\nexecuted by robot.\n","type":"integer"},"id":{"description":"The ID of the Compute Instance record","type":"integer"},"interfaces":{"description":"Array of the interfaces for the Compute Instance","items":{"properties":{"gateway":{"description":"Indicates if this interface functions as the network gateway for the Compute instance.","type":"boolean"},"ipv4_addresses":{"description":"An array of the IPv4 addresses on the Interface.","items":{"properties":{"address":{"description":"The IP address on the  Interface.","type":"string"},"id":{"description":"The ID of the IP Address record on the Interface.","type":"integer"},"nat":{"description":"Flag indicating if the IP Address is NATted to a Public IP Address\n","type":"boolean"},"public_ip":{"description":"The Public IP address that the address is NATted to.","type":"string"}},"type":"object"},"type":"array"},"ipv6_addresses":{"description":"An array of the IPv6 addresses on the Interface.","items":{"properties":{"address":{"description":"The IP address on the Interface.","type":"string"},"id":{"description":"The ID of the IP Address record on the Interface.","type":"integer"}},"type":"object"},"type":"array"},"vlan":{"description":"The VLAN assigned to this Interface","type":"integer"}},"type":"object"},"type":"array"},"metadata":{"description":"The metadata details of the Compute Instance","properties":{"dns":{"description":"DNS server IP addresses for the Compute Instance.  Returned if the type is \"lxd\".","type":"string"},"dns4":{"description":"Primary DNS server IPv4 address for the VM.  Returned if the type is \"hyperv\".","type":"string"},"dns6":{"description":"Primary DNS server IPv6 address for the VM. Returned if the type is \"hyperv\".","type":"string"},"instance_type":{"description":"The name of the instance type. It will be either \"container\" or \"vm\". Returned if the type is \"lxd\".\n","type":"string"},"userdata":{"description":"Configuration file to be used by Cloud Init. Returned if the type is \"lxd\".","type":"string"}},"type":"object"},"name":{"description":"The human-friendly name given to this Compute Instance","type":"string"},"project_id":{"description":"The id of the Project that this Compute Instance belongs to","type":"integer"},"specs":{"$ref":"#/components/schemas/BOM","x-scope":["","#/components/schemas/ComputeInstancesList","#/components/schemas/ComputeInstances"]},"state":{"description":"The current state of the Compute Instance","type":"string"},"type":{"description":"The type of the Compute Instance","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Compute Instance record was last updated.","type":"string"},"uri":{"description":"URL that can be used to run methods in the API associated with the Compute Instance.","format":"url","type":"string"}},"required":["created","grace_period","id","interfaces","metadata","name","project_id","specs","state","type","updated","uri"],"type":"object"},"ComputeInstancesCreate":{"properties":{"grace_period":{"description":"The number of days after a Compute Intsance is closed before it is permanently deleted.","type":"integer"},"interfaces":{"description":"Optional. A list of network interfaces that represent the interfaces that will be configured on the LXD\ninstance.\n","items":{"properties":{"gateway":{"description":"Flag representing if this interface will be the Gateway Interface to the Public\nInternet.\n","type":"boolean"},"ipv4_addresses":{"description":"A list of IPv4 address objects to be assigned to this interface. All addresses in this list\nmust be from the same network.\n","items":{"properties":{"address":{"description":"An RFC1918 IPv4 address to be configured on this interface on\nthe Compute Instance instance.\n","type":"string"},"nat":{"description":"Optional, Flag indicating if this address should be NATted to a Public IP Address.\nIf not sent, it will default to False.\n","type":"boolean"}},"type":"object"},"type":"array"},"ipv6_addresses":{"description":"A list of IPv6 address objects to be assigned to this interface. All addresses in this list\nmust be from the same network as the `ipv4_addresses`.\n","items":{"properties":{"address":{"description":"An IPv6 address to be configured on this interface\non the Compute Instance instance.\n","type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"type":"array"},"metadata":{"description":"Optional. The metadata required to configure in an Compute Instance.","properties":{"dns":{"description":"Optional. A string containing IP Addresses, separated by commas, that represent the DNS servers\nthat the Compute Instance will use.\n","type":"string"},"instance_type":{"description":"Optional, The Compute Instance instance type of the VM. Valid options\nare \"container\" or \"virtual-machine\". If not sent it will default to \"container\".\n","type":"string"},"userdata":{"description":"Cloud Init allows Mime Multi-part messages, or files that start with a given set of strings. It is\na requirement to configure at minimum one user with a password or ssh key that is in the sudo group.\n\nReference: https://cloudinit.readthedocs.io/en/latest/explanation/format.html\n\nA hashed password can be generated using `openssl passwd -6 'yourpassword'`\n\nExample:\n```yaml\n#cloud-config\nusers:\n  - name: administrator\n    groups: sudo\n    shell: /bin/bash\n    lock_passwd: false\n    passwd: < HASHED PASWWORD >\n    ssh_authorized_keys:\n      - < HASHED PASWWORD >\nchpasswd:\n  expire: false\nssh_pwauth: true\n```\n","type":"string"}},"type":"object"},"name":{"description":"The user-friendly name for the Compute Intsance type. If not sent and the type is \"lxd\", it will default\nto the name 'LXD'. If not sent and the type is \"hyperv\", it will default to the name 'HyperV'.\n","type":"string"},"project_id":{"description":"The ID of the Project which this Compute Intsance Resource should be in.","type":"integer"},"specs":{"description":"List of specs (SKUs) for the Compute Instance resource.","items":{"properties":{"quantity":{"description":"The quantity of the SKU to configure the Compute Instance instance with.","type":"integer"},"sku_name":{"description":"The name of the SKU to configure on the Compute Instance instacne","type":"string"}},"type":"object"},"type":"array"},"type":{"description":"The type of Compute Instance to create. Valid options are:\n- \"hyperv\"\n- \"lxd\"\n","type":"string"}},"required":["project_id","metadata","specs"],"type":"object"},"ComputeInstancesList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/ComputeInstancesList"]},"content":{"items":{"$ref":"#/components/schemas/ComputeInstances","x-scope":["","#/components/schemas/ComputeInstancesList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"ComputeInstancesResponse":{"properties":{"content":{"$ref":"#/components/schemas/ComputeInstances","x-scope":["","#/components/schemas/ComputeInstancesResponse"]}},"type":"object"},"ComputeInstancesUpdate":{"properties":{"grace_period":{"description":"The number of days after a Compute Intsance is closed before it is permanently deleted.","type":"integer"},"interfaces":{"description":"Optional. A list of network interfaces that represent the interfaces that will be configured on the LXD\ninstance.\n","items":{"properties":{"gateway":{"description":"Flag representing if this interface will be the Gateway Interface to the Public\nInternet.\n","type":"boolean"},"ipv4_addresses":{"description":"A list of IPv4 address objects to be assigned to this interface. All addresses in this list\nmust be from the same network.\n","items":{"properties":{"address":{"description":"An RFC1918 IPv4 address to be configured on this interface on\nthe Compute Instance instance.\n","type":"string"},"nat":{"description":"Optional, Flag indicating if this address should be NATted to a Public IP Address.\nIf not sent, it will default to False.\n","type":"boolean"}},"type":"object"},"type":"array"},"ipv6_addresses":{"description":"A list of IPv6 address objects to be assigned to this interface. All addresses in this list\nmust be from the same network as the `ipv4_addresses`.\n","items":{"properties":{"address":{"description":"An IPv6 address to be configured on this interface on\nthe Compute Instance instance.\n","type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"type":"array"},"metadata":{"description":"Optional. The metadata required to configure in an Compute Instance.","properties":{"dns":{"description":"Optional. A string containing IP Addresses, separated by commas, that represent the DNS servers\nthat the Compute Instance will use.\n","type":"string"},"instance_type":{"description":"Optional, The Compute Instance instance type of the VM. Valid options are \"container\"\nor \"virtual-machine\". If not sent it will default to \"container\".\n","type":"string"},"userdata":{"description":"Cloud Init allows Mime Multi-part messages, or files that start with a given set of strings. It is\na requirement to configure at minimum one user with a password or ssh key that is in the sudo group.\n\nReference: https://cloudinit.readthedocs.io/en/latest/explanation/format.html\n\nA hashed password can be generated using `openssl passwd -6 'yourpassword'`\n\nExample:\n```yaml\n#cloud-config\nusers:\n  - name: administrator\n    groups: sudo\n    shell: /bin/bash\n    lock_passwd: false\n    passwd: < HASHED PASWWORD >\n    ssh_authorized_keys:\n      - < HASHED PASWWORD >\nchpasswd:\n  expire: false\nssh_pwauth: true\n```\n","type":"string"}},"type":"object"},"name":{"description":"The user-friendly name for the Compute Intsance type. If not sent and the type is \"lxd\", it will default\nto the name 'LXD'. If not sent and the type is \"hyperv\", it will default to the name 'VM HyperV'.\n","type":"string"},"specs":{"description":"List of specs (SKUs) for the Compute Instance resource.","items":{"properties":{"quantity":{"description":"The quantity of the SKU to configure the Compute Instance instance with.","type":"integer"},"sku_name":{"description":"The name of the SKU to configure on the Compute Instance instacne","type":"string"}},"type":"object"},"type":"array"},"state":{"description":"Change the state of the Compute Instance, triggering the CloudCIX Robot to perform the requested action.\nUsers can only request state changes from certain current states, with specific allowed target states:\n\n- running        -> stop, delete, or update_running\n- stopped        -> restart, delete, or update_stopped\n- delete_queue   -> restart or stop\n","type":"string"}},"required":["metadata","specs"],"type":"object"},"ComputeSnapshots":{"properties":{"created":{"description":"Timestamp, in ISO format, of when the Compute Snapshots record was created.","type":"string"},"id":{"description":"The ID of the Compute Snapshots record","type":"integer"},"instance":{"description":"The Compute Instance the Compute Snapshot record is of.","properties":{"id":{"description":"The ID of the Compute Instance the Compute Snapshot is of.","type":"integer"},"name":{"description":"The user-friendly name of the Compute Instance the Compute Snapshot is of.\n","type":"string"},"state":{"description":"The current state of the Compute Instance the Compute Snapshot is of.\n","type":"string"}},"type":"object"},"metadata":{"description":"The metadata details of the The metadata details of the \"hyperv\" Compute Snapshot. Returned if the type\nis \"hyperv\".\n","properties":{"active":{"description":"Indicates if the \"hyperv\" Compute Snapshot is currently active.","type":"boolean"},"remove_subtree":{"description":"Indicates if the \"hyperv\" Compute Snapshot should remove the subtree when deleted.","type":"boolean"}},"type":"object"},"name":{"description":"The user-friendly name given to this Compute Snapshots instance","type":"string"},"project_id":{"description":"The id of the Project that this Compute Snapshots belongs to","type":"integer"},"specs":{"description":"An array of the specs for the Compute Snapshots","items":{"$ref":"#/components/schemas/BOM","x-scope":["","#/components/schemas/ComputeSnapshotsList","#/components/schemas/ComputeSnapshots"]},"type":"array"},"state":{"description":"The current state of the Compute Snapshots","type":"string"},"type":{"description":"The type of the Compute Snapshots","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Compute Snapshots record was last updated.","type":"string"},"uri":{"description":"URL that can be used to run methods in the API associated with the Compute Snapshots instance.","format":"url","type":"string"}},"required":["created","id","instance","metadata","name","project_id","specs","state","type","updated","uri"],"type":"object"},"ComputeSnapshotsCreate":{"properties":{"instance_id":{"description":"The id of the Compute Instance the Compute Snapshot is to be taken of.","type":"integer"},"name":{"description":"The user-friendly name for the Compute Snapshot Resource. If not sent, it will default to the name\n\"Compute Snapshot\"\n","type":"string"},"project_id":{"description":"The ID of the User's Project into which this new Compute Snapshots should be added.","type":"integer"},"type":{"description":"The type of Compute Snapshot to create. Valid options are:\n- \"hyperv\"\n- \"lxd\"\n","type":"string"}},"required":["project_id","instance_id"],"type":"object"},"ComputeSnapshotsList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/ComputeSnapshotsList"]},"content":{"items":{"$ref":"#/components/schemas/ComputeSnapshots","x-scope":["","#/components/schemas/ComputeSnapshotsList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"ComputeSnapshotsResponse":{"properties":{"content":{"$ref":"#/components/schemas/ComputeSnapshots","x-scope":["","#/components/schemas/ComputeSnapshotsResponse"]}},"type":"object"},"ComputeSnapshotsUpdate":{"properties":{"name":{"description":"The user-friendly name for the Compute Snapshots Resource. If not sent, it will default to the name\ncurrent name.\n","example":"pre-migration-snapshot","type":"string"},"state":{"description":"Change the state of the Compute Snapshot, triggering the CloudCIX Robot to perform the requested action.\nUsers can only request state changes from certain current states:\n\n- running -> update_running or delete\n","type":"string"}},"required":["state"],"type":"object"},"Error":{"properties":{"detail":{"description":"Verbose version of the error message","type":"string"},"error_code":{"description":"CloudCIX error code for the error","type":"string"}},"required":["error_code","detail"],"type":"object"},"ListMetadata":{"properties":{"limit":{"description":"The value of limit that was used for the request","type":"integer"},"order":{"description":"The value of order that was used for the request","type":"string"},"page":{"description":"The value of page that was used for the request","type":"integer"},"total_records":{"description":"The total number of records found for the given search","type":"integer"},"warnings":{"description":"A list of warnings generated during execution. Any invalid search filters used will cause a warning to be generated, for example.","items":{"type":"string"},"type":"array"}},"required":["total_records","page","limit","order","warnings"],"type":"object"},"MultiError":{"description":"A map of field names to Error objects representing an error that was found with the data supplied for that field","properties":{"errors":{"additionalProperties":{"$ref":"#/components/schemas/Error","x-scope":["","#/components/responses/400","#/components/schemas/MultiError"]},"type":"object"}},"required":["errors"],"type":"object"},"NATIPAddress":{"properties":{"address":{"description":"The actual address of the Public IPAddress record.","type":"string"},"id":{"description":"The ID of the Public IPAddress record.","type":"integer"}},"required":["address","id"],"type":"object"},"NATIPAddressList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":[""]},"content":{"items":{"$ref":"#/components/schemas/NATIPAddress","x-scope":[""]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"NATIPAddressResponse":{"properties":{"content":{"$ref":"#/components/schemas/NATIPAddress","x-scope":[""]}},"type":"object"},"NetworkFirewalls":{"properties":{"created":{"description":"Timestamp, in ISO format, of when the Network Firewall record was created.","type":"string"},"id":{"description":"The ID of the Network Firewall record","type":"integer"},"name":{"description":"The user-friendly name given to this Network Firewall instance","type":"string"},"project_id":{"description":"The id of the Project that this Network Firewall belongs to","type":"integer"},"rules":{"description":"List of rules for this Network Firewall.","items":{"properties":{"allow":{"description":"True to allow traffic, False to deny.","type":"boolean"},"description":{"description":"Optional description of the rule. Returned if the type is \"project\".","type":"string"},"destination":{"description":"Destination address or subnet. Use * for any. Returned if the type is \"project\".","type":"string"},"group_name":{"description":"The name of the Geo IP Address Group. Returned if the type is \"geo\".","type":"string"},"inbound":{"description":"True if the rule applies to inbound traffic.","type":"boolean"},"order":{"description":"Order of rule evaluation (lower runs first). Returned if the type is \"project\".","type":"integer"},"port":{"description":"Port or port range (e.g. 80, 443, 1000-2000). Not required for ICMP or ANY.\nReturned if the type is \"project\".\n","type":"string"},"protocol":{"description":"Network protocol (any, icmp, tcp, udp). Returned if the type is \"project\".","type":"string"},"source":{"description":"Source address or subnet. Use * for any. Returned if the type is \"project\".","type":"string"},"version":{"description":"IP version (4 or 6). Returned if the type is \"project\".","type":"integer"},"zone":{"description":"The zone in the firewall that the rule is applied to.","type":"string"}},"type":"object"},"type":"array"},"specs":{"description":"An array of the specs for the Network Firewall","items":{"$ref":"#/components/schemas/BOM","x-scope":["","#/components/schemas/NetworkFirewallsList","#/components/schemas/NetworkFirewalls"]},"type":"array"},"state":{"description":"The current state of the Network Firewall","type":"string"},"type":{"description":"The type of the Network Firewall","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Network Firewall record was last updated.","type":"string"},"uri":{"description":"URL that can be used to run methods in the API associated with the Network Firewall instance.","format":"url","type":"string"}},"required":["created","id","name","project_id","rules","specs","state","type","updated","uri"],"type":"object"},"NetworkFirewallsCreate":{"properties":{"project_id":{"description":"The ID of the Project which this Network Firewall should be created in. Each project can have\nexactly ONE project firewall and ONE geo firewall maximum.\n","type":"integer"},"rules":{"description":"A list of the rules to be configured in the Network Firewall type. They will be applied in the order they\nare sent.\n","items":{"properties":{"allow":{"description":"Optional. A flag that states whether traffic matching this rule should be allowed to pass\nthrough the Network Firewall Type. If not sent, it wlll default to False.\n","type":"boolean"},"description":{"description":"Optional description of what the rule is for.","type":"string"},"destination":{"description":"Required if type is \"project\".\n\nA Subnet, IP Address or the name of a Project Network IP Group with `@` prepended\nthat indicates what the destination of traffic should be in order to match this rule.\n\nIt can also be just a `*` character, which will indicate that any destination is allowed.\n\nBoth source and destination must use the same IP Version.\n","type":"string"},"group_name":{"description":"Required if type is \"geo\".\n\nThe name of a Geo Network IP Group with `@` prepended.\n","type":"string"},"inbound":{"description":"Optional. Flag indicating the direction of traffic this rule applies to:\n- true: Inbound rule (traffic coming INTO your project/network)\n- false: Outbound rule (traffic going OUT FROM your project/network)\n\nIf not sent, it will default to False (outbound rule).\n","type":"boolean"},"port":{"description":"Required if type is \"project\".\n\nA string that indicates what the destination port of traffic should be in order to match this\nrule. The range for valid ports are between 1 - 65535 inclusive.\n\nAllowed Values:\n    `22`: Only port 22 is allowed\n    `20-25`: Ports between 20 and 25 inclusive are allowed\n    `22,24-25,444`: Combination of one or more single port and single port ranges\n                    with comma separated are allowed\n    ``: No port is required if the protocol is 'any' or 'icmp'\n","type":"string"},"protocol":{"description":"Required if type is \"project\".\n\nA string that indicates what protocol traffic should be using in order to match this rule.\nThe supported protocols are;\n    - 'icmp'\n    - 'tcp'\n    - 'udp'\n\nThe special case protocol 'any' is allowed and allows any protocol through.\n","type":"string"},"source":{"description":"Required if type is \"project\".\n\nA Subnet, IP Address or the name of a Project Network IP Group with `@` prepended\nthat indicates what the destination of traffic should be in order to match this rule.\n\nIt can also be just a `*` character, which will indicate that any source is allowed.\n\nBoth source and destination must use the same IP Version.\n","type":"string"},"zone":{"description":"Required if type is \"project\".\n\nA zone is a logical grouping of network interfaces or traffic sources that share the\nsame trust level. Firewall rules are defined in terms of traffic flows, simplifying policy\nmanagement. If not sent, it will default to `Public`.\n\nSupported options are:\n- `Public`: Represents connections between the CloudCIX Project networks and the public\n  internet.\n- `Private`: Represents connections between the CloudCIX Project networks.\n- `VPNS2S`: Represents connections between the CloudCIX Project Networks and the Customers'\n  on-premises network.\n"}},"type":"object"},"type":"array"},"type":{"description":"The type of Network Firewall to create. Each project can have exactly ONE of each type.\nValid options are:\n- \"geo\"\n  A Geofilter Firewall to allow or block traffic from/to specific countries using global\n  IP Address Groups (member_id = 0) that contain country IP ranges.\n- \"project\"\n  A Project Firewall with fine-grained rules for specific source/destination IPs, ports,\n  and protocols. Can reference your member's IP Address Groups using '@groupname' syntax.\n","type":"string"}},"required":["project_id"],"type":"object"},"NetworkFirewallsList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/NetworkFirewallsList"]},"content":{"items":{"$ref":"#/components/schemas/NetworkFirewalls","x-scope":["","#/components/schemas/NetworkFirewallsList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"NetworkFirewallsResponse":{"properties":{"content":{"$ref":"#/components/schemas/NetworkFirewalls","x-scope":["","#/components/schemas/NetworkFirewallsResponse"]}},"type":"object"},"NetworkFirewallsUpdate":{"properties":{"rules":{"description":"CRITICAL WARNING: This completely replaces ALL existing firewall rules. Any rules not included\nin this update will be permanently deleted. You must include the complete list of all rules\nyou want to keep, both existing and new ones.\n\nA list of the rules to be configured in the Network Firewall type. They will be applied in the\norder they are sent.\n","items":{"properties":{"allow":{"description":"Optional. A flag that states whether traffic matching this rule should be allowed to pass\nthrough the Network Firewall Type. If not sent, it wlll default to False.\n","type":"boolean"},"description":{"description":"Optional description of what the rule is for.","type":"string"},"destination":{"description":"Required if type is \"project\".\n\nA Subnet, IP Address or the name of a Project Network IP Group with `@` prepended\nthat indicates what the destination of traffic should be in order to match this rule.\n\nIt can also be just a `*` character, which will indicate that any destination is allowed.\n\nBoth source and destination must use the same IP Version.\n","type":"string"},"group_name":{"description":"Required if type is \"geo\".\n\nThe name of a Geo Network IP Group with `@` prepended.\n","type":"string"},"inbound":{"description":"Optional. Flag indicating the direction of traffic this rule applies to:\n- true: Inbound rule (traffic coming INTO your project/network)\n- false: Outbound rule (traffic going OUT FROM your project/network)\n\nIf not sent, it will default to False (outbound rule).\n","type":"boolean"},"port":{"description":"Required if type is \"project\".\n\nA string that indicates what the destination port of traffic should be in order to match this\nrule. The range for valid ports are between 1 - 65535 inclusive.\n\nAllowed Values:\n    `22`: Only port 22 is allowed\n    `20-25`: Ports between 20 and 25 inclusive are allowed\n    `22,24-25,444`: Combination of one or more single port and single port ranges\n                    with comma separated are allowed\n    ``: No port is required if the protocol is 'any' or 'icmp'\n","type":"string"},"protocol":{"description":"Required if type is \"project\".\n\nA string that indicates what protocol traffic should be using in order to match this rule.\nThe supported protocols are;\n    - 'icmp'\n    - 'tcp'\n    - 'udp'\n\nThe special case protocol 'any' is allowed and allows any protocol through.\n","type":"string"},"source":{"description":"Required if type is \"project\".\n\nA Subnet, IP Address or the name of a Project Network IP Group with `@` prepended\nthat indicates what the destination of traffic should be in order to match this rule.\n\nIt can also be just a `*` character, which will indicate that any source is allowed.\n\nBoth source and destination must use the same IP Version.\n","type":"string"},"zone":{"description":"Required if type is \"project\".\n\nA zone is a logical grouping of network interfaces or traffic sources that share the\nsame trust level. Firewall rules are defined in terms of traffic flows, simplifying policy\nmanagement. If not sent, it will default to `Public`.\n\nSupported options are:\n- `Public`: Represents connections between the CloudCIX Project networks and the public\n  internet.\n- `Private`: Represents connections between the CloudCIX Project networks.\n- `VPNS2S`: Represents connections between the CloudCIX Project Networks and the Customers'\n  on-premises network.\n"}},"type":"object"},"type":"array"},"state":{"description":"Change the state of the Network Firewall, triggering the CloudCIX Robot to perform the requested action.\nUsers can only request state changes from certain current states:\n\n- running -> update_running or delete\n","type":"string"}},"required":["state"],"type":"object"},"NetworkIPGroups":{"properties":{"cidrs":{"description":"An array of CIDR addresses in the Network IP Group.","items":{"type":"string"},"type":"array"},"created":{"description":"Timestamp, in ISO format, of when the Network IP Group was created.","type":"string"},"id":{"description":"The ID of the Network IP Goup record","type":"integer"},"name":{"description":"The name of the Network IP Group.","type":"string"},"type":{"description":"The type of the Network IP Group","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Network IP Group was last updated.","type":"string"},"uri":{"description":"The absolute URL of the Network IP Group record that can be used to perform `Read`, `Update` and `Delete`\n","type":"string"},"version":{"description":"The IP Version of the CIDRs in the group.","type":"integer"}},"required":["created","cidrs","id","name","type","updated","uri","version"],"type":"object"},"NetworkIPGroupsCreate":{"properties":{"cidrs":{"description":"An array of CIDR addresses in the IP Address Group. Can include individual IP addresses\n(e.g., \"91.103.3.36\") or network ranges (e.g., \"90.103.2.0/24\"). All addresses must match\nthe specified IP version. Use these groups in firewall rules to allow/block traffic from\nmultiple locations with a single rule.\n","items":{"type":"string"},"type":"array"},"description":{"description":"An optional description for the IP Address Group.","type":"string"},"name":{"description":"The name to be given to the new IP Address Group. Used to identify the group when creating\nfirewall rules or geo-filters. Must start with a letter and contain only letters, numbers,\nunderscores, and hyphens.\n","type":"string"},"version":{"description":"The IP version of the IP Address Group Objects in the IP Address Group. Accepted versions are 4 and 6.\nIf not sent, it will default to 4.\n","type":"integer"}},"required":["name","cidrs"],"type":"object"},"NetworkIPGroupsList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/NetworkIPGroupsList"]},"content":{"items":{"$ref":"#/components/schemas/NetworkIPGroups","x-scope":["","#/components/schemas/NetworkIPGroupsList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"NetworkIPGroupsResponse":{"properties":{"content":{"$ref":"#/components/schemas/NetworkIPGroups","x-scope":["","#/components/schemas/NetworkIPGroupsResponse"]}},"type":"object"},"NetworkIPGroupsUpdate":{"properties":{"cidrs":{"description":"An array of CIDR addresses in the IP Address Group. Can include individual IP addresses\n(e.g., \"91.103.3.36\") or network ranges (e.g., \"90.103.2.0/24\"). All addresses must match\nthe specified IP version. Use these groups in firewall rules to allow/block traffic from\nmultiple locations with a single rule.\n","items":{"type":"string"},"type":"array"},"description":{"description":"An optional description for the IP Address Group.","type":"string"},"name":{"description":"The name to be given to the new IP Address Group. Used to identify the group when creating\nfirewall rules or geo-filters. Must start with a letter and contain only letters, numbers,\nunderscores, and hyphens.\n","type":"string"},"version":{"description":"The IP version of the IP Address Group Objects in the IP Address Group. Accepted versions are 4 and 6.\nIf not sent, it will default to 4.\n","type":"integer"}},"required":["name","cidrs"],"type":"object"},"NetworkRouters":{"properties":{"created":{"description":"Timestamp, in ISO format, of when the Router Resource record was created.","type":"string"},"grace_period":{"description":"Number of days after a user sets the state of the Router to Scrub (8) before it is executed by robot.\nThe default value is 7 days for a Router.\n","type":"integer"},"id":{"description":"The ID of the Router Resource record","type":"integer"},"metadata":{"$ref":"#/components/schemas/RouterMetadata","x-scope":["","#/components/schemas/NetworkRoutersList","#/components/schemas/NetworkRouters"]},"name":{"description":"The user-friendly name given to this Router Resource instance","type":"string"},"networks":{"description":"An array of the list of networks defined on the Router","items":{"properties":{"destination":{"description":"The destination address range of the target network of the static route. Returned if the\ntype is \"static_route\".\n","type":"string"},"ipv4":{"description":"The IPv4 address range of the network. Returned if the type is \"router\".","type":"string"},"ipv6":{"description":"The IPv6 address range of the network. Returned if the type is \"router\".","type":"string"},"name":{"description":"The name of the network. Returned if the type is \"router\".","type":"string"},"nat":{"description":"Flag indicating if traffic from the destination can route to the Public internet. Returned if\nthe type is \"static_route\".\n","type":"boolean"},"nexthop":{"description":"An IP address from one of the networks configured on the Router in the Project to forward the\npacket to. Returned if the type is \"static_route\".\n","type":"string"},"vlan":{"description":"The VLAN ID of the network. Returned if the type is \"router\".","type":"integer"}},"type":"object"},"type":"array"},"project_id":{"description":"The id of the Project that this Router Resource belongs to","type":"integer"},"specs":{"description":"An array of the specs for the Router Resource","items":{"$ref":"#/components/schemas/BOM","x-scope":["","#/components/schemas/NetworkRoutersList","#/components/schemas/NetworkRouters"]},"type":"array"},"state":{"description":"The current state of the Router Resource","type":"string"},"type":{"description":"The type of the Network Router","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Router Resource record was last updated.","type":"string"},"uri":{"description":"URL that can be used to run methods in the API associated with the Network Routers instance.","format":"url","type":"string"}},"required":["created","grace_period","id","metadata","name","networks","project_id","specs","state","type","updated","uri"],"type":"object"},"NetworkRoutersCreate":{"properties":{"metadata":{"description":"Required if type is \"static_route\".\n\nMetadata for the Static Route resource.\n","properties":{"destination":{"description":"CIDR notation of the destination address range of the target network of the static route.\n\nNote:\n- The sent address range cannot overlap with the destination of other Static Routes in the same\n  Project.\n- The sent address range can overlap with the networks configured on the Router in the Project.\n- The sent address range cannot overlap with the \"remote_ts\" of Network VPNs in the same Project.\n","type":"string"},"nat":{"description":"Flag indicating if traffic from the destination can be routed to the Public internet via the\nProject's Router. It will default to False if not sent.\n","type":"boolean"},"nexthop":{"description":"An IP address from one of the networks configured on the Router in the Project to forward the\npacket to.\n","type":"string"}},"type":"object"},"networks":{"description":"Option if type is \"router\". If not sent, defaults will be applied.\n\nAn array of the list of networks defined on the Router. To create a new network on the Network\nRouter, append an object to the list with an `ipv4` key for an available RFC 1918 address range. The `ipv6`\nand `vlan` values will be generated based on what is available in the region. If networks is not sent, the\ndefault address range 10.0.0.1/24 will be assigned to `ipv4`.\n","items":{"properties":{"ipv4":{"description":"The IPv4 address range of the network","type":"string"},"name":{"description":"The name of the network","type":"string"}},"type":"object"},"type":"array"},"project_id":{"description":"The ID of the User's Project into which this Network Router should be added.","example":1,"type":"integer"},"type":{"description":"The type of Network Router to create. Valid options are:\n- \"router\"\n A virtual route that manages IP forwarding, and participate in routing decisions\n for the Project.\n- \"static_route\"\n  Maps a destination network to a nexthop IP, enabling deterministic packet forwarding.\n","example":"router","type":"string"}},"required":["project_id"],"type":"object"},"NetworkRoutersList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/NetworkRoutersList"]},"content":{"items":{"$ref":"#/components/schemas/NetworkRouters","x-scope":["","#/components/schemas/NetworkRoutersList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"NetworkRoutersResponse":{"properties":{"content":{"$ref":"#/components/schemas/NetworkRouters","x-scope":["","#/components/schemas/NetworkRoutersResponse"]}},"type":"object"},"NetworkRoutersUpdate":{"properties":{"metadata":{"description":"Metadata for the Netork Routers of the type \"static_route\".","properties":{"destination":{"description":"CIDR notation of the destination address range of the target network of the static route.\nThe destination cannot be updated.\n","type":"string"},"nat":{"description":"Flag indicating if traffic from the destination can be routed to the Public internet via the\nProject's Router.\n","type":"boolean"},"nexthop":{"description":"An IP address from one of the networks configured on the Router in the Project to forward the\npacket to. The nexthop cannot be updated.\n","type":"string"}},"type":"object"},"networks":{"description":"Networks for the Netork Routers of the type \"router\".\n\nAn array of the list of networks defined on the Network Router.\nExisting networks (vlan property is not None) can have their names updated but IPv4/IPv6 ranges and VLAN\ncannot be modified. To create a new network on the Network Router, append an object to the list with an\n`ipv4` key for an available RFC 1918 address range. The `ipv6` and `vlan` values will be generated based\non what is available in the region.\n","items":{"properties":{"ipv4":{"description":"The IPv4 address range of the network","type":"string"},"ipv6":{"description":"The IPv6 address range of the network","type":"string"},"name":{"description":"The name of the network","type":"string"},"vlan":{"description":"The VLAN ID of the network.","type":"integer"}},"type":"object"},"type":"array"},"state":{"description":"Change the state of the Network Router, triggering the CloudCIX Robot to perform the requested action.\n\nAvailable state transitions:\n\nFrom running state, you can transition to:\n- update_running - Apply pending configuration changes while keeping the router operational\n- delete - Mark the router for deletion (requires all other project resources to be deleted first)\n\nFrom delete_queue state, you can transition to:\n- restart - Restore a router that was previously marked for deletion\n\nNote: To delete a router, all other resources in the project must first be in one of these states:\ndelete, delete_queue, or deleting.\n","type":"string"}},"required":["state"],"type":"object"},"NetworkVPNs":{"properties":{"created":{"description":"Timestamp, in ISO format, of when the Network VPN record was created.","type":"string"},"id":{"description":"The ID of the Network VPN record","type":"integer"},"metadata":{"description":"The metadata for the configuration of the IKE and IPSec phases of the Network VPN.","properties":{"child_sas":{"description":"An array of Child SAs (Security Associations) of the routes for the Network VPN.","items":{"properties":{"local_ts":{"description":"The CIDR notation of a subnet configured on the Network Router in the same Project\n","type":"string"},"remote_ts":{"description":"CIDR notation of a subnet on the Customer side of the Network VPN.","type":"string"}},"type":"object"},"type":"array"},"ike_authentication":{"description":"Authentication algorithms for the IKE phase.","type":"string"},"ike_dh_groups":{"description":"Diffie-Helmen groups for the IKE phase.","type":"string"},"ike_encryption":{"description":"Encryption algorithms for the IKE phase.","type":"string"},"ike_gateway_type":{"description":"The gateway type (public_ip or hostname ) for the IKE phase.","type":"string"},"ike_gateway_value":{"description":"The gateway value (IP or hostname) for the IKE phase.","type":"string"},"ike_lifetime":{"description":"The lifetime of the IKE phase in seconds.","type":"integer"},"ike_local_identifier":{"description":"The local identifier of the IKE phase in the region.","type":"string"},"ike_pre_shared_key":{"description":"The pre shared key of the IKE phase.","type":"string"},"ike_remote_identifier":{"description":"The remote identifier of the IKE phase on the customers side of the VPN.","type":"string"},"ike_version":{"description":"The version of the IKE phase","type":"integer"},"ipsec_authentication":{"description":"Authentication algorithms for the IPSec phase.","type":"string"},"ipsec_encryption":{"description":"Encryption algorithms for the IPSec phase.","type":"string"},"ipsec_establish_time":{"description":"The establish time for the IPSec phase.","type":"string"},"ipsec_lifetime":{"description":"The lifetime of the IPSec phase in seconds.","type":"integer"},"ipsec_pfs_groups":{"description":"Perfect Forward Secrecy groups for the IPSec phase.","type":"string"},"stif_number":{"description":"STIF number for the Network VPN.","type":"integer"},"traffic_selector":{"description":"Flag for it traffic selectors are enabled.","type":"boolean"}},"type":"object"},"name":{"description":"The user-friendly name given to this Network VPN instance","type":"string"},"project_id":{"description":"The id of the Project that this Network VPN belongs to","type":"integer"},"specs":{"description":"An array of the specs for the Network VPN","items":{"$ref":"#/components/schemas/BOM","x-scope":["","#/components/schemas/NetworkVPNsList","#/components/schemas/NetworkVPNs"]},"type":"array"},"state":{"description":"The current state of the Network VPN","type":"string"},"type":{"description":"The type of the Network VPN","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Network VPN record was last updated.","type":"string"},"uri":{"description":"URL that can be used to run methods in the API associated with the Network VPN instance.","format":"url","type":"string"}},"required":["created","id","metadata","name","project_id","specs","state","type","updated","uri"],"type":"object"},"NetworkVPNsCreate":{"properties":{"metadata":{"description":"Optional. The metadata required to configure the Network VPN instance.","properties":{"child_sas":{"description":"An array of Child SAs (Security Associations) to create the initial routes for the VPN.\n","items":{"properties":{"local_ts":{"description":"The local Subnet in Network VPN's Project that will be configured as part of this route\nin a Child SA.\n","type":"string"},"remote_ts":{"description":"CIDR notation of the Remote Subnet on the Customer side of the Network VPN that should\nbe given access through the VPN.\n\nNote:\n- The sent address range can overlap with the subnets configured on the Router in the\nProject for the VPNS2S.\n- The sent address range cannot overlap with a remote subnet of another VPN in the\nsame Project.\n","type":"string"}},"type":"object"},"type":"array"},"ike_authentication":{"description":"Optional. A string containing a comma separated array of authentication algorithms for the IKE\nphase of the Network VPN. If not sent, it will default to `SHA384`.\n\nThe IKE phase authentication algorithms supported are;\n- `SHA1`\n- `SHA256`\n- `SHA384`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ike_dh_groups":{"description":"Optional. A string containing a comma separated array of Diffie-Helmen groups for the IKE phase\nof the Network VPN. If not sent, it will default to `Group 24`.\n\nThe IKE phase Diffie-Helmen groups supported are;\n- `Group 1`\n- `Group 2`\n- `Group 5`\n- `Group 19`\n- `Group 20`\n- `Group 24`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ike_encryption":{"description":"Optional. A string containing a comma separated array of encryption algorithms for the IKE phase of\nthe Network VPN. If not sent, it will default to \"256 bit AES-CBC\".\n\nThe IKE phase encryption algorithms supported are;\n- `128 bit AES-CBC`\n- `192 bit AES-CBC`\n- `256 bit AES-CBC`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ike_gateway_type":{"description":"The type of data that is stored in the `ike_gateway_value` field. It can only either \"public_ip\" or\n\"hostname\". If not sent, it will default to \"public_ip\".\n","type":"string"},"ike_gateway_value":{"description":"The value used as the IKE gateway for the Network VPN. The type for this value depends on what type\nwas sent for the \"ike_gateway_type\".\n\nFor \"public_ip\", this value must be a string containing an IP address.\nFor \"hostname\", this value must be a valid hostname.\n","type":"string"},"ike_lifetime":{"description":"Optional. The lifetime of the IKE phase in seconds. Must be a value between 180 and 86400 inclusive.\nIf not sent, it will default to 28800.\n","type":"integer"},"ike_pre_shared_key":{"description":"The pre shared key to use for setting up the IKE phase of the Network VPN.\n\nNote that the pre shared key cannot contain any of the following special characters;\n- `\"`\n- `'`\n- `@`\n- `+`\n- `-`\n- `/`\n- `\\`\n- `|`\n- `=`\n","type":"string"},"ike_version":{"description":"Optional. String value of the chosen version for the IKE phase. If not sent, it will default to\n\"v2-only\".\n\nThe IKE phase versions supported are;\n- `v1-only`\n- `v2-only`\n\nPlease ensure the sent string matches one of these exactly.\n","type":"string"},"ipsec_authentication":{"description":"Optional. A string containing a comma separated array of authentication algorithms for the IPSec\nphase of the Site-to-Site Network VPN. If not sent, it will default to \"SHA256\".\n\nThe IPSec phase authentication algorithms supported are;\n- `SHA1`\n- `SHA256`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ipsec_encryption":{"description":"Optional. A string containing a comma separated array of encryption algorithms for the IPSEC phase\nof the Network VPN. If not sent, it will default to \"AES 256\".\n\nThe IPSEC phase encryption algorithms supported are;\n- `AES 128`\n- `AES 192`\n- `AES 256`\n- `AES 128 GCM`\n- `AES 192 GCM`\n- `AES 256 GCM`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ipsec_establish_time":{"description":"Optional. String value of the chosen establish_time for the IPSec phase. If not sent, it will\ndefault to \"Immediately\".\n\nThe IPSec phase establish time values supported are;\n- `Immediately`\n- `On Traffic`\n\nPlease ensure the sent string matches one of these exactly.\n","type":"string"},"ipsec_lifetime":{"description":"Optional. The lifetime of the IPSec phase in seconds. It be a value between 180 and 86400 inclusive.\nIf not sent, it will default to 3600.\n","type":"integer"},"ipsec_pfs_groups":{"description":"Optional. A string containing a comma separated array of Perfect Forward Secrecy (PFS) groups for\nthe IPSec phase of the Network VPN. If not sent, it will default to \"Group 20\".\n\nThe IPSec phase PFS groups supported are;\n- `Group 1`\n- `Group 2`\n- `Group 5`\n- `Group 14`\n- `Group 19`\n- `Group 20`\n- `Group 24`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"traffic_selector":{"description":"Optional. Boolean value stating if traffic selectors are to be used in configuring vpn tunnel.\nIf not sent, it will default to false.\n\nBy default, 0.0.0.0/0 will be used for the default local and remote CIDRs.\nIf true, then each of the local and remote CIDRs will be added to the configuration negotiation\nwith peer.\n","type":"boolean"}},"type":"object"},"name":{"description":"The user-friendly name for the Network VPN. If not sent, it will default to the name 'VPNS2S'","example":"Cork Office to Dublin Office","type":"string"},"project_id":{"description":"The ID of the User's Project into which this Network VPN should be added.","example":1,"type":"integer"},"type":{"description":"The type of Network VPN to create. Valid options are:\n- \"site-to-site\"\n","example":"site-to-site","type":"string"}},"required":["project_id"],"type":"object"},"NetworkVPNsList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/NetworkVPNsList"]},"content":{"items":{"$ref":"#/components/schemas/NetworkVPNs","x-scope":["","#/components/schemas/NetworkVPNsList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"NetworkVPNsResponse":{"properties":{"content":{"$ref":"#/components/schemas/NetworkVPNs","x-scope":["","#/components/schemas/NetworkVPNsResponse"]}},"type":"object"},"NetworkVPNsUpdate":{"properties":{"metadata":{"description":"Optional. The metadata required to configure the Network VPN instance","properties":{"child_sas":{"description":"An array of Child SAs (Security Associations) to create the initial routes for the VPN.\n","items":{"properties":{"local_ts":{"description":"The local Subnet in Network VPN's Project that will be configured as part of this route\nin a Child SA.\n","type":"string"},"remote_ts":{"description":"CIDR notation of the Remote Subnet on the Customer side of the Network VPN that should\nbe given access through the VPN.\n\nNote:\n- The sent address range can overlap with the subnets configured on the Router in the\nProject for the VPNS2S.\n- The sent address range cannot overlap with a remote subnet of another VPN in the\nsame Project.\n","type":"string"}},"type":"object"},"type":"array"},"ike_authentication":{"description":"Optional. A string containing a comma separated array of authentication algorithms for the IKE\nphase of the Network VPN. If not sent, it will default to the current value.\n\nThe IKE phase authentication algorithms supported are;\n- `SHA1`\n- `SHA256`\n- `SHA384`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ike_dh_groups":{"description":"Optional. A string containing a comma separated array of Diffie-Helmen groups for the IKE phase\nof the Network VPN. If not sent, it will default to the current value.\n\nThe IKE phase Diffie-Helmen groups supported are;\n- `Group 1`\n- `Group 2`\n- `Group 5`\n- `Group 19`\n- `Group 20`\n- `Group 24`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ike_encryption":{"description":"Optional. A string containing a comma separated array of encryption algorithms for the IKE phase of\nthe Network VPN. If not sent, it will default to the current value.\n\nThe IKE phase encryption algorithms supported are;\n- `128 bit AES-CBC`\n- `192 bit AES-CBC`\n- `256 bit AES-CBC`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ike_gateway_type":{"description":"The type of data that is stored in the `ike_gateway_value` field. It can only either \"public_ip\" or\n\"hostname\". If not sent, it will default to the current value.\n","type":"string"},"ike_gateway_value":{"description":"The value used as the IKE gateway for the Network VPN. The type for this value depends on what type\nwas sent for the \"ike_gateway_type\".\n\nFor \"public_ip\", this value must be a string containing an IP address.\nFor \"hostname\", this value must be a valid hostname.\n","type":"string"},"ike_lifetime":{"description":"Optional. The lifetime of the IKE phase in seconds. Must be a value between 180 and 86400 inclusive.\nIf not sent, it will default to the current value.\n","type":"integer"},"ike_pre_shared_key":{"description":"The pre shared key to use for setting up the IKE phase of the Network VPN.\n\nNote that the pre shared key cannot contain any of the following special characters;\n- `\"`\n- `'`\n- `@`\n- `+`\n- `-`\n- `/`\n- `\\`\n- `|`\n- `=`\n","type":"string"},"ike_version":{"description":"Optional. String value of the chosen version for the IKE phase. If not sent, it will default to\nthe current value.\n\nThe IKE phase versions supported are;\n- `v1-only`\n- `v2-only`\n\nPlease ensure the sent string matches one of these exactly.\n","type":"string"},"ipsec_authentication":{"description":"Optional. A string containing a comma separated array of authentication algorithms for the IPSec\nphase of the Site-to-Site Network VPN. If not sent, it will default to the current value.\n\nThe IPSec phase authentication algorithms supported are;\n- `SHA1`\n- `SHA256`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ipsec_encryption":{"description":"Optional. A string containing a comma separated array of encryption algorithms for the IPSEC phase\nof the Network VPN. If not sent, it will default to the current value.\n\nThe IPSEC phase encryption algorithms supported are;\n- `AES 128`\n- `AES 192`\n- `AES 256`\n- `AES 128 GCM`\n- `AES 192 GCM`\n- `AES 256 GCM`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"ipsec_establish_time":{"description":"Optional. String value of the chosen establish_time for the IPSec phase. If not sent, it will\ndefault to the current value.\n\nThe IPSec phase establish time values supported are;\n- `Immediately`\n- `On Traffic`\n\nPlease ensure the sent string matches one of these exactly.\n","type":"string"},"ipsec_lifetime":{"description":"Optional. The lifetime of the IPSec phase in seconds. It be a value between 180 and 86400 inclusive.\nIf not sent, it will default to the current value.\n","type":"integer"},"ipsec_pfs_groups":{"description":"Optional. A string containing a comma separated array of Perfect Forward Secrecy (PFS) groups for\nthe IPSec phase of the Network VPN. If not sent, it will default to the current value.\n\nThe IPSec phase PFS groups supported are;\n- `Group 1`\n- `Group 2`\n- `Group 5`\n- `Group 14`\n- `Group 19`\n- `Group 20`\n- `Group 24`\n\nPlease ensure that each entry in the array matches one of the above strings exactly.\nDuplicate entries will be ignored.\n","type":"string"},"traffic_selector":{"description":"Optional. Boolean value stating if traffic selectors are to be used in configuring vpn tunnel.\nIf not sent, it will default to the current value.\n\nBy default, 0.0.0.0/0 will be used for the default local and remote CIDRs.\nIf true, then each of the local and remote CIDRs will be added to the configuration negotiation\nwith peer.\n","type":"boolean"}},"type":"object"},"name":{"description":"The user-friendly name for the Network VPN type. If not sent, it will default to current name.","example":"Cork Office to Dublin Office","type":"string"},"state":{"description":"Change the state of the Network VPN, triggering the CloudCIX Robot to perform the requested action.\nUsers can only request state changes from certain current states:\n\n- running -> update_running or delete\n","type":"string"}},"type":"object"},"Project":{"properties":{"address_id":{"description":"The ID of the Project address.","type":"integer"},"closed":{"description":"A flag stating whether or not the Project is classified as closed. A Project is classified as closed when\nall the infrastructure in it is in a Closed (99) state.\n","type":"boolean"},"created":{"description":"The date that the Project entry was created","type":"string"},"id":{"description":"The ID of the Project.","type":"integer"},"manager_id":{"description":"The ID of the User that manages the Project","type":"integer"},"name":{"description":"The name of the Project.","type":"string"},"note":{"description":"The note attached to the Project.","type":"string"},"region_id":{"description":"The region ID that the Project is in.","type":"integer"},"reseller_id":{"description":"The Address ID that will send the bill for the Project to the customer.","type":"integer"},"updated":{"description":"The date that the Project entry was last updated","type":"string"},"uri":{"description":"The absolute URL of the Project that can be used to perform `Read`, `Update` and `Delete`","type":"string"}},"required":["address_id","closed","created","id","manager_id","name","note","region_id","reseller_id","updated","uri"],"type":"object"},"ProjectCreate":{"properties":{"name":{"description":"The name of the Project. Must be unique within an Address' Project collection.","example":"production-environment","type":"string"},"note":{"description":"An optional note providing a description of what the Project is used for.","example":"Main production infrastructure for web services","type":"string"},"region_id":{"description":"The Address ID of the CloudCIX region that the Project will be deployed in.","type":"integer"}},"required":["region_id","name"],"type":"object"},"ProjectList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/ProjectList"]},"content":{"items":{"$ref":"#/components/schemas/Project","x-scope":["","#/components/schemas/ProjectList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"ProjectResponse":{"properties":{"content":{"$ref":"#/components/schemas/Project","x-scope":["","#/components/schemas/ProjectResponse"]}},"type":"object"},"ProjectUpdate":{"properties":{"name":{"description":"The name of the Project. Must be unique within an Address' Project collection.","type":"string"},"note":{"description":"A note about the project to store information. No length limit.","type":"string"}},"type":"object"},"RouterMetadata":{"properties":{"ipv4_address":{"$ref":"#/components/schemas/BaseIPAddress","x-scope":["","#/components/schemas/NetworkRoutersList","#/components/schemas/NetworkRouters","#/components/schemas/RouterMetadata"]},"ipv4_address_id":{"description":"The ID of the assigned public IPv4 address for the Router.","type":"integer"},"ipv6_address":{"$ref":"#/components/schemas/BaseIPAddress","x-scope":["","#/components/schemas/NetworkRoutersList","#/components/schemas/NetworkRouters","#/components/schemas/RouterMetadata"]},"ipv6_address_id":{"description":"The ID of the assigned public IPv6 address for the Router.","type":"integer"}},"required":["ipv4_address","ipv4_address_id","ipv6_address","ipv6_address_id"],"type":"object"},"RouterMetadataList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":[""]},"content":{"items":{"$ref":"#/components/schemas/RouterMetadata","x-scope":[""]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"RouterMetadataResponse":{"properties":{"content":{"$ref":"#/components/schemas/RouterMetadata","x-scope":[""]}},"type":"object"},"StorageVolumes":{"properties":{"contra_instances":{"description":"A list of Compute Instances the Storage Volume is mounted to.","items":{"properties":{"id":{"description":"The ID of the Compute Instance the Storage Volume is attached to.","type":"integer"},"name":{"description":"The user-friendly name given to the Compute Instance the Storage Volume is attached to.","type":"string"},"state":{"description":"The current state of the Compute Instance the Storage Volume is attached to.","type":"string"}},"type":"object"},"type":"array"},"created":{"description":"Timestamp, in ISO format, of when the Storage Volume was created.","type":"string"},"id":{"description":"The ID of the Storage Volume record","type":"integer"},"instance":{"description":"The \"hyperv\" Compute Instance the \"hyperv\" Storage Volume is attached to.","properties":{"id":{"description":"The ID of the \"hyperv\" Compute Instance the \"hyperv\" Storage Volume is attached to.","type":"integer"},"name":{"description":"The user-friendly name of the \"hyperv\" Compute Instance the \"hyperv\" Storage Volume is attached to.\n","type":"string"},"state":{"description":"The current state of the \"hyperv\" Compute Instance the \"hyperv\" Storage Volume is attached to.\n","type":"string"}},"type":"object"},"metadata":{"description":"The metadata object of \"ceph\" Storage Volumes","properties":{"attach_instance_ids":{"description":"List of IDs of \"lxd\" Compute instances which the \"ceph\" Storage Volume should be attached to.\n","items":{"type":"integer"},"type":"array"},"detach_instance_ids":{"description":"List of IDs of \"lxd\" Compute instances which the \"ceph\" Storage Volume should be detached from.\n","items":{"type":"integer"},"type":"array"},"mount_path":{"description":"The mpunt path of the \"ceph\" Storage Volume on the \"lxd\" Compute instances.","type":"string"}},"type":"object"},"name":{"description":"The user-friendly name given to this Storage Volume","type":"string"},"project_id":{"description":"The ID of the Project that this Storage Volume belongs to","type":"integer"},"specs":{"description":"An array of the specs for the Storage Volume","items":{"$ref":"#/components/schemas/BOM","x-scope":["","#/components/schemas/StorageVolumesList","#/components/schemas/StorageVolumes"]},"type":"array"},"state":{"description":"The current state of the Storage Volume","type":"string"},"type":{"description":"The type of the Storage Volume","type":"string"},"updated":{"description":"Timestamp, in ISO format, of when the Storage Volume was last updated.","type":"string"},"uri":{"description":"URL that can be used to run methods in the API associated with the Storage Volumes instance.","format":"url","type":"string"}},"required":["contra_instances","created","id","instance","metadata","name","project_id","specs","state","type","updated","uri"],"type":"object"},"StorageVolumesCreate":{"properties":{"instance_id":{"description":"Required if type is \"hyperv\".\n\nThe ID of a Compute Instance with the type \"hyperv\" the Storage Volume is to be mounted to.\n","type":"integer"},"name":{"description":"The user-friendly name for the Storage Volume type. If not sent and the type is \"cephfs\", it will default\nto the name 'Ceph'. If not sent and the type is \"hyperv\", it will default to the name 'Storage HyperV'.\n","type":"string"},"project_id":{"description":"The ID of the Project which this Storage Volume should be in.","type":"integer"},"specs":{"description":"List of specs (SKUs) for the Storage Volume drive.","items":{"properties":{"quantity":{"description":"The quantity (GB) of the SKU to configure the Storage Volume drive with.","type":"integer"},"sku_name":{"description":"The name of the SKU for the Storage Volume drive.","type":"string"}},"type":"object"},"type":"array"},"type":{"description":"The type of Storage Volume to create. Valid options are:\n- \"cephfs\"\n  A Ceph file system volume which can be mounted to one or more Compute Instances of the type \"lxd\"\n- \"cephrbd\"\n  A Ceph block volume which can be mounted to one Compute Instances of the type \"lxd\" that is the\n  instance type \"virtual-machine\"\n- \"hyperv\"\n  A volume which can be mounted as a secondary drive to a Compute Instance of the type \"hyperv\"\n","type":"string"}},"required":["project_id","specs"],"type":"object"},"StorageVolumesList":{"properties":{"_metadata":{"$ref":"#/components/schemas/ListMetadata","x-scope":["","#/components/schemas/StorageVolumesList"]},"content":{"items":{"$ref":"#/components/schemas/StorageVolumes","x-scope":["","#/components/schemas/StorageVolumesList"]},"type":"array"},"count":{"description":"Maximum number of records returned per page.","type":"integer"},"page":{"description":"Page number of the current results.","type":"integer"},"total":{"description":"Total number of matching records.","type":"integer"}},"type":"object"},"StorageVolumesResponse":{"properties":{"content":{"$ref":"#/components/schemas/StorageVolumes","x-scope":["","#/components/schemas/StorageVolumesResponse"]}},"type":"object"},"StorageVolumesUpdate":{"properties":{"metadata":{"description":"Required if type is \"cephfs\".\n\nMetadata for the Storage Volume drive with the type \"cephfs\".\n","properties":{"attach_instance_ids":{"description":"A list of IDs for running or stopped Compute Instances with the type \"lxd\" in the project to\nmount this Ceph file system volume to. If not sent, it will default to an empty list.\n","items":{"type":"integer"},"type":"array"},"detach_instance_ids":{"description":"A list of IDs for running or stopped Compute Instances with the type \"lxd\" in the project to\nunmount this Ceph file system volume from. If not sent, it will default to an empty list.\n","items":{"type":"integer"},"type":"array"},"mount_path":{"description":"The mount path for the Ceph file system volume inside the LXC instance.","type":"string"}},"type":"object"},"name":{"description":"The user-friendly name for the Storage Volume. If not sent, it will default to current name.\n","type":"string"},"specs":{"description":"List of specs (SKUs) for the Storage Volume drive. Only required if increasing the current size of\nthe Storage Volume.\n","items":{"properties":{"quantity":{"description":"The quantity (GB) of the SKU to configure the Storage Volume drive with.","type":"integer"},"sku_name":{"description":"The name of the SKU for the Storage Volume drive.","type":"string"}},"type":"object"},"type":"array"},"state":{"description":"Change the state of the Storage Volume, triggering the CloudCIX Robot to perform the requested action.\nUsers can only request state changes from certain current states:\n\n- running -> update_running or delete\n","type":"string"}},"type":"object"}},"securitySchemes":{"XAuthToken":{"in":"header","name":"X-Auth-Token","type":"apiKey"}}},"externalDocs":{"description":"View Docs in JSON format","url":"https://compute.api.cloudcix.com/documentation/"},"info":{"contact":{"email":"developers@cloudcix.com"},"description":"Deploy and manage virtual machines, containers, networks, storage, and security policies across\nCloudCIX cloud regions through a comprehensive RESTful API.\n\n## Core Capabilities\n\n**Organisational Resources**\n- Projects: Logical containers for resources within specific cloud regions\n\n**Networking Resources**\n- Virtual Routers: Create isolated network environments with private subnets\n- Firewalls: Define traffic filtering rules (project-level or geo-based)\n- VPN Tunnels: Establish secure site-to-site IPSec connections\n- IP Address Groups: Organise CIDR networks for firewall rules\n\n**Compute Resources**\n- Virtual Instances: Deploy LXD containers/VMs or Hyper-V Windows virtual machines\n- GPUs: Attach hardware GPUs to instances.\n- OS Images: Browse available operating system templates\n- Snapshots: Create point-in-time backups for recovery\n- Backups: Store instance backups in repositories for disaster recovery\n\n**Storage Resources**\n- Storage Volumes: Provision Ceph network-attached volumes or Hyper-V secondary drives\n\n## Getting Started: Building Your Cloud Infrastructure\n\nResources have dependencies that determine the order in which they should be created:\n\n1. **Create a Project** - Establishes an isolated environment in a specific region\n2. **Configure Networking** - Set up routers with private networks, optionally add firewalls,\n   VPNs, and IP address groups\n3. **Deploy Compute Resources** - Launch virtual instances (VMs/containers) within your\n   project's networks\n4. **Add Storage** - Attach additional storage volumes to running instances as needed\n\nOptional resources like GPUs, snapshots, and backups can be added to instances after\nthey are running.\n\n## Authentication\n\nAll API requests require authentication using a valid CloudCIX API token. Include your token\nin the `X-Auth-Token` header with each request. For details on obtaining and managing tokens,\nsee the [Membership API documentation](https://docs.cloudcix.com/api/membership.html).\n\n## State-Based Lifecycle Management\n\nCloudCIX uses a state-based approach to manage resource lifecycles. Unlike traditional REST APIs\nthat use DELETE requests, CloudCIX resources transition through defined states that trigger\nautomated backend processing.\n\nFor a complete state diagram showing all transitions, see the\n[State Diagram documentation](https://docs.cloudcix.com/appendices/state_diagram.html).\n\n**Customer-Controlled States (Request Actions):**\n- `stop` (5): Request to stop a running resource\n- `restart` (7): Request to restart a stopped resource\n- `delete` (8): Request deletion of a resource\n- `update_running` (10): Request to update a running resource\n- `update_stopped` (15): Request to update a stopped resource\n\n**System-Managed States (Automated Transitions):**\n- `pending` (1): Resource creation request received, awaiting processing\n- `building` (2): Resource is being provisioned\n- `running` (4): Resource is active and operational\n- `stopped` (6): Resource is halted but preserved\n- `delete_queue` (9): Resource queued for deletion after grace period\n- `deleted` (99): Resource has been permanently removed\n- `unresourced` (3): Error occurred during processing\n\n**How It Works:**\n1. You change a resource's state to request an action (e.g., set state to `delete` to remove)\n2. The CloudCIX Robot picks up the request and begins processing\n3. The resource transitions through intermediate states as work progresses\n4. The resource reaches a stable state when the operation completes\n\n**Important:** Resources cannot be deleted via DELETE HTTP requests. Instead, update the resource\nstate to `delete` via PUT/PATCH. The resource will be queued for deletion and removed after a\ngrace period.\n\n### Grace Period and Deletion\n\nWhen you set a resource's state to `delete` (8), it enters `delete_queue` (9) and waits for\na grace period (default: 7 days) before permanent deletion. This provides time to recover\naccidentally deleted resources.\n\nDuring the grace period:\n- The resource remains visible but non-operational\n- You can cancel deletion by restarting the resource\n- Billing stops immediately when deletion is requested\n\nAfter the grace period expires, the resource transitions to `deleted` (99) and is permanently\nremoved from the system.","title":"Compute","version":"5.0.4"},"openapi":"3.0.0","paths":{"/compute/backups/":{"get":{"description":"Retrieve a paginated list of instance backups (LXD and/or Hyper-V) across your projects.\nSupports filtering by type, project, instance, state, and other attributes.\nResults can be ordered and paginated.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- resource_links__contra_resource_id (gt, gte, in, isnull, lt, lte, range)\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- project_id (gt, gte, in, isnull, lt, lte, range)\n- project__address_id (gt, gte, in, isnull, lt, lte, range)\n- project__name (in, icontains, iendswith, iexact, istartswith)\n- project__region_id (gt, gte, in, isnull, lt, lte, range)\n- project__reseller_id (gt, gte, in, isnull, lt, lte, range)\n- state (gt, gte, in, isnull, lt, lte, range)\n- type\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- id\n- project_id\n- state\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeBackupsList","x-scope":[""]}}},"description":"Backups retrieved successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Instance Backups","tags":["Compute Backups"]},"post":{"description":"Create a new backup from a running compute instance (LXD or Hyper-V). Specify the\nbackup type, instance to backup and project.\nThe instance must be in a running state to create a backup.\n","parameters":[],"requestBody":{"content":{"application/json":{"examples":{"hyperv_backup":{"description":"","summary":"Create backup for Hyper-V Windows VM","value":{"instance_id":456,"name":"critical-windows-backup","project_id":1,"type":"hyperv"}},"lxd_backup":{"description":"","summary":"Create backup for LXD instance","value":{"instance_id":123,"name":"weekly-lxd-backup","project_id":1,"type":"lxd"}}},"schema":{"$ref":"#/components/schemas/ComputeBackupsCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeBackupsResponse","x-scope":[""]}}},"description":"Backup created successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"Create Instance Backup","tags":["Compute Backups"]}},"/compute/backups/{pk}/":{"delete":{"description":"This method allows the User to delete a specified Compute Backup.\n","parameters":[{"description":"The id of the Compute Backup to be deleted","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Compute Backup request to be deleted was successful. The virtual infrastructure the ID respresents\nwill be scrubbed from the region.\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete a specified Compute Backup","tags":["Compute Backups"]},"get":{"description":"Retrieve detailed information about a specific backup, including its type (LXD or Hyper-V),\nassociated instance, project, validity timestamp, and current state.\n","parameters":[{"description":"The id of the backup to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeBackupsResponse","x-scope":[""]}}},"description":"Backup details retrieved successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read Backup Details","tags":["Compute Backups"]},"patch":{"description":"Update a backup to change its name or state. Set state to delete to initiate\nbackup deletion and free up repository storage space.\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The id of the backup to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_backup":{"description":"","summary":"Delete backup","value":{"name":"old-backup-to-remove","state":"delete"}},"rename_backup":{"description":"","summary":"Rename backup with descriptive name","value":{"name":"monthly-backup-2025-10-31"}}},"schema":{"$ref":"#/components/schemas/ComputeBackupsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeBackupsResponse","x-scope":[""]}}},"description":"Backup updated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Backup","tags":["Compute Backups"]},"put":{"description":"Update a backup to change its name or state. Set state to delete to initiate\nbackup deletion and free up repository storage space.\n","parameters":[{"description":"The id of the backup to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_backup":{"description":"","summary":"Delete backup","value":{"name":"old-backup-to-remove","state":"delete"}},"rename_backup":{"description":"","summary":"Rename backup with descriptive name","value":{"name":"monthly-backup-2025-10-31"}}},"schema":{"$ref":"#/components/schemas/ComputeBackupsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeBackupsResponse","x-scope":[""]}}},"description":"Backup updated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Backup","tags":["Compute Backups"]}},"/compute/gpus/":{"get":{"description":"Retrieve a paginated list of GPU resources across your projects. Supports filtering\nby project, region, state, and other attributes. Results can be ordered and paginated.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- resource_links__contra_resource_id (gt, gte, in, isnull, lt, lte, range)\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- project_id (gt, gte, in, isnull, lt, lte, range)\n- project__address_id (gt, gte, in, isnull, lt, lte, range)\n- project__name (in, icontains, iendswith, iexact, istartswith)\n- project__region_id (gt, gte, in, isnull, lt, lte, range)\n- project__reseller_id (gt, gte, in, isnull, lt, lte, range)\n- state (gt, gte, in, isnull, lt, lte, range)\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- id\n- project_id\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeGPUsList","x-scope":[""]}}},"description":"GPU resources retrieved successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Compute GPUs Resources","tags":["Compute Gpus"]},"post":{"description":"Attach a GPU hardware accelerator to a running LXD instance. Specify the target\nLXD instance ID, project, and GPU specifications (SKUs) to provision and attach\nthe GPU resource.\n","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeGPUsCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeGPUsResponse","x-scope":[""]}}},"description":"GPU resource created and attachment initiated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"Attach GPU to LXD Instance","tags":["Compute Gpus"]}},"/compute/gpus/{pk}/":{"delete":{"description":"This method allows the User to delete a specified Compute GPU. Requesting to delete a GPU will result\nin the GPU being detached from the LXD Compute Instance it is attached to.\n","parameters":[{"description":"The id of the Compute GPU to be deleted","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Compute GPU request to be deleted was successful. The GPU the ID respresents will be detached from\nthe LXD Compute Instance it is attached to.\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete a specified Compute GPU","tags":["Compute Gpus"]},"get":{"description":"Retrieve detailed information about a specific GPU resource, including its attached\nLXD instance, capacity specifications, current state, and project information.\n","parameters":[{"description":"The id of the GPU resource to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeGPUsResponse","x-scope":[""]}}},"description":"GPU resource details retrieved successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read GPU Resource Details","tags":["Compute Gpus"]},"patch":{"description":"Update a GPU resource to change its state. Set state to delete to initiate\ndetachment from the LXD instance.\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The id of the GPU resource to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"detach_gpu":{"description":"","summary":"Detach GPU from Instance","value":{"state":"delete"}}},"schema":{"$ref":"#/components/schemas/ComputeGPUsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeGPUsResponse","x-scope":[""]}}},"description":"GPU resource updated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update GPU Resource","tags":["Compute Gpus"]},"put":{"description":"Update a GPU resource to change its state. Set state to delete to initiate\ndetachment from the LXD instance.\n","parameters":[{"description":"The id of the GPU resource to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"detach_gpu":{"description":"","summary":"Detach GPU from Instance","value":{"state":"delete"}}},"schema":{"$ref":"#/components/schemas/ComputeGPUsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeGPUsResponse","x-scope":[""]}}},"description":"GPU resource updated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update GPU Resource","tags":["Compute Gpus"]}},"/compute/images/":{"get":{"description":"Retrieve a paginated list of available operating system images. Supports filtering\nby region, SKU name, and OS variant. Results can be ordered and paginated.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- id (gt, gte, in, isnull, lt, lte, range)\n- member_id (gt, gte, in, isnull, lt, lte, range)\n- os_variant (in, icontains, iendswith, iexact, istartswith)\n- region_id (gt, gte, in, isnull, lt, lte, range)\n- sku_name (in, icontains, iendswith, iexact, istartswith)\n- type\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- sku_name (default)\n- id\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeImagesList","x-scope":[""]}}},"description":"OS images retrieved successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]}},"summary":"List Available OS Images","tags":["Compute Images"]}},"/compute/images/{pk}/":{"get":{"description":"Retrieve detailed information about a specific operating system image, including\nits SKU name, filename, and OS variant.\n","parameters":[{"description":"The id of the OS image to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeImagesResponse","x-scope":[""]}}},"description":"OS image details retrieved successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read OS Image Details","tags":["Compute Images"]}},"/compute/instances/":{"get":{"description":"Retrieve a paginated list of compute instances (LXD and/or Hyper-V) across your projects.\nSupports filtering by type, project, state, name, and other attributes. Results can be\nordered and paginated.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- project_id (gt, gte, in, isnull, lt, lte, range)\n- project__address_id (gt, gte, in, isnull, lt, lte, range)\n- project__name (in, icontains, iendswith, iexact, istartswith)\n- project__region_id (gt, gte, in, isnull, lt, lte, range)\n- project__reseller_id (gt, gte, in, isnull, lt, lte, range)\n- state (gt, gte, in, isnull, lt, lte, range)\n- type\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- id\n- project_id\n- state\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeInstancesList","x-scope":[""]}}},"description":"Compute instances retrieved successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Compute Instances","tags":["Compute Instances"]},"post":{"description":"Create a new compute instance (LXD or Hyper-V). Specify the instance type, project,\nOS image, resource specifications (SKUs for CPU, RAM, storage), and network interfaces.\nThe instance will be provisioned and started automatically.\n","parameters":[],"requestBody":{"content":{"application/json":{"examples":{"hyperv_vm":{"description":"","summary":"Hyper-V Windows Server VM","value":{"grace_period":72,"interfaces":[{"gateway":true,"ipv4_addresses":[{"address":"10.0.0.10","nat":true}],"ipv6_addresses":[{"address":"2a02:2078:9:1234::20"}]}],"metadata":{"dns4":"8.8.8.8","dns6":"2001:4860:4860::8888","email":"admin@example.com"},"name":"windows-server","project_id":1,"specs":[{"quantity":8,"sku_name":"RAM_001"},{"quantity":4,"sku_name":"vCPU_002"},{"quantity":100,"sku_name":"SSD_001"},{"quantity":1,"sku_name":"MSServer2022"}],"type":"hyperv"}},"lxd_container":{"description":"","summary":"LXD Container with Ubuntu","value":{"grace_period":72,"interfaces":[{"gateway":true,"ipv4_addresses":[{"address":"192.168.0.10","nat":true}],"ipv6_addresses":[{"address":"2a02:2078:9:1234::10"}]}],"metadata":{"dns":"8.8.8.8,8.8.4.4","instance_type":"container","userdata":"#cloud-config\nusers:\n  - name: ubuntu\n    groups: sudo\n    shell: /bin/bash\n    lock_passwd: false\n    passwd: $6$rounds=4096$salt$hashedpassword\n    ssh_authorized_keys:\n      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...\nchpasswd:\n  expire: false\nssh_pwauth: true\n"},"name":"my-ubuntu-container","project_id":1,"specs":[{"quantity":4,"sku_name":"RAM_001"},{"quantity":2,"sku_name":"vCPU_001"},{"quantity":20,"sku_name":"SSD_001"},{"quantity":1,"sku_name":"UBUNTU2404"}],"type":"lxd"}},"lxd_vm":{"description":"","summary":"LXD Virtual Machine with Ubuntu","value":{"grace_period":72,"interfaces":[{"gateway":true,"ipv4_addresses":[{"address":"192.168.0.11","nat":true}],"ipv6_addresses":[{"address":"2a02:2078:9:1234::11"}]}],"metadata":{"dns":"8.8.8.8,8.8.4.4","instance_type":"virtual-machine","userdata":"#cloud-config\nusers:\n  - name: administrator\n    groups: sudo\n    shell: /bin/bash\n    lock_passwd: false\n    passwd: $6$rounds=4096$salt$hashedpassword\n    ssh_authorized_keys:\n      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...\nchpasswd:\n  expire: false\nssh_pwauth: true\n"},"name":"my-ubuntu-vm","project_id":1,"specs":[{"quantity":8,"sku_name":"RAM_001"},{"quantity":4,"sku_name":"vCPU_001"},{"quantity":50,"sku_name":"SSD_001"},{"quantity":1,"sku_name":"UBUNTU2404"}],"type":"lxd"}}},"schema":{"$ref":"#/components/schemas/ComputeInstancesCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeInstancesResponse","x-scope":[""]}}},"description":"Compute instance created and provisioning initiated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"Create Compute Instance","tags":["Compute Instances"]}},"/compute/instances/{pk}/":{"delete":{"description":"This method allows the User to delete a Compute Instance immediately. The grace period will be set to 0\nwhich will facilitate the virtual infrastructure for the Compute Instance to be scrubbed from the region\nwithout the option to restore.\n","parameters":[{"description":"The id of the Compute Instance to be deleted","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Compute Instance request to be deleted was successful. The virtual infrastructure the ID respresents\nwill be scrubbed from the region.\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete of a specified Compute Instance","tags":["Compute Instances"]},"get":{"description":"Retrieve detailed information about a specific compute instance, including its type\n(LXD or Hyper-V), resource specifications, network interfaces, OS image, current state,\nand project information.\n","parameters":[{"description":"The id of the compute instance to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeInstancesResponse","x-scope":[""]}}},"description":"Compute instance details retrieved successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read Compute Instance Details","tags":["Compute Instances"]},"patch":{"description":"Update a compute instance to modify its configuration or change its state. You can update\nresource specifications (CPU, RAM, storage), network interfaces, or change the instance state\n(stop, restart, delete, update_running, update_stopped).\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The id of the compute instance to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_instance":{"description":"","summary":"Delete an instance permanently","value":{"state":"delete"}},"restart_instance":{"description":"","summary":"Restart a stopped instance","value":{"state":"restart"}},"stop_instance":{"description":"","summary":"Stop a running instance","value":{"state":"stop"}},"upgrade_instance":{"description":"","summary":"Upgrade instance RAM and CPU","value":{"specs":[{"quantity":32,"sku_name":"RAM_001"},{"quantity":16,"sku_name":"vCPU_001"}]}}},"schema":{"$ref":"#/components/schemas/ComputeInstancesUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeInstancesResponse","x-scope":[""]}}},"description":"Compute instance updated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Compute Instance","tags":["Compute Instances"]},"put":{"description":"Update a compute instance to modify its configuration or change its state. You can update\nresource specifications (CPU, RAM, storage), network interfaces, or change the instance state\n(stop, restart, delete, update_running, update_stopped).\n","parameters":[{"description":"The id of the compute instance to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_instance":{"description":"","summary":"Delete an instance permanently","value":{"state":"delete"}},"restart_instance":{"description":"","summary":"Restart a stopped instance","value":{"state":"restart"}},"stop_instance":{"description":"","summary":"Stop a running instance","value":{"state":"stop"}},"upgrade_instance":{"description":"","summary":"Upgrade instance RAM and CPU","value":{"specs":[{"quantity":32,"sku_name":"RAM_001"},{"quantity":16,"sku_name":"vCPU_001"}]}}},"schema":{"$ref":"#/components/schemas/ComputeInstancesUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeInstancesResponse","x-scope":[""]}}},"description":"Compute instance updated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Compute Instance","tags":["Compute Instances"]}},"/compute/snapshots/":{"get":{"description":"Retrieve a paginated list of instance snapshots (LXD and/or Hyper-V) across your projects.\nSupports filtering by type, project, instance, state, and other attributes. Results can be\nordered and paginated.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- resource_links__contra_resource_id (gt, gte, in, isnull, lt, lte, range)\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- project_id (gt, gte, in, isnull, lt, lte, range)\n- project__address_id (gt, gte, in, isnull, lt, lte, range)\n- project__name (in, icontains, iendswith, iexact, istartswith)\n- project__region_id (gt, gte, in, isnull, lt, lte, range)\n- project__reseller_id (gt, gte, in, isnull, lt, lte, range)\n- state (gt, gte, in, isnull, lt, lte, range)\n- type\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- id\n- project_id\n- state\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeSnapshotsList","x-scope":[""]}}},"description":"Snapshots retrieved successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Instance Snapshots","tags":["Compute Snapshots"]},"post":{"description":"Create a new snapshot from a running compute instance (LXD or Hyper-V). Specify the\nsnapshot type, instance to snapshot, and project. The instance must be in a running\nstate to create a snapshot.\n","parameters":[],"requestBody":{"content":{"application/json":{"examples":{"hyperv_snapshot":{"description":"","summary":"Create snapshot of Hyper-V VM before maintenance","value":{"instance_id":101,"name":"before-windows-updates","project_id":1,"type":"hyperv"}},"lxd_snapshot":{"description":"","summary":"Create snapshot of LXD container before updates","value":{"instance_id":789,"name":"pre-app-update-snapshot","project_id":1,"type":"lxd"}}},"schema":{"$ref":"#/components/schemas/ComputeSnapshotsCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeSnapshotsResponse","x-scope":[""]}}},"description":"Snapshot created successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"Create Instance Snapshot","tags":["Compute Snapshots"]}},"/compute/snapshots/{pk}/":{"delete":{"description":"This method allows the User to delete a specified Compute Snapshot.\n","parameters":[{"description":"The id of the Compute Snapshot to be deleted","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Compute Snapshot request to be deleted was successful. The virtual infrastructure the ID respresents\nwill be scrubbed from the region.\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete a specified Compute Snapshot","tags":["Compute Snapshots"]},"get":{"description":"Retrieve detailed information about a specific snapshot, including its type (LXD or Hyper-V),\nassociated instance, project, creation timestamp, and current state.\n","parameters":[{"description":"The id of the snapshot to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeSnapshotsResponse","x-scope":[""]}}},"description":"Snapshot details retrieved successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read Snapshot Details","tags":["Compute Snapshots"]},"patch":{"description":"Update a snapshot to change its name or state. Set state to delete to initiate\nsnapshot deletion and free up storage space.\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The id of the snapshot to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_snapshot":{"description":"Remove this snapshot when it's no longer needed","summary":"Delete the snapshot","value":{"state":"delete"}},"revert_instance":{"description":"Revert the Compute Instance back to the state captured in this snapshot","summary":"Restore instance to snapshot state","value":{"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/ComputeSnapshotsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeSnapshotsResponse","x-scope":[""]}}},"description":"Snapshot updated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Snapshot","tags":["Compute Snapshots"]},"put":{"description":"Update a snapshot to change its name or state. Set state to delete to initiate\nsnapshot deletion and free up storage space.\n","parameters":[{"description":"The id of the snapshot to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_snapshot":{"description":"Remove this snapshot when it's no longer needed","summary":"Delete the snapshot","value":{"state":"delete"}},"revert_instance":{"description":"Revert the Compute Instance back to the state captured in this snapshot","summary":"Restore instance to snapshot state","value":{"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/ComputeSnapshotsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeSnapshotsResponse","x-scope":[""]}}},"description":"Snapshot updated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Snapshot","tags":["Compute Snapshots"]}},"/network/firewalls/":{"get":{"description":"Retrieve a paginated list of network firewall configurations across your projects.\nSupports filtering by type (project or geo), project, state, and other attributes.\nResults can be ordered and paginated.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- project_id (gt, gte, in, isnull, lt, lte, range)\n- project__address_id (gt, gte, in, isnull, lt, lte, range)\n- project__name (in, icontains, iendswith, iexact, istartswith)\n- project__region_id (gt, gte, in, isnull, lt, lte, range)\n- project__reseller_id (gt, gte, in, isnull, lt, lte, range)\n- state (gt, gte, in, isnull, lt, lte, range)\n- type\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- id\n- project_id\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkFirewallsList","x-scope":[""]}}},"description":"Firewall rules retrieved successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Firewall Rules","tags":["Network Firewalls"]},"post":{"description":"Create a new firewall configuration with one or more rules. Specify the firewall type\n(project for fine-grained rules or geo for country-based filtering), project, router,\nand the list of rules to apply. Rules are evaluated in the order provided.\n","parameters":[],"requestBody":{"content":{"application/json":{"examples":{"geo_allow":{"description":"","summary":"Allow inbound traffic from all ranges in an IP address group","value":{"project_id":1,"rules":[{"allow":true,"group_name":"@IE_v4","inbound":true}],"type":"geo"}},"geo_block":{"description":"","summary":"Block outbound traffic to all ranges in an IP address group","value":{"project_id":1,"rules":[{"allow":false,"group_name":"@IE_v6","inbound":false}],"type":"geo"}},"project_allow_http":{"description":"","summary":"Allow HTTP(S) request to an RFC 1918 IP address of a Compute Instance running a public website","value":{"project_id":1,"rules":[{"allow":true,"description":"HTTP(S) allow all","destination":"10.0.0.2","inbound":true,"port":"80,443","protocol":"tcp","source":"*","zone":"Public"}],"type":"project"}}},"schema":{"$ref":"#/components/schemas/NetworkFirewallsCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkFirewallsResponse","x-scope":[""]}}},"description":"Firewall created successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"Create Firewall Rules","tags":["Network Firewalls"]}},"/network/firewalls/{pk}/":{"delete":{"description":"This method allows the User to delete a Network Firewall immediately. The grace period will be set to 0\nwhich will facilitate the virtual infrastructure for the Network Firewall to be scrubbed from the region\nwithout the option to restore.\n","parameters":[{"description":"The id of the Network Firewall to be deleted","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Network Firewall request to be deleted was successful. The virtual infrastructure the ID respresents\nwill be scrubbed from the region.\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete of a specified Network Firewall","tags":["Network Firewalls"]},"get":{"description":"Retrieve detailed information about a specific firewall configuration, including its type\n(project or geo), associated router, complete list of rules, and current state.\n","parameters":[{"description":"The id of the firewall to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkFirewallsResponse","x-scope":[""]}}},"description":"Firewall details retrieved successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read Firewall Details","tags":["Network Firewalls"]},"patch":{"description":"Update a firewall configuration to modify its name, rules, or state. You can replace the\nentire rule list or change the firewall state to update_running or delete.\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The id of the firewall to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_firewall":{"description":"","summary":"Delete firewall permanently","value":{"state":"delete"}},"update_firewall_rules":{"description":"","summary":"Update firewall to allow HTTP(S) and SSH access","value":{"rules":[{"allow":true,"description":"HTTP(S) allow all","destination":"10.0.0.2","inbound":true,"port":"80,443","protocol":"tcp","source":"*","zone":"Public"},{"allow":true,"description":"SSH from office","destination":"10.0.0.2","inbound":true,"port":"22","protocol":"tcp","source":"@office","zone":"Public"}],"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/NetworkFirewallsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkFirewallsResponse","x-scope":[""]}}},"description":"Firewall updated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Firewall Rules","tags":["Network Firewalls"]},"put":{"description":"Update a firewall configuration to modify its name, rules, or state. You can replace the\nentire rule list or change the firewall state to update_running or delete.\n","parameters":[{"description":"The id of the firewall to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_firewall":{"description":"","summary":"Delete firewall permanently","value":{"state":"delete"}},"update_firewall_rules":{"description":"","summary":"Update firewall to allow HTTP(S) and SSH access","value":{"rules":[{"allow":true,"description":"HTTP(S) allow all","destination":"10.0.0.2","inbound":true,"port":"80,443","protocol":"tcp","source":"*","zone":"Public"},{"allow":true,"description":"SSH from office","destination":"10.0.0.2","inbound":true,"port":"22","protocol":"tcp","source":"@office","zone":"Public"}],"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/NetworkFirewallsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkFirewallsResponse","x-scope":[""]}}},"description":"Firewall updated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Firewall Rules","tags":["Network Firewalls"]}},"/network/ip_groups/":{"get":{"description":"Retrieve a paginated list of Network IP Groups.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- created (gt, gte, in, isnull, lt, lte, range)\n- description (in, icontains, iendswith, iexact, istartswith)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- type\n- updated (gt, gte, in, isnull, lt, lte, range)\n- version (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- created\n- updated\n- version\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkIPGroupsList","x-scope":[""]}}},"description":"A paginated list of Network IP Groups with their CIDR networks and metadata"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List IP Address Groups","tags":["Network Ip Groups"]},"post":{"description":"Create a new Network IP Group.\nSpecify a name, IP version (IPv4 or IPv6), and a list of CIDR networks to include in the group.\nGroups can be used in firewall rules for access control.\nOnly project type Network IP Groups can be created.\n","parameters":[],"requestBody":{"content":{"application/json":{"examples":{"office_networks":{"description":"","summary":"Create group for company office locations","value":{"cidrs":["91.103.3.0/24","90.103.2.36","185.94.188.0/24"],"name":"office-networks","version":4}},"partner_vpns":{"description":"","summary":"Create group for partner VPN endpoints","value":{"cidrs":["91.103.3.36","90.103.2.0/24","185.94.188.100"],"name":"partner-vpn-endpoints","version":4}},"trusted_admins":{"description":"","summary":"Create group for administrator workstations","value":{"cidrs":["2a0d:8000::/29","2a10:4980::1","2001:678:200::/48"],"name":"trusted-admin-workstations","version":6}}},"schema":{"$ref":"#/components/schemas/NetworkIPGroupsCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkIPGroupsResponse","x-scope":[""]}}},"description":"Network IP Group created successfully with assigned ID and CIDR list"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]}},"summary":"Create a Network IP Group","tags":["Network Ip Groups"]}},"/network/ip_groups/{pk}/":{"delete":{"description":"Delete an Network IP Group from the system.\nOnly project type Network IP Groups can be updated.\nGroups currently in use by firewall rules cannot be deleted.\n","parameters":[{"description":"The ID of the Network IP Group to delete","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Network IP Group deleted successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete Network IP Group","tags":["Network Ip Groups"]},"get":{"description":"Retrieve detailed information about a specific Network IP Group including its name, IP version,\nand list of CIDR networks.\n","parameters":[{"description":"The ID of the Network IP Group to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkIPGroupsResponse","x-scope":[""]}}},"description":"Network IP Group details including CIDR network list and version information"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read Network IP Group Details","tags":["Network Ip Groups"]},"patch":{"description":"Update a Network IP Group's configuration.\nModify the group name, IP version, or the list of CIDR networks included in the group.\nOnly project type Network IP Groups can be updated.\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The ID of the Network IP Group to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"office_networks":{"description":"","summary":"Create group for company office locations","value":{"cidrs":["91.103.3.0/24","90.103.2.36","185.94.188.0/24"],"name":"office-networks","version":4}},"partner_vpns":{"description":"","summary":"Create group for partner VPN endpoints","value":{"cidrs":["91.103.3.36","90.103.2.0/24","185.94.188.100"],"name":"partner-vpn-endpoints","version":4}},"trusted_admins":{"description":"","summary":"Create group for administrator workstations","value":{"cidrs":["2a0d:8000::/29","2a10:4980::1","2001:678:200::/48"],"name":"trusted-admin-workstations","version":6}}},"schema":{"$ref":"#/components/schemas/NetworkIPGroupsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkIPGroupsResponse","x-scope":[""]}}},"description":"Network IP Group updated successfully with new configuration applied"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Network IP Group","tags":["Network Ip Groups"]},"put":{"description":"Update a Network IP Group's configuration.\nModify the group name, IP version, or the list of CIDR networks included in the group.\nOnly project type Network IP Groups can be updated.\n","parameters":[{"description":"The ID of the Network IP Group to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"office_networks":{"description":"","summary":"Create group for company office locations","value":{"cidrs":["91.103.3.0/24","90.103.2.36","185.94.188.0/24"],"name":"office-networks","version":4}},"partner_vpns":{"description":"","summary":"Create group for partner VPN endpoints","value":{"cidrs":["91.103.3.36","90.103.2.0/24","185.94.188.100"],"name":"partner-vpn-endpoints","version":4}},"trusted_admins":{"description":"","summary":"Create group for administrator workstations","value":{"cidrs":["2a0d:8000::/29","2a10:4980::1","2001:678:200::/48"],"name":"trusted-admin-workstations","version":6}}},"schema":{"$ref":"#/components/schemas/NetworkIPGroupsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkIPGroupsResponse","x-scope":[""]}}},"description":"Network IP Group updated successfully with new configuration applied"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Network IP Group","tags":["Network Ip Groups"]}},"/network/routers/":{"get":{"description":"Retrieve a paginated list of network routers from all your projects. Each project has\nat most one router. Supports filtering by type (router or static_route), project, state, name, and\nother attributes. Results can be ordered and paginated.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- project_id (gt, gte, in, isnull, lt, lte, range)\n- project__address_id (gt, gte, in, isnull, lt, lte, range)\n- project__name (in, icontains, iendswith, iexact, istartswith)\n- project__region_id (gt, gte, in, isnull, lt, lte, range)\n- project__reseller_id (gt, gte, in, isnull, lt, lte, range)\n- state (gt, gte, in, isnull, lt, lte, range)\n- type\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- id\n- project_id\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRoutersList","x-scope":[""]}}},"description":"Routers retrieved successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Virtual Network Routers","tags":["Network Routers"]},"post":{"description":"Create a new Network Routers Resource entry using data given by user for a specified type, \"router\" or\n\"static_route\".\n\nCreate a new netwotk router for a project. Each project can have only one of the type \"router\". For this\ntype, optionally define one or more private networks using RFC 1918 addresses (10.x.x.x, 172.16-31.x.x,\n192.168.x.x). If no networks are specified, a default 10.0.0.1/24 network is created.\nAdditional networks can be added later through the update operation.\n\nOne or more of the Network Router of the type \"static_route\" can be added to the Project to manage mapping\na destination network to a nexthop IP.\n","parameters":[],"requestBody":{"content":{"application/json":{"examples":{"multiple_networks":{"description":"","summary":"Create router with multiple networks","value":{"networks":[{"ipv4":"10.0.1.0/24","name":"web-tier"},{"ipv4":"10.0.2.0/24","name":"app-tier"},{"ipv4":"10.0.3.0/24","name":"db-tier"}]}},"single_network":{"description":"","summary":"Create router with custom network","value":{"networks":[{"ipv4":"10.10.10.0/24","name":"production-net"}]}}},"schema":{"$ref":"#/components/schemas/NetworkRoutersCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRoutersResponse","x-scope":[""]}}},"description":"Router created successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"Create Virtual Network Router","tags":["Network Routers"]}},"/network/routers/{pk}/":{"delete":{"description":"This method allows the User to delete a Network Router immediately. The grace period will be set to 0\nwhich will facilitate the virtual infrastructure for the Network Router to be scrubbed from the region\nwithout the option to restore.\n","parameters":[{"description":"The id of the Network Router to be deleted","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Network Router request to be deleted was successful. The virtual infrastructure the ID respresents\nwill be scrubbed from the region.\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete of a specified Network Router","tags":["Network Routers"]},"get":{"description":"Retrieve detailed information about a specific network router configuration, including its type\n(router or static_route), associated networking details, and current state.\n","parameters":[{"description":"The id of the router to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRoutersResponse","x-scope":[""]}}},"description":"Router details retrieved successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read Virtual Router Details","tags":["Network Routers"]},"patch":{"description":"Update a network router to modify its name, add new private networks, rename existing\nnetworks, or change its state. When adding networks, specify new IPv4 CIDR ranges. When\nupdating existing networks, reference them by VLAN ID.\n\nFor static routes, they can be renamed or have there state changed,\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The id of the router to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"add_new_network":{"description":"","summary":"Add a new network to existing router","value":{"networks":[{"ipv4":"10.0.1.0/24","ipv6":"fd00::/64","name":"existing-network","vlan":100},{"ipv4":"10.0.50.0/24","name":"new-database-network"}]}},"delete_router":{"description":"","summary":"Change state to request deletion of a Network Router","value":{"state":"delete"}},"rename_existing_network":{"description":"","summary":"Rename an existing network","value":{"networks":[{"ipv4":"10.0.1.0/24","ipv6":"fd00:1::/64","name":"production-web-tier","vlan":100}]}},"restore_router":{"description":"","summary":"Change state to request restoration of a Network Router","value":{"state":"restart"}},"update_existing_networks":{"description":"","summary":"Keep existing networks and add multiple new ones","value":{"networks":[{"ipv4":"10.0.1.0/24","ipv6":"fd00:1::/64","name":"web-tier","vlan":100},{"ipv4":"10.0.2.0/24","ipv6":"fd00:2::/64","name":"app-tier","vlan":101},{"ipv4":"10.0.100.0/24","name":"new-monitoring-network"},{"ipv4":"192.168.10.0/24","name":"new-backup-network"}]}},"update_router":{"description":"","summary":"Change state to update a Network Router","value":{"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/NetworkRoutersUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRoutersResponse","x-scope":[""]}}},"description":"Router updated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Network Router","tags":["Network Routers"]},"put":{"description":"Update a network router to modify its name, add new private networks, rename existing\nnetworks, or change its state. When adding networks, specify new IPv4 CIDR ranges. When\nupdating existing networks, reference them by VLAN ID.\n\nFor static routes, they can be renamed or have there state changed,\n","parameters":[{"description":"The id of the router to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"add_new_network":{"description":"","summary":"Add a new network to existing router","value":{"networks":[{"ipv4":"10.0.1.0/24","ipv6":"fd00::/64","name":"existing-network","vlan":100},{"ipv4":"10.0.50.0/24","name":"new-database-network"}]}},"delete_router":{"description":"","summary":"Change state to request deletion of a Network Router","value":{"state":"delete"}},"rename_existing_network":{"description":"","summary":"Rename an existing network","value":{"networks":[{"ipv4":"10.0.1.0/24","ipv6":"fd00:1::/64","name":"production-web-tier","vlan":100}]}},"restore_router":{"description":"","summary":"Change state to request restoration of a Network Router","value":{"state":"restart"}},"update_existing_networks":{"description":"","summary":"Keep existing networks and add multiple new ones","value":{"networks":[{"ipv4":"10.0.1.0/24","ipv6":"fd00:1::/64","name":"web-tier","vlan":100},{"ipv4":"10.0.2.0/24","ipv6":"fd00:2::/64","name":"app-tier","vlan":101},{"ipv4":"10.0.100.0/24","name":"new-monitoring-network"},{"ipv4":"192.168.10.0/24","name":"new-backup-network"}]}},"update_router":{"description":"","summary":"Change state to update a Network Router","value":{"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/NetworkRoutersUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRoutersResponse","x-scope":[""]}}},"description":"Router updated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Network Router","tags":["Network Routers"]}},"/network/vpns/":{"get":{"description":"Retrieve a list of Network VPNs Resources\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- project_id (gt, gte, in, isnull, lt, lte, range)\n- project__address_id (gt, gte, in, isnull, lt, lte, range)\n- project__name (in, icontains, iendswith, iexact, istartswith)\n- project__region_id (gt, gte, in, isnull, lt, lte, range)\n- project__reseller_id (gt, gte, in, isnull, lt, lte, range)\n- state (gt, gte, in, isnull, lt, lte, range)\n- type\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- id\n- project_id\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkVPNsList","x-scope":[""]}}},"description":"A list of Network VPNs Resources"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Network VPNs Resources","tags":["Network Vpns"]},"post":{"description":"Create a new Network VPN Resource entry using data given by user.","parameters":[],"requestBody":{"content":{"application/json":{"examples":{"full_configuration":{"description":"","summary":"Create a Network VPN defining all the configuration options.","value":{"metadata":{"child_sas":[{"local_ts":"10.0.0.0/24","remote_ts":"172.16.10.0/27"}],"ike_authentication":"SHA256","ike_dh_groups":"Group 24","ike_encryption":"256 bit AES-CBC","ike_gateway_type":"hostname","ike_gateway_value":"hostname.example.com","ike_lifetime":"20000","ike_pre_shared_key":"R4nd0mKey!","ike_version":"v2-only","ipsec_authentication":"SHA256","ipsec_encryption":"AES 256 GCM","ipsec_establish_time":"On Traffic","ipsec_lifetime":3000,"ipsec_pfs_groups":"Group 24","traffic_selector":true}}}},"schema":{"$ref":"#/components/schemas/NetworkVPNsCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkVPNsResponse","x-scope":[""]}}},"description":"Network VPN Resource record was created successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"Create a new Network VPN Resource entry","tags":["Network Vpns"]}},"/network/vpns/{pk}/":{"delete":{"description":"This method allows the User to delete a specified Network VPN.\n","parameters":[{"description":"The id of the Network VPN to be deleted","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Network VPN request to be deleted was successful. The virtual infrastructure the ID respresents\nwill be scrubbed from the region.\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete a specified Network VPN","tags":["Network Vpns"]},"get":{"description":"Attempt to read a Network VPN Resource record by the given `id`, returning a 404 if it does not exist\n","parameters":[{"description":"The id of the Network VPN record to be read","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkVPNsResponse","x-scope":[""]}}},"description":"Network VPN Resource record was read successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read the details of a specified Network VPN Resource record","tags":["Network Vpns"]},"patch":{"description":"Attempt to update a Network VPN Resource record by the given `id`, returning a 404 if it does not exist\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The id of the Network VPN record to be updated","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_vpn":{"description":"","summary":"Change state to delete Network VPN","value":{"state":"delete"}},"update_child_sas":{"description":"","summary":"Update the IKE Configuration of the Network VPN","value":{"metadata":{"child_sas":[{"local_ts":"10.0.0.0/24","remote_ts":"172.16.10.0/27"},{"local_ts":"192.168.1.0/24","remote_ts":"172.16.10.0/27"}]}}},"update_ike_configuration":{"description":"","summary":"Update the IKE Configuration of the Network VPN","value":{"metadata":{"ike_authentication":"SHA384","ike_dh_groups":"Group 19","ike_encryption":"256 bit AES-CBC","ike_gateway_type":"public_ip","ike_gateway_value":"1.2.3.4","ike_lifetime":"28800","ike_pre_shared_key":"R4nd0mKey!23","ike_version":"v2-only"}}},"update_ipsec_configuration":{"description":"","summary":"Update the IKE Configuration of the Network VPN","value":{"metadata":{"ipsec_authentication":"SHA256","ipsec_encryption":"AES 256","ipsec_establish_time":"Immediately","ipsec_lifetime":3600,"ipsec_pfs_groups":"Group 20"}}},"update_vpn":{"description":"","summary":"Change state to update Network VPN","value":{"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/NetworkVPNsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkVPNsResponse","x-scope":[""]}}},"description":"Network VPN Resource record was updated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update a Network VPN Resource record","tags":["Network Vpns"]},"put":{"description":"Attempt to update a Network VPN Resource record by the given `id`, returning a 404 if it does not exist\n","parameters":[{"description":"The id of the Network VPN record to be updated","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"delete_vpn":{"description":"","summary":"Change state to delete Network VPN","value":{"state":"delete"}},"update_child_sas":{"description":"","summary":"Update the IKE Configuration of the Network VPN","value":{"metadata":{"child_sas":[{"local_ts":"10.0.0.0/24","remote_ts":"172.16.10.0/27"},{"local_ts":"192.168.1.0/24","remote_ts":"172.16.10.0/27"}]}}},"update_ike_configuration":{"description":"","summary":"Update the IKE Configuration of the Network VPN","value":{"metadata":{"ike_authentication":"SHA384","ike_dh_groups":"Group 19","ike_encryption":"256 bit AES-CBC","ike_gateway_type":"public_ip","ike_gateway_value":"1.2.3.4","ike_lifetime":"28800","ike_pre_shared_key":"R4nd0mKey!23","ike_version":"v2-only"}}},"update_ipsec_configuration":{"description":"","summary":"Update the IKE Configuration of the Network VPN","value":{"metadata":{"ipsec_authentication":"SHA256","ipsec_encryption":"AES 256","ipsec_establish_time":"Immediately","ipsec_lifetime":3600,"ipsec_pfs_groups":"Group 20"}}},"update_vpn":{"description":"","summary":"Change state to update Network VPN","value":{"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/NetworkVPNsUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkVPNsResponse","x-scope":[""]}}},"description":"Network VPN Resource record was updated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update a Network VPN Resource record","tags":["Network Vpns"]}},"/project/":{"get":{"description":"Retrieve a paginated list of your cloud projects. Supports filtering by region,\nname, manager, and other attributes. Results can be ordered and paginated.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- address_id (gt, gte, in, isnull, lt, lte, range)\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- manager_id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- region_id (gt, gte, in, isnull, lt, lte, range)\n- reseller_id (gt, gte, in, isnull, lt, lte, range)\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- region_id\n- address_id\n- created\n- manager_id\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectList","x-scope":[""]}}},"description":"Projects retrieved successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Projects","tags":["Project"]},"post":{"description":"Create a new cloud project in a specified region. Projects provide isolated network\nenvironments for deploying and managing your cloud resources. Specify the region and\noptionally provide a name and notes.\n","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse","x-scope":[""]}}},"description":"Project created successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]}},"summary":"Create Project","tags":["Project"]}},"/project/{pk}/":{"delete":{"description":"Delete a project. Any resources in the project that are not already in a scrub state\nwill be queued for deletion. If all resources are already closed, the project will be\nsoft-deleted immediately.\n","parameters":[{"description":"The id of the project to delete","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Project deletion initiated successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete Project","tags":["Project"]},"get":{"description":"Retrieve detailed information about a specific project, including its region, address,\nmanager, creation date, and associated notes.\n","parameters":[{"description":"The id of the project to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse","x-scope":[""]}}},"description":"Project details retrieved successfully"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read Project Details","tags":["Project"]},"patch":{"description":"Update a project to modify its name or notes. Projects cannot be moved between regions\nafter creation.\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The id of the project to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse","x-scope":[""]}}},"description":"Project updated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Project","tags":["Project"]},"put":{"description":"Update a project to modify its name or notes. Projects cannot be moved between regions\nafter creation.\n","parameters":[{"description":"The id of the project to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse","x-scope":[""]}}},"description":"Project updated successfully"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Project","tags":["Project"]}},"/storage/volumes/":{"get":{"description":"Retrieve a paginated list of storage volumes accessible to the requesting user.\nFilter by volume type (Ceph or Hyper-V), project, region, and other attributes.\n\n\n## Filtering\nThe following fields and modifiers can be used to filter records from the list;\n\n- resource_links__contra_resource_id (gt, gte, in, isnull, lt, lte, range)\n- created (gt, gte, in, isnull, lt, lte, range)\n- id (gt, gte, in, isnull, lt, lte, range)\n- name (in, icontains, iendswith, iexact, istartswith)\n- project_id (gt, gte, in, isnull, lt, lte, range)\n- project__address_id (gt, gte, in, isnull, lt, lte, range)\n- project__name (in, icontains, iendswith, iexact, istartswith)\n- project__region_id (gt, gte, in, isnull, lt, lte, range)\n- project__reseller_id (gt, gte, in, isnull, lt, lte, range)\n- resource_type_id (gt, gte, in, isnull, lt, lte, range)\n- state (gt, gte, in, isnull, lt, lte, range)\n- type\n- updated (gt, gte, in, isnull, lt, lte, range)\n\nTo search, simply add `?search[field]=value` to include records that match the request, or `?exclude[field]=value` to\nexclude them. To use modifiers, simply add `?search[field__modifier]` and `?exclude[field__modifier]`\n\n## Ordering\nThe following fields can be used to order the results of the list;\n\n- name (default)\n- id\n- project_id\n\nTo reverse the ordering, simply prepend a `-` character to the request. So `?order=field` orders by `field` in ascending\norder, while `?order=-field` orders in descending order instead.","parameters":[{"description":"Filter the result to objects that do not match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"exclude","required":false,"schema":{"type":"object"},"style":"deepObject"},{"description":"The limit of the number of objects returned per page","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":0,"type":"integer"}},{"description":"The field to use for ordering. Possible fields and the default are outlined in the individual method descriptions.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"The page of records to return, assuming `limit` number of records per page.","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Filter the result to objects that match the specified filters. Possible filters are outlined in the individual list method descriptions.","explode":true,"in":"query","name":"search","required":false,"schema":{"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageVolumesList","x-scope":[""]}}},"description":"A paginated list of storage volumes with metadata about total records and filtering"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"List Storage Volumes","tags":["Storage Volumes"]},"post":{"description":"Create a new storage volume in a project.\nSpecify volume type (CephFS, CephRBD or HyperV), storage capacity using SKUs, and configuration options.\nCephFS volumes can be mounted to multiple LXD instances.\nCephRBD volumes can be mounted to only one LXD virtual-machine instance.\nHyperV volumes are attached as secondary drives to a Hyper-V instance.\n","parameters":[],"requestBody":{"content":{"application/json":{"examples":{"cephfs_volume":{"description":"","summary":"Create shared Ceph File System Volume for LXD containers","value":{"name":"shared-data-volume","project_id":1,"specs":[{"quantity":500,"sku_name":"CEPH_001"}],"type":"cephfs"}},"cephrbd_volume":{"description":"","summary":"Create a Ceph Block Volume for LXD containers","value":{"name":"block-volume","project_id":1,"specs":[{"quantity":500,"sku_name":"CEPH_001"}],"type":"cephrbd"}},"hyperv_volume":{"description":"","summary":"Create additional drive for Hyper-V VM","value":{"instance_id":456,"name":"additional-storage","project_id":1,"specs":[{"quantity":250,"sku_name":"SSD_001"}],"type":"hyperv"}}},"schema":{"$ref":"#/components/schemas/StorageVolumesCreate","x-scope":[""]}}},"description":"Data required to create a record","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageVolumesResponse","x-scope":[""]}}},"description":"Storage volume created successfully with assigned ID and initial configuration"},"400":{"$ref":"#/components/responses/400","x-scope":[""]},"401":{"$ref":"#/components/responses/401","x-scope":[""]}},"summary":"Create Storage Volume","tags":["Storage Volumes"]}},"/storage/volumes/{pk}/":{"delete":{"description":"This method allows the User to delete a specified Storage Volume.\n","parameters":[{"description":"The id of the Storage Volume to be deleted","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Storage Volume request to be deleted was successful. The virtual infrastructure the ID respresents\nwill be scrubbed from the region.\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Delete a specified Storage Volume","tags":["Storage Volumes"]},"get":{"description":"Retrieve detailed information about a specific storage volume including its type, capacity, mount status,\nand associated instances.\n","parameters":[{"description":"The ID of the storage volume to retrieve","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageVolumesResponse","x-scope":[""]}}},"description":"Storage volume details including type-specific configuration (mount path for\nCeph, attached instance for Hyper-V)\n"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Read Storage Volume Details","tags":["Storage Volumes"]},"patch":{"description":"Update a storage volume's configuration.\nModify volume name, increase storage capacity (cannot decrease), mount/unmount from instances (Ceph),\nor trigger state changes for resource management.\n\n\nThe difference between `PUT` and `PATCH` is that you do not have to send all of the record's data in order to update it. Therefore, treat all of the Update schema as optional.","parameters":[{"description":"The ID of the storage volume to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"attach_to_instance":{"description":"","summary":"Mount Ceph File System to an LXD instance","value":{"metadata":{"attach_instance_ids":[123],"mount_path":"/mnt/shared-data"},"name":"shared-data-volume","state":"update_running"}},"delete_volume":{"description":"","summary":"Delete volume","value":{"name":"old-storage","state":"delete"}},"detach_from_instances":{"description":"","summary":"Unmount Ceph File System from multiple LXD instances","value":{"metadata":{"detach_instance_ids":[456,789],"mount_path":"/mnt/shared-data"},"name":"shared-data-volume","state":"update_running"}},"expand_volume":{"description":"","summary":"Expand volume capacity","value":{"name":"expanded-storage","specs":[{"quantity":1000,"sku_name":"CEPH_001"}],"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/StorageVolumesUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageVolumesResponse","x-scope":[""]}}},"description":"Storage volume updated successfully with new configuration applied"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Storage Volume","tags":["Storage Volumes"]},"put":{"description":"Update a storage volume's configuration.\nModify volume name, increase storage capacity (cannot decrease), mount/unmount from instances (Ceph),\nor trigger state changes for resource management.\n","parameters":[{"description":"The ID of the storage volume to update","in":"path","name":"pk","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"examples":{"attach_to_instance":{"description":"","summary":"Mount Ceph File System to an LXD instance","value":{"metadata":{"attach_instance_ids":[123],"mount_path":"/mnt/shared-data"},"name":"shared-data-volume","state":"update_running"}},"delete_volume":{"description":"","summary":"Delete volume","value":{"name":"old-storage","state":"delete"}},"detach_from_instances":{"description":"","summary":"Unmount Ceph File System from multiple LXD instances","value":{"metadata":{"detach_instance_ids":[456,789],"mount_path":"/mnt/shared-data"},"name":"shared-data-volume","state":"update_running"}},"expand_volume":{"description":"","summary":"Expand volume capacity","value":{"name":"expanded-storage","specs":[{"quantity":1000,"sku_name":"CEPH_001"}],"state":"update_running"}}},"schema":{"$ref":"#/components/schemas/StorageVolumesUpdate","x-scope":[""]}}},"description":"Data required to update a record","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageVolumesResponse","x-scope":[""]}}},"description":"Storage volume updated successfully with new configuration applied"},"401":{"$ref":"#/components/responses/401","x-scope":[""]},"403":{"$ref":"#/components/responses/403","x-scope":[""]},"404":{"$ref":"#/components/responses/404","x-scope":[""]}},"summary":"Update Storage Volume","tags":["Storage Volumes"]}}},"security":[{"XAuthToken":[]}],"servers":[{"url":"https://compute.api.cloudcix.com/"}],"tags":[{"description":"Management of Instance Backups\n\nSupported backup types:\n- \"lxd\" - LXD backups for Linux containers and VMs\n- \"hyperv\" - Hyper-V backups for Windows VMs\n\nThis module provides API endpoints for managing backups of virtual machine and container instances\nin the CloudCIX Compute platform. Backups are on-demand copies of running instances\nstored in backup repositories for disaster recovery and data protection.\n\nAvailable operations:\n- List and filter backups across your projects by type, instance, or repository\n- Create new backups from running LXD or Hyper-V instances\n- Retrieve detailed information about individual backups including validity time\n- Delete backups by updating their state to delete\n\nEach backup includes its associated instance, project, repository location, and time valid timestamp.","name":"Compute Backups"},{"description":"Management of GPU Resources\n\nThis module provides API endpoints for managing GPU (Graphics Processing Unit) resources\nwithin the CloudCIX Compute platform. GPUs are physical hardware accelerators that can be\nattached to LXD instances to provide enhanced computational capabilities for workloads such\nas machine learning, AI training, scientific simulations, and graphics rendering.\n\nAvailable operations:\n- List and filter GPU resources across your projects\n- Attach GPUs to running LXD instances by creating new GPU resources\n- Retrieve individual GPU configuration and status details\n- Detach GPUs from instances by updating the state to delete\n\nEach GPU resource includes its associated LXD instance, capacity specifications (SKUs),\ncurrent state, and project information.","name":"Compute Gpus"},{"description":"Management of Operating System Images\n\nThis module provides API endpoints for browsing available operating system images that can be\nused when creating virtual instances in the CloudCIX Compute platform. Images represent\npre-configured OS templates including various Linux distributions and Windows versions.\n\nAvailable operations:\n- List and filter available OS images by region, name, or variant\n- Retrieve detailed information about a specific image including its SKU and OS variant","name":"Compute Images"},{"description":"Management of Virtual Machine and Container Instances\n\nThis module provides API endpoints for managing compute instances in the CloudCIX Compute platform.\nCompute instances are virtual machines or containers that run workloads in the cloud. Two instance\ntypes are supported: LXD (Linux containers and VMs) and Hyper-V (Windows virtual machines).\n\nAvailable operations:\n- List and filter compute instances across your projects by type, state, or other attributes\n- Create new LXD or Hyper-V instances with specified resources, network interfaces, and OS images\n- Retrieve detailed configuration and status information for individual instances\n- Update instance specifications, network configuration, or change instance state (stop, restart, delete)\n\nEach instance includes its associated project, resource specifications (CPU, RAM, storage), network\ninterfaces, current state, and OS image information.\n\nAdditional Resources:\n- [Information on available SKUs](https://www.cix.ie/#/services/cloud/public_cloud)\n- [Cloud-init User Data Tutorial](https://docs.cloudcix.com/tutorials/cloudinit_userdata_tutorial.html)","name":"Compute Instances"},{"description":"Management of Instance Snapshots\n\nThis module provides API endpoints for managing snapshots of virtual machine and container instances\nin the CloudCIX Compute platform. Snapshots are point-in-time backups of running instances that can\nbe used for data recovery from a known state. Two snapshot types are\nsupported: LXD snapshots (for Linux containers and VMs) and Hyper-V snapshots (for Windows VMs).\n\nAvailable operations:\n- List and filter snapshots across your projects by type, instance, or state\n- Create new snapshots from running LXD or Hyper-V instances\n- Retrieve detailed information about individual snapshots\n- Delete snapshots by updating their state\n\nEach snapshot includes its associated instance, project, creation timestamp, and current state.","name":"Compute Snapshots"},{"description":"Management of Network Firewall Rules\n\nThis module provides API endpoints for managing network firewall rules in the CloudCIX Compute platform.\nEach project can have ONE project firewall and ONE geo firewall. These firewalls control traffic\nflow to and from your cloud resources by defining rules that allow or block network traffic.\n\nFirewall Types:\n1. Project Firewall (type: \"project\") - Fine-grained rules controlling traffic based on specific source/destination\n   IP addresses, ports, and protocols. Can reference your member's IP Address Groups using '@groupname' syntax\n   in source/destination fields (e.g., \"source\": \"@office_networks\").\n\n2. Geo Firewall (type: \"geo\") - Country-based IP filtering using global IP Address Groups (member_id = 0) that\n   contain IP ranges for specific countries/regions. References groups by numeric ID using the\n   \"ip_address_group_id\" field (e.g., \"ip_address_group_id\": 123).\n\nIP Address Group Usage:\n- Project Firewalls: Use \"source\": \"@groupname\" or \"destination\": \"@groupname\" (member groups only)\n- Geo Firewalls: Use \"ip_address_group_id\": 123 (global groups with member_id=0 only)\n- Project firewalls cannot use global groups, and geo firewalls cannot use member groups\n\nCRITICAL: When updating firewall rules, you MUST include ALL rules you want to keep. The update operation\nreplaces the entire rule list - any rules not included in the update will be permanently deleted.\n\nAvailable operations:\n- List and filter firewall rules across your projects by type\n- Create a project's single firewall or geo firewall with complete rule definitions\n- Retrieve detailed information about individual firewall configurations\n- Update firewall rules (replaces ALL existing rules) or delete firewalls by changing their state\n\nRule Direction:\nEach firewall rule specifies traffic direction using the 'inbound' flag:\n- inbound: true = Inbound rule (traffic coming INTO your project/network)\n- inbound: false = Outbound rule (traffic going OUT FROM your project/network)\nRules default to outbound (inbound: false) if not specified.\n\nEach firewall includes its associated project, router, rule definitions, and current state.","name":"Network Firewalls"},{"description":"Management of Network IP Groups\n\nIP address groups organise sets of CIDR networks for use in firewall rules and access control.\nTwo types are available:\n\n- Geo Groups (type=\"geo\"): Maintained by CloudCIX and accessible to all members\n  * Used for geo-filtering based on country IP ranges (e.g., 'Ireland', 'USA', 'China')\n  * Essential for creating geo firewalls that block/allow traffic from specific countries\n  * To list country groups: GET /ip_address_groups?search[member_id]=0\n  * Referenced in geo firewall rules by numeric ID: \"ip_address_group_id\": 123\n\n- Project Groups (type=\"project\"): Created and managed by individual members for their own use\n  * Used for project firewalls with fine-grained access control\n  * Examples: office networks, VPN endpoints, admin workstations\n  * Referenced in project firewall rules using @groupname syntax: \"source\": \"@office_networks\"\n\nUsage in Firewall Rules:\n- Project Firewall: \"source\": \"@office_networks\" (uses project type groups only)\n- Geo Firewall: \"group_name\": \"@ie_v4\" (uses geo type groups only)\n\nExamples:\n- Block traffic from Ireland: Create geo firewall rule with group_name of Ireland group\n- Allow access from office: Create project firewall rule with source \"@office_networks\"\n- Compliance geo-blocking: Use global country groups referenced by ID in geo firewall rules","name":"Network Ip Groups"},{"description":"Management of Virtual Network Routers\n\nThis module provides API endpoints for managing virtual network routers in the CloudCIX Compute platform.\nEach project can have one virtual router that provides network connectivity and routing between your cloud\nresources and external networks and one or more static routes. The router manages one or more private networks\n(subnets) and handles traffic routing, NAT, and network isolation for your project's virtual machines and containers.\n\nNetwork Router Type:\n1. Project Router (type: \"router\") - Manage IP forwarding, and participate in routing decisions within isolated\n   network topologies.\n2. Static Routes (type: \"static_route\") - Define a fixed route entry within the Project Router's routing table.\n   It maps a destination network to a nexthop IP, enabling deterministic packet forwarding without dynamic updates.\n\nAvailable operations:\n- List and filter virtual routers from all your projects\n- Create a project's router with one or more private network definitions (RFC 1918 address ranges)\n- Retrieve detailed router configuration including networks, IP addresses, and state\n- Update router by adding networks, changing network names, or changing router state\n\nNetwork Management:\nWhen creating or adding networks, you only specify the IPv4 CIDR range and name. The system automatically\ngenerates VLAN IDs and IPv6 ranges based on regional availability. When updating a router to add new networks,\nyou must include all existing networks (with their auto-generated VLAN and IPv6 properties) to preserve them,\nplus any new networks (with only IPv4 CIDR and name specified). Existing network IPv4/IPv6 ranges and VLANs\ncannot be modified, but network names can be updated by including the name field with existing networks.\n\nEach router includes its associated project, public IP addresses (IPv4/IPv6), private networks with VLANs,\nand current state. You can add additional private networks to an existing router through the update operation.","name":"Network Routers"},{"description":"Management of Network VPNs\nSupported Types are:\n- site-to-site","name":"Network Vpns"},{"description":"Management of Cloud Projects\n\nThis module provides API endpoints for managing cloud projects in the CloudCIX Compute platform.\nProjects are logical containers that organise and group your cloud infrastructure resources such as\nvirtual machines, routers, firewalls, and storage. Each project belongs to a specific region and\nhas its own isolated network environment.\n\nAvailable operations:\n- List and filter projects across your organization\n- Create new projects in available cloud regions\n- Retrieve detailed project information including region and manager\n- Update project details such as name and notes\n\nEach project includes its associated address, region, manager, and creation metadata.","name":"Project"},{"description":"Management of Storage Volumes\n\nStorage volumes provide additional storage capacity for compute instances.\n\nThree types are supported:\n- CephFS: Network-attached file system volumes that can be mounted to multiple LXD instances\n- CephRBD: Block Storage volume that can be mounted to a virtual-machine LXD instance.\n- HyperV: Secondary drives attached to Hyper-V instances\n\nSKU Configuration:\nStorage capacity is specified using SKUs (Stock Keeping Units) with quantity in GB.\n- Ceph volumes use Ceph storage SKUs (CEPH_001 for HDD, CEPH_002 for SSD)\n- HyperV volumes use storage SKUs (e.g., SSD_001, HDD_001)\nAvailable SKUs depend on your region's configured devices.","name":"Storage Volumes"}]}