NAV
shell

Introduction

Welcome to the myLoc API!

You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right.

Ratelimits

Our API is ratelimited - you are allowed to submit only a certain number of requests per time period. These limits are in place to prevent excessive load caused by scripts gone wild. Under normal circumstances you should not hit the limits at all. If, however, you feel that the boundaries we set are too tight for your use case, feel free to contact us. We will find a solution by either increasing your personal limits or aiding you in using the API more efficiently.

There are two ways to examine the current limits and the number of requests remaining before hitting the limit: Visit the API Limits section or parse the response header of your API requests. You will find something like this:

x-ratelimit-limit: 2

x-ratelimit-remaining: 0

x-ratelimit-reset: 1582795488

This means the limit is 2 calls (which is not that much...) and you have 0 calls remaining before you will hit the limit. The remaining calls will reset at UNIX timestamp 1582795488, which equals 2020-02-27 09:24:48.

Authentication

To authorize, use this code:

# With shell, you can just pass the correct header with each request
curl "api_endpoint_here"
  -H "Authorization: Bearer oauth-token"

Make sure to replace oauth-token with your API key.

We use API keys ("tokens") to control access to the API. To register new tokens use our API Interface. Here you can also have a look at detailed information concerning your personal API usage.

We expect the token to be included in all API requests to the server in a header that looks like the following:

Authorization: Bearer oauth-token

Permissions

Each token has a specific scope, determining which operations may be carried out using this token. The scope is basically an array of strings, representing the granted permissions. Whenever you generate a new token, you have to specify its scope. Refer to the table below for details (the permissions should be self-explanatory). You can also call [GET] Token scopes to retrieve a list of all existing permissions.

Value Description Contained in
API_TEST_ROLE Use this to test your implementation -
API_CUSTOMER_FULL_ACCESS Gives a token full access to all operations -
API_SERVER_LIST API_CUSTOMER_FULL_ACCESS
API_SERVER_EDIT API_CUSTOMER_FULL_ACCESS
API_TRAFFIC_READ API_CUSTOMER_FULL_ACCESS
API_REMOTE_MANAGEMENT_WRITE API_CUSTOMER_FULL_ACCESS
API_REMOTE_MANAGEMENT_READ API_CUSTOMER_FULL_ACCESS
API_LICENSE_READ API_CUSTOMER_FULL_ACCESS
API_LICENSE_WRITE API_CUSTOMER_FULL_ACCESS
API_SOFTWARE_LIST API_CUSTOMER_FULL_ACCESS
API_IP_READ API_CUSTOMER_FULL_ACCESS
API_IP_WRITE API_CUSTOMER_FULL_ACCESS
API_SUBUSER_WRITE API_CUSTOMER_FULL_ACCESS
API_ACCESS_TOKEN_READ API_CUSTOMER_FULL_ACCESS
API_ACCESS_TOKEN_WRITE API_CUSTOMER_FULL_ACCESS
API_SUBUSER_READ API_CUSTOMER_FULL_ACCESS
API_ME_READ API_CUSTOMER_FULL_ACCESS
API_WHMCS_READ API_CUSTOMER_FULL_ACCESS
API_ORDER_SYSTEM API_CUSTOMER_FULL_ACCESS
API_RETRIEVE_PASSWORD API_CUSTOMER_FULL_ACCESS
API_ORDER_SYSTEM Gives a token full access to the myLoc order system. The token will be able to place all kinds of chargeable orders API_CUSTOMER_FULL_ACCESS
API_CART_READ API_ORDER_SYSTEM
API_CART_WRITE API_ORDER_SYSTEM
API_CART_ORDER API_ORDER_SYSTEM
API_ORDERFORMS_READ API_ORDER_SYSTEM
API_EXCHANGERATES_READ API_ORDER_SYSTEM
API_REFERRAL_READ API_ORDER_SYSTEM
API_OFFER_READ API_ORDER_SYSTEM
API_COUNTRY_READ API_ORDER_SYSTEM
API_ME_READ API_ORDER_SYSTEM
API_CLIENT_READ API_ORDER_SYSTEM
API_CLIENT_WRITE API_ORDER_SYSTEM

Token

Use this endpoints to manage your api-access tokens. You may edit or revoke existing tokens and issue new ones.

[GET] Tokens

curl -X GET "https://zkm.myloc.de/api/token"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
 "meta": {
   "total_pages": 1,
   "current_page": 1,
   "items_per_page": 10,
   "total_items": 4
 },
 "content": [
   {
     "token": "oauth_token",
     "expires_at": "2020-08-13T23:59:59+0200",
     "scope": [
       "API_CUSTOMER_FULL_ACCESS",
       "API_TEST_ROLE"
     ],
     "user": {
       "handle": "123456",
       "active": true,
       "last_login": "2019-12-17T11:49:26+0100",
       "lastname": "John",
       "firstname": "Doe",
       "email": null,
       "comment": null,
       "client": {},
       "contracts": []
     }
   },
   {
     "token": "oauth_token2",
     "expires_at": "2099-01-01T23:59:59+0100",
     "scope": [
       "API_CUSTOMER_FULL_ACCESS"
     ],
     "user": {
       "handle": "123456",
       "active": true,
       "last_login": "2019-12-17T11:49:26+0100",
       "lastname": "John",
       "firstname": "Doe",
       "email": null,
       "comment": null,
       "client": {},
       "contracts": []
     }
   },
   {
     "token": "oauth_token",
     "expires_at": "2999-01-01T23:59:59+0100",
     "scope": [
       "API_ACCESS_TOKEN_READ",
       "API_ACCESS_TOKEN_WRITE",
       "API_IP_READ",
       "API_IP_WRITE",
       "API_LICENSE_READ",
       "API_LICENSE_WRITE",
       "API_ME_READ",
       "API_OFFER_READ",
       "API_PRODUCTS_READ",
       "API_REMOTE_MANAGEMENT_READ",
       "API_REMOTE_MANAGEMENT_WRITE",
       "API_SERVER_EDIT",
       "API_SERVER_LIST",
       "API_SOFTWARE_LIST",
       "API_SUBUSER_READ",
       "API_SUBUSER_WRITE",
       "API_TRAFFIC_READ"
     ],
     "user": {
       "handle": "123456-4",
       "active": true,
       "last_login": "2019-03-20T14:53:19+0100",
       "lastname": "Eva",
       "firstname": "Rubinstein",
       "email": "some@dummymail.void",
       "comment": null,
       "client": {},
       "contracts": [
         {
           "id": 93387,
           "entity_type": "default"
         }
       ]
     }
   },
   {
     "token": "oauth_token",
     "expires_at": "2019-09-04T03:35:44+0200",
     "scope": [
       "API_ORDER_SYSTEM"
     ],
     "user": {
       "handle": "123456",
       "active": true,
       "last_login": "2019-12-17T11:49:26+0100",
       "lastname": "John",
       "firstname": "Doe",
       "email": null,
       "comment": null,
       "client": {},
       "contracts": []
     }
   }
 ]
}

Retrieve a list containing all tokens.

HTTP Request

GET https://zkm.myloc.de/api/token

Response contents

Key Type Description filterable
token string The token itself yes
expires_at datetime The tokens expiration date no
scope array The scope for this token. This value determines, which operations you may carry out using this token. See Token scopes no
user object The User this token is assigned to no

Available Filter Targets

Title Key Type Description
Token token string The token itself
User Handle user.handle string The users unique identifier

Have a look at the Filter section for detailed instructions how to use filters.

[POST] Create token

curl -X POST "https://zkm.myloc.de/api/token" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}" 
-H "Content-Type: application/json" 
-d "{ \"user\": \"123456\", \"expire_date\": \"2020-08-01\", \"scope\": [ \"API_SERVER_LIST\",\"API_SERVER_EDIT\" ]}"

This is the POST body in structured JSON format:

{
  "user": "123456",
  "expire_date": "2020-08-01",
  "scope": [
    "API_SERVER_LIST",
    "API_SERVER_EDIT"
  ]
}

The above command returns '201 - Created' and the following structured JSON on success:

{
  "content": {
    "token": "yourbrandnewtoken",
    "expires_at": "2020-01-02T13:07:11.672Z",
    "scope": [
      "API_SERVER_LIST",
      "API_SERVER_EDIT"
    ]
  }
}

Use this endpoint to create a new access token with the specified scope. The scope is specified as array containing all permissions.

There are some pitfalls concerning the permissions. It is not possible to use the API_CUSTOMER_FULL_ACCESS permission - you have to specify all permissions separately. This leads to problems when you try to automate the token creation process: You would harcode a list of all permissions to generate a FULL_ACCESS token. But if we introduced additional permissions in future API versions, you would have to realize this and adapt your code to reflect the changes.

To prevent this, do the following. Whenever you create a new token and want it to have full access, query the API for available Token Scopes and use the returned list of permissions to create your new token.

HTTP Request

POST https://zkm.myloc.de/api/token

POST Parameters

Parameter Type Description
user string The users handle
expire_date datetime The desired expiration date
scope array Array containing all desired permissions. Does not accept API_CUSTOMER_FULL_ACCESS

Response contents

This method will return a 201 - Created on success.

Key Type Description Filterable
token string The token itself no
expires_at datetime the expiration date no
scope array The scope as array no

Error Codes

Code Meaning
422 Unprocessable Entity -- You have reached the maximum number of access tokens. You may want to contact support to increase your limit.

For more error codes, refer to Errors Section

[GET] Token scopes

curl -X GET "https://zkm.myloc.de/api/token/scopes"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": {
    "API_CUSTOMER_FULL_ACCESS": [
      "API_SERVER_LIST",
      "API_SERVER_EDIT",
      "API_TRAFFIC_READ",
      "API_REMOTE_MANAGEMENT_WRITE",
      "API_REMOTE_MANAGEMENT_READ",
      "API_LICENSE_READ",
      "API_LICENSE_WRITE",
      "API_SOFTWARE_LIST",
      "API_IP_READ",
      "API_IP_WRITE",
      "API_SUBUSER_WRITE",
      "API_ACCESS_TOKEN_READ",
      "API_ACCESS_TOKEN_WRITE",
      "API_SUBUSER_READ",
      "API_ME_READ",
      "API_WHMCS_READ",
      "API_ORDER_SYSTEM",
      "API_RETRIEVE_PASSWORD",
      "API_CART_READ",
      "API_CART_WRITE",
      "API_CART_ORDER",
      "API_ORDERFORMS_READ",
      "API_EXCHANGERATES_READ",
      "API_REFERRAL_READ",
      "API_OFFER_READ",
      "API_COUNTRY_READ",
      "API_CLIENT_READ",
      "API_CLIENT_WRITE"
    ],
    "API_TEST_ROLE": []
  }
} 

Retrieve a list containing all possible token scopes. More information concerning scopes can be found here.

HTTP Request

GET https://zkm.myloc.de/api/token/scopes

Response contents

Associative array containing all possible scopes.

[GET] Me

curl -X GET "https://zkm.myloc.de/api/me"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": {
    "token": "tokenhere",
    "expires_at": "2099-01-01T23:59:59+0100",
    "scope": [
      "API_CUSTOMER_FULL_ACCESS"
    ],
    "user": null
  }
}

Retrieve information regarding the token used for authentication of this call. Includes the token scope and the associated User.

HTTP Request

GET https://zkm.myloc.de/api/me

Response contents

This method will return a 200 - OK on success.

Key Type Description
token string The token itself
expires_at string the expiration date
scope array The scope as array
user object The User object associated with this token.

Server

[GET] all servers

curl -X GET "https://zkm.myloc.de/api/server"
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

The above command returns JSON structured like this:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 1
  },
  "content": [
    {
      "id": 1234567,
      "create_date": "2018-10-17T12:35:54+0200",
      "hostname": "f123.fuchsia.fastwebserver.de",
      "product": {
        "id": 4749,
        "name": "SD-SM-3365",
        "type": "server"
      },
      "status": "Y",
      "description": "My description"
    }
  ]
}

This endpoint retrieves all servers that you may control using the supplied access token.

HTTP Request

GET https://zkm.myloc.de/api/server

Response contents

Key Type Description filterable
id int The Id of the contract this server belongs to yes
create_date string - yes
hostname string - yes
product int Basic information about the underlying product. Also See Products yes
status string One of the following: TA (waiting for activation), Y (active), TD (waiting for deactivation), D (deactivated) no
description string A custom description you may adapt to your needs yes

Available Filter Targets

Title Key Type Description
Contract ID id int
Create Date create_date string
Hostname hostname string
Product ID product int The Id of the underlying product
Description description string

Have a look at the Filter section for detailed instructions how to use filters.

[GET] a specific server

curl -X GET "https://zkm.myloc.de/api/server/12345670"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "content": {
    "id": 12345670,
    "create_date": "2018-10-17T12:35:54+0200",
    "hostname": "f123.fuchsia.fastwebserver.de",
    "product": {
      "id": 4749,
      "name": "SD-SM-3365",
      "type": "server"
    },
    "status": "Y",
    "bill_interval": "month",
    "interval_price": 99.90,
    "paid_until_date": "2018-04-25T07:58:11+0200",
    "possible_termination_date": "2018-10-16",
    "termination_date": "2018-10-16T23:00:00+0200",
    "description": "My description",
    "sub_contracts": [],
    "entity_type": "default"
  }
}

This endpoint retrieves detailed information about a specific server.

HTTP Request

GET https://zkm.myloc.de/api/server/{contract_id}

URL Parameters

Parameter Type Description
contract_id int The ID of the contract representing the requested server

Response contents

Key Type Description
id int The Id of the contract this server belongs to
create_date string -
hostname string -
product array Basic information about the underlying product. See Product
status string One of the following: TA (waiting for activation), Y (active), TD (waiting for deactivation), D (deactivated)
bill_interval string Identifier for the interval in which billing occurs, e.g. "month"
interval_price float Price including taxes that is due in this billing interval
paid_until_date string The contract has been paid up to this date
possible_termination_date string The next possible termination date
termination_date string Date on which this contract is going to be terminated
description string A custom description you may adapt to your needs
sub_contracts array An array of subcontracts belonging to the requested contract
entity_type string The type of contract

[GET] a server's IPs

curl -X GET "https://zkm.myloc.de/api/server/1337/ips" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "meta": {
    "total_pages": "2",
    "current_page": "1",
    "items_per_page": "1",
    "total_items": "2"
  },
  "content": [
    {
      "ip_address": "127.0.0.1",
      "main": "true",
      "rdns_entry": "seat.workspace.home",
      "routing_type": "hostroute",
      "target_contract": "1337"
    }
  ]
}

This endpoint provides information about all IPs assigned to the specified server.

HTTP Request

GET https://zkm.myloc.de/api/server/{contract_id}/ips

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the requested server

Response contents

The returned content is an array of IP objects.

Available Filter Targets

Title Key Type Description
IP Address ip_address string The Ip Address in dotted format
Main Address main boolean Whether or not the address is the servers main ip. See Filter Section to learn how to filter for boolean values.
Routing Type routing_type string Either hostroute or vlan.

[POST] Order new IP for server

curl -X POST "https://zkm.myloc.de/api/server/1337/ips" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns 202 - Accepted on success.

Use this endpoint to order a new ip for the supplied contract.

HTTP Request

POST https://zkm.myloc.de/api/server/{contract_id}/ips

URL Parameters

Parameter Type Description
contract_id int The Id of the contract to add the ip to

Response contents

This method will return a 202 - Accepted on success.

Error Codes

Error Code Meaning
409 Conflict -- You have reached the maximum number of orderable ips. You may want to contact support to increase your limit.

For more error codes, refer to Errors Section

[GET] current Operating System

curl -X GET "https://zkm.myloc.de/api/server/1337/software" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "content": {
    "software": {
      "id": 1229,
      "operating_system": {
        "id": 82,
        "name": "Windows",
        "handle": "windows",
        "version": "2016",
        "latest": false,
        "icons": {
          "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-16x16.png",
          "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-32x32.png",
          "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-64x64.png",
          "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-128x128.png",
          "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-256x256.png",
          "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-512x512.png"
        }
      },
      "admintool": {
        "name": "Plain",
        "handle": "plain"
      },
      "language": {
        "code": "de",
        "name": "Deutsch",
        "install_code": "de-DE"
      },
      "price": null
    },
    "raid": null,
    "installation_running": false
  }
}

This endpoint returns the current Operating System.

HTTP Request

GET https://zkm.myloc.de/api/server/{contract_id}/software

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
software array Details about the currently installed software, which is basically the OS no
software.id int The id of the product entity representing this Software. See Product Endpoint in the Store Section no
software.operating_system array Detailed information about the operating system no
software.operating_system.id int The id for this Operating System no
software.operating_system.name string The name of this Operating System
software.operating_system.handle string The operating systems handle no
software.operating_system.version int The operating systems version no
software.operating_system.latest boolean True if this is the latest available version, false otherwise no
software.operating_system.icons array URLs for icons representing this OS no
software.admintool array Information regarding the existence and type of included admintool no
software.admintool.name string The name of this Admintool no
software.admintool.handle string The handle for this admintool. "plain" equals no admintool at all no
software.language array Information regarding the softwares language no
language.code string ISO code for this language no
language.name string Name of this Language no
language.install_code string The language code no
software.price float The price for this OS, if available no
raid array Information about the servers raid, if existing no
raid.type string Information about the raids type no
raid.level int The raid level no
installation_running boolean Whether or not an installation is in progress. Also see Install OS no

[GET] available Operating Systems

curl -X GET "https://zkm.myloc.de/api/server/1337/available-software" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "meta": {
    "total_pages": 75,
    "current_page": 1,
    "items_per_page": 2,
    "total_items": 132
  },
  "content": [
    {
      "id": 598,
      "operating_system": {
        "id": 51,
        "name": "CentOS",
        "handle": "linux",
        "version": "6",
        "latest": false,
        "icons": {
          "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-16x16.png",
          "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-32x32.png",
          "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-64x64.png",
          "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-128x128.png",
          "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-256x256.png",
          "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-512x512.png"
        }
      },
      "admintool": {
        "name": "Plain",
        "handle": "plain"
      },
      "language": null,
      "software_raid": true,
      "raid_level": [
        0,
        1
      ],
      "price": null
    },
    {
      "id": 599,
      "operating_system": {
        "id": 51,
        "name": "CentOS",
        "handle": "linux",
        "version": "6",
        "latest": false,
        "icons": {
          "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-16x16.png",
          "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-32x32.png",
          "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-64x64.png",
          "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-128x128.png",
          "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-256x256.png",
          "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-512x512.png"
        }
      },
      "admintool": {
        "name": "Plain",
        "handle": "plain"
      },
     "language": {
        "code": "ru",
        "name": "Russisch",
        "install_code": "ru-RU"
      },
      "software_raid": false,
      "raid_level": [],
      "price": null
    }
  ]
}

This endpoint provides a list of all software (basically Operating Systems) that may be installed on this server. See Install OS

HTTP Request

GET https://zkm.myloc.de/api/server/{contract_id}/available_software

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
id int The id of the product entity representing this Software. See Product Endpoint in the Store Section yes
operating_system array Detailed information about the operating system yes, by some properties
operating_system.id int The id for this Operating System yes
operating_system.handle string The operating systems handle yes
operating_system.version int The operating systems version yes
operating_system.latest boolean True if this is the latest available version, false otherwise yes
operating_system.icons array URLs for icons representing this OS no
admintool array Information regarding the existence and type of included admintool yes, via handle
admintool.name string The name of this Admintool no
admintool.handle string The handle for this admintool. "plain" equals no admintool at all yes
language array The language for the Operating System yes, by language code
language.code string ISO code for this language yes
language.name string Name of this Language no
language.install_code string The language code no
software_raid boolean Whether or not the OS supports software raid no
raid_level array Possible raid level no
price float The price for this OS, if available no

Available Filter Targets

Title Key Type Description
Underlying product product int The id of the product entity representing this Software. See Product Endpoint in the Store Section
Operating System Type operating_system_handle string Filter by the type of OS. "linux" or "windows".
Latest Version operating_system_latest boolean True if this is the latest available version, false otherwise
OS Version operating_system_version int The operating systems version
Type of admintool admintool_handle string The type of this admintool (e.g. "plesk"). "plain" equals no admintool at all
OS Language language.code string ISO code for this language

[POST] Install Operating System

curl -X POST "https://zkm.myloc.de/api/server/1337/install" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}" 
-H "Content-Type: application/json" 
-d "{ \"software\": 599, \"software_raid_level\": 0}"

The above command returns "200 - OK" and the following structured JSON on success:

{
  "content": {
    "otp": "nooneknowsmebutyou"
  }
}

This is the POST body in structured JSON format:

 {
  "software": 599,
  "software_raid_level": 0
}

Use this endpoint to completely wipe the server and install a fresh Operating System.

HTTP Request

POST https://zkm.myloc.de/api/server/{contract_id}/install

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

POST Parameters

Parameter Type Description
software int The Id of the software you want to install. See Get available Operating Systems
software_raid_level int The software RAID level. Note that this parameter is optional as not every operating system is capable of a software RAID as well as specific RAID levels. See Get available Operating Systems for more information.

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
otp string A One-Time-Password that you will need to retrieve the root password after the installation no

Error Codes

Error Code Meaning
409 Conflict -- There already is an installation running, the server is booted in rescue mode or it is suspended for some reason. The response message will contain details about the reason for the conflict.
410 Gone -- Returned when OTP could not be found for a running installation

For more error codes, refer to Errors Section

[POST] Restart

curl -X POST "https://zkm.myloc.de/api/server/1337/restart" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

 {
   "possible_next_reboot": "2020-01-02T09:15:43+0100"
 }

Use this endpoint to restart your server.

HTTP Request

POST https://zkm.myloc.de/api/server/{contract_id}/restart

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
possible_next_reboot datetime When you may perform the next restart operation. Normally this is about 15 minutes later no

Error Codes

Error Code Meaning
409 Conflict -- There is already a restart in progress.

For more error codes, refer to Errors Section

[POST] Suspend

curl -X POST "https://zkm.myloc.de/api/server/1337/suspend" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "204 - No content" on success.

Use this endpoint to suspend your server.

HTTP Request

https://zkm.myloc.de/api/server/{contract_id}/suspend

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

Response contents

This method will return a 204 - No content on success.

Error Codes

Error Code Meaning
409 Conflict -- The server is already suspended

For more error codes, refer to Errors Section

[POST] Unsuspend

curl -X POST "https://zkm.myloc.de/api/server/1337/unsuspend" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "204 - No content" on success.

Use this endpoint to unsuspend your server.

HTTP Request

https://zkm.myloc.de/api/server/{contract_id}/unsuspend

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

Response contents

This method will return a 204 - No content on success.

Error Codes

Error Code Meaning
409 Conflict -- The server is not in suspended state

For more error codes, refer to Errors Section

[GET] Retrieve root password

curl -X GET "https://zkm.myloc.de/api/server/1337/retrieve-password?otp=somesecret" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

 {
   "content": {
     "password": "nooneknowsmebutyou"
   }
 }

Use this endpoint to retrieve the new root-password after you called the "install"-endpoint for your server with the appropriate parameters. See Install Operating System.

HTTP Request

https://zkm.myloc.de/api/server/{contract_id}/retrieve-password?otp={otp}

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server
otp string The One-Time-Password you received after an installation

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
password string The root password for your server no

Error Codes

Error Code Meaning
403 Forbidden -- Returned when the password can not be decrypted with your OTP
409 Conflict -- The installation is still in progress
410 Gone -- Too much time passed between the finished installation and your API call or the password has already been retrieved.

For more error codes, refer to Errors Section

[GET] Retrieve raidsets

curl -X GET "https://zkm.myloc.de/api/server/1337/raidsets" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "content": [
    {
      "id": 20,
      "operating_system": "linux",
      "hdds": [
        {
          "slot": 0,
          "type": "sata"
        },
        {
          "slot": 1,
          "type": "sata"
        },
        {
          "slot": 2,
          "type": "sata"
        }
      ],
      "partitions": [
        {
          "level": 1,
          "mountpoint": "/boot",
          "size": "5%",
          "filesystem": "ext4"
        },
        {
          "level": 1,
          "mountpoint": "swap",
          "size": "10.10%",
          "filesystem": "swap"
        },
        {
          "level": 0,
          "mountpoint": "/mnt/insecure",
          "size": "20%",
          "filesystem": "ext4"
        },
        {
          "level": 5,
          "mountpoint": "/",
          "size": "*",
          "filesystem": "ext4"
        }
      ]
    }
  ]
}

This endpoint returns the RAID sets that will be used for the next installation.

HTTP Request

GET https://zkm.myloc.de/api/server/{contract_id}/raidsets

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
id int The Id of the RAID set no
operating_system string The operating system the server is using no
hdds array Information about the used drives. Also See RaidSet HDD no
partitons array Information about the partitions to create. Also See RaidSet Partition no

[GET] Retrieve raidsets in a specific state

