Uniweb Partner API

Authentication

A session and grant cookie must accompany each request. You can generate these cookies by logging in to the control panel with a browser, and extract them from any request after logging in. Log out of your browser after extracting your cookies, so that the session you created will be used only for the API access. Failure to provide a valid grant and session will result in a 401 http return code with no further information.

Base URL

API requests are performed against the base URL https://www.uniweb.no/api/partner. The relative path to each operation is given below, together with the method verb.

Operations

Subscription List

GET /subscriptions

Returns a JSON Array of all subscriptions. Complex products will have a list of extensions to describe the product composition. Example output with one list element:

[
  {
    "id": 1234,
    "customer": 1234,
    "username": "domain.no",
    "tsig": "secret", // Only for domains
    "product": {
      "id": 102091,
      "text": ".no domene",
      "code": "dns"
    },
    "otc": 60.0,
    "rc": 179.0,
    "inOtc": 50.0,
    "inRc": 85.50,
    "renew": true,
    "created": "2020-05-08",
    "period": {
      "from": "2020-05-08",
      "to": "2021-03-09",
      "qty": 1
    },
    disk: n,
    xfer: n,
    concurrency: n,
    cpu: n,
    mem: n,
    dmem: n
  }
]

Subscription List For Customer

GET /subscriptions/customer/{id}

Returns a JSON Array of all subscriptions for the given customer. Same output as above.

Subscription

GET /subscriptions/{id}

Return a JSON Object for the given subscription. Same output as /subscriptions LIST call.

Get Subscription by type and username

GET /subscriptions/{type}/{username}

Return a JSON Object for the given subscription, defined by type and username (ex type=dns, username=domain.no or type=ssl, username=domain.no). Same output as /subscriptions LIST call. In case of the subscription beiing an ssl certificat, the optional properties cert, ca, key and subjectAltnames may be populated.

Customer List

GET /customers

Returns a JSON Array of all customers. Example output with one list element:

[
  {
    "id": 1234,
    "name":"Customer Name AS",
    "street": "Street address",
    "zip": "1234",
    "city": "CITY",
    "orgId": "123456789",
    "type": "Company", // [Company | Individual ]
    "username": "someId",
    "subscriptionContact": {
      "id": 1234,
      "name": "Contact Name",
      "email": "contact@email.address"
    }
  }
]

Customer Query

POST /customers/query

Returns a JSON Array of customers matching the query object. Query properties are currently not described in the API. Example output with one list element:

[
  {
    "id": 1234,
    "name":"Customer Name AS",
    "street": "Street address",
    "zip": "1234",
    "city": "CITY",
    "orgId": "123456789",
    "type": "Company", // [Company | Individual ]
    "username": "someId",
    "subscriptionContact": {
      "id": 1234,
      "name": "Contact Name",
      "email": "contact@email.address"
    }
  }
]

Customer List For Order

GET /orders/{orderId}/customers

Returns a JSON Array of all customers for the given order. Same output as Customer List.

Create Customer

POST /customers

Creates a new customer. The complete customer object is returned in JSON format. Example of POST payload:

{
  "name":"Customer Name AS",
  "street": "Street address",
  "street2": "Street address2", // Optional
  "orgId": "1234",
  "zip": "1234",
  "city": "CITY",
  "orgId": "123456789",
  "country", "NO",
  "type": "Company", // [Company | Individual ]
  "contactName": "Contact Name",
  "contactEmail": "contact@email.address",
  "mobile": "+47.12345678", // Will be set as customer AND contact mobile
  "password": "secret", // Optional
  "username": "yourUniqueId"
}

The result payload is similar to a single entry from the GET /customers resource.

Product List

GET /products

Returns a JSON Array of all products. Optional query parameters:

Example output:

[
  {
    "id":102091,
    "text":".no Domene",
    "period":"1Y",
    "vatFactor":1.25,
    "type":"dns", // Type has internal sematics, but can also be used to group products in Partner systems if needed
    "size":1,
    "sizeUnit":"count" // [count,bytes,bytes1024,bitPerSecond,core]
  },
  {
    "id":166512,
    "text":"Managed Backup Storage",
    "period":"3M",
    "vatFactor":1.25,
    "type":"backup-storage",
    "size":1073741824,
    "sizeUnit":"bytes1024"
  },
  {
    "id":166392,
    "text":"VPS CPU 1/4 Core",
    "period":"3M",
    "vatFactor":1.25,
    "type":"vps-cpu",
    "cart":false,
    "size":1,
    "sizeUnit":"core"
  }
]

