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 |
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¤cy=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}¤cy={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¤cy=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}¤cy={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>§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>§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>§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>§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>§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>§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>§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>§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>§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>§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>§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>§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>§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>§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. |
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. |
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 |