curl -X GET "https://zkm.myloc.de/api/server/1337/raidsets/active" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "content": [
    {
      "id": 20,
      "operating_system": "linux",
      "hdds": [
        {
          "slot": 0,
          "type": "sata"
        },
        {
          "slot": 1,
          "type": "sata"
        },
        {
          "slot": 2,
          "type": "sata"
        }
      ],
      "partitions": [
        {
          "level": 1,
          "mountpoint": "/boot",
          "size": "5%",
          "filesystem": "ext4"
        },
        {
          "level": 1,
          "mountpoint": "swap",
          "size": "10.10%",
          "filesystem": "swap"
        },
        {
          "level": 0,
          "mountpoint": "/mnt/insecure",
          "size": "20%",
          "filesystem": "ext4"
        },
        {
          "level": 5,
          "mountpoint": "/",
          "size": "*",
          "filesystem": "ext4"
        }
      ]
    }
  ]
}

This endpoint retrieves all raidsets in a specific state for the provided server.

HTTP Request

GET https://zkm.myloc.de/api/server/{contract_id}/raidsets/{state}

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server
state string Get only RAID sets in this state. Allowed values: active, planned or deactivated

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
id int The Id of the RAID set no
operating_system string The operating system the server is using no
hdds array Information about the used drives. Also See RaidSet HDD no
partitons array Information about the partitions to create. Also See RaidSet Partition no

[POST] Set raidsets

curl -X POST "https://zkm.myloc.de/api/server/1337/raidsets" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

{
  "raidsets": [
    {
      "id": 20,
      "operating_system": "linux",
      "hdds": [
        {
          "slot": 0,
          "type": "sata"
        },
        {
          "slot": 1,
          "type": "sata"
        },
        {
          "slot": 2,
          "type": "sata"
        }
      ],
      "partitions": [
        {
          "level": 1,
          "mountpoint": "/boot",
          "size": "5%",
          "filesystem": "ext4"
        },
        {
          "level": 1,
          "mountpoint": "swap",
          "size": "10.10%",
          "filesystem": "swap"
        },
        {
          "level": 0,
          "mountpoint": "/mnt/insecure",
          "size": "20%",
          "filesystem": "ext4"
        },
        {
          "level": 5,
          "mountpoint": "/",
          "size": "*",
          "filesystem": "ext4"
        }
      ]
    }
  ]
}

Persist RAID sets that should be used for the next installation.

This is the POST body in structured JSON format:

{
  "raidsets": [
    {
      "hdds": [
        {
          "slot": 0
        },
        {
          "slot": 1
        },
        {
          "slot": 2
        }
      ],
      "partitions": [
        {
          "level": 1,
          "mountpoint": "/boot",
          "size": "5%"
        },
        {
          "level": 1,
          "mountpoint": "swap",
          "size": "10.10%"
        },
        {
          "level": 0,
          "mountpoint": "/mnt/insecure",
          "size": "20%"
        },
        {
          "level": 5,
          "mountpoint": "/",
          "size": "*"
        }
      ]
    }
  ],
  "force": true,
  "operating_system": "linux"
}

HTTP Request

POST https://zkm.myloc.de/api/server/{contract_id}/raidsets

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

POST Parameters

Parameter Type Description
raidsets array The raidsets to be installed omitting the ID and OS. See RaidSet
force bool Set true to disable /boot and swap size validation
operating_system string The operating system of the server

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
id int The Id of the RAID set no
operating_system string The operating system the server is using no
hdds array Information about the used drives. Also See RaidSet HDD no
partitons array Information about the partitions to create. Also See RaidSet Partition no

Error Codes

Error Code Meaning
409 Conflict -- There already is an installation running. The response message will contain details about the reason for the conflict.

For more error codes, refer to Errors Section

[DELETE] Delete raidset

curl -X DELETE "https://zkm.myloc.de/api/server/1337/raidsets/20"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json"

This command will result in "204 No Content" on success

Removes the current raidset entries for the submitted contract.

HTTP Request

DELETE https://zkm.myloc.de/api/server/{contract_id}/raidsets/{raidset}

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server
raidset int The Raidset Id to remove.

Response contents

This method will return a 204 No Content on success.

[DELETE] Delete raidsets

curl -X DELETE "https://zkm.myloc.de/api/server/1337/raidsets"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json"

This command will result in "204 No Content" on success

Removes all raidset entries for the submitted contract.

HTTP Request

DELETE https://zkm.myloc.de/api/server/{contract_id}/raidsets

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the server

Response contents

This method will return a 204 No Content on success.

VPS (Virtual Private Server)

[GET] all VPSs

curl -X GET "https://zkm.myloc.de/api/vps"
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

The above command returns JSON structured like this:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 1
  },
  "content": [
    {
      "id": 1,
      "create_date": "2020-11-17T10:03:16.247Z",
      "hostname": "srv123456.example.server-hosting.expert",
      "product": {
        "id": 4728,
        "name": "vServer Windows M",
        "type": "string"
      },
      "status": "Y",
      "description": "My description"
    }
  ]
}

This endpoint retrieves all VPSs that you may control using the supplied access token.

HTTP Request

GET https://zkm.myloc.de/api/vps

Response contents

Key Type Description filterable
id int The ID of the contract this VPS belongs to yes
create_date string - yes
hostname string - yes
product int Basic information about the underlying product. Also See Products yes
status string One of the following: TA (waiting for activation), Y (active), TD (waiting for deactivation), D (deactivated) no
description string A custom description you may adapt to your needs yes

Available Filter Targets

Title Key Type Description
Contract ID id int
Create Date create_date string
Hostname hostname string
Product ID product int The Id of the underlying product
Description description string

Have a look at the Filter section for detailed instructions how to use filters.

[GET] a specific VPS

curl -X GET "https://zkm.myloc.de/api/vps/12345670"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "content": {
    "id": 12345670,
    "create_date": "2020-11-17T10:04:09.303Z",
    "hostname": "srv123456.example.server-hosting.expert",
    "product": {
      "id": 4728,
      "name": "vServer Windows M",
      "type": "string"
    },
    "status": "Y",
    "bill_interval": "month",
    "interval_price": 99.90,
    "paid_until_date": "2018-04-25T07:58:11+0200",
    "possible_termination_date": "2018-10-16",
    "termination_date": "2018-10-16T23:00:00+0200",
    "description": "My description",
    "sub_contracts": [],
    "entity_type": "default"
  }
}

This endpoint retrieves detailed information about a specific VPS.

HTTP Request

GET https://zkm.myloc.de/api/vps/{contract_id}

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the requested VPS

Response contents

Key Type Description
id int The Id of the contract this VPS belongs to
create_date string -
hostname string -
product array Basic information about the underlying product. See Product
status string One of the following: TA (waiting for activation), Y (active), TD (waiting for deactivation), D (deactivated)
bill_interval string Identifier for the interval in which billing occurs, e.g. "month"
interval_price float Price including taxes that is due in this billing interval
paid_until_date string The contract has been paid up to this date
possible_termination_date string The next possible termination date
termination_date string Date on which this contract is going to be terminated
description string A custom description you may adapt to your needs
sub_contracts array An array of subcontracts belonging to the requested contract
entity_type string The type of contract

[GET] a VPSs IPs

curl -X GET "https://zkm.myloc.de/api/vps/1337/ips" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "meta": {
    "total_pages": "2",
    "current_page": "1",
    "items_per_page": "1",
    "total_items": "2"
  },
  "content": [
    {
      "ip_address": "127.0.0.1",
      "main": "true",
      "rdns_entry": "seat.workspace.home",
      "routing_type": "hostroute",
      "target_contract": "1337"
    }
  ]
}

This endpoint provides information about all IP-addresses assigned to the specified VPS.

HTTP Request

GET https://zkm.myloc.de/api/vps/{contract_id}/ips

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the requested VPS

Response contents

Key Type Description filterable
ip_address string The Ip Address in dotted format yes
main boolean Whether or not the address is the VPSs main ip yes
rdns_entry string The RDNS Entry for this address no
routing_type string hostroute or vlan yes
target_contract int The contract this ip belongs to no

Available Filter Targets

Title Key Type Description
IP Address ip_address string The Ip Address in dotted format
Main Address main boolean Whether or not the address is the VPSs main ip. See Filter Section to learn how to filter for boolean values.
Routing Type routing_type string Either hostroute or vlan.

[POST] Order new IP for VPS

curl -X POST "https://zkm.myloc.de/api/vps/1337/ips" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns 202 - Accepted on success.

Use this endpoint to order a new ip for the supplied contract.

HTTP Request

POST https://zkm.myloc.de/api/vps/{contract_id}/ips

URL Parameters

Parameter Type Description
contract_id int The Id of the contract to add the ip to

Response contents

This method will return a 202 - Accepted on success.

Error Codes

Error Code Meaning
409 Conflict -- You have reached the maximum number of orderable ips. You may want to contact support to increase your limit.

For more error codes, refer to Errors Section

[GET] current Operating System

curl -X GET "https://zkm.myloc.de/api/vps/1337/software" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "content": {
    "software": {
      "id": 1229,
      "operating_system": {
        "id": 82,
        "name": "Windows",
        "handle": "windows",
        "version": "2016",
        "latest": false,
        "icons": {
          "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-16x16.png",
          "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-32x32.png",
          "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-64x64.png",
          "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-128x128.png",
          "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-256x256.png",
          "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-512x512.png"
        }
      },
      "admintool": {
        "name": "Plain",
        "handle": "plain"
      },
      "language": {
        "code": "de",
        "name": "Deutsch",
        "install_code": "de-DE"
      },
      "price": null
    },
    "raid": null,
    "installation_running": false
  }
}

This endpoint returns the current Operating System.

HTTP Request

GET https://zkm.myloc.de/api/vps/{contract_id}/software

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the VPS

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
software array Details about the currently installed software, which is basically the OS no
software.id int The id of the product entity representing this Software. See Product Endpoint in the Store Section no
software.operating_system array Detailed information about the operating system no
software.operating_system.id int The id for this Operating System no
software.operating_system.name string The name of this Operating System
software.operating_system.handle string The operating systems handle no
software.operating_system.version int The operating systems version no
software.operating_system.latest boolean True if this is the latest available version, false otherwise no
software.operating_system.icons array URLs for icons representing this OS no
software.admintool array Information regarding the existence and type of included admintool no
software.admintool.name string The name of this Admintool no
software.admintool.handle string The handle for this admintool. "plain" equals no admintool at all no
software.language array Information regarding the softwares language no
language.code string ISO code for this language no
language.name string Name of this Language no
language.install_code string The language code no
software.price float The price for this OS, if available no
raid array Information about the VPSs raid, if existing no
raid.type string Information about the raids type no
raid.level int The raid level no
installation_running boolean Whether or not an installation is in progress. Also see Install OS no

[GET] available Operating Systems

curl -X GET "https://zkm.myloc.de/api/vps/1337/available-software" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "meta": {
    "total_pages": 75,
    "current_page": 1,
    "items_per_page": 2,
    "total_items": 132
  },
  "content": [
    {
      "id": 598,
      "operating_system": {
        "id": 51,
        "name": "CentOS",
        "handle": "linux",
        "version": "6",
        "latest": false,
        "icons": {
          "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-16x16.png",
          "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-32x32.png",
          "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-64x64.png",
          "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-128x128.png",
          "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-256x256.png",
          "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-512x512.png"
        }
      },
      "admintool": {
        "name": "Plain",
        "handle": "plain"
      },
      "language": null,
      "software_raid": true,
      "raid_level": [
        0,
        1
      ],
      "price": null
    },
    {
      "id": 599,
      "operating_system": {
        "id": 51,
        "name": "CentOS",
        "handle": "linux",
        "version": "6",
        "latest": false,
        "icons": {
          "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-16x16.png",
          "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-32x32.png",
          "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-64x64.png",
          "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-128x128.png",
          "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-256x256.png",
          "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-512x512.png"
        }
      },
      "admintool": {
        "name": "Plain",
        "handle": "plain"
      },
     "language": {
        "code": "ru",
        "name": "Russisch",
        "install_code": "ru-RU"
      },
      "software_raid": false,
      "raid_level": [],
      "price": null
    }
  ]
}

This endpoint provides a list of all software (basically Operating Systems) that may be installed on this VPS. See Install OS

HTTP Request

GET https://zkm.myloc.de/api/vps/{contract_id}/available_software

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the VPS

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
id int The id of the product entity representing this Software. See Product Endpoint in the Store Section yes
operating_system array Detailed information about the operating system yes, by some properties
operating_system.id int The id for this Operating System yes
operating_system.handle string The operating systems handle yes
operating_system.version int The operating systems version yes
operating_system.latest boolean True if this is the latest available version, false otherwise yes
operating_system.icons array URLs for icons representing this OS no
admintool array Information regarding the existence and type of included admintool yes, via handle
admintool.name string The name of this Admintool no
admintool.handle string The handle for this admintool. "plain" equals no admintool at all yes
language array The language for the Operating System yes, by language code
language.code string ISO code for this language yes
language.name string Name of this Language no
language.install_code string The language code no
software_raid boolean Whether or not the OS supports software raid no
raid_level array Possible raid level no
price float The price for this OS, if available no

Available Filter Targets

Title Key Type Description
Underlying product product int The id of the product entity representing this Software. See Product Endpoint in the Store Section
Operating System Type operating_system_handle string Filter by the type of OS. "linux" or "windows".
Latest Version operating_system_latest boolean True if this is the latest available version, false otherwise
OS Version operating_system_version int The operating systems version
Type of admintool admintool_handle string The type of this admintool (e.g. "plesk"). "plain" equals no admintool at all
OS Language language.code string ISO code for this language

[POST] Install Operating System

curl -X POST "https://zkm.myloc.de/api/vps/1337/install" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}" 
-H "Content-Type: application/json" 
-d "{ \"software\": 599}"

The above command returns "200 - OK" and the following structured JSON on success:

{
  "content": {
    "otp": "nooneknowsmebutyou"
  }
}

This is the POST body in structured JSON format:

 { 
     "software": 599
 }

Use this endpoint to completely wipe the VPS and install a fresh Operating System.

HTTP Request

POST https://zkm.myloc.de/api/vps/{contract_id}/install

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the VPS

POST Parameters

Parameter Type Description
software int The Id of the software you want to install. See Get available Operating Systems

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
otp string A One-Time-Password that you will need to retrieve the root password after he installation no

Error Codes

Error Code Meaning
409 Conflict -- There already is an installation running, the VPS is booted in rescue mode or it is suspended for some reason. The response message will contain details about the reason for the conflict.
410 Gone -- Returned when OTP could not be found for a running installation

For more error codes, refer to Errors Section

[POST] Restart

curl -X POST "https://zkm.myloc.de/api/vps/1337/restart" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

 {
   "possible_next_reboot": "2020-01-02T09:15:43+0100"
 }

Use this endpoint to restart your VPS.

HTTP Request

POST https://zkm.myloc.de/api/vps/{contract_id}/restart

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the VPS

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
possible_next_reboot datetime When you may perform the next restart operation. Normally this is about 15 minutes later no

Error Codes

Error Code Meaning
409 Conflict -- There is already a restart in progress.

For more error codes, refer to Errors Section

[POST] Suspend

curl -X POST "https://zkm.myloc.de/api/vps/1337/suspend" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "204 - No content" on success.

Use this endpoint to suspend your VPS.

HTTP Request

https://zkm.myloc.de/api/vps/{contract_id}/suspend

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the VPS

Response contents

This method will return a 204 - No content on success.

Error Codes

Error Code Meaning
409 Conflict -- The VPS is already suspended

For more error codes, refer to Errors Section

[POST] Unsuspend

curl -X POST "https://zkm.myloc.de/api/vps/1337/unsuspend" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "204 - No content" on success.

Use this endpoint to unsuspend your VPS.

HTTP Request

https://zkm.myloc.de/api/vps/{contract_id}/unsuspend

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the VPS

Response contents

This method will return a 204 - No content on success.

Error Codes

Error Code Meaning
409 Conflict -- The VPS is not in suspended state

For more error codes, refer to Errors Section

[GET] Retrieve VPS password

curl -X GET "https://zkm.myloc.de/api/vps/1337/retrieve-password?otp=somesecret" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

 {
   "content": {
     "password": "nooneknowsmebutyou"
   }
 }

Use this endpoint to retrieve the new root-password after you called the "install" or "reset-password" endpoint for your VPS with the appropriate parameters. See Install Operating System.

HTTP Request

https://zkm.myloc.de/api/vps/{contract_id}/retrieve-password?otp={otp}

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the VPS
otp string The One-Time-Password you received after an installation or password reset

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
password string The root password for your VPS no

Error Codes

Error Code Meaning
403 Forbidden -- Returned when the password can not be decrypted with your OTP
409 Conflict -- The installation or password reset is still in progress
410 Gone -- Too much time passed between the finished installation and your API call or the password has already been retrieved.

For more error codes, refer to Errors Section

[POST] Reset VPS password

curl -X GET "https://zkm.myloc.de/api/vps/1337/reset-password" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

 {
   "content": {
     "otp": "nooneknowsmebutyou"
   }
 }

Use this endpoint to reset your root-password.

HTTP Request

https://zkm.myloc.de/api/vps/{contract_id}/reset-password

URL Parameters

Parameter Type Description
contract_id int The Id of the contract representing the VPS

Response contents

This method will return a 200 - OK on success.

Key Type Description filterable
otp string A string that you will need to retrieve the new password no

Error Codes

Error Code Meaning
404 Not Found -- Returned when the contract in question can not be found or is not a virtual machine
409 Conflict -- Returned when the contract in question has an installation or password reset running.

For more error codes, refer to Errors Section

[PUT] Set VPS Hostname

URL Parameters

https://zkm.myloc.de/api/vps/{contract_id}/sethostname

Parameter Type Description
contract_id int The Id of the contract representing the VPS

Request Body

Key Type Description filterable
hostname string A string that have your hostname no
{
  "hostname" : "test.myloc.de"
}

Response contents

This method will return a 200 - OK on success. json { "content": { "hostname": "test.myloc.de" } }

Use this endpoint to set a Hostname.

Error Codes

Error Code Meaning
403 Forbidden -- Returned when the password can not be decrypted with your OTP
404 Not Found -- Returned when the contract in question can not be found or is not a virtual machine

For more error codes, refer to Errors Section

Contracts

[GET] All Contracts

curl -X GET "https://zkm.myloc.de/api/contracts"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 1
  },
  "content": [
    {
      "id": 1,
      "create_date": "2021-08-03T10:52:29.410Z",
      "hostname": "srv123456.example.server-hosting.expert",
      "product": {
        "id": 4728,
        "name": "vServer Windows M",
        "type": "string"
      },
      "status": "Y",
      "description": "My description",
      "readable_status": "ACTIVE",
      "resources": [
        {
          "id": "string",
          "price": {},
          "resource_limit": {}
        }
      ]
    }
  ]
}

Returns a list of contracts. See Contract entity for more information.

HTTP Request

GET https://zkm.myloc.de/api/contracts

Available Filter Targets

Title Key Type Description
Create Date create_date string Use an ISO 8601 date time format, e.g. 2021-01-01T00:00:00+0100
Product ID product_id int Contracts with a product that has this product id
Product Type product_type string A product type like server
Status readable_status string One of the following: TO_BUILD (hardware provisioning), TO_ACTIVATE (will be active), ACTIVE (active), DEACTIVATED (deactivated) TO_DEACTIVATE (will be deactivated), WAITING_PAYMENT (waiting for payment), TERMINATED (contract terminated)

Have a look at the Filter section for detailed instructions how to use filters.

Response contents

This method command returns "200 - Ok" and a list of contracts on success. See Contract entity for more information.

[GET] Specific Contract

curl -X GET "https://zkm.myloc.de/api/contracts/123456"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns JSON structured like this:

{
  "content": {
    "id": 123456,
    "create_date": "2020-11-17T10:07:58.362Z",
    "hostname": "srv123456.example.server-hosting.expert",
    "product": {
      "id": 4728,
      "name": "vServer Windows M",
      "type": "string"
    },
    "status": "Y",
    "bill_interval": "month",
    "interval_price": 99.90,
    "paid_until_date": "2018-04-25T07:58:11+0200",
    "possible_termination_date": "2018-10-16",
    "termination_date": "2018-10-16T23:00:00+0200",
    "description": "My description",
    "sub_contracts": [],
    "entity_type": "default"
  }
}

This endpoint retrieves basic information about a specific contract of any type.

HTTP Request

GET https://zkm.myloc.de/api/contracts/{contract_id}

URL Parameters

Parameter Type Description
contract_id int The ID of the requested contract

Response contents

Key Type Description
id int The ID of the requested contract
create_date string -
hostname string -
product array Basic information about the underlying product. See Product
Status readable_status string
bill_interval string Identifier for the interval in which billing occurs, e.g. "month"
interval_price float Price including taxes that is due in this billing interval
paid_until_date string The contract has been paid up to this date
possible_termination_date string The next possible termination date in Format "Y-m-d"
termination_date string Date on which this contract is going to be terminated
description string A custom description you may adapt to your needs
sub_contracts array An array of subcontracts belonging to the requested contract
entity_type string The type of contract

[GET] Contract Ips

curl -X GET "https://zkm.myloc.de/api/contracts/123456/ips"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 2
  },
  "content": [
    {
      "ip_address": "62.141.39.241",
      "main": true,
      "rdns_entry": "advanced-procrastination.expert",
      "routing_type": "hostroute",
      "target_contract": 123456
    },
    {
      "ip_address": "185.15.244.83",
      "main": false,
      "rdns_entry": "pE9E93451.dip0.t-ipconnect.de",
      "routing_type": "hostroute",
      "target_contract": 123456
    }
  ]
}

Returns a list with all IPs associated with this contract.

HTTP Request

GET https://zkm.myloc.de/api/contracts/{contract}/ips

URL Parameters

Parameter Type Description
contract int The id of the Contract.

Response contents

This method command returns "200 - Ok" and a list of IPs on success.

[GET] Contract Rdns

curl -X GET "https://zkm.myloc.de/api/contracts/123456/rdns"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 2
  },
  "content": [
    {
      "domain": "easy-ddos.de",
      "time_to_life": 86400,
      "ip_address": "62.141.39.240"
    },
    {
      "domain": "pE9E90541.dip0.t-ipconnect.de",
      "time_to_life": 86400,
      "ip_address": "185.15.244.85"
    }
  ]
}

Returns a list with all RDNS entries for the ips associated with this contract.

HTTP Request

GET https://zkm.myloc.de/api/contracts/{contract}/rdns

URL Parameters

Parameter Type Description
contract int The id of the Contract.

Response contents

This method command returns "200 - Ok" and a list of RDNS entries on success.

[POST] Contract Suspend

curl -X POST "https://zkm.myloc.de/api/contracts/123456/suspend"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

Nullroutes the server associated with the supplied contract.

HTTP Request

POST https://zkm.myloc.de/api/contracts/{contract}/suspend

URL Parameters

Parameter Type Description
contract int The id of the Contract.

Response contents

This method command returns "204 - No Content" on success.

Error Codes

Error Code Meaning
409 Conflict -- The contract is already suspended.

For more error codes, refer to Errors Section

[POST] Contract Unsuspend

curl -X POST "https://zkm.myloc.de/api/contracts/123456/unsuspend"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

Removes a previously set nullroute.

HTTP Request

POST https://zkm.myloc.de/api/contracts/{contract}/unsuspend

URL Parameters

Parameter Type Description
contract int The id of the Contract.

Response contents

This method command returns "204 - No Content" on success.

Error Codes

Error Code Meaning
409 Conflict -- The contract is not suspended.

For more error codes, refer to Errors Section

[GET] Contract Licenses

curl -X GET "https://zkm.myloc.de/api/contracts/123456/licenses"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 1
  },
  "content": [
    {
      "license_container_contract_id": 123456,
      "description": null,
      "license": {
        "id": 64654,
        "type": "plesk",
        "status": "ACTIVE",
        "create_date_time": "2020-01-02T16:46:10+0100",
        "ip_address": "62.141.39.243",
        "key_number": "PLSK.06120234.0000",
        "activation_code": "A00R00-A3X506-FR2H12-JBC902-TC3PO0",
        "items": [
          {
            "item_key": "PLESK-12-VPS-WEB-ADMIN-1M"
          }
        ]
      }
    }
  ]
}

Returns a list with all License Containers associated with this contract.

HTTP Request

GET https://zkm.myloc.de/api/contracts/{contract}/licenses

URL Parameters

Parameter Type Description
contract int The id of the Contract.

Available Filter Targets

Title Key Type Description
License ID id int A License id.
Create Date create_date_time string The date of creation.
IP ip string A valid IP in dotted format.

Have a look at the Filter section for detailed instructions how to use filters.

Response contents

This method command returns "200 - Ok" and a list of License Containers on success.

[GET] Contract Licenses By Container

curl -X GET "https://zkm.myloc.de/api/contracts/123456/licenses/123456"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 1
  },
  "content": [
    {
      "license_container_contract_id": 123456,
      "description": null,
      "license": {
        "id": 64654,
        "type": "plesk",
        "status": "ACTIVE",
        "create_date_time": "2020-01-02T16:46:10+0100",
        "ip_address": "62.141.39.243",
        "key_number": "PLSK.06120234.0000",
        "activation_code": "A00R00-A3X506-FR2H12-JBC902-TC3PO0",
        "items": [
          {
            "item_key": "PLESK-12-VPS-WEB-ADMIN-1M"
          }
        ]
      }
    }
  ]
}

Returns the specified License Container.

HTTP Request

GET https://zkm.myloc.de/api/contracts/{contract}/licenses/{license_container_contract}

URL Parameters

Parameter Type Description
contract int The id of the Contract.
license_container_contract int The id of the License Container.