Order Query

POST /orders/query

Returns a JSON Array of orders/invoices matching query

Example output:

[
  {
    "id": 123456,
    "customer": {
      "id": 123456,
      "username": "654321",
      "partnerCustomer": false,
      "name": "Kunde AS",
      "brand": 123,
      "partnerName": "Partner AS",
      "type": "Company"
    },
    "created": "2022-01-25",
    "contact": {
      "id": 1234,
      "name": "Ola Hansen"
    },
    "invoiceNo": 1030455,
    "invoiceId": "f5ee8e5b-86e2-49de-92ec-486f4fef3097",
    "externalInvoiceNo": "1030455",
    "invoiceSum": 321.0,
    "invoiceDate": "2022-09-29",
    "invoiceDue": "2022-10-13",
    "invoiceExported": "2022-09-29",
    "paid": 321.0,
    "credited": 0.0,
    "lost": 0.0,
    "archiveOnly": false,
    "waived": 0.0,
    "shareableRef": "f1a5e72f-e049-4524-bc1d-1fc8055eae35",
    "invoiceType": "PayEx360"
  },
  ...
]

Order List

GET /orders

Returns a JSON Array of all orders. Add parameter latestSeenInvoiceNo=nnn to only pick up invoiced orders newer than previously seen id

Example output:

[
  {
    "id":2003004,
    "created":"2020-01-12",
    "invoiceNo":"012345678",
    "invoiceDate":"2020-12-30",
    "invoiceDue":"2021-01-31",
    "invoiceSum":1000.0,
    "paid":0.0
  }
]

Get Order

GET /orders/{id}

Returns a spesific order.

Example output:

[
  {
    "id":2003004,
    "created":"2020-01-12",
    "invoiceNo":"012345678",
    "invoiceDate":"2020-12-30",
    "invoiceDue":"2021-01-31",
    "invoiceSum":1000.0,
    "paid":0.0
  }
]

Orderline List

GET /orders/{id}/orderlines

Returns a JSON Array of all orderlines on the given order.

Example output:

[
  {
    "id":123456,
    "order":2003004,
    "created":"2020-12-30",
    "text":"Webhotell XZY 5GB fra 30.12.2020 til 30.12.2021",
    "type":"Create", // [Create|Renew|Change|Burst]
    "product":166203,
    "price":1000.0,
    "enduserPrice", 1500.0,
    "qty":1,
    "sumEx":1000.0,
    "periodId":123456,
    "periodFrom":"2020-30-12",
    "periodTo":"2021-30-12",
  }
]

Pricelist List

GET /pricelists

Returns a JSON Array of all custom partner price lists. Example output with one list element:

[
  {
    "id":1234,
    "name":"My pricelist"
  }
]

Pricelist information

GET /pricelists/{id}

Returns a JSON object of all price list prices for the given pricelist. Example output:

[
  {
    "pricelist":1234,
    "product":102091,
    "rc":179.0,
    "otc":60.0,
    "forsale":true // Disable forsale to remove buying option from Control Panel and Shopping Cart
  }
]

Email Count

GET /email/count

Returns the number of email addresses under the current partner. Example:

  {
    "count":1234
  }

Migrate customer

POST /migrate

Schedule migration of a customer and all related services. This endpoint will only have affect after a specific migration process has been initiated from our end.

Every entity representing a subscription can include arbitrary metadata in the metadata attribute to ease migration. The data will be deleted after the migration has been completed.

