FORMAT: 1A HOST: https://api.transip.nl/v6 VERSION: 6.45 # TransIP API # Group Introduction Welcome to the API documentation. **REST API V6** With the new REST API, you can manage all of your products in a RESTful way, this means that for most products we allow simple create, update, delete HTTP requests to manage this product collection. This API provides a number of products or actions on sub-products, which we will call resources, an example of such a resource could be the Vps Backup resource, accessible at the following endpoint: `/v6/vps/{vpsName}/backups` Each resource can host a number of different actions which are accessible by different [HTTP methods](#header-requests). Every resource action has documentation in which you can find using the panel on the left. All requests and responses use JSON objects and arrays as data format. ## Requests Every API call can be made using HTTP request to the resource URL and the desired HTTP method. All requests should be made using the HTTPS protocol. ### Methods Method | Description ---------: | ----------------------------------------------------------------------------------------------------------- **GET** | Used for retrieving one or more resources, the response attributes can be used to modify the resource. **POST** | Used for creating new resources, see the documentation for the required and optional attributes. **PUT** | Used for updating a resource with new data, all existing data will be removed. **PATCH** | Used for partially updating a resource or calling a resource action like reverting a backup. **DELETE** | Used for deleting resources. If a **GET** action specifies request attributes, these could be put behind the URL using the http query syntax like: `?tags=test` ## Responses Every response uses an HTTP status code, indicating the success or failure of your request. ### HTTP statuses In general, when a request succeeds, a 2xx HTTP status code is returned. Code | Reason | Description --------- | ------------ | --------------------------------------------------------------------------------------------- **200** | OK | GET request succeeded. **201** | Created | Resource is created using a POST request. The response contains an empty body. **204** | No content | PUT, PATCH or DELETE request succeeded. The response contains an empty body. In case of an error, the following status codes could be returned. Code | Reason | Description --------- | --------------------- | ------------------------------------------------------------------------------------ **400** | Bad Request | The API version or URL is invalid. **401** | Unauthorized | There is something wrong with your authentication **403** | Forbidden | You don't have the necessary permissions to perform an operation. **404** | Not Found | A resource was not found. **405** | Method Not Allowed | You're using an HTTP method on a resource which does not support it. **406** | Not Acceptable | One or more required parameters are missing in the request. **408** | Request Timeout | The request gets a timeout. **409** | Conflict | Modification is not permitted at the moment. E.g. when a VPS is locked. **422** | Unprocessable Entity | The input attributes are invalid, e.g. malformed JSON. **429** | Too Many Request | The rate limit is exceeded. **500** | Internal Server Error | There is a server error. **501** | Not Implemented | The endpoint is not implemented. ## Links GET requests may include additional links that can be used to navigate to related resources or pages. ### Pages Some resources allow pagination on their list requests. These would be GET request without a resource identifier, like `/vps` or `/domains`. The default page size is unlimited. On the resources that support pagination, you can override this by setting using the `pageSize` parameter. For example: `/vps?pageSize=100` When pagination is used, the following links will be shown: * **first**: The first page of the result set. * **previous**: The previous page of the result set. * **next**: The next page of the result set. * **last**: The last page of the result set. These links will only be set when applicable. E.g. when the current page is the last, no 'next' and 'last' links will be present. For example, the links section in a response for the first page could look like this: ```json { "_links": { "pages": [ { "rel": "next", "link": "https://api.transip.nl/v6/domains?pageSize=25&page=2" }, { "rel": "last", "link": "https://api.transip.nl/v6/domains?pageSize=25&page=9" } ] } } ``` ### Related resources Responses of GET requests with an identifier may return additional links to related resources. For example, when retrieving info about a domain, the following links will be rendered: ```json { "_links": [ { "rel": "self", "link": "https://api.transip.nl/v6/domains/example.com" }, { "rel": "branding", "link": "https://api.transip.nl/v6/domains/example.com/branding" }, { "rel": "contacts", "link": "https://api.transip.nl/v6/domains/example.com/contacts" }, { "rel": "dns", "link": "https://api.transip.nl/v6/domains/example.com/dns" }, { "rel": "nameservers", "link": "https://api.transip.nl/v6/domains/example.com/nameservers" }, { "rel": "actions", "link": "https://api.transip.nl/v6/domains/example.com/actions" } ] } ``` ## Authentication In order to authenticate a request we make use of access tokens. These access tokens make use of the JSON Web Token standard. To get an access token, you should first generate a key pair using the control panel. Then download the [PHP authentication class](https://api.transip.nl/downloads/TransIP_AccessToken.tar.gz), and put in your login username and private key. You can also do this process manually by sending an HTTP POST request to 'https://api.transip.nl/v6/auth' with a body containing your login and a nonce (any random string), and a signature header. The signature header should consist of a sha512 asn.1 hash of the full request body, sign using a private key that was generated in the control panel and base64 encode the generated signature. **Steps to create a signature** 1. json encode the request body (example request body below) 2. sign the json encoded request body (openssl dgst -sha512 -sign) 3. base64 encode the signature that openssl generated 4. make a request to 'https://api.transip.nl/v6/auth' with the header and body like the examples below **Example signature header** ```http Signature: W+alqMNFaKxNjRpRzGcjrk5q1PXf50usve85PMHqXDPcDZTmZksVkqAFyR30XtJAXELbg2bukUrckPe7fBR10LvMY55cCHLfKf4sA6tpC8Ck5HcT7uLN27XGiJH3i2oDe/Kb93pU2q9kP+vDIQYJX28xFEHWOibXYgcMksHSH3YiyCWcBiQFS65Jsg5M/XhyU3qMISD7icHmk7/WPw1tSYGiMqJZVjaovIqzskXQcu5iC22wZA+5evj3rlSPj9UGZsDjg+TdP69gGJ2y4nrG3qbM2BhMpUs4E3FDHJW1ZZ3VUko0rwfBBoltAT94NQrA5LCP6pXLyA9eszyouBs8ywQ== ``` **Example request body** ```json { "login": "test-user", "nonce": "98475920834", "read_only": false, "expiration_time": "30 minutes", "label": "add description", "global_key": true } ``` Setting the property `global_key` to false will generate a token that can only be used by whitelisted IP's Access tokens have a default expiration time of 30 minutes. You can override this by setting the `expiration_time` property. This has a maximum of 1 month. The following example values are valid for the `expiration_time` property: * `3600 seconds` * `120 minutes` * `1 hour` * `48 hours` * `1 day` * `15 days` * `1 week` * `4 weeks` You can add a custom name to your access tokens by setting the `label` property. All your active access tokens can be managed in the control panel. You can revoke your tokens and generate new ones. Use a header containing your access token in every request: ```http Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImN3MiFSbDU2eDNoUnkjelM4YmdOIn0.eyJpc3MiOiJhcGkudHJhbnNpcC5ubCIsImF1ZCI6ImFwaS50cmFuc2lwLm5sIiwianRpIjoiY3cyIVJsNTZ4M2hSeSN6UzhiZ04iLCJpYXQiOjE1ODIyMDE1NTAsIm5iZiI6MTU4MjIwMTU1MCwiZXhwIjoyMTE4NzQ1NTUwLCJjaWQiOiI2MDQ0OSIsInJvIjpmYWxzZSwiZ2siOmZhbHNlLCJrdiI6dHJ1ZX0.fYBWV4O5WPXxGuWG-vcrFWqmRHBm9yp0PHiYh_oAWxWxCaZX2Rf6WJfc13AxEeZ67-lY0TA2kSaOCp0PggBb_MGj73t4cH8gdwDJzANVxkiPL1Saqiw2NgZ3IHASJnisUWNnZp8HnrhLLe5ficvb1D9WOUOItmFC2ZgfGObNhlL2y-AMNLT4X7oNgrNTGm-mespo0jD_qH9dK5_evSzS3K8o03gu6p19jxfsnIh8TIVRvNdluYC2wo4qDl5EW5BEZ8OSuJ121ncOT1oRpzXB0cVZ9e5_UVAEr9X3f26_Eomg52-PjrgcRJ_jPIUYbrlo06KjjX2h0fzMr21ZE023Gw ``` ## Rate limit The rate limit for this API uses a sliding window of 15 minutes. Within this window, a maximum of 1000 requests can be made per user. Every request returns the following headers, indicating the number of requests made within this window, the amount of requests remaining and the reset timestamp. ```http X-Rate-Limit-Limit: 1000 X-Rate-Limit-Remaining: 650 X-Rate-Limit-Reset: 1485875578 ``` When this rate limit is exceeded, the response contains an error with HTTP status code: `429: Too many requests`. ## Test mode In test mode every `GET` request is allowed, but all modification requests are fake, they are validated, but the actual modification is skipped. This means that you are able to test your api calls without doing any modification to your production environment. There are two different ways to test the api, you could use our test mode token or you could provide a test parameter using your own token (and thus play with your own data). ### Demo token If you use the following authorization header, you authenticate yourself as the demo user in test mode. ```http Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImN3MiFSbDU2eDNoUnkjelM4YmdOIn0.eyJpc3MiOiJhcGkudHJhbnNpcC5ubCIsImF1ZCI6ImFwaS50cmFuc2lwLm5sIiwianRpIjoiY3cyIVJsNTZ4M2hSeSN6UzhiZ04iLCJpYXQiOjE1ODIyMDE1NTAsIm5iZiI6MTU4MjIwMTU1MCwiZXhwIjoyMTE4NzQ1NTUwLCJjaWQiOiI2MDQ0OSIsInJvIjpmYWxzZSwiZ2siOmZhbHNlLCJrdiI6dHJ1ZX0.fYBWV4O5WPXxGuWG-vcrFWqmRHBm9yp0PHiYh_oAWxWxCaZX2Rf6WJfc13AxEeZ67-lY0TA2kSaOCp0PggBb_MGj73t4cH8gdwDJzANVxkiPL1Saqiw2NgZ3IHASJnisUWNnZp8HnrhLLe5ficvb1D9WOUOItmFC2ZgfGObNhlL2y-AMNLT4X7oNgrNTGm-mespo0jD_qH9dK5_evSzS3K8o03gu6p19jxfsnIh8TIVRvNdluYC2wo4qDl5EW5BEZ8OSuJ121ncOT1oRpzXB0cVZ9e5_UVAEr9X3f26_Eomg52-PjrgcRJ_jPIUYbrlo06KjjX2h0fzMr21ZE023Gw ``` ### Test parameter By providing the test parameter on any of your requests you can use the test mode while you are authenticated as your own user. To give you an example, when you request a `DELETE` on a vps with the following url /v6/vps/test-vps2?test=1 the actual delete is skipped. The same goes for any other type of modification. ## Order requests Some API calls, as the pre-generated would automatically be accepted, will generate an invoice. In case direct debit is activated on the customer account associated with the API key, payment will occur at a later stage. This is mostly the case with products and add-ons with automatic provisioning. In order to prevent accidental orders, each API call that generates an invoice has a warning outlined below its description in this API documentation. ## Api specification This documentation was generated from a api blueprint file. Download the raw [APIB](blueprint.apib) or [OpenAPI](openapi.yaml) specification # Group General ## Products [/products] This is the API endpoint for products. ### List all products [GET] This endpoint returns a list of products with their name, description and price. These product names can be used upon creating certain resources as it specifies which type of that resource you would like, for example, a certain type of HA-IP or Vps. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + products (Products) ## Elements [/products/{productName}/elements] This is the API endpoint for productsElements. ### List specifications for product [GET] Get the specifications for a product. This will list all the different elements for a product with the amount that it comes with. e.g. a `vps-bladevps-x4` has 2 CPU-core elements. + Parameters + productName : `vps-bladevps-x4` (string) - Product + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + productElements (array[ProductElement]) ## AvailabilityZone [/availability-zones] ### List available AvailabilityZones [GET] Lists the available AvailabilityZones. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + availabilityZones (array[AvailabilityZone]) ## ApiTest [/api-test] This is the API endpoint to do a simple token or application test ### API Test [GET] Returns pong. A simple test resource to make sure everything is working + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + ping : pong (string) # Group Account ## Invoices [/invoices] This is the API endpoint for invoices. ### List all invoices [GET] Returns a list of all invoices attached to your account. ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + invoices (array[Invoice]) ### List a single invoice [GET /invoices/{invoiceNumber}] Returns only the requested invoice. + Parameters + invoiceNumber : `F0000.1911.0000.0004` (string) - The Invoice number + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + invoice (Invoice) + Response 404 (application/json) + Body { "error": "Invoice with number 'F0000.1911.0000.0004' not found" } ## InvoiceItems [/invoices/{invoiceNumber}/invoice-items] This is the API endpoint for InvoiceItems ### List invoice items by InvoiceNumber [GET] Each invoice consists of one or multiple invoice items, detailing what specific products or services are on this invoice. An invoiceItem can optionally contain one or multiple discounts. + Parameters + invoiceNumber : `F0000.1911.0000.0004` (string) - The Invoice number + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + invoiceItems (array[InvoiceItem]) + Response 404 (application/json) + Body { "error": "Invoice with number 'F0000.1911.0000.0004' not found" } ## Pdf [/invoices/{invoiceNumber}/pdf] This is the API endpoint for PDF invoices. ### Retrieve an invoice as PDF file [GET] Retrieve the PDF data of an invoice with the given invoice number. The response returns a string that is Base64 encoded. Decode this string before saving to a PDF file. + Parameters + invoiceNumber : `F0000.1911.0000.0004` (string) - The Invoice number + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + pdf : `Y205elpYTWdZWEpsSUhKbFpDd2dabXh2ZDJWeWN5QmhjbVVnWW14MVpTd2dkR2hsY21VZ2MyaHZkV3hrSUdKbElHRWdjR1JtSUdobGNtVWdZblYwSUdsMElHbHpJR2RzZFdVdQ===` (string) + Response 404 (application/json) + Body { "error": "Invoice with number 'F0000.1911.0000.0004' not found" } ## SSH Keys [/ssh-keys] Manage the SSH Keys in your account, these can be used to embed into your VPS at the time of its creation. ### List all SSH keys [GET] List all SSH keys in your account. ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + sshKeys (array[SshKey]) ### Get SSH key by id [GET /ssh-keys/{id}] Request information about an existing SSH key from your account. + Parameters + id : `123` (string) - SSH key identifier + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + sshKey (SshKey) + Response 404 (application/json) + Body { "error": "SSH Key with id '123' not found" } ### Add a new SSH key [POST] Add a new SSH key to your account. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + sshKey : `ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDf2pxWX/yhUBDyk2LPhvRtI0LnVO8PyR5Zt6AHrnhtLGqK+8YG9EMlWbCCWrASR+Q1hFQG example` (string) - SSH key + description : `Jim key` (string, optional) - SSH key description + isDefault : `true` (boolean, optional) - SSH key isDefault + Response 201 + Response 403 (application/json) + Body { "error": "The provided SSH key already exists" } + Response 406 (application/json) + Body { "error": "The provided SSH key 'ssh-rsa AAAAB3NzaC_INVALIDKEY_1yc2EAAAADAQA' is invalid" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 255 characters maximum" } ### Update an SSH key [PUT /ssh-keys/{id}] Rename the description or change the isDefault attribute for an SSH key. In this request you need to specify values for the isDefault and description attribute, you cannot leave them empty. Except for the description and isDefault, all attributes are read only. + Parameters + id : `123` (string) - SSH key identifier + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + sshKey (SshKey) + Response 204 + Response 404 (application/json) + Body { "error": "SSH Key with id '123' not found" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 255 characters maximum" } ### Delete an SSH key [DELETE /ssh-keys/{id}] Delete an existing SSH key from your account. + Parameters + id : `123` (string) - SSH key identifier + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "SSH Key with id '123' not found" } ## ContactKey [/contact-key] ### Contact key [GET] List the current contact key. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + key : 123456 (string) # Group Domains ## Domains [/domains] This is the API endpoint for domain services. This endpoint can be used to manage domains ### List all domains [GET] This API call allows you to list all domain names in your TransIP account. Should you want to filter the domains list by a custom tag, set the `tag` parameter and only domains with the tag will be returned like https://api.transip.nl/v6/domains?tag=customTag,anotherTag ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + tags : `/domains?tags=customTag,anotherTag` (string, optional) - Tags to filter by, separated by a comma. + `include` : `/domains?include=nameservers,contacts` (string, optional) - Extra Data to include, separated by a comma. (Can be nameservers,contacts) + Response 200 (application/json) + Attributes + domains (array[Domain]) ### Retrieve an existing domain [GET /domains/{domainName}] Show information about a specific domain name. + Parameters + domainName : example.com (string) - Domain name + `include` (string, optional) - Comma seperated list of data to include (nameservers,contacts) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + domain (Domain) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } ### Register a new domain [POST] Register a new domain. Note that in most cases, promotions or discounts do not apply to registrations through the TransIP API. You can set the contacts, nameservers and DNS entries immediately, but it's not mandatory for registration. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + domainName : example.com (string) + contacts (array[WhoisContact], optional) + nameservers (array[Nameserver], optional) + dnsEntries (array[DnsEntry], optional) + Response 201 + Response 406 (application/json) + Body { "error": "The domain 'example.com' is not free and thus cannot be registered" } ### Transfer a domain [POST] Transfer a domain to TransIP using its transfer key (or ‘EPP code’) by specifying it in the `authCode` parameter. You can override the contacts, nameservers and DNS entries immediately, but is not mandatory. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + domainName : example.com (string) + authCode : `CYPMaVH+9MRjXGBc3InzHs7vNSUBPOjwpZm3GO+iDLHnFLtiP7sOKqW5JD1WeUpevZM6q1qS5YH9dGSp` (string) - The auth code of the domain. + contacts (array[WhoisContact], optional) + nameservers (array[Nameserver], optional) + dnsEntries (array[DnsEntry], optional) + Response 201 + Response 409 (application/json) + Body { "error": "The domain 'example.com' is already available in your account, thus cannot be transferred" } + Response 409 (application/json) + Body { "error": "The domain 'example.com' is not registered and thus cannot be transferred" } ### Update a domain [PUT /domains/{domainName}] Update an existing domain. To apply or release a lock, change the `isTransferLocked` attribute. To change tags, update the `tags` attribute. To enable or disable AutoDNS, change the `hasAutoDns` attribute. You’re able to add the domain name under a whitelabel account. Note this whitelabel functionality is available only for .nl domains. Furthermore, the whitelabel account must be activated first at regular charge. Upon activating, newly registered domains with the `isWhitelabel` attribute set to ‘true’ will be shown under a whitelabel registrar name. For more information about whitelabel domain name registration at TransIP, please see the documentation regarding [whitelabel](#domains-whitelabel-post). ::: warning **Warning**: When adding the domain to your whitelabel, it cannot be reverted! **Warning**: Can Only be done when status is registered + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + domain (Domain) + Response 204 + Response 403 (application/json) + Body { "error": "You do not have a whitelabel account yet, please order one first" } + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 409 (application/json) + Body { "error": "Domain 'example.com' has action 'changeNameservers' running, no modification is allowed" } ### Cancel a domain [DELETE /domains/{domainName}] Cancels the specified domain. Depending on the time you want to cancel the domain, specify 'end' or 'immediately' for the `endTime` attribute. Upon canceling a domain name (or any other product) it will be shown under [cancellations](https://www.transip.nl/cp/account/opzeggingen/) in the TransIP control panel. By using the API method outlined above ([Retrieve an existing domain](#domains-domains-get-1)) you’ll be able to see if the domain name has been canceled yet. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + endTime : end (string, optional) - Cancellation time, either 'end' or 'immediately' + Response 204 + Response 403 (application/json) + Body { "error": "The domain 'example.com' has additional products attached, and thus can't be cancelled" } + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'" } + Response 409 (application/json) + Body { "error": "The domain 'example.com' is inactive, and thus can't be cancelled" } + Response 409 (application/json) + Body { "error": "A domain add-on for 'example.com' is inactive, and thus the domain itself can't be cancelled" } + Response 409 (application/json) + Body { "error": "The domain 'example.com' already has a cancellation pending" } ### Handover a domain [PATCH /domains/{domainName}] Handover a domain to another TransIP Account. This call will initiate the handover process. the actual handover will be done when the target customer accepts the handover. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : handover (string) + targetCustomerName : example2 (string) + Response 204 + Response 404 (application/json) + Body { "error": "domain with name 'example.com' not found" } + Response 409 (application/json) + Body { "error": "domain 'example.com' has a transfer lock and thus cannot be transferred" } + Response 409 (application/json) + Body { "error": "Actions on domain 'example.com' are temporary disabled" } + Response 409 (application/json) + Body { "error": "Error Processing Handover, One or more items are already being handovered" } + Response 409 (application/json) + Body { "error": "Target user 'example2' is not capable of receiving handover" } ## Branding [/domains/{domainName}/branding] TransIP allows for multiple ways to whitelabel domains. Among others, this includes changing ‘banners’ shown in the WHOIS. For example, for some TLDs, the company name and URL can be specified. Aside from this, you can place your .nl domain names in a whitelabel account so the registrar for .nl domain names is changed to a neutral name. ### Get domain branding [GET] Get domain branding information for a given domain name. Please note this API call does not return the whitelabel account status (just the branding). Branding options can be altered from the TransIP control panel or by using the API call outlined below. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + branding (DomainBranding) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ### Update domain branding [PUT] Domain name branding can be set or altered using this API call. Among others, you can set your own company name and company URL, replacing the default values which are usually TransIP contact details. Changes will not apply to previously registered domain names. The new settings will, in most cases, only show up for newly registered domain names after the changes were made. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + branding (DomainBranding) + Response 204 + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } + Response 406 (application/json) + Body { "error": "Domain TLD doesn't support branding" } + Response 409 (application/json) + Body { "error": "Domain 'example.com' has action 'changeNameservers' running, no modification is allowed" } ## Contacts [/domains/{domainName}/contacts] Domain names are registered using multiple contacts, each fulfilling a role related to the domain name and its underlying infrastructure. Contacts can be one of the following: owner, administrative contact and technical contact. These can be the same. ### List all contacts for a domain [GET] Returns a list of all contacts for a domain. One or multiple of the following contacts will be shown: * Domain name owner; * Administrative contact; * Technical contact. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + contacts (array[WhoisContact]) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ### Update contacts for a domain [PUT] Use this API call in case you want to alter domain name contacts after the registration of a domain name. * Some TLD do not support changing all the fields like the AddressData. This will throw an error with a `406` http status code. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + contacts (array[WhoisContact]) + Response 204 + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } + Response 406 (application/json) + Body { "error": "Domain TLD doesn't support 'x' capability" } + Response 409 (application/json) + Body { "error": "Domain 'example.com' is locked, no modification is allowed" } ## Default Contacts [/domain-defaults/contacts] This is the API endpoint for default domain contacts. ### List all default domain contacts for your account [GET] Returns a list of all contacts for an account. One or multiple of the following contacts will be shown: * Registrant contact; * Administrative contact; * Technical contact. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + contacts (array[WhoisContact]) + Response 404 (application/json) + Body { "error": "No default domain contacts were found for this account" } ### Update contacts for a account [PUT] Use this API call in case you want to alter default domain contacts for your account. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + contacts (array[WhoisContact]) + Response 204 + Response 404 (application/json) + Body { "error": "No default domain contacts were found for this account" } ## DNS [/domains/{domainName}/dns] This is the API endpoint for changing DNS records. Any changes made here will be pushed to the TransIP nameservers. DNS entries altered, added or removed here will only be propagated when the nameservers for a domain name are set to TransIP’s. ### List all DNS entries for a domain [GET] List all DNS entries for a domain + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + dnsEntries (array[DnsEntry]) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ### Add a new single DNS entry to a domain [POST] Add a single DNS entry to the existing zone file. In case you want to overwrite the entire zone, please use the method below. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + dnsEntry (DnsEntry) + Response 201 + Response 403 (application/json) + Body { "error": "DNS Entry changes have temporarily been disabled" } + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } + Response 406 (application/json) + Body { "error": "Invalid DNS entry type 'B'" } + Response 409 (application/json) + Body { "error": "Error fetching Dns Entries: DNS Entries are currently being saved" } ### Update single DNS entry [PATCH] Update the content of a single DNS entry, identified by the `name`, `expire` and `type` attributes. When multiple or none of the current DNS entries matches, the response will be an error with http status code `406`. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + dnsEntry (DnsEntry) + Response 204 + Response 403 (application/json) + Body { "error": "DNS Entry changes have temporarily been disabled" } + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'mieperm@ns.nl'" } + Response 406 (application/json) + Body { "error": "Invalid DNS entry type 'B'" } + Response 406 (application/json) + Body { "error": "Could not find match for DNS entry 'test 300 A'" } + Response 406 (application/json) + Body { "error": "Multiple matches found for DNS entry 'test 300 A'" } + Response 409 (application/json) + Body { "error": "Error fetching Dns Entries: DNS Entries are currently being saved" } ### Update all DNS entries for a domain [PUT] This method will wipe the entire DNS zone file and replace it with the given records. Please note that data is not recoverable using an integrated method in the API, so make sure to use this with care. There is no hard limit as to the amount of DNS entries that can be added at once. ::: warning **Warning**: all current entries will be replaced! + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + dnsEntries (array[DnsEntry]) + Response 204 + Response 403 (application/json) + Body { "error": "DNS Entry changes have temporarily been disabled" } + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } + Response 409 (application/json) + Body { "error": "Error setting Dns Entries" } ### Remove a DNS entry from a domain [DELETE] Remove a single DNS entry from a domain specified by the `dnsEntry` parameter. If there are duplicate DNS entries found then a single entry will be removed when performing this action. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + dnsEntry (DnsEntry) + Response 204 + Response 403 (application/json) + Body { "error": "DNS Entry changes have temporarily been disabled." } + Response 404 (application/json) + Body { "error": "DNS Entry not found" } + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 409 (application/json) + Body { "error": "Error fetching Dns Entries: DNS Entries are currently being saved" } ## DNSSEC [/domains/{domainName}/dnssec] By utilizing DNSSEC, DNS resolvers ask for authentication first. Notably, DNSSEC is based on the use of DNSSEC keys registered at the registry. For DNSSEC to work, the appropriate information must be set at the registrar; in this case TransIP. ### List DNSSEC entries [GET] This API call lists all DNSSEC entries for a domain once set. This includes the key tag, flags, algorithm and public key. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + dnsSecEntries (array[DnsSecEntry]) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ### Update all DNSSEC entries [PUT] This method will replace all DNSSEC entries with the ones that are provided via the `dnsSecEntries` parameter. ::: warning **Warning**: all current entries will be replaced! + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + dnsSecEntries (array[DnsSecEntry]) + Response 204 + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } + Response 406 (application/json) + Body { "error": "Key tag '0906' is invalid, please supply a number containing 5 digits" } + Response 406 (application/json) + Body { "error": "Invalid algorithm 'CYBER', please supply one of the following algorithm: ..." } + Response 406 (application/json) + Body { "error": "Invalid flag '255', please supply one of the following flags: ..." } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } + Response 409 (application/json) + Body { "error": "DNSSEC Entries for domain 'example.com' cannot be edited." } ## Nameservers [/domains/{domainName}/nameservers] This is the API endpoint for changing nameservers. The default nameservers can be set through the API or via the TransIP control panel. In case the nameservers have not specifically been set, the whitelabel TransIP nameservers will be used for a whitelabel domain name registration and the non-whitelabeled TransIP nameservers will be used by default. The TransIP nameservers (non-whitelabeled) are as follows: * ns0.transip.net * ns1.transip.nl * ns2.transip.eu ### List nameservers for a domain [GET] This method will list all nameservers currently set for a domain. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + nameservers (array[Nameserver]) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ### Update nameservers for a domain [PUT] Change the nameservers for a domain. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + nameservers (array[Nameserver]) + Response 204 + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ## Actions [/domains/{domainName}/actions] This is the API endpoint for managing domain actions. ### Get current domain action [GET] Domain actions are kept track of by TransIP. Domain actions include, for example, changing nameservers. When no action is running the action's `name` parameter will be `null`. The action message will contain a failure message, please provide the information to fix this using the method below. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + action (DomainAction) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ### Retry domain action [PATCH] Domain actions can fail due to wrong information, this method allows you to retry an action. You only have to specify information that is required for the action. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + authCode (string, optional) + dnsEntries (array[DnsEntry], optional) + nameservers (array[Nameserver], optional) + contacts (array[WhoisContact], optional) + Response 204 + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } + Response 409 (application/json) + Body { "error": "Domain 'example.com' has action 'changeNameservers' running, no modification is allowed." } ### Cancel domain action [DELETE] With this method you are able to cancel a domain action while it is still pending or being processed. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } + Response 409 (application/json) + Body { "error": "Unable to cancel the running action for 'example.com' at this time" } ## Ssl [/domains/{domainName}/ssl] This is the API endpoint for SSL services on a domain. ### List all SSL certificates [GET] Retrieves a list of all SSL certificates for a domain. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + certificates (array[SslCertificate]) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ### Get SSL certificate by id [GET /domains/{domainName}/ssl/{certificateId}] Retrieves a single SSL certificate by id. + Parameters + domainName : example.com (string) - Domain name + certificateId : 12358 (number) - The id of the SSL certificate + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + certificate (SslCertificate) + Response 404 (application/json) + Body { "error": "Certificate with id '1337' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ## AuthCode [/domains/{domainName}/auth-code] This is the API endpoint for obtaining domain auth-codes ### Get auth-code of a domain name [GET] This method will return the auth-code for a domain name. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + authCode (string) + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 404 (application/json) + Body { "error": "Tld '.com' does not allow this action" } ### Request an auth code for a domain name [POST] This method will request an auth-code for a domain name at the registry. The registry will send the auth-code to the domain owner. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 201 + Response 404 (application/json) + Body { "error": "Domain with name 'example.com' not found" } + Response 404 (application/json) + Body { "error": "Tld '.com' does not allow this action" } ## Whois [/domains/{domainName}/whois] This is the API endpoint for executing whois domain lookups. ### Get WHOIS information for a domain name [GET] This method will return the WHOIS information for a domain name. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + whois (string) + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'power-ranger$.nl'" } ## Whitelabel [/whitelabel] Whitelabel accounts are used in order to hide the TransIP registrar details in a WHOIS lookup for a domain name. When a domain name is registered under a whitelabel account, the registrar will be an alternative whitelabel company, not offering domain name registration services on its own. Whitelabel accounts are charged at an additional rate. Already registered domain names will be registered again, as they’re technically transfered to the new whitelabel registrar. This means existing domain names are charged in order to add them to your whitelabel account (though at a discounted rate). Currently, TransIP’s whitelabeling service is available exclusively for `.nl` domains. ### Order a whitelabel account [POST] Order a whitelabel account from the API. Note that you do not need to order a whitelabel account for every registered domain name. Please check the TransIP control panel to view the cost for a whitelabel account. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 201 + Response 406 (application/json) + Body { "error": "You already have a whitelabel account." } ## Availability [/domain-availability] Check availability for domain names. Response can be ‘inyouraccount’, ‘unavailable’, ‘notfree’, ‘free’, ‘internalpull’ or ‘internalpush’. * **inyouraccount**: The domain name is already in your account; * **unavailable**: The domain name is currently unavailable and can not be registered due to unknown reasons. In most cases, this has to do with registry policy (eg. the domain name is too short); * **notfree**: The domain name has already been registered; * **free**: The domain name is available and can be registered; * **internalpull**: The domain name is currently registered at TransIP and is available to be pulled from another account to yours; * **internalpush**: The domain name is currently registered at TransIP in your account and is available to be pushed to another account. ### Check availability for a domain name [GET /domain-availability/{domainName}] This method allows you to check the availability for a domain name. + Parameters + domainName : example.com (string) - Domain name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + availability (DomainCheckResult) ### Check the availability for multiple domain names [GET] Check the availability for multiple domain names. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + domainNames : `example.com`,`example.nl` (array[string]) - array of domainNames to check + Response 200 (application/json) + Attributes + availability (array[DomainCheckResult]) ## Tlds [/tlds] This is the API endpoint for TLD services. ### List all TLDs [GET] This method will return a list of all available TLDs currently offered by TransIP. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + tlds (array[Tld]) ### Get info for a TLD [GET /tlds/{tld}] Get information about a specific TLD. General details such as price, renewal price and minimum registration length are outlined in the output. + Parameters + tld : .nl (string) - Top Level Domain. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + tld (Tld) # Group VPS ## VPS [/vps] The API endpoint for VPS services allows you to manage all VPS services in your account. ### List all VPSs [GET] Returns a list of all VPSs in the account. ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Parameters + tags : `/vps?tags=customTag,anotherTag` (string, optional) - Tags to filter by, separated by a comma. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + vpss (array[Vps]) ### Get VPS by identifier [GET /vps/{vpsIdentifier}] Get information on specific VPS by identifier (name or uuid). **Note**: for `vpsIdentifier`, use the provided name (format: username-vpsXX) or uuid. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + vps (Vps) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with identifier 'example-vps' not found" } ### Order a new VPS [POST] Using this API call, you are able to order a new VPS. Values associated to the newly delivered VPS will be returned in a new call respectively. When the new VPS is delivered it will be added to the output of the [VPS list method](#vps-vps-get) above. * You can specify additional add-ons in an array (not required) to customize the specifications of your VPS; * To get a list of available add-ons, please use the [List all VPS products](#general-products-get) call; * When a hostname is provided, the first 32 chars of this will be used as the description of the VPS. The hostname will be validated when ordering a preinstallable web controlpanel like cPanel. Provide a installFlavour to choose whether a operatingSystem should be deployed with a regular installer or a preinstalled cloudinit image. Check the GET OperatingSystems function to see what flavours are available for you operatingSystem. When choosing `installer` the `base64InstallText` will be interpreted as a preseed or kickstart file, when choosing `cloudinit` it will be interpreted as cloudinit UserData. SSHKeys are optional for a `cloudinit` installation, when no keys are provided a OneTimePassword will be generated and emailed to you. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + productName : `vps-bladevps-x8` (string) - Name of the product + addons : `vps-addon-1-extra-cpu-core` (array[string], optional) - Array with additional addons + availabilityZone : `ams0` (string, optional) - The name of the availability zone where the vps should be created + description : `example vps description` (string, optional) - The description of the VPS + operatingSystem : `ubuntu-18.04` (string, optional) - The name of the operating system to install + installFlavour : `installer` (string, optional) - The flavour of OS installation `installer`, `preinstallable` or `cloudinit` check GET OperatingSystem to see what flavours your OS supports + hostname : `server01.example.com` (string, optional) - The name for the host, only needed for installing a preinstallable control panel image + username : `linus` (string, optional) - Username used for account creating during cloudinit installation (max 32 chars) + hashedPassword : `$2y$10$kDwnrkGedxn4HtdAPl86D..sdtnW5aLeHzPuJ8UbAWOOiSiBDXYkm` (string, optional) - password used for cloud init installation account. + sshKeys : `ssh-rsa AAAAB3NzaC1yc2EAAA...` , `ssh-ed25519 AAAAC3NzaC1l...` (array[string], optional) - array of public ssh key's to use for account creating during installation + base64InstallText (string, optional) - Base64 encoded preseed / kickstart / cloudinit instructions, when installing unattended. The decoded string may be up to 49152 bytes (48 KiB) long. + licenses : `cpanel-premier-200` (array[string], optional) - Licenses you want to add to your `preinstallable` installation flavor + Response 201 + Response 403 (application/json) + Body { "error": "No valid payment information found. Please add your payment information through the Controlpanel on the website." } + Response 404 (application/json) + Body { "error": "VPS product 'vps-bladevps-x1337' is not found" } + Response 404 (application/json) + Body { "error": "VPS product addon 'vps-addon-extra-pie' is not found" } + Response 404 (application/json) + Body { "error": "OperatingSystem with name 'windows-xp' not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'wtf1' is not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'ams0' is not available" } + Response 406 (application/json) + Body { "error": "This is not a valid hostname: 'ex@mple.test.nl'" } + Response 406 (application/json) + Body { "error": "InstallText not base64 encoded" } + Response 406 (application/json) + Body { "error": "The decoded base64InstallText is over 49152 bytes (48 KiB) long" } + Response 406 (application/json) + Body { "error": "The provided SSH key 'ssh-rsa AAAAB3NzaC_INVALIDKEY_1yc2EAAAADAQA' is invalid" } + Response 406 (application/json) + Body { "error": "Provided installFlavour 'strawberry' not supported for this operatingsystem, available flavours are: installer" } + Response 406 (application/json) + Body { "error": "OperatingSystem 'WindowsServer2022Standard' is not supported on the specifications of the provided Vps" } + Response 406 (application/json) + Body { "error": "The provided parameter 'username' can be 32 characters maximum" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 32 characters maximum" } + Response 406 (application/json) + Body { "error": "License 'plesk-co-op-50' is invalid for operating system 'CPanel-alma8-latest'" } + Response 406 (application/json) + Body { "error": "Only one operating system license should be provided" } + Response 406 (application/json) + Body { "error": "Field 'licenses' with value 'cpanel-premier-200!' contains a symbol, this is now allowed" } + Response 406 (application/json) + Body { "error": "Currently we only support setting the hashed password for the root user" } + Response 406 (application/json) + Body { "error": "Given password is not hashed with the bcrypt algorithm" } + Response 406 (application/json) + Body { "error": "Parameter 'hashedPassword' can only be set in combination with the cloudinit installation flavour" } ### Order multiple VPSs [POST] When ordering multiple VPSs at once, specify the VPS specs as in the order function but wrapped in an array. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + vpss : VpsOrder,VpsOrder (array[VpsOrder]) - Array with multiple VPS specs + Response 201 + Response 403 (application/json) + Body { "error": "No valid payment information found. Please add your payment information through the Controlpanel on the website." } + Response 404 (application/json) + Body { "error": "VPS product 'vps-bladevps-x1337' is not found" } + Response 404 (application/json) + Body { "error": "VPS product addon 'vps-addon-extra-pie' is not found" } + Response 404 (application/json) + Body { "error": "OperatingSystem with name 'windows-xp' not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'wtf1' is not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'ams0' is not available" } + Response 406 (application/json) + Body { "error": "This is not a valid hostname: 'ex@mple.test.nl'" } + Response 406 (application/json) + Body { "error": "The provided SSH key 'ssh-rsa AAAAB3NzaC_INVALIDKEY_1yc2EAAAADAQA' is invalid" } + Response 406 (application/json) + Body { "error": "Provided installFlavour 'strawberry' not supported for this operatingsystem, available flavours are: installer" } + Response 406 (application/json) + Body { "error": "OperatingSystem 'WindowsServer2022Standard' is not supported on the specifications of the provided Vps" } + Response 406 (application/json) + Body { "error": "The provided parameter 'username' can be 32 characters maximum" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 32 characters maximum" } + Response 406 (application/json) + Body { "error": "License 'plesk-co-op-50' is invalid for operating system 'CPanel-alma8-latest'" } + Response 406 (application/json) + Body { "error": "Only one operating system license should be provided" } + Response 406 (application/json) + Body { "error": "Field 'licenses' with value 'cpanel-premier-200!' contains a symbol, this is now allowed" } ### Clone a VPS [POST] Use this API call in order to clone an existing VPS. There are a few things to take into account when you want to clone an existing VPS to a new VPS: * If the original VPS (which you’re going to clone) is currently locked, the clone will fail; * Cloned control panels can be used on the VPS, but as the IP address changes, this does require you to synchronise the new license on the new VPS (licenses are often IP-based); * If you choose a target product name and such product doesn't have enough disk space to fit the current VPS, the clone will fail; * You cannot clone a PerformanceVPS or BladeVPS to a SandboxVPS; * Possibly, your VPS has its network interface(s) configured using (a) static IP(‘s) rather than a dynamic allocation using DHCP. If this is the case, you have to configure the new IP(‘s) on the new VPS. Do note that this is not the case with our pre-installed control panel images; * VPS add-ons such as Big Storage aren’t affected by cloning - these will stay attached to the original VPS and can’t be swapped automatically ::: warning **Warning**: As cloning is a paid service, an invoice will be generated + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + vpsName : `example-vps` (string) - The vps name of the VPS to clone. + targetProductName : `vps-bladevps-x8` (string, optional) - Name of the product used by the cloned VPS + availabilityZone : `ams0` (string, optional) - The name of the availability zone where the clone should be created + Response 201 + Response 403 (application/json) + Body { "error": "No valid payment information found. Please add your payment information through the Controlpanel on the website." } + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with identifier 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Administrative error, unable to clone VPS" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Update a VPS [PUT /vps/{vpsIdentifier}] In this API call you can lock/unlock a VPS, update VPS description, and add/remove tags. ### Locking a VPS Locking a VPS prevents accidental execution of API calls and manual actions through the control panel. For locking the VPS, set `isCustomerLocked` to `true`. Set the value to `false` for unlocking the VPS. ### Change a VPS description You can change your VPS description by simply changing the `description` attribute. Note that the identifier key `name` will not be changed. The description can be maximum 32 character longs ### VPS Tags To add/remove tags, you must update the `tags` attribute. Every time you make a call with a changed tags attribute, the existing tags are overridden. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + vps (Vps) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with identifier 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 32 characters maximum" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } ### Start a VPS [PATCH /vps/{vpsIdentifier}] This API call allows you to start a VPS, given that it’s currently in a stopped state. To start a VPS, send a PATCH request with the `action` attribute set to `start`. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : start (string) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with identifier 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Stop a VPS [PATCH /vps/{vpsIdentifier}] By setting the `action` attribute to `stop`, you can put the specified VPS in a stopped state. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : stop (string) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with identifier 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Reset a VPS [PATCH /vps/{vpsIdentifier}] This API call will reset the specified VPS. A reset is essentially the stop and start command combined into one To reset a VPS, send a PATCH request with the `action` attribute set to `reset`. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : reset (string) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with identifier 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Handover a VPS [PATCH /vps/{vpsIdentifier}] Handover a VPS to another Account. This call will initiate the handover process. the actual handover will be done when the target customer accepts the handover. Note: the VPS will be shut down in order to handover. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : handover (string) + targetCustomerName : example2 (string) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with identifier 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "Target user 'example2' does not exist" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } + Response 409 (application/json) + Body { "error": "Error Processing Handover, One or more items are already being handovered" } + Response 409 (application/json) + Body { "error": "Target user 'example2' is not capable of receiving handover" } ### Cancel a VPS [DELETE /vps/{vpsIdentifier}] Using the DELETE method on a VPS will cancel the VPS, thus deleting it. Upon cancellation This will wipe all data on the VPS and permanently destroy it. You can set the `endTime` attribute to 'end' or 'immediately', this has the following implications: * **end**: The VPS will be terminated from the end date of the agreement as can be found in the applicable quote; * **immediately**: The VPS will be terminated immediately. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + endTime : end (string, optional) - Cancellation time, either 'end' (default) or 'immediately' + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with identifier 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'" } + Response 409 (application/json) + Body { "error": "Product already has cancellation pending" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } ## Usage [/vps/{vpsIdentifier}/usage] This is the API endpoint for VPS usage data. ### Get usage data for a VPS [GET] Use this API call to retrieve usage data for a specific VPS. Make sure to specify the `dateTimeStart` and `dateTimeEnd` parameters in UNIX timestamp format. Please take the following into account: * The `dateTimeStart` and `dateTimeEnd` parameters allow for gathering information about a specific time period, when not specified the output will contain data for the past 24 hours; * The difference between `dateTimeStart` and `dateTimeEnd` parameters may not exceed one month. For traffic-related information and statistics, use the [Get traffic information for a VPS](#vps-traffic-get) API call. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + types : `cpu,disk,network` (string, optional) - The types of statistics that can be returned, `cpu`, `disk` and `network` can be specified in a comma seperated way. If not specified, all data will be returned. + dateTimeStart : 1500538995 (number, optional) - The start date of the usage statistics + dateTimeEnd : 1500542619 (number, optional) - The end date of the usage statistics + Response 200 (application/json) + Attributes + usage (Usage) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "The parameter 'dateTimeStart' is not a number." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeEnd' cannot be negative." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeEnd' cannot be in the future." } + Response 406 (application/json) + Body { "error": "The time period is too large, it should not be bigger than one month." } + Response 406 (application/json) + Body { "error": "These are invalid usage types: invalid, type." } ## VPS VNC Data [/vps/{vpsIdentifier}/vnc-data] This is the API endpoint for VPS VNC data ### Get VNC data for a VPS [GET] Get the location, token and password in order to connect directly to the VNC console of your VPS. Please note, you cannot directly connect to the proxy using a VNC client, use a client that supports websockets like https://github.com/novnc/noVNC Use the information as URL query parameters, or use the URL in the url parameter directly. Then enter the password. See the link below for an example of how to provide URL query parameters to a hosted novnc instance. By default novnc understands the following url parameters: - **host** the host hosting the vnc proxy, this should be `vncproxy.transip.nl` - **path** the path to request on the host, `websockify?token=YOURTOKEN` - **password** the vnc password - **autoconnect** whether or not to start connecting once you loaded the page An example of all parameters together in one url would be https://novnc.com/noVNC/vnc.html?host=vncproxy.transip.nl&path=websockify?token=esco024gzqwyeeb5nexayi2gve09paw9dytumyxqzurxj5t642o5p6myzisn5gch&password=fVpTyDrhMiuYBXxn&autoconnect=true ::: warning **Warning**: We do recommend running novnc locally or hosting your own novnc page, this way you can make sure your token and password remain private. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + vncData (VpsVncData) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS console for 'example-vps' is currently unavailable" } ### Regenerate VNC token for a vps [PATCH] Call this method to regenerate the VNC credentials for a VPS. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS console for 'example-vps' is currently unavailable" } ## Addons [/vps/{vpsIdentifier}/addons] This is the API endpoint for VPS addons services. ### List addons for a VPS [GET] This method will return all active, cancelable and available add-ons for a VPS. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + addons (Addons) + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } ### Order addons for a VPS [POST] In order to extend a specific VPS with add-ons, use this API call. The type of add-ons that can be ordered range from extra IP addresses to hardware add-ons such as an extra core or additional SSD disk space. ::: warning **Warning**: This API call will create a new invoice for the specified add-on(s) + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + addons : `vps-addon-1-extra-ip-address` (array[string]) - Addons to be added + Response 201 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 403 (application/json) + Body { "error": "Addon order limit reached for addon product element 'memory-size'" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "VPS product addon 'example-addon' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Cancel an addon for a VPS [DELETE /vps/{vpsIdentifier}/addons/{addonName}] By using this API call, you can cancel an add-on by name, specifying the VPS name as well. Due to technical restrictions (possible dataloss) storage add-ons cannot be cancelled. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + addonName : `vps-addon-1-extra-ip-address` (string) - Addon name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "The addon 'vps-addon-100-gb-extra-harddisk' is not cancellable." } + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "Product already has cancellation pending" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ## VPS Licenses [/vps/{vpsIdentifier}/licenses] This is the API endpoint for VPS licenses. ### List licenses for a VPS [GET] This method will return all active, cancellable and available licenses for a VPS. Operating system licenses (type: `operating-system`) cannot be directly purchased, or cancelled, they are attached to your VPS the moment you install an operating system that requires a license. Operating systems such as Plesk, DirectAdmin, cPanel and etc need a valid license. An operating system license can only be upgraded or downgraded by using the [Update an operating system license](#vps-licenses-put) API call. Addon licenses (type: `addon`) can be purchased individually through the [Order an addon license](#vps-licenses-post) API call. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + licenses (Licenses) + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } ### Order an addon license [POST] In order to purchase an addon license for your VPS, use this API call. The licenses that can be ordered can be requested using the [get licenses](#vps-vps-licenses-get) api call. ::: warning **Warning**: This API call will create a new invoice for the specified license + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + licenseName : `microsoft-office-professional` (string) - Name of the license that you want to order + quantity : 1 (number) - Quantity of the license that you want to order + Response 201 + Response 403 (application/json) + Body { "error": "The limit for license 'installatron' has been reached" } + Response 403 (application/json) + Body { "error": "License with name 'cpanel-premier-1000' is not orderable as an addon license" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "License with name 'example-license' does not exist" } + Response 404 (application/json) + Body { "error": "License with name 'example-license' is not available" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } + Response 500 (application/json) + Body { "error": "The license could not be ordered due to an internal error" } ### Update an operating system license [PUT /vps/{vpsIdentifier}/licenses/{licenseId}] Switch between operating system licenses using this API call. You must provide your current License Id in the `licenseId` parameter. Provide your desired license name in the `newLicenseName` parameter within the request body for either to upgrade or downgrade. ::: warning **Warning**: Changes made using this API call will reflect on your next invoice + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + licenseId : `18` (string) - License Id + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + newLicenseName : `cpanel-premier` (string) - The name of the new license that you want to switch to + Response 204 + Response 403 (application/json) + Body { "error": "The installed operating system on your VPS does not have licenses" } + Response 403 (application/json) + Body { "error": "License with id '1' not up or downgradable" } + Response 403 (application/json) + Body { "error": "License with name 'installatron' and type 'addon' can't be used to up or downgrade" } + Response 403 (application/json) + Body { "error": "Cannot downgrade to License with name 'cpanel-admin', due to too many active cPanel users on the provided VPS" } + Response 404 (application/json) + Body { "error": "VPS with name example-vps not found" } + Response 404 (application/json) + Body { "error": "License with id '1' is not attached to example-vps" } + Response 406 (application/json) + Body { "error": "License with name 'microsoft-office-365' is not available" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Cancel an addon license [DELETE /vps/{vpsIdentifier}/licenses/{licenseId}] By using this API call, you can cancel a license by its id, specifying the VPS name as well. Operating system licenses cannot be cancelled. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + licenseId : `18` (string) - License Id + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "License with id '1' is not cancellable" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "License with id '123' does not exist" } + Response 409 (application/json) + Body { "error": "Product already has cancellation pending" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ## Upgrades [/vps/{vpsIdentifier}/upgrades] This is the API endpoint for VPS upgrades services. ### List available upgrades for a VPS [GET] List all available product upgrades for a VPS. Upgrades differentiate from add-ons in the sense that upgrades are VPS products like the `vps-bladevps-pro-x16` VPS product. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + upgrades (array[Product]) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Upgrade a VPS [POST] This API call allows you too upgrade a VPS by name and productName. It’s not possible to downgrade a VPS, as most upgrades cannot be deallocated due to technical reasons (data loss when shrinking the disk space). Your current add-ons will be transferred to your selected package. Add-ons that have become redundant are automatically cancelled and you only pay for add-ons that you need after an upgrade. So, if you have a BladeVPS X1 with an additional 100GB disk space Add-on then it will automatically expire after an upgrade to a BladeVPS X4. ::: warning **Warning**: This API call will create an invoice for the upgrade. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + productName : `vps-bladevps-pro-x16` (string) + Response 201 + Response 403 (application/json) + Body { "error": "Downgrades are not supported." } + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "Upgrade with id 'vps-bladevps-pro-x9' not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ## OperatingSystems [/vps/{vpsIdentifier}/operating-systems] This is the API endpoint for VPS operating systems. ### List installable operating systems for a VPS [GET] We offer a number of operating systems and preinstalled images ready to be installed on any VPS. Using this API call, you can get a list of operating systems and preinstalled images available. Commercial operating systems (such as Windows Server editions) and images shipping a commercial control panel contain the ‘price’ attribute, showing the price per month charged on top of the VPS itself. A list with operating systems can also be found [here](https://www.transip.nl/vps/) + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + operatingSystems (array[OperatingSystem]) ### Install an operating system on a VPS [POST] With this method you can install operating systems and preinstalled images on a VPS. A notable feature is the ability to specify if the installation should be unattended using the `base64InstallText` parameter, allowing for automatic deployment of operating systems. Provide an installFlavour to choose whether a operating system should be deployed with a regular installer or a preinstalled cloudinit image. Check the GET operating-systems function to see what flavours are available for you operating system. When choosing `installer` the `base64InstallText` will be interpreted as a preseed or kickstart file, when choosing `cloudinit` it will be interpreted as cloudinit UserData. SSHKeys are optional for a `cloudinit` installation, when no keys are provided a OneTimePassword will be generated and emailed to you. Provide a license to override the default license of a `preinstallable` operating system. As an example, once a cPanel installation is complete, the default cPanel license will allow you to create 5 user accounts. If the cPanel Pro license is provided, the default license is replaced, and after installation you are able to create 30 user accounts. ::: warning **Warning**: This will create an invoice when a non-free operating system or a non-free control panel is chosen. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + operatingSystemName : `ubuntu-22.04` (string) - The name of the operating system + hostname (string, optional) - Hostname is required for preinstallable web controlpanels + installFlavour: `cloudinit` (string, optional) - Flavour of OS installation `installer`, `preinstallable` or `cloudinit` check GET operating-system to see what flavours of installation your OS supports. + username: `bob` (string, optional) - username used for account creating during cloudinit installation (max 32 chars) + hashedPassword : `$2y$10$kDwnrkGedxn4HtdAPl86D..sdtnW5aLeHzPuJ8UbAWOOiSiBDXYkm` (string, optional) - password used for cloud init installation account. + sshKeys : `ssh-rsa AAAAB3NzaC1yc2EAAA...` , `ssh-ed25519 AAAAC3NzaC1l...` (array[string], optional) - array of public ssh keys to use for account creating during installation + base64InstallText (string, optional) - Base64 encoded preseed / kickstart / cloudinit instructions, when installing unattended. The decoded string may be up to 49152 bytes (48 KiB) long. + licenses : `cpanel-premier-200` (array[string], optional) - Licenses you want to add to your `preinstallable` installation flavor + Response 201 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "The OperatingSystem 'ubuntu-15.04' does not exist" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "License with name 'plesk-co-op-51' does not exist" } + Response 406 (application/json) + Body { "error": "This is not a valid hostname: 'ex@mple.test.nl'" } + Response 406 (application/json) + Body { "error": "InstallText not base64 encoded" } + Response 406 (application/json) + Body { "error": "The decoded base64InstallText is over 49152 bytes (48 KiB) long" } + Response 406 (application/json) + Body { "error": "Cannot install preinstallable image unattended" } + Response 406 (application/json) + Body { "error": "The provided SSH key 'ssh-rsa AAAAB3NzaC_INVALIDKEY_1yc2EAAAADAQA' is invalid" } + Response 406 (application/json) + Body { "error": "Provided installFlavour 'strawberry' not supported for this operating system, available flavours are: installer" } + Response 406 (application/json) + Body { "error": "OperatingSystem 'WindowsServer2022Standard' is not supported on the specifications of the provided Vps" } + Response 406 (application/json) + Body { "error": "The provided parameter 'username' can be 32 characters maximum" } + Response 406 (application/json) + Body { "error": "License 'plesk-co-op-50' is invalid for operating system 'CPanel-alma8-latest'" } + Response 406 (application/json) + Body { "error": "Currently we only support setting the hashed password for the root user" } + Response 406 (application/json) + Body { "error": "Given password is not hashed with the bcrypt algorithm" } + Response 406 (application/json) + Body { "error": "Parameter 'hashedPassword' can only be set in combination with the cloudinit installation flavour" } + Response 406 (application/json) + Body { "error": "Only one operating system license should be provided" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ## IP Addresses [/vps/{vpsIdentifier}/ip-addresses] This is the API endpoint for VPS Ips services. To add an IP address, use the [addons endpoint](#vps-addons). ### List IP addresses for a VPS [GET] This API call will return all IPv4 and IPv6 addresses attached to the VPS including Relevant network information like the gateway and subnet mask. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + ipAddresses (array[IpAddress]) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } ### Get IP address info by address [GET /vps/{vpsIdentifier}/ip-addresses/{ipAddress}] Only return network information for the specified IP address. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + ipAddress : `37.97.254.6` (string) - The IP address of the VPS + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + ipAddress (IpAddress) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "IP address '8.8.8.8' is not found on VPS 'example-vps'" } ### Add IPv6 address to a VPS [POST] VPSes are deployed with an `/64` IPv6 range. In order to set ReverseDNS for specific ipv6 addresses, you will have to add the IPv6 address via this command. After adding an IPv6 address, you can set the reverse DNS for this address using the [Update Reverse DNS](#vps-ip-addresses-put) API call. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + ipAddress : 2a01:7c8:3:1337::6 (string) + Response 201 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "IP address 'fe80::200:f8ff:fe21:67cfaa' is not valid" } + Response 406 (application/json) + Body { "error": "IP address '2a01:7c8:3:1337::6' is not in the VPS ipv6 Range" } + Response 409 (application/json) + Body { "error": "IP address '2a01:7c8:3:1337::6' already exists" } ### Update reverse DNS for a VPS [PUT /vps/{vpsIdentifier}/ip-addresses/{ipAddress}] Reverse DNS for IPv4 addresses as well as IPv6 addresses can be updated using this API call. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + ipAddress : `37.97.254.6` (string) - The IP address of the VPS + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + ipAddress (IpAddress) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "IP address '8.8.8.8' is not found on VPS 'example-vps'" } + Response 406 (application/json) + Body { "error": "This is not a valid hostname: 'test&@*#'" } ### Remove an IPv6 address from a VPS [DELETE /vps/{vpsIdentifier}/ip-addresses/{ipAddress}] This method allows you to remove specific IPv6 addresses from the registered list of IPv6 addresses within the VPS's `/64` IPv6 range. Note that deleting an IP address will also wipe its reverse DNS information. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + ipAddress : `37.97.254.6` (string) - The IP address of the VPS + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 403 (application/json) + Body { "error": "IPv6 '2a01:0a0:aa00:00::1' cannot be deleted, your VPS requires at least one IPv6 address." } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "IPv6 address '2a01:0a0:aa00:00::1' is not found on VPS 'example-vps'" } ## Snapshots [/vps/{vpsIdentifier}/snapshots] This is the API endpoint for VPS snapshots services. ### List snapshots for a VPS [GET] This method allows you to list all snapshots that are taken of your VPS main disk. A snapshot status can have the following values: ‘active‘, ‘creating‘, ‘reverting‘, ‘deleting‘, ‘pendingDeletion‘, ‘syncing‘, ‘moving‘ when status is ‘active‘ you can perform actions on it. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + snapshots (array[Snapshot]) ### Get snapshot by name [GET /vps/{vpsIdentifier}/snapshots/{snapshotName}] Specifying the snapshot ID and the VPS name it’s associated with, allows for insight in snapshot details. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + snapshotName : 1500027671 (string) - Name of the snapshot + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + snapshot (Snapshot) + Response 404 (application/json) + Body { "error": "Snapshot with name '1500027671' not found" } ### Create snapshot of a VPS [POST] With this API call you can create a snapshot of a VPS. In case the creation of this snapshot leads to exceeding the maximum allowed snapshots, the API call will return an error and the snapshot will not be created - please order extra snapshots before proceeding. Creating a snapshot allows for restoring it on another VPS using the [Revert snapshot to a VPS](#vps-snapshots-patch) given that its specifications equals or exceeds those of the snapshot's source VPS. ::: warning We strongly recommend shutting the VPS down before taking a snapshot in order to prevent data loss, etc. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + description : BeforeItsAllBroken (string) + shouldStartVps : true (boolean, optional) - Specify whether the VPS should be started immediately after the snapshot was created, default is `true` + Response 201 + Response 403 (application/json) + Body { "error": "Snapshot limit reached" } + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Revert snapshot to a VPS [PATCH /vps/{vpsIdentifier}/snapshots/{snapshotName}] This method can be used to revert a snapshot to a VPS. Specifying the `destinationVpsName` attribute makes sure the snapshot is restored onto another VPS. Networking may be configured statically on the source VPS, therefore breaking connectivity when restored onto another VPS with a new assigned IP. You should be able to alter this through the KVM console in the control panel in case SSH is unavailable. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + snapshotName : 1500027671 (string) - Name of the snapshot + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + destinationVpsName : `example-vps` (string, optional) - When set, revert the snapshot to this VPS + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "Snapshot '1500027671' diskSize '157286400' is bigger than destination diskSize '52428800'" } + Response 406 (application/json) + Body { "error": "OperatingSystem 'example OS' is not supported on the specifications of the provided Vps" } + Response 409 (application/json) + Body { "error": "The Snapshot '1500027671' is already locked to another action" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Delete a snapshot [DELETE /vps/{vpsIdentifier}/snapshots/{snapshotName}] Delete a VPS snapshot using this API call. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + snapshotName : 1500027671 (string) - Name of the snapshot + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "The Snapshot '1500027671' is already locked to another action." } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ## VPS Backups [/vps/{vpsIdentifier}/backups] This is the API endpoint for VPS backups services. ### List backups for a VPS [GET] We offer multiple backup types, every VPS has 4 hourly backups by default, weekly backups are available for a small fee. This API call returns backups for both types. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + backups (array[VpsBackup]) ### Revert backup to a VPS [PATCH /vps/{vpsIdentifier}/backups/{backupId}] Reverting a VPS backup will restore the VPS to an earlier state. Both the VPS name (that the backup belongs to) and the backup id are required. Please use the [List backups for a VPS](#vps-backups-get-1) call in order to get the ID, as you can extract the backup id from its output. To revert a backup to a VPS, send a PATCH request with an `action` attribute set to `revert`. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + backupId : 712332 (number) - Id of the backup + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : revert (string) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "Backup with id '1234' not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "The Backup '34026' is already locked to another action" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } + Response 409 (application/json) + Body { "error": "Actions on Backup '123' are temporary disabled" } ### Convert backup to snapshot [PATCH /vps/{vpsIdentifier}/backups/{backupId}] With this API call you can convert a backup to a snapshot for the VPS. In case the creation of this snapshot leads to exceeding the maximum allowed snapshots, the API call will return an error and the snapshot will not be created please order extra snapshots before proceeding. To convert a backup to a VPS snapshot, send a PATCH request with the `action` attribute set to `convert`. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + backupId : 712332 (number) - Id of the backup + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : convert (string) + description : BeforeItsAllBroken (string, optional) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 403 (application/json) + Body { "error": "Snapshot limit reached" } + Response 404 (application/json) + Body { "error": "Backup with id '1234' not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "The Backup '34026' is already locked to another action" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } + Response 409 (application/json) + Body { "error": "Actions on Backup '123' are temporary disabled" } ## TrafficPool [/traffic-pool] ### Get traffic pool information [GET] All the traffic of your VPSes combined, overusage will also be billed based on this information. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + trafficPoolInformation (array[VpsTrafficPoolInformation]) ### Get traffic information for a VPS [GET /traffic-pool/{vpsName}] Traffic information for a specific VPS can be retrieved using this API call. Statistics such as consumed bandwidth and network usage statistics are classified as traffic information. + Parameters + vpsName : `example-vps` (string) - VPS name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + trafficPoolInformation (array[VpsTrafficPoolInformation]) + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } ## VPS Firewall [/vps/{vpsIdentifier}/firewall] This is the API endpoint for VPS firewall ### List firewall for a VPS [GET] The VPS firewall works as a whitelist stateful firewall for **incoming** traffic. Enable the Firewall to block everything, add rules to exclude certain traffic from being blocked. To further filter traffic, IP's can be whitelisted per rule. when no whitelist has been given for a specific rule, all traffic is allowed to this port. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + vpsFirewall (VpsFirewall) ### Update firewall for a VPS [PUT] Update the ruleset for a VPS. This will override all current rules set for this VPS. The VPS Firewall works as a whitelist. when no entries are given, but the firewall is enabled. All **incoming** traffic will be blocked. IP's or IP Ranges (v4/v6) can be whitelisted per rule. When no whitelist has been given for a specific rule, all incoming traffic is allowed to this port. Protocol parameter can either be `tcp`, `udp` or `tcp_udp`. There is a maximum of 50 rules with each a maximum of 20 whitelist entries. Any change to the firewall will temporary lock the VPS while the new rules are being applied. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + vpsFirewall (VpsFirewall) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "IP range 'fe80::200:f8ff:fe21:67cfaa/200' is not valid" } + Response 406 (application/json) + Body { "error": "Firewall 'example' has startPort '13371337' which should be larger than '0' and smaller than '65535'" } + Response 406 (application/json) + Body { "error": "Firewall 'example' has endPort '13371337' which should be larger than '0' and smaller than '65535'" } + Response 406 (application/json) + Body { "error": "Firewall 'example' has endPort '80' should be larger or equal than startPort '443'" } + Response 406 (application/json) + Body { "error": "Invalid whitelist entry provided '256.0.1.1'" } + Response 406 (application/json) + Body { "error": "Whitelisted entry count '21' exceeded maximum of '20''" } + Response 406 (application/json) + Body { "error": "Rule 'HTTP' is already covered by 'HTTP-HTTPS'" } + Response 406 (application/json) + Body { "error": "Rulecount '51' exceeded maximum of '50'" } + Response 406 (application/json) + Body { "error": "The provided parameter 'protocol' can only be one of the following value's 'tcp,udp,tdp_udp'" } + Response 409 (application/json) + Body { "error": "Port '25' is blocked administratively" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } ### Reset firewall for a VPS [PATCH] Reset the ruleset for a VPS back to the default settings. This will override all current rules set for this VPS. Any change to the firewall will temporary lock the VPS while the new rules are being applied. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : reset (string) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "Action should be one of the following: reset" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } ## VPS Settings [/vps/{vpsIdentifier}/settings] This endpoint can be used to toggle VPS settings on or off for a specified VPS. VPS Settings are settings that are not necessarily part of the VPS itself but rather settings that can be toggled as an addition or deduction of functionalities. An example of a setting would be blocking or unblocking the outbound mail ports for a specified VPS (Ports: 25, 465, 587). This setting is named blockVpsMailPorts. ### List All Settings for a VPS [GET] This API call will return all available settings that could be toggled for a VPS. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + settings (array[Setting]) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "Setting 'exampleSetting' is not an existing setting" } ### Get VPS Setting Information [GET /vps/{vpsIdentifier}/settings/{setting}] Returns the current value for the specified setting. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + setting : `blockVpsMailPorts` (string) - The Setting for the VPS + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + setting (Setting) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "Setting 'exampleSetting' is not an existing setting" } ### Update a setting for the specified VPS [PUT /vps/{vpsIdentifier}/settings/{setting}] This method allows you to update an available setting for the specified VPS. There are a couple of things to keep in mind while sending this request: * You are able to set multiple value data types e.g. 'valueBoolean', 'valueString' however only the relevant datatype for the specified setting will be used. * You are not able to send an update request to a read only setting, please make sure to check which settings are specified as read only. * You are not able to send an update request without sending any values or leaving the values empty e.g. null values. * Please make sure that the setting name in the JSON body is equal to the setting name in the URI. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + setting : `blockVpsMailPorts` (string) - The Setting for the VPS + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + setting (Setting) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "Setting with name 'settingName' does not exist" } + Response 406 (application/json) + Body { "error": "Setting name in JSON body does not match URI" } + Response 406 (application/json) + Body { "error": "No values are set in the value parameter" } + Response 406 (application/json) + Body { "error": "Setting with name 'tcpMonitoringAvailable' is read only" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification allowed" } ## Private Networks [/private-networks] Private networks are used for internal communication between VPSes that can be utilized best by non-public facing connectivity, data usage is unlimited and will not be billed A private network offers the ability to connect your VPSes in a separate layer 2 network. IP address assignments and services like DHCP, DNS and routing are all in your own freedom to choose and set up. ### List all private networks [GET] List all private networks in your account. Should you only want to get the private networks attached to a specific VPS, set the `vpsName` parameter and only attached private networks will be shown like `/v6/private-networks?vpsName=example-vps` If this parameter is not set, all private networks will be listed along with the VPSes it’s attached to. ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Parameters + vpsName : `/private-networks?vpsName=example-vps` (string, optional) - Filter private networks by a given VPS + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + privateNetworks (array[PrivateNetwork]) ### Get private network by name [GET /private-networks/{privateNetworkName}] Gather detailed information about a private network. As one of the returned attributes includes an array of the VPSes it’s attached to, you can determine if the private network is already attached to a specific VPS and if not, you can attach it. + Parameters + privateNetworkName : `example-privatenetwork` (string, required) - Name of the private network + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + privateNetwork (PrivateNetwork) + Response 403 (application/json) + Body { "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "PrivateNetwork with name 'example-privatenetwork' not found" } ### Order a new private network [POST] Order a new private network. After ordering a private network you’re able to attach it to a VPS t o make use of the private network. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + description (string, optional) You can provide custom description + Response 201 ### Update private network [PUT /private-networks/{privateNetworkName}] This method can also be used to change the `description` attribute. The description can be maximum 32 character longs + Parameters + privateNetworkName : `example-privatenetwork` (string, required) - Name of the private network + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + privateNetwork (PrivateNetwork) + Response 204 + Response 403 (application/json) + Body { "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "PrivateNetwork with name 'example-privatenetwork' not found" } + Response 406 (application/json) + Body { "error": "The provided parameter 'verylongdescriptionthatwouldnotfit' can be 32 characters maximum" } + Response 409 (application/json) + Body { "error": "The PrivateNetwork 'example-privatenetwork' is already locked to another action" } ### Attach vps to privateNetwork [PATCH /private-networks/{privateNetworkName}] Attach VPSes to the private network one at a time. Send a PATCH request with the `action` attribute set to `attachvps`. + Parameters + privateNetworkName : `example-privatenetwork` (string, required) - Name of the private network + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : attachvps (string) + vpsName : `example-vps` (string) - Name of the vps that you want to attach + Response 204 + Response 403 (application/json) + Body { "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed" } + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "PrivateNetwork with name 'example-privatenetwork' not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "The PrivateNetwork 'example-privatenetwork' is already locked to another action" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Detach vps from privateNetwork [PATCH /private-networks/{privateNetworkName}] Detach VPSes from the private network one at a time. Send a PATCH request with the `action` attribute set to `removevps`. + Parameters + privateNetworkName : `example-privatenetwork` (string, required) - Name of the private network + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : detachvps (string) + vpsName : `example-vps` (string) - Name of the vps that you want to detach + Response 204 + Response 403 (application/json) + Body { "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed" } + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "PrivateNetwork with name 'example-privatenetwork' not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "The PrivateNetwork 'example-privatenetwork' is already locked to another action" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ### Cancel a private network [DELETE /private-networks/{privateNetworkName}] Cancel a private network. You can set the `endTime` attribute to `end` or `immediately`, this has the following implications: * **end**: The private network will be terminated from the end date of the agreement as can be found in the applicable quote; * **immediately**: The private network will be terminated immediately. + Parameters + privateNetworkName : `example-privatenetwork` (string, required) - Name of the private network + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + endTime : end (string, optional) - Cancellation time, either 'end' (default) or 'immediately' + Response 204 + Response 403 (application/json) + Body { "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "PrivateNetwork with name 'example-privatenetwork' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'" } + Response 409 (application/json) + Body { "error": "Product already has cancellation pending." } + Response 409 (application/json) + Body { "error": "The PrivateNetwork 'example-privatenetwork' is already locked to another action" } ## Big Storages [/big-storages] This is the API endpoint for bigstorage services. ### List all big storages [GET] Returns an array of all Big Storages in the given account. After all Big Storages have been returned as an array, you can extract it and use a specific Big Storage for the other API calls documented below. Should you only want to get the big storages attached to a specific VPS, set the `vpsName` parameter and only big storages that are attached to the given vps will be shown like `/v6/big-storages?vpsName=example-vps` ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. ::: warning **Warning**: This method is deprecated. Use the block-storages resource instead. + Parameters + vpsName : `/big-storages?vpsName=example-vps` (string, optional) - Filters on a given vps name. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + bigStorages (array[BigStorage]) ### Get big storage by identifier [GET /big-storages/{bigStorageIdentifier}] Get information about a specific Big Storage and its current status. If the Big Storage is attached to a VPS, the output will contain the VPS name it’s attached to. ::: warning **Warning**: This method is deprecated. Use the block-storages resource instead. + Parameters + bigStorageIdentifier (string) - The identifier of the big storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + bigStorage (BigStorage) + Response 404 (application/json) + Body { "error": "Big storage with identifier 'example-bigstorage' not found" } ### Order a new big storage [POST] Use this API call to order a new Big Storage. The minimum size is 2 TB and storage can be extended with up to maximum of 40 TB. Make sure to use a multiple of 2 TB. Optionally, to create back-ups of your Big Storage, enable off-site back-ups. We highly recommend activating back-ups. When a `vpsName` has been given, the availability zone of this VPS will be used. The Bigstorage and VPS have to be in the same availability zone in order to attach. ::: warning **Warning**: This API call will create an invoice! **Warning**: This method is deprecated. Use the block-storages resource instead. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + size : 8 (number) - The size of the big storage in TB's, use a multiple of 2. The maximum size is 40. + offsiteBackups : true (boolean, optional) - Whether to order offsite backups, default is `true`. + availabilityZone : `ams0` (string, optional) - The name of the availabilityZone where the BigStorage should be created. This parameter can not be used in conjunction with vpsName. If a vpsName is provided as well as an availabilityZone, the zone of the vps is leading. + vpsName : `example-vps` (string, optional) - The name of the VPS to attach the big storage to + description : `backup-bigstorage` (string, optional) - The description of the Bigstorage (maximum length 64) + Response 201 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'wtf0' is not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'ams0' is not available" } + Response 406 (application/json) + Body { "error": "Big storage size '-1' is invalid" } + Response 406 (application/json) + Body { "error": "Big storage size '50' exceeds the maximum amount of 40 TB" } + Response 406 (application/json) + Body { "error": "Big storage size '3' should be a multiple of 2" } + Response 406 (application/json) + Body { "error": "Big storage needs to be in the same availability zone as VPS 'example-vps'" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 64 characters maximum" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } ### Upgrade big storage [POST] With this method you are able to upgrade a bigstorage diskSize or enable backups. The minimum size is 2 TB and storage can be extended with up to maximum of 40 TB. Make sure to use a multiple of 2 TB. Optionally, to create back-ups of your Big Storage, enable off-site back-ups. We highly recommend activating back-ups. ::: warning **Warning**: This API call will create an invoice! **Warning**: This method is deprecated. Use the block-storages resource instead. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + bigStorageName : `example-bigstorage` (string, optional) - The name of the bigstorage to upgrade + size : 8 (number) - The size of the big storage in TB's, use a multiple of 2. The maximum size is 40. + offsiteBackups : true (boolean, optional) - Whether to order offsite backups, omit this to use current value + Response 201 + Response 404 (application/json) + Body { "error": "Big storage with identifier 'example-bigstorage' not found" } + Response 406 (application/json) + Body { "error": "Big storage size '-1' is invalid" } + Response 406 (application/json) + Body { "error": "Big storage size '50' exceeds the maximum amount of 40 TB" } + Response 406 (application/json) + Body { "error": "Big storage size '3' should be a multiple of 2" } + Response 406 (application/json) + Body { "error": "Upgrade size '2' is smaller than current size '4'" } ### Update big storage [PUT /big-storages/{bigStorageIdentifier}] This API calls allows for altering a big storage in several ways outlined below: * Changing the description of a Big Storage (maximum length 64); * One Big Storages can only be attached to one VPS at a time; * One VPS can have a maximum of 10 bigstorages attached; * Set the `vpsName` property to the VPS name to attach to for attaching Big Storage; * Set the `vpsName` property to null to detach the Big Storage from the currently attached VPS. ::: warning **Warning**: This method is deprecated. Use the block-storages resource instead. + Parameters + bigStorageIdentifier (string) - The identifier of the big storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + bigStorage (BigStorage) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "Big storage with identifier 'example-bigstorage' not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "Please supply the '`description` or `vpsName`' parameter" } + Response 406 (application/json) + Body { "error": "Big storage needs to be in the same availability zone as VPS 'example-vps'" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 64 characters maximum" } + Response 409 (application/json) + Body { "error": "Big storage 'example-bigstorage' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } ### Cancel big storage [DELETE /big-storages/{bigStorageIdentifier}] Cancels a big storage for the specified ‘endTime’. You can set the `endTime` attribute to `end` or `immediately`, this has the following implications: * **end**: The Big Storage will be terminated from the end date of the agreement as can be found in the applicable quote; * **immediately**: The Big Storage will be terminated immediately. Note that canceling a Big Storage will wipe all data stored on it as well as off-site back-ups as well if these are activated. ::: warning **Warning**: This method is deprecated. Use the block-storages resource instead. + Parameters + bigStorageIdentifier (string) - The identifier of the big storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + endTime : end (string, optional) - Cancellation time, either 'end' or 'immediately' + Response 204 + Response 404 (application/json) + Body { "error": "Big storage with identifier 'example-bigstorage' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'" } + Response 409 (application/json) + Body { "error": "Product already has cancellation pending" } ## Big Storage Backups [/big-storages/{bigStorageIdentifier}/backups] This is the API endpoint for big storage backup services. ### List backups for a big storage [GET] Using this API call, you are able to list all backups belonging to a specific big storage. ::: warning **Warning**: This method is deprecated. Use the block-storages resource instead. + Parameters + bigStorageIdentifier (string) - The identifier of the big storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + backups (array[BigStorageBackup]) ### Revert a big storage backup [PATCH /big-storages/{bigStorageIdentifier}/backups/{backupId}] To revert a backup from a big storage, retrieve the `backupId` from the [backups](#vps-backups-get-1) resource. Please note this is only possible when any backups are created with the off-site backups feature, otherwise no backups will be made nor listed. ::: warning **Warning**: This method is deprecated. Use the block-storages resource instead. + Parameters + bigStorageIdentifier (string) - The identifier of the big storage (name or uuid) + backupId : 625584 (number) - Id of the backup + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : revert (string) + destinationBigStorageIdentifier : `example-bigstorage` (string, optional) - When set, revert the backup to this big storage + Response 204 + Response 404 (application/json) + Body { "error": "Big storage with identifier 'example-bigstorage' not found" } + Response 404 (application/json) + Body { "error": "Backup with id '1337' not found" } + Response 409 (application/json) + Body { "error": "Big storage 'example-bigstorage' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "The Backup '34026' is already locked to another action" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } + Response 409 (application/json) + Body { "error": "Actions on Backup '123' are temporary disabled" } ## Usage [/big-storages/{bigStorageIdentifier}/usage] This is the API endpoint for big storage usage statistics. ### Get big storage usage statistics [GET] Get the usage statistics for a big storage. You can specify a `dateTimeStart` and `dateTimeEnd` parameter in the UNIX timestamp format. When none given, traffic for the past 24 hours are returned. The maximum period is one month. When the big storage is not attached to a vps, there are no usage statistics available. Therefore, the response returned will be a 406 exception. If the big storage is re-attached to another vps then the old statistics are no longer available. ::: warning **Warning**: This method is deprecated. Use the block-storages resource instead. + Parameters + bigStorageIdentifier (string) - The identifier of the big storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + dateTimeStart : 1490023668 (number, optional) - The start date of the usage statistics + dateTimeEnd : 1490064468 (number, optional) - The end date of the usage statistics + Response 200 (application/json) + Attributes + usage (array[VpsUsageDataDisk]) + Response 406 (application/json) + Body { "error": "The parameter 'dateTimeStart' is not a number." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeStart' cannot be negative." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeEnd' cannot be in the future." } + Response 406 (application/json) + Body { "error": "The time period is too large, it should not be bigger than one month." } + Response 406 (application/json) + Body { "error": "The time period is too large, it should not be bigger than one month." } + Response 406 (application/json) + Body { "error": "These are invalid usage types: invalid, type." } + Response 406 (application/json) + Body { "error": "Big storage 'example-bigstorage' is not attached to a VPS" } ## Block Storages [/block-storages] This is the API endpoint for blockstorage services. ### List all block storages [GET] Returns an array of all Block Storages in the given account. After all Block Storages have been returned as an array, you can extract it and use a specific Block Storage for the other API calls documented below. Should you only want to get the block storages attached to a specific VPS, set the `vpsName` parameter and only block storages that are attached to the given vps will be shown like `/v6/block-storages?vpsName=example-vps` ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + blockStorages (array[BlockStorage]) ### Get block storage by identifier [GET /block-storages/{blockStorageIdentifier}] Get information about a specific Block Storage and its current status by identifier (name or uuid). If the Block Storage is attached to a VPS, the output will contain the VPS name it’s attached to. + Parameters + blockStorageIdentifier (string) - The identifier of the block storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + blockStorage (BlockStorage) + Response 404 (application/json) + Body { "error": "Block storage with identifier 'example-faststorage' not found" } ### Order a new block storage [POST] Use this API call to order a new Block Storage. Big storages: The minimum size is 2 TiB and storage can be extended with up to maximum of 40 TiB. Make sure to use a multiple of 2 TiB. Note that 2 TiB equals 2147483648 KiB. Fast storages: The minimum size is 10 GiB and storage can be extended with up to maximum of 10000 GiB. Make sure to use a multiple of 10 GiB. Note that 10 GiB equals 10485760 KiB. Optionally, to create back-ups of your Block Storage, enable off-site back-ups. We highly recommend activating back-ups. When a `vpsName` has been given, the availability zone of this VPS will be used. The Blockstorage and VPS have to be in the same availability zone in order to attach. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + type : `fast-storage` (string) - The type of the block storage. It can be big-storage or fast-storage. + size : 10485760 (number) - The size of the block storage in KB. + offsiteBackups : true (boolean, optional) - Whether to order offsite backups, default is `true`. + availabilityZone : `ams0` (string, optional) - The name of the availabilityZone where the BlockStorage should be created. This parameter can not be used in conjunction with vpsName. If a vpsName is provided as well as an availabilityZone, the zone of the vps is leading. + vpsName : `example-vps` (string, optional) - The name of the VPS to attach the block storage to + description : `backup-blockstorage` (string, optional) - The description of the Blockstorage (maximum length 64) + Response 201 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'wtf0' is not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'ams0' is not available" } + Response 406 (application/json) + Body { "error": "Block storage size '-1' is invalid" } + Response 406 (application/json) + Body { "error": "Block storage size '9765625005' exceeds the maximum amount of 10000 GB" } + Response 406 (application/json) + Body { "error": "Block storage size '9765626' should be a multiple of 10 GB" } + Response 406 (application/json) + Body { "error": "Block storage needs to be in the same availability zone as VPS 'example-vps'" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 64 characters maximum" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } ### Upgrade block storage [POST] With this method you are able to upgrade a blockstorage size or enable backups. Big storages: The minimum size is 2 TiB and storage can be extended with up to maximum of 40 TiB. Make sure to use a multiple of 2 TiB. Note that 2 TiB equals 2147483648 KiB. Fast storages: The minimum size is 10 GiB and storage can be extended with up to maximum of 10000 GiB. Make sure to use a multiple of 10 GiB. Note that 10 GiB equals 10485760 KiB. Optionally, to create back-ups of your Block Storage, enable off-site back-ups. We highly recommend activating back-ups. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + blockStorageName : `example-faststorage` (string, optional) - The name of the blockstorage to upgrade + size : 10485760 (number) - The size of the block storage in KB. + offsiteBackups : true (boolean, optional) - Whether to order offsite backups, omit this to use current value + Response 201 + Response 404 (application/json) + Body { "error": "Block storage with name 'example-faststorage' not found" } + Response 406 (application/json) + Body { "error": "Block storage size '-1' is invalid" } + Response 406 (application/json) + Body { "error": "Block storage size '9765625005' exceeds the maximum amount of 10000 GB" } + Response 406 (application/json) + Body { "error": "Block storage size '9765626' should be a multiple of 10 GB" } + Response 406 (application/json) + Body { "error": "Upgrade size '20' is smaller than current size '40'" } ### Update block storage [PUT /block-storages/{blockStorageIdentifier}] This API calls allows for altering a block storage in several ways outlined below: * Changing the description of a Block Storage (maximum length 64); * One Block Storage can only be attached to one VPS at a time; * One VPS can have a maximum of 10 block storages attached; * Set the `vpsName` property to the VPS name to attach to for attaching Block Storage; * Set the `vpsName` property to null to detach the Block Storage from the currently attached VPS. + Parameters + blockStorageIdentifier (string) - The identifier of the block storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + blockStorage (BlockStorage) + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "Block storage with name 'example-faststorage' not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "Please supply the '`description` or `vpsName`' parameter" } + Response 406 (application/json) + Body { "error": "Block storage needs to be in the same availability zone as VPS 'example-vps'" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 64 characters maximum" } + Response 409 (application/json) + Body { "error": "Block storage 'example-faststorage' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } ### Cancel block storage [DELETE /block-storages/{blockStorageIdentifier}] Cancels a block storage for the specified ‘endTime’. You can set the `endTime` attribute to `end` or `immediately`, this has the following implications: * **end**: The Block Storage will be terminated from the end date of the agreement as can be found in the applicable quote; * **immediately**: The Block Storage will be terminated immediately. Note that canceling a Block Storage will wipe all data stored on it as well as off-site back-ups as well if these are activated. + Parameters + blockStorageIdentifier (string) - The identifier of the block storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + endTime : end (string, optional) - Cancellation time, either 'end' or 'immediately' + Response 204 + Response 404 (application/json) + Body { "error": "Block storage with name 'example-faststorage' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'" } + Response 409 (application/json) + Body { "error": "Product already has cancellation pending" } ## Block Storage Backups [/block-storages/{blockStorageIdentifier}/backups] This is the API endpoint for block storage backup services. ### List backups for a block storage [GET] Using this API call, you are able to list all backups belonging to a specific block storage. + Parameters + blockStorageIdentifier (string) - The identifier of the block storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + backups (array[BlockStorageBackup]) ### Revert a block storage backup [PATCH /block-storages/{blockStorageIdentifier}/backups/{backupId}] To revert a backup from a block storage, retrieve the `backupId` from the [backups](#vps-backups-get-1) resource. Please note this is only possible when any backups are created with the off-site backups feature, otherwise no backups will be made nor listed. + Parameters + blockStorageIdentifier (string) - The identifier of the block storage (name or uuid) + backupId : 625584 (number) - Id of the backup + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : revert (string) + destinationBlockStorageName : `example-faststorage` (string, optional) - When set, revert the backup to this block storage + Response 204 + Response 404 (application/json) + Body { "error": "Block storage with name 'example-faststorage' not found" } + Response 404 (application/json) + Body { "error": "Backup with id '1337' not found" } + Response 409 (application/json) + Body { "error": "Block storage 'example-faststorage' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "The Backup '34026' is already locked to another action" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } + Response 409 (application/json) + Body { "error": "Actions on Backup '123' are temporary disabled" } ## Usage [/block-storages/{blockStorageIdentifier}/usage] This is the API endpoint for block storage usage statistics. ### Get block storage usage statistics [GET] Get the usage statistics for a block storage. You can specify a `dateTimeStart` and `dateTimeEnd` parameter in the UNIX timestamp format. When none given, traffic for the past 24 hours are returned. The maximum period is one month. When the block storage is not attached to a vps, there are no usage statistics available. Therefore, the response returned will be a 406 exception. If the block storage is re-attached to another vps then the old statistics are no longer available. + Parameters + blockStorageIdentifier (string) - The identifier of the block storage (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + dateTimeStart : 1490023668 (number, optional) - The start date of the usage statistics + dateTimeEnd : 1490064468 (number, optional) - The end date of the usage statistics + Response 200 (application/json) + Attributes + usage (array[VpsUsageDataDisk]) + Response 406 (application/json) + Body { "error": "The parameter 'dateTimeStart' is not a number." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeStart' cannot be negative." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeEnd' cannot be in the future." } + Response 406 (application/json) + Body { "error": "The time period is too large, it should not be bigger than one month." } + Response 406 (application/json) + Body { "error": "The time period is too large, it should not be bigger than one month." } + Response 406 (application/json) + Body { "error": "These are invalid usage types: invalid, type." } + Response 406 (application/json) + Body { "error": "Block storage 'example-faststorage' is not attached to a VPS" } ## Installation templates [/installation-templates] This is the API endpoint for VPS installations templates. ### List all installation templates [GET] List all installation templates + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + installationTemplates (array[InstallationTemplate]) ### Get InstallationTemplate by name [GET /installation-templates/{name}] Request information about an existing installation template + Parameters + name (string) - The name of the installation template + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + installationTemplate (InstallationTemplate) + Response 404 (application/json) + Body { "error": "InstallationTemplate with name 'ubuntu' not found" } ### Add a new InstallationTemplate [POST] Add a new InstallationTemplate + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + name: `ubuntu` (string) - Name of the template + template : `I2Nsb3VkLWNvbmZpZwpob3N0bmFtZTogcmVzY3VlCnVzZXJzOgotIG5hbWU6IHJvb3QKICBzdWRvOiBbJ0FMTD0oQUxMKSBOT1BBU1NXRDpBTEwnXQogIHNzaC1hdXRob3JpemVkLWtleXM6CnslIGZvciBrZXkgaW4gc3Noa2V5cyAlfQogIC0ge3sga2V5IH19CnslIGVuZGZvciAlfQ==` (string) - Base64 encoded twig template + Response 201 + Response 403 (application/json) + Body { "error": "The provided InstallationTemplate already exists in your account" } ### Update an InstallationTemplate [PUT /installation-templates/{name}] Update an existing InstallationTemplate + Parameters + name (string) - The name of the installation template + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + installationTemplate (InstallationTemplate) + Response 204 + Response 404 (application/json) + Body { "error": "InstallationTemplate with name 'test' not found" } ### Delete an InstallationTemplate [DELETE /installation-templates/{name}] Delete an existing InstallationTemplate from your account. + Parameters + name (string) - The name of the installation template + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "InstallationTemplate with name 'test' not found" } ## Render installation template [/installation-templates/{name}/render] Render installation templates ### Render an installation template [POST] Renders an installation template using the provided parameters. + Parameters + name (string) - The name of the installation template + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + parameters: `{}` (object, optional) - json object containing twig template variables. + Response 201 + Attributes + renderedInstallationTemplate (string) ## Mail Service [/mail-service] We offer a SMTP relay service, removing the need for email traffic originating from your VPS IP. ### Get mail service information [GET] You’re able to gather detailed information regarding mail service usage and credentials using this API call. Aside from the credentials (username and password) returned objects also include current usage and quota. Usage means the amount of emails sent using the credentials and the quota is the amount of emails allowed to be sent daily. **Usage** will always be lower than **quota**. The quota is determined by the amount of VPSes in your account. Every VPS adds 1000 mails to your daily quota (with a maximum of 10000). E.g.: when you own 5 VPSs, the quota on each VPS is 5000. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + mailServiceInformation (MailServiceInformation) + Response 409 (application/json) + Body { "error": "MailService has not been enabled on this account, enable via the CP" } ### Regenerate mail service password [PATCH] The credentials needed to authorize with our SMTP relay servers consist of a username and password. In case the password can’t be accessed or should be reset, you can use this API call in order to regenerate it. As an account can only have one mail service account, the request does not need to contain a body. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 409 (application/json) + Body { "error": "MailService has not been enabled on this account, enable via the CP" } ### Add mail service DNS entries to domains [POST] In order to reduce spam score, several DNS records should be added. These records have to match the details generated by the mail platform. In case the DNS records don’t match, the relay will not accept mail from your VPS. These new records (outlined below) will not overwrite any DNS records. Record type | Name | TTL | DNS type | Value -----------: | -------------------- | --------- | -------- | ----------------------------------------------------------------- SPF | @ | 5 minutes | TXT | v=spf1 include:_spf.transip.email ~all DKIM | transip-A._domainkey | 5 minutes | CNAME | _dkim-A.transip.email. DKIM | transip-B._domainkey | 5 minutes | CNAME | _dkim-B.transip.email. DKIM | transip-C._domainkey | 5 minutes | CNAME | _dkim-C.transip.email. AUTH | x-transip-mail-auth | 5 minutes | TXT | 30ac13d5d73d181fda11a60f779de4fb1be42908b49fb06e46d53d2d03b5721a + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + domainNames: example.com, another.com (array[string]) - The domain names to which the DNS entries should be added + Response 201 + Response 404 (application/json) + Body { "error": "Domain with id 'another.com' not found" } ## Monitoring Contacts [/monitoring-contacts] This is the API endpoint for monitoring contacts. When a VPS is down a monitoring contact is used to send notifications via SMS or Email. Through the provided contact details, our monitoring service will send you notifications in an unlikely even of a VPS going offline. ### List all contacts [GET] Get a list of all monitoring contacts attached to your account. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + contacts (array[Contact]) ### Create a contact [POST] Create a monitoring contact in your account. You can later use this contact by adding them to your [TCP Monitor](#vps-tcp-monitoring). + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + name : `John Wick` (string) - Name of the contact + telephone : `+31612345678` (string) - Telephone number of the contact + email : `j.wick@example.com` (string) - Email address of the contact + Response 201 + Response 406 (application/json) + Body { "error": "Invalid phone number format, please try formatting it like +31612345678" } + Response 406 (application/json) + Body { "error": "Provided email address is invalid" } ### Update a contact [PUT /monitoring-contacts/{contactId}] Updates a specified contact. This call will override existing fields. + Parameters + contactId : 1 (number) - Id number of the contact + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + contact (Contact) + Response 204 + Response 404 (application/json) + Body { "error": "Contact with id '123' not found" } + Response 406 (application/json) + Body { "error": "Invalid phone number format, please try formatting it like +31612345678" } + Response 406 (application/json) + Body { "error": "Provided email address is invalid" } ### Delete a contact [DELETE /monitoring-contacts/{contactId}] Permanently deletes a monitoring contact from your account. + Parameters + contactId : 1 (number) - Id number of the contact + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "Contact with id '123' not found" } ## TCP Monitors [/vps/{vpsIdentifier}/tcp-monitors] TCP Monitoring is a service that will check and send a notification when a TCP port on you VPS becomes unreachable. ### List all TCP monitors for a VPS [GET] Get an overview of all existing monitors attached to your VPS. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + tcpMonitors (array[TCPMonitor]) + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } ### Create a TCP monitor for a VPS [POST] Create a TCP monitor and specify which ports you would like to monitor. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + tcpMonitor (TCPMonitor) + Response 201 + Response 403 (application/json) + Body { "error": "TCP Monitor already exists" } + Response 403 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } + Response 403 (application/json) + Body { "error": "Please purchase a monitoring addon for `example-vps`" } + Response 403 (application/json) + Body { "error": "The contact with id '1' was not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 404 (application/json) + Body { "error": "IP address '%s' is not found on VPS '%s'" } + Response 406 (application/json) + Body { "error": "Port is `655350` invalid" } + Response 406 (application/json) + Body { "error": "The interval value can only be a number between the value 1 - 6. Value `8` was provided" } + Response 406 (application/json) + Body { "error": "The allowed timeouts value can only be a number between 1 - 5. Value `25` was provided" } ### Update a TCP monitor for a VPS [PUT /vps/{vpsIdentifier}/tcp-monitors/{ipAddress}] + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + ipAddress : 10.3.37.1 (string) - IP Address that is monitored + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + tcpMonitor (TCPMonitor) + Response 204 + Response 404 (application/json) + Body { "error": "TCP Monitor does not exist" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 403 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } + Response 403 (application/json) + Body { "error": "The contact with id '1' was not found" } + Response 406 (application/json) + Body { "error": "Port is `655350` invalid" } + Response 406 (application/json) + Body { "error": "The interval value can only be a number between the value 1 - 6. Value `8` was provided" } + Response 406 (application/json) + Body { "error": "The allowed timeouts value can only be a number between 1 - 5. Value `25` was provided" } ### Delete a TCP monitor for a VPS [DELETE /vps/{vpsIdentifier}/tcp-monitors/{ipAddress}] + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + ipAddress : 10.3.37.1 (string) - IP Address that is monitored + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "Monitor was not found" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 403 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ## Rescue Images [/vps/{vpsIdentifier}/rescue-images] This is the API endpoint for VPS rescue images. Rescue mode also referred as single-user mode, is used to rescue from a system failure. It provides the ability to boot a small Linux environment. It uses a different boot method rather than using the system's hard drive. In the rescue mode, only required services that are necessary for the environment to operate will be started. You also have the ability to mount your local filesystem. This way you are able to rescue the system from failures. ### Get Rescue Images for your VPS [GET] Get the name of available Rescue Images for your VPS. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + rescueImages (array[RescueImage]) + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 409 (application/json) + Body { "error": "VPS console for 'example-vps' is currently unavailable" } ### Boot Rescue Image for a VPS [PATCH] Call this method to boot a specified Rescue image for designated VPS. Some rescue images support ssh keys. When this is the case and ssh keys are provided the vps will be booted with the keys loaded. This can be used to gain root ssh access to the machine without manually adding the keys through the console. + Parameters + vpsIdentifier : `example-vps` (string) - VPS identifier (name or uuid) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + name : rescueImageName (string) + sshKeys : `ssh-rsa AAAAB3NzaC1yc2EAAA...` , `ssh-ed25519 AAAAC3NzaC1l...` (array[string], optional) - array of public ssh key's to use for the rescue image + Response 204 + Response 403 (application/json) + Body { "error": "VPS 'example-vps' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "VPS with name 'example-vps' not found" } + Response 406 (application/json) + Body { "error": "Rescue image name should be one of the following: RescueLinux, RescueBSD" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "VPS 'example-vps' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on VPS 'example-vps' are temporary disabled" } ## OperatingSystems Filter [/operating-systems] This is the API endpoint that allows you to filter Operating Systems without needing a VPS. ### Filter Operating Systems on specifications [GET] We offer a number of operating systems and preinstalled images ready to be installed on any VPS. Using this API call, you can get a list of operating systems and preinstalled images available for a given vps package. Commercial operating systems (such as Windows Server editions) and images shipping a commercial control panel contain the ‘price’ attribute, showing the price per month charged on top of the VPS itself. A list with operating systems can also be found [here](https://www.transip.nl/vps/) An example of all parameters together would be `/v6/operating-systems?productName=vps-performance-c8&addons=vps-addon-1-extra-ip-address,vps-addon-100-gb-extra-harddisk` You can find all product and addon names using our `/v6/products` endpoint + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + productName : `vps-bladevps-x8` (string, required) - Name of the vps product + addons : `vpsAddon-1-extra-cpu-core` (string, optional) - Comma separated list of addons + Response 200 (application/json) + Attributes + operatingSystems (array[OperatingSystem]) # Group HA-IP ## HA-IP [/haips] This is the API endpoint for HA-IP services. HA-IP is a highly available IP that will proxy traffic to a specified IP address or loadbalance traffic on a specific set of IP addresses. HA-IP includes a single `/32` IPv4 and an IPv6 address `/128`. HA-IP supports TCP traffic only. ### List all HA-IPs [GET] Lists all HA-IPs currently registered in your account. By looping through the entire output and splitting the array, you can gather information about a specific HA-IP. However, we do not recommend getting the entire amount of HA-IPs in case you already know the HA-IP name - you can get the same array without the need to loop through all HA-IPs. Use the [ha-ip-get](#ha-ip-ha-ip-get-1) method for this. ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + haips (array[Haip]) ### Get HA-IP info [GET /haips/{haipName}] Get information about a specific HA-IP such as the IP(s) it's currently assigned to and the IPv4 and IPv6 address of the HA-IP. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + haip (Haip) + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } ### Order a new HA-IP [POST] Order a HA-IP. After assigning the HA-IP to an IP (which can be done through the API as well) all incoming TCP traffic will be routed to the specified IP addresses (only VPS IPs are allowed). ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + productName : `haip-pro-contract` (string) - Required HA-IP product name to order + description : `myhaip01` (string, optional) - Optional description for the the HA-IP, this you can use to identify your HA-IP once created + Response 201 + Response 404 (application/json) + Body { "error": "HA-IP product 'haip-extreme-contract' is not found" } ### Update a HA-IP [PUT /haips/{haipName}] This API calls allows for altering a HA-IP in several ways outlined below: * Set the description of a HA-IP; * Set the PTR record; * Set the httpHealthCheckPath, must start with a /; * Set the httpHealthCheckPort, the port must be configured on the HA-IP [PortConfigurations](#ha-ip-ha-ip-port-configurations). Load balancing options (`loadBalancingMode`): * **roundrobin**: forward to next address everytime; * **cookie**: forward to a fixed server, based on the cookie; * **source**: choose a server to forward to based on the source address. Ip setup options (`ipSetup`): * **both**: accept ipv4 and ipv6 and forward them to seperate ipv4 and ipv6 addresses; * **noipv6**: do not accept ipv6 traffic; * **ipv6to4**: forward ipv6 traffic to ipv4. * **ipv4to6**: forward ipv4 traffic to ipv6. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + haip (Haip) + Response 204 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 406 (application/json) + Body { "error": "stickyCookieName must be set when balancingMode is cookie" } + Response 406 (application/json) + Body { "error": "loadBalancingMode is invalid must be one of 'roundrobin', 'cookie', 'source'" } + Response 406 (application/json) + Body { "error": "healthCheckInterval must be larger than 2000" } + Response 406 (application/json) + Body { "error": "httpHealthCheckPath must start with a / (no protocol or hostname in path)" } + Response 406 (application/json) + Body { "error": "httpHealthCheckPort must be set when healthCheckPath is set" } + Response 406 (application/json) + Body { "error": "httpHealthCheckPort '1337' is not one of the configured ports" } + Response 406 (application/json) + Body { "error": "ipSetup 'l33t' is invalid" } + Response 406 (application/json) + Body { "error": "This is not a valid hostname: 'test&@*#'" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ### Cancel a HA-IP [DELETE /haips/{haipName}] With this method you are able to cancel a HA-IP. When specifying 'end' for `endTime`, the HA-IP will be canceled at the end of the contract period. In case you specify 'immediately' the HA-IP will be detached from any IPs it's currently attached to and traffic will no longer be proxied. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + endTime : end (string, optional) - Cancellation time, either 'end' or 'immediately' + Response 204 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 406 (application/json) + Body { "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'" } + Response 409 (application/json) + Body { "error": "Product already has cancellation pending" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ## HA-IP certificates [/haips/{haipName}/certificates] This is the API endpoint for HA-IP certificates services. ### List all HA-IP certificates [GET] List the SSL certificates that are currently used by this HA-IP. Ssl certificate id refers to the ssl certificate found in [domain ssl](#domains-ssl) + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + certificates (array[HaipCertificate]) + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } ### Add existing certificate to HA-IP [POST] Add a DV, OV or EV Certificate to Haip for SSL offloading. Enable HTTPS mode in `portConfiguration` to use these certificates. This will also enable our proxy's to set the X-Forwarded-For header. SSL certificate id refers to the SSL certificate found in [domain ssl](#domains-ssl) + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + sslCertificateId : 5844 (number) - id refers to the SSL certificate found in [domain ssl](#domains-ssl) + Response 201 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 404 (application/json) + Body { "error": "SSL certificate with id '227' not found" } + Response 406 (application/json) + Body { "error": "request is missing 'sslCertificateId' or 'commonName'" } + Response 406 (application/json) + Body { "error": "certificate with sslCertificateId '38012' is already attached to this HA-IP" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ### Add LetsEncrypt certificate to HA-IP [POST] Add a LetsEncrypt certificate to your HA-IP. We will take care of all the validation and renewals. In order to provide free LetsEncrypt certificates for the domains on your HA-IP, some requirements must be met in order to complete the certificate request: - **DNS**: the given CommonName must resolve to the HA-IP IP. IPv6 is not required, but when set, it must resolve to the HA-IP IPv6; - **PortConfiguration**: LetsEncrypt verifies domains with a HTTP call to `/.well-known`. When requesting a LetsEncrypt certificate, our proxies will handle all ACME requests to automatically verify the certificate. To achieve this, the HA-IP must have a HTTP portConfiguration on port 80. When using this, you will also no longer be able to verify your own LetsEncrypt certificates via HA-IP. ::: warning **Warning**: If your HA-IP does not have a HTTP portconfiguration on port 80, we will ensure it will. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + commonName : foobar.example.com (string) - The domain name that the SSL certificate is added to. Start with ‘*.’ when the certificate is a wildcard + Response 201 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 404 (application/json) + Body { "error": "The domain 'foo.bar' could not be found in your account" } + Response 406 (application/json) + Body { "error": "request is missing 'sslCertificateId' or 'commonName'" } + Response 406 (application/json) + Body { "error": "This is not a valid domain name: 'foo..bar'" } + Response 406 (application/json) + Body { "error": "'example.com' does not resolve to HA-IP IpAddress" } + Response 406 (application/json) + Body { "error": "commonName '*.example.com' is invalid as it cannot be managed, the domain should be part of your account" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ### Detach a certificate from this HA-IP [DELETE /haips/{haipName}/certificates/{certificateId}] Detaches a HA-IP certificate by the given `certificateId`, this is the same identifier as seen on [domain ssl](#domains-ssl). + Parameters + haipName : `example-haip` (string) - The HA-IP name + certificateId : `7548` (number) - The certificate Id, this is the same identifier as seen on [domain ssl](#domains-ssl) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ## HA-IP IP Addresses [/haips/{haipName}/ip-addresses] This is the API endpoint for IP Addresses attached to your HA-IP. ### List all IPs attached to a HA-IP [GET] This method will return a list of currently attached IP addresses to your HA-IP. Traffic will be forwarded to the IPs attached to the HA-IP. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + ipAddresses : `149.13.3.7`, `149.31.33.7` (array[string]) - List of IP addresses attached to this HA-IP + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } ### Set HA-IP attached IP addresses [PUT] Replace or attach IPs for HA-IP. Only IPs in your account are allowed. When load balancing is enabled, multiple IPs can be attached to HA-IP. If load balancing is not enabled, the current attached IP (if any) will be replaced with the first provided IP. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + ipAddresses : `149.13.3.7`, `149.31.33.7` (array[string]) - Set of IP addresses to attach, replaces the current set of IP addresses + Response 204 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 403 (application/json) + Body { "error": "HA-IP basic product allows only one attached IP address" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 406 (application/json) + Body { "error": "IP address(es) '127.0.0.1, 127.0.0.2' are not in your account" } + Response 406 (application/json) + Body { "error": "IP address 'test-ip-123' is not a valid IPV4 or IPV6 address" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ### Detach all IPs from HA-IP [DELETE] Detach all IPs from HA-IP. Removing the last IP from HA-IP will also delete all port configurations. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ## HA-IP port configurations [/haips/{haipName}/port-configurations] This is the API endpoint for HA-IP port configurations services. ### List all HA-IP port configurations [GET] This method will return a list of all port configuration on the given HA-IP. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + portConfigurations (array[HaipPortConfiguration]) + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } ### Get info about a specific PortConfiguration [GET /haips/{haipName}/port-configurations/{portConfigurationId}] This method will return information about a specific port configuration. + Parameters + haipName : `example-haip` (string) - The HA-IP name + portConfigurationId : `7548` (number) - The port configuration Id + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + portConfiguration (HaipPortConfiguration) + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 404 (application/json) + Body { "error": "HA-IP PortConfiguration with id '1337' not found" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } ### Create a port configuration [POST] Add ports to HA-IP to route to your attached IP address(es) Mode options: - **http** appends a X-Forwarded-For header to HTTP requests with the original remote IP; - **https** same as HTTP, with SSL Certificate offloading; - **http2_https** same as HTTPS, with http/2 support; - **tcp** plain TCP forward to your attached IP address(es); - **proxy** proxy protocol is also a way to retain the original remote IP, but also works for non HTTP traffic (note: the receiving application has to support this). Endpoint SSL mode options: - **off** no SSL connection is established between our load balancers and your attached IP address(es); - **on** an SSL connection is established between our load balancers your attached IP address(es), but the certificate is not validated; - **strict** an SSL connection is established between our load balancers your attached IP address(es), and the certificate must signed by a trusted Certificate Authority. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + name : `Website Traffic` (string) - Name of the port configuration + sourcePort : 443 (number) - The port at which traffic arrives on your HA-IP + targetPort : 443 (number) - The port at which traffic arrives on your attached IP address(es) + mode : https (string) - The mode determining how traffic is processed and forwarded: ‘tcp’, ‘http’, ‘https’, ‘http2_https’, ‘proxy’ + endpointSslMode : on (string) - The mode determining how traffic between our load balancers and your VPS is protected: ‘off’, ‘on’, ‘strict’ + Response 201 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 406 (application/json) + Body { "error": "name cannot be empty" } + Response 406 (application/json) + Body { "error": "sourcePort 'test123' is an invalid port number must be between 0 and 65535" } + Response 406 (application/json) + Body { "error": "targetPort 'test123' is an invalid port number must be between 0 and 65535" } + Response 406 (application/json) + Body { "error": "mode 'tcptje' is invalid must be one of 'tcp', 'http', 'https', 'http2_https', 'proxy'" } + Response 406 (application/json) + Body { "error": "endpointSslMode 'odd' is invalid must be one of 'on', 'off', 'strict'" } + Response 406 (application/json) + Body { "error": "sourcePort '25' is not unique, there is already a PortConfiguration using this sourcePort port" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ### Update a port configuration [PUT /haips/{haipName}/port-configurations/{portConfigurationId}] Update the `name`, `sourcePort`, `targetPort`, `mode`, or `endpointSslMode` for a specific port configuration. Mode options (`mode`): - **http** appends a X-Forwarded-For header to HTTP requests with the original remote IP; - **https** same as HTTP, with SSL Certificate offloading; - **http2_https** same as HTTPS, with http/2 support; - **tcp** plain TCP forward to your VPS; - **proxy** proxy protocol is also a way to retain the original remote IP, but also works for non HTTP traffic (note: the receiving application has to support this). Endpoint SSL mode options (`endpointSslMode`): - **off** no SSL connection is established between our load balancers and your VPS; - **on** an SSL connection is established between our load balancers your VPS, but the certificate is not validated; - **strict** an SSL connection is established between our load balancers your VPS, and the certificate must signed by a trusted Certificate Authority. + Parameters + haipName : `example-haip` (string) - The HA-IP name + portConfigurationId : `7548` (number) - The port configuration Id + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + portConfiguration (HaipPortConfiguration) + Response 204 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 404 (application/json) + Body { "error": "HA-IP PortConfiguration with id '75' not found" } + Response 406 (application/json) + Body { "error": "name cannot be empty" } + Response 406 (application/json) + Body { "error": "sourcePort 'test123' is an invalid port number must be between 0 and 65535" } + Response 406 (application/json) + Body { "error": "targetPort 'test123' is an invalid port number must be between 0 and 65535" } + Response 406 (application/json) + Body { "error": "mode 'tcptje' is invalid must be one of 'tcp', 'http', 'https', 'http2_https', 'proxy'" } + Response 406 (application/json) + Body { "error": "endpointSslMode 'odd' is invalid must be one of 'on', 'off', 'strict'" } + Response 406 (application/json) + Body { "error": "sourcePort '1337' is not unique, there is already a PortConfiguration using this sourcePort port" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ### Remove port configuration [DELETE /haips/{haipName}/port-configurations/{portConfigurationId}] Remove a port configuration by id. + Parameters + haipName : `example-haip` (string) - The HA-IP name + portConfigurationId : `7548` (number) - The port configuration Id + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 404 (application/json) + Body { "error": "HA-IP PortConfiguration with id '1337' not found" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' is customer locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } + Response 409 (application/json) + Body { "error": "HA-IP 'example-haip' has an action running, no modification is allowed" } ## HA-IP StatusReports [/haips/{haipName}/status-reports] This is the API endpoint for your HA-IP status reports, you can fetch the current statuses per attached bacIP address, IP version, port and load balancer ### Get a full status report for a HA-IP [GET] The result contains a report per attached IP address, IP version, port and load balancer. + Parameters + haipName : `example-haip` (string) - The HA-IP name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + statusReports (array[HaipStatusReport]) + Response 403 (application/json) + Body { "error": "HA-IP 'example-haip' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "HA-IP with name 'example-haip' not found" } + Response 409 (application/json) + Body { "error": "Actions on HA-IP 'example-haip' are temporary disabled" } # Group Kubernetes ## Clusters [/kubernetes/clusters] This is an API endpoint for managing your kubernetes clusters. ### List all clusters [GET] Returns a list of all Kubernetes clusters. ::: warning **Warning**: This method is experimental and could be changed ::: ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + clusters (array[KubernetesCluster]) ### List single cluster [GET /kubernetes/clusters/{clusterName}] Get information on a specific kubernetes cluster by name. ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + cluster (KubernetesCluster) + Response 404 (application/json) + Body { "error": "Cluster with name 'ez4del0l' not found" } ### Create new cluster [POST] With the creation of a new cluster, optionally the first nodePool can be created by providing its specifications using the following fields: `nodeSpec`, `desiredNodeCount` and `availabilityZone`. Note that either all or none of these fields must be provided. ::: warning **Warning**: This method is experimental and could be changed ::: ::: warning **Warning**: Usage statistics of active services in your Kubernetes cluster will reflect in your monthly invoice + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + nodeSpec : `node-k8` (string, optional) - ProductName for the WorkerNodes in the initial NodePool; use the /kubernetes/products resource to determine which to use + desiredNodeCount : 3 (number, optional) - The desired amount of nodes in the initial NodePool + availabilityZone : `ams0` (string, optional) - Availability Zone the WorkerNodes of the initial pool will spawn + description : `cluster-x` (string, optional) - Describes this cluster + kubernetesVersion : `1.24.3` (string, optional) - The specific version the Cluster should run on + Response 201 + Response 403 (application/json) + Body { "error": "No valid payment information found. Please add your payment information through the control panel on the website." } + Response 404 (application/json) + Body { "error": "The availability zone 'wtf0' is not found" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 64 characters maximum" } + Response 406 (application/json) + Body { "error": "The parameters nodeSpec, desiredNodeCount and availabilityZone should either all be supplied or omitted" } + Response 406 (application/json) + Body { "error": "KubernetesVersion 'a.b.c' is not a valid KubernetesVersion" } + Response 404 (application/json) + Body { "error": "Node not found" } + Response 409 (application/json) + Body { "error": "The availability zone 'ams0' is not available" } ### Update cluster [PUT /kubernetes/clusters/{clusterName}] This API calls allows for altering a Kubernetes cluster in several ways outlined below: * Set a new description; ::: warning **Warning**: This method is experimental and could be changed + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + cluster (KubernetesCluster) + Response 204 + Response 404 (application/json) + Body { "error": "Cluster with name 'ez4del0l' not found" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 64 characters maximum" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' is blocked, no modification is allowed" } ### Reset cluster [PATCH /kubernetes/clusters/{clusterName}] This API call allows you to reset the cluster to it's initial state. Pass along the `confirmation` parameter with the name of the cluster as value (for example: PATCH /v6/kubernetes/clusters/k8ser?action=reset&confirmation=k8ser) to verify the reset of the cluster. ::: warning **Warning**: This method is experimental and could be changed. ::: ::: warning **Warning**: This action will remove ALL data from your cluster. This can NOT be recovered. + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : reset (string) + confirmation : k8ser (string) + Response 204 + Response 404 (application/json) + Body { "error": "Cluster with name 'ez4del0l' not found" } + Response 406 (application/json) + Body { "error": "The confirmation for 'clusterName' was done incorrectly" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' is blocked, no modification is allowed" } ### Upgrade cluster [PATCH /kubernetes/clusters/{clusterName}] This API call allows you to upgrade the cluster to a newer Kubernetes release. Pass along the `version` parameter with the version of the release as value (for example: PATCH /v6/kubernetes/clusters/k8ser?action=upgrade&version=1.27.0). Note that it is only possible to upgrade one minor version at a time, as recommended by the Version skew policy (https://kubernetes.io/releases/version-skew-policy/). Compatible releases for the cluster can be listed with the releases subresource (for example: /v6/kubernetes/clusters/k8ser/releases?isCompatibleUpgrade=true). ::: warning **Warning**: This method is experimental and could be changed. + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : upgrade (string) + version : 1.27.0 (string) + Response 204 + Response 404 (application/json) + Body { "error": "Cluster with name 'ez4del0l' not found" } + Response 404 (application/json) + Body { "error": "Specified release was not found" } + Response 406 (application/json) + Body { "error": "Specified release version is invalid" } + Response 406 (application/json) + Body { "error": "Specified release version is incompatible with the specified cluster" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' is blocked, no modification is allowed" } ### Remove cluster [DELETE /kubernetes/clusters/{clusterName}] remove a Kubernetes cluster with this endpoint. ::: warning **Warning**: This method is experimental and could be changed ::: ::: warning **Warning**: all nodes will be wiped from your Kubernetes cluster. + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "Cluster with name 'ez4del0l' not found" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' is blocked, no modification is allowed" } ## KubeConfig [/kubernetes/clusters/{clusterName}/kube-config] Retrieve KubeConfig for Cluster ### Get KubeConfig for Cluster [GET] Returns base64 encoded version of the kubeConfig yaml of the specified cluster ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + kubeConfig (KubeConfig) + Response 404 (application/json) + Body { "error": "Cluster with name 'ez4del0l' not found" } ## Products [/kubernetes/products] You can request all Kubernetes related products here ### List kubernetes products [GET] Returns a list of all Kubernetes products ::: warning **Warning**: This method is experimental and could be changed ::: This endpoint is bound to change. Specs will not be fetched when retrieving this list. You can retrieve specs by sending a `GET` request to `/kubernetes/products/{productName}` + Parameters + tags : `/kubernetes/products?types=workerNode` (string, optional) - types to filter by, seperated by a comma + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + products (array[KubernetesProduct]) ### Get information about a Kubernetes product [GET /kubernetes/products/{product}] Returns information about a specific Kubernetes product ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + product : `node-k8` (string) - Product + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + product (KubernetesProduct) ## NodePools [/kubernetes/clusters/{clusterName}/node-pools] NodePools containing the Kubernetes WorkerNodes ### List all nodepools [GET] Returns a list of all the Node Pools. ::: warning **Warning**: This method is experimental and could be changed ::: ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + nodePools (array[KubernetesNodePool]) ### List single nodepool [GET /kubernetes/clusters/{clusterName}/node-pools/{uuid}] Get information on a specific Node Pool by Uuid ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string) - NodePool Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + nodePool (KubernetesNodePool) + Response 404 (application/json) + Body { "error": "NodePool with uuid '59bfa0da-97be-39a8-3b05-0000534269df' not found" } ### Add nodepool [POST] Add a New NodePool to Cluster ::: warning **Warning**: This method is experimental and could be changed ::: ::: warning **Warning**: Usage of active services in your cluster will reflect in your monthly invoice + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + description : `frontend-pool` (string, optional) - Describes the Node Pool (max 64 chars) + desiredNodeCount : `3` (number) - Amount of WorkerNodes + nodeSpec : `node-k8` (string) - Node type for the WorkerNodes in this pool + availabilityZone : `ams0` (string) - Availability Zone the WorkerNodes of this pool will spawn + Response 201 + Attributes + uuid : `2c51c5df-3470-67a8-c320-00004bdd58e7` (string) + Response 404 (application/json) + Body { "error": "Cluster with name 'ez4del0l' not found" } + Response 404 (application/json) + Body { "error": "The availability zone 'abc0' is not found" } + Response 404 (application/json) + Body { "error": "Node not found" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 64 characters maximum" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' is blocked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "The availability zone 'ams0' is not available" } ### Update nodepool [PUT /kubernetes/clusters/{clusterName}/node-pools/{uuid}] This API calls allows for altering a Kubernetes cluster in several ways outlined below: * Set a new description; * Set a different amount of desired Nodes; ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string) - NodePool Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + nodePool (KubernetesNodePool) + Response 204 + Response 404 (application/json) + Body { "error": "NodePool with uuid '59bfa0da-97be-39a8-3b05-0000534269df' not found" } + Response 406 (application/json) + Body { "error": "Given amount for desiredNodeCount '1337' is limited between 1 and 16" } + Response 406 (application/json) + Body { "error": "The provided parameter 'description' can be 64 characters maximum" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' is blocked, no modification is allowed" } ### Remove nodepool [DELETE /kubernetes/clusters/{clusterName}/node-pools/{uuid}] Delete a NodePool and Nodes from Cluster ::: warning **Warning**: This method is experimental and could be changed ::: ::: warning **Warning**: This will also remove the WorkerNodes + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string) - NodePool Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "NodePool with uuid '59bfa0da-97be-39a8-3b05-0000534269df' not found" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' has an action running, no modification is allowed" } + Response 409 (application/json) + Body { "error": "Cluster 'k888k' is blocked, no modification is allowed" } ## NodePool Labels [/kubernetes/clusters/{clusterName}/node-pools/{uuid}/labels] Labels of a nodePool ### List all labels [GET] Returns a list of all the labels on this nodepool ::: warning **Warning**: This method is experimental and could be changed ::: ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string) - NodePool Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + labels (array[KubernetesNodePoolLabel]) ### Update labels [PUT] Update the labels on a NodePool ::: warning **Warning**: This method is experimental and could be changed ::: * The modifiable field is optional and is not processed for this method + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string) - NodePool Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + labels (array[KubernetesNodePoolLabel]) + Response 204 ## NodePool Taints [/kubernetes/clusters/{clusterName}/node-pools/{uuid}/taints] Taints of a nodePool ### List all taints [GET] Returns a list of all the taints on this nodepool ::: warning **Warning**: This method is experimental and could be changed ::: ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string) - NodePool Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + taints (array[KubernetesNodePoolTaint]) ### Update taints [PUT] Update the taints on a NodePool ::: warning **Warning**: This method is experimental and could be changed ::: * The modifiable field is optional and is not processed for this method + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string) - NodePool Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + taints (array[KubernetesNodePoolTaint]) + Response 204 ## Nodes [/kubernetes/clusters/{clusterName}/nodes] WorkerNodes of the Kubernetes Clusters ### List all nodes [GET] Returns a list of all the Nodes. Filtering can be done on nodePoolUuid in the URL: /v6/kubernetes/clusters/k888s/nodes?nodePoolUuid=76743b28-f779-3e68-6aa1-00007fbb911d ::: warning This method is experimental and could be changed ::: ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + nodePoolUuid : /kubernetes/clusters/k888s/nodes?nodePoolUuid=76743b28-f779-3e68-6aa1-00007fbb911d` (string, optional) - NodePool uuid to filter on + Response 200 (application/json) + Attributes + nodes (array[KubernetesNode]) ### List single node [GET /kubernetes/clusters/{clusterName}/nodes/{uuid}] Get information on a specific Node by Uuid ::: warning This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `158ae73a-d13b-52e8-a244-000006b1a48e` (string) - Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + node (KubernetesNode) + Response 404 (application/json) + Body { "error": "Node with uuid '10ad431f-4b81-0729-6208-0000574cdeae' not found" } ## Block Storages [/kubernetes/clusters/{clusterName}/block-storages] Block storage volumes for use as persistent volumes in k8s ### List all volumes [GET] Returns a list of all the block storage volumes in this account. Filtering can be done on nodeUuid in the URL: /v6/kubernetes/clusters/k888k/block-storages?nodeUuid=76743b28-f779-3e68-6aa1-00007fbb911d ::: warning **Warning**: This method is experimental and could be changed ::: ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Parameters + clusterName : `k888k` (string) - clusterName + nodeUuid : `/kubernetes/clusters/k888k/block-storages?nodeUuid=76743b28-f779-3e68-6aa1-00007fbb911d` (string, optional) - nodeUuid to filter on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + volumes (array[KubernetesBlockStorage]) ### List single volume [GET /kubernetes/clusters/{clusterName}/block-storages/{name}] Get information on a specific volume by user configured name ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + name : `pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - Name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + volume (KubernetesBlockStorage) + Response 404 (application/json) + Body { "error": "BlockStorage with name 'custom-28932cf7-43d3-2029-3261-00007019d5a5' not found" } ### Add volume ::: warning **Warning**: This method is experimental and could be changed ::: [POST] `name` can be set as desired (cannot be changed later on) within the RFC1123 spec: * contain at most 63 characters; * contain only lowercase alphanumeric characters or '-'; * start with an alphanumeric character; * end with an alphanumeric character; `sizeInGib` must be between 1-40960 `type` is currently only 'hdd' `availabilityZone` a name as listed in the /availability-zones API resource ::: warning **Warning**: Usage of active services in your cluster will reflect in your monthly invoice + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + name : `pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string, optional) - user configurable unique identifier for volume (max 64 chars), when none is given, the uuid will be used. (cannot be changed later on) + sizeInGib : `200` (number) - amount of storage in gibibytes + type : `hdd` (string) - type of storage 'hdd' + availabilityZone : `ams0` (string, optional) - location of the volume + Response 201 + Response 404 (application/json) + Body { "error": "The availability zone 'wtf0' is not found" } + Response 406 (application/json) + Body { "error": "Given parameter `sizeInGib` is out of range 1-40960" } + Response 406 (application/json) + Body { "error": "The provided parameter 'type' can only be one of the following value's 'hdd'" } + Response 406 (application/json) + Body { "error": "BlockStorage name 'bobby-dazzler' is already in use" } + Response 409 (application/json) + Body { "error": "The availability zone 'ams0' is not available" } ### Update volume [PUT /kubernetes/clusters/{clusterName}/block-storages/{name}] This API calls allows for altering a volume in several ways outlined below: * `nodeUuid` Set a different nodeUuid or empty to detach; * `sizeInGib` Resize the volume; ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + name : `pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - Name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + volume (KubernetesBlockStorage) + Response 204 + Response 403 (application/json) + Body { "error": "Node '59bfa0da-97be-39a8-3b05-0000534269df' is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "BlockStorage with name 'bobby-dazzler' not found" } + Response 404 (application/json) + Body { "error": "Node with uuid '59bfa0da-97be-39a8-3b05-0000534269df' not found" } + Response 406 (application/json) + Body { "error": "Node '59bfa0da-97be-39a8-3b05-0000534269df' has an action running, no modification is allowed" } + Response 406 (application/json) + Body { "error": "Actions on Node '59bfa0da-97be-39a8-3b05-0000534269df' are temporary disabled" } + Response 406 (application/json) + Body { "error": "BlockStorage 'pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80' has an action running, no modification is allowed" } + Response 406 (application/json) + Body { "error": "BlockStorage 'pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80' is not in the same availabilityZone as Node '59bfa0da-97be-39a8-3b05-0000534269df'" } + Response 406 (application/json) + Body { "error": "Actions on BlockStorage 'pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80' are temporary disabled" } + Response 409 (application/json) + Body { "error": "BlockStorage 'pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80' is already attached to Node 'ef3ff61b-e070-4e6a-9420-3494caa30a15'" } ### Remove volume [DELETE /kubernetes/clusters/{clusterName}/block-storages/{name}] Delete a volume and its data ::: warning **Warning**: This method is experimental and could be changed ::: ::: warning **Warning**: This will delete all data on this block storage device + Parameters + clusterName : `k888k` (string) - clusterName + name : `pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - Name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "BlockStorage with name 'custom-28932cf7-43d3-2029-3261-00007019d5a5' not found" } ## LoadBalancers [/kubernetes/clusters/{clusterName}/load-balancers] LoadBalancers Acting as ingress-points for the kubernetes cluster ### List all LoadBalancers [GET] Lists all LoadBalancers in the cluster. ::: warning **Warning**: This method is experimental and could be changed ::: ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + loadBalancers (array[KubernetesLoadBalancer]) ### Get LoadBalancer info [GET /kubernetes/clusters/{clusterName}/load-balancers/{name}] Get information about a specific LoadBalancer such as the IP(s) it's currently assigned to and the IPv4 and IPv6 address of the LoadBalancer. ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + name : `lb-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - LoadBalancer name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + loadBalancer (KubernetesLoadBalancer) + Response 404 (application/json) + Body { "error": "LoadBalancer with name 'example' not found" } ### Add a LoadBalancer [POST] `name` can be set as desired (cannot be changed later on) within the RFC1123 spec: * contain at most 63 characters; * contain only lowercase alphanumeric characters or '-'; * start with an alphanumeric character; * end with an alphanumeric character; ::: warning **Warning**: This method is experimental and could be changed ::: ::: warning **Warning**: Usage of active services in your cluster will reflect in your monthly invoice + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + name : `lb-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string, optional) - user configurable unique identifier for loadBalancer (max 64 chars), when none is given, the uuid will be used. (cannot be changed later on) + Response 201 ### Update a loadBalancer [PUT /kubernetes/clusters/{clusterName}/load-balancers/{name}] This API calls allows for altering a LoadBalancer in several ways outlined below: ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + name : `lb-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - LoadBalancer name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + loadBalancerConfig (KubernetesLoadBalancerConfig) + Response 204 + Response 404 (application/json) + Body { "error": "LoadBalancer with name 'example' not found" } + Response 406 (application/json) + Body { "error": "stickyCookieName must be set when balancingMode is cookie" } + Response 406 (application/json) + Body { "error": "loadBalancingMode is invalid must be one of 'roundrobin', 'cookie', 'source'" } + Response 406 (application/json) + Body { "error": "healthCheckInterval must be larger than 2000" } + Response 406 (application/json) + Body { "error": "httpHealthCheckPath must start with a / (no protocol or hostname in path)" } + Response 406 (application/json) + Body { "error": "httpHealthCheckPort must be set when healthCheckPath is set" } + Response 406 (application/json) + Body { "error": "httpHealthCheckPort '1337' is not one of the configured ports" } + Response 406 (application/json) + Body { "error": "ipSetup 'l33t' is invalid" } + Response 406 (application/json) + Body { "error": "This is not a valid hostname: 'test&@*#'" } + Response 406 (application/json) + Body { "error": "name cannot be empty" } + Response 406 (application/json) + Body { "error": "sourcePort 'test123' is an invalid port number must be between 0 and 65535" } + Response 406 (application/json) + Body { "error": "targetPort 'test123' is an invalid port number must be between 0 and 65535" } + Response 406 (application/json) + Body { "error": "mode 'tcptje' is invalid must be one of 'tcp', 'http', 'https', 'http2_https', 'proxy'" } + Response 406 (application/json) + Body { "error": "endpointSslMode 'odd' is invalid must be one of 'on', 'off', 'strict'" } + Response 406 (application/json) + Body { "error": "sourcePort '25' is not unique, there is already a PortConfiguration using this sourcePort port" } + Response 409 (application/json) + Body { "error": "LoadBalancer 'example' has an action running, no modification is allowed" } ### Remove a LoadBalancer [DELETE /kubernetes/clusters/{clusterName}/load-balancers/{name}] With this method you are able to Remove a loadBalancer. ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + name : `lb-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - LoadBalancer name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "LoadBalancer with name 'example' not found" } + Response 409 (application/json) + Body { "error": "Product already has cancellation pending" } + Response 409 (application/json) + Body { "error": "LoadBalancer 'example' has an action running, no modification is allowed" } ## Events [/kubernetes/clusters/{clusterName}/events] Events in a cluster ### List all events [GET] Returns a list of all the events in this cluster. The amount of events is limited to 500 items and gets the result from the api-server cache. We advise to use kubectl to properly list/watch events. Filtering can be done on namespace in the URL: /v6/kubernetes/clusters/k888k/events?namespace=kube-system ::: warning **Warning**: This method is experimental and could be changed + Parameters + clusterName : `k888k` (string) - clusterName + namespace : `kube-system` (string, optional) - Filter the events by namespace + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + events (array[KubernetesEvent]) ### List an event [GET /kubernetes/clusters/{clusterName}/events/{name}] Get information on a specific event. We advise to use kubectl to properly list/watch events. ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + name : `055e55bd-9fee-4ba7-a99d-d7f8d700315c.175ba9a3c3d58a98` (string) - Name + namespace : `kube-system` (string) - The namespace of the event + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + event (KubernetesEvent) ## Releases [/kubernetes/releases] This is an API endpoint for the Kubernetes releases on our platform. ### List all available Kubernetes releases [GET] Returns a list of all available Kubernetes releases. ::: warning **Warning**: This method is experimental and could be changed ::: + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + releases (array[KubernetesRelease]) ### List a single Kubernetes release [GET /kubernetes/releases/{version}] Get information about a single Kubernetes release ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + version : `1.23.5` (string) - Version + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + release (KubernetesRelease) + Response 404 (application/json) + Body { "error": "Release with version 1.5.4 not found" } ## Releases per cluster [/kubernetes/clusters/{clusterName}/releases] This is an API endpoint for the Kubernetes releases on our platform. ### List all available Kubernetes releases [GET] Returns a list of all available Kubernetes releases. This subresource of Cluster adds the field `isCompatibleUpgrade` to indicate whether a release can be used as an upgrade target. To only show compatible releases for upgrades, use the filter /v6/kubernetes/clusters/k8ser/releases?isCompatibleUpgrade=true ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + releases (array[KubernetesClusterRelease]) ### List a single Kubernetes release [GET /kubernetes/clusters/{clusterName}/releases/{version}] Get information about a single Kubernetes release ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + version : `1.23.5` (string) - Version + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + release (KubernetesClusterRelease) + Response 404 (application/json) + Body { "error": "Release with version 1.5.4 not found" } ## Stats [/kubernetes/clusters/{clusterName}/nodes/{uuid}/stats] This is the API endpoint for kubernetes node statistics. ### Get node statistics [GET] Use this API call to retrieve usage data for a specific kubernetes node. Make sure to specify the `dateTimeStart` and `dateTimeEnd` parameters in UNIX timestamp format. Please take the following into account: * The `dateTimeStart` and `dateTimeEnd` parameters allow for gathering information about a specific time period, when not specified the output will contain data for the past 24 hours; * The difference between `dateTimeStart` and `dateTimeEnd` parameters may not exceed one month. ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + uuid : `158ae73a-d13b-52e8-a244-000006b1a48e` (string) - Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + types : `cpu,disk,network` (string, optional) - The types of statistics that can be returned, `cpu`, `disk` and `network` can be specified in a comma seperated way. If not specified, all data will be returned. + dateTimeStart : 1500538995 (number, optional) - The start date of the usage statistics + dateTimeEnd : 1500542619 (number, optional) - The end date of the usage statistics + Response 200 (application/json) + Attributes + usage (Usage) + Response 403 (application/json) + Body { "error": "Node is blocked, no modification is allowed" } + Response 404 (application/json) + Body { "error": "Node not found" } + Response 406 (application/json) + Body { "error": "The parameter 'dateTimeStart' is not a number." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeEnd' cannot be negative." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeEnd' cannot be in the future." } + Response 406 (application/json) + Body { "error": "The time period is too large, it should not be bigger than one month." } + Response 406 (application/json) + Body { "error": "These are invalid usage types: invalid, type." } ## Stats [/kubernetes/clusters/{clusterName}/block-storages/{name}/stats] This is the API endpoint for kubernetes block storage statistics. ### Get block storage statistics [GET] Get the usage statistics for a kubernetes block storage. You can specify a `dateTimeStart` and `dateTimeEnd` parameter in the UNIX timestamp format. When none given, traffic for the past 24 hours are returned. The maximum period is one month. When the block storage is not attached to a node, there are no usage statistics available. Therefore, the response returned will be a 406 exception. If the block storage is re-attached to another node then the old statistics are no longer available. ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + name : `pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - Name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + dateTimeStart : 1490023668 (number, optional) - The start date of the usage statistics + dateTimeEnd : 1490064468 (number, optional) - The end date of the usage statistics + Response 200 (application/json) + Attributes + usage (array[VpsUsageDataDisk]) + Response 406 (application/json) + Body { "error": "The parameter 'dateTimeStart' is not a number." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeStart' cannot be negative." } + Response 406 (application/json) + Body { "error": "The timestamp 'dateTimeEnd' cannot be in the future." } + Response 406 (application/json) + Body { "error": "The time period is too large, it should not be bigger than one month." } + Response 406 (application/json) + Body { "error": "The time period is too large, it should not be bigger than one month." } + Response 406 (application/json) + Body { "error": "These are invalid usage types: invalid, type." } + Response 406 (application/json) + Body { "error": "Block storage is not attached to a node" } ## StatusReports [/kubernetes/clusters/{clusterName}/load-balancers/{name}/status-reports] This is the API endpoint for kubernetes load balancer status reports. ### List all LoadBalancer status reports [GET] Lists LoadBalancer status reports for all attached nodes. ::: warning **Warning**: This method is experimental and could be changed + Parameters + clusterName : `k888k` (string) - clusterName + name : `lb-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - LoadBalancer name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + statusReports (array[KubernetesLoadBalancerStatusReport]) ### Get LoadBalancer info [GET /kubernetes/clusters/{clusterName}/load-balancers/{name}/status-reports/{nodeUuid}] Lists LoadBalancer status reports for the specified node ::: warning **Warning**: This method is experimental and could be changed ::: + Parameters + clusterName : `k888k` (string) - clusterName + name : `lb-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string) - LoadBalancer name + nodeUuid : `158ae73a-d13b-52e8-a244-000006b1a48e` (string) - Uuid + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + statusReports (array[KubernetesLoadBalancerStatusReport]) + Response 404 (application/json) + Body { "error": "LoadBalancer with name 'example' not found" } # Group Acronis ## Tenants [/acronis/tenants] ### List all tenants [GET] List all tenants ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + tenants (array[Tenant]) + Response 404 (application/json) + Body { "error": "Acronis not found" } ### Get tenant by uuid [GET /acronis/tenants/{tenantUuid}] Request information about a specific tenant + Parameters + tenantUuid : `419636c9a72c4c588285920f6cc4bb2c` (string) - Acronis tenant identifier + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + tenant (Tenant) + Response 404 (application/json) + Body { "error": "Acronis not found" } + Response 404 (application/json) + Body { "error": "Tenant with uuid '123' not found" } ## Login [/acronis/tenants/{tenantUuid}/login] Fetch a One Time Token Login URL to access the Acronis Dashboard of your product. ### Generate one time token login url [GET] + Parameters + tenantUuid : `419636c9a72c4c588285920f6cc4bb2c` (string) - Acronis tenant identifier + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + loginUrl : `https://eu8-cloud.acronis.com/api/2/idp/external-login#ott=ott&targetURI=https://eu8-cloud.acronis.com/services` + Response 404 (application/json) + Body { "error": "Tenant not found" } + Response 404 (application/json) + Body { "error": "Acronis not found" } ## Usage [/acronis/tenants/{tenantUuid}/usage] Fetch acronis usage of a specific tenant ### Fetch overview of current usage [GET] Overview of current usage of your Acronis Product The usage is expressed in GB + Parameters + tenantUuid : `419636c9a72c4c588285920f6cc4bb2c` (string) - Acronis tenant identifier + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + usage : (TenantUsage) + Response 404 (application/json) + Body { "error": "Tenant not found" } + Response 404 (application/json) + Body { "error": "Acronis not found" } # Group OpenStack ## Projects [/openstack/projects] This is an API endpoint for managing your openstack projects. ### List all projects [GET] Returns a list of all OpenStack projects attached to your TransIP account. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + projects (array[OpenStackProject]) ### List a single project [GET /openstack/projects/{projectId}] Get information on a specific openstack project by id. + Parameters + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - projectId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + project (OpenStackProject) + Response 404 (application/json) + Body { "error": "Project with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } ### Create a new project [POST] Create a new OpenStack project * Letters, numbers, and the dash symbol is only allowed in a project name. Other symbols provided will be removed from the project name * Your TransIP username **must** be prefixed in-front of your project name ::: warning **Warning**: Usage statistics of active services in your OpenStack project will reflect in your monthly invoice + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + name : `example-datacenter` (string, required) - Project name + description : `This is an example project` (string, optional) - Describes this project + type : `objectstore` (string, required) - Type of project, can be either objectstore or openstack. Defaults to openstack when not specified + Response 201 + Response 403 (application/json) + Body { "error": "Ordering an OpenStack project from 'transip.co.uk' is not available" } + Response 406 (application/json) + Body { "error": "Project with name 'example-name' already exists" } + Response 406 (application/json) + Body { "error": "Your TransIP username MUST be provided as a prefix 'example-' in field 'name'" } + Response 406 (application/json) + Body { "error": "The provided parameter 'type' can only be one of the following value's 'objectstore,openstack'" } ### Update a project [PUT /openstack/projects/{projectId}] This API calls allows for altering a OpenStack project in several ways outlined below: * Set a new project name; * Set a new description; + Parameters + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - projectId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + project (OpenStackProject) + Response 204 + Response 404 (application/json) + Body { "error": "Project with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } + Response 406 (application/json) + Body { "error": "Project with name 'example-name' already exists" } + Response 409 (application/json) + Body { "error": "This project is locked, no modification is allowed" } ### Handover a project [PATCH /openstack/projects/{projectId}] This API call allows you to handover a project to another TransIP Account. This call will initiate the handover process. The actual handover will be done when the target customer accepts the handover. + Parameters + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - projectId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : handover (string) + targetCustomerName : example2 (string) + Response 204 + Response 404 (application/json) + Body { "error": "Project with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } + Response 406 (application/json) + Body { "error": "Target customer with name 'example-name' does not exist" } + Response 409 (application/json) + Body { "error": "This project is locked, no modification is allowed" } + Response 409 (application/json) + Body { "error": "This project is blocked, no modification is allowed" } ### Cancel a Project [DELETE /openstack/projects/{projectId}] Cancel an OpenStack project with this endpoint. ::: warning **Warning**: Upon cancellation, all active services will be wiped from your OpenStack project. + Parameters + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - projectId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "Project with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } + Response 409 (application/json) + Body { "error": "This project is locked, no modification is allowed" } ## User assignments [/openstack/projects/{projectId}/users] ### List users in a project [GET] List all users that have access to a project + Parameters + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - projectId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + users (array[OpenStackUser]) ### Add a user to a project [POST] This API call will grant a user access to a project + Parameters + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - projectId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + userId : `c150ab41f0d9443f8874e32e725a4cc8` (string) - Grant access to the user with this identifier + Response 201 + Response 403 (application/json) + Body { "error": "You are not allowed to modify the main user" } + Response 403 (application/json) + Body { "error": "Login access has already been granted for user 'c150ab41" } + Response 404 (application/json) + Body { "error": "User with id 'c150ab41f0d9443f8874e32e725a4cc8' not found" } + Response 406 (application/json) + Body { "error": "Specified project and user are not located on the same platform" } ### Remove a user from project [DELETE /openstack/projects/{projectId}/users/{userId}] This API call will revoke access for a user from a project + Parameters + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - projectId + userId : `c150ab41f0d9443f8874e32e725a4cc8` (string) - userId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "You are not allowed to modify the main user" } + Response 403 (application/json) + Body { "error": "Login access has already been revoked for user 'c150ab41f0d9443f8874e32e725a4cc8' in project '7a7a3bcb46c6450f95c53edb8dcebc7b'" } + Response 404 (application/json) + Body { "error": "User with id 'c150ab41f0d9443f8874e32e725a4cc8' not found" } + Response 406 (application/json) + Body { "error": "Specified project and user are not located on the same platform" } ## AssignableUsers [/openstack/projects/{projectId}/assignable-users] This is the API endpoint to show all assignable users to a specific project ### List users that can be assigned to a project [GET] List all users can be assigned to a project + Parameters + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - projectId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + assignableUsers (array[OpenStackUser]) ## Users [/openstack/users] This is the API endpoint for OpenStack project users. ### List all users [GET] Get information on all your OpenStack users + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + users (array[OpenStackUser]) ### List a user [GET /openstack/users/{userId}] Get information on a specific openstack user by id. + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + user (OpenStackUser) + Response 404 (application/json) + Body { "error": "User with id 'c150ab41f0d9443f8874e32e725a4cc8' not found" } ### Create a new user [POST] This API call creates a new user * Letters, numbers, and the dash symbol is only allowed in a username. Other symbols provided will be removed from the username * Your TransIP username **must** be prefixed in-front of your new sub-username * Your password must be at least 8 characters long with one lower case, uppercase letter, and one digit. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + projectId : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string) - Grant user access to a project + username : `example-support` (string) - Username + password : `********` (string) - Password + description : `Account for supporter` (string, optional) - Description + email : `supporter@example.com` (string) - Email address + Response 201 + Response 404 (application/json) + Body { "error": "Project with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } + Response 406 (application/json) + Body { "error": "User with username 'example-user' already exists" } + Response 406 (application/json) + Body { "error": "Your password must be at least 8 characters long with one lower case, uppercase letter, and one digit." } + Response 406 (application/json) + Body { "error": "'user-example.com' is not a valid email address" } + Response 406 (application/json) + Body { "error": "Your TransIP username MUST be provided as a prefix 'example-' in field 'username'" } ### Update a user [PUT /openstack/users/{userId}] This API calls allows for altering a OpenStack user in several ways outlined below: * Change the user description; * Change the user email address; + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + user (OpenStackUser) + Response 204 + Response 403 (application/json) + Body { "error": "You are not allowed to modify the main user" } + Response 404 (application/json) + Body { "error": "User with id 'c150ab41f0d9443f8874e32e725a4cc8' not found" } ### Change password for a user [PATCH /openstack/users/{userId}] This API call allows you to change the password of a user + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + newPassword : ****** (string) + Response 204 + Response 404 (application/json) + Body { "error": "User with id 'c150ab41f0d9443f8874e32e725a4cc8' not found" } + Response 406 (application/json) + Body { "error": "Your password must be at least 8 characters long with one lower case, uppercase letter, and one digit." } ### Delete a user [DELETE /openstack/users/{userId}] With this method you are able to delete a user. + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "You are not allowed to modify the main user" } + Response 404 (application/json) + Body { "error": "User with id 'c150ab41f0d9443f8874e32e725a4cc8' not found" } ## Tokens [/openstack/users/{userId}/tokens] This is an API endpoint for managing your Object Store S3 Tokens ### List all S3 tokens for a user [GET] Returns a list of all tokens for a user. You are able to filter on a specific project by setting the 'projectId' query parameter An example is presented in the URI Parameters section of this call + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + projectId: `/openstack/users/{userId}/tokens?projectId=139636c9a78c4c588285920f6cc4bb5a` (string, optional) + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + tokens (array[ObjectStoreToken]) + Response 404 (application/json) + Body { "error": "project with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } + Response 404 (application/json) + Body { "error": "user with id '069b062afd334b80aabc027130cc40cb' not found" } ### List a S3 token [GET /openstack/users/{userId}/tokens/{tokenId}] Returns a token + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + tokenId : `0ca19e3q55b22f2b8a9b99f1b093879162a4c50435f4d83be88d081dfc633bbd` (string) - tokenId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + token (ObjectStoreToken) + Response 404 (application/json) + Body { "error": "token with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } + Response 404 (application/json) + Body { "error": "user with id '069b062afd334b80aabc027130cc40cb' not found" } ### Create a new S3 token [POST] This API call creates a new S3 token + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + projectId: 139636c9a78c4c588285920f6cc4bb5a (string) - specify which projectId this token will be made for + Response 201 + Attributes + token (ObjectStoreToken) + Response 404 (application/json) + Body { "error": "project with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } + Response 404 (application/json) + Body { "error": "user with id '069b062afd334b80aabc027130cc40cb' not found" } ### Delete a S3 token [DELETE /openstack/users/{userId}/tokens/{tokenId}] With this method you are able to delete a S3 token + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + tokenId : `0ca19e3q55b22f2b8a9b99f1b093879162a4c50435f4d83be88d081dfc633bbd` (string) - tokenId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + tokenId : 0ca19e3q55b22f2b8a9b99f1b093879162a4c50435f4d83be88d081dfc633bbd (string) - specify the tokenId for the token that should get deleted + Response 204 + Response 404 (application/json) + Body { "error": "token with id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } + Response 404 (application/json) + Body { "error": "user with id '069b062afd334b80aabc027130cc40cb' not found" } ## Totp [/openstack/users/{userId}/totp] This API endpoint allows management of totp (time-based one-time password) for Openstack users ### Enable totp for a user [POST] This API call enables totp. + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + userId : 0c150ab41f0d9443f8874e32e725a4cc8 (string) - Specify the userId for which to enable totp + Response 201 + Attributes + totp (Totp) + Response 404 (application/json) + Body { "error": "user id '7a7a3bcb46c6450f95c53edb8dcebc7b' not found" } ### Disable totp for a user [DELETE] This API call disables, an existing, totp. + Parameters + userId : `6322872d9c7e445dbbb49c1f9ca28adc` (string) - userId + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + userId : 0c150ab41f0d9443f8874e32e725a4cc8 (string) - Specify the userId for which to disable totp + Response 204 + Response 404 (application/json) + Body { "error": "user with id '069b062afd334b80aabc027130cc40cb' not found" } # Group SSL Certificates ## SSL Certificates [/ssl-certificates] This is the API endpoint for SSL certificates. ### List all SSL certificates [GET] Retrieves a list of all SSL certificates in the customer account. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + certificates (array[SslCertificate]) ### Get SSL certificate by id [GET /ssl-certificates/{certificateId}] Retrieves a single SSL certificate by id. + Parameters + certificateId : 12358 (number) - The id of the SSL certificate + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + certificate (SslCertificate) + Response 404 (application/json) + Body { "error": "Certificate with id '1337' not found" } ### Order a SSL certificate [POST] Order a new SSL certificate for a domain When ordering a EV certificate make sure to provide the same information as registered with the KVK. ::: warning **Warning**: This API call will create an invoice! + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + productName : `ssl-certificate-comodo-ev` (string) - Name of the product + commonName : `*.example.com` (string) - The common name for which to order a certificate + approverFirstName : `John` (string, optional) - The first name of the approver + approverLastName : `Doe` (string, optional) - The last name of the approver + approverEmail : `example@example.com` (string) - The email address of the approver + approverPhone : `+31 715241919` (string, optional) - The phone number of the approver + company : `Example B.V.` (string, optional) - The company name + department : `Example` (string, optional) - The department name + kvk : `83057825` (string, optional) - The KVK number of the company + address : `Easy street 12` (string, optional) - The address + city : `Leiden` (string, optional) - The city + zipCode : `1337 XD` (string, optional) - The zip code + countryCode : `nl` (string, optional) - The ISO 3166-1 country code + Response 201 + Response 403 (application/json) + Body { "error": "No valid payment information found. Please add your payment information through the Controlpanel on the website." } + Response 404 (application/json) + Body { "error": "SSL Certificate product 'ssl-certificate-comodo-unknown' is not found" } + Response 406 (application/json) + Body { "error": "Invalid common name: 'ex@mple.example.com'" } + Response 406 (application/json) + Body { "error": "Provided email address is invalid" } ### Reissue a certificate [PATCH /ssl-certificates/{certificateId}] This API call allows you to reissue a SslCertificate, given that it’s currently reissue-able. To reissue a Certificate, send a PATCH request with the `action` attribute set to `reissue`. Optionally extra certificate data can be provided to overwrite the existing information. The `approverPhone`, `address`, `zipCode` and `countryCode` are only used for EV certificates. Note: Let's Encrypt certificates cannot be reissued + Parameters + certificateId : 12358 (number) - The id of the SSL certificate + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + action : reissue (string) + approverFirstName : `John` (string, optional) - The first name of the approver + approverLastName : `Doe` (string, optional) - The last name of the approver + approverEmail : `example@example.com` (string) - The email address of the approver + approverPhone : `+31 715241919` (string, optional) - The phone number of the approver + address : `Easy street 12` (string, optional) - The address + zipCode : `1337 XD` (string, optional) - The zip code + countryCode : `nl` (string, optional) - The ISO 3166-1 country code + Response 204 + Response 404 (application/json) + Body { "error": "Certificate with id '1337' not found" } ## Details [/ssl-certificates/{certificateId}/details] Details for Certificate ### Details for SSL certificate by id [GET] Get all details for SSL certificate + Parameters + certificateId : 12358 (number) - The id of the SSL certificate + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + certificateDetails (array[SslCertificateDetails]) + Response 200 (application/json) + Body { "error": "Ok" } ## Download [/ssl-certificates/{certificateId}/download] Download certificate ### Download a SSL certificate by id [POST] Provides the SSL certificate to install on a server When a certificate was configured using a custom passphrase you can optionally provide it to receive a decrypted certificate in return. If no passphrase is provided the encrypted certificate key will be returned TransIP managed certificates will always be returned decrypted. + Parameters + certificateId : 12358 (number) - The id of the SSL certificate + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + passphrase : secretpassphrase (string, optional) - Provide a passphrase to receive a decrypted certificate key + Response 201 + Attributes + certificateData (SslCertificateData) + Response 404 (application/json) + Body { "error": "Certificate with id '1337' not found" } ## Install [/ssl-certificates/{certificateId}/install] Install certificate ### Install an ssl certificate [PATCH] Install the selected ssl certificate on the selected web hosting account. If a certificate was configured using a custom passphrase, you must provide it in order to install the certificate. (This is not for LetsEncrypt Certificates!) + Parameters + certificateId : 12358 (number) - The id of the SSL certificate + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + domainName : domainName (string, required) - Provide a domain name to install the certificate on + passphrase : secretpassphrase (string, optional) - Provide a passphrase to receive a decrypted certificate key + Response 204 + Response 404 (application/json) + Body { "error": "Certificate with id '1337' not found" } ## Uninstall [/ssl-certificates/{certificateId}/uninstall] Uninstall certificate ### Uninstall an ssl certificate [DELETE] Uninstall the selected ssl certificate from the selected web hosting account. + Parameters + certificateId : 12358 (number) - The id of the SSL certificate + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + domainName : domainName (string, required) - Provide a domain name to install the certificate on + Response 204 + Response 404 (application/json) + Body { "error": "Certificate with id '1337' not found" } # Group Colocations ## Colocations [/colocations] This is the API endpoint for colocation. ### List all colocations [GET] Gets a list of colocations currently registered in your account. For every colocation service in your account, the corresponding name and IP range(s) are returned. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + colocations (array[Colocation]) ### Get colocation [GET /colocations/{colocationName}] Get a information about a specific colocation. + Parameters + colocationName : `example2` (string) - Colocation name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + colocation (Colocation) + Response 404 (application/json) + Body { "error": "Colocation with name 'lala' not found" } ## IP addresses [/colocations/{colocationName}/ip-addresses] This is the API endpoint for colocation IP address services. ### List IP addresses for a colocation [GET] List IP addresses based on the colocation they’re assigned to. The address itself, its subnet mask, gateway and DNS resolvers in that range. + Parameters + colocationName : `example2` (string) - Colocation name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + ipAddresses (array[IpAddress]) + Response 404 (application/json) + Body { "error": "Colocation with name 'lala' not found" } ### Get IP addresses for a colocation [GET /colocations/{colocationName}/ip-addresses/{ipAddress}] Get IP addresses information for a specific colocation and IP address. The address itself, its subnet mask, gateway and DNS resolvers in that range. + Parameters + colocationName : `example2` (string) - Colocation name + ipAddress : 149.210.215.249 (string) - Colocation IP address + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + ipAddress (IpAddress) + Response 404 (application/json) + Body { "error": "IP address '8.8.8.8' not found" } ### Create a new IP address for a colocation [POST] Create an IP address for a colocation by specifying the colocation name the IP address should be assigned to. Note the IP address should be in a range you own. Currently, new IP addresses have to be requested manually through the support system. Optionally, you can also set the reverse DNS by specifying the `reverseDns` attribute. + Parameters + colocationName : `example2` (string) - Colocation name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + ipAddress : `2a01:7c8:3:1337::6` (string) - The IP address to register to the colocation + reverseDns : `example.com` (string, optional) - Reverse DNS, also known as the PTR record + Response 201 + Response 403 (application/json) + Body { "error": "IP address '149.210.215.249' does not belong to a range this user can modify" } + Response 406 (application/json) + Body { "error": "IP address '149.210.215.249' already exists" } ### Set reverse DNS for an IP address [PUT /colocations/{colocationName}/ip-addresses/{ipAddress}] Sets a reverse DNS name for an IP address. Upon adding a new IP address for a colocation, you’re able to set the reverse DNS instantly along with the API call. + Parameters + colocationName : `example2` (string) - Colocation name + ipAddress : 149.210.215.249 (string) - Colocation IP address + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + ipAddress (IpAddress) + Response 204 + Response 403 (application/json) + Body { "error": "IP address '149.210.215.249' does not belong to a range this user can modify" } + Response 404 (application/json) + Body { "error": "IP address '8.8.8.8' not found" } ### Delete an IP address [DELETE /colocations/{colocationName}/ip-addresses/{ipAddress}] Delete an IP addresses for a colocation. The IP address will be removed. + Parameters + colocationName : `example2` (string) - Colocation name + ipAddress : 149.210.215.249 (string) - Colocation IP address + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 403 (application/json) + Body { "error": "IP address '149.210.215.249' does not belong to a range this user can modify" } + Response 404 (application/json) + Body { "error": "IP address '8.8.8.8' not found" } ## RemoteHands [/colocations/{colocationName}/remote-hands] This is the API endpoint to create remote hands requests. ### Create a Remotehands request [POST] Send a request to the datacenter engineer to perform simple task on your server, e.g. a powercycle. + Parameters + colocationName : `example2` (string) - Colocation name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + remoteHands (RemoteHands) + Response 201 + Response 404 (application/json) + Body { "error": "Colocation with name 'lala' not found" } ## AccessRequest [/colocations/{colocationName}/access-request] This is the API endpoint to create datacenter access requests. ### Create an access request [POST] Send a request for some visitors to access the datacenter at some date and time for some specific duration. + Parameters + colocationName : `example2` (string) - Colocation name + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + accessRequest (ColocationAccessRequest) + Response 201 + Attributes + dataCenterVisitors (array[DataCenterVisitor]) + Response 403 (application/json) + Body { "error": "Permission denied" } + Response 404 (application/json) + Body { "error": "No customer found for identifier [1122334455]" } + Response 404 (application/json) + Body { "error": "Colocation with name 'colocation-name-example' not found" } + Response 404 (application/json) + Body { "error": "The colocation has no rackspace assigned" } + Response 406 (application/json) + Body { "error": "This is not a valid date: '2022-XX-04 10:XX:10', please try formatting like YYYY-MM-DD hh:mm:ss" } + Response 406 (application/json) + Body { "error": "Duration must be a positive integer" } + Response 406 (application/json) + Body { "error": "There must be at least one visitor per request" } + Response 406 (application/json) + Body { "error": "There is a maximum of 20 visitors per request" } + Response 406 (application/json) + Body { "error": "Invalid phone number format, please try formatting it like +31612345678" } # Group Email ## Mail Forwards [/email/{domain}/mail-forwards] This is the API endpoint for Mail Forwards. ### List all mail forwards [GET] List all mail forwards for an account + Parameters + domain : `example.com` (string) - domainName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + forwards (array[MailForward]) + Response 404 (application/json) + Body { "error": "Mail forwards not found" } + Response 200 (application/json) + Body { "error": "Ok" } ### Create mail forward [POST] Schedule creation of a mail forward Creation of a mail forward will be linked to the provided account based on the domain. Forwards are always linked to the domain + Parameters + domain : `example.com` (string) - domainName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + localPart : localPart (string, required) - the label for the email address (will be the part before left of AT). If an empty string is provided, the forward will catch all mail for the domain. + forwardTo : forwardTo (string, required) - The target email to forward to + Response 201 + Response 404 (application/json) + Body { "error": "Account not found" } + Response 406 (application/json) + Body { "error": "Mail forward already exists" } + Response 409 (application/json) + Body { "error": "Mail forward limit reached, not permitted" } + Response 201 (application/json) + Body { "error": "Created" } ### Delete mail forward [DELETE /email/{domain}/mail-forwards/{forwardId}] Schedule deletion of a mail forward Deletion of a mail forward will be scheduled Forwards that are being modified cannot be deleted. + Parameters + domain : `example.com` (string) - domainName + forwardId : 7 - the ID of the forward being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "Mail forward not found" } + Response 409 (application/json) + Body { "error": "Mail forward locked, modification not allowed" } ### Get mail forward [GET /email/{domain}/mail-forwards/{forwardId}] Read a mail forward's details Reading of a forward + Parameters + domain : `example.com` (string) - domainName + forwardId : 7 - the ID of the forward being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + forward (MailForward) + Response 404 (application/json) + Body { "error": "Mail forward not found" } ### Update mail forward [PUT /email/{domain}/mail-forwards/{forwardId}] Update a mail forward's details Update of a mail forward will be scheduled. You may update only localPart, or forwardTo. Forwards that are being modified cannot be updated. + Parameters + domain : `example.com` (string) - domainName + forwardId : 7 - the ID of the forward being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + localPart : localPart (string, required) - the label for the localPart (will be the part before left of AT). If an empty string is provided, the forward will catch all mail for the domain. + forwardTo : forwardTo (string, required) - The target email to forward to + Response 204 + Response 404 (application/json) + Body { "error": "Mail forward not found" } + Response 409 (application/json) + Body { "error": "Mail forward locked, modification not allowed" } ### Update mail forward field [PATCH /email/{domain}/mail-forwards/{forwardId}] Update 1 (or more) of a mail forward's Details Update of a mail forward will be scheduled. You may update only localPart, or forwardTo. Forwards that are being modified cannot be updated. + Parameters + domain : `example.com` (string) - domainName + forwardId : 7 - the ID of the forward being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + localPart : localPart (string, optional) - the label for the localPart (will be the part before left of AT) + forwardTo : forwardTo (string, optional) - The target email to forward to + Response 204 + Response 404 (application/json) + Body { "error": "Mail forward not found" } + Response 409 (application/json) + Body { "error": "Mail forward Locked, modification not allowed" } ## MailLists [/email/{domain}/mail-lists] This is the API endpoint for mail lists. ### List all Mail lists [GET] List all mail lists for an account + Parameters + domain : `example.com` (string) - domainName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + mailLists (array[MailList]) + Response 404 (application/json) + Body { "error": "Mail lists not found" } ### Create Mail list [POST] Schedule Creation of a Mail list Creation of a mail list will be linked to the provided account based on the domainName. Lists are always linked to the domainName + Parameters + domain : `example.com` (string) - domainName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + name : name (string, required) - the name of the list being created + emailAddress : emailAddress (string, required) - The email address of the list itself + entries : entries (array, required) - The email addresses in the mail list + Response 201 + Response 404 (application/json) + Body { "error": "Account not found" } + Response 406 (application/json) + Body { "error": "Mail list already exists." } ### Delete Mail List [DELETE /email/{domain}/mail-lists/{listId}] Schedule Deletion of a mail list Deletion of a mail list will be scheduled Lists that are being modified cannot be deleted. + Parameters + domain : `example.com` (string) - domainName + listId : 7 - the ID of the list being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "Mail list not found" } + Response 409 (application/json) + Body { "error": "Mail list Locked, modification not allowed" } ### Get Mail list [GET /email/{domain}/mail-lists/{listId}] Read a Mail list's Details Reading of a list + Parameters + domain : `example.com` (string) - domainName + listId : 7 - the ID of the list being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + mailList (MailList) + Response 404 (application/json) + Body { "error": "Mail list not found" } ### Update Mail list [PUT /email/{domain}/mail-lists/{listId}] Update a mail list Update of a mail list will be scheduled. Only changes to the name and entry will be processed. Lists that are being modified cannot be updated. + Parameters + domain : `example.com` (string) - domainName + listId : 7 - the ID of the list being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + mailList : (MailList) + Response 204 + Response 404 (application/json) + Body { "error": "Mail list not found" } + Response 409 (application/json) + Body { "error": "Mail list Locked, modification not allowed" } ## Mailboxes [/email/{domain}/mailboxes] This is the API endpoint for Mailboxes. ### List all Mailboxes [GET] List all mailboxes for an account + Parameters + domain : `example.com` (string) - domainName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + Mailboxes (array[Mailbox]) + Response 404 (application/json) + Body { "error": "Mailboxes not found" } + Response 200 (application/json) + Body { "error": "Ok" } ### Get Mailbox [GET /email/{domain}/mailboxes/{identifier}] Read a Mailbox's Details Reading of a mailbox + Parameters + domain : `example.com` (string) - domainName + identifier : test@example.com - the email address of the mailbox being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + Mailbox (Mailbox) + Response 404 (application/json) + Body { "error": "Mailbox not found" } + Response 201 (application/json) + Body { "error": "Created" } ### Update Mailbox [PUT /email/{domain}/mailboxes/{identifier}] Update a Mailbox's Details Update of a Mailbox will be scheduled. You may update only maxDiskUsage, password, or forwardTo. Mailboxes that are being modified cannot be updated. + Parameters + domain : `example.com` (string) - domainName + identifier : test@example.com - the email address of the mailbox being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + maxDiskUsage : maxDiskUsage (number, required) - Size of the mailbox in MB + password : password (string, required) - The password for the mailbox + forwardTo : forwardTo (string, optional) - The target email to forward to + Response 204 + Response 404 (application/json) + Body { "error": "Mailbox not found" } + Response 409 (application/json) + Body { "error": "Mailbox Locked, Modification not allowed" } + Response 201 (application/json) + Body { "error": "Created" } ### Create Mailbox [POST] Schedule Creation of a Mailbox Creation of a Mailbox will be linked to the provided account based on the domain. Mailboxes are always linked to the domain + Parameters + domain : `example.com` (string) - domainName + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + localPart : localPart (string, required) - the label for the local part (will be the part before left of AT) + password : password (string, required) - The password for the new mailbox + maxDiskUsage : maxDiskUsage (number, required) - Size of the mailbox in MB + forwardTo : forwardTo (string, optional) - The target email to forward to + Response 201 + Response 404 (application/json) + Body { "error": "Account not found" } + Response 201 (application/json) + Body { "error": "Created" } ### Update Mailbox field [PATCH /email/{domain}/mailboxes/{identifier}] Update 1 (or more) of a Mailbox's Details Update of a Mailbox will be scheduled. You may update only maxDiskUsage, password, or forwardTo. Mailboxes that are being modified cannot be updated. + Parameters + domain : `example.com` (string) - domainName + identifier : test@example.com - the email address of the mailbox being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Attributes + maxDiskUsage : maxDiskUsage (number, optional) - Size of the mailbox in MB + password : password (string, optional) - The password for the mailbox + forwardTo : forwardTo (string, optional) - The target email to forward to + Response 204 + Response 404 (application/json) + Body { "error": "Mailbox not found" } + Response 409 (application/json) + Body { "error": "Mailbox Locked, Modification not allowed" } + Response 201 (application/json) + Body { "error": "Created" } ### Delete Mailbox [DELETE /email/{domain}/mailboxes/{identifier}] Schedule Deletion of a mailbox Deletion of a Mailbox will be scheduled Mailboxes that are being modified cannot be deleted. + Parameters + domain : `example.com` (string) - domainName + identifier : test@example.com - the email address of the mailbox being worked on + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 204 + Response 404 (application/json) + Body { "error": "Mailbox not found" } + Response 409 (application/json) + Body { "error": "Mailbox Locked, Modification not allowed" } + Response 201 (application/json) + Body { "error": "Created" } ## Email [/email] Api endpoint for Email # Group Actions ## Actions [/actions] This resource is meant for fetching information about actions. The purpose of this endpoint is to record the actions that have occurred on the resources in your account. ### Content Location Header When making a request to an API endpoint with implemented Actions, it will return a Content Location header. This header contains an endpoint url as value. Example: `Content-Location: /v6/actions/419636c9a72c4c588285920f6cc4bb2c` You can utilize this endpoint url to retrieve data about the ongoing action by appending the value to the base URL. ### Metadata The metadata of the action stores information specific to the kind of action that is being performed. To give visual examples on how the metadata could look like, please look at the following code blocks `"metadata": {"progress": 13.37}` This indicates that the backup restore is currently at 13.37% and this will update over time. The second example is a vps order action, the productName is returned `"metadata": {"productName": "example-vps"}` You are now able to poll the action until its finished and use the productName for the next API calls that may be related to that new product. Below you can find an overview of the `metadata` return types that we currently support. **progress:** Used for actions that can return a progress indication, e.g. snapshot revert **productName:** Returns the product name when the action is related to ordering our products, e.g. action order VPS returns name of the new VPS ### List all actions [GET] List all actions that are currently in running status ::: note This method supports pagination, which allows you to limit the amount of returned objects per call, thus improving the response time. See the [documentation on pages](#header-pages) for more information on how to use this functionality. + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + actions (array[Action]) ### Get action by uuid [GET /actions/{uuid}] Request information about a specific action + Parameters + uuid : `419636c9a72c4c588285920f6cc4bb2c` (string) - Action uuid identifier + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + action (Action) + Response 404 (application/json) + Body { "error": "Event with uuid '123' not found" } ## Child Actions [/actions/{uuid}/children] This is the API endpoint for fetching the child actions of a parent action. Most typically used for scenarios where multiple actions will be started, such as a ordering multiple vpses. ### List all child actions for a parent action [GET] Using this API call, you are able to list all child actions for a parent action + Parameters + uuid : `419636c9a72c4c588285920f6cc4bb2c` (string) - Action uuid identifier + Request (application/json) + Headers Authorization: Bearer [your JSON web token] + Response 200 (application/json) + Attributes + actions (array[Action]) ## Data Structures ### Action + uuid : `bfa08ad9-6c12-4e03-95dd-a888b97ffe49` (string, optional) - uuid for this action + name : Vps.restoreBackup (string, optional) - name of the action + actionStartTime : `2022-08-31 07:58` (string, optional) - datetime for this action + status : running (string, optional) - status of this action + metadata : blob (string, optional) - metadata of this action + parentActionUuid : `afa08ad9-6c12-4e03-95dd-a888b97ffe22` (string, optional) - holds uuid of parent when action is a child action. ### Addons + active (array[Product], optional) - A list of all active addons + cancellable (array[Product], optional) - A list of addons that you can cancel + available (array[Product], optional) - A list of available addons that you can order ### AvailabilityZone + name : `ams0` (string, optional) - Name of AvailabilityZone + country : `nl` (string, optional) - The 2 letter code for the country the AvailabilityZone is in + isDefault : true (boolean, optional) - If true this is the default zone new VPSes and clones are created in ### BigStorage + name : `example-bigstorage` (string, optional) - Name of the big storage + description : `Big storage description` (string, required) - Name that can be set by customer + diskSize : `2147483648` (number, optional) - Disk size of the big storage in kB + offsiteBackups : true (boolean, optional) - Whether a bigstorage has backups + vpsName : `example-vps` (string, required) - The VPS that the big storage is attached to + status : `active` (string, optional) - Status of the big storage can be 'active', 'attaching' or 'detaching' + isLocked : false (boolean, optional) - Lock status of the big storage, when it is locked, it cannot be attached or detached. + availabilityZone : ams0 (string, optional) - The availability zone the bigstorage is located in + serial : `a4d857d3fe5e814f34bb` (string, optional) - The serial of the big storage. This is a unique identifier that is visible by the vps it has been attached to. On linux servers it is visible using `udevadm info /dev/vdb` where it will be the value of ID_SERIAL. A symlink will also be created in `/dev/disk-by-id/` containing the serial. This is useful if you want to map a disk inside a VPS to a big storage. ### BigStorageBackup + id : `1583` (number, optional) - Id of the big storage + status : `active` (string, optional) - Status of the big storage backup ('active', 'creating', 'reverting', 'deleting', 'pendingDeletion', 'syncing', 'moving') + diskSize : 4294967296 (number, required) - The backup disk size in kB + dateTimeCreate : `2019-12-31 09:13:55` (string, optional) - Date of the big storage backup + availabilityZone : `ams0` (string, optional) - The name of the availability zone the backup is in ### BlockStorage + name : `example-faststorage` (string, optional) - Name of the block storage + description : `Block storage description` (string, required) - Name that can be set by customer + productType : `fast-storage` (string, required) - Block storage type + size : `2147483648` (number, optional) - Size of the block storage in kB + offsiteBackups : true (boolean, optional) - Whether a block storage has backups + vpsName : `example-vps` (string, required) - The VPS that the block storage is attached to + status : `active` (string, optional) - Status of the block storage can be 'active', 'attaching' or 'detaching' + isLocked : false (boolean, optional) - Lock status of the block storage, when it is locked, it cannot be attached or detached. + availabilityZone : ams0 (string, optional) - The availability zone the block storage is located in + serial : `a4d857d3fe5e814f34bb` (string, optional) - The serial of the block storage. This is a unique identifier that is visible by the vps it has been attached to. On linux servers it is visible using `udevadm info /dev/vdb` where it will be the value of ID_SERIAL. A symlink will also be created in `/dev/disk-by-id/` containing the serial. This is useful if you want to map a disk inside a VPS to a block storage. ### BlockStorageBackup + id : `1583` (number, optional) - Id of the block storage + status : `active` (string, optional) - Status of the block storage backup ('active', 'creating', 'reverting', 'deleting', 'pendingDeletion', 'syncing', 'moving') + size : 4294967296 (number, required) - The backup size in kB + dateTimeCreate : `2019-12-31 09:13:55` (string, optional) - Date of the block storage backup + availabilityZone : `ams0` (string, optional) - The name of the availability zone the backup is in ### Colocation + name : `example2` (string, required) - Colocation name + ipRanges : `2a01:7c8:c038:6::/64` (array[string], required) - List of IP ranges ### ColocationAccessRequest + dateTime : `2022-04-10 08:30:00` (string, required) - The datetime of the wanted datacenter access, in YYYY-MM-DD hh:mm:ss format + duration : `30` (number, required) - The expected duration of the visit, in minutes + visitorNames : Charly, John (array[string], required) - list of visitor names for this datacenter visit, must be at least 1 and at most 20 + phoneNumber : `+31612345678` (string, optional) - If an SMS with access codes needs to be sent, set the phone number of the receiving phone here ### Contact + id : 1 (number, required) - Id number of the contact + name : John Wick (string, required) - Name of the contact + telephone : +31612345678 (string, required) - Telephone number of the contact + email : j.wick@example.com (string, required) - Email address of the contact ### DataCenterVisitor + name : Charly (string, required) - The name of the visitor + reservationNumber : 2000003003 (number, required) - The reservation number of the visitor + accessCode : wskxqqez (string, required) - The accesscode of the visitor + hasBeenRegisteredBefore : false (boolean, required) - True if this visitor been registered before at the datacenter. If true, does not need the accesscode ### DnsEntry + name : www (string, required) - The name of the dns entry, for example '@' or 'www' + expire : 86400 (number, required) - The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration + type : A (string, required) - The type of dns entry. Possbible types are 'A', 'AAAA', 'CNAME', 'MX', 'NS', 'TXT', 'SRV', 'SSHFP', 'TLSA', 'CAA' and 'NAPTR' + content : 127.0.0.1 (string, required) - The content of of the dns entry, for example '10 mail', '127.0.0.1' or 'www' ### DnsSecEntry + keyTag : 67239 (number, required) - A 5-digit key of the Zonesigner + flags : 1 (number, required) - The signing key number, either 256 (Zone Signing Key) or 257 (Key Signing Key) + algorithm : 8 (number, required) - The algorithm type that is used, click [here](https://www.transip.nl/vragen/461-domeinnaam-nameservers-gebruikt-beveiligen-dnssec/) to see the possible options. + publicKey : AwEAAc31XDE3QWphFz6CR77Hp3ZjDRx7zqe1AXx1QMvqFKzrEKrX4oj2nv8zDquCotbQ1ObHI4KGLRf3ycaq0fYslXFJ1JxLxJUl/lpGvE8OkqdhGW3vj3YS9Mlbf0yYC2bNUY875UgDNRLqWtVSEXO/PCcqr3RIzpngu+6JF/1bfQB7ituFHxoanhAiWOpc24ZAnrhmyIsDwyy1k0iyvVTSyPugnYD/bF7CR7ObQCiuucjwCkSBHJ4gcihHvyPDU/DlsSJeEO/G31zFxzXwHjr3h3mdJE4mQuceS11e5/c9hht6rUL0PEGve1Ygknz+0ruAinlhFYnny2uxES5M9r0FIM= (string, required) - The public key ### Domain + name : example.com (string, required) - The name, including the tld of this domain + nameservers (array[Nameserver], required) - The list of nameservers (with optional gluerecords) for this domain (Only included if asked for via the relevant call) + contacts (array[WhoisContact], required) - The list of WhoisContacts for this domain (Only included if asked for via the relevant call) + authCode : kJqfuOXNOYQKqh/jO4bYSn54YDqgAt1ksCe+ZG4Ud4nfpzw8qBsfR2JqAj7Ce12SxKcGD09v+yXd6lrm (string, nullable, optional) - The authcode for this domain as generated by the registry. + isTransferLocked : false (boolean, required) - If this domain supports transfer locking, this flag is true when the domains ability to transfer is locked at the registry. + registrationDate : `2016-01-01` (string, optional) - Registration date of the domain, in YYYY-mm-dd format. + renewalDate : `2020-01-01` (string, optional) - Next renewal date of the domain, in YYYY-mm-dd format. + isWhitelabel : false (boolean, required) - If this domain is added to your whitelabel. + cancellationDate : `2020-01-01 12:00:00` (string, nullable, optional) - Cancellation data, in YYYY-mm-dd h:i:s format, null if the domain is active. + cancellationStatus : `signed` (string, nullable, optional) - Cancellation status, null if the domain is active, 'cancelled' when the domain is cancelled. + isDnsOnly : false (boolean, optional) - Whether this domain is DNS only + tags : customTag, anotherTag (array[string], required) - The custom tags added to this domain. + canEditDns (boolean, optional) - Whether dns changes propagate to the nameservers. + hasAutoDns (boolean, optional) - Whether autoDNS is enabled for this domain. Dns entries will be automatically updated when for example a webhosting packages is ordered. + hasDnsSec (boolean, optional) - Whether DNSSEC is active for this domain. + status : registered (string, optional) - The status of a domain (Can be one of: `registered`, `gone`, `dnsonly`, `inprogress`, `dropinprogress`) ### DomainAction + name : changeNameservers (string, required) - The name of this DomainAction. + message : success (string, optional) - If this action has failed, this field will contain an descriptive message. + hasFailed : false (boolean, optional) - If this action has failed, this field will be true. ### DomainBranding + companyName : Example B.V. (string, required) - The company name displayed in transfer-branded e-mails + supportEmail : admin@example.com (string, required) - The support email used for transfer-branded e-mails + companyUrl : www.example.com (string, required) - The company url displayed in transfer-branded e-mails + termsOfUsageUrl : www.example.com/tou (string, nullable, required) - The terms of usage url as displayed in transfer-branded e-mails + bannerLine1 : Example B.V. (string, required) - The first generic bannerLine displayed in whois-branded whois output. + bannerLine2 : Example (string, required) - The second generic bannerLine displayed in whois-branded whois output. + bannerLine3 : http://www.example.com/products (string, required) - The third generic bannerLine displayed in whois-branded whois output. ### DomainCheckResult + domainName : example.com (string, required) - The name of the domain + status : free (string, required) - The status for this domain. Possible statuses are: 'inyouraccount', 'unavailable', 'notfree', 'free', 'internalpull' and 'internalpush' + actions : register (array[string], required) - List of available actions to perform on this domain. Possible actions are: 'register', 'transfer', 'internalpull' and 'internalpush' ### Haip + name : `example-haip` (string, optional) - HA-IP name + description : `frontend cluster` (string, optional) - The description that can be set by the customer + status : `active` (string, optional) - HA-IP status, either 'active', 'inactive', 'creating' + isLoadBalancingEnabled : true (boolean, optional) - Whether load balancing is enabled for this HA-IP + loadBalancingMode : cookie (string, optional) - HA-IP load balancing mode: 'roundrobin', 'cookie', 'source' + stickyCookieName : PHPSESSID (string, optional) - Cookie name to pin sessions on when using cookie balancing mode + healthCheckInterval : 3000 (number, optional) - The interval in milliseconds at which health checks are performed. The interval may not be smaller than 2000ms. + httpHealthCheckPath : `/status.php` (string, optional) - The path (URI) of the page to check HTTP status code on + httpHealthCheckPort : 443 (number, optional) - The port to perform the HTTP check on, this should be the port your services are listening on + httpHealthCheckSsl : true (boolean, optional) - Whether to use SSL when performing the HTTP check + ipv4Address : 37.97.254.7 (string, optional) - HA-IP IPv4 address + ipv6Address : 2a01:7c8:3:1337::1 (string, optional) - HA-IP IPv6 address + ipSetup : ipv6to4 (string, optional) - HA-IP IP setup: 'both', 'noipv6', 'ipv6to4', 'ipv4to6' + ptrRecord : `frontend.example.com` (string, optional) - The PTR record for the HA-IP + ipAddresses : `10.3.37.1`, `10.3.38.1` (array[string], optional) - The IPs attached to this HA-IP + tlsMode : tls12 (string, required) - HA-IP TLS Mode: 'tls12' + isLocked : false (boolean, optional) - Whether or not another process is already doing stuff with this HA-IP ### HaipCertificate + id : 25478 (number, optional) - The domain ssl certificate id + commonName : example.com (string, optional) - The common name of the certificate, usually a domain name + expirationDate : `2019-11-23` (string, optional) - The expiration date of the certificate in 'Y-m-d' format ### HaipPortConfiguration + id : 9865 (number, optional) - The port configuration Id + name : `Website Traffic` (string, required) - A name describing the port + sourcePort : 80 (number, required) - The port at which traffic arrives on your HA-IP + targetPort : 80 (number, required) - The port at which traffic arrives on your attached IP address(es) + mode : `http` (string, required) - The mode determining how traffic is processed and forwarded: 'tcp', 'http', 'https', 'http2_https', 'proxy' + endpointSslMode : `off` (string, required) - The mode determining how traffic between our load balancers and your attached IP address(es) is encrypted: 'off', 'on', 'strict' ### HaipStatusReport + ipAddress : `136.10.14.1` (string, optional) - Attached IP address this status report is for + port : 80 (number, optional) - HA-IP PortConfiguration port + ipVersion : 4 (number, optional) - IP Version 4,6 + loadBalancerName : `lb0` (string, optional) - The name of the load balancer + loadBalancerIp : `136.144.151.255` (string, optional) - The IP address of the HA-IP load balancer + state : `up` (string, optional) - The state of the load balancer, either 'up' or 'down' + lastChange : `2019-09-29 16:51:18` (string, optional) - Last change in the state in Europe/Amsterdam timezone ### InstallationTemplate + name : `cloud-init-sshkeys` (string, optional) - name of the template + template (string, required) - base64 encoded installer template ### Invoice + invoiceNumber : F0000.1911.0000.0004 (string, required) - Invoice number + creationDate : `2020-01-01` (string, required) - Invoice creation date + payDate : `2020-01-01` (string, required) - Invoice paid date + dueDate : `2020-02-01` (string, required) - Invoice deadline + invoiceStatus : waitsforpayment (string, required) - Invoice status + currency : EUR (string, required) - Currency used for this invoice + totalAmount : 1000 (number, required) - Invoice total (displayed in cents) + totalAmountInclVat : 1240 (number, required) - Invoice total including VAT (displayed in cents) ### InvoiceItem + product : Big Storage Disk 2000 GB (string, required) - Product name + description : `Big Storage Disk 2000 GB (example-bigstorage)` (string, required) - Product description + isRecurring : false (boolean, required) - Payment is recurring + date : `2020-01-01` (string, required) - Date when the order line item was up for invoicing + quantity : 1 (number, required) - Quantity + price : 1000 (number, required) - Price excluding VAT (displayed in cents) + priceInclVat : 1210 (number, required) - Price including VAT (displayed in cents) + vat : 210 (number, required) - Amount of VAT charged + vatPercentage : 21 (number, required) - Percentage used to calculate the VAT + discounts (array[InvoiceItemDiscount], required) - Applied discounts ### InvoiceItemDiscount + description : `Korting (20% Black Friday)` (string, required) - Applied discount description + amount : `-500` (number, required) - Discounted amount (in cents) ### IpAddress + address : 37.97.254.6 (string, optional) - The IP address + subnetMask : 255.255.255.0 (string, optional) - Subnet mask + gateway : 37.97.254.1 (string, optional) - Gateway + dnsResolvers : 195.8.195.8, 195.135.195.135 (array[string], optional) - The DNS resolvers you can use + reverseDns : example.com (string, required) - Reverse DNS, also known as the PTR record ### KubeConfig + encodedYaml : `WW91IHNwaW4gbWUgcmlnaHQgJ3JvdW5kLCBiYWJ5LCByaWdodCAncm91bmQKTGlrZSBhIHJlY29yZCwgYmFieSwgcmlnaHQgJ3JvdW5kLCAncm91bmQsICdyb3VuZApZb3Ugc3BpbiBtZSByaWdodCAncm91bmQsIGJhYnksIHJpZ2h0ICdyb3VuZApMaWtlIGEgcmVjb3JkLCBiYWJ5LCByaWdodCAncm91bmQsICdyb3VuZCwgJ3JvdW5k`\n (string, optional) - KubeConfig base64 encoded YAML ### KubernetesBlockStorage + uuid : `220887f0-db1a-76a9-2332-00004f589b19` (string, optional) - Uuid of the Volume + name : `pvc-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string, optional) - User configurable unique identifier (max 64 chars) + clusterName : k888k (string, required) - Name of the cluster this block storage belongs to + sizeInGib : `20` (number, optional) - Size of volume in gibibytes + type : `hdd` (string, optional) - Type of storage + availabilityZone : `ams0` (string, optional) - AvailabilityZone where this volume is located + status : `attached` (string, optional) - Status of the volume 'creating', 'available', 'attaching', 'attached', 'detaching', 'deleting' + nodeUuid : `76743b28-f779-3e68-6aa1-00007fbb911d` (string, required) - Node Uuid this volume is attached to + serial : `a4d857d3fe5e814f34bb` (string, optional) - The serial of the disk. This is a unique identifier that is visible by the node it has been attached to + pvcName : `pvc-123` (string, optional) - Name of the persistent volume claim that this BlockStorage backs + pvcNamespace : `default` (string, optional) - Defines the namespace the PVC is residing in ### KubernetesCluster + name : `k888k` (string, optional) - Name of the cluster + description : frontend-cluster (string, optional) - Describes this cluster + version : 1.24.2 (string, optional) - Version of kubernetes this cluster is running + endpoint : https://k888k.ooquu8ro.k8s.transip.dev:30298 (string, optional) - URL to connect to with kubectl + isLocked : false (boolean, optional) - When an ongoing process blocks the project from being modified, this is set to `true` + isBlocked : false (boolean, optional) - Set to `true` when a project has been administratively blocked ### KubernetesClusterRelease + isCompatibleUpgrade : false (boolean, optional) - Whether the Kubernetes release can be installed as an upgrade for the selected cluster + version : `1.23.5` (string, optional) - Kubernetes release version + releaseDate : `2022-03-11` (string, required) - The release date of a Kubernetes release + maintenanceModeDate : `2022-12-28` (string, required) - The date that only security updates are issued for the Kubernetes release + endOfLifeDate : `2023-02-28` (string, optional) - The end of life date of the Kubernetes release ### KubernetesEvent + name : `kube-proxy-g9ldg.175d7f60d241f2c8` (string, optional) - The name of the event + namespace : `default` (string, optional) - The namespace of the event + type : `Warning` (string, optional) - The type of event, e.g: `Warning` or `Normal` + message : `Node is not ready` (string, optional) - A mesage about the event + reason : `NodeNotReady` (string, optional) - The reason for the event + count : 6 (number, optional) - The amount of times the event occured + creationTimestamp : 1683641890 (number, optional) - Unix timestamp of when the event was created + firstTimestamp : 1683641890 (number, optional) - Unix timestamp of when the event was first see + lastTimestamp : 1683641890 (number, optional) - Unix timestamp of when the event was last seen + involvedObjectKind : `Pod` (string, optional) - The kind of object this event is about + involvedObjectName : `kube-proxy-g9ldg` (string, optional) - The name of the object this event is about + sourceComponent : `kubelet` (string, optional) - The emitter of this event ### KubernetesIpAddress + address : 37.97.254.6 (string, optional) - The IP address + subnetMask : 255.255.255.0 (string, optional) - Subnet mask + type : external (string, optional) - external|internal|private ### KubernetesLoadBalancer + uuid : `220887f0-db1a-76a9-2332-00004f589b19` (string, optional) - LoadBalancer Uuid + name : `lb-bbb0ddf8-8aeb-4f35-85ff-4e198a0faf80` (string, optional) - User configurable unique identifier (max 64 chars) + status : `active` (string, optional) - LoadBalancer status, either 'active', 'creating' or 'deleting' + ipv4Address : 37.97.254.7 (string, optional) - LoadBalancer IPv4 address + ipv6Address : 2a01:7c8:3:1337::1 (string, optional) - LoadBalancer IPv6 address + balancing (KubernetesLoadBalancerBalancing, optional) - LoadBalancer load balancing mode + ports (array[KubernetesLoadBalancerPort], optional) - LoadBalancer ports. + nodes : `["76743b28-f779-3e68-6aa1-00007fbb911d"]` (string[], optional) - A mapping between IP addresses and UUIDs of attached nodes + serviceName : `nginx-5313` (string, optional) - The name of the service + serviceNamespace : `default` (string, optional) - Defines the namespace the service is residing in + aggregatedStatus (KubernetesLoadBalancerAggregatedStatus, optional) - LoadBalancer aggregated status ### KubernetesLoadBalancerAggregatedStatus + total : `3` (number, optional) - LoadBalancer's total amount of nodes + up : `2` (number, optional) - LoadBalancer's amount of healthy nodes ### KubernetesLoadBalancerBalancing + mode : `roundrobin` (string, optional) - LoadBalancer balancing mode, either `roundrobin`, `cookie`, `source` + cookieName : `220887f0-db1a-76a9-2332-00004f589b19` (string, optional) - LoadBalancer balancing cookie name ### KubernetesLoadBalancerConfig + loadBalancingMode : cookie (string, optional) - LoadBalancer load balancing mode: 'roundrobin', 'cookie', 'source' + stickyCookieName : PHPSESSID (string, optional) - Cookie name to pin sessions on when using cookie balancing mode + healthCheckInterval : 3000 (number, optional) - The interval in milliseconds at which health checks are performed. The interval may not be smaller than 2000ms. + httpHealthCheckPath : `/status.php` (string, optional) - The path (URI) of the page to check HTTP status code on + httpHealthCheckPort : 443 (number, optional) - The port to perform the HTTP check on, this should be the port your services are listening on + httpHealthCheckSsl : true (boolean, optional) - Whether to use SSL when performing the HTTP check + ipSetup : ipv6to4 (string, optional) - LoadBalancer IP setup: 'both', 'noipv6', 'ipv6to4', 'ipv4to6' + ptrRecord : `frontend.example.com` (string, optional) - The PTR record for the LoadBalancer + tlsMode : tls12 (string, required) - LoadBalancer TLS Mode: 'tls10_11_12', 'tls11_12', 'tls12' + ipAddresses : `10.3.37.1`, `10.3.38.1` (array[string], required) - The IPs attached to this LoadBalancer + portConfiguration (array[KubernetesPortConfiguration], required) - Array with port configurations for this LoadBalancer ### KubernetesLoadBalancerPort + name : `http_kube_apiserver` (string, optional) - LoadBalancer port name + port : `1337` (number, optional) - LoadBalancer port + mode : `tcp` (string, optional) - LoadBalancer port mode, either `tcp`, `http`, `https`, `http2_https` or `proxy` ### KubernetesLoadBalancerStatusReport + nodeUuid : `76743b28-f779-3e68-6aa1-00007fbb911d` (string, optional) - UUID of the node that this report is for + nodeIpAddress : `136.10.14.1` (string, optional) - IP of the node that this report is for + port : 80 (number, optional) - Port + ipVersion : 4 (number, optional) - IP version 4/6 + loadBalancerName : `lb0` (string, optional) - The name of the upstream load balancer + loadBalancerIp : `136.144.151.255` (string, optional) - The IP address of the upstream load balancer + state : `up` (string, optional) - The state of this configuration, either 'up' or 'down' + lastChange : `2019-09-29 16:51:18` (string, optional) - Last change in the state in Europe/Amsterdam timezone ### KubernetesNode + uuid : `76743b28-f779-3e68-6aa1-00007fbb911d` (string, optional) - Uuid of the Node + nodePoolUuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string, required) - Uuid of the nodePool the node is in + clusterName : k888k (string, required) - Name of the cluster the node is in + status : active (string, optional) - Status of the Node + ipAddresses (array[KubernetesIpAddress], optional) - IP addresses assigned to this node ### KubernetesNodePool + uuid : `402c2f84-c37d-9388-634d-00002b7c6a82` (string, optional) - Uuid of the NodePool + description : frontend-cluster (string, optional) - Describes this NodePool + clusterName : k888k (string, required) - Name of the cluster the nodePool is in + desiredNodeCount : 3 (number, required) - The desired amount of nodes in this pool, might not always be the actual count of nodes + nodeSpec : `vps-bladevps-x4` (string, optional) - The specification of the Nodes in this NodePool + availabilityZone : `ams0` (string, optional) - The availabilityZone the nodes of this nodePool are in + nodes (array[KubernetesNode], optional) - Nodes currently in NodePool ### KubernetesNodePoolLabel + key : `key` (string, optional) - Label key + value : `value` (string, required) - Label value + modifiable : true (boolean, optional) - wether this label can be modified through the API ### KubernetesNodePoolTaint + key : `key` (string, optional) - Taint key + value : `value` (string, required) - Taint value + effect : NoSchedule (string, required) - Taint effect, either `NoSchedule`, `PreferNoSchedule` or `NoExecute` + modifiable : true (boolean, optional) - wether this taint can be modified through the API ### KubernetesPortConfiguration + name : `Website Traffic` (string, required) - A name describing the port + sourcePort : 80 (number, required) - The port at which traffic arrives on your HA-IP + targetPort : 80 (number, required) - The port at which traffic arrives on your attached IP address(es) + mode : `http` (string, required) - The mode determining how traffic is processed and forwarded: 'tcp', 'http', 'https', 'http2_https', 'proxy' + endpointSslMode : `off` (string, required) - The mode determining how traffic between our load balancers and your attached IP address(es) is encrypted: 'off', 'on', 'strict' ### KubernetesProduct + type : `workerNode` (string, optional) - Kubernetes product type + name : `node-k8` (string, optional) - Product name + description : `Node K8 / 4 vCPUs / 8 GB RAM` (string, optional) - Description of product + periodPrices (array[KubernetesProductPeriodPrice], optional) - Product price information + specs (array[KubernetesProductSpec], optional) - Specifications of the items ### KubernetesProductPeriodPrice + periodUnit : `month` (string, optional) - The unit of the period this object describes + periodLength : 1 (number, optional) - The amount of the period this object describes + isExact : false (boolean, optional) - Whether the costs in this object is exact or an approximation + currency : `EUR` (string, optional) - The currency of the costs described in this object + costCents : `0.0079` (string, optional) - The costs for the period described in this object ### KubernetesProductSpec + name : `memory` (string, optional) - Name of the specification + unit : `KiB` (string, optional) - Specifies in what unit the amount is + amount : `67108864` (number, optional) - amount of the specification + description : `The amount of cores` (string, optional) - Description of the specification ### KubernetesRelease + version : `1.23.5` (string, optional) - Kubernetes release version + releaseDate : `2022-03-11` (string, required) - The release date of a Kubernetes release + maintenanceModeDate : `2022-12-28` (string, required) - The date that only security updates are issued for the Kubernetes release + endOfLifeDate : `2023-02-28` (string, optional) - The end of life date of the Kubernetes release ### License + id : 42 (number, required) - License Id + name : `cpanel-admin` (string, required) - License name + price : 1050 (number, required) - Price in cents + recurringPrice : 1050 (number, required) - Recurring price in cents + type : `addon`, `operating-system` (string, required) - License type: 'operating-system', 'addon' + quantity : 1 (number, required) - Quantity already purchased + maxQuantity : 1 (number, required) - Maximum quantity you are allowed to purchase + keys (array[LicenseKey], required) - License keys belonging to this specific License ### LicenseKey + name : `Cpanel license key` (string, required) - License key name + key : `XXXXXXXXXXX` (string, required) - License key ### LicenseProduct + name : `cpanel-pro` (string, required) - License name + price : 2750 (number, required) - Price in cents + recurringPrice : 2750 (number, required) - Recurring price in cents + type : `operating-system`, `addon` (string, required) - License type: 'operating-system', 'addon' + minQuantity : 1 (number, required) - Minimum quantity you have to purchase + maxQuantity : 1 (number, required) - Maximum quantity you are allowed to purchase ### Licenses + active (array[License], optional) - A list of licenses active on your VPS + cancellable (array[License], optional) - A list of licenses active on your VPS that you can cancel + available (array[LicenseProduct], optional) - A list of available licenses that you can order or switch to for your VPS ### MailForward + id : `20143` (string, optional) - Unique identifier of the MailForward + localPart : `forwardme` (string, required) - local part of the mailbox for the forward + domain : `example.com` (string, required) - The domain to forward (will be combined with the alias to make the full email address). + status : `created` (string, optional) - Status of the forward. + forwardTo : `john.doe@example.com` (string, required) - The email address to forward to. ### MailList + id : `20143` (string, optional) - Unique identifier of the MailList + name : `myname` (string, required) - Name of the MailList + emailAddress : `list@example.com` (string, required) - The emailAddress of the list. + entries : email1@example.com, email2@example.com (array[string], required) - The Email Addresses in the list. ### MailServiceInformation + username : `test@vps.transip.email` (string, optional) - The username of the mail service + password : `KgDseBsmWJNTiGww` (string, optional) - The password of the mail service + usage : 54 (number, optional) - The usage of the mail service + quota : 1000 (number, optional) - The quota of the mail service + dnsTxt : `782d28c2fa0b0bdeadf979e7155a83a15632fcddb0149d510c09fb78a470f7d3` (string, optional) - x-transip-mail-auth DNS TXT record Value ### Mailbox + identifier : `test@example.com` (string, required) - Identifier for the mailbox + localPart : `test` (string, required) - Local part of the mailbox + domain : `example.com` (string, required) - Domain of the mailbox + forwardTo : `test@example.com` (string, required) - Email address to also forward the email to + availableDiskSpace : `100.0` (string, required) - Disk space that is available for the mailbox + usedDiskSpace : `100.0` (string, required) - Disk space that is used for the mailbox + status : `creating` (string, required) - Current status of the mailbox + isLocked : true (string, required) - Shows whether a mailbox is locked + imapServer : `imap.example.com` (string, required) - IMAP server for mailbox + imapPort : `123` (string, required) - IMAP port for IMAP server + smtpServer : `smtp.example.com` (string, required) - SMTP server for mailbox + smtpPort : `123` (string, required) - SMTP port for SMTP server + pop3Server : `pop3.example.com` (string, required) - POP3 server for mailbox + pop3Port : `123` (string, required) - POP3 port for IMAP server + webmailUrl : `https://transip.email/` (string, required) - Webmail url ### Nameserver + hostname : ns0.transip.nl (string, required) - The hostname of this nameserver + ipv4 (string, nullable, optional) - Optional ipv4 glue record for this nameserver + ipv6 (string, nullable, optional) - Optional ipv6 glue record for this nameserver ### ObjectStoreToken + tokenId : 883a4849fc7644dd749f7a300005d9757694382b27b185d5e1fbd54446fc3949 (string, optional) - S3 token id + userId : 419636c9a72c4c588285920f6cc4bb2c (string, optional) - Token user id + projectId : 139636c9a78c4c588285920f6cc4bb5a (string, optional) - Object Store project id + accessKey : humje06ga902xdl3kydifbhvfyr2 (string, optional) - Object Store access key + secretKey : 6d2ty55ec8bsq9cj6d3ll79a46omi (string, optional) - Object Store secret key + managementUrl : de976d041fa943babaa3af94f9ecbe2b.objectstore.eu (string, optional) - Object Store management url ### OpenStackProject + id : `7a7a3bcb46c6450f95c53edb8dcebc7b` (string, optional) - The unique project id, this identifier can be used to modify a project and modify access permissions for users + name : `example-datacenter` (string, required) - Name of the project + description : This is an example project (string, optional) - Describes this project + type : `objectstore` (string, required) - Type of the project, either 'objectstore' or 'openstack' defaults to 'openstack' when not specified + isLocked : false (boolean, optional) - When an ongoing process blocks the project from being modified, this is set to `true` + isBlocked : false (boolean, optional) - Set to `true` when a project has been administratively blocked + domain : `transip` (string, optional) - The domain in which a project is stored. + region : `AMS` (string, optional) - The region in which a project is stored. ### OpenStackUser + id : 6322872d9c7e445dbbb49c1f9ca28adc (string, optional) - Identifier + username : `example-support` (string, optional) - Login name + description : `Supporter account` (string, optional) - Description + email : `support@example.com` (string, required) - Email address + totpEnabled : true (boolean, required) - Whether TOTP (Time-based One-Time Password) is enabled, e.g., true ### OperatingSystem + name : `CPanel-alma8-latest` (string, required) - The operating system name + description : cPanel 90.0.5 + AlmaLinux 8 (string, optional) - Description + baseName : AlmaLinux (string, optional) - The baseName of the operating system + version : 90.05 (string, optional) - The version of the operating system + price : 2000 (number, optional) - The monthly price of the operating system in cents + installFlavours : `installer`, `preinstallable`, `cloudinit` (array[string], optional) - available flavours of installation for this operating system + licenses (array[LicenseProduct], optional) - available licenses for this operating system + isPreinstallableImage : false (boolean, optional) - Specifies if Operating System is a preinstallable image + installFields : hostname,hashedPassword (array[string], optional) - required installation fields for this operating system ### PrivateNetwork + name : `example-privatenetwork` (string, optional) - The unique private network name + description : FilesharingNetwork (string, required) - The custom name that can be set by customer + isBlocked : false (boolean, optional) - If the Private Network is administratively blocked + isLocked : false (boolean, optional) - When locked, another process is already working with this private network + vpsNames : `example-vps`, `example-vps2` (array[string], required) - The names of VPSes in this private network + connectedVpses (array[PrivateNetworkVps], required) - The VPSes in this private network ### PrivateNetworkVps + name : `example-vps` (string, required) - The unique VPS name + uuid : `bfa08ad9-6c12-4e03-95dd-a888b97ffe49` (string, required) - The unique identifier for the VPS + description : example VPS (string, nullable, optional) - The name that can be set by customer + macAddress : 52:54:00:3b:52:65 (string, optional) - The VPS macaddress + isLocked : false (boolean, optional) - Whether or not another process is already doing stuff with this VPS + isBlocked : false (boolean, optional) - If the VPS is administratively blocked + isCustomerLocked : false (boolean, optional) - If this VPS is locked by the customer ### Product + name : `example-product-name` (string, optional) - Name of the product + description : This is an example product (string, optional) - Describes this product + price : 499 (number, optional) - Price in cents + recurringPrice : 799 (number, optional) - The recurring price for the product in cents ### ProductElement + name : `ipv4Addresses` (string, optional) - Name of the product element + description : amount of ipv4Addresses for a vps (string, optional) - Describes this product element + amount : 1 (number, optional) - Amount ### Products + vps (array[Product], optional) - A list of vps products + vpsAddon (array[Product], optional) - A list of vps addons + haip (array[Product], optional) - A list of haip products + bigStorage (array[Product], optional) - A list of big storage products + privateNetworks (array[Product], optional) - A list of private network products ### RemoteHands + coloName : `example2` (string, optional) - Name of the colocation contract + contactName : `Herman Kaakdorst` (string, optional) - Name of the person that created the remote hands request + phoneNumber : `+31 612345678` (string, optional) - Phonenumber to contact in case of questions regarding the remotehands request + expectedDuration : `15` (number, optional) - Expected duration in minutes + instructions : `Reboot server with label Loadbalancer0` (string, optional) - The instructions for the datacenter engineer to perform ### RescueImage + name : example (string, optional) - Name of Rescue Image + supportsSshKeys : true (boolean, optional) - True if the rescue image supports ssh keys ### Setting + name : blockVpsMailPorts (string, optional) - Setting Name + dataType : boolean (string, optional) - Setting Datatype + readOnly : false (boolean, optional) - Setting ReadOnly + value : true (SettingValue, required) - Setting Value ### SettingValue + valueBoolean : true (boolean, required) - Boolean Value + valueString : allow (string, required) - String Value ### Snapshot + name : 1572607577 (string, optional) - The snapshot name + description : `before upgrade` (string, optional) - The snapshot description + diskSize : `314572800` (number, optional) - The size of the snapshot in kB + status : `creating` (string, optional) - The snapshot status ('active', 'creating', 'reverting', 'deleting', 'pendingDeletion', 'syncing', 'moving') + dateTimeCreate : `2019-07-14 12:21:11` (string, optional) - The snapshot creation date + operatingSystem : `ubuntu-18.04` (string, optional) - The snapshot OperatingSystem ### SshKey + id : 123 (number, required) - SSH key identifier + key : `ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDf2pxWX/yhUBDyk2LPhvRtI0LnVO8PyR5Zt6AHrnhtLGqK+8YG9EMlWbCCWrASR+Q1hFQG example` (string, required) - SSH key + description : `Jim key` (string, optional) - SSH key description (max 255 chars) + creationDate : `2020-12-01 15:25:01` (string, optional) - Date when this SSH key was added (TimeZone: Europe/Amsterdam) + fingerprint : `bb:22:43:69:2b:0d:3e:16:58:91:27:8a:62:29:97:d1` (string, optional) - MD5 fingerprint of SSH key + isDefault : true (boolean, required) - Whether or not the key is flagged as default ### SslCertificate + certificateId : 12358 (number, required) - The id of the certificate, can be used to retrieve additional info + commonName : example.com (string, required) - The domain name that the SSL certificate is added to. Start with '*.' when the certificate is a wildcard. + expirationDate : `2019-10-24 12:59:59` (string, required) - Expiration date + status : active (string, required) - The current status, either 'active', 'inactive', 'busy' or 'expired'