Available Filter Targets

Title Key Type Description
License ID id int A License id.
Create Date create_date_time string The date of creation.
IP ip string A valid IP in dotted format.

Have a look at the Filter section for detailed instructions how to use filters.

Response contents

This method command returns "200 - Ok" and License Container on success.

[POST] Order Contract License

curl -X POST "https://zkm.myloc.de/api/contracts/123456/licenses"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This is the POST body in structured JSON format:

{
 "license_product_id": 1234,
 "ip_address": "127.0.0.1"
}

The above command returns "201 - Created" and the following structured JSON on success:

{
  "content": {
    "description": null,
    "license": {
      "id": 1337,
      "status": "PREPARED",
      "create_date_time": "2020-02-26T08:20:52.013Z",
      "ip_address": "127.0.0.1",
      "key_number": "some_string",
      "activation_code": "some_other_string",
      "items": [
        {
          "item_key": "some_other_string_different_from_the_others"
        }
      ]
    }
  }
}

Orders a new license for the specified license container contract.

HTTP Request

POST https://zkm.myloc.de/api/contracts/{license_container_contract}/licenses

URL Parameters

Parameter Type Description
license_container_contract int The id of the License Container contract you want to add the licenses to.

Response contents

This method command returns "201 - Created" and the created License on success.

[GET] Valid contract cancellation dates

curl -X GET "https://zkm.myloc.de/api/contracts/123456/cancellation-dates"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
  "content": {
    "termination_dates": [
      "2021-10-22",
      "2021-11-22",
      "2021-12-22"
    ]
  }
}

Returns a list of valid cancellation dates to use on the Terminate Contract Endpoint.

HTTP Request

GET https://zkm.myloc.de/api/contracts/{contract}/cancellation-dates

URL Parameters

Parameter Type Description
contract int The id of the Contract.

Response contents

This method command returns "200 - Ok" and a list of dates on success.

[POST] Terminate Contract

curl -X POST "https://zkm.myloc.de/api/contracts/123456/cancellation"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This is the POST body in structured JSON format:

{
 "target_datetime": "2021-12-31"
}

The above command returns "200 - OK" and the following structured JSON on success:

{
  "content": {
    "termination_datetime": "2021-12-31"
  }
}

Terminates the contract on the given datetime. You might want to check the next possible termination date before you call this endpoint. See Get Contract for how to get a Contracts details.

HTTP Request

POST https://zkm.myloc.de/api/contracts/{contract}/cancellation

URL Parameters

Parameter Type Description
contract int The id of the contract you want to terminate.

POST Parameters

Parameter Type Description
target_datetime string The exact date you want the contract to be terminated. This parameter is optional. The next possible datetime will be used if you do not specify it.

Response contents

This method command returns "200 - OK" and the termination date on success.

Error Codes

Error Code Meaning
400 Bad request -- Returned when no termination datetime could be determined or if it does not match the specified datetime.
409 Conflict -- The contract has already been cancelled

For more error codes, refer to Errors Section

Currency

[GET] Exchange rates

curl -X GET "https://zkm.myloc.de/api/currency/exchange-rates"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": [
    {
      "currency": "PLN",
      "rate": 4.5243
    },
    {
      "currency": "USD",
      "rate": 1.2222
    }
  ]
}

HTTP Request

GET https://zkm.myloc.de/api/currency/exchange-rates

Response contents

Returns a list of currency codes and exchanges rates to EUR (Euro). The exchange rates are updated daily.

Available Filter Targets

Title Key Type Description
ISO 4217 Currency Code currency array E.g. in(currency, [USD, PLN])

Have a look at the Filter section for detailed instructions on how to use filters.

Licenses

[GET] License

curl -X GET "https://zkm.myloc.de/api/licenses/71663"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
 "content": {
   "license_container_contract_id": 123456,
   "description": null,
   "license": {
     "id": 71663,
     "type": "plesk",
     "status": "PREPARED",
     "create_date_time": "2019-09-20T15:30:42+0200",
     "ip_address": null,
     "key_number": null,
     "activation_code": null,
     "items": [
       {
         "item_key": "PLESK-12-WEB-ADMIN-1M"
       }
     ]
   }
 }
}

Get details about the supplied license. This will return the License Container object holding the license with the the supplied license id.

HTTP Request

GET https://zkm.myloc.de/api/licenses/{license}

URL Parameters

Parameter Type Description
license int The id of your License.

Response contents

This method command returns "200 - Ok" and a License Container object in JSON format on success.

[PATCH] License Ip

curl -X GET "https://zkm.myloc.de/api/licenses/71663/ip"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This is the POST body in structured JSON format:

{
 "ip_address": "127.0.0.1"
}

The above command returns "200 - Ok" and the following structured JSON on success:

{
 "content": {
   "license_container_contract_id": 123456,
   "description": null,
   "license": {
     "id": 71663,
     "type": "plesk",
     "status": "PREPARED",
     "create_date_time": "2019-09-20T15:30:42+0200",
     "ip_address": "127.0.0.1",
     "key_number": null,
     "activation_code": null,
     "items": [
       {
         "item_key": "PLESK-12-WEB-ADMIN-1M"
       }
     ]
   }
 }
}

Points this license to the specified ip.

HTTP Request

PATCH https://zkm.myloc.de/api/licenses/{license}/ip

URL Parameters

Parameter Type Description
license int The id of your License.

PATCH Parameters

Parameter Type Description
ip_address string The Ip you want to assign to your license.

Response contents

This method command returns "200 - Ok" and the updated License Container object in JSON format on success.

[PATCH] License Description

curl -X GET "https://zkm.myloc.de/api/licenses/71663/description"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This is the POST body in structured JSON format:

{
 "description": "Quality means doing it right when nobody is watching"
}

The above command returns "200 - Ok" and the following structured JSON on success:

{
 "content": {
   "license_container_contract_id": 123456,
   "description": "Quality means doing it right when nobody is watching",
   "license": {
     "id": 71663,
     "type": "plesk",
     "status": "PREPARED",
     "create_date_time": "2019-09-20T15:30:42+0200",
     "ip_address": "127.0.0.1",
     "key_number": null,
     "activation_code": null,
     "items": [
       {
         "item_key": "PLESK-12-WEB-ADMIN-1M"
       }
     ]
   }
 }
}

Sets this licenses description.

HTTP Request

PATCH https://zkm.myloc.de/api/licenses/{license}/ip

URL Parameters

Parameter Type Description
license int The id of your License.

PATCH Parameters

Parameter Type Description
description string Your custom description.

Response contents

This method command returns "200 - Ok" and the updated License Container object in JSON format on success.

Users

[GET] Subusers

curl -X GET "https://zkm.myloc.de/api/users/subusers"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "meta": {
    "total_pages": 0,
    "current_page": 0,
    "items_per_page": 0,
    "total_items": 0
  },
  "content": [
    {
      "handle": "123456",
      "active": true,
      "last_login": "2020-11-25T08:41:22.769Z",
      "lastname": "Doe",
      "firstname": "John",
      "email": "john.doe@example.com",
      "comment": "string"
    }
  ]
}

HTTP Request

GET https://zkm.myloc.de/api/users/subusers

Response contents

Returns a list with subusers you may see using the supplied access token. See User entity for more information.

Available Filter Targets

Title Key Type Description
Lastname lastname int -
Firstname firstname string -
Handle handle string Automatically generated username
Email email string -
Comment comment string A comment you may set yourself

Have a look at the Filter section for detailed instructions on how to use filters.

[GET] Specific Subuser

curl -X GET "https://zkm.myloc.de/api/users/subusers/{subuser}"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": {
    "handle": "123456",
    "active": true,
    "last_login": "2020-11-25T08:57:21.112Z",
    "lastname": "Doe",
    "firstname": "John",
    "email": "john.doe@example.com",
    "comment": "string",
    "client": {},
    "contracts": [
      {
        "id": 1,
        "entity_type": "default"
      }
    ]
  }
}

HTTP Request

GET https://zkm.myloc.de/api/users/subusers/{subuser}

URL Parameters

Parameter Type Description
subuser string The handle of a subuser

Response contents

Returns a subuser you may read using the supplied access token. See User entity for more information.

[GET] Contracts of Subuser

curl -X GET "https://zkm.myloc.de/api/users/subusers/{subuser}/contracts"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "meta": {
    "total_pages": 0,
    "current_page": 0,
    "items_per_page": 0,
    "total_items": 0
  },
  "content": [
    {
      "id": 1,
      "create_date": "2020-11-25T09:00:26.827Z",
      "hostname": "srv123456.example.server-hosting.expert",
      "product": {
        "id": 4728,
        "name": "vServer Windows M",
        "type": "string"
      },
      "sub_contracts": [],
      "bill_interval": "string",
      "paid_until_date": "2020-11-25T09:00:26.827Z",
      "interval_price": 0,
      "description": "My description",
      "entity_type": "default"
    }
  ]
}

HTTP Request

GET https://zkm.myloc.de/api/users/subusers/{subuser}/contracts

URL Parameters

Parameter Type Description
subuser string The handle of a subuser

Response contents

Returns a list with all contracts a subuser may use. See Contract entity for more information.

Available Filter Targets

Title Key Type Description
Contract ID id int
Create Date create_date string
Hostname hostname string
Product ID product int The Id of the underlying product
Description description string

Have a look at the Filter section for detailed instructions how to use filters.

[GET] Subuser Limit

curl -X GET "https://zkm.myloc.de/api/users/subusers/limit"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": {
    "subuser_limit": 5,
    "subuser_in_use": 4,
    "subuser_left": 1
  }
}

HTTP Request

GET https://zkm.myloc.de/api/users/subusers/limit

URL Parameters

None

Response contents

Returns the maximum number of subusers you may have, the current amount and the amount that's left. Note, that inactive subusers count towards your subuser limit and that you have to completely delete a subuser to lower your current subuser count.

Available Filter Targets

None

[GET] Subuser Contract Rights

curl -X GET "https://zkm.myloc.de/api/users/subusers/{subuser}/contracts/{contract}/roles"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": [
    "ROLE_USER_CONTRACT_WRITE",
    "ROLE_USER_SERVER_INSTALLATION_WRITE",
    "ROLE_USER_TRAFFIC_WRITE",
    "ROLE_USER_FIREWALL_WRITE",
    "ROLE_USER_NETWORK_IP_READ",
    "ROLE_USER_MONITORING_WRITE",
    "ROLE_USER_RDNS_WRITE",
    "ROLE_USER_VPS_VNC_WRITE",
    "ROLE_USER_VPS_BACKUP_WRITE"
  ]
}

HTTP Request

GET https://zkm.myloc.de/api/users/subusers/{subuser}/contracts/{contract}/roles

URL Parameters

Parameter Type Description
subuser string The handle of a subuser
contract int Id of a contract assigned to the subuser

Response contents

Returns a List of all rights the subuser has for the requested contract.

Available Filter Targets

None

Ips

[GET] Ips

curl -X GET "https://zkm.myloc.de/api/ips/v4?contract=123456"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 1
  },
  "content": [
    {
      "ip_address": "127.0.0.2",
      "subnet": "127.0.0.2/32",
      "gateway": "127.0.0.1",
      "main": "true",
      "rdns_entry": "seat.workspace.home",
      "rdns_entries": [
        {
          "domain": "seat.workspace.home",
          "time_to_live": "86400",
          "ip_address": "string"
        }
      ],
      "routing_type": "hostroute",
      "target_contract": "1337"
    }
  ]
}

Returns a list with all ips assigned to a contract.

HTTP Request

GET https://zkm.myloc.de/api/ips/{type}?contract={contract}

URL Parameters

Parameter Type Description
type string The type of Ip you want to get. Defaults to 'v4' if omitted.
contract int The Id of the contract you want to retrieve ips for.

Response contents

This method will return a 200 - OK and a list of IPs on success.

[GET] Ip

curl -X GET "https://zkm.myloc.de/api/ips/127.0.0.2"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": {
    "ip_address": "127.0.0.2",
    "subnet": "127.0.0.2/32",
    "gateway": "127.0.0.1",
    "main": "true",
    "rdns_entry": "seat.workspace.home",
    "rdns_entries": [
      {
        "domain": "seat.workspace.home",
        "time_to_live": "86400",
        "ip_address": "string"
      }
    ],
    "routing_type": "hostroute",
    "target_contract": "1337"
  }
}

Returns information about the specified ip.

HTTP Request

GET https://zkm.myloc.de/api/ips/{ip}

URL Parameters

Parameter Type Description
ip string The ip in dotted format.

Response contents

This method will return a 200 - OK and a IP object on success.

[PUT] Ip

curl -X PUT "https://zkm.myloc.de/api/ips/37.157.255.202"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json" 
-d "{ \"target\":  \"123456\", \"routing_type\": \"vlan\"}"

This is the POST body in structured JSON format:

{
  "target": "123456",
  "routing_type": "vlan"
}

This command will result in "202 - Accepted" on success.

HTTP Request

PUT https://zkm.myloc.de/api/ips/{ip}

URL Parameters

Parameter Type Description
ip string The ip in dotted format.

POST Parameters

Parameter Type Description
target int The target contracts id.
routing_type string "hostroute" or "vlan" to set the ips routing type.

Response contents

This method will return a 202 - Accepted on success.

[POST] Ip/RDNS

curl -X POST "https://zkm.myloc.de/api/ips/217.79.184.22/rdns"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json" 
-d "{ \"domain_name\": \"my.loc.dev\"}"

This is the POST body in structured JSON format:

{
  "domain_name": "my.loc.dev"
}

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "domain": "my.loc.dev",
  "time_to_life": 86400,
  "ip_address": "217.79.184.22"
}

Sets the specified ips rdns entry to the submitted value.

HTTP Request

POST https://zkm.myloc.de/api/ips/{ip}/rdns

URL Parameters

Parameter Type Description
ip string The ip in dotted format.

POST Parameters

Parameter Type Description
domain_name string The desired rdns value.

Response contents

This method will return a 200 - OK and information about the updated rdns entry on success.

Key Type Description
domain string The actual rdns value.
time_to_life int The TTL for the rdns entry.
ip_address string The ip the entry points to.

Error codes

Error Code Meaning
409 Conflict -- There is already an active rdns entry. You have to remove it before setting a new one.

[DELETE] Ip/RDNS

curl -X DELETE "https://zkm.myloc.de/api/ips/217.79.184.22/rdns"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json"

This command will result in "204" on success

Removes the current rdns entry from the submitted ip.

HTTP Request

DELETE https://zkm.myloc.de/api/ips/{ip}/rdns

URL Parameters

Parameter Type Description
ip string The ip in dotted format.

Response contents

This method will return a 204 on success.

Traffic

[GET] Traffic

curl -X GET "https://zkm.myloc.de/api/traffic/123456?start_date=2020-01-01&end_date=2020-01-03"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": {
    "data": [
      {
        "date": "2020-01-01",
        "date_traffic_data": [
          {
            "ip_address": "217.79.184.22",
            "incoming": 230711,
            "outgoing": 133259
          }
        ],
        "total_incoming": 230711,
        "total_outgoing": 133259
      },
      {
        "date": "2020-01-02",
        "date_traffic_data": [
          {
            "ip_address": "217.79.184.22",
            "incoming": 194396,
            "outgoing": 279830
          }
        ],
        "total_incoming": 194396,
        "total_outgoing": 279830
      },
      {
        "date": "2020-01-03",
        "date_traffic_data": [
          {
            "ip_address": "217.79.184.22",
            "incoming": 229523,
            "outgoing": 185163
          }
        ],
        "total_incoming": 229523,
        "total_outgoing": 185163
      }
    ],
    "total_incoming": 654630,
    "total_outgoing": 598252,
    "unit": "kilobyte"
  }
}

Returns the traffic for the specified contract and time frame, by day.

HTTP Request

GET https://zkm.myloc.de/api/traffic/{contract}?start_date={start_date}&end_date={end_date}

URL Parameters

Parameter Type Description
contract int The Id of the contract you want to retrieve ips for.
start_date string The start date (YYYY-MM-DD).
end_date string The end date (YYYY-MM-DD).

Response contents

This method will return a 200 - OK on success and an data array with one item per day.

Key Type Description Filterable
data array One item per day.
data.date string The day that this item represents.
data.date_traffic_data array Details about this days traffic. Each item represents one day and ip. If you got two ips, there will be two items per day, one for each ip.
data.date_traffic_data.ip_address string The ip the data in this item is about.
data.date_traffic_data.incoming int The incoming traffic.
data.date_traffic_data.outgoing int The outgoing traffic.
data.total_incoming int The total incoming traffic for all ips on this items date.
data.total_outgoing int The total outgoing traffic for all ips on this items date.
total_incoming int The total incoming traffic for all ips in the total timeframe.
total_outgoing int The total outgoing traffic for all ips in the total timeframe.
unit string The unit to interpret the traffic data with.

Store

Product Groups

[GET] Products

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success:

{
  "content": [
    {
      "id": 5645,
      "name": "Dedicated Server M",
      "brand": "hp_proliant",
      "type": "server",
      "mandator": "servhost",
      "alias": null,
      "order_form_type": "DedicatedServerM",
      "groups": [
        {
          "category": "dedicated_server",
          "name": "Dedizierte Server"
        }
      ],
      "properties": [],
      "price": [
        {
          "billing_currency": "EUR",
          "billing_price": 69.99,
          "display_currency": "EUR",
          "display_price": 69.99,
          "vat_included": true,
          "tax_rate": 19
        }
      ],
      "images": [
        {
          "format": "main",
          "url": "https://zkm.myloc.de/images/api/products/DL160_Gen9.png"
        }
      ],
      "availability": "in_stock"
    },
    {
      "id": 4611,
      "name": "Dedicated Server XL",
      "brand": "",
      "type": "server",
      "mandator": "servhost",
      "alias": "dedicated_server_xl",
      "order_form_type": "DedicatedServerL",
      "groups": [
        {
          "category": "dedicated_server",
          "name": "Dedizierte Server"
        }
      ],
      "properties": [],
      "price": [
        {
          "billing_currency": "EUR",
          "billing_price": 149.99,
          "display_currency": "EUR",
          "display_price": 149.99,
          "vat_included": true,
          "tax_rate": 19
        }
      ],
      "images": [
        {
          "format": "main",
          "url": "https://zkm.myloc.de/images/api/products/DL380Gen10.png"
        }
      ],
      "availability": null
    }
  ]
}

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products

URL Parameters

Parameter Type Description
store string The Id of the store you want to fetch products from (myloc, webtropia, servdiscount or your custom reseller stores id)

Response contents

This method will return a 200 - OK and a list of Products on success. For a detailed description of the Product entity refer to Product

[GET] Product Slugs

curl -X GET "https://zkm.myloc.de/api/stores/myloc/product-slugs" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success:

{
  "content": [
    {
      "slug": "product_slug_1",
      "alias": "string",
      "product": {
        "id": 5645,
        "name": "Dedicated Server M",
        "brand": "hp_proliant",
        "type": "server",
        "mandator": "servhost",
        "alias": null,
        "order_form_type": "DedicatedServerM",
        "groups": [
          {
            "category": "dedicated_server",
            "name": "Dedizierte Server"
          }
        ],
        "properties": [],
        "price": [
          {
            "billing_currency": "EUR",
            "billing_price": 69.99,
            "display_currency": "EUR",
            "display_price": 69.99,
            "vat_included": true,
            "tax_rate": 19
          }
        ],
        "images": [
          {
            "format": "main",
            "url": "https://zkm.myloc.de/images/api/products/DL160_Gen9.png"
          }
        ],
        "availability": "in_stock"
      }
    },
    {
      "slug": "product_slug_2",
      "alias": "string",
      "product": {
        "id": 4611,
        "name": "Dedicated Server XL",
        "brand": "",
        "type": "server",
        "mandator": "servhost",
        "alias": "dedicated_server_xl",
        "order_form_type": "DedicatedServerL",
        "groups": [
          {
            "category": "dedicated_server",
            "name": "Dedizierte Server"
          }
        ],
        "properties": [],
        "price": [
          {
            "billing_currency": "EUR",
            "billing_price": 149.99,
            "display_currency": "EUR",
            "display_price": 149.99,
            "vat_included": true,
            "tax_rate": 19
          }
        ],
        "images": [
          {
            "format": "main",
            "url": "https://zkm.myloc.de/images/api/products/DL380Gen10.png"
          }
        ],
        "availability": null
      }
    }
  ]
}

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/product-slugs

URL Parameters

/ Parameter | Type | Description --------- | ----------- | - store | string | The Id of the store you want to fetch products from (myloc, webtropia, servdiscount or your custom reseller stores id)

Response contents

This method will return a 200 - OK and a list of slugs with their associated Products on success. Other than product ids, those slugs will never change when the underlying product is modified. If you want to persist references to myLoc products in your system, you have to use the products slug, not its id! The slug can be used in most other API requests to refer to the product.

For a detailed description of the Product entity refer to Product

[GET] Product

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5645" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success:

{
  "content": {
    "id": 5645,
    "name": "Dedicated Server M",
    "brand": "hp_proliant",
    "type": "server",
    "mandator": "servhost",
    "alias": "my_dedicated_server_m",
    "order_form_type": "DedicatedServerM",
    "groups": [
      {
        "category": "dedicated_server",
        "name": "Dedizierte Server"
      }
    ],
    "properties": [],
    "price": [
      {
        "billing_currency": "EUR",
        "billing_price": 69.99,
        "display_currency": "EUR",
        "display_price": 69.99,
        "vat_included": true,
        "tax_rate": 19
      }
    ],
    "images": [
      {
        "format": "main",
        "url": "https://zkm.myloc.de/images/api/products/DL160_Gen9.png"
      }
    ],
    "availability": "in_stock"
  }
}

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}

URL Parameters

Parameter Type Description
store string The Id of the store you want to fetch products from (myloc, webtropia, servdiscount or your custom reseller stores id)
product string The Id or Slug of the product you want to query

Response contents

This method will return a 200 - OK and an array containing detailed Product information on success. For a detailed description of the Product entity refer to Product

[GET] Product Periods

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5645/periods" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success:

{
  "content": [
    {
      "slug": "1_MONTH_PREPAID",
      "discount": 0,
      "auto_quit": true,
      "prepaid_entire_duration": true,
      "contract_period": 1,
      "discount_price": 0,
      "additional_price": 0,
      "setup_price": 0,
      "setup_month": 0,
      "special_discount": null,
      "special_discount_month": null
    },
    {
      "slug": "1_MONTH_CONTRACT",
      "discount": 0,
      "auto_quit": false,
      "prepaid_entire_duration": false,
      "contract_period": 1,
      "discount_price": 0,
      "additional_price": 0,
      "setup_price": 0,
      "setup_month": 0,
      "special_discount": null,
      "special_discount_month": null
    },
    {
      "slug": "24_MONTH_PREPAID",
      "discount": 15,
      "auto_quit": true,
      "prepaid_entire_duration": true,
      "contract_period": 24,
      "discount_price": 0,
      "additional_price": 0,
      "setup_price": 0,
      "setup_month": 0,
      "special_discount": null,
      "special_discount_month": null
    },
    {
      "slug": "24_MONTH_CONTRACT_IN_ADVANCE",
      "discount": 15,
      "auto_quit": false,
      "prepaid_entire_duration": true,
      "contract_period": 24,
      "discount_price": 0,
      "additional_price": 0,
      "setup_price": 0,
      "setup_month": 0,
      "special_discount": null,
      "special_discount_month": null
    },
    {
      "slug": "24_MONTH_CONTRACT",
      "discount": 10,
      "auto_quit": false,
      "prepaid_entire_duration": false,
      "contract_period": 24,
      "discount_price": 0,
      "additional_price": 0,
      "setup_price": 0,
      "setup_month": 0,
      "special_discount": null,
      "special_discount_month": null
    }
  ]
}

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/periods

URL Parameters

Parameter Type Description
store string The Id of the store you want to fetch products from (myloc, webtropia, servdiscount or your custom reseller stores id).
product string The Id of the product you want to retrieve the periods for.

Response contents

This method will return a 200 - OK and an array containing all available Product Periods on success. For a detailed description of the Product entity refer to Product Periods

[GET] Product Requirements

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5631/requirements" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success:

{
  "content": [
    {
      "type": "backup-space",
      "required": true,
      "selectable": false,
      "slots": []
    },
    {
      "type": "battery-pack",
      "required": false,
      "selectable": true,
      "slots": []
    },
    {
      "type": "additional-network-card",
      "required": false,
      "selectable": true,
      "slots": []
    },
    {
      "type": "ip-net",
      "required": false,
      "selectable": false,
      "slots": []
    },
    {
      "type": "traffic-flat",
      "required": true,
      "selectable": true,
      "slots": []
    },
    {
      "type": "ip",
      "required": true,
      "selectable": true,
      "slots": []
    },
    {
      "type": "cpu",
      "required": true,
      "selectable": true,
      "slots": []
    },
    {
      "type": "hdds",
      "required": true,
      "slots": [
        {
          "slot_id": 1,
          "required": true
        },
        {
          "slot_id": 2,
          "required": true
        },
        {
          "slot_id": 3,
          "required": false
        },
        {
          "slot_id": 4,
          "required": false
        },
        {
          "slot_id": 5,
          "required": false
        },
        {
          "slot_id": 6,
          "required": false
        },
        {
          "slot_id": 7,
          "required": false
        },
        {
          "slot_id": 8,
          "required": false
        }
      ]
    },
    {
      "type": "installation",
      "required": true,
      "selectable": false,
      "slots": []
    },
    {
      "type": "ram",
      "required": true,
      "selectable": true,
      "slots": []
    },
    {
      "type": "raid-controller",
      "required": false,
      "selectable": true,
      "slots": []
    },
    {
      "type": "ilo",
      "required": true,
      "selectable": true,
      "slots": []
    }
  ]
}

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/requirements