Please note that email addresses must be unwrapped if an account has an alias in a different domain. This must be communicated as an account + forward.

  {
    "callbackURL:": "",
    "customer": {
      "name":"Customer Name AS",
      "dueDays": 14, // Defaults to 14
      "street": "Street address",
      "street2": "Street address2", // Optional
      "zip": "1234",
      "city": "CITY",
      "vat": true,
      "password": "secret",
      "countryCode": "NO",
      "orgId": "123456789",
      "type": "Company", // [Company | Individual ]
      "partner": false, // True for partner
      "owningPartner": 1234, // The owning partner, either brand partner or reseller of the brand
      "owningPartnerUsername": "1234", // The owning partner, either brand partner or reseller of the brand
      "mute": false // If this customer is type Partner, mute can be used to avoid sending emails to the end customers of the partner,
      "hasCronjobs": false, // If true, a hint about Webcron is included in the migration welcome email to the customer
      "invoiceTransport": "EMAIL", // [EMAIL, MAIL, EHF, EFAKTURA, AVTALEGIRO]
      "grants": [
            {
                "email": "email-or-customer-id",
                "allAccess": true,
                "su": true,
                "password" : "password-if-new-principal",
                "domain": false,
                "mail": false,
                "webhosting": false,
                "serverhosting": false,
                "backup": false,
                "billing": false,
            }
      ],
      "subscriptionContact": {
          "name": "Contact Name",
          "email": "contact@email.address",
          "phone": "33349700"
      },
      "invoiceContact": {
          "name": "Contact Name",
          "email": "contact@email.address",
          "phone": "33349700",
      },
      "contacts": [
        {
          "name": "Contact Name",
          "email": "contact@email.address",
          "phone": "33349700",
          "title": "CEO",
        }
      ],
      "pricelist": 1234, // Id of the pricelist to assign to this customer
      "username": "yourUniqueId",
    },
    "mailbundle": {
        "product": 1234,
        "period": {
            "from": "2020-01-01",
            "to": "2021-01-01"
        },
        "renew": true
    },
    "clusters": [
            {
                "reuse": false, // Set to true if this is an additional service migration for existing customer
                "sslCertificates": [
                    {
                        "username": "GlobalSign-NNN-example.com",
                        "fqdns": ["example.com", "www.example.com"],
                        "keystore": "keystore-data",
                        "product": 1234,
                        "period": {
                            "from": "2020-01-01",
                            "to": "2021-01-01"
                        },
                        "renew": true
                    },
                ],
                "webaccounts": [
                    {
                        "product": 12345,
                        "url": "sftp://username:password@host/path/to/shared/files", // Mounted as 'shared' for every webroot
                        "webroots": [
                            {
                                "url": "sftp://username:password@host/path/to/files",
                                "phpVersion": "7.2",
                                "vhostName": "www",
                                "hosts": ["domain.com", "www.domain.com", "otherdomain.com", "www.otherdomain.com"],
                                "forceSSL": false // Should we force redirect to SSL? Default false
                            }
                        ],
                        "databases": [
                            {
                                "url": "sftp://username:password@host/path/to/dumpfile",
                                "dbname": "mydbname",
                                "renew": true,
                                "suspend": false,
                                "product": 12346,
                                "password": "secret",
                                "metadata": {}
                            }
                        ],
                        "metadata": {},
                        "renew": true,
                        "suspend": false,
                        "period": {
                            "from": "2020-01-01",
                            "to": "2021-01-01"
                        },
                    }
                ],
                "databases": [
                    {
                        "url": "sftp://username:password@host/path/to/dumpfile",
                        "dbname": "mydbname",
                        "renew": true,
                        "suspend": false,
                        "product": 12346,
                        "metadata": {},
                        "password": "secret",
                        "period": {
                            "from": "2020-01-01",
                            "to": "2021-01-01"
                        }
                    }
                ],
                "domains": [
                    {
                        "reuse": false, // Set to true if this is an additional service migration for an existing domain. All data for the domain is ignored, except for the zone which is used to retrieve the existing subscription (required to exist)
                        "zone": "domain.no",
                        "dns": true, // Should we create a DNS zone?
                        "renew": true,
                        "axfrHost": "some.ns.hostname",
                        "suspend": false,
                        "registrar": true, // Are we the registrar for this domain?
                        "metadata": {},
                        "password": "secret",
                        "period": {
                            "from": "2020-01-01",
                            "to": "2021-01-01"
                        },
                        "keySigningKey": "Private-key-format: v1.3
    Algorithm: 7 (NSEC3RSASHA1)
    Modulus: wNL8K7HmEn8rkt5LPaKrhAOCMuKOXYMSLSjo6ni7G/d8SwAySfesq1Yp0UqQfNnrx3Xl3Lr6h2gRlcUTCKKB5zR5gmW0rBhGtgmy16WNxln+I8hjBzhKdjBfoCvw5mfrCuZbDocaNFck96H3VfmRMoCUJVbcgoe4DM4/2VKgfQQM6uqNwTe72avM11ZVCG+mD8S6rIVESRieGS6W2fWgLbyEOM7cFUyKGKODteAdMQo5HdHFnjpyA9fDClW/3FH9VGX4sxeqRLAtjTQygGnZIxRpEAD76pOYQAC8HxJGHlF3rPvs6Vd3XgLEOGIavtPCSrOFdF13+0H0mUmN2N68tw==
    PublicExponent: AQAB
    PrivateExponent: NqhXxMcDsYCMyG/sogcHWT9pW6Uut8EcmOJ8y2H3n+DSQaxHlQH41wRwjBv3wvw+wmZgBuaVd2Z/fZXEZHE0I2aTfuv3f8TN3nH3WPtbqbr+uAPoVjaVnNTvdkaeXaFdVdSgQQj425dMKkmmA5/fkZIy7DaoAPQZrr+UB7VNOsI5AQWFFM1CNNy7yg5bXCg2st5OTIITmZp4kH9mDXdejWFAxdf0gMZBbhBxSVTOAcXD8h93zCSFRCtZcU3Uu+Rn29KD4XOraQm+21R4crvxjrXOBGvjcRSVDgFMIhf/rofUvszek+Wnxb1DGd0o4APD5p3HrvQyqtie7b2CAiGYGQ==
    Prime1: /yFWuBqgjWuPiZco2VUBubV/SX1XgkTR0OrGrxHdVu0cmemKOe5GCF6+XOmgjnCOd+vWp3FgtGWvgscR9O5DrLXwTYUpdIHb3k581F8i6jjuyZlGsFT9CK4ruNzn4gH+KNr1cbLek4Of7eBYFORiWIbsnFZ/Mds2L71kHjvAnM=
    Prime2: wXtFAkD0bwuNoDBssEQveiof4RTzXY1Xl7L+d9F7dHBw2gGa/Y4VgKarF23Wx+VpPUw55qjO+/KQ3nUuf8Sr5cRfqBbO40E2b1JQ37yj2UHrYY1A4AgUIlzxQqQBS2TyJtjsTdxG5dKviGJkTs4HQbyRnnFiE2E1JehZwOInV60=
    Exponent1: SpWde27VVuKF8MxO9dIjEZyGnF33cEko6KGAqO032rg3dWaVrcmoU8Sd5cUIfXOTM0YQRmZvMkJBVkd7OghMRl7EMki0GpHe+Jiw90/wIAf8o16jGgJAn9NyuDXoPFARPH/R64oVPCkLlgy4dseXeVlEDZOTohFO4cJZmaWxAb8=
    Exponent2: cyxR8/l+h+u0rrqkuHieWnZg67dw9yuADMl8OQ72EmYsh8JZpL3DhwWvqw6zX+LsNpT9kpTCQbAvFH1k5KHKQcgXuRN6rETRhorVoZnFXzqiRzuydqnYcmwpIaZHLv40N3PBlsedXImB/Am19EMohrUdadfMrgSbgqlBZFQ7XzE=
    Coefficient: 57pMrCanfFcXBvn5AE5GB9IJDt8TTiFQx9KiEbpw/4Zvk0xXb255O0ZKUu67NG62IDCtDPtoX00yfNbKDh1mxYR99R4T7F1fXJWbt8w43SOljTbfAqk4BtlnjxF7V8nTbcXb0vEt2qNre8fnFEVczXTMNu9zbN9i3wykkClVyHo=
    Created: 20150416123544
    Publish: 20150416123544
    Activate: 20150416123544",
                        "zoneSigningKey": "Private-key-format: v1.3
    Algorithm: 7 (NSEC3RSASHA1)
    Modulus: lyHj1Y9D7jcYHyEET53K4VBl4E5dh5a2wSQGpBpJz/w/hyCxqaseil3uyyBakZ9HyHfc+3xt0dTJHTDpmDImIbvsFqzTHDYgqVhlFk13k++EVuHo6a6VHlUf+tWl2wbdlo5VdEXSzksXRyMRUp/bbqhBIfRYwZQyXmQlCpcAt79NBRxK/ENXpkq5jjbCFNXkyTrX6KE/SH4BnF9c8ENl0ENXVJB0Y6eJOv7jFPXvG6Y68RZEfV9o3ZfJ68STHFyqC9HP8DRkl4p2mttTrL2I06SuIxwisOTk9EKFJ/cVY+e5G3Yk3BgcpLebL2VX7rjMNCh3ptYgVr1/x58LIH6umw==
    PublicExponent: AQAB
    PrivateExponent: FGNNAf1Os68ZAPIKS9dEjDq1U5oewfDR/KIohzDIrlcgFtGRRgtAlnfvg9V8glKTc3bAB+kUQ49KBjcX/CEfxcM9KR3taMvgghfbozOWIw3Xs4TMT+HuWeYv5z21HyQA9pOC8amNs6irnjwb1SKdjoMCLltxMcQVO2iVGqWeQitGXQ0JFY61Qg4eDNKXCKq83JXKJsJlagzKnvvUX+kKCKybVinn2IDSf+/pT9+5yCqWRKqh5cX6g2AHJ4OXbAojD88lRgnzl/6f+RYSZtGrPwhfegaSlX8JGRE/lYmmwmjbOaDqADhMt0JTUIx7JL8vpt8iDEa5tJ7K0X7pOWjPqQ==
    Prime1: xpREAckGPHfBsoyMp9DCl56aR79alNy5u0+anE5tOuMEVJwLhnjAkGPl8Amkbv5HT3Hq++CDgq1C6/ciXH1Y4RL4g56QdUbMcbNJFgWuHTeF0ZEFPtN/IC1AlIh3VQDC97ofDnU4eK8smUDC++uNBMdXsQsZOoOimWgArPezixc=
    Prime2: wtVlwtO/cUZa7SaJLwyD9DRPAG/MCDJP4coc//7UzvEbkXOY0mXFrCv0oaBLv4gQHjhnSwiFXs8rIEcxztqA0GpSRh3yiDRjVHR/seKXe5K/9UIyyTkrjMYDVwSFCrcvXSZEEvstcnUI+n5+WNl+aGszQeuMFBYYR/nRMZY3mx0=
    Exponent1: kOe6ZI8bhN5isvbK4N5+UQOEU1y4La6PvSpzSSIVpQXpsBAafOr6oaK0NJ/kpLXatYdMULZ5YM8r6WJyaYlyZPNh8zGu+lVKdKG+cFp+voU4mj8306ujtYgv+vNGGPowS3M+nF8/cRlq8v4GCqzNP7JzNBcENuW9rjHtZEpwcss=
    Exponent2: IG/kzEXypoo/EyKKTmH4Cg03Zew2/NpbgGI0Z85mYbm0jEfBlq3I9jwvM0V7tvyRKmbbk5tskPdOx8Xyney06334CqJrwY9vRh1LMTN3YuRwvwVxbRzuijZhUfh3qewLn6eCR+K3k0m23/V1VZeIOxw14XC01pdDHaCS2n2W7mU=
    Coefficient: cKML9rxRc76SKNrfe26l2NlOoVAvoG/HELO+dyWjb5hQ1ZBxCf4PmGqkZfS7qklZudZhkyEaH1h0eZJOpkIYg7+uUGObZyC66OIknv+/MNIHCFqwg+g/+PcrNea1mJX9kjAV030XAzwgBzrLX1Prp3tWSnAMyOkVeYvTC/iTQGo=
    Created: 20150416123544
    Publish: 20150416123544
    Activate: 20150416123544",
                        "combinedSigningKey": "",
                        "records": [
                            { // Populate relevant properties based on record type
                                "type": "AAAA", // [A, AAAA, NS, MX, SRV, CNAME, TXT, SSHFP, TLSA, CAA, NAPTR, WEBFORWARD],
                                "name": "record.domain.no",
                                "address": "", // Relevant for A, AAAA
                                "target": "", // Relevant for NS, MX, SRV
                                "url": "", // Relevant for WEBFORWARD
                                "weight": "", // Relevant for SRV
                                "port": "", // Relevant for SRV
                                "algorithm":, "", // Relevant for SSHFP
                                "digest": "", // Relevant for SSHFP
                                "fingerprint": "", // Relevant for SSHFP
                                "certificateUsage": "", // Relevant for TLSA
                                "selector": "", // Relevant for TLSA
                                "matchingType": "", // Relevant for TLSA
                                "data": "", // Relevant for TLSA
                                "flags": "", // Relevant for CAA, NAPTR
                                "tag": "", // Relevant for CAA
                                "value": "", // Relevant for CAA
                                "order": "", // Relevant for NAPTR
                                "preference": "", // Relevant for NAPTR
                                "service": "", // Relevant for NAPTR
                                "regexp": "", // Relevant for NAPTR
                                "replacement": "", // Relevant for NAPTR
                                "ttl": 10800, // Relevant for all record types
                                "priority":, 10, // Relevant for MX, SRV
                                "alias": "alias",  // Relevant for CNAME
                                "strings": ["Strings", "for", "TXT", "records"], // Relevant for TXT
                                "drop": false // Set to true if you are using AXFR and want us to remove a record which matches the type and name for this record
                            },
                            {
                                "type": "WEBFORWARD",
                                "forwardType": "WEBFORWARD_FRAME", // WEBFORWARD_FRAME, WEBFORWARD_30{1,2,7,8}
                                "name": "www.domain.no",
                                "url": "https://domain.no"
                            }
                          ]
                        }
                    ],
                    "mailAccounts": [
                        {
                            "renew": true,
                            "suspend": false,
                            "period": {
                                "from": "2020-01-01",
                                "to": "2021-01-01"
                            },
                            "name": "Full Name", // Optional
                            "localPart": "somename",
                            "password": "secret",
                            "metadata": {},
                            "keep": true, // Keep incoming email, defaults to true
                            "migrate": true, // Migrate mail from existing mailstore, defaults to true
                            "forwards": [
                                "some@other.address",
                                "another@address"
                            ],
                            "aliases": [
                                "alias1",
                                "alias2"
                            ],
                            "blocklist": [
                                "badman1@domain.no"
                            ],
                            "whitelist": [
                                "bestfriend@family.no"
                            ],
                            "contacts": [
                                "vcard1",
                                "vcard2"
                            ],
                            "vacationMessage": "Talk to you later",
                            "vacationFrom": "2020-07-06",
                            "vacationTo": "2020-14-06",
                            "url": "sftp://username:password@host/path/to/files"
                            }
                    ],
                ]
            }
    ]
  }

