Download OpenAPI specification:
This documents the API provided by WK-Serv/Netzhoster to be used by its own customer SSC as well as direct connections from customer's infrastructure.
performs authentification of the user and respnses with an API-token to be used as authorization for GUI/TUI acces (preventing sending credentials on every request). Usage of token is mandatory if user has 2FA configured
{- "status": "success",
- "data": {
- "token": "cc8a96f0-7f1a-44b2-b5e1-23d2b9f607fa",
- "userinfo": {
- "displayName": "Max Mustermann",
- "allowedModules": {
- "GEN": 1023,
- "ACC": 1023,
- "DNS": 1023,
- "DOM": 1023
}
}
}
}sends 2FA information to finish login/token request
{- "otpType": 3,
- "otp": "xXxXxX"
}{- "status": "success",
- "data": {
- "token": "cc8a96f0-7f1a-44b2-b5e1-23d2b9f607fa",
- "userinfo": {
- "displayName": "Max Mustermann",
- "allowedModules": {
- "GEN": 1023,
- "ACC": 1023,
- "DNS": 1023,
- "DOM": 1023
}
}
}
}initiates password reset process: sending reset-code via email; Attention for BasicAuth: "user" has to be the user login, "password" to be set to the users contact email address
{- "status": "success",
- "data": {
- "token": "03e3bd6c-3056-493e-8fed-0fc883d80cf8",
- "Auth2FA": [
- 1,
- 2
], - "userinfo": {
- "displayName": "Max Mustermann"
}
}
}finalise password reset by checking security code and setting new password (no auto-login!)
{- "resetCode": "xXxXxX",
- "newPassword": "changeMeNew1234",
- "otpType": 3,
- "otp": "xXxXxX"
}{- "status": "success"
}sets new password for user
{- "newPassword": "changeMeNew1234"
}{- "status": "success"
}initiates 2FA configuration process: requesting setup for specific otpType. any existing configuration for given otpType will be overwritten after confirmation!
{- "otpType": 1
}{- "status": "success",
- "data": {
- "otpType": 1,
- "qrcode": "<data-url-style image>",
- "cdata": {
- "secret": "xXxXxX",
- "issuer": "Netzhoster SSC",
- "label": "aaa-muster2 (Max Mustermann)"
}
}
}finalise 2FA setup by confirming otp method offers valid token
{- "otpType": 3,
- "otp": "xXxXxX"
}{- "status": "success"
}get list all available customer this user is allowed to act on
{- "status": "success",
- "data": {
- "currentCustomer": 1,
- "customers": [
- {
- "uid": 2,
- "customerID": 10344,
- "customerName": "Customer 1 GmbH",
- "customerPrefix": "dee"
}, - {
- "uid": 3,
- "customerID": 12157,
- "customerName": "Scrooge McDuck plc",
- "customerPrefix": "vz7"
}, - {
- "uid": 1,
- "customerID": 10000,
- "customerName": "ACME BV",
- "customerPrefix": "aaa"
}
]
}
}| sub | boolean false (default): only current customer is looked at, true: customers belonging to current customer are included |
{- "status": "success",
- "data": [
- {
- "id": 1,
- "login": "00000,",
- "displayName": "Masteruser Kd 10000",
- "contact": "me@example.com",
- "modules": {
- "GEN": 1023,
- "ACC": 1023,
- "DNS": 1023,
- "DOM": 1023
}, - "active": true,
- "customerName": "Scrooge McDuck plc"
}, - {
- "id": 9,
- "login": "xxx-user,",
- "displayName": "Max Mustermann",
- "contact": "user1@example.com",
- "modules": {
- "GEN": 255,
- "ACC": 127,
- "DOM": 1023
}, - "active": true,
- "customerName": "Scrooge McDuck plc"
}
]
}| uid required | string uid of account to set password for, can be numeric userID (eg. 7, PREFERRED) or userNAME (eg. aaa-muster1, does not work for numeric primary users) |
{- "newPassword": "xXxXxX"
}{- "status": "success"
}| uid required | integer uid of account to set password for |
| active required | boolean true/false |
{- "newPassword": "xXxXxX"
}{- "status": "success"
}WARNING: function still in development!
creates new user account. if customer is omitted in request body the current customer is assumed; if modules is omitted, current users module permissions are copied 1:1; if modules is set permissions are set in extend to the customers privilege levels.
given userame will be prepended by customer prefix automatically
{- "login": "exampleuser",
- "password": "xXxXxX",
- "displayName": "John Doe",
- "contact": "john.doe@example.com",
- "active": true,
- "customer": "optional",
- "modules": {
- "GEN": 37
}
}{- "status": "success",
- "data": "xxx-exampleuser"
}| tld required | string tld (top-level-domain) to check |
| sld required | string sld (second-level-domain) to check |
{- "status": "success",
- "data": {
- "domain": "example.org",
- "sld": "example",
- "tld": "org",
- "available": false
}
}| sub | boolean false (default): only current customer is looked at, true: customers belonging to current customer are included |
| recursive | boolean false (default): only fist sub-customer-level is checked, true: customers are collected recursively (include sub*-sub-customers) |
| deleted | boolean include deleted (marked as deleted) domains |
| limittld | string limit list to given tld(s) (comma-separated) |
{- "status": "success",
- "data": [
- {
- "id": 3,
- "sld": "org",
- "tld": "example",
- "billedUntil": "2026-01-01",
- "owner": {
- "uid": 1,
- "customerID": 99999,
- "customerName": "Scrooge McDuck plc"
}
}, - {
- "id": 1,
- "sld": "com",
- "tld": "example",
- "billedUntil": "2026-01-01",
- "owner": {
- "uid": 1,
- "customerID": 99999,
- "customerName": "Scrooge McDuck plc"
}
}
]
}| sub | boolean false (default): only current customer is looked at, true: customers belonging to current customer are included |
{- "status": "success",
- "data": [
- {
- "id": 5,
- "zone": "dns-verwaltung.de",
- "type": "i",
- "owner": {
- "uid": 1,
- "customerID": 99999,
- "customerName": "Scrooge McDuck plc"
}, - "dnssec": true
}, - {
- "id": 6,
- "zone": "example.aero",
- "type": "e",
- "owner": {
- "uid": 1,
- "customerID": 99999,
- "customerName": "Scrooge McDuck plc"
}, - "dnssec": null
}
]
}| zone required | string name of DNS zone to get |
{- "status": "success",
- "data": {
- "zone": {
- "id": 5,
- "zone": "dns-verwaltung.de",
- "type": "i",
- "dnssec": true,
- "owner": {
- "uid": 1,
- "customerID": 99999,
- "customerName": "Scrooge McDuck plc"
}
}, - "records": {
- "A": [
- {
- "id": 25,
- "name": "dns-verwaltung.de",
- "content": "89.58.78.168",
- "prio": 0,
- "ttl": 60,
- "disabled": false,
- "dyndns": null
}, - {
- "id": 27,
- "name": "test.dns-verwaltung.de",
- "content": "4.5.6.7",
- "prio": 0,
- "ttl": 7200,
- "disabled": false,
- "dyndns": null
}
], - "AAAA": [
- {
- "id": 37,
- "name": "test.dns-verwaltung.de",
- "content": "fe80::1",
- "prio": null,
- "ttl": 7200,
- "disabled": false,
- "dyndns": null
}
], - "SOA": [
- {
- "id": 26,
- "name": "dns-verwaltung.de",
- "content": "ns1.wk-serv.de hostmaster@wk-serv.de 2026090203 10800 3600 604800 7200",
- "prio": 0,
- "ttl": 7200,
- "disabled": false,
- "dyndns": null
}
], - "NS": [
- {
- "id": 17,
- "name": "dns-verwaltung.de",
- "content": "ns2.wk-serv.de",
- "prio": null,
- "ttl": 7200,
- "disabled": false,
- "dyndns": null
}, - {
- "id": 18,
- "name": "dns-verwaltung.de",
- "content": "ns3.wk-serv.net",
- "prio": null,
- "ttl": 7200,
- "disabled": false,
- "dyndns": null
}
]
}, - "dnsupdateKeys": [
- "aaa-dnsupdate",
- "aaa-test3"
]
}
}modify owner and type of zone (omitted details will be unchanged)
| zone required | string name of DNS zone to modify |
{- "owner": 7,
- "type": "e"
}{- "status": "success"
}togggles status of DNSSec for zone:
| zone required | string name of DNS zone to set DNSSec for |
{- "status": "success"
}retrieves current DNSSec-information for zone (keys, dn-/dnskey-records, nsec3 information)
| zone required | string name of DNS zone to get DNSSec information for |
{- "status": "success",
- "data": {
- "dnskey": [
- {
- "content": "257 3 13 a0/iK8dJ96Zkv5nkS7GKyl8igqfSFvIELcCAEdlaZtzBLuAKh/8tuXowmlQHWPUMiVPJ3QjzHe4ehQi4DqnojQ== ; ( ECDSAP256SHA256 )"
}
], - "ds": [
- {
- "content": "31211 13 2 e7afbe9059c30833f6849b8238c5706ef211215e5e77c35dac017d5c7e1b40e1 ; ( SHA256 digest )"
}, - {
- "content": "31211 13 4 f881c58142bd24cf0c6c3ddc5a50716774a464e619c0e846bfa531103e540ffdbf2e1a07cccda17d92178d2543735304 ; ( SHA-384 digest )"
}
], - "key": [
- {
- "type": 257,
- "algorithm": 13,
- "length": 256,
- "active": true,
- "tag": 31211,
- "id": 1
}
], - "zone": {
- "id": 5,
- "zone": "dns-verwaltung.de",
- "type": "i",
- "owner": 1
}
}
}| zone required | string name of DNS zone to put record in |
{- "name": "sub.example.org",
- "type": "A",
- "content": "127.0.0.1",
- "ttl": 7200,
- "prio": 0,
- "disabled": false
}{- "status": "success"
}| zone required | string name of DNS zone to modify |
| recordid required | integer id of record to delete |
{- "status": "success",
- "data": {
- "id": 27,
- "type": "A",
- "name": "test.dns-verwaltung.de",
- "content": "4.5.6.7",
- "prio": 0,
- "ttl": 7200,
- "disabled": false
}
}modifies/patches given ressource record, all data omitted in request body will be unchanged
| zone required | string name of DNS zone to modify |
| recordid required | integer id of record to modify |
{- "content": "127.0.0.1",
- "ttl": 7200,
- "prio": 0
}{- "status": "success"
}retrieves list of users allowed to modify this record using the DynDNS-protocol
| zone required | string name of DNS zone to modify |
| recordid required | integer id of record to retieve data for |
{- "status": "success",
- "data": {
- "dyndnsUsers": [
- "aaa-muster1",
- "aaa-muster2"
]
}
}deletes user(s) from list of users allowed to modify this record using the DynDNS-protocol
| zone required | string name of DNS zone to modify |
| recordid required | integer id of record to delete ACL for |
{- "status": "success"
}adds user(s) to list of users allowed to modify this record using the DynDNS-protocol
| zone required | string name of DNS zone to modify |
| recordid required | integer id of record to delete ACL for |
{- "dyndnsUsers": [
- "aaa-muster1"
]
}{- "status": "success"
}{- "ip": "127.0.0.1",
- "hostname": [
- "dyn.example.org",
- "dyn.example.net"
]
}{- "status": "success"
}| zone required | string name of DNS zone |
| hostname required | string hostname to get configuration for |
{- "status": "success",
- "data": {
- "hostname": "forward.dns-verwaltung.de",
- "type": "h",
- "title": null
}
}| zone required | string name of DNS zone |
| hostname required | string hostname to get configuration for |
| force | boolean configure fwdServer even if A/AAAA-records for hostname exist and not point to fwdServer |
{- "type": "h",
- "title": null
}{- "status": "success"
}| sub | boolean false (default): only current customer is looked at, true: customers belonging to current customer are included |
{- "status": "success",
- "data": [
- {
- "id": 1,
- "name": "aaa-dnsupdate",
- "algorithm": "hmac-sha512",
- "owner": {
- "uid": 1,
- "customerID": 99999,
- "customerName": "Scrooge McDuck plc"
}
}, - {
- "id": 8,
- "name": "aaa-test3",
- "algorithm": "hmac-sha256",
- "owner": {
- "uid": 1,
- "customerID": 99999,
- "customerName": "Scrooge McDuck plc"
}
}
]
}request generation of new TSigKey with given name (customer prefix automatically added) and algorithm. Key is generated asynchronously and can be retieved later
owner is optional - will be assumed as current customer if omitted
allowed algorithms are:
{- "name": "examplekeyname",
- "owner": 3,
- "algorithm": "hmac-sha512"
}{- "status": "success"
}returns named TSigKey as unencrypted string
| keyname required | string name of TSigKey to retrieve |
{- "status": "success",
- "data": "VUVAC0\\/c+hme48dwxRtzjz2QF8\\/PlwM2d8RBsmQfL+6sz2PbLt+\\/5DVzIwQbt8DAq79tFLDqW9A+vjsRfUTSaQ=="
}