URL Parameters

Parameter Type Description
store string The Id of the store you want to fetch products from (myloc, webtropia, servdiscount or your custom reseller stores id).
product string The Id of the product you want to retrieve the periods for.

Response contents

This method will return a 200 - OK and an array containing detailed information on required components on success.

Key Type Description
type string The type of requirement. See Requirement Types.
required boolean True if this component is required for the product. The product is not orderable without specifying this components configuration during the order process.
selectable boolean True if this component
slots array Description

Requirement types

Type Description
installation For internal use, nothing you have to deal with to place orders
backup-space For internal use, nothing you have to deal with to place orders
battery-pack For internal use, nothing you have to deal with to place orders
additional-network-card Whether or not you want an additional network interface in your machine
ip-net For internal use, nothing you have to deal with to place orders
traffic-flat For internal use, nothing you have to deal with to place orders
ip
cpu
hdds
ram
raid-controller
ilo

[GET] Product Software

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5631/software" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success:

{
  "content": [
    {
      "id": 911,
      "operating_system": {
        "id": 69,
        "name": "CentOS",
        "handle": "linux",
        "version": "7",
        "latest": false,
        "icons": {
          "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-16x16.png",
          "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-32x32.png",
          "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-64x64.png",
          "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-128x128.png",
          "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-256x256.png",
          "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/centos-512x512.png"
        }
      },
      "admintool": {
        "name": "Plain",
        "handle": "plain"
      },
      "language": null,
      "software_raid": true,
      "raid_level": [
        0,
        1
      ],
      "price": {
        "billing_currency": "EUR",
        "billing_price": 0,
        "display_currency": "EUR",
        "display_price": 0,
        "vat_included": true,
        "tax_rate": 19
      }
    },
    {
          "id": 1116,
          "operating_system": {
            "id": 73,
            "name": "Debian",
            "handle": "linux",
            "version": "8.0",
            "latest": false,
            "icons": {
              "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-16x16.png",
              "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-32x32.png",
              "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-64x64.png",
              "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-128x128.png",
              "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-256x256.png",
              "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-512x512.png"
            }
          },
          "admintool": {
            "name": "Plesk",
            "handle": "plesk"
          },
          "language": null,
          "software_raid": true,
          "raid_level": [
            0,
            1
          ],
          "price": {
            "billing_currency": "EUR",
            "billing_price": 0,
            "display_currency": "EUR",
            "display_price": 0,
            "vat_included": true,
            "tax_rate": 19
          }
        },
        {
              "id": 793,
              "operating_system": {
                "id": 66,
                "name": "Windows",
                "handle": "windows",
                "version": "2012R2",
                "latest": false,
                "icons": {
                  "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-16x16.png",
                  "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-32x32.png",
                  "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-64x64.png",
                  "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-128x128.png",
                  "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-256x256.png",
                  "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/windows-512x512.png"
                }
              },
              "admintool": {
                "name": "Plain",
                "handle": "plain"
              },
              "language": {
                "code": "ru",
                "name": "Russisch",
                "install_code": "ru-RU"
              },
              "software_raid": true,
              "raid_level": [
                1
              ],
              "price": {
                "billing_currency": "EUR",
                "billing_price": 50,
                "display_currency": "EUR",
                "display_price": 50,
                "vat_included": true,
                "tax_rate": 19
              }
        }
    ]
}

Returns a list containing information regarding installable software bundles (read: operating system/admintool) for the chosen product.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/software

URL Parameters

Parameter Type Description
store string The Id of the store you want to fetch products from (myloc, webtropia, servdiscount or your custom reseller stores id).
product string The Id of the product.

Response contents

This method will return a 200 - OK and an array containing detailed information on installable software on success. For a detailed description of the Product entity refer to Software

[GET] Product Specs

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5631/specs" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success:

{
  "content": [
    {
      "type": "processor",
      "slots": [
        {
          "slot_id": 1,
          "description": "AMD Epyc 7302P (16 x 3,0 GHz)"
        }
      ]
    },
    {
      "type": "ram",
      "slots": [
        {
          "slot_id": 1,
          "description": "64 GB DDR4 ECC"
        }
      ]
    },
    {
      "type": "harddrive",
      "slots": [
        {
          "slot_id": 1,
          "description": "450 GB NVMe SSD",
          "type": "Nvme"
        },
        {
          "slot_id": 1,
          "description": "2.000 GB HDD",
          "type": "HDD"
        },
        {
          "slot_id": 1,
          "description": "480 GB SSD",
          "type": "SSD"
        },
        {
          "slot_id": 2,
          "description": "450 GB NVMe SSD",
          "type": "Nvme"
        },
        {
          "slot_id": 2,
          "description": "2.000 GB HDD",
          "type": "HDD"
        },
        {
          "slot_id": 2,
          "description": "480 GB SSD",
          "type": "SSD"
        }
      ]
    },
    {
      "type": "performance",
      "slots": [
        {
          "slot_id": 1,
          "description": "16 x 2,9 GHz"
        }
      ]
    },
    {
      "type": "processor",
      "slots": [
        {
          "slot_id": 1,
          "description": "AMD Epyc 7302P (16 x 3,0 GHz)"
        }
      ]
    },
    {
      "type": "performance",
      "slots": [
        {
          "slot_id": 1,
          "description": "16 x 3,0 GHZ"
        }
      ]
    },
    {
      "type": "ram",
      "slots": [
        {
          "slot_id": 1,
          "description": "64 GB DDR4 ECC"
        }
      ]
    },
    {
      "type": "harddrive",
      "slots": [
        {
          "slot_id": 1,
          "description": "450 GB NVMe SSD",
          "type": "Nvme"
        },
        {
          "slot_id": 1,
          "description": "2.000 GB HDD",
          "type": "HDD"
        },
        {
          "slot_id": 1,
          "description": "480 GB SSD",
          "type": "SSD"
        },
        {
          "slot_id": 2,
          "description": "450 GB NVMe SSD",
          "type": "Nvme"
        },
        {
          "slot_id": 2,
          "description": "2.000 GB HDD",
          "type": "HDD"
        },
        {
          "slot_id": 2,
          "description": "480 GB SSD",
          "type": "SSD"
        }
      ]
    },
    {
      "type": "license",
      "slots": [
        {
          "slot_id": 1,
          "description": "Plesk - Web Admin Edition"
        }
      ]
    },
    {
      "type": "harddrive",
      "slots": [
        {
          "slot_id": 1,
          "description": "450 GB NVMe SSD",
          "type": "Nvme"
        },
        {
          "slot_id": 1,
          "description": "2.000 GB HDD",
          "type": "HDD"
        },
        {
          "slot_id": 1,
          "description": "480 GB SSD",
          "type": "SSD"
        },
        {
          "slot_id": 2,
          "description": "450 GB NVMe SSD",
          "type": "Nvme"
        },
        {
          "slot_id": 2,
          "description": "2.000 GB HDD",
          "type": "HDD"
        },
        {
          "slot_id": 2,
          "description": "480 GB SSD",
          "type": "SSD"
        }
      ]
    }
  ]
} 

Returns a list of components that can be selected for this product. This list contains only those components, that are included for the base price of the product. If you want to swap the included components, call the endpoint for the type of component you want to configure (e.g. Harddrives).

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/specs

URL Parameters

Parameter Type Description
store string The Id of the store you want to fetch products from (myloc, webtropia, servdiscount or your custom reseller stores id).
product string The Id of the product.

Response contents

This method will return a 200 - OK and a list containing information regarding possible included components for this product. Each item features the following keys:

Key Type Description filterable
type string The type of component (harddrive, ram, processor, license, ...) no
slots array Each item represents a slot for this type of component. no

Each slot entry may contain the following keys:

Key Type Description filterable
slot_id int Number of this slot, starting with 1 no
description string Description of this component no
type string In case of harddrives: the type of drive (Nvme, SSD, HDD) no

[GET] Product HDDs

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5631/hdds" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success (truncated for displaying reasons):

{
  "content": [
    {
      "product": {
        "id": 3965,
        "name": "480 GB SSD",
        "type": "ssd",
        "mandator": "servhost",
        "alias": "480_gb_ssd",
        "order_form_type": null,
        "groups": [],
        "properties": [],
        "price": [
          {
            "billing_currency": "EUR",
            "billing_price": 0,
            "display_currency": "EUR",
            "display_price": 0,
            "vat_included": true,
            "tax_rate": 19
          }
        ],
        "images": [],
        "availability": null
      },
      "slot": 8,
      "default": false,
      "price": [
        {
          "billing_currency": "EUR",
          "billing_price": 15,
          "display_currency": "EUR",
          "display_price": 15,
          "vat_included": true,
          "tax_rate": 19
        }
      ]
    },
    {
      "product": {
        "id": 3966,
        "name": "960 GB SSD",
        "type": "ssd",
        "mandator": "servhost",
        "alias": "960_gb_ssd",
        "order_form_type": null,
        "groups": [],
        "properties": [],
        "price": [
          {
            "billing_currency": "EUR",
            "billing_price": 0,
            "display_currency": "EUR",
            "display_price": 0,
            "vat_included": true,
            "tax_rate": 19
          }
        ],
        "images": [],
        "availability": null
      },
      "slot": 8,
      "default": false,
      "price": [
        {
          "billing_currency": "EUR",
          "billing_price": 20,
          "display_currency": "EUR",
          "display_price": 20,
          "vat_included": true,
          "tax_rate": 19
        }
      ]
    }
  ]
}

Returns a list with detailed information about the available harddrives for this server.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/hdds

URL Parameters

Parameter Type Description
store string The Id of the store you want to fetch possible drive configurations from (myloc, webtropia, servdiscount or your custom reseller stores id).
product string The Id of the product.

Response contents

This method will return a 200 - OK and a list containing information regarding possible drives for this product. Each item features the following keys:

Key Type Description filterable
product object A selectable hdd Product to put into the hdd slots of the queried product. For details on product related response content refer to Product no
slot int The slot which can take this drive. The same drive may appear multiple times for different slots. no
default boolean True if this drive is the default drive for this slot, as returned when querying Product Specs. False otherwise no
price object Price information for this drive. This price is the amount to be added to the products base price returned when querying for a Product. Refer to Price for details regarding price related response content no

[POST] Available Raid-Levels for HDD Container Product

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5636/raid-levels/5634"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This is the POST body in structured JSON format:

{
  "slots":
    [
      {
        "product":5643,
        "slot":1
      },
      {
        "product":5643,
        "slot":2
      },
      {
        "product":5643,
        "slot":3
      },
      {
        "product":5643,
        "slot":4
      },
      {
        "product":5643,
        "slot":5
      },
      {
        "product":5643, 
        "slot":6
      }
    ]
}

The above command returns "200 - OK" and the following JSON on success:

{
  "content":
    [
      0,
      1,
      5,
      10
    ]
}

Returns information about the available raid levels, given the chosen harddrive configuration and raid controller.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/raid-levels/{hdd_container_product}

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
product string The Id of the underlying product (read: server).
hdd_container_product string The Id of the hdd container product. To get this id, query for [GET] Product Subproducts of your target product and look for subproducts with type "hdds".

POST Parameters

The body of your POST request must contain an array carrying information regarding the chosen drives for each slot. Each item holds the following values:

Parameter Type Description
slot int The id of the slot. Get details regarding the number of slots and the possible slot configuration by querying Product HDDs.
product int The id of the product inserted in this slot. For a list of possible values for each slot refer to Product HDDs.

Response contents

This method will return a 200 - OK and a list of integers representing the possible raid levels for the supplied configuration.

[GET] Product Licenses

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5637/licenses?inclusive=false"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success (truncated for displaying reasons):

{
  "meta": {
    "total_pages": 6,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 55
  },
  "content": [
    {
      "id": 4942,
      "name": "Plesk - Web Admin Edition",
      "brand": null,
      "type": "license",
      "mandator": "servdiscount",
      "alias": "plesk_webadmin",
      "order_form_type": null,
      "groups": [
        {
          "category": "base_license",
          "name": "Basislizenz"
        }
      ],
      "properties": [],
      "price": [
        {
          "billing_currency": "EUR",
          "billing_price": 4.9,
          "display_currency": "EUR",
          "display_price": 4.9,
          "vat_included": true,
          "tax_rate": 19
        }
      ],
      "images": [
        {
          "format": "main",
          "url": "https://zkm.myloc.de/images/api/products/plesk-12-web-admin-1m.svg"
        }
      ],
      "availability": null
    },
    {
      "id": 4943,
      "name": "Plesk - Web Pro Edition",
      "brand": null,
      "type": "license",
      "mandator": "servdiscount",
      "alias": "plesk_webpro",
      "order_form_type": null,
      "groups": [
        {
          "category": "base_license",
          "name": "Basislizenz"
        }
      ],
      "properties": [],
      "price": [
        {
          "billing_currency": "EUR",
          "billing_price": 7,
          "display_currency": "EUR",
          "display_price": 7,
          "vat_included": true,
          "tax_rate": 19
        }
      ],
      "images": [
        {
          "format": "main",
          "url": "https://zkm.myloc.de/images/api/products/plesk-12-web-pro-1m.svg"
        }
      ],
      "availability": null
    }
  ] 
}

List all licenses that can be purchased for this product.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/licenses?inclusive={inclusive}

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
product int The id of the product.
inclusive bool Optional parameter. If true this will return only licenses that are included in the products base price, without extra charge. Defaults to false.

Response contents

This method will return a 200 - OK and a list containing available licenses for this product. Each license is itself a Product entity.

Key Type Description filterable
id int The id of the product entity representing this license. no
name string The name of this Software. no
brand string - no
type string Describes what kind of software this is. Will be "license" for all items returned when querying for /licenses. no
mandator string Used internally. no
alias string For internal use only. no
order_form_type string Used internally. no
groups array Information for internal use. See Product Group for possible values. yes, via groups.name
properties array Some properties of this product. For internal use. no
price object See Price no
images object Array containing product images. For internal use no
availability boolean For internal use. no

[GET] Product Subproducts

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5637/subproducts"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success (truncated for displaying reasons):

{
  "content": [
    {
      "included": true,
      "optional": false,
      "product": {
        "id": 5251,
        "name": "Enthaltener Backupspace",
        "type": "backup-space",
        "mandator": "servhost",
        "alias": "included_backupspace",
        "order_form_type": null,
        "groups": [],
        "properties": [],
        "price": [
          {
            "billing_currency": "EUR",
            "billing_price": 0,
            "display_currency": "EUR",
            "display_price": 0,
            "vat_included": true,
            "tax_rate": 19
          }
        ],
        "images": [],
        "availability": null
      },
      "additional_options": {}
    },
    {
      "included": false,
      "optional": true,
      "product": {
        "id": 4573,
        "name": "288 GB DDR4 ECC",
        "type": "ram",
        "mandator": "servhost",
        "alias": "288_gb_ddr4_ecc",
        "order_form_type": null,
        "groups": [],
        "properties": [],
        "price": [
          {
            "billing_currency": "EUR",
            "billing_price": 140,
            "display_currency": "EUR",
            "display_price": 140,
            "vat_included": true,
            "tax_rate": 19
          }
        ],
        "images": [],
        "availability": null
      },
      "additional_options": {}
    }
  ]
}

Returns a list of all subproducts that may be added to this product - both optional and mandatory ones.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/subproducts

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
product int The id of the product.

Response contents

This method will return a 200 - OK and a list containing all possible subproducts for this product. Each entry consists of the following fields:

Key Type Description filterable
included bool Whether or not this subproduct is included when purchasing the parent product. no
optional bool Whether or not this subproduct is optional. A HDD Container subproduct for example is not optional, whereas a Battery Pack subproduct is no
product object Information about this subproduct. Refer to Product. no
additional_options array For internal use. no

[GET] Product Variations

curl -X GET "https://zkm.myloc.de/api/stores/myloc/products/5637/variations"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success (truncated for displaying reasons):

{
  "content": [
    {
      "view_type": "product_compare",
      "description": null,
      "products": [
        {
          "product": {
            "id": 5631,
            "name": "Epyc Server M",
            "brand": "",
            "type": "server",
            "mandator": "servhost",
            "alias": null,
            "order_form_type": "DedicatedEpycServer",
            "groups": [
              {
                "category": "dedicated_server",
                "name": "Dedizierte Server"
              }
            ],
            "properties": [],
            "price": [
              {
                "billing_currency": "EUR",
                "billing_price": 129.99,
                "display_currency": "EUR",
                "display_price": 129.99,
                "vat_included": true,
                "tax_rate": 19
              }
            ],
            "images": [
              {
                "format": "main",
                "url": "https://zkm.myloc.de/images/api/products/EpycServer.png"
              }
            ],
            "availability": "in_stock"
          },
          "sort": 1
        },
        {
          "product": {
            "id": 5637,
            "name": "Epyc Server L",
            "brand": "",
            "type": "server",
            "mandator": "servhost",
            "alias": null,
            "order_form_type": "DedicatedEpycServer",
            "groups": [
              {
                "category": "dedicated_server",
                "name": "Dedizierte Server"
              }
            ],
            "properties": [],
            "price": [
              {
                "billing_currency": "EUR",
                "billing_price": 189.99,
                "display_currency": "EUR",
                "display_price": 189.99,
                "vat_included": true,
                "tax_rate": 19
              }
            ],
            "images": [
              {
                "format": "main",
                "url": "https://zkm.myloc.de/images/api/products/EpycServer.png"
              }
            ],
            "availability": "in_stock"
          },
          "sort": 2
        }
      ]
    }
  ]
}

Returns a list with other products similar to the product you queried for.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/products/{product}/variations

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
product int The id of the product.

Response contents

This method will return a 200 - OK and a list containing products similar to the product you queried for.

Key Type Description filterable
view_type string For internal use. no
description string For internal use. no
products array Array containing similar products. Refer to Products. no
products.sort For internal use. no

[GET] Store Offers

curl -X GET "https://zkm.myloc.de/api/stores/servdiscount/offers"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success (truncated for displaying reasons):

{
  "content": [
    {
      "id": 402,
      "alias": "offer_sd_hp_1240v5_2x240_gb_ssd_e3_1240v5_32_gb_ram",
      "active": true,
      "fixed": true,
      "product": {
        "id": 5567,
        "name": "SD-HP-1240v5",
        "brand": "hp_proliant",
        "type": "server",
        "mandator": "servdiscount",
        "alias": "sd_hp_1240v5",
        "order_form_type": "DedicatedServerM",
        "groups": [
          {
            "category": "dedicated_server",
            "name": "Dedizierte Server"
          }
        ],
        "properties": [],
        "price": [
          {
            "billing_currency": "EUR",
            "billing_price": 45,
            "display_currency": "EUR",
            "display_price": 45,
            "vat_included": true,
            "tax_rate": 19
          }
        ],
        "images": [],
        "availability": "in_stock"
      },
      "exclusive": false,
      "price": [
        {
          "billing_currency": "EUR",
          "billing_price": 45,
          "display_currency": "EUR",
          "display_price": 45,
          "vat_included": true,
          "tax_rate": 19
        }
      ]
    }
  ]
}

Returns a list of special offers for this store. As the only store working with offers is servdiscount, all other stores will return empty responses

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/offers

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).

Response contents

This method will return a 200 - OK and a list with all offers for this store. For a description refer to Offer.

[GET] Store Offer

curl -X GET "https://zkm.myloc.de/api/stores/servdiscount/offers/offer_sd_hp_1240v5_2x240_gb_ssd_e3_1240v5_32_gb_ram"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success (truncated for displaying reasons):

{
  "content": {
    "id": 402,
    "alias": "offer_sd_hp_1240v5_2x240_gb_ssd_e3_1240v5_32_gb_ram",
    "active": true,
    "fixed": true,
    "product": {
      "id": 5567,
      "name": "SD-HP-1240v5",
      "brand": "hp_proliant",
      "type": "server",
      "mandator": "servdiscount",
      "alias": "sd_hp_1240v5",
      "order_form_type": "DedicatedServerM",
      "groups": [
        {
          "category": "dedicated_server",
          "name": "Dedizierte Server"
        }
      ],
      "properties": [],
      "price": [
        {
          "billing_currency": "EUR",
          "billing_price": 45,
          "display_currency": "EUR",
          "display_price": 45,
          "vat_included": true,
          "tax_rate": 19
        }
      ],
      "images": [],
      "availability": "in_stock"
    },
    "items": [
      {
        "id": 686,
        "product": {
          "id": 3745,
          "name": "240 GB SSD",
          "brand": "",
          "type": "ssd",
          "mandator": "servdiscount",
          "alias": "240_gb_ssd",
          "order_form_type": null,
          "groups": [],
          "properties": [],
          "price": [
            {
              "billing_currency": "EUR",
              "billing_price": 0,
              "display_currency": "EUR",
              "display_price": 0,
              "vat_included": true,
              "tax_rate": 19
            }
          ],
          "images": [],
          "availability": null
        },
        "type": "hdd",
        "slot_id": 2
      }
    ],
    "order_form": {},
    "exclusive": false,
    "price": [
      {
        "billing_currency": "EUR",
        "billing_price": 45,
        "display_currency": "EUR",
        "display_price": 45,
        "vat_included": true,
        "tax_rate": 19
      }
    ]
  }
}

Returns details for this offer, including its components.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/offers/{offer}

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
offer string The Id or alias of this offer.

Response contents

This method will return a 200 - OK and JSON containing the offers details as well as its components.

Key Type Description filterable
id int The offers unique identifier. no
alias string A unique string representing this offer. no
active boolean True if this offer is active and orderable. False otherwise. no
fixed boolean True if it is not possible to modify the components of this offer. False otherwise no
product object Refer to Product for further information. no
exclusive boolean If true there may be no more than one of those in your cart during checkout. no
items array A list of items (basically products) contained in this offer. no
price object Price information. Refer to Price for further information. no

[GET] Store Offer Subproducts

Returns subproducts for the product in this offer.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/offers/{offer}/subproducts

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
offer string The Id or alias of this offer.

Response contents

This method will return a 200 - OK and JSON containing a list with subproducts on success. Refer to Product Subproducts for details on subproducts.

[GET] Store Offer Requirements

Returns the requirements for the product in this offer. This method is similar to its counterpart in the section concerning Products in this documentation. Refer to Product Requirements for details.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/offers/{offer}/subproducts

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
offer string The Id or alias of this offer.

Response contents

This method will return a 200 - OK and JSON containing a list with product requirements on success. Refer to Product Requirements for details.

[GET] Store Offer HDDs

This method is similar to its counterpart in the section concerning Products in this documentation. Refer to Product HDDs for details.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/offers/{offer}/hdds

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
offer string The Id or alias of this offer.

Response contents

This method will return a 200 - OK and JSON containing information about the products storage configuration on success. Refer to Product HDDs for details.

[POST] Store Cart

curl -X POST "https://zkm.myloc.de/api/stores/myloc/carts?currency=EUR"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json" 
-d"{"items":[{"product":5631,"options":{"raid_level":0},"sub_items":{"cpu":{"product":5632},"ram":{"product":3958},"hdds":{"1":{"product":5146},"2":{"product":5146}},"install":{"software":1809}},"period":"1_MONTH_CONTRACT","amount":1}]}"

This is the POST body in structured JSON format:

{
  "items": [
    {
      "product": 5631,
      "options": {
        "raid_level": 0
      },
      "sub_items": {
        "cpu": {
          "product": 5632
        },
        "ram": {
          "product": 3958
        },
        "hdds": {
          "1": {
            "product": 5146
          },
          "2": {
            "product": 5146
          }
        },
        "install": {
          "software": 1809
        }
      },
      "period": "1_MONTH_CONTRACT",
      "amount": 1
    }
  ]
}

The above command returns "200 - OK" and redirects to [GET] Store Cart

Use this method to create a cart containing the desired product and your chosen configuration. You don't have to post the full items with all desired subitems, including every possible field. The corresponding ids are sufficimonient.

HTTP Request

POST https://zkm.myloc.de/api/stores/{store}/carts?currency={currency}

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
currency string The Id of the currency you want the prices to appear in.

POST Parameters

Parameter Type Description
items array Array containing all Items you want to put in your cart. See Cart Item.

Response contents

This method command returns "200 - OK" and redirects to [GET] Store Cart.

[GET] Store Cart

curl -X GET "https://zkm.myloc.de/api/stores/myloc/carts/3d71ae68-d46a-441d-b3f9-a143cd7593ab?currency=EUR&access_key=95gtgj1p16w4wcccs8csk8000cwss8wco0cg80csco4scsc4o" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following JSON on success (truncated for displaying reasons):