List open migrations

GET /migrate/list

List currently open customer migrations for the authenticated Partner. Returns a JSONArray where each item represents each scheduled task. Should be used to control migration throttling.

Create domain

POST /domains

Create a new domain subscription

            {
                "customer": 1234,
                "domain": "domain.no",
                "createDNS": true,
                "mute": true, // Default false - disables mail notification of new service
                "zoneFile": "", // Optional zone content to import, bind format
                "axfrHost": "", // Optional host to do axfr for zone record import
                "poll", false // Poll until all nameservers have propagated the domain
            }
        

Create DNS Record

POST /domain/{idnName}/dns/record

Create a new dns record. Format is the same as for migration DNS records. WEBFORWARD is also supported here. The domain must be a valid domain subscription on a customer reciding under the authenticated partner.

List DNS Records

GET /domain/{idnName}/dns/record

List DNS Records. Only available for clustered domains.

Delete DNS Record

DELETE /domain/{idnName}/dns/record/{oneId}

Delete DNS Record. ID from list-dns-records.

Create mail account

POST /mail/accounts

Create a new mail account. If the customer doesn't have a valid mail bundle, one will automatically be created.

            {
                "customer": 1234,
                "domain": "domain.no",
                "mute": true, // Default false - disables mail notification of new service
                "localpart": "john_doe", // Prefix before @ in mail address
                "name": "John Doe",
                "aliases": []
                "poll", false // Poll until all nameservers have propagated the domain
            }
        