Active: Certificate is not expired and can be used
Inactive: Certificate is being processed
Busy: Order is in progress
Expired: Certificate is malformed or gone. + canReissue : true (string, required) - Whether the certificate can be reissued ### SslCertificateData + caBundleCrt (string, required) - The certificates ca bundle + certificateCrt (string, required) - The certificates crt + certificateP7b (string, required) - The certificates P7B + certificateKey (string, required) - The certificates private key ### SslCertificateDetails + company : `Company B.V.` (string, required) - Company affiliation of certificate holder + department : `IT` (string, required) - Internal organization department/division name of certificate holder + postbox : `springfieldroad 123` (string, required) - Post office box address for certificate holder + address : `springfieldroad 123` (string, required) - Address for certificate holder + zipcode : `2345 BB` (string, required) - Zipcode for certificate holder + city : `The Hague` (string, required) - City for certificate holder + state : `Noord-Holland` (string, required) - State for certificate holder + countryCode : `NL` (string, required) - Country code for certificate holder + firstName : `Johnny` (string, required) - First name for certificate holder + lastName : `Sins` (string, required) - Last name for certificate holder + email : `test@example.com` (string, required) - Email for certificate holder + phoneNumber : `+316 12345678` (string, required) - Phone number for certificate holder + expirationDate : `1970-01-01 00:00:00` (string, required) - Expiration date of certificate + name : `/CN=*.example.com` (string, required) - Name of certificate + hash : `12abc4567` (string, required) - Hash of certificate + version : 2 (string, required) - Version of certificate + serialNumber : `0x03DEDF0EBA8C8BE53B082CB002579BCC134E` (string, required) - Serial number of certificate + serialNumberHex : `03DEDF0EBA8C8BE53B082CB002579BCC134E` (string, required) - Serial hex number of certificate + validFrom : `211012092403Z` (string, required) - UTC timestamp start validity of certificate + validTo : `220110092402Z` (string, required) - UTC timestamp end validity of certificate + validFromTimestamp : 1647443313 (string, required) - unix timestamp start validity of certificate + validToTimestamp : 1647443313 (string, required) - unix timestamp end validity of certificate + signatureTypeSN : `RSA-SHA256` (string, required) - Signature short name of certificate + signatureTypeLN : `sha256WithRSAEncryption` (string, required) - Signature long name of certificate + signatureTypeNID : 123 (string, required) - NID of certificate + subjectCommonName : `*.example.com` (string, required) - Subject common name of certificate + issuerCountry : `US` (string, required) - Country of issuer + issuerOrganization : `Let's Encrypt` (string, required) - Organization of issuer + issuerCommonName : `R3` (string, required) - Common name of issuer + keyUsage : `Digital Signature, Key Encipherment` (string, required) - Key usage of certificate extension + basicConstraints : `CA:FALSE` (string, required) - Basic constraints of certificate extension + enhancedKeyUsage : `TLS Web Server Authentication, TLS Web Client Authentication` (string, required) - Enhanced key usage of certificate extension + subjectKeyIdentifier : `A1:B2:C3:D4:E5:F6:G7:H8:I9:J1:K2:L3:M4:N5:O6:P7:Q8:R9:S0:T1` (string, required) - Subject key identifier of certificate extension + authorityKeyIdentifier : `keyid:A1:B2:C3:D4:E5:F6:G7:H8:I9:J1:K2:L3:M4:N5:O6:P7:Q8:R9:S0:T1` (string, required) - Authority key identifier of certificate extension + authorityInformationAccess : `OCSP - URI:http://r3.o.lencr.org CA Issuers - URI:http://r3.i.lencr.org/` (string, required) - Authority information access of certificate extension + subjectAlternativeName : `DNS:*.example.com, DNS:example.com` (string, required) - Subject alternative name of certificate extension + certificatePolicies : `Policy: 1.23.456.7.8.9 Policy: 1.2.3.4.5.6.12345.3.2.1 CPS: http://cps.letsencrypt.org` (string, required) - Certificate policies of certificate extension + signedCertificateTimestamp : `Signed Certificate Timestamp: Version : v1 (0x0) Log ID...` (string, required) - Certificate timestamp of certificate extension ### TCPMonitor + ipAddress : 10.3.37.1 (string, required) - IP Address that is monitored + label : HTTP (string, required) - Title of the monitor + ports : 80, 443 (array[number], required) - Ports that are monitored + interval : 6 (number, required) - Checking interval in minutes (numbers 1-6) + allowedTimeouts : 1 (number, required) - Allowed time outs (numbers 1-5) + contacts (array[TCPMonitorContact], required) - Contact that will be notified for this monitor + ignoreTimes (array[TCPMonitorIgnoreTime], required) - The hours when the TCP monitoring is ignored (no notifications are sent out) ### TCPMonitorContact + id : 1 (number, required) - Monitoring contact id + enableEmail : true (boolean, required) - Send emails to contact + enableSMS : false (boolean, required) - Send SMS text messages to contact ### TCPMonitorIgnoreTime + timeFrom : 18:00 (string, required) - Start from (24 hour format) + timeTo : 08:30 (string, required) - End at (24 hour format) ### Tenant + uuid : `bfa08ad9-6c12-4e03-95dd-a888b97ffe49` (string, optional) - uuid for this tenant + name : testuser (string, optional) - name of the tenant ### TenantUsage + currentUsage : 200 (string, optional) - The current usage of your acronis product + limit : 500 (string, optional) - The usage limit of your acronis product ### Tld + name : .nl (string, required) - The name of this TLD, including the starting dot. E.g. .nl or .com. + price : 399 (number, optional) - Price of the TLD in cents + recurringPrice : 749 (number, optional) - Price for renewing the TLD in cents + capabilities : canRegister (array[string], optional) - A list of the capabilities that this Tld has (the things that can be done with a domain under this tld). Possible capabilities are: 'requiresAuthCode', 'canRegister', 'canTransferWithOwnerChange', 'canTransferWithoutOwnerChange', 'canSetLock', 'canSetOwner', 'canSetContacts', 'canSetNameservers', 'supportsDnsSec' + minLength : 2 (number, optional) - The minimum amount of characters need for registering a domain under this TLD. + maxLength : 63 (number, optional) - The maximum amount of characters need for registering a domain under this TLD. + registrationPeriodLength : 12 (number, optional) - Length in months of each registration or renewal period. + cancelTimeFrame (number, optional) - Number of days a domain needs to be canceled before the renewal date. ### Totp + secretKey : 883a4849fc7644dd749f7a300005d9757694382b27b185d5e1fbd54446fc3949 (string, optional) - Secret key which can be used to create a QR code. ### Usage + cpu (array[VpsUsageDataCpu], required) - + disk (array[VpsUsageDataDisk], required) - + network (array[VpsUsageDataNetwork], required) - ### Vps + name : `example-vps` (string, required) - The unique VPS name + uuid : `bfa08ad9-6c12-4e03-95dd-a888b97ffe49` (string, required) - The unique identifier for the VPS + description : example VPS (string, nullable, optional) - The name that can be set by customer + productName : `vps-bladevps-x1` (string, optional) - The product name + operatingSystem : `ubuntu-18.04` (string, nullable, optional) - The VPS OperatingSystem + diskSize : 157286400 (number, optional) - The VPS disk size in kB + memorySize : 4194304 (number, optional) - The VPS memory size in kB + cpus : 2 (number, optional) - The VPS cpu count + status : running (string, optional) - The VPS status, either 'created', 'installing', 'running', 'stopped' or 'paused' + ipAddress : 37.97.254.6 (string, optional) - The VPS main ipAddress + macAddress : 52:54:00:3b:52:65 (string, optional) - The VPS macaddress + currentSnapshots : 1 (number, optional) - The amount of snapshots that is used on this VPS + maxSnapshots : 10 (number, optional) - The maximum amount of snapshots for this VPS + isLocked : false (boolean, optional) - Whether or not another process is already doing stuff with this VPS + isBlocked : false (boolean, optional) - If the VPS is administratively blocked + isCustomerLocked : false (boolean, optional) - If this VPS is locked by the customer + availabilityZone : ams0 (string, optional) - The name of the availability zone the VPS is in + tags : customTag, anotherTag (array[string], required) - The custom tags added to this VPS + createdAt : `2024-01-01 23:59:59` (string, optional) - The VPS creation datetime (UTC) ### VpsBackup + id : 712332 (number, required) - The backup id + status : `active` (string, optional) - Status of the backup ('active', 'creating', 'reverting', 'deleting', 'pendingDeletion', 'syncing', 'moving') + dateTimeCreate : `2019-11-29 22:11:20` (string, required) - The backup creation date + diskSize : 157286400 (number, required) - The backup disk size in kB + operatingSystem : `Ubuntu 19.10` (string, required) - The backup operatingSystem + availabilityZone : `ams0` (string, optional) - The name of the availability zone the backup is in + retentionType : `weeklyBackupRetention` (string, required) - The backup retention type (daily, weekly) ### VpsFirewall + isEnabled : true (boolean, required) - Whether the firewall is enabled for this VPS + ruleSet (array[VpsFirewallRule], required) - Ruleset of the VPS ### VpsFirewallRule + description : HTTP (string, optional) - The rule name + startPort : `80` (number, required) - The start port of this firewall rule + endPort : `80` (number, required) - The end port of this firewall rule + protocol : `tcp` (string, required) - The protocol `tcp` , `udp` or `tcp_udp` + whitelist : `80.69.69.80/32`, `80.69.69.100/32`, `2a01:7c8:3:1337::1/128` (array[string], required) - Whitelisted IP's or ranges that are allowed to connect, empty to allow all ### VpsOrder + productName : `vps-bladevps-x8` (string, required) - Name of the product + addons : `vps-addon-1-extra-cpu-core` (array[string], optional) - Array with additional addons + availabilityZone : `ams0` (string, optional) - The name of the availability zone where the vps should be created + description : `example vps description` (string, optional) - The description of the VPS + operatingSystem : `ubuntu-18.04` (string, optional) - The name of the operating system to install + installFlavour : `installer` (string, optional) - The flavour of OS installation `installer`, `preinstallable` or `cloudinit` check GET OperatingSystem to see what flavours your OS supports + hostname (string, optional) - The name for the host, only needed for installing a preinstallable control panel image + username : `ubuntu-user` (string, optional) - VPS User + hashedPassword : `$2y$10$kDwnrkGedxn4HtdAPl86D..sdtnW5aLeHzPuJ8UbAWOOiSiBDXYkm` (string, optional) - The hashedPassword for the specified user + sshKeys : `ssh-rsa AAAAB3NzaC1yc2EAAA...` , `ssh-ed25519 AAAAC3NzaC1l...` (array[string], optional) - Array of public ssh key's to use for account creating during installation + base64InstallText (string, optional) - Base64 encoded preseed / kickstart instructions, when installing unattended. The decoded string may be up to 49152 bytes (48 KiB) long. + licenses : `cpanel-premier-200`, `cpanel-premier-500` (array[string], optional) - Licenses you want to add to your `preinstallable` installation flavor ### VpsTrafficInformation + startDate : `2019-06-22` (string, required) - The start date in 'Y-m-d' format + endDate : `2019-07-22` (string, required) - The end date in 'Y-m-d' format + usedInBytes : 7860253754 (number, required) - The usage in bytes for this period + usedTotalBytes : 11935325369 (number, required) - The usage in bytes + maxInBytes : 1073741824000 (number, required) - The maximum amount of bytes that can be used in this period ### VpsTrafficPoolInformation + startDate : `2019-06-22` (string, required) - The start date in 'Y-m-d' format + endDate : `2019-07-22` (string, required) - The end date in 'Y-m-d' format + usedInBytes : 7860253754 (number, required) - The usage in bytes for this period + maxInBytes : 1073741824000 (number, required) - The maximum amount of bytes that can be used in this period + expectedBytes : 1073741824000 (number, required) - The expected amount of bytes that will be used in this period ### VpsUsageDataCpu + percentage : 3.11 (number, required) - The percentage of CPU usage for this entry + date : 1574783109 (number, required) - Date of the entry, by default in UNIX timestamp format ### VpsUsageDataDisk + iopsRead : 0.27 (number, required) - The read IOPS for this entry + iopsWrite : 0.13 (number, required) - The write IOPS for this entry + date : 1574783109 (number, required) - Date of the entry, by default in UNIX timestamp format ### VpsUsageDataNetwork + mbitOut : 100.2 (number, required) - The amount of outbound traffic in Mbps for this usage entry + mbitIn : 249.93 (number, required) - The amount of inbound traffic in Mbps for this usage entry + date : 1574783109 (number, required) - Date of the entry, by default in UNIX timestamp format ### VpsVncData + host : vncproxy.transip.nl (string, optional) - Location of the VNC Proxy + path : `websockify?token=esco024gzqwyeeb5nexayi2gve09paw9dytumyxqzurxj5t642o5p6myzisn5gch` (string, optional) - Websocket path including the token + url : `https://vncproxy.transip.nl/websockify?token=esco024gzqwyeeb5nexayi2gve09paw9dytumyxqzurxj5t642o5p6myzisn5gch` (string, optional) - Complete websocket URL + token : `esco024gzqwyeeb5nexayi2gve09paw9dytumyxqzurxj5t642o5p6myzisn5gch` (string, optional) - Token to identify the VPS to connect to (changes dynamically) + password : `fVpTyDrhMiuYBXxn` (string, optional) - Password to setup up the VNC connection (changes dynamically) ### WhoisContact + type : registrant (string, required) - The type of this Contact, 'registrant', 'administrative' or 'technical' + firstName : John (string, required) - The firstName of this Contact + lastName : Doe (string, required) - The lastName of this Contact + companyName : Example B.V. (string, required) - The companyName of this Contact, in case of a company + companyKvk : 83057825 (string, required) - The kvk number of this Contact, in case of a company + companyType : BV (string, required) - The type number of this Contact, in case of a company. Possible types are: 'BV', 'BVI/O', 'COOP', 'CV', 'EENMANSZAAK', 'KERK', 'NV', 'OWM', 'REDR', 'STICHTING', 'VERENIGING', 'VOF', 'BEG', 'BRO', 'EESV' and 'ANDERS' + street : Easy street (string, required) - The street of the address of this Contact + number : 12 (string, required) - The number part of the address of this Contact + postalCode : 1337 XD (string, required) - The postalCode part of the address of this Contact + city : Leiden (string, required) - The city part of the address of this Contact + phoneNumber : +31 715241919 (string, required) - The phoneNumber of this Contact + faxNumber : +31 715241919 (string, nullable, optional) - The faxNumber of this Contact + email : example@example.com (string, required) - The email address of this Contact + country : nl (string, required) - The country of this Contact, one of the ISO 3166-1 2 letter country codes, must be lowercase.