{
  "content": {
    "id": "3d71ae68-d46a-441d-b3f9-a143cd7593ab",
    "access_key": "95gtgj1p16w4wcccs8csk8000cwss8wco0cg80csco4scsc4o",
    "items": [
      {
        "sub_items": {
          "hdds": [
            {
              "options": [],
              "sub_items": [
                {
                  "options": [],
                  "sub_items": [],
                  "price": [
                    {
                      "billing_currency": "EUR",
                      "billing_price": 0,
                      "display_currency": "EUR",
                      "display_price": 0,
                      "vat_included": true,
                      "tax_rate": 19,
                      "interval_type": "MONTH",
                      "interval_duration": -1,
                      "special": false
                    }
                  ],
                  "subitem_type": "product_hdd",
                  "product": {
                    "id": 5146,
                    "name": "450 GB NVMe SSD",
                    "brand": "",
                    "type": "nvme",
                    "mandator": "servhost",
                    "alias": "450_gb_nvme",
                    "order_form_type": null,
                    "groups": [],
                    "properties": [],
                    "price": [
                      {
                        "billing_currency": "EUR",
                        "billing_price": 0,
                        "display_currency": "EUR",
                        "display_price": 0,
                        "vat_included": true,
                        "tax_rate": 19
                      }
                    ],
                    "images": [],
                    "availability": null
                  },
                  "slot": 1
                },
                {
                  "options": [],
                  "sub_items": [],
                  "price": [
                    {
                      "billing_currency": "EUR",
                      "billing_price": 0,
                      "display_currency": "EUR",
                      "display_price": 0,
                      "vat_included": true,
                      "tax_rate": 19,
                      "interval_type": "MONTH",
                      "interval_duration": -1,
                      "special": false
                    }
                  ],
                  "subitem_type": "product_hdd",
                  "product": {
                    "id": 5146,
                    "name": "450 GB NVMe SSD",
                    "brand": "",
                    "type": "nvme",
                    "mandator": "servhost",
                    "alias": "450_gb_nvme",
                    "order_form_type": null,
                    "groups": [],
                    "properties": [],
                    "price": [
                      {
                        "billing_currency": "EUR",
                        "billing_price": 0,
                        "display_currency": "EUR",
                        "display_price": 0,
                        "vat_included": true,
                        "tax_rate": 19
                      }
                    ],
                    "images": [],
                    "availability": null
                  },
                  "slot": 2
                }
              ],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19,
                  "interval_type": "MONTH",
                  "interval_duration": -1,
                  "special": false
                }
              ],
              "subitem_type": "product_hdd_container",
              "product": {
                "id": 5633,
                "name": "Festplatten ",
                "brand": "",
                "type": "hdds",
                "mandator": "servhost",
                "alias": null,
                "order_form_type": null,
                "groups": [],
                "properties": [],
                "price": [
                  {
                    "billing_currency": "EUR",
                    "billing_price": 0,
                    "display_currency": "EUR",
                    "display_price": 0,
                    "vat_included": true,
                    "tax_rate": 19
                  }
                ],
                "images": [],
                "availability": null
              }
            }
          ],
          "installation": [
            {
              "options": [],
              "sub_items": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19,
                  "interval_type": "MONTH",
                  "interval_duration": -1,
                  "special": false
                }
              ],
              "subitem_type": "software",
              "product": {
                "id": 4493,
                "name": "Linux",
                "brand": "",
                "type": "installation",
                "mandator": "servhost",
                "alias": null,
                "order_form_type": null,
                "groups": [],
                "properties": [],
                "price": [
                  {
                    "billing_currency": "EUR",
                    "billing_price": 0,
                    "display_currency": "EUR",
                    "display_price": 0,
                    "vat_included": true,
                    "tax_rate": 19
                  }
                ],
                "images": [],
                "availability": null
              },
              "software": {
                "id": 1809,
                "operating_system": {
                  "id": 96,
                  "name": "Debian",
                  "handle": "linux",
                  "version": "10.0",
                  "latest": true,
                  "icons": {
                    "16x16": "https:\/\/zkm.myloc.de\/images\/api\/icons\/operatingsystems\/debian-16x16.png",
                    "32x32": "https:\/\/zkm.myloc.de\/images\/api\/icons\/operatingsystems\/debian-32x32.png",
                    "64x64": "https:\/\/zkm.myloc.de\/images\/api\/icons\/operatingsystems\/debian-64x64.png",
                    "128x128": "https:\/\/zkm.myloc.de\/images\/api\/icons\/operatingsystems\/debian-128x128.png",
                    "256x256": "https:\/\/zkm.myloc.de\/images\/api\/icons\/operatingsystems\/debian-256x256.png",
                    "512x512": "https:\/\/zkm.myloc.de\/images\/api\/icons\/operatingsystems\/debian-512x512.png"
                  }
                },
                "admintool": {
                  "name": "Plain",
                  "handle": "plain"
                },
                "language": null,
                "software_raid": true,
                "raid_level": [
                  0,
                  1
                ],
                "price": null
              }
            }
          ],
          "cpu": [
            {
              "options": [],
              "sub_items": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19,
                  "interval_type": "MONTH",
                  "interval_duration": -1,
                  "special": false
                }
              ],
              "subitem_type": "product",
              "product": {
                "id": 5632,
                "name": "AMD Epyc 7302P (16 x 3,0 GHz)",
                "brand": "",
                "type": "cpu",
                "mandator": "servhost",
                "alias": null,
                "order_form_type": null,
                "groups": [],
                "properties": [],
                "price": [
                  {
                    "billing_currency": "EUR",
                    "billing_price": 0,
                    "display_currency": "EUR",
                    "display_price": 0,
                    "vat_included": true,
                    "tax_rate": 19
                  }
                ],
                "images": [],
                "availability": null
              }
            }
          ],
          "ram": [
            {
              "options": [],
              "sub_items": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19,
                  "interval_type": "MONTH",
                  "interval_duration": -1,
                  "special": false
                }
              ],
              "subitem_type": "product",
              "product": {
                "id": 3958,
                "name": "64 GB DDR4 ECC",
                "brand": null,
                "type": "ram",
                "mandator": "servhost",
                "alias": "64_gb_ram",
                "order_form_type": null,
                "groups": [],
                "properties": [],
                "price": [
                  {
                    "billing_currency": "EUR",
                    "billing_price": 0,
                    "display_currency": "EUR",
                    "display_price": 0,
                    "vat_included": true,
                    "tax_rate": 19
                  }
                ],
                "images": [],
                "availability": null
              }
            }
          ],
          "licenses": [
            {
              "options": [],
              "sub_items": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19,
                  "interval_type": "MONTH",
                  "interval_duration": -1,
                  "special": false
                }
              ],
              "subitem_type": "product_license_container",
              "product": {
                "id": 4226,
                "name": "License Container",
                "brand": null,
                "type": "licenses",
                "mandator": "servhost",
                "alias": null,
                "order_form_type": null,
                "groups": [],
                "properties": [],
                "price": [
                  {
                    "billing_currency": "EUR",
                    "billing_price": 0,
                    "display_currency": "EUR",
                    "display_price": 0,
                    "vat_included": true,
                    "tax_rate": 19
                  }
                ],
                "images": [],
                "availability": null
              }
            }
          ]
        },
        "amount": 1,
        "price": [
          {
            "billing_currency": "EUR",
            "billing_price": 129.99,
            "display_currency": "EUR",
            "display_price": 129.99,
            "vat_included": true,
            "tax_rate": 19,
            "interval_type": "MONTH",
            "interval_duration": -1,
            "special": false
          }
        ],
        "type": "server",
        "product": {
          "id": 5631,
          "name": "Epyc Server M",
          "brand": "",
          "type": "server",
          "mandator": "servhost",
          "alias": null,
          "order_form_type": "DedicatedEpycServer",
          "groups": [
            {
              "category": "dedicated_server",
              "name": "Dedizierte Server"
            }
          ],
          "properties": [],
          "price": [
            {
              "billing_currency": "EUR",
              "billing_price": 129.99,
              "display_currency": "EUR",
              "display_price": 129.99,
              "vat_included": true,
              "tax_rate": 19
            }
          ],
          "images": [
            {
              "format": "main",
              "url": "https:\/\/zkm.myloc.de\/images\/api\/products\/EpycServer.png"
            }
          ],
          "availability": "in_stock"
        },
        "period": {
          "slug": "1_MONTH_CONTRACT",
          "auto_quit": false,
          "prepaid_entire_duration": false,
          "contract_period": 1
        },
        "options": {
          "raid_level": 0
        }
      }
    ],
    "referral": null,
    "coupon": null,
    "price": [
      {
        "billing_currency": "EUR",
        "billing_price": 129.99,
        "display_currency": "EUR",
        "display_price": 129.99,
        "vat_included": true,
        "tax_rate": 19,
        "interval_type": "MONTH",
        "interval_duration": -1,
        "special": false
      }
    ],
    "total_amount": {
      "billing_currency": "EUR",
      "billing_price": 129.99,
      "display_currency": "EUR",
      "display_price": 129.99,
      "vat_included": true,
      "tax_rate": 19
    }
  }
}

HTTP Request

POST https://zkm.myloc.de/api/stores/{store}/carts/{cart}?currency={currency}&access_key={access_key}

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
currency string The Id of the currency you want the prices to appear in.
access_key string The access_key returned when you called [POST] Store Cart.

Response contents

This method will return a 200 - OK and JSON containing the Cart object on success.

[PUT] Store Cart

curl -X POST "https://zkm.myloc.de/api/stores/myloc/carts/3d71ae68-d46a-441d-b3f9-a143cd7593ab?access_key=95gtgj1p16w4wcccs8csk8000cwss8wco0cg80csco4scsc4o&currency=EUR"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json" 
-d "{"items":[{"product":5631,"options":{"raid_level":0},"sub_items":{"licenses":{},"cpu":{"product":5632},"ram":{"product":3958},"install":{"software":1809},"hdds":{"1":{"product":5146},"2":{"product":5146}}},"period":"1_MONTH_CONTRACT","amount":1},{"product":5645,"options":{"raid_level":0},"sub_items":{"licenses":{},"cpu":{"product":5646},"ram":{"product":5148},"install":{"software":1809},"hdds":{"1":{"product":3956},"2":{"product":3956}}},"period":"1_MONTH_CONTRACT","amount":1},{"product":4611,"options":{"raid_level":0},"sub_items":{"cpu":{"product":4584},"ram":{"product":3958},"hdds":{"1":{"product":3951},"2":{"product":3951}},"install":{"software":1809}},"period":"1_MONTH_CONTRACT","amount":1}]}"

This is the POST body in structured JSON format:

{
  "items": [
    {
      "product": 5631,
      "options": {
        "raid_level": 0
      },
      "sub_items": {
        "licenses": {},
        "cpu": {
          "product": 5632
        },
        "ram": {
          "product": 3958
        },
        "install": {
          "software": 1809
        },
        "hdds": {
          "1": {
            "product": 5146
          },
          "2": {
            "product": 5146
          }
        }
      },
      "period": "1_MONTH_CONTRACT",
      "amount": 1
    },
    {
      "product": 5645,
      "options": {
        "raid_level": 0
      },
      "sub_items": {
        "licenses": {},
        "cpu": {
          "product": 5646
        },
        "ram": {
          "product": 5148
        },
        "install": {
          "software": 1809
        },
        "hdds": {
          "1": {
            "product": 3956
          },
          "2": {
            "product": 3956
          }
        }
      },
      "period": "1_MONTH_CONTRACT",
      "amount": 1
    },
    {
      "product": 4611,
      "options": {
        "raid_level": 0
      },
      "sub_items": {
        "cpu": {
          "product": 4584
        },
        "ram": {
          "product": 3958
        },
        "hdds": {
          "1": {
            "product": 3951
          },
          "2": {
            "product": 3951
          }
        },
        "install": {
          "software": 1809
        }
      },
      "period": "1_MONTH_CONTRACT",
      "amount": 1
    }
  ]
}

The above command returns "200 - OK" and redirects to [GET] Store Cart

Use this call when you wat to add items to an existing Cart.

HTTP Request

PUT https://zkm.myloc.de/api/stores/{store}/carts/{cart}?access_key={access_key}&currency={currency}

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
cart string The unique identifier of your existing Cart.
access_key string The access_key of your existing Cart.
currency string The Id of the currency you want the prices to appear in.

POST Parameters

The body of this request is similar to calling [POST] Store Cart:

Parameter Type Description
items array Array containing all Items you want to put in your cart. See Cart Item.

Response contents

This method command returns "200 - OK" and redirects to [GET] Store Cart.

[POST] Store Cart Order

curl -X POST "https://zkm.myloc.de/api/stores/myloc/carts/3d71ae68-d46a-441d-b3f9-a143cd7593ab/order?access_key=95gtgj1p16w4wcccs8csk8000cwss8wco0cg80csco4scsc4o&currency=EUR"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json" 
-d "{"total_amount":129.99}"

This is the POST body in structured JSON format:

{
  "total_amount": 129.99,
  "subuser": "123456-1"
}

The above command returns "201 - Created" and the following structured JSON on success:

{
  "content": {
    "id": "21ad7376-9642-4630-a0b7-835f8a0be156",
    "secure_access_token": "dfecc4f7b0b9954aa8f0d3b483626b0c",
    "date": "2020-02-06T09:47:15+0100",
    "total_amount": 129.99,
    "prepaid": false,
    "payment_required": false,
    "pay_date": "2020-02-06T09:47:15+0100",
    "validation_date": null,
    "is_rejected": false,
    "client": {
      "id": 123456
    },
    "items": [
      {
        "sub_items": [
          {
            "id": "22351ce7-3dd2-416f-8581-f037e82bd27d",
            "options": null,
            "type": "product_licenses",
            "product": {
              "id": 4226,
              "name": "License Container",
              "brand": null,
              "type": "licenses",
              "mandator": "servhost",
              "alias": null,
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            }
          },
          {
            "id": "36d9a085-aca5-4331-99b8-2721b3d3ca55",
            "options": [],
            "type": "product",
            "product": {
              "id": 5632,
              "name": "AMD Epyc 7302P (16 x 3,0 GHz)",
              "brand": "",
              "type": "cpu",
              "mandator": "servhost",
              "alias": null,
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            }
          },
          {
            "id": "8437a013-326f-4ab5-bc76-e9d1d66770a5",
            "options": [],
            "type": "product",
            "product": {
              "id": 3958,
              "name": "64 GB DDR4 ECC",
              "brand": null,
              "type": "ram",
              "mandator": "servhost",
              "alias": "64_gb_ram",
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            }
          },
          {
            "id": "1c837d29-1afe-42ed-9d56-406fb884762c",
            "options": [],
            "type": "software",
            "product": {
              "id": 4493,
              "name": "Linux",
              "brand": "",
              "type": "installation",
              "mandator": "servhost",
              "alias": null,
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            },
            "software": {
              "id": 1809,
              "operating_system": {
                "id": 96,
                "name": "Debian",
                "handle": "linux",
                "version": "10.0",
                "latest": true,
                "icons": {
                  "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-16x16.png",
                  "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-32x32.png",
                  "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-64x64.png",
                  "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-128x128.png",
                  "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-256x256.png",
                  "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-512x512.png"
                }
              },
              "admintool": {
                "name": "Plain",
                "handle": "plain"
              },
              "language": null,
              "software_raid": true,
              "raid_level": [
                0,
                1
              ],
              "price": null
            }
          },
          {
            "id": "0f8faa03-0ac2-4689-a9b2-f16704845f96",
            "options": [],
            "type": "product_hdds",
            "product": {
              "id": 5633,
              "name": "Festplatten ",
              "brand": "",
              "type": "hdds",
              "mandator": "servhost",
              "alias": null,
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            }
          }
        ],
        "id": "5e73b01b-a182-4412-a8c8-4e80881f163c",
        "type": "server",
        "product": {
          "id": 5631,
          "name": "Epyc Server M",
          "brand": "",
          "type": "server",
          "mandator": "servhost",
          "alias": null,
          "order_form_type": "DedicatedEpycServer",
          "groups": [
            {
              "category": "dedicated_server",
              "name": "Dedizierte Server"
            }
          ],
          "properties": [],
          "price": [
            {
              "billing_currency": "EUR",
              "billing_price": 129.99,
              "display_currency": "EUR",
              "display_price": 129.99,
              "vat_included": true,
              "tax_rate": 19
            }
          ],
          "images": [
            {
              "format": "main",
              "url": "https://zkm.myloc.de/images/api/products/EpycServer.png"
            }
          ],
          "availability": "in_stock"
        },
        "period": {
          "slug": "1_MONTH_CONTRACT",
          "auto_quit": false,
          "prepaid_entire_duration": false,
          "contract_period": 1
        }
      }
    ],
    "satisfaction": null,
    "tracked": false
  }
}

Use this call to place an order.

HTTP Request

POST https://zkm.myloc.de/api/stores/{store}/carts/{cart}/order?access_key={access_key}&currency={currency}

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
cart string The unique identifier of your existing Cart.
access_key string The access_key of your existing Cart.
currency string The Id of the currency you want the prices to appear in.

POST Parameters

Parameter Type Description
total_amount float The total price of all items in your cart.
subuser string Optional parameter. Handle of a subuser that may edit the contracts of order.

Response contents

This method command returns "201 - Created" and the created Store Order as JSON on success.

[POST] Store Cart Items Prices

-H "accept: application/json" 
curl -X POST "https://zkm.myloc.de/api/stores/webtropia/carts/items/prices?currency=EUR"
-H "Authorization: Bearer {oauth_token}"
-H "Content-Type: application/json" 
-d "{"items":[{"product":4827,"sub_items":{"hdds":{"1":{"product":3022}}},"amount":1,"period":"12_MONTH_CONTRACT"}]}"

This is the POST body in structured JSON format:

{
  "items": [
    {
      "product": 4827,
      "sub_items": {
        "hdds": {
          "1": {
            "product": 3022
          }
        }
      },
      "amount": 1,
      "period": "12_MONTH_CONTRACT"
    }
  ]
}

The above command returns "201 - Created" and the following structured JSON on success:

{
  "content": [
    {
      "billing_currency": "EUR",
      "billing_price": 14.84,
      "display_currency": "EUR",
      "display_price": 14.84,
      "vat_included": true,
      "tax_rate": 19,
      "interval_type": "MONTH",
      "interval_duration": -1,
      "special": false
    }
  ]
}

This call will return the final price based on the supplied items and the chosen Product Period.

HTTP Request

POST https://zkm.myloc.de/api/stores/{store}/carts/items/pricese?currency={currency}

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).
currency string The Id of the currency you want the prices to appear in.

POST Parameters

Parameter Type Description
items array Array of Cart Items.

Response contents

This method command returns "201 - Created" and a Price object on success.

Currencies

curl -X GET "https://zkm.myloc.de/api/stores/myloc/currencies" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

{
  "content": [
    {
      "currency": "EUR"
    },
    {
      "currency": "RUB"
    },
    {
      "currency": "TRY"
    },
    {
      "currency": "USD"
    }
  ]
}

This call will return the Codes of all currencies that can be specified for price calculation in other Store API calls.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/currencies

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).

Referrals

curl -X GET "https://zkm.myloc.de/api/stores/myloc/referrals" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 5
  },
  "content": [
    {
      "id": 50,
      "label": "Empfehlung",
      "children": []
    },
    {
      "id": 57,
      "label": "Suchmaschine",
      "children": [
        {
          "id": 61,
          "label": "Google",
          "children": []
        },
        {
          "id": 62,
          "label": "Google - AdWords",
          "children": []
        },
        {
          "id": 63,
          "label": "Yahoo",
          "children": []
        },
        {
          "id": 64,
          "label": "Bing",
          "children": []
        }
      ]
    },
    {
      "id": 58,
      "label": "Zeitschrift",
      "children": [
        {
          "id": 65,
          "label": "Admin Magazin",
          "children": []
        },
        {
          "id": 66,
          "label": "CT",
          "children": []
        },
        {
          "id": 67,
          "label": "Internet Magazin",
          "children": []
        },
        {
          "id": 68,
          "label": "Internet World Business",
          "children": []
        },
        {
          "id": 69,
          "label": "IX",
          "children": []
        },
        {
          "id": 70,
          "label": "Linux Magazin",
          "children": []
        },
        {
          "id": 71,
          "label": "Linux User",
          "children": []
        }
      ]
    },
    {
      "id": 59,
      "label": "Webportal",
      "children": [
        {
          "id": 72,
          "label": "facebook.com",
          "children": []
        },
        {
          "id": 73,
          "label": "serversupportforum.de",
          "children": []
        },
        {
          "id": 74,
          "label": "webhostingtalk.com",
          "children": []
        },
        {
          "id": 75,
          "label": "webhostlist.de",
          "children": []
        }
      ]
    },
    {
      "id": 60,
      "label": "Bestandskunde",
      "children": []
    }
  ]
}

This call will return possible referrals you may submit when calling [POST] Store Cart Order.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/referrals

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).

Terms of Service

curl -X GET "https://zkm.myloc.de/api/stores/myloc/terms-of-service" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