Create mail bundle

POST /mail/bundle

Create a new mail bundle.

            {
                "customer": 1234,
                "productType": "Essential" // Options ["Essential, "Unlimited"], defaults to "Essential"
                "domainName": "foo.bar",
                "mute": true, // Default false - disables mail notification of new service or changed product
            }
        

Create web account

POST /web

Create a new web account.

            {
                "customer": 1234,
                "product": 12345,
                "mute": true, // Default false - disables mail notification of new service
                "platform", "Linux" // Options ["Linux"]
            }
        

Create webroot

POST /web/webroot

Create a new webroot for an existing web account.

            {
                "account": 1234, // Id of account subscription
                "name": "www2", // Name of webroot, only appliccable for TWS accounts
            }
        

Add domain to webroot

POST /web/webroot/domain

Add domain to a web root

            {
                "account": 1234, // Id of account subscription,
                "webroot": "www2" // Name of the webroot. For Cluster services, retrieve the webroot name from the webroot subscription username property
                "domain": "domain.no", // Must reference a valid domain subscription on the customer owning the account. www.$domain is automatically added
                "removeConflictingCustomRecords", true // Should we remove any potentially conflicting custom records to make sure sysapi manages the domain?
            }
        

Set DNSSEC Keys for Domain

POST /domain/{domain}/dnssec