{
  "content": {
    "content": "<h3>&sect;1 Geltungsbereich</h3>\r\n<p>\r\n    Diese allgemeinen Geschäftsbedingungen (AGB) sind Bestandteil aller Verträge der myLoc managed IT AG, Am Gatherhof 44, 40472 Düsseldorf, Deutschland (nachfolgend: myLoc) mit einem Vertragspartner im Sinne von § 3 (nachfolgend: Kunde) über Leistungen aus dem Bereich des in § 2 genannten Vertragsgegenstandes. Maßgeblich ist die zum Zeitpunkt des Vertragsschlusses jeweils gültige Fassung. Abweichende Bedingungen des Kunden werden nicht Bestandteil des Vertrages, es sei denn myLoc stimmt deren Geltung ausdrücklich schriftlich zu. Abweichende Regelungen in der Angebots- bzw. Leistungsbeschreibung einschließlich einem etwaigen Service Level Agreement (nachfolgend insgesamt: Leistungsbeschreibung) gehen den Regelungen dieser AGB vor.\r\n</p>\r\n<h3>&sect;2 Vertragsgegenstand</h3>\r\n<p>\r\n    myLoc betreibt Räumlichkeiten, die an das Internet angebunden sind (Rechenzentrum). In dem Rechenzentrum kann der Kunde eigene Internet-Server aufstellen (Colocation) oder von myLoc aufgestellte Server bzw. Speicherplatz und Rechenleistung darauf nutzen (Hosting). Darüber hinaus bietet myLoc weitere Leistungen in Zusammenhang mit dem Betrieb und der Nutzung von Servern an (Services). Gegenstand des Vertrages kann also insbesondere sein:\r\n    <ol>\r\n        <li>\r\n            Colocation: myLoc stellt dem Kunden einen Stellplatz (Rack oder Cage) für eigene Server-Hardware sowie eine Strom- und Internetanbindung zur Verfügung;\r\n        </li>\r\n        <li>\r\n            Managed Hosting: Der Kunde kann einen vorkonfigurierten, dedizierten oder virtuellen Server von myLoc nutzen;\r\n        </li>\r\n        <li>\r\n            Server Hosting: Der Kunde kann einen dedizierten oder virtuellen Server von myLoc nutzen, wobei die Konfiguration vollständig dem Kunden obliegt (Root Server);\r\n        </li>\r\n        <li>\r\n            Cloud Hosting: Der Kunde kann vorkonfigurierte Software as a Service (SaaS) und Infrastucture as a Service (IaaS) Produkte von myLoc nutzen;\r\n        </li>\r\n        <li>\r\n            Internet-Domains: Der Kunde kann über myLoc bei der jeweiligen Vergabestelle Domains registrieren lassen;\r\n        </li>\r\n        <li>\r\n            SSL-Zertifikate: Der Kunde kann sich über myLoc von einer Vergabestelle Zertifikate für verschlüsselte Verbindungen ausstellen lassen.\r\n        </li>\r\n    </ol>\r\n    <p>\r\n    \tDie Einzelheiten des Leistungsumfangs ergeben sich aus der jeweiligen Leistungsbeschreibung.\r\n    </p>\r\n</p>\r\n<h3>&sect;3 Vertragspartner</h3>\r\n<p>\r\n    myLoc schließt Verträge sowohl mit Privatkunden als auch mit Geschäftskunden. Zu den Geschäftskunden zählen juristische Personen des öffentlichen Rechts, öffentlich-rechtliche Sondervermögen und Unternehmer. Unternehmer ist eine natürliche oder juristische Person oder eine rechtsfähige Personengesellschaft, die bei Abschluss eines Rechtsgeschäfts in Ausübung ihrer gewerblichen oder selbständigen beruflichen Tätigkeit handelt. Dagegen ist Privatkunde im Sinne dieser AGB jede Person, die nicht Geschäftskunde ist. Zu den Privatkunden zählen also insbesondere Verbraucher. Verbraucher ist jede natürliche Person, die ein Rechtsgeschäft zu Zwecken abschließt, die überwiegend weder ihrer gewerblichen noch ihrer selbständigen beruflichen Tätigkeit zugerechnet werden können. Verträge über Colocation schließt myLoc nur mit Geschäftskunden ab.\r\n</p>\r\n<h3>&sect;4 Vertragsschluss</h3>\r\n<ol>\r\n    <li>\r\n        Die Darstellung und Bewerbung von Leistungen durch myLoc stellt grundsätzlich noch kein verbindliches Angebot zum Vertragsschluss dar. Vielmehr gibt der Kunde mit seiner Bestellung bei myLoc ein verbindliches Angebot zum Vertragsschluss ab (Vertragsangebot). Die Bestellung erfolgt entweder in elektronischer Form oder aber in Papierform:\r\n         <ol style=\"list-style-type:lower-latin;\">\r\n            <li>\r\n                In elektronischer Form erfolgt die Bestellung über die Internet-Seite von myLoc, und zwar durch Betätigen der Schaltfläche, die mit \"zahlungspflichtig bestellen\" oder einer entsprechenden eindeutigen Formulierung beschriftet ist. Bis zur Betätigung dieser Schaltfläche kann der Kunde den Bestellprozess jederzeit abbrechen. Auf der zugehörigen Übersichtsseite kann der Kunde etwaige Eingabefehler erkennen, durch Betätigen der Zurück-Schaltfläche seines Internet-Browsers den betroffenen Bestellschritt erneut aufrufen und den Fehler dort berichtigen. myLoc speichert den Vertragstext als solchen nicht (und macht dem Kunden den Vertragstext nach Vertragsschluss daher auch nicht selbst zugänglich). Der Kunde kann den Vertragstext aber speichern oder ausdrucken, indem er auf der Übersichtsseite die entsprechende Funktion seines Browsers nutzt; das gleiche gilt für diese AGB und die jeweilige Leistungsbeschreibung.\r\n            </li>\r\n            <li>\r\n                In Papierform erfolgt die Bestellung, indem der Kunde myLoc das ausgefüllte und unterschriebene Bestellformular zukommen lässt. Das entsprechende Formular und die zugehörige Leistungsbeschreibung kann der Kunde über die Internet-Seite von myLoc abrufen oder bei myLoc anfordern. Statt eines Bestellformulars kann auch ein Vertragsformular verwendet werden.\r\n            </li>\r\n        </ol>\r\n    </li>\r\n    <li>\r\n        Den Eingang der Bestellung bestätigt myLoc dem Kunden per E-Mail (Eingangsbestätigung). Die Eingangsbestätigung stellt grundsätzlich noch keine verbindliche Annahme des Vertragsangebots durch myLoc dar. Vielmehr erfolgt die Angebotsannahme entweder durch eine gesonderte Mitteilung von myLoc (Vertragsbestätigung) oder aber dadurch, dass myLoc für den Kunden erkennbar mit der Leistungserbringung beginnt. Darüber hinaus stellt auch der Rechnungsversand oder eine sonstige Aufforderung von myLoc zur Zahlung eine Angebotsannahme dar. Der Rechnungsversand bzw. die Zahlungsaufforderung kann bereits mit der Eingangsbestätigung erfolgen. In diesem Fall ist die Eingangsbestätigung also zugleich die Vertragsbestätigung.\r\n    </li>\r\n    <li>\r\n        Die Vertragssprache ist Deutsch.\r\n    </li>\r\n</ol>\r\n<h3>&sect;5 Widerrufsrecht</h3>\r\n<p>\r\n    Dem Kunden, der Verbraucher ist (vgl. § 3), steht grundsätzlich ein gesetzliches Widerrufsrecht zu. Dem Kunden, der kein Verbraucher ist, steht dieses Widerrufsrecht nicht zu. Über das Widerrufsrecht wird myLoc den Kunden gesondert belehren. Gegenüber einem Kunden, der nicht Verbraucher ist, begründet eine solche Widerrufsbelehrung jedoch kein vertragliches Widerrufsrecht.\r\n</p>\r\n<h3>&sect;6 Preise und Zahlung</h3>\r\n<ol>\r\n    <li>\r\n        Alle Preisangaben von myLoc gegenüber Privatkunden (vgl. § 3), insbesondere solche auf der Internet-Seite von myLoc, verstehen sich als Endpreise einschließlich der gesetzlichen Umsatzsteuer, soweit diese anfällt. Dagegen verstehen sich Preisangaben von myLoc, die erkennbar an Geschäftskunden (vgl. § 3) gerichtet sind, im Zweifel netto, das heißt ohne Umsatzsteuer; auf die angegebenen Preise wird die Umsatzsteuer also noch aufgeschlagen, soweit sie anfällt (brutto). Zusätzliche, das heißt nicht in der Bestellübersicht bzw. dem Bestell- / Vertragsformular ausgewiesene Kosten fallen durch die Bestellung grundsätzlich nicht an.\r\n    </li>\r\n    <li>\r\n        Die Zahlung einmaliger Entgelte ist im Zweifel mit Vertragsschluss, die Zahlung wiederkehrender Entgelte monatlich im Voraus fällig. Die Rechnungsstellung erfolgt per E-Mail an die vom Kunden angegebene Adresse. Für den postalischen Versand von Rechnungen, den myLoc nur auf Verlangen des Kunden vornehmen wird, fällt eine Gebühr von 3,50 € je Rechnung an. Die Rechnungsstellung ist nicht Voraussetzung dafür, dass der Kunde in Verzug geraten kann. Dies gilt nicht für die in Rechnung zu stellende Umsatzsteuer, soweit der Kunde zum Vorsteuerabzug berechtigt ist. Gerät der Kunde mit der Zahlung in Verzug, ist myLoc nach den gesetzlichen Vorschriften berechtigt, die weitere Leistungserbringung zurückzubehalten. Das heißt insbesondere, myLoc kann die Internet-Seiten des Kunden abschalten, die sonst auf den Servern hinterlegten Daten nicht länger verfügbar halten und Domains nicht mehr verlängern. Weitergehende Rechte von myLoc bleiben unberührt.\r\n    </li>\r\n    <li>\r\n        Beanstandungen, die die Inrechnungstellung nutzungsabhängiger Entgelte (bspw. für Traffic) betreffen, hat der Kunde innerhalb einer Ausschlussfrist von sechs Wochen ab Zugang der jeweiligen Rechnung geltend zu machen. Andernfalls gilt die Inrechnungstellung dieser Entgelte als vom Kunden genehmigt. Dies gilt nicht, wenn myLoc bei der Inrechnungstellung arglistig gehandelt oder den Kunden in der Rechnung nicht noch einmal auf die Ausschlussfrist hingewiesen hat.\r\n    </li>\r\n    <li>\r\n        Soweit nicht abweichend vereinbart, erfolgt die Zahlung bargeldlos per Überweisung im SEPA-Verfahren auf das Geschäftskonto von myLoc. Soll die Zahlung durch Lastschrift oder per Kreditkarte erfolgen, wird der Kunde eine ausreichende Deckung des entsprechenden Kontos gewährleisten. Kann eine Lastschrift nicht eingelöst oder die Kreditkarte nicht belastet werden (Rücklastschrift), ist der Kunde zur Zahlung einer Schadenspauschale in Höhe von 10,00 € verpflichtet. Dies gilt nicht, wenn der Kunde die Rücklastschrift nicht zu vertreten hat. Außerdem steht es dem Kunden frei, den Nachweis zu führen, dass myLoc ein Schaden überhaupt nicht entstanden oder der Schaden wesentlich niedriger als die Pauschale ist. Umgekehrt steht es myLoc frei, den Nachweis eines höheren Schadens zu führen.\r\n    </li>\r\n</ol>\r\n<h3>&sect;7 Vertragslaufzeit und -kündigung</h3>\r\n<ol>\r\n    <li>\r\n        Die Laufzeit des Vertrages entspricht demjenigen Zeitraum, der in der Leistungsbeschreibung ausgewiesen ist, bzw. demjenigen Zeitraum, den der Kunde bei seiner Bestellung gewählt hat (Mindestlaufzeit). Bei Verträgen über eine Domain beträgt die Mindestlaufzeit grundsätzlich ein Jahr. Wird der Vertrag nicht oder nicht fristgerecht gekündigt, verlängert er sich jeweils um die Mindestlaufzeit, jedoch nicht um mehr als ein Jahr (automatische Vertragsverlängerung). Soweit nicht abweichend vereinbart, beträgt die Kündigungsfrist bei Verträgen mit einer Mindestlaufzeit von bis zu einem Jahr 4 Wochen und bei Verträgen mit einer Mindestlaufzeit von einem Jahr oder mehr 3 Monate.\r\n\r\n    </li>\r\n    <li>\r\n        Die Kündigung bedarf grundsätzlich der Textform. Ist der Kunde ein Geschäftskunde (vgl. § 3), bedarf die Kündigung dagegen der Schriftform, wobei die telekommunikative Übermittlung der unterschriebenen Erklärung genügt.\r\n\r\n    </li>\r\n    <li>\r\n        Das Recht zur vorzeitigen Kündigung aus wichtigem Grund bleibt unberührt. Ein wichtiger Grund liegt für myLoc insbesondere vor, wenn der Kunde mit einem Betrag in Höhe einer Monatsvergütung um mehr als 4 Wochen oder mit einem geringeren Betrag um mehr als 6 Wochen in Verzug ist. Ebenso liegt für myLoc ein wichtiger Grund zur vorzeitigen Kündigung vor, wenn der Kunde erheblich oder nachhaltig, insbesondere nach einer Abmahnung durch myLoc, sonstige Pflichten aus dem Vertrag verletzt.\r\n\r\n    </li>\r\n    <li>\r\n        Dem Kunden ist bekannt, dass der Aufwand und die Kosten für die Bereitstellung von Stellplätzen, Servern oder Teilen davon bei der Vergütung und Mindestlaufzeit berücksichtigt werden. Ebenso ist dem Kunden bekannt, dass der Aufwand und die Kosten von myLoc bei Domains nahezu ausschließlich durch deren Registrierung und Verlängerung verursacht werden. Wird ein Vertrag, dessen Mindestlaufzeit noch nicht erreicht ist, von myLoc vorzeitig aus wichtigem Grund gekündigt, hat der Kunde daher 50 % der Vergütung zu zahlen, die bis zum Erreichen der Mindestlaufzeit zu zahlen wäre. Soweit die Vergütung für eine Domain betroffen ist, wird diese bis zum eigentlichen Laufzeitende in voller Höhe geschuldet, und zwar unabhängig davon, ob die Mindestlaufzeit des Vertrages bereits erreicht ist. Dies gilt nicht, wenn der Kunde den wichtigen Grund, aus dem myLoc vorzeitig kündigt, nicht zu vertreten hat. Außerdem ist dem Kunden der Nachweis gestattet, dass myLoc ein Schaden überhaupt nicht entstanden oder der Schaden wesentlich niedriger als der berechnete Betrag ist. Umgekehrt steht es myLoc frei, den Nachweis eines höheren Schadens zu führen. Weitergehende Rechte von myLoc bleiben unberührt.\r\n\r\n    </li>\r\n    <li>\r\n        Zum Ende des Vertrages wird myLoc die Zugangsdaten des Kunden sperren und auch sonst die vertraglichen Leistungen einstellen. Das heißt, Internet-Seiten, E-Mails und sonstigen Daten, die der Kunde auf den Servern von myLoc hinterlegt hat, werden gelöscht. Die Internet-Domains des Kunden werden nicht mehr verlängert, das heißt diese laufen aus und werden gelöscht oder aber an die zuständige Registrierungsstelle zurückgegeben. Dem Kunden ist bekannt, dass die jeweilige Domain dadurch endgültig verloren gehen kann, etwa wenn ein Dritter die Domain nach der Löschung oder Rückgabe auf sich registriert.\r\n\r\n    </li>\r\n    <li>\r\n        Der Kunde hat jedoch vor Vertragsende die Möglichkeit, seine Domains zu einem anderen Anbieter zu übertragen (Transfer). Soll eine Domain zu einem anderen Anbieter übertragen werden, wird der Kunde dies rechtzeitig, das heißt spätestens zwei Wochen vor Vertragsende in Textform bei myLoc beantragen. Dem Kunden ist bekannt, dass für den Transfer einer Domain, abhängig von den Vorgaben der jeweiligen Registrierungsstelle, auch die Mitwirkung des Kunden und / oder des anderen Anbieters erforderlich ist. Erfolgt diese Mitwirkung nicht oder nicht rechtzeitig mit der Folge, dass die Domain über das Laufzeitende hinaus bei myLoc verbleibt, wird die Domain dem Kunden für ein weiteres Jahr berechnet. Dies gilt nicht, wenn der Kunde das Ausbleiben der rechtzeitigen Mitwirkung nicht zu vertreten hat. Außerdem ist dem Kunden der Nachweis gestattet, dass myLoc ein Schaden überhaupt nicht entstanden oder der Schaden wesentlich niedriger als der berechnete Betrag ist. Umgekehrt steht es myLoc frei, den Nachweis eines höheren Schadens zu führen. Weitergehende Rechte von myLoc bleiben unberührt.\r\n    </li>\r\n</ol>\r\n<h3>&sect;8 Rechte und Pflichten</h3>\r\n<ol>\r\n    <li>\r\n        Zugangsdaten (etwa: Benutzername und Passwort), die der Kunde von myLoc erhält, wird der Kunde geheim halten und gehörig vor einer Kenntnisnahme durch Dritte schützen. Für jede unter diesen Zugangsdaten vorgenommene Maßnahme hat der Kunde einzustehen. Dies gilt nicht, wenn die jeweilige Maßnahme von einem unautorisierten Dritten vorgenommen wurde, ohne dass der Kunde dies zu vertreten hat, insbesondere also seiner Geheimhaltungs- und Schutzpflicht ordnungsgemäß nachgekommen ist.\r\n    </li>\r\n    <li>\r\n        Der Kunde stellt von sämtlichen Daten, die er auf den Servern von myLoc hinterlegt, vor der Hinterlegung eine Sicherheitskopie (Backup) her. Daten, die auf den Servern von myLoc verändert oder dort erst erhoben werden, wird der Kunde ebenfalls in regelmäßigen Abständen sichern. Die Backups dürfen ihrerseits nicht auf den Servern von myLoc hinterlegt werden.\r\n    </li>\r\n    <li>\r\n        Bei einem Vertrag über Colocation, bei dem der Kunde eigene Hardware im Rechenzentrum von myLoc aufstellt, räumt der Kunde myLoc ein vertragliches Pfandrecht an der aufgestellten Hardware ein. Das Pfandrecht dient zur Sicherung der Forderungen von myLoc gegenüber dem Kunden aus dem Vertrag. Dem Kunden ist bekannt, dass die aufgestellte Hardware nicht durch myLoc versichert ist. Insoweit wird der Kunde gegebenenfalls selbst für eine Versicherung sorgen. In jedem Fall wird der Kunde eine Haftpflichtversicherung abschließen, wonach vom Kunden oder dessen Hardware im Rechenzentrum von myLoc verursachte Personen-, Sach- und Vermögensschäden mit mindestens einer Million Euro abgesichert sind. Auf Verlangen von myLoc wird der Kunde den Bestand dieser Versicherung nachweisen. Für die Wartung seiner Hardware ist der Kunde allein verantwortlich.\r\n    </li>\r\n    <li>\r\n        Außer beim Colocation ist myLoc berechtigt, Änderungen an der Server-Konfiguration vorzunehmen, soweit diese aus technischer oder rechtlicher Sicht erforderlich werden oder sonst aufgrund des technischen Fortschritts geboten sind. Der vertragliche Leistungsumfang wird durch eine solche Änderung jedoch nicht beschränkt. Über anstehende Änderungen wird myLoc den Kunden rechtzeitig informieren, soweit diese spürbare Auswirkungen auf den Kunden haben. Der Kunde ist verpflichtet, seinerseits erforderlich werdende Änderungen vorzunehmen, soweit dies zumutbar ist.\r\n    </li>\r\n    <li>\r\n        Eine Möglichkeit des Kunden, physischen Zugriff auf die Server im Rechenzentrum von myLoc zu nehmen, besteht nur beim Colocation. Der Zugriff ist auf die Hardware des Kunden beschränkt, wobei der Kunde vorab einen Termin mit myLoc vereinbaren wird. Bei der Terminvereinbarung sind die Personen zu benennen, die für den Kunden Zugriff auf die Hardware erhalten sollen. Die Personen müssen sich durch einen amtlichen Ausweis mit Lichtbild ausweisen können.\r\n    </li>\r\n    <li>\r\n        Beim Colocation und Server Hosting ist der Kunde für die Installation und Konfiguration des Betriebssystems, der Server-Dienste und sonstiger Software allein verantwortlich. Beim Managed Hosting wird dem Kunden ein von myLoc vorkonfiguriertes System zur Verfügung gestellt. Für die Installation und Konfiguration weiterer Dienste und sonstiger Software ist der Kunde aber auch insoweit allein verantwortlich.\r\n    </li>\r\n    <li>\r\n        myLoc stellt dem Kunden Lizenzen für Software von Microsoft, insbesondere für Windows Server, über einen Rahmenvertrag mit Microsoft für eine Vielzahl von Lizenzen (Volumenlizenzvertrag) bereit, soweit der Kunde Hosting-Leistungen von myLoc in Anspruch nimmt und die Bereitstellung einer solchen Software zur Nutzung auf dem Server vereinbart ist. Der Kunde sichert myLoc zu, die Lizenzbedingungen für die Nutzung der Software einzuhalten. Dazu zählt insbesondere, dass der Kunde Lizenzen für die Nutzung von Microsoft-Software auf dem Server ausschließlich über den Volumenlizenzvertrag von myLoc bezieht. Der Kunde wird keine unlizenzierte oder nicht ordnungsgemäß lizenzierte Software auf dem Server nutzen. Verstößt der Kunde gegen die Lizenzbedingungen, hat er myLoc den daraus entstehenden Schaden zu ersetzen. myLoc ist berechtigt, die Einhaltung der Microsoft-Lizenzbedingungen durch den Kunden zu überwachen. Dazu stellt der Kunde myLoc einen administrativen Server-Zugang bereit, den myLoc ausschließlich für diese Überwachung verwenden wird. Insoweit ist myLoc insbesondere berechtigt, die Lizenz-Informationen über Software von Microsoft auf dem Server dauerhaft und automatisiert durch eine entsprechende Client-Software zu überprüfen. Verweigert der Kunde die Bereitstellung des Zugangs oder stört der Kunde die Überprüfung durch die Client-Software, stellt dies für myLoc einen wichtigen Grund zur vorzeitigen Kündigung dar.\r\n    </li>\r\n</ol>\r\n<h3>&sect;9 Rechtsverletzungen</h3>\r\n<ol>\r\n    <li>\r\n        Dem Kunden ist bekannt, dass myLoc die Server-Nutzung durch den Kunden, insbesondere die vom Kunden veröffentlichten Inhalte, nicht überwachen wird. Ebenso wenig wird myLoc bei einer vom Kunden bestellten Domain vor der Registrierung überprüfen, ob die Domain Rechte Dritter berührt. Insoweit stellt der Kunde myLoc von sämtlichen Ansprüchen frei, die Dritten gegen myLoc aufgrund einer rechts- oder vertragswidrigen Server-Nutzung durch den Kunden bzw. einer vom Kunden bestellten Domain zustehen; die dabei anfallenden Kosten der Rechtswahrnehmung wird der Kunde myLoc im erforderlichen Umfang ersetzen.\r\n    </li>\r\n    <li>\r\n        Der Kunde wird keine rechtsverletzenden Inhalte veröffentlichen oder den Server sonst rechtsverletzend nutzen. Als rechtsverletzend gilt auch die Veröffentlichung von Inhalten, die rassistisch, gewaltverherrlichend oder nicht jugendfrei sind. Bei einer offensichtlichen oder nachgewiesenen Rechtsverletzung ist myLoc berechtigt, den Kunden von der rechtsverletzenden Server-Nutzung auszuschließen (Sperrung) bzw. die rechtsverletzende Domain zu sperren, erforderlichenfalls auch an die Registrierungsstelle zurückzugeben. Ist die Rechtsverletzung nicht offensichtlich oder nachgewiesen, fordert myLoc den Kunden zur unverzüglichen Stellungnahme auf. Bleibt diese Stellungnahme aus oder kann sie die behauptete Rechtsverletzung nicht entkräften, stehen myLoc die gleichen Rechte wie bei einer offensichtlichen oder nachgewiesenen Rechtsverletzung zu.\r\n    </li>\r\n    <li>\r\n        Der Versand werblicher E-Mails ohne vorherige ausdrückliche Einwilligung des jeweiligen Empfängers (Spam) ist verboten. Als verbotener Spam gilt auch der automatisierte oder massenhafte Versand werblicher Nachrichten an Internet-Foren oder -Chats. Für jeden Fall einer schuldhaften Zuwiderhandlung gegen das Spam-Verbot hat der Kunde an myLoc eine Vertragsstrafe zu zahlen, deren Höhe von myLoc nach billigem Ermessen festgesetzt wird, wobei die Festsetzung gerichtlich überprüfbar ist. Außerdem ist myLoc zu einer Sperrung berechtigt.\r\n    </li>\r\n    <li>\r\n        Sollte der vom Kunden genutzte Server die Funktionsfähigkeit, Sicherheit oder Verfügbarkeit der Infrastruktur von myLoc spürbar beeinträchtigen oder ernsthaft gefährden, kann myLoc für die Dauer der Beeinträchtigung oder Gefährdung ebenfalls eine Sperrung vornehmen.\r\n    </li>\r\n    <li>\r\n        Eine Sperrung wird myLoc dem Kunden nach Möglichkeit vorher androhen, ihn ansonsten zeitnah über die Sperrung unterrichten. Eine Androhung ist entbehrlich, wenn der Kunde den Grund für die Sperrung vorsätzlich herbeigeführt hat. Schafft der Kunde Abhilfe, sieht myLoc von einer Sperrung ab bzw. hebt diese wieder auf. Für den Aufwand in Zusammenhang mit einer Sperrung erhebt myLoc vom Kunden eine Pauschale in Höhe von 49,00 €. Dies gilt nicht, wenn der Kunde den Grund für die Sperrung nicht zu vertreten hat. Außerdem steht es dem Kunden frei, den Nachweis zu führen, dass myLoc ein Schaden überhaupt nicht entstanden oder der Schaden wesentlich niedriger als die Pauschale ist. Umgekehrt steht es myLoc frei, den Nachweis eines höheren Schadens zu führen. Weitergehende Rechte von myLoc bleiben unberührt.\r\n    </li>\r\n</ol>\r\n<h3>&sect;10 Gewährleistung</h3>\r\n<ol>\r\n    <li>\r\n        myLoc gewährleistet dem Kunden eine Verfügbarkeit von 99,0 % im Jahresmittel. Maßgeblich für die Verfügbarkeit ist derjenige Router, der das Rechenzentrum von myLoc mit dem Internet verbindet (Übergabepunkt). Von der Gewährleistung der Verfügbarkeit sind sowohl Störungen innerhalb des Internets als auch solche Ausfallzeiten ausgenommen, deren Ursache nicht im Einflussbereich von myLoc liegt (bspw. höhere Gewalt). Außerdem ist myLoc berechtigt, monatlich bis zu 1 % der Verfügbarkeit für Wartungsarbeiten zu verwenden, ohne dass dies als Minderung der Verfügbarkeit gilt. Solche Wartungsarbeiten werden dem Kunden nach Möglichkeit vorher angekündigt und nachts zwischen 22:00 Uhr und 6:00 Uhr durchgeführt.\r\n    </li>\r\n    <li>\r\n        Dem Kunden ist bekannt, dass myLoc die Daten zur Registrierung einer Domain nur im Auftrag des Kunden an die zuständige Registrierungsstelle weiterleitet. Die Weiterleitung erfolgt in einem automatisierten Verfahren, wobei myLoc keinen Einfluss darauf hat, ob die Domain dem Kunden letztlich zugeteilt wird oder nicht. Insoweit übernimmt myLoc keine Gewähr für die Zuteilung einer bestellten Domain. Das gleiche gilt für den Bestand einer Domain, soweit dieser nicht im Einflussbereich von myLoc liegt.\r\n    </li>\r\n    <li>\r\n        Im Übrigen gelten die gesetzlichen Bestimmungen. Für die Haftung wegen Mängeln auf Schadensersatz gilt ergänzend die Haftungsbeschränkung gemäß § 11.\r\n\r\n    </li>\r\n</ol>\r\n<h3>&sect;11 Haftungsbeschränkung</h3>\r\n<ol>\r\n    <li>\r\n        myLoc haftet unbeschränkt bei Vorsatz und grober Fahrlässigkeit, für die Verletzung von Leben, Körper und Gesundheit, nach den Vorschriften des Produkthaftungsgesetztes (ProdHG), gemäß § 44a des Telekommunikationsgesetzes (TKG) sowie im Umfang einer von myLoc gemachten Zusicherung oder übernommenen Garantie.\r\n    </li>\r\n    <li>\r\n        Bei leicht fahrlässiger Verletzung einer wesentlichen Vertragspflicht ist die Haftung von myLoc der Höhe nach begrenzt auf den Schaden, der nach der Art des fraglichen Geschäfts vorhersehbar und typisch ist. Wesentliche Vertragspflichten sind solche, deren Erfüllung die ordnungsgemäße Durchführung des Vertrages überhaupt erst ermöglichen und auf deren Einhaltung der Kunde regelmäßig vertrauen darf.\r\n    </li>\r\n    <li>\r\n        Im Übrigen ist die Haftung von myLoc auf Schadensersatz, gleich aus welchem Rechtsgrund, ausgeschlossen; eine verschuldensunabhängige Haftung für anfängliche Mängel auf Schadensersatz besteht nicht. Dies gilt auch für die persönliche Haftung der gesetzlichen Vertreter, Mitarbeiter und Erfüllungsgehilfen von myLoc.\r\n    </li>\r\n</ol>\r\n<h3>&sect;12 Datenschutz</h3>\r\n<ol>\r\n    <li>\r\n        myLoc beachtet die gesetzlichen Vorschriften zum Datenschutz. myLoc verarbeitet die personenbezogenen Daten des Kunden nur zur Abwicklung des Vertrages. Dabei handelt es sich um diejenigen personenbezogenen Daten, die der Kunde myLoc bei der Bestellung, über das Kundencenter oder sonst im Rahmen der Vertragsabwicklung mitteilt (insbesondere: Name, Anschrift und E-Mailadresse). myLoc ist berechtigt die personenbezogenen Daten des Kunden in dem Umfang andere Unternehmen weiterzugeben, wie dies zur Vertragsabwicklung erforderlich ist (bspw. an die Bank zur Zahlungsabwicklung).\r\n    </li>\r\n    <li>\r\n        Der Kunde kann myLoc jederzeit um Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung seiner personenbezogenen Daten und um deren Übertragbarkeit zu einem anderen Anbieter ersuchen. Eine Löschung kann jedoch nicht erfolgen, soweit die personenbezogenen Daten des Kunden zur Abwicklung des Vertrages noch erforderlich sind oder gesetzliche Aufbewahrungspflichten entgegenstehen; soweit möglich erfolgt bis zur Löschung jedoch eine Sperrung der Daten. Nach vollständiger Abwicklung des Vertrages und soweit gesetzliche Aufbewahrungspflichten nicht mehr entgegenstehen, wird myLoc die personenbezogenen Daten des Kunden ebenfalls löschen.\r\n    </li>\r\n    <li>\r\n        Darüber hinaus findet eine Verwendung der personenbezogenen Daten des Kunden nur statt, soweit dieser in die entsprechende Verwendung ausdrücklich eingewilligt hat. Für die Verarbeitung personenbezogener Daten bei der Nutzung der Internet-Seite von myLoc wird ergänzend auf die Datenschutzerklärung verwiesen, die über die Seite abrufbar ist.\r\n    </li>        \r\n</ol>\r\n<h3>&sect;13 Schlussbestimmungen</h3>\r\n<ol>\r\n    <li>\r\n        Der Vertrag bleibt auch bei rechtlicher Unwirksamkeit einzelner Punkte in seinen übrigen Teilen verbindlich. Anstelle der unwirksamen Punkte treten, soweit vorhanden, die gesetzlichen Vorschriften. Soweit dies für eine Vertragspartei eine unzumutbare Härte darstellen würde, wird der Vertrag jedoch im Ganzen unwirksam.\r\n    </li>\r\n    <li>\r\n        Ist der Kunde ein Kaufmann, eine juristische Person des öffentlichen Rechts oder ein öffentlich-rechtliches Sondervermögen, wird als ausschließlicher Gerichtsstand für alle Ansprüche, die sich aus dem oder aufgrund des Vertrages ergeben, Düsseldorf vereinbart. Gleiches gilt gegenüber Personen, die keinen allgemeinen Gerichtsstand in Deutschland haben oder Personen, die nach Abschluss des Vertrages ihren Wohnsitz oder gewöhnlichen Aufenthaltsort außerhalb von Deutschland verlegt haben oder deren Wohnsitz oder gewöhnlicher Aufenthaltsort im Zeitpunkt der Klageerhebung nicht bekannt ist.\r\n    </li>\r\n    <li>\r\n        Es findet das Recht der Bundesrepublik Deutschland unter Ausschluss des UN-Kaufrechts Anwendung. Ist der Kunde eine natürliche Person und schließt er den Vertrag zu Zwecken, die nicht überwiegend seiner gewerblichen, geschäftlichen, handwerklichen oder beruflichen Tätigkeit zugerechnet werden können, bleiben die zwingenden Verbraucherschutzbestimmungen desjenigen Staates, in dem der Kunde seinen gewöhnlichen Aufenthalt hat, gleichwohl anwendbar.\r\n    </li>\r\n    <li>\r\n        Der Kunde kann myLoc gegenüber nur mit solchen Forderungen aufrechnen, die ihm entweder aus demselben Vertragsverhältnis zustehen oder die von myLoc unbestritten oder rechtskräftig festgestellt sind. Ein Zurückbehaltungsrecht kann der Kunde nur wegen Gegenansprüchen aus demselben Vertragsverhältnis geltend machen.\r\n    </li>\r\n    <li>\r\n        myLoc ist berechtigt, die vertraglichen Leistungen durch Dritte erbringen zu lassen.\r\n    </li>\r\n</ol>\r\n<h3>&sect;14 Streitbeilegungsverfahren</h3>\r\n<p>\r\n    Die EU-Kommission stellt eine Plattform zur Online-Streitbeilegung (OS-Plattform) bereit, die über folgenden Link erreichbar ist: http://ec.europa.eu/consumers/odr/ Die E-Mailadresse von myLoc lautet: info@myloc.de myLoc ist jedoch nicht verpflichtet und nicht bereit an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.\r\n<p>\r\n<p style=\"text-align:center;color:red;\">\r\n    DIESE ALLGEMEINEN GESCHÄFTSBEDINGUNGEN SIND URHEBERRECHTLICH DURCH DIE KANZLEI DANIEL RAIMER AUS DÜSSELDORF GESCHÜTZT UND DÜRFEN NUR MIT ZUSTIMMUNG DER KANZLEI GENUTZT WERDEN. ZUWIDERHANDLUNGEN WERDEN ZIVIL- UND GGF. STRAFRECHTLICH VERFOLGT.\r\n</p>",
    "language": "de",
    "valid_from": "2018-05-24T00:00:00+0200",
    "valid_to": null
  }
}

This call returns the myLoc TOS.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/terms-of-service

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).

Settings

curl -X GET "https://zkm.myloc.de/api/stores/myloc/settings" 
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - OK" and the following structured JSON on success:

{
  "content": {
    "max_cart_item_count": 25,
    "max_cart_value": 2500,
    "prevent_same_offer": false,
    "is_coupon_available": true,
    "store_logo": "https://zkm.myloc.de/images/mandator_logos/order_system/myloc_logo.svg"
  }
}

This call returns basic parameters you have to take into account when placing orders. If you participate in our reseller program and feel the urge of increasing certain values, contact your personal advisor.

HTTP Request

GET https://zkm.myloc.de/api/stores/{store}/settings

URL Parameters

Parameter Type Description
store string The Id of the store (myloc, webtropia, servdiscount or your custom reseller stores id).

Response contents

Key Type Description
max_cart_item_count int Determines how many Cart Items you may put into your Cart.
max_cart_value int Determines the maximum total amount of your Cart.
prevent_same_offer boolean Applies exclusively to servdiscount store. Determines if you may put the same offer into your Cart multiple times.
is_coupon_available boolean Determines, if you may submit a coupon code upon ordering.
store_logo string Url for retrieving the logo of the store specified.

Order

[GET] Order

curl -X GET "https://zkm.myloc.de/api/orders/1234?sat=123abc"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
  "content": {
    "id": "21ad7376-9642-4630-a0b7-835f8a0be156",
    "secure_access_token": "dfecc4f7b0b9954aa8f0d3b483626b0c",
    "date": "2020-02-06T09:47:15+0100",
    "total_amount": 129.99,
    "prepaid": false,
    "payment_required": false,
    "pay_date": "2020-02-06T09:47:15+0100",
    "validation_date": null,
    "is_rejected": false,
    "client": {
      "id": 123456
    },
    "items": [
      {
        "sub_items": [
          {
            "id": "22351ce7-3dd2-416f-8581-f037e82bd27d",
            "options": null,
            "type": "product_licenses",
            "product": {
              "id": 4226,
              "name": "License Container",
              "brand": null,
              "type": "licenses",
              "mandator": "servhost",
              "alias": null,
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            }
          },
          {
            "id": "36d9a085-aca5-4331-99b8-2721b3d3ca55",
            "options": [],
            "type": "product",
            "product": {
              "id": 5632,
              "name": "AMD Epyc 7302P (16 x 3,0 GHz)",
              "brand": "",
              "type": "cpu",
              "mandator": "servhost",
              "alias": null,
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            }
          },
          {
            "id": "8437a013-326f-4ab5-bc76-e9d1d66770a5",
            "options": [],
            "type": "product",
            "product": {
              "id": 3958,
              "name": "64 GB DDR4 ECC",
              "brand": null,
              "type": "ram",
              "mandator": "servhost",
              "alias": "64_gb_ram",
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            }
          },
          {
            "id": "1c837d29-1afe-42ed-9d56-406fb884762c",
            "options": [],
            "type": "software",
            "product": {
              "id": 4493,
              "name": "Linux",
              "brand": "",
              "type": "installation",
              "mandator": "servhost",
              "alias": null,
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            },
            "software": {
              "id": 1809,
              "operating_system": {
                "id": 96,
                "name": "Debian",
                "handle": "linux",
                "version": "10.0",
                "latest": true,
                "icons": {
                  "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-16x16.png",
                  "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-32x32.png",
                  "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-64x64.png",
                  "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-128x128.png",
                  "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-256x256.png",
                  "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-512x512.png"
                }
              },
              "admintool": {
                "name": "Plain",
                "handle": "plain"
              },
              "language": null,
              "software_raid": true,
              "raid_level": [
                0,
                1
              ],
              "price": null
            }
          },
          {
            "id": "0f8faa03-0ac2-4689-a9b2-f16704845f96",
            "options": [],
            "type": "product_hdds",
            "product": {
              "id": 5633,
              "name": "Festplatten ",
              "brand": "",
              "type": "hdds",
              "mandator": "servhost",
              "alias": null,
              "order_form_type": null,
              "groups": [],
              "properties": [],
              "price": [
                {
                  "billing_currency": "EUR",
                  "billing_price": 0,
                  "display_currency": "EUR",
                  "display_price": 0,
                  "vat_included": true,
                  "tax_rate": 19
                }
              ],
              "images": [],
              "availability": null
            }
          }
        ],
        "id": "5e73b01b-a182-4412-a8c8-4e80881f163c",
        "type": "server",
        "product": {
          "id": 5631,
          "name": "Epyc Server M",
          "brand": "",
          "type": "server",
          "mandator": "servhost",
          "alias": null,
          "order_form_type": "DedicatedEpycServer",
          "groups": [
            {
              "category": "dedicated_server",
              "name": "Dedizierte Server"
            }
          ],
          "properties": [],
          "price": [
            {
              "billing_currency": "EUR",
              "billing_price": 129.99,
              "display_currency": "EUR",
              "display_price": 129.99,
              "vat_included": true,
              "tax_rate": 19
            }
          ],
          "images": [
            {
              "format": "main",
              "url": "https://zkm.myloc.de/images/api/products/EpycServer.png"
            }
          ],
          "availability": "in_stock"
        },
         "contract": {
                  "id": 12345,
                  "create_date": "2020-06-21T15:00:55+0200",
                  "entity_type": "default"
                },
        "period": {
          "slug": "1_MONTH_CONTRACT",
          "auto_quit": false,
          "prepaid_entire_duration": false,
          "contract_period": 1
        }
      }
    ],
    "satisfaction": null,
    "tracked": false
  }
}

Use this call to retrieve information about an existing Store Order.

HTTP Request

GET https://zkm.myloc.de/api/orders/{order}?sat={secure_access_token}

URL Parameters

Parameter Type Description
order string The id of your existing Store Order.
sat string The secure_access_token of your existing Store Order.

Response contents

This method command returns "200 - Ok" and a Store Order object in JSON format on success.

[GET] Payment methods

curl -X GET "https://zkm.myloc.de/api/orders/1234/payment-methods?sat=123abc"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

The above command returns "200 - Ok" and the following structured JSON on success:

{
  "content": [
    {
      "id": "sepa-new",
      "name": "SEPA",
      "type": "inline",
      "url": null,
      "new_window": false,
      "image": "https://zkm.myloc.de/images/api/payment-icons/sepa-new.png",
      "img_class": "sepa",
      "price": 129.99,
      "transaction_costs": 0,
      "price_total": 129.99
    },
    {
      "id": "sepa",
      "name": "SEPA",
      "type": "inline",
      "url": null,
      "new_window": false,
      "image": "https://zkm.myloc.de/images/api/payment-icons/sepa.png",
      "img_class": "sepa",
      "price": 129.99,
      "transaction_costs": 0,
      "price_total": 129.99
    },
    {
      "id": "paypal",
      "name": "PayPal",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/paypal",
      "new_window": true,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_paypal.png",
      "image_class": "paypal",
      "price": 129.99,
      "transaction_costs": "6.50",
      "price_total": "136.49"
    },
    {
      "id": "gateway",
      "name": "Credit Cards",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/gateway",
      "new_window": false,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_gateway.png",
      "image_class": "gateway",
      "price": 129.99,
      "transaction_costs": "6.50",
      "price_total": "136.49"
    },
    {
      "id": "webmoney",
      "name": "Webmoney",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/webmoney",
      "new_window": true,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_webmoney.png",
      "image_class": "webmoney",
      "price": 129.99,
      "transaction_costs": "10.40",
      "price_total": "140.39"
    },
    {
      "id": "sofortbanktransfer",
      "name": "Klarna",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/sofortbanktransfer",
      "new_window": true,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_sofortbanktransfer.png",
      "image_class": "sofortbanktransfer",
      "price": 129.99,
      "transaction_costs": "6.50",
      "price_total": "136.49"
    },
    {
      "id": "paysafecard",
      "name": "Paysafecard",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/paysafecard",
      "new_window": false,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_paysafecard.png",
      "image_class": "paysafecard",
      "price": 129.99,
      "transaction_costs": "19.50",
      "price_total": "149.49"
    },
    {
      "id": "giropay",
      "name": "Giropay",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/giropay",
      "new_window": false,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_giropay.png",
      "image_class": "giropay",
      "price": 129.99,
      "transaction_costs": "9.10",
      "price_total": "139.09"
    },
    {
      "id": "mobiamo",
      "name": "Mobiamo",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/mobiamo",
      "new_window": false,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_mobiamo.png",
      "image_class": "mobiamo",
      "price": 129.99,
      "transaction_costs": "52.00",
      "price_total": "181.99"
    },
    {
      "id": "test",
      "name": "Test Method",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/test",
      "new_window": null,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_dummy.png",
      "image_class": null,
      "price": 129.99,
      "transaction_costs": "6.50",
      "price_total": "136.49"
    }
  ]
}

Use this call to retrieve a list of possible payment methods for unpayed Store Orders.

HTTP Request

GET https://zkm.myloc.de/api/orders/{order}/payment-methods?sat={secure_access_token}

URL Parameters

Parameter Type Description
order string The id of your existing Store Order.
sat string The secure_access_token of your existing Store Order.

Response contents

This method command returns "200 - Ok" and a list of Payment Method objects in JSON format on success.

Error Codes

Error Code Meaning
403 Forbidden -- Your order is already marked as payed.

For more error codes, refer to Errors Section

[POST] Pay

curl -X POST "https://zkm.myloc.de/api/orders/1234/pay/giropay?sat=123abc"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This is the POST body in structured JSON format:

{
  "redirect_url": "your.redirect.url.without.protocol.prefix"
}

The above command returns "201 - Created" and the following structured JSON on success:

{
  "content": {
    "redirect_url": "https://your.redirect.url.without.protocol.prefix",
    "pay_redirect_url": "https://127.0.0.1:8081/payment/paymentwall-test.php"
  }
}

Use this call to issue payment for unpayed Store Orders.

HTTP Request

POST https://zkm.myloc.de/api/orders/{order}/pay/{payment-method}?sat={secure_access_token}

URL Parameters

Parameter Type Description
order string The id of your existing Store Order.
sat string The secure_access_token of your existing Store Order.
payment-method string The Payment Method you want to use for payment.

POST Parameters

Parameter Type Description
redirect_url string The URL you want the payment provider to redirect to after payment is finished.

Response contents

Key | Type | Description redirect_url | string | The URL the payment provider will redirect to after payment is complete. pay_redirect_url | string | The external URL of the chosen payment provider.

WHMCS

[GET] Latest Version

curl -X GET "https://zkm.myloc.de/api/whmcs/latest-version/beta"
-H "accept: application/json" 
-H "Authorization: Bearer {oauth_token}"

This command will result in "200 - OK" on success and return the following structured JSON:

{
  "content": {
    "latest-version": "1.0.1-beta",
    "download-link": "https://doma.in/whmcsplugin-1.0.1-beta.tar.gz"
  }
}

Returns the latest version and its download link as strings, excluding beta versions. You may optionally specify a "min_stability" parameter to include beta versions.

HTTP Request

GET https://zkm.myloc.de/api/whmcs/latest-version/{min_stability}

URL Parameters

Parameter Type Description
min_stability string Optional Parameter. Either "beta" or "stable" (default if omitted). Determines if beta versions shall be included when looking for the latest version.

Response contents

This method will return a 200 - OK and the following content on success:

Key Type Description filterable
latest-version string The latest version string: major.minor.revision-tag, where the tag may be omitted no
download-link string Link to the latest versions binaries in tar.gz format no

DNS

[GET] Zone

curl -X GET "https://zkm.myloc.de/api/dns/zone/{zone}"
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

The above command returns JSON structured like this:

{
  "content": {
    "records": [
      {
        "ttl": 3600,
        "type": "A",
        "name": "*.example.com.",
        "content": "127.0.0.1"
      },
      {
        "ttl": 3600,
        "type": "MX",
        "name": "example.com.",
        "content": "10 mail.example.com."
      },
      {
        "ttl": 3600,
        "type": "A",
        "name": "example.com.",
        "content": "127.0.0.1"
      }
    ]
  }
}

This endpoint retrieves all records for the given zone name.

HTTP Request

GET https://zkm.myloc.de/api/dns/zone/{zone}

URL Parameters

Parameter Type Description
zone string The zone name

Response contents

Key Type Description
records array The records of the zone. See DnsRecord

[PUT] Zone

curl -X PUT "https://zkm.myloc.de/api/dns/zone/{zone}" -d "{ \"name\": \"*.example.com\", \"type\": \"A\", \"content\": \"127.0.0.1\", \"ttl\": 3600}"
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

This is the POST body in structured JSON format:

{
  "ttl": 3600,
  "type": "A",
  "name": "*.example.com.",
  "content": "127.0.0.1"
}

This endpoint adds a record to the dns zone

HTTP Request

PUT https://zkm.myloc.de/api/dns/zone/{zone}

URL Parameters

Parameter Type Description
zone string The zone name

POST Parameters

Key Type Description
ttl int Time to life of the record. The time the record should be cached until it gets fetched from the dns server
type string Record type. For example A, AAAA,or MX
name string Record name
content string Record content. For example 127.0.0.1 for an A record

[PATCH] Zone

curl -X GET "https://zkm.myloc.de/api/dns/zone/{zone}"   --data-raw '{"new":{"name":"*.example.com","type":"A","content":"127.0.0.1","ttl":3600},"old":{"name":"*.example.com","type":"A","content":"10.0.0.1","ttl":3600}}' 
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

This is the POST body in structured JSON format:

{
  "new": {
    "name":"*.example.com",
    "type":"A",
    "content":"127.0.0.1",
    "ttl":3600
  },
  "old": {
    "name":"*.example.com",
    "type":"A",
    "content":"10.0.0.1",
    "ttl":3600
  }
}

This endpoint takes a new and old DnsRecord entity and updates the old with the new data.

HTTP Request

PATCH https://zkm.myloc.de/api/dns/zone/{zone}

URL Parameters

Parameter Type Description
zone string The zone name

POST Parameters

Key Type Description
new DnsRecord The updated DnsRecord
old DnsRecord The old DnsRecord which should be replaced

[DELETE] Zone

curl -X DELETE "https://zkm.myloc.de/api/dns/zone/{zone}" -H "Content-Type: application/json" -d "{ \"name\": \"*.example.com\", \"type\": \"A\", \"content\": \"10.0.0.1\"}"
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

This is the POST body in structured JSON format:

{
    "name":"*.example.com",
    "type":"A",
    "content":"10.0.0.1"
  }

This endpoint deletes a record from the zone.

HTTP Request

DELETE https://zkm.myloc.de/api/dns/zone/{zone}

URL Parameters

Parameter Type Description
zone string The zone name

POST Parameters

Key Type Description
type string Record type. For example A, AAAA,or MX
name string Record name
content string Record content. For example 127.0.0.1 for an A record

Pagination and Limiting

Example query without specifying page or limit:

curl -X GET "https://zkm.myloc.net/api/vps" 
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

Response:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 4
  },
  "content": [
    "item 1, truncated for readability",
    "item 2, truncated for readability",
    "item 3, truncated for readability",
    "item 4, truncated for readability"
  ]
}

Example query with limit. Note how the metadata of the response changed:

curl -X GET "https://zkm.myloc.net/api/vps?%24limit=2" 
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

Response:

{
  "meta": {
    "total_pages": 2,
    "current_page": 1,
    "items_per_page": 2,
    "total_items": 4
  },
  "content": [
    "item 1, truncated for readability",
    "item 2, truncated for readability"
  ]
}

Example query with limit, requesting a higher page. Note how the metadata of the response changed:

curl -X GET "https://zkm.myloc.net/api/vps?%24page=2&%24limit=2" 
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

Response:

{
  "meta": {
    "total_pages": 2,
    "current_page": 2,
    "items_per_page": 2,
    "total_items": 4
  },
  "content": [
    "item 3, truncated for readability",
    "item 4, truncated for readability"
  ]
}

GET Endpoints returning lists support pagination and limiting by submitting query parameters

HTTP Request

GET https://zkm.myloc.net/api/vps?%24page=2&%24limit=2

GET Parameters

Parameter Description
page integer specifying the page to returned in case of multiple pages
limit integer specifying the number of items per page to be returned. Defaults to 10

Response metadata

The meta object in the response contains the following metadata:

key Description
total_pages integer specifying the total number of pages, starting with page 1 (not 0!)
current_page integer specifying the number of the current page, starting with page 1 (not 0!)
items_per_page integer specifying the number of items per page. Defaults to 10. If you supplied a limit parameter this will equal your supplied limit
total_items integer specifying the total number of items available

Filter

For example, to retrieve all your tokens for a specific user-handle, use:

curl -X GET "https://zkm.myloc.de/api/token?%24filter%5B%5D=eq(user.handle%2C%20'123456-1')" 
-H "accept: application/json" 
-H "Authorization: Bearer oauth-token"

Response:

{
  "meta": {
    "total_pages": 1,
    "current_page": 1,
    "items_per_page": 10,
    "total_items": 1
  },
  "content": [
    {
      "token": "oauth-token",
      "expires_at": "2999-01-01T23:59:59+0100",
      "scope": [
        "API_ACCESS_TOKEN_READ",
        "API_ACCESS_TOKEN_WRITE",
        "API_IP_READ",
        "API_IP_WRITE",
        "API_LICENSE_READ",
        "API_LICENSE_WRITE",
        "API_ME_READ",
        "API_OFFER_READ",
        "API_PRODUCTS_READ",
        "API_REMOTE_MANAGEMENT_READ",
        "API_REMOTE_MANAGEMENT_WRITE",
        "API_SERVER_EDIT",
        "API_SERVER_LIST",
        "API_SOFTWARE_LIST",
        "API_SUBUSER_READ",
        "API_SUBUSER_WRITE",
        "API_TRAFFIC_READ"
      ],
      "user": {
        "handle": "123456-1",
        "active": true,
        "last_login": "2019-03-20T14:53:19+0100",
        "lastname": "Alfred",
        "firstname": "Nobel",
        "email": "alfred@peace.app",
        "comment": null,
        "client": {},
        "contracts": [
          {
            "id": 1234,
            "entity_type": "default"
          }
        ]
      }
    }
  ]
}

Many API methods are capable of filtering the returned results. Refer to the table below and the provided examples to learn about the correct syntax.

Function Description Example
eq Field = value eq(hostname, 'crocus.plantserver.de')
neq Field is not equal to provided value(≠) neq(hostname, 'crocus.plantserver.de')
startswith Field begins with substring startswith(hostname, 'myhost')
endswith Field ends with substring endswith(hostname, 'de')
contains Field contains substring contains(hostname, 'plantserver')
is Field is true/false is(main, 'true')
gt Field is > value gt(id, 1234)
gte Field is ≥ value gte(id, 1234)
lte Field is ≤ value lte(id, 1234)
lt Field is < value lt(id, 1234)
in Field contains one of the provided values in(hostname, ['abies.plantserver.de', 'bidens.plantserver.de'])
notin Field contains none of the provided values notin(hostname, ['abies.plantserver.de', 'bidens.plantserver.de'])
null Field is NULL null(hostname)
notnull Field is not NULL notnull(hostname)

Equals

Return only results, where the specified field equals the supplied value.

HTTP Request

GET https://zkm.myloc.de/api/token?$filter[]=eq(user.handle, '123456-4')

Errors

The myLoc API uses the following error codes:

Error Code Meaning
400 Bad Request -- Your request is invalid, without more detailed specification. Sorry, but you have to sort this out yourself.
401 Unauthorized -- Something is wrong with your token.
403 Forbidden -- Your token has not the permissions to request this resource. See Permissions for details.
404 Not Found -- The resource could not be found.
405 Method Not Allowed -- You tried to access a resource with an invalid method.
418 I'm a teapot.
500 Internal Server Error -- We are experiencing internal problems. Try again later. If this error persists, contact support.
503 Service Unavailable -- We're temporarily offline for maintenance or other reasons. Please try again later.