Add domain to a web root

                    "keySigningKey": "Private-key-format: v1.3
Algorithm: 7 (NSEC3RSASHA1)
Modulus: wNL8K7HmEn8rkt5LPaKrhAOCMuKOXYMSLSjo6ni7G/d8SwAySfesq1Yp0UqQfNnrx3Xl3Lr6h2gRlcUTCKKB5zR5gmW0rBhGtgmy16WNxln+I8hjBzhKdjBfoCvw5mfrCuZbDocaNFck96H3VfmRMoCUJVbcgoe4DM4/2VKgfQQM6uqNwTe72avM11ZVCG+mD8S6rIVESRieGS6W2fWgLbyEOM7cFUyKGKODteAdMQo5HdHFnjpyA9fDClW/3FH9VGX4sxeqRLAtjTQygGnZIxRpEAD76pOYQAC8HxJGHlF3rPvs6Vd3XgLEOGIavtPCSrOFdF13+0H0mUmN2N68tw==
PublicExponent: AQAB
PrivateExponent: NqhXxMcDsYCMyG/sogcHWT9pW6Uut8EcmOJ8y2H3n+DSQaxHlQH41wRwjBv3wvw+wmZgBuaVd2Z/fZXEZHE0I2aTfuv3f8TN3nH3WPtbqbr+uAPoVjaVnNTvdkaeXaFdVdSgQQj425dMKkmmA5/fkZIy7DaoAPQZrr+UB7VNOsI5AQWFFM1CNNy7yg5bXCg2st5OTIITmZp4kH9mDXdejWFAxdf0gMZBbhBxSVTOAcXD8h93zCSFRCtZcU3Uu+Rn29KD4XOraQm+21R4crvxjrXOBGvjcRSVDgFMIhf/rofUvszek+Wnxb1DGd0o4APD5p3HrvQyqtie7b2CAiGYGQ==
Prime1: /yFWuBqgjWuPiZco2VUBubV/SX1XgkTR0OrGrxHdVu0cmemKOe5GCF6+XOmgjnCOd+vWp3FgtGWvgscR9O5DrLXwTYUpdIHb3k581F8i6jjuyZlGsFT9CK4ruNzn4gH+KNr1cbLek4Of7eBYFORiWIbsnFZ/Mds2L71kHjvAnM=
Prime2: wXtFAkD0bwuNoDBssEQveiof4RTzXY1Xl7L+d9F7dHBw2gGa/Y4VgKarF23Wx+VpPUw55qjO+/KQ3nUuf8Sr5cRfqBbO40E2b1JQ37yj2UHrYY1A4AgUIlzxQqQBS2TyJtjsTdxG5dKviGJkTs4HQbyRnnFiE2E1JehZwOInV60=
Exponent1: SpWde27VVuKF8MxO9dIjEZyGnF33cEko6KGAqO032rg3dWaVrcmoU8Sd5cUIfXOTM0YQRmZvMkJBVkd7OghMRl7EMki0GpHe+Jiw90/wIAf8o16jGgJAn9NyuDXoPFARPH/R64oVPCkLlgy4dseXeVlEDZOTohFO4cJZmaWxAb8=
Exponent2: cyxR8/l+h+u0rrqkuHieWnZg67dw9yuADMl8OQ72EmYsh8JZpL3DhwWvqw6zX+LsNpT9kpTCQbAvFH1k5KHKQcgXuRN6rETRhorVoZnFXzqiRzuydqnYcmwpIaZHLv40N3PBlsedXImB/Am19EMohrUdadfMrgSbgqlBZFQ7XzE=
Coefficient: 57pMrCanfFcXBvn5AE5GB9IJDt8TTiFQx9KiEbpw/4Zvk0xXb255O0ZKUu67NG62IDCtDPtoX00yfNbKDh1mxYR99R4T7F1fXJWbt8w43SOljTbfAqk4BtlnjxF7V8nTbcXb0vEt2qNre8fnFEVczXTMNu9zbN9i3wykkClVyHo=
Created: 20150416123544
Publish: 20150416123544
Activate: 20150416123544",
                    "zoneSigningKey": "Private-key-format: v1.3