Entities

User

{
    "handle": "123456-2",
    "active": true,
    "last_login": "2019-12-17T11:49:26+0100",
    "lastname": "John",
    "firstname": "Doe",
    "email": null,
    "comment": null,
    "client": null,
    "contracts": [],
    "language": {
        "code": "en",
        "locale": "en_US"
      }
}
Key Type Description
handle string The users id. Consists of the owning Clients id and a suffixed number (in case of Subusers).
language object The Language.
client object The Client owning this user.
active boolean True, if the user-account is active. False otherwise.
last_login datetime Time of the last successful login attempt.
lastname string The users last name.
firstname string The users first name.
email string The users email address.
comment string A custom string.
contracts array An array of contracts associated with this (sub)user. See Contract Entity.

Client

{
    "id": 123456,
    "salutation": "male",
    "mandator": "webtropia",
    "company": "",
    "first_name": "Thomas",
    "last_name": "Edison",
    "birthday": "1847-02-11",
    "postal_code": "12345",
    "city": "Milan",
    "street": "Bulbboulevard",
    "email": "some@dummymail.void",
    "phone": "+492120000000007",
    "fax": "",
    "mobile": "+4912345678900",
    "active": true,
    "country": null,
    "marketing_agreements": {
      "mail_accepted": true,
      "phone_accepted": true
    },
    "create_datetime": "2010-02-17T13:16:14+0100",
    "invoice_mail": "some@dummymail.void",
    "ust_id": "",
    "language": {
      "code": "en",
      "locale": "en_US"
    },
    "how_find_us": null,
    "advertiser": null
}
Key Type Description
id int The clients unique identifier.
salutation string The sex, determining how emails are formulated.
mandator string The brand this client contracts are assigned to.
first_name string The clients first name.
last_name string The clients last name.
birthday string The clients birthday.
postal_code string The clients postal code.
city string The clients city of residence.
street string The clients street.
email string The clients email.
phone string The clients phone.
fax string The clients fax.
mobile string The clients mobile phone.
active boolean Whether or not this clients account is active.
country object The Coutry this client is from.
marketing_agreements object Whether or not the client accepted to be contacted through various channels for marketing purposes.
create_datetime string The date and time this client was created.
invoice_mail string The email address the clients invoices are addressed to
ust_id string VAT id
language object The Language.
how_find_us string How the client found us.

Country

{
      "id": 52,
      "continent": "Europa",
      "name": "Germany",
      "capital": "Berlin",
      "iso2": "DE",
      "iso3": "DEU",
      "ioc": "GER",
      "domain": ".de",
      "currency": "EUR",
      "phone": "+49"
    }
Key Type Description
id int The unique identifier.
continent string -
name string The countries name.
capital string The countries capital.
iso2 string The country code (iso2).
iso3 string The country code (iso3).
ioc string The country code (ioc).
domain string The countries TLD.
currency string The countries currency.
phone string The countries area code.

Product

{
    "id": 5645,
    "name": "Dedicated Server M",
    "brand": "hp_proliant",
    "type": "server",
    "mandator": "servhost",
    "alias": "my_dedicated_server_m",
    "order_form_type": "DedicatedServerM",
    "groups": [
      null
    ],
    "properties": [],
    "price": [
      null
    ],
    "images": [
      {
        "format": "main",
        "url": "https://zkm.myloc.de/images/api/products/DL160_Gen9.png"
      }
    ],
    "availability": "in_stock"
}
Key Type Description
id int Unique identifier, referencing a specific version of a product. Will change whenever the product is updated internally, so do not persist this id in your system.
name string The human readable name displayed in our store.
brand string Information related to the servers brand for internal use. may not make any sense to the outside world.
type string The type of the product, primarily for internal use. See below.
mandator string For internal use.
alias string For internal use only.
order_form_type string For internal use.
groups object Array of groups this product is listed in. See Product Group. For internal use.
properties array Array of product properties for internal use. See below.
price object See Price Entity
images array An array containing urls of product images
availability string Information about this products availability. May be "in_stock", "limited" or "sold"

Product Types

Possible product types:

Type Description
eric -
nas -
ssd A drive of "SSD" type.
cpu -
ram -
usb -
hardware-raid -
raid-controller -
hdd A drive of "HDD" type.
battery-pack -
ilo -
sas -
redundant-power-supply -
kvm -
gigabit-network -
additional-network-card -
graphics-card -
hdds The hdd container product represents a set of slots that can be filled with different drives.
iscsi-target -
storage-node -
nvme A drive of "NVME" type.
cloud-storage -
server -
vps -
ip -
licenses -
license -
cloud-backup -
office365 -
azure-stack -
installation -
backup-space -
ip-net -
traffic-flat -
virtual -
housing -
virtual-server -
reseller -
customized-hosting -
power-supply -
datacenter-rack -
datacenter-cage -
datacenter-traffic -
datacenter-power -
datacenter-housing -
datacenter-service -
gigabit-switch -
cloud -
sms -
failover-ip -
managed-hosting -
managed-service -
managed-port -
managed-switch -
datacenter-prs -
firewall -
loadbalancer -
sla -
support-package -
hands-on-time -
rack -
additional-port -
additional-rack-unit -
additional-power-supply -
managed-firewall -
additional-key -
ssl-certificate -
traffic -

Product properties

Product properties are mainly used for internal purposes and may be changed or extended without further notice. Possible product properties (not exhaustive):

Key Values Description
OPERATING_SYSTEM_TYPE windows / linux Which type of operating system is installed
CHANGE_OS_AVAILABLE true / false Whether or not the operating system can be switched
VIRTUALIZATION_TYPE vm / ct Whether a virtual server is containerized (ct) or a real virtual machine
ASSERT_EQUAL_STORAGE_TYPE true / false If true, the server requires the same drive on all available slots

Slug

{
    "slug": "product_slug_string",
    "alias": "string",
    "product": {}
}

A product slug is the unique identifier you have to use whenever you want to persist a reference to a myLoc product. If you want to make Api requests for a specific product, use the slug to get the current product id from the /product endpoint. Use the obtained product id in all subsequent queries.

The reason is simple: Whenever a product is updated internally, e.g. when we change the associated RAM subproduct or the VAT (happened 2020 during the corona pandemic), the id you see on api calls will change. The product id references a specific version of a product. When a new version is created by updating a product, the old version will no longer be orderable. When you for example queried the /products on christmas 2020, you would have seen the same products, butdifferent product ids than in january 2021. Why? Because the VAT for all products changed 2021-01-01. Conclusion: use product slugs when saving product references. Call the API for the current valid Id using the slug.

Key Type Description
slug string A products unique, persistant identifier.
alias string The same as slug, but deprecated. Use the slug attribute instead.
product object See Product Entity.

Product Group

{
    "category": "dedicated_server",
    "name": "Dedizierte Server"
}

The following categories do exist:

Category
dedicated_server
root_server
virtual_server
cloud_hosting
hosting
base_license
root_server_windows
root_server_linux
root_server_windows_2016
offer

Price

{
    "billing_currency": "EUR",
    "billing_price": 0,
    "display_currency": "EUR",
    "display_price": 0,
    "vat_included": true,
    "tax_rate": 19,
    "interval_type": "MONTH",
    "interval_duration": -1,
    "special": false
}
Key Type Description
billing_currency string The currency for billing, normally EUR.
billing_price float -
display_currency string For some endpoints, you may specify a custom currency in the request for displaying to foreign customers. See currencies.
display_price float -
vat_included boolean If VAT is included in the price.
tax_rate int The tax rate in %
interval_type string Only returned in case of interval prices. The type of the billing interval [WEEK / 2WEEK / MONTH / 2MONTH / QUATER / 6MONTH / YEAR / 2YEAR / 3YEAR / 6YEAR]. Yes, we know it should read "quarter", but ...
interval_duration int The length of the period this price applies to in months. Only set in case of special account prices. For example: you order a server with a 6 month contract and get a special discount on the first three months. This scenario will be represented by two separate price objects, where the first price object has a interval_duration of 3.
special boolean True if this price object represents a non-standard price, e.g. in case of a special discount for the first x months of a contract.

Product Period

Three example entities:

 [
    {
        "slug": "3_MONTH_PREPAID",
        "discount": 2.5,
        "auto_quit": true,
        "prepaid_entire_duration": true,
        "contract_period": 3,
        "discount_price": 0,
        "additional_price": 0,
        "setup_price": 0,
        "setup_month": 0,
        "special_discount": null,
        "special_discount_month": null
      },
      {
        "slug": "3_MONTH_CONTRACT_IN_ADVANCE",
        "discount": 2.5,
        "auto_quit": false,
        "prepaid_entire_duration": true,
        "contract_period": 3,
        "discount_price": 0,
        "additional_price": 0,
        "setup_price": 0,
        "setup_month": 0,
        "special_discount": null,
        "special_discount_month": null
      },
      {
        "slug": "3_MONTH_CONTRACT",
        "discount": 2.5,
        "auto_quit": false,
        "prepaid_entire_duration": false,
        "contract_period": 3,
        "discount_price": 0,
        "additional_price": 0,
        "setup_price": 0,
        "setup_month": 0,
        "special_discount": null,
        "special_discount_month": null
      }
]

A Product Period entity contains detailed information concerning they payment of a product. Taking a look at the example on the right we notice three main "types" of Product Periods.

Prepaid

When you order a product as prepaid, you have to pay the complete duration in advance before the order is processed and you get access to your server. Notice the attribute "prepaid_entire_duration", which indicates this behaviour.

Products ordered with a prepaid Product Period are not automatically renewed after the paid period expires. The underlying contract will be automatically quit after the period is over and has to be renewed manually. See the attribute "auto_quit" in conjunction with "contract_period".

Contract

This type of Product Period behaves the way you would normally expect. The Product is ordered and the order is processed normally, without the need to pay in advance. You will receive a normal invoice ("prepaid_entire_duration: false"). If you normally would receive a monthly invoice, the order will appear there.

Your contract will automatically be renewed ("auto_quit: false") once the duration ("contract_period: 3") is over.

Contract in advance

This is basically the same as the "Contract" type. The only difference is the payment: on "advance" contracts the entire duration ("contract_period: 3") is billed at once in advance. You will receive a normal invoice at the beginning of each period.

Your contract will automatically be renewed ("auto_quit: false") once the duration ("contract_period: 3") is over.

Key Type Description
slug string A unique identifier for this period.
discount float The discount in % you receive when you order the product with this period.
auto_quit boolean True if the contract is automatically quit after the period is over. False otherwise.
prepaid_entire_duration boolean True the entire period is billed and payed in advance. False if the period is billed monthly
contract_period int The length of this period in months
discount_price float Fixed discount in Euro you receive when you order the product with this period (net).
additional_price float Extra charge in Euro you pay when you order the product with this period (net).
setup_price float The amount charged for setup of this product when you order it with this period.
setup_month int Number of months until the setup_price is charged in. 0 will charge the setup price instantly.
special_discount float Discount in % you receive for the first special_discount_month months when ordering the product with this period. This overrides the other discount types for X months
special_discount_month int Number of months you receive the special_discount.

License Container

{
   "license_container_contract_id": 123456,
   "description": "a customizable description",
   "license": null
 }

This object represents a license container. Every License is wrapped by a license container.

Key Type Description
license_container_contract_id int The id of the contract representing this License Container.
description string A custom description.
license object The License object.

License

{
 "id": 71663,
 "type": "plesk",
 "status": "PREPARED",
 "create_date_time": "2019-09-20T15:30:42+0200",
 "ip_address": null,
 "key_number": null,
 "activation_code": null,
 "items": [
   null
 ]
}

Key Type Description
id int The id of this License.
type string The licenses type. [cpanel/csp/plesk/virtuozzo].
status string The licenses status. [PREPARED/TERMINATED/ACTIVE].
create_date_time string Date and time of the licenses creation.
ip_address string The IP this license is bound to, if any.
key_number string The key of this license. The key is used to refer to the license when communicating with the licenses vendor.
activation_code string The activation code for the license, if needed.
items array Array of License Item objects.

License Item

{
 "item_key": "PLESK-12-WEB-ADMIN-1M"
}
Key Type Description
item_key string A string identifying the type of license item.

Software

{
  "id": 911,
  "operating_system": null,
  "admintool": null,
  "language": null,
  "software_raid": true,
  "raid_level": [
    0,
    1
  ],
  "price": null
}
Key Type Description
id int the software bundles unique identifier
operating_system object See Operating System.
admintool object information about the admintool contained in this bundle. See Admintool.
language object Information about the language. See Language.
software_raid bool True if software raid supported, false oterhwise
raid_level array List containing the possible raidlevel as integer, in case a raid is present
price object Array containing price information. See Price.

Operating System

{
    "id": 73,
    "name": "Debian",
    "handle": "linux",
    "version": "8.0",
    "latest": false,
    "icons": {
      "16x16": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-16x16.png",
      "32x32": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-32x32.png",
      "64x64": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-64x64.png",
      "128x128": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-128x128.png",
      "256x256": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-256x256.png",
      "512x512": "https://zkm.myloc.de/images/api/icons/operatingsystems/debian-512x512.png"
    }
}
Key Type Description
operating_system.id int -
operating_system.name string -
operating_system.handle string windows / linux
operating_system.version string -
operating_system.latest bool True, if this version is the latest available version for this OS. False otherwise.
operating_system.icons object Array containing urls pointing to icons representing this OS.

Admintool

{
    "name": "Plesk",
    "handle": "plesk"
}
Key Type Description
admintool.name string -
admintool.handle plesk / plain -

Language

{
  "code": "ru",
  "name": "Russisch",
  "install_code": "ru-RU"
}
Key Type Description
language.code string Code representing the language, e.g. de, us, ru.
language.name string The languages name in german
language.locale string The languages locale, e.g. de-DE, en-US, ru-RU. Sometimes aliased as "install_code".

Ip

{
  "ip_address": "127.0.0.2",
  "subnet": "127.0.0.2/32",
  "gateway": "127.0.0.1",
  "main": "true",
  "rdns_entry": "seat.workspace.home",
  "rdns_entries": [
    {
      "domain": "seat.workspace.home",
      "time_to_live": "86400",
      "ip_address": "string"
    }
  ],
  "routing_type": "hostroute",
  "target_contract": "1337"
}
Key Type Description
ip_address string Ip in dotted format.
subnet string The subnetmask.
gateway string The gateway.
main boolean True if this is the servers main ip.
rdns_entry string The rdns entries domain set for this ip, if any.
rdns_entries string A list of all existing rdns entries for this ip with details.
routing_type string The ips routing type [hostroute / vlan].
target_contract int The id of the Contract this ip belongs to.

Rdns

{
  "domain": "easy-ddos.de",
  "time_to_life": 86400,
  "ip_address": "62.141.39.240"
}
Key Type Description
domain string The domain for this RDNS entry.
time_to_life int The time to live in seconds.
ip_address string The RDNS' entrys associated ip in dotted format.

Cart

{
    "id": "3d71ae68-d46a-441d-b3f9-a143cd7593ab",
    "access_key": "95gtgj1p16w4wcccs8csk8000cwss8wco0cg80csco4scsc4o",
    "items": [
          null
        ],
    "referral": null,
    "coupon": null,
    "price": [
      null
    ],
    "total_amount": null
}
Key Type Description
id string This carts unique identifier. It is returned after calling [POST] Store Cart.
access_key string This carts unique access key. It is returned after calling [POST] Store Cart.
items array Array of Cart Item Objects
referral - -
coupon - The coupon code, if any.
total_amount object A Price object representing the price of the whole cart, including all items. See Price.

Cart Item Options

{
    "raid_level": 0
}

Text here

Cart Item

{ 
    "sub_items": null,
    "amount": 1,
    "price": [
      null
    ],
    "type": "server",
    "product": null,
    "period": null,
    "options": null
}
Key Type Description
product int The id of the product you want to put in the cart.
options object Configuration options for this product. See Cart Item Options.
sub_items object The configuration of your product. Will fall back to default values for most items. See Cart Subitems.
period string The period as returned by Product Periods
amount int The amount you want to put in the cart
type string The type of Cart Item. [product / domain / offer / server / office / acronis_data_cloud / default]
price array Array of Prices. In case of discounts that apply on certain periods (e.g. 50% on the first month) this array will contain multiple objects.

Cart Subitems

{
    "cpu": {
      "product": 5632
    },
    "ram": {
      "product": 3958
    },
    "hdds": {
      "1": {
        "product": 5146
      },
      "2": {
        "product": 5146
      }
    },
    "install": {
      "software": 1809
    }
}
Key Type Description
cpu object The cpu subitems details.
ram object The ram subitems details.
hdds object The hdd subitems details. May contain multiple hdd subitems.
install object The software subitem to install.

Store Order

{
  "content": {
    "id": "d5288d78-7867-41e6-9dfc-c7ad57bff65b",
    "secure_access_token": "1266af13d3ef4f248d3f89a396c96008",
    "date": "2020-02-06T10:05:32+0100",
    "total_amount": 129.99,
    "prepaid": true,
    "payment_required": true,
    "pay_date": null,
    "validation_date": null,
    "is_rejected": false,
    "client": null,
    "items": [
      null
    ],
    "satisfaction": null,
    "tracked": false
  }
}
Key Type Description
id string The unique identifier of this order.
secure_access_token string A token used for accessing your order data.
date string The date and time the order was received.
total_amount float The total amount of this order in EUR.
prepaid boolean Whether or not this order is a prepaid order. If true the order will be processed further after payment was received.
payment_required boolean Whether or not the order is awaiting payment for further processing. For non-prepaid orders this value is false.
paydate string The date and time of payment. For prepaid orders this is null initially. For non-prepaid orders this equals to the date and time the order was received.
validation_date string The date and time of order validation. Each order requires validation. If this value is null, the validation is still pending.
rejected boolean Whether or not this order was rejected during validation. This value is false when validation is still pending (read: validation_date is null). If the validation_date is not null and this value is true, the order was rejected. If it is false the order was considered valid.
client object The Client this order belongs to.
items array Array of Store Order Item objects.

Store Order Item

{
    "sub_items": [
      null
    ],
    "id": "5e73b01b-a182-4412-a8c8-4e80881f163c",
    "type": "server",
    "product": null,
    "period": null,
    "contract": null
}

If applicable, the field "contract" contains basic information about the contract that was generated for this item (id, create date)

Item Types

Type Description
product -
server -
domain -
office -
offer -
default -

Store Order Subitem

{
    "id": "22351ce7-3dd2-416f-8581-f037e82bd27d",
    "options": null,
    "type": "product_licenses",
    "product": null,
    "subitems": []
}
Key Type Description
id string The unique identifier of this item
options array Array containing options in case of items, that are further configurable
type string The type of subitem. See Subitem Types.
product object The product associated with this subitem. See Product
subitems array Array of Store Order Subitems. May be empty.

Subitem Types

Type Description
product -
product_hdds HDD Container
product_hdd The drives themselves
product_licenses License Container
product_license The licenses themselves
software -
default -

Payment Methods

{
  "content": [
    {
      "id": "sepa-new",
      "name": "SEPA",
      "type": "inline",
      "url": null,
      "new_window": false,
      "image": "https://zkm.myloc.de/images/api/payment-icons/sepa-new.png",
      "img_class": "sepa",
      "price": 129.99,
      "transaction_costs": 0,
      "price_total": 129.99
    },
    {
      "id": "sepa",
      "name": "SEPA",
      "type": "inline",
      "url": null,
      "new_window": false,
      "image": "https://zkm.myloc.de/images/api/payment-icons/sepa.png",
      "img_class": "sepa",
      "price": 129.99,
      "transaction_costs": 0,
      "price_total": 129.99
    },
    {
      "id": "paypal",
      "name": "PayPal",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/paypal",
      "new_window": true,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_paypal.png",
      "image_class": "paypal",
      "price": 129.99,
      "transaction_costs": "6.50",
      "price_total": "136.49"
    },
    {
      "id": "gateway",
      "name": "Credit Cards",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/gateway",
      "new_window": false,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_gateway.png",
      "image_class": "gateway",
      "price": 129.99,
      "transaction_costs": "6.50",
      "price_total": "136.49"
    },
    {
      "id": "webmoney",
      "name": "Webmoney",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/webmoney",
      "new_window": true,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_webmoney.png",
      "image_class": "webmoney",
      "price": 129.99,
      "transaction_costs": "10.40",
      "price_total": "140.39"
    },
    {
      "id": "sofortbanktransfer",
      "name": "Klarna",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/sofortbanktransfer",
      "new_window": true,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_sofortbanktransfer.png",
      "image_class": "sofortbanktransfer",
      "price": 129.99,
      "transaction_costs": "6.50",
      "price_total": "136.49"
    },
    {
      "id": "paysafecard",
      "name": "Paysafecard",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/paysafecard",
      "new_window": false,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_paysafecard.png",
      "image_class": "paysafecard",
      "price": 129.99,
      "transaction_costs": "19.50",
      "price_total": "149.49"
    },
    {
      "id": "giropay",
      "name": "Giropay",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/giropay",
      "new_window": false,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_giropay.png",
      "image_class": "giropay",
      "price": 129.99,
      "transaction_costs": "9.10",
      "price_total": "139.09"
    },
    {
      "id": "mobiamo",
      "name": "Mobiamo",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/mobiamo",
      "new_window": false,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_mobiamo.png",
      "image_class": "mobiamo",
      "price": 129.99,
      "transaction_costs": "52.00",
      "price_total": "181.99"
    },
    {
      "id": "test",
      "name": "Test Method",
      "type": "redirect",
      "url": "https://zkm.myloc.de/api/orders/cc4e2833-89a1-48f0-9579-87c15e28fe5b/pay/test",
      "new_window": null,
      "image": "https://api.paymentwall.com/images/ps_logos/pm_dummy.png",
      "image_class": null,
      "price": 129.99,
      "transaction_costs": "6.50",
      "price_total": "136.49"
    }
  ]
}
Key Type Description
sepa-new string -
sepa string -
paypal string -
gateway string -
webmoney string -
sofortbanktransfer string -
paysafecard string -
giropay string -
mobiamo string -
test string For testing purposes.

Contract

{
  "content": {
    "id": 123456,
    "create_date": "2020-11-17T10:07:58.362Z",
    "hostname": "srv123456.example.server-hosting.expert",
    "product": {
      "id": 4728,
      "name": "vServer Windows M",
      "type": "string"
    },
    "status": "Y",
    "bill_interval": "month",
    "interval_price": 99.90,
    "paid_until_date": "2018-04-25T07:58:11+0200",
    "possible_termination_date": "2018-10-16",
    "termination_date": "2018-10-16T23:00:00+0200",
    "description": "My description",
    "sub_contracts": [],
    "entity_type": "default"
  }
}
Key Type Description
id int The ID of the requested contract
create_date string -
hostname string -
product array Basic information about the underlying product. See Product
status string One of the following: TA (waiting for activation), Y (active), TD (waiting for deactivation), D (deactivated)
bill_interval string Identifier for the interval in which billing occurs, e.g. "month"
interval_price float Price including taxes that is due in this billing interval
paid_until_date string The contract has been paid up to this date
possible_termination_date string The next possible termination date
termination_date string Date on which this contract is going to be terminated
description string A custom description you may adapt to your needs
sub_contracts array An array of subcontracts belonging to the requested contract
entity_type string The type of contract. See below

Contract Types

Possible contract types:

Type Description
default Most contracts are of this type
cloud_backup -
cloud_storage -
office_365 -
azure_stack -
snapshot -

RaidSet

{
  "id": 20,
  "operating_system": "linux",
  "hdds": [
    {
      "slot": 0,
      "type": "sata"
    }
  ],
  "partitions": [
    {
      "level": 0,
      "mountpoint": "/",
      "size": "*",
      "filesystem": "ext4"
    }
  ]
}
Key Type Description
id int The Id of the RAID set
operating_system string The operating system the server is using
hdds array Information about the drives. Also See RaidSet HDD
partitons array Information about the partitions. Also See RaidSet Partition

RaidSet HDD

{
  "slot": 0,
  "type": "sata"
}
Key Type Description
slot int The HDD slot to use. Slots start at 0 and are bound to the order of the HDD's provided in order
type string The type the HDD uses (sata or nvme)

RaidSet Partition

{
  "level": 1,
  "mountpoint": "/boot",
  "size": "5%",
  "filesystem": "ext4"
}
Key Type Description
level int The raidlevel of the partition. Currently supporting 0, 1, 5, 6, 10
mountpoint string The mountpoint the partition should be mounted on. e.g. "/", "/boot", "/mnt/data"
size string The size as a percentage. This can be an integer between 1 and 99 or a float from 0.01 to 99.99 that ends with a percentage sign. One partition may use * for all of the remaining disk space
filesystem string currently fixed to ext4 for everything except the swap partition. Should not be transmitted in POST requests

DnsRecord

{
  "ttl": 3600,
  "type": "A",
  "name": "example.com.",
  "content": "127.0.0.1"
}
Key Type Description
ttl int Time to life of the record. The time the record should be cached until it gets fetched from the dns server
type string Record type. For example A, AAAA,or MX
name string Record name
content string Record content. For example 127.0.0.1 for an A record