Algorithm: 7 (NSEC3RSASHA1)
Modulus: lyHj1Y9D7jcYHyEET53K4VBl4E5dh5a2wSQGpBpJz/w/hyCxqaseil3uyyBakZ9HyHfc+3xt0dTJHTDpmDImIbvsFqzTHDYgqVhlFk13k++EVuHo6a6VHlUf+tWl2wbdlo5VdEXSzksXRyMRUp/bbqhBIfRYwZQyXmQlCpcAt79NBRxK/ENXpkq5jjbCFNXkyTrX6KE/SH4BnF9c8ENl0ENXVJB0Y6eJOv7jFPXvG6Y68RZEfV9o3ZfJ68STHFyqC9HP8DRkl4p2mttTrL2I06SuIxwisOTk9EKFJ/cVY+e5G3Yk3BgcpLebL2VX7rjMNCh3ptYgVr1/x58LIH6umw==
PublicExponent: AQAB
PrivateExponent: FGNNAf1Os68ZAPIKS9dEjDq1U5oewfDR/KIohzDIrlcgFtGRRgtAlnfvg9V8glKTc3bAB+kUQ49KBjcX/CEfxcM9KR3taMvgghfbozOWIw3Xs4TMT+HuWeYv5z21HyQA9pOC8amNs6irnjwb1SKdjoMCLltxMcQVO2iVGqWeQitGXQ0JFY61Qg4eDNKXCKq83JXKJsJlagzKnvvUX+kKCKybVinn2IDSf+/pT9+5yCqWRKqh5cX6g2AHJ4OXbAojD88lRgnzl/6f+RYSZtGrPwhfegaSlX8JGRE/lYmmwmjbOaDqADhMt0JTUIx7JL8vpt8iDEa5tJ7K0X7pOWjPqQ==
Prime1: xpREAckGPHfBsoyMp9DCl56aR79alNy5u0+anE5tOuMEVJwLhnjAkGPl8Amkbv5HT3Hq++CDgq1C6/ciXH1Y4RL4g56QdUbMcbNJFgWuHTeF0ZEFPtN/IC1AlIh3VQDC97ofDnU4eK8smUDC++uNBMdXsQsZOoOimWgArPezixc=
Prime2: wtVlwtO/cUZa7SaJLwyD9DRPAG/MCDJP4coc//7UzvEbkXOY0mXFrCv0oaBLv4gQHjhnSwiFXs8rIEcxztqA0GpSRh3yiDRjVHR/seKXe5K/9UIyyTkrjMYDVwSFCrcvXSZEEvstcnUI+n5+WNl+aGszQeuMFBYYR/nRMZY3mx0=
Exponent1: kOe6ZI8bhN5isvbK4N5+UQOEU1y4La6PvSpzSSIVpQXpsBAafOr6oaK0NJ/kpLXatYdMULZ5YM8r6WJyaYlyZPNh8zGu+lVKdKG+cFp+voU4mj8306ujtYgv+vNGGPowS3M+nF8/cRlq8v4GCqzNP7JzNBcENuW9rjHtZEpwcss=
Exponent2: IG/kzEXypoo/EyKKTmH4Cg03Zew2/NpbgGI0Z85mYbm0jEfBlq3I9jwvM0V7tvyRKmbbk5tskPdOx8Xyney06334CqJrwY9vRh1LMTN3YuRwvwVxbRzuijZhUfh3qewLn6eCR+K3k0m23/V1VZeIOxw14XC01pdDHaCS2n2W7mU=
Coefficient: cKML9rxRc76SKNrfe26l2NlOoVAvoG/HELO+dyWjb5hQ1ZBxCf4PmGqkZfS7qklZudZhkyEaH1h0eZJOpkIYg7+uUGObZyC66OIknv+/MNIHCFqwg+g/+PcrNea1mJX9kjAV030XAzwgBzrLX1Prp3tWSnAMyOkVeYvTC/iTQGo=
Created: 20150416123544
Publish: 20150416123544
Activate: 20150416123544"