API v6.0

API Endpoint
https://api.transip.nl/v6

/ Introduction

Welcome to the TransIP API. With this API, you can manage all of your products in a RESTful way, using simple HTTP requests.

All requests and responses use JSON objects and arrays as data format.

Requests

Every API call can be made using HTTP request to the resource URL and the desired HTTP method. All requests should be made using the HTTPS protocol.

Methods

Method Description
GET Used for retrieving one or more resources, the returned attributes can be used to modify the resource.
POST Used for creating new resources, see the documentation for the required and optional attributes.
PUT Used for updating a resource with new data, all existing data will be removed.
PATCH Used for partially updating a resource.
DELETE Used for deleting resources.

For GET Requests with ‘Request Attributes’, these should be put behind the URL like ?tags=test

Responses

Every response uses an HTTP status code, indicating the success or failure of your request.

HTTP statuses

In general, when an request succeeds, a 2xx HTTP status code is returned.

Code Status Description
200 OK When a GET request succeeds.
201 Created When a resource is created using a POST request. The response contains an empty body.
204 No content When a PUT, PATCH or DELETE request succeeds. The response contains an empty body.

In case of an error, the following status codes could be returned.

Code Status Description
400 Bad Request When the API version or URL is invalid.
401 Unauthorized When there is something wrong with your authentication
403 Forbidden When you don’t have the necessary permissions to perform an operation.
404 Not Found When a resource was not found.
405 Method Not Allowed When you’re using an HTTP method on a resource which does not support it.
406 Not Acceptable When one or more required parameters are missing in the request.
408 Request Timeout When the request gets a timeout.
409 Conflict When modification is not permitted at the moment. E.g. when a VPS is locked.
422 Unprocessable Entity When the input attributes are invalid, e.g. malformed JSON.
429 Too Many Request When the rate limit is exceeded.
500 Internal Server Error When there is a server error.
501 Not Implemented When the endpoint is not implemented.

GET requests may include additional links that can be used to navigate to related resources or pages.

Pages

When a list request is used (a GET request without identifier), the result set will use pagination.

The default page size is unlimited. On some list requests, you can override this by setting the pageSize parameter. For example: /vps?pageSize=100

When pagination is used, the following links will be shown:

  • first: The first page of the result set.

  • previous: The previous page of the result set.

  • next: The next page of the result set.

  • last: The last page of the result set.

These links will only be set when applicable. E.g. when the current page is the last, no ‘next’ and ‘last’ links will be present.

Example, the links for the first page could look like this:

{
  "_links": {
    "pages": [
      {
        "rel": "next",
        "link": "https://api.transip.nl/v6/domains?pageSize=25&page=2"
      },
      {
        "rel": "last",
        "link": "https://api.transip.nl/v6/domains?pageSize=25&page=9"
      }
    ]
  }
}

Responses of GET requests with an identifier may return additional links to related resources.

Example: When retrieving info about a domain, the following links will be rendered:

{
  "_links": [
    {
      "rel": "self",
      "link": "https://api.transip.nl/v6/domains/example.com"
    },
    {
      "rel": "branding",
      "link": "https://api.transip.nl/v6/domains/example.com/branding"
    },
    {
      "rel": "contacts",
      "link": "https://api.transip.nl/v6/domains/example.com/contacts"
    },
    {
      "rel": "dns",
      "link": "https://api.transip.nl/v6/domains/example.com/dns"
    },
    {
      "rel": "nameservers",
      "link": "https://api.transip.nl/v6/domains/example.com/nameservers"
    },
    {
      "rel": "actions",
      "link": "https://api.transip.nl/v6/domains/example.com/actions"
    }
  ]
}

Authentication

In this version of the API, access token are used for authentication. These access tokens make use of the JSON Web Token standard.

To get an access token, you should first generate a key pair using the control panel. Then download the PHP authentication class, and put in your login and private key.

You can also do this process manually by sending an HTTP POST request to ’https://api.transip.nl/v6/auth’ with a body containing your login and a nonce (any random string), and a signature header. The signature header should consist of a sha512 asn.1 hash of the full request body. Encrypt this using a private key that was generated in the control panel.

Example signature header

Signature: W+alqMNFaKxNjRpRzGcjrk5q1PXf50usve85PMHqXDPcDZTmZksVkqAFyR30XtJAXELbg2bukUrckPe7fBR10LvMY55cCHLfKf4sA6tpC8Ck5HcT7uLN27XGiJH3i2oDe/Kb93pU2q9kP+vDIQYJX28xFEHWOibXYgcMksHSH3YiyCWcBiQFS65Jsg5M/XhyU3qMISD7icHmk7/WPw1tSYGiMqJZVjaovIqzskXQcu5iC22wZA+5evj3rlSPj9UGZsDjg+TdP69gGJ2y4nrG3qbM2BhMpUs4E3FDHJW1ZZ3VUko0rwfBBoltAT94NQrA5LCP6pXLyA9eszyouBs8ywQ==

Example body

{
    "login": "test-user",
    "nonce": "98475920834"
}

Access token have a default expiration time of 30 minutes. You can also override this by setting the expiration_time property. This has a maximum of 1 month.

Use a header containing your access token in every request:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhcGkudHJhbnNpcC5ubCIsImF1ZCI6IjEwLjQuMTc5LjUiLCJpYXQiOjE0ODI4MzQ5MjIsIm5iZiI6MTQ4MjgzNDkyMiwiZXhwIjoxNDkwNjEwOTIyLCJjdXN0b21lcl9pZCI6MTE1NjMyfQ.GIlHPUt3ErWF0jXM2baXEDAE3V9y2X1ozAihrQMVnccZqS3QuPEsHjSsa8fuoWHM-kjhkfRW8Kc74or4Y83Jc6biVND9rFPJ9075rs2RdiABNFGzF3a3K1Q789O6cTau2kN55-cxAVp-tJbk39vMrJd3PrVQumKy1EYZ4YICNIm7p5D1UwBxkjNPxvesMDlVzpq3gAbnmrEWnZi3VR3TEaUzhK3Sr0MjUN3WdqIQgqLNWDBkgzfZaDebhiBSIc66x0HLz856BKZIzn4uP88Y-x8pl4DtrppZemH7h_p8vYoVC4aohAuViUq3jm-SBLRuwz1pzFM02QQ_dSAXwoTs7A

You can also add a label to your access tokens. This can be done by setting the label property.

All your active access tokens can be managed in the control panel. You can revoke your tokens and generate new ones.

Rate limit

The rate limit for this API uses a sliding window of 15 minutes. Within this window, a maximum of 1000 requests can be made per user.

Every request returns the following headers, indicating the number of requests made within this window, the amount of requests remaining and the reset timestamp.

X-Rate-Limit-Limit: 1000
X-Rate-Limit-Remaining: 650
X-Rate-Limit-Reset: 1485875578

When this rate limit is exceeded, the response contain an HTTP status code 429: Too many requests.

Order Requests

Some API calls, as the pre-generated would automatically be accepted, will generate an invoice. In case direct debit is activated on the TransIP customer account associated with the API key, payment will occur at a later stage. This is mostly the case with products and add-ons with automatic provisioning. In order to prevent mistakes, each API call that generates an invoice has a warning outlined below its description in this API documentation.

/ General

Products

This is the API endpoint for products.

GET /products
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/products"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "products": {
    "vps": [
      {
        "name": "exampleProduct-name",
        "description": "This is an example product",
        "price": 4.99,
        "recurringPrice": 7.99
      }
    ],
    "vpsAddon": [
      {
        "name": "exampleProduct-name",
        "description": "This is an example product",
        "price": 4.99,
        "recurringPrice": 7.99
      }
    ],
    "haip": [
      {
        "name": "exampleProduct-name",
        "description": "This is an example product",
        "price": 4.99,
        "recurringPrice": 7.99
      }
    ],
    "bigStorage": [
      {
        "name": "exampleProduct-name",
        "description": "This is an example product",
        "price": 4.99,
        "recurringPrice": 7.99
      }
    ],
    "privateNetworks": [
      {
        "name": "exampleProduct-name",
        "description": "This is an example product",
        "price": 4.99,
        "recurringPrice": 7.99
      }
    ]
  }
}

List all products

GET/products

Returns all available products currently offered by TransIP.

When introducing a new product, TransIP will add its properties to this output, allowing you to keep up with new changes.

Response Attributes
products
Products

Hide child attributesShow child attributes
vps
Array (Product)

A list of vps products

name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

vpsAddon
Array (Product)

A list of vps addons

name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

haip
Array (Product)

A list of haip products

name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

bigStorage
Array (Product)

A list of big storage products

name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

privateNetworks
Array (Product)

A list of private network products

name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

AvailabilityZone

GET /availability-zones
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/availability-zones"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "availabilityZones": [
    {
      "name": "ams0",
      "country": "nl",
      "isDefault": true
    }
  ]
}

List available AvailabilityZones

GET/availability-zones

Lists the available AvailabilityZones

Response Attributes
availabilityZones
Array (AvailabilityZone)

Hide child attributesShow child attributes
name
string

Name of AvailabilityZone

country
string

The 2 letter code for the country the AvailabilityZone is in

isDefault
boolean

If true this is the default zone new VPSes and clones are created in

ApiTest

This is the API endpoint to do a simple token or application test

GET /api-test
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/api-test"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "ping": "pong"
}

Api Test

GET/api-test

Returns pong. A simple test resource to make sure everything is working

Response Attributes
ping
string

/ Account

Invoices

This is the API endpoint for invoices.

GET /invoices
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/invoices"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "invoices": [
    {
      "invoiceNumber": "F0000.1911.0000.0004",
      "creationDate": "2020-01-01",
      "payDate": "2020-01-01",
      "dueDate": "2020-02-01",
      "invoiceStatus": "waitsforpayment",
      "currency": "EUR",
      "totalAmount": 1000,
      "totalAmountInclVat": 1240
    }
  ]
}

List all invoices

GET/invoices

Returns a list of all invoices attached to your TransIP account.

This method supports pagination, using this method you can limit the amount of invoices returned by the api, which might be useful if you expect a lot of response objects and you want to spread that over to multiple requests. See the documentation on pages for more information on how to use this functionality.

Response Attributes
invoices
Array (Invoice)

Hide child attributesShow child attributes
invoiceNumber
string

Invoice number

creationDate
string

Invoice creation date

payDate
string

Invoice paid date

dueDate
string

Invoice deadline

invoiceStatus
string

Invoice status

currency
string

Currency used for this invoice

totalAmount
number

Invoice total (displayed in cents)

totalAmountInclVat
number

Invoice total including VAT (displayed in cents)

GET /invoices/F0000.1911.0000.0004
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/invoices/F0000.1911.0000.0004"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "invoice": {
    "invoiceNumber": "F0000.1911.0000.0004",
    "creationDate": "2020-01-01",
    "payDate": "2020-01-01",
    "dueDate": "2020-02-01",
    "invoiceStatus": "waitsforpayment",
    "currency": "EUR",
    "totalAmount": 1000,
    "totalAmountInclVat": 1240,
    "invoiceItems": [
      {
        "product": "Big Storage Disk 2000 GB",
        "description": "Big Storage Disk 2000 GB (example-bigstorage)",
        "isRecurring": false,
        "date": "2020-01-01",
        "quantity": 1,
        "price": 1000,
        "priceInclVat": 1210,
        "vat": 210,
        "vatPercentage": 21,
        "discounts": [
          {
            "description": "Korting (20% Black Friday)",
            "amount": -500
          }
        ]
      }
    ]
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Invoice F0000.1911.0000.0004 does not exist"
}

List a single invoice

GET/invoices/{invoiceNumber}

Returns a single invoice attached to your TransIP account.

The invoice object contains a invoiceItems hash that provides further information on how each line item is applied to the invoice.

URI Parameters
HideShow
invoiceNumber
string (required) Example: F0000.1911.0000.0004

The Invoice number

Response Attributes
invoice
InvoiceSummary

Hide child attributesShow child attributes
invoiceNumber
string

Invoice number

creationDate
string

Invoice creation date

payDate
string

Invoice paid date

dueDate
string

Invoice deadline

invoiceStatus
string

Invoice status

currency
string

Currency used for this invoice

totalAmount
number

Invoice total (displayed in cents)

totalAmountInclVat
number

Invoice total including VAT (displayed in cents)

invoiceItems
Array (InvoiceItem)

Invoice order line items

product
string

Product name

description
string

Product description

isRecurring
boolean

Payment is recurring

date
string

Date when the order line item was up for invoicing

quantity
number

Quantity

price
number

Price excluding VAT (displayed in cents)

priceInclVat
number

Price including VAT (displayed in cents)

vat
number

Amount of VAT charged

vatPercentage
number

Percentage used to calculate the VAT

discounts
Array (InvoiceItemDiscount)

Applied discounts

description
string

Applied discount description

amount
number

Discounted amount (in cents)

Pdf

This is the API endpoint for PDF invoices.

GET /invoices/F0000.1911.0000.0004/pdf
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/invoices/F0000.1911.0000.0004/pdf"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "pdf": "Y205elpYTWdZWEpsSUhKbFpDd2dabXh2ZDJWeWN5QmhjbVVnWW14MVpTd2dkR2hsY21VZ2MyaHZkV3hrSUdKbElHRWdjR1JtSUdobGNtVWdZblYwSUdsMElHbHpJR2RzZFdVdQ==="
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Invoice `F0000.1911.0000.0004` does not exist"
}

Retrieve an invoice as PDF file

GET/invoices/{invoiceNumber}/pdf

Retrieve the PDF data of an invoice with the given invoice number.

The response returns a string that is Base64 encoded. Decode this string before saving to a PDF file.

URI Parameters
HideShow
invoiceNumber
string (required) Example: F0000.1911.0000.0004

The Invoice number

Response Attributes
pdf
string

/ Domains

Domains

This is the API endpoint for domain services.

This endpoint can be used to manage domains

GET /domains
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "domains": [
    {
      "name": "example.com",
      "authCode": "kJqfuOXNOYQKqh/jO4bYSn54YDqgAt1ksCe+ZG4Ud4nfpzw8qBsfR2JqAj7Ce12SxKcGD09v+yXd6lrm",
      "isTransferLocked": false,
      "registrationDate": "2016-01-01",
      "renewalDate": "2020-01-01",
      "isWhitelabel": false,
      "cancellationDate": "2020-01-01 12:00:00",
      "cancellationStatus": "signed",
      "isDnsOnly": false,
      "tags": [
        "customTag",
        "anotherTag"
      ]
    }
  ]
}

List all domains

GET/domains

This API call allows you to list all domain names in your TransIP account. These include domain name registrations initiated from the TransIP API as well as domain registrations through the TransIP web interface.

Should you want to filter the domains list by a custom tag, set the tag parameter and only domains with the tag will be shown like https://api.transip.nl/v6/domains?tag=customTag,anotherTag

This method supports pagination, using this methods you can limit the amount of domains returned by the api, which might be usefull if you expect a lot of response objects and you want to spread that over multiple requests. See the documentation on pages for more information on how to use this functionality.

URI Parameters
HideShow
tags
string (optional) Example: /domains?tags=customTag,anotherTag

Tags to filter by, separated by a ‘,’.

Response Attributes
domains
Array (Domain)

Hide child attributesShow child attributes
name
string

The name, including the tld of this domain

authCode
string,null

The authcode for this domain as generated by the registry.

isTransferLocked
boolean

If this domain supports transfer locking, this flag is true when the domains ability to transfer is locked at the registry.

registrationDate
string

Registration date of the domain, in YYYY-mm-dd format.

renewalDate
string

Next renewal date of the domain, in YYYY-mm-dd format.

isWhitelabel
boolean

If this domain is added to your whitelabel.

cancellationDate
string,null

Cancellation data, in YYYY-mm-dd h:i:s format, null if the domain is active.

cancellationStatus
string,null

Cancellation status, null if the domain is active, ‘cancelled’ when the domain is cancelled.

isDnsOnly
boolean

Whether this domain is DNS only

tags
Array (string)

The custom tags added to this domain.

GET /domains/example.com
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "domain": {
    "name": "example.com",
    "authCode": "kJqfuOXNOYQKqh/jO4bYSn54YDqgAt1ksCe+ZG4Ud4nfpzw8qBsfR2JqAj7Ce12SxKcGD09v+yXd6lrm",
    "isTransferLocked": false,
    "registrationDate": "2016-01-01",
    "renewalDate": "2020-01-01",
    "isWhitelabel": false,
    "cancellationDate": "2020-01-01 12:00:00",
    "cancellationStatus": "signed",
    "isDnsOnly": false,
    "tags": [
      "customTag",
      "anotherTag"
    ]
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}

Retrieve an existing domain

GET/domains/{domainName}

Gather general details about a specific domain name in order to show it.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
domain
Domain

Hide child attributesShow child attributes
name
string

The name, including the tld of this domain

authCode
string,null

The authcode for this domain as generated by the registry.

isTransferLocked
boolean

If this domain supports transfer locking, this flag is true when the domains ability to transfer is locked at the registry.

registrationDate
string

Registration date of the domain, in YYYY-mm-dd format.

renewalDate
string

Next renewal date of the domain, in YYYY-mm-dd format.

isWhitelabel
boolean

If this domain is added to your whitelabel.

cancellationDate
string,null

Cancellation data, in YYYY-mm-dd h:i:s format, null if the domain is active.

cancellationStatus
string,null

Cancellation status, null if the domain is active, ‘cancelled’ when the domain is cancelled.

isDnsOnly
boolean

Whether this domain is DNS only

tags
Array (string)

The custom tags added to this domain.

POST /domains
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"domainName": "example.com",
"contacts": [
{
"type": "registrant",
"firstName": "John",
"lastName": "Doe",
"companyName": "Example B.V.",
"companyKvk": "83057825",
"companyType": "BV",
"street": "Easy street",
"number": "12",
"postalCode": "1337 XD",
"city": "Leiden",
"phoneNumber": "+31 715241919",
"faxNumber": "+31 715241919",
"email": "example@example.com",
"country": "nl"
}
],
"nameservers": [
{
"hostname": "ns0.transip.nl",
"ipv4": "",
"ipv6": ""
}
],
"dnsEntries": [
{
"name": "mail",
"expire": 86400,
"type": "CNAME",
"content": "@"
}
]
}
' \
"https://api.transip.nl/v6/domains"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "domainName": "example.com",
  "contacts": [
    {
      "type": "registrant",
      "firstName": "John",
      "lastName": "Doe",
      "companyName": "Example B.V.",
      "companyKvk": "83057825",
      "companyType": "BV",
      "street": "Easy street",
      "number": "12",
      "postalCode": "1337 XD",
      "city": "Leiden",
      "phoneNumber": "+31 715241919",
      "faxNumber": "+31 715241919",
      "email": "example@example.com",
      "country": "nl"
    }
  ],
  "nameservers": [
    {
      "hostname": "ns0.transip.nl",
      "ipv4": "",
      "ipv6": ""
    }
  ],
  "dnsEntries": [
    {
      "name": "mail",
      "expire": 86400,
      "type": "CNAME",
      "content": "@"
    }
  ]
}
Response201406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "The domain 'example.com' is not free and thus cannot be registered"
}

Register a new domain

POST/domains

Register a new domain. Note that in most cases, promotions or discounts do not apply to registrations through the TransIP API.

You can set the contacts, nameservers and DNS entries immediately, but it’s not mandatory for registration.

Warning: This API call will create an invoice!

Request Attributes
domainName
string, required

contacts
Array (WhoisContact), optional

type
string

The type of this Contact, ‘registrant’, ‘administrative’ or ‘technical’

firstName
string

The firstName of this Contact

lastName
string

The lastName of this Contact

companyName
string

The companyName of this Contact, in case of a company

companyKvk
string

The kvk number of this Contact, in case of a company

companyType
string

The type number of this Contact, in case of a company. Possible types are: ‘BV’, ‘BVI/O’, ‘COOP’, ‘CV’, ‘EENMANSZAAK’, ‘KERK’, ‘NV’, ‘OWM’, ‘REDR’, ‘STICHTING’, ‘VERENIGING’, ‘VOF’, ‘BEG’, ‘BRO’, ‘EESV’ and ‘ANDERS’

street
string

The street of the address of this Contact

number
string

The number part of the address of this Contact

postalCode
string

The postalCode part of the address of this Contact

city
string

The city part of the address of this Contact

phoneNumber
string

The phoneNumber of this Contact

faxNumber
string,null

The faxNumber of this Contact

email
string

The email of this Contact

country
string

The country of this Contact, one of the ISO country abbreviations, must be lowercase.

nameservers
Array (Nameserver), optional

hostname
string

The hostname of this nameserver

ipv4
string,null

Optional ipv4 glue record for this nameserver

ipv6
string,null

Optional ipv6 glue record for this nameserver

dnsEntries
Array (DnsEntry), optional

name
string

The name of the dns entry, for example ‘@’ or ‘www’

expire
number

The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration

type
string

The type of dns entry. Possbible types are ‘A’, ‘AAAA’, ‘CNAME’, ‘MX’, ‘NS’, ‘TXT’, ‘SRV’, ‘SSHFP’ and ‘TLSA’

content
string

The content of of the dns entry, for example ‘10 mail’, ‘127.0.0.1’ or ‘www’

POST /domains
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"domainName": "example.com",
"authCode": "CYPMaVH+9MRjXGBc3InzHs7vNSUBPOjwpZm3GO+iDLHnFLtiP7sOKqW5JD1WeUpevZM6q1qS5YH9dGSp",
"contacts": [
{
"type": "registrant",
"firstName": "John",
"lastName": "Doe",
"companyName": "Example B.V.",
"companyKvk": "83057825",
"companyType": "BV",
"street": "Easy street",
"number": "12",
"postalCode": "1337 XD",
"city": "Leiden",
"phoneNumber": "+31 715241919",
"faxNumber": "+31 715241919",
"email": "example@example.com",
"country": "nl"
}
],
"nameservers": [
{
"hostname": "ns0.transip.nl",
"ipv4": "",
"ipv6": ""
}
],
"dnsEntries": [
{
"name": "mail",
"expire": 86400,
"type": "CNAME",
"content": "@"
}
]
}
' \
"https://api.transip.nl/v6/domains"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "domainName": "example.com",
  "authCode": "CYPMaVH+9MRjXGBc3InzHs7vNSUBPOjwpZm3GO+iDLHnFLtiP7sOKqW5JD1WeUpevZM6q1qS5YH9dGSp",
  "contacts": [
    {
      "type": "registrant",
      "firstName": "John",
      "lastName": "Doe",
      "companyName": "Example B.V.",
      "companyKvk": "83057825",
      "companyType": "BV",
      "street": "Easy street",
      "number": "12",
      "postalCode": "1337 XD",
      "city": "Leiden",
      "phoneNumber": "+31 715241919",
      "faxNumber": "+31 715241919",
      "email": "example@example.com",
      "country": "nl"
    }
  ],
  "nameservers": [
    {
      "hostname": "ns0.transip.nl",
      "ipv4": "",
      "ipv6": ""
    }
  ],
  "dnsEntries": [
    {
      "name": "mail",
      "expire": 86400,
      "type": "CNAME",
      "content": "@"
    }
  ]
}
Response201409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "The domain 'example.com' is already available in your account, thus cannot be transferred"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The domain 'example.com' is not registered and thus cannot be transferred"
}

Transfer a domain

POST/domains

Transfer a domain to TransIP using its transfer key (or ‘EPP code’) by specifying it in the authCode parameter.

You can override the contacts, nameservers and DNS entries immediately, but is not mandatory.

Warning: This API call will create an invoice!

Request Attributes
domainName
string, required

authCode
string, required

The auth code of the domain.

contacts
Array (WhoisContact), optional

type
string

The type of this Contact, ‘registrant’, ‘administrative’ or ‘technical’

firstName
string

The firstName of this Contact

lastName
string

The lastName of this Contact

companyName
string

The companyName of this Contact, in case of a company

companyKvk
string

The kvk number of this Contact, in case of a company

companyType
string

The type number of this Contact, in case of a company. Possible types are: ‘BV’, ‘BVI/O’, ‘COOP’, ‘CV’, ‘EENMANSZAAK’, ‘KERK’, ‘NV’, ‘OWM’, ‘REDR’, ‘STICHTING’, ‘VERENIGING’, ‘VOF’, ‘BEG’, ‘BRO’, ‘EESV’ and ‘ANDERS’

street
string

The street of the address of this Contact

number
string

The number part of the address of this Contact

postalCode
string

The postalCode part of the address of this Contact

city
string

The city part of the address of this Contact

phoneNumber
string

The phoneNumber of this Contact

faxNumber
string,null

The faxNumber of this Contact

email
string

The email of this Contact

country
string

The country of this Contact, one of the ISO country abbreviations, must be lowercase.

nameservers
Array (Nameserver), optional

hostname
string

The hostname of this nameserver

ipv4
string,null

Optional ipv4 glue record for this nameserver

ipv6
string,null

Optional ipv6 glue record for this nameserver

dnsEntries
Array (DnsEntry), optional

name
string

The name of the dns entry, for example ‘@’ or ‘www’

expire
number

The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration

type
string

The type of dns entry. Possbible types are ‘A’, ‘AAAA’, ‘CNAME’, ‘MX’, ‘NS’, ‘TXT’, ‘SRV’, ‘SSHFP’ and ‘TLSA’

content
string

The content of of the dns entry, for example ‘10 mail’, ‘127.0.0.1’ or ‘www’

PUT /domains/example.com
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"domain": {
"name": "example.com",
"authCode": "kJqfuOXNOYQKqh/jO4bYSn54YDqgAt1ksCe+ZG4Ud4nfpzw8qBsfR2JqAj7Ce12SxKcGD09v+yXd6lrm",
"isTransferLocked": false,
"registrationDate": "2016-01-01",
"renewalDate": "2020-01-01",
"isWhitelabel": false,
"cancellationDate": "2020-01-01 12:00:00",
"cancellationStatus": "signed",
"isDnsOnly": false,
"tags": [
"customTag",
"anotherTag"
]
}
}
' \
"https://api.transip.nl/v6/domains/example.com"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "domain": {
    "name": "example.com",
    "authCode": "kJqfuOXNOYQKqh/jO4bYSn54YDqgAt1ksCe+ZG4Ud4nfpzw8qBsfR2JqAj7Ce12SxKcGD09v+yXd6lrm",
    "isTransferLocked": false,
    "registrationDate": "2016-01-01",
    "renewalDate": "2020-01-01",
    "isWhitelabel": false,
    "cancellationDate": "2020-01-01 12:00:00",
    "cancellationStatus": "signed",
    "isDnsOnly": false,
    "tags": [
      "customTag",
      "anotherTag"
    ]
  }
}
Response204403404409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "You do not have a whitelabel account yet, please order one first"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain 'example.com' has action 'changeNameservers' running, no modification is allowed"
}

Update a domain

PUT/domains/{domainName}

Update an existing domain. To apply or release a lock, change the isTransferLocked attribute. To change tags, update the tags attribute.

You’re able to add the domain name under a whitelabel account. Note this whitelabel functionality is available only for .nl domains. Furthermore, the whitelabel account must be activated first at regular charge. Upon activating, newly registered domains with the isWhitelabel attribute set to ‘true’ will be shown under a whitelabel registrar name.

For more information about whitelabel domain name registration at TransIP, please see the documentation regarding whitelabel.

Warning: When adding the domain to your whitelabel, it cannot be reverted!

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
domain
Domain, required

name
string

The name, including the tld of this domain

authCode
string,null

The authcode for this domain as generated by the registry.

isTransferLocked
boolean

If this domain supports transfer locking, this flag is true when the domains ability to transfer is locked at the registry.

registrationDate
string

Registration date of the domain, in YYYY-mm-dd format.

renewalDate
string

Next renewal date of the domain, in YYYY-mm-dd format.

isWhitelabel
boolean

If this domain is added to your whitelabel.

cancellationDate
string,null

Cancellation data, in YYYY-mm-dd h:i:s format, null if the domain is active.

cancellationStatus
string,null

Cancellation status, null if the domain is active, ‘cancelled’ when the domain is cancelled.

isDnsOnly
boolean

Whether this domain is DNS only

tags
Array (string)

The custom tags added to this domain.

DELETE /domains/example.com
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"endTime": "end"
}
' \
"https://api.transip.nl/v6/domains/example.com"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "endTime": "end"
}
Response204403404406409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "The domain 'example.com' has additional products attached, and thus can't be cancelled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The domain 'example.com' is inactive, and thus can't be cancelled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "A domain add-on for 'example.com' is inactive, and thus the domain itself can't be cancelled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The domain 'example.com' already has a cancellation pending"
}

Cancel a domain

DELETE/domains/{domainName}

Cancels the specified domain. Depending on the time you want to cancel the domain, specify ‘end’ or ‘immediately’ for the endTime attribute.

Upon canceling a domain name (or any other product) it will be shown under cancellations in the TransIP control panel. By using the API method outlined above (Retrieve an existing domain) you’ll be able to see if the domain name has been canceled yet.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
endTime
string, optional

Cancellation time, either ‘end’ or ‘immediately’

Branding

TransIP allows for multiple ways to whitelabel domains. Among others, this includes changing ‘banners’ shown in the WHOIS. For example, for some TLDs, the company name and URL can be specified. TransIP’s information will be hidden.

Aside from this, you can place your .nl domain names in a whitelabel account so the registrar for .nl domain names is changed to a neutral name.

GET /domains/example.com/branding
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/branding"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "branding": {
    "companyName": "Example B.V.",
    "supportEmail": "admin@example.com",
    "companyUrl": "www.example.com",
    "termsOfUsageUrl": "www.example.com/tou",
    "bannerLine1": "Example B.V.",
    "bannerLine2": "Example",
    "bannerLine3": "http://www.example.com/products"
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

Get domain branding

GET/domains/{domainName}/branding

Get domain branding information for a given domain name.

Please note this API call does not return the whitelabel account status (just the branding).

Branding options can be altered from the TransIP control panel or by using the API call outlined below.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
branding
DomainBranding

Hide child attributesShow child attributes
companyName
string

The company name displayed in transfer-branded e-mails

supportEmail
string

The support email used for transfer-branded e-mails

companyUrl
string

The company url displayed in transfer-branded e-mails

termsOfUsageUrl
string,null

The terms of usage url as displayed in transfer-branded e-mails

bannerLine1
string

The first generic bannerLine displayed in whois-branded whois output.

bannerLine2
string

The second generic bannerLine displayed in whois-branded whois output.

bannerLine3
string

The third generic bannerLine displayed in whois-branded whois output.

PUT /domains/example.com/branding
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"branding": {
"companyName": "Example B.V.",
"supportEmail": "admin@example.com",
"companyUrl": "www.example.com",
"termsOfUsageUrl": "www.example.com/tou",
"bannerLine1": "Example B.V.",
"bannerLine2": "Example",
"bannerLine3": "http://www.example.com/products"
}
}
' \
"https://api.transip.nl/v6/domains/example.com/branding"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "branding": {
    "companyName": "Example B.V.",
    "supportEmail": "admin@example.com",
    "companyUrl": "www.example.com",
    "termsOfUsageUrl": "www.example.com/tou",
    "bannerLine1": "Example B.V.",
    "bannerLine2": "Example",
    "bannerLine3": "http://www.example.com/products"
  }
}
Response204404406406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain TLD doesn't support branding"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain 'example.com' has action 'changeNameservers' running, no modification is allowed"
}

Update domain branding

PUT/domains/{domainName}/branding

Domain name branding can be set or altered using this API call. Among others, you can set your own company name and company URL, replacing the default values which are usually TransIP contact details.

Changes will not apply to previously registered domain names. The new settings will, in most cases, only show up for newly registered domain names after the changes were made.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
branding
DomainBranding, required

companyName
string

The company name displayed in transfer-branded e-mails

supportEmail
string

The support email used for transfer-branded e-mails

companyUrl
string

The company url displayed in transfer-branded e-mails

termsOfUsageUrl
string,null

The terms of usage url as displayed in transfer-branded e-mails

bannerLine1
string

The first generic bannerLine displayed in whois-branded whois output.

bannerLine2
string

The second generic bannerLine displayed in whois-branded whois output.

bannerLine3
string

The third generic bannerLine displayed in whois-branded whois output.

Contacts

Domain names are registered using multiple contacts, each fulfilling a role related to the domain name and its underlying infrastructure. Contacts are owner, administrative contact and technical contact. In many cases these are the same.

The owner should be contacted for inquiries such as a sale or questions related to hosted content. The administrative contact should be contacted for inquiries regarding invoicing and the like. The technical contact is usually responsible for the underlying infrastructure, such as managing the domain name, its DNS and hosting.

Contacts are usually a person (individual) or a person responsible for a company.

GET /domains/example.com/contacts
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/contacts"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "contacts": [
    {
      "type": "registrant",
      "firstName": "John",
      "lastName": "Doe",
      "companyName": "Example B.V.",
      "companyKvk": "83057825",
      "companyType": "BV",
      "street": "Easy street",
      "number": "12",
      "postalCode": "1337 XD",
      "city": "Leiden",
      "phoneNumber": "+31 715241919",
      "faxNumber": "+31 715241919",
      "email": "example@example.com",
      "country": "nl"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

List all contacts for a domain

GET/domains/{domainName}/contacts

List domain names’ contacts. The following contacts will be shown:

  • Domain name owner;

  • Administrative contact;

  • Technical contact

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
contacts
Array (WhoisContact)

Hide child attributesShow child attributes
type
string

The type of this Contact, ‘registrant’, ‘administrative’ or ‘technical’

firstName
string

The firstName of this Contact

lastName
string

The lastName of this Contact

companyName
string

The companyName of this Contact, in case of a company

companyKvk
string

The kvk number of this Contact, in case of a company

companyType
string

The type number of this Contact, in case of a company. Possible types are: ‘BV’, ‘BVI/O’, ‘COOP’, ‘CV’, ‘EENMANSZAAK’, ‘KERK’, ‘NV’, ‘OWM’, ‘REDR’, ‘STICHTING’, ‘VERENIGING’, ‘VOF’, ‘BEG’, ‘BRO’, ‘EESV’ and ‘ANDERS’

street
string

The street of the address of this Contact

number
string

The number part of the address of this Contact

postalCode
string

The postalCode part of the address of this Contact

city
string

The city part of the address of this Contact

phoneNumber
string

The phoneNumber of this Contact

faxNumber
string,null

The faxNumber of this Contact

email
string

The email of this Contact

country
string

The country of this Contact, one of the ISO country abbreviations, must be lowercase.

PUT /domains/example.com/contacts
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"contacts": [
{
"type": "registrant",
"firstName": "John",
"lastName": "Doe",
"companyName": "Example B.V.",
"companyKvk": "83057825",
"companyType": "BV",
"street": "Easy street",
"number": "12",
"postalCode": "1337 XD",
"city": "Leiden",
"phoneNumber": "+31 715241919",
"faxNumber": "+31 715241919",
"email": "example@example.com",
"country": "nl"
}
]
}
' \
"https://api.transip.nl/v6/domains/example.com/contacts"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "contacts": [
    {
      "type": "registrant",
      "firstName": "John",
      "lastName": "Doe",
      "companyName": "Example B.V.",
      "companyKvk": "83057825",
      "companyType": "BV",
      "street": "Easy street",
      "number": "12",
      "postalCode": "1337 XD",
      "city": "Leiden",
      "phoneNumber": "+31 715241919",
      "faxNumber": "+31 715241919",
      "email": "example@example.com",
      "country": "nl"
    }
  ]
}
Response204404406406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain TLD doesn't support 'x' capability"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain 'example.com' is locked, no modification is allowed"
}

Update contacts for a domain

PUT/domains/{domainName}/contacts

Use this API call in case you want to alter domain name contacts after the registration of a domain name.

  • Some TLD do not support changing all the fields like the AddressData. This will throw a 406 http error
URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
contacts
Array (WhoisContact), required

type
string

The type of this Contact, ‘registrant’, ‘administrative’ or ‘technical’

firstName
string

The firstName of this Contact

lastName
string

The lastName of this Contact

companyName
string

The companyName of this Contact, in case of a company

companyKvk
string

The kvk number of this Contact, in case of a company

companyType
string

The type number of this Contact, in case of a company. Possible types are: ‘BV’, ‘BVI/O’, ‘COOP’, ‘CV’, ‘EENMANSZAAK’, ‘KERK’, ‘NV’, ‘OWM’, ‘REDR’, ‘STICHTING’, ‘VERENIGING’, ‘VOF’, ‘BEG’, ‘BRO’, ‘EESV’ and ‘ANDERS’

street
string

The street of the address of this Contact

number
string

The number part of the address of this Contact

postalCode
string

The postalCode part of the address of this Contact

city
string

The city part of the address of this Contact

phoneNumber
string

The phoneNumber of this Contact

faxNumber
string,null

The faxNumber of this Contact

email
string

The email of this Contact

country
string

The country of this Contact, one of the ISO country abbreviations, must be lowercase.

DNS

This is the API endpoint for changing DNS records. Any changes made here will be pushed to the TransIP nameservers (both the non-whitelabel and the whitelabel nameservers).

DNS entries altered, added or removed here will only be propagated when the nameservers for a domain name are set to TransIP’s.

We recommend making use of the TransIP nameservers as these API calls will become available for use and things like DNSSEC will be configured in advance.

GET /domains/example.com/dns
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/dns"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "dnsEntries": [
    {
      "name": "mail",
      "expire": 86400,
      "type": "CNAME",
      "content": "@"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

List all DNS entries for a domain

GET/domains/{domainName}/dns

List all DNS entries for a domain

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
dnsEntries
Array (DnsEntry)

Hide child attributesShow child attributes
name
string

The name of the dns entry, for example ‘@’ or ‘www’

expire
number

The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration

type
string

The type of dns entry. Possbible types are ‘A’, ‘AAAA’, ‘CNAME’, ‘MX’, ‘NS’, ‘TXT’, ‘SRV’, ‘SSHFP’ and ‘TLSA’

content
string

The content of of the dns entry, for example ‘10 mail’, ‘127.0.0.1’ or ‘www’

POST /domains/example.com/dns
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"dnsEntry": {
"name": "mail",
"expire": 86400,
"type": "CNAME",
"content": "@"
}
}
' \
"https://api.transip.nl/v6/domains/example.com/dns"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "dnsEntry": {
    "name": "mail",
    "expire": 86400,
    "type": "CNAME",
    "content": "@"
  }
}
Response201403404406406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "DNS Entry changes have temporarily been disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Invalid DNS entry type 'B'"
}

Add a new single DNS entry to a domain

POST/domains/{domainName}/dns

Add a single DNS entry to the existing zone file.

In case you want to overwrite the entire zone, please use the method below.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
dnsEntry
DnsEntry, required

name
string

The name of the dns entry, for example ‘@’ or ‘www’

expire
number

The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration

type
string

The type of dns entry. Possbible types are ‘A’, ‘AAAA’, ‘CNAME’, ‘MX’, ‘NS’, ‘TXT’, ‘SRV’, ‘SSHFP’ and ‘TLSA’

content
string

The content of of the dns entry, for example ‘10 mail’, ‘127.0.0.1’ or ‘www’

PATCH /domains/example.com/dns
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"dnsEntry": {
"name": "mail",
"expire": 86400,
"type": "CNAME",
"content": "@"
}
}
' \
"https://api.transip.nl/v6/domains/example.com/dns"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "dnsEntry": {
    "name": "mail",
    "expire": 86400,
    "type": "CNAME",
    "content": "@"
  }
}
Response204403404406406406406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "DNS Entry changes have temporarily been disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'mieperm@ns.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Invalid DNS entry type 'B'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Could not find match for DNS entry 'test 300 A'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Multiple matches found for DNS entry 'test 300 A'"
}

Update single DNS entry

PATCH/domains/{domainName}/dns

Update the content of a single DNS entry, identified by the name, expire & type attributes. When multiple or none of the current DNS entries matches, an exception will be thrown.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
dnsEntry
DnsEntry, required

name
string

The name of the dns entry, for example ‘@’ or ‘www’

expire
number

The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration

type
string

The type of dns entry. Possbible types are ‘A’, ‘AAAA’, ‘CNAME’, ‘MX’, ‘NS’, ‘TXT’, ‘SRV’, ‘SSHFP’ and ‘TLSA’

content
string

The content of of the dns entry, for example ‘10 mail’, ‘127.0.0.1’ or ‘www’

PUT /domains/example.com/dns
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"dnsEntries": [
{
"name": "mail",
"expire": 86400,
"type": "CNAME",
"content": "@"
}
]
}
' \
"https://api.transip.nl/v6/domains/example.com/dns"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "dnsEntries": [
    {
      "name": "mail",
      "expire": 86400,
      "type": "CNAME",
      "content": "@"
    }
  ]
}
Response204403404406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "DNS Entry changes have temporarily been disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

Update all DNS entries for a domain

PUT/domains/{domainName}/dns

This method will wipe the entire DNS zone file and replace it with the given records. Please note that data is not recoverable using an integrated method in the API, so make sure to use this with care.

Records specified in the ‘dns_entries’ attribute will be added after wiping the zone. For every record, you should specify a name, expiration period (often referred to as TTL or ‘Time to live’), the record type (such as MX, CNAME, A or AAAA) and the record content.

There is no hard limit as to the amount of DNS entries that can be added at once.

Warning: all current entries will be replaced!

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
dnsEntries
Array (DnsEntry), required

name
string

The name of the dns entry, for example ‘@’ or ‘www’

expire
number

The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration

type
string

The type of dns entry. Possbible types are ‘A’, ‘AAAA’, ‘CNAME’, ‘MX’, ‘NS’, ‘TXT’, ‘SRV’, ‘SSHFP’ and ‘TLSA’

content
string

The content of of the dns entry, for example ‘10 mail’, ‘127.0.0.1’ or ‘www’

DELETE /domains/example.com/dns
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"dnsEntry": {
"name": "mail",
"expire": 86400,
"type": "CNAME",
"content": "@"
}
}
' \
"https://api.transip.nl/v6/domains/example.com/dns"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "dnsEntry": {
    "name": "mail",
    "expire": 86400,
    "type": "CNAME",
    "content": "@"
  }
}
Response204403404404
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "DNS Entry changes have temporarily been disabled."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "DNS Entry not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}

Remove a DNS entry from a domain

DELETE/domains/{domainName}/dns

Remove a single DNS entry in an existing DNS zone. Just as with the other methods in this API endpoint, use this with care. Wrong settings could break your setup, thus affecting services (such as web and email). If there are duplicate DNS records found then a single record will be removed when performing this action.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
dnsEntry
DnsEntry, required

name
string

The name of the dns entry, for example ‘@’ or ‘www’

expire
number

The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration

type
string

The type of dns entry. Possbible types are ‘A’, ‘AAAA’, ‘CNAME’, ‘MX’, ‘NS’, ‘TXT’, ‘SRV’, ‘SSHFP’ and ‘TLSA’

content
string

The content of of the dns entry, for example ‘10 mail’, ‘127.0.0.1’ or ‘www’

DNSSEC

By utilizing DNSSEC, DNS resolvers ask for authentication first. Notably, DNSSEC is based on the use of DNSSEC keys registered at the registry.

For DNSSEC to work, the appropriate information must be set at the registrar; in this case TransIP. Otherwise, the domain name might become unreachable.

GET /domains/example.com/dnssec
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/dnssec"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "dnsSecEntries": [
    {
      "keyTag": 67239,
      "flags": 1,
      "algorithm": 8,
      "publicKey": "AwEAAc31XDE3QWphFz6CR77Hp3ZjDRx7zqe1AXx1QMvqFKzrEKrX4oj2nv8zDquCotbQ1ObHI4KGLRf3ycaq0fYslXFJ1JxLxJUl/lpGvE8OkqdhGW3vj3YS9Mlbf0yYC2bNUY875UgDNRLqWtVSEXO/PCcqr3RIzpngu+6JF/1bfQB7ituFHxoanhAiWOpc24ZAnrhmyIsDwyy1k0iyvVTSyPugnYD/bF7CR7ObQCiuucjwCkSBHJ4gcihHvyPDU/DlsSJeEO/G31zFxzXwHjr3h3mdJE4mQuceS11e5/c9hht6rUL0PEGve1Ygknz+0ruAinlhFYnny2uxES5M9r0FIM="
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

List DNSSEC entries

GET/domains/{domainName}/dnssec

This API call lists all DNSSEC entries for a domain once set. This includes the key tag, flags, algorithm and public key. Note that, in some cases, DNSSEC entries can be relatively sensitive information, so make sure not to share it. However, do note we only return the public key; the private key is never shared.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
dnsSecEntries
Array (DnsSecEntry)

Hide child attributesShow child attributes
keyTag
number

A 5-digit key of the Zonesigner

flags
number

The signing key number, either 256 (Zone Signing Key) or 257 (Key Signing Key)

algorithm
number

The algorithm type that is used, click here to see the possible options.

publicKey
string

The public key

PUT /domains/example.com/dnssec
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"dnsSecEntries": [
{
"keyTag": 67239,
"flags": 1,
"algorithm": 8,
"publicKey": "AwEAAc31XDE3QWphFz6CR77Hp3ZjDRx7zqe1AXx1QMvqFKzrEKrX4oj2nv8zDquCotbQ1ObHI4KGLRf3ycaq0fYslXFJ1JxLxJUl/lpGvE8OkqdhGW3vj3YS9Mlbf0yYC2bNUY875UgDNRLqWtVSEXO/PCcqr3RIzpngu+6JF/1bfQB7ituFHxoanhAiWOpc24ZAnrhmyIsDwyy1k0iyvVTSyPugnYD/bF7CR7ObQCiuucjwCkSBHJ4gcihHvyPDU/DlsSJeEO/G31zFxzXwHjr3h3mdJE4mQuceS11e5/c9hht6rUL0PEGve1Ygknz+0ruAinlhFYnny2uxES5M9r0FIM="
}
]
}
' \
"https://api.transip.nl/v6/domains/example.com/dnssec"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "dnsSecEntries": [
    {
      "keyTag": 67239,
      "flags": 1,
      "algorithm": 8,
      "publicKey": "AwEAAc31XDE3QWphFz6CR77Hp3ZjDRx7zqe1AXx1QMvqFKzrEKrX4oj2nv8zDquCotbQ1ObHI4KGLRf3ycaq0fYslXFJ1JxLxJUl/lpGvE8OkqdhGW3vj3YS9Mlbf0yYC2bNUY875UgDNRLqWtVSEXO/PCcqr3RIzpngu+6JF/1bfQB7ituFHxoanhAiWOpc24ZAnrhmyIsDwyy1k0iyvVTSyPugnYD/bF7CR7ObQCiuucjwCkSBHJ4gcihHvyPDU/DlsSJeEO/G31zFxzXwHjr3h3mdJE4mQuceS11e5/c9hht6rUL0PEGve1Ygknz+0ruAinlhFYnny2uxES5M9r0FIM="
    }
  ]
}
Response204404406406406406406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Key tag '0906' is invalid, please supply a number containing 5 digits"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Invalid algorithm 'CYBER', please supply one of the following algorithm: ..."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Invalid flag '255', please supply one of the following flags: ..."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "DNSSEC Entries for domain 'example.com' cannot be edited."
}

Update all DNSSEC entries

PUT/domains/{domainName}/dnssec

Current DNSSEC entries will be replaced, so if the entered information is incorrect, the domain name might become unreachable.

Set the key tag, flag, algorithm and public key.

Enter this with care. As previously mentioned, wrong settings will break your domain name and correcting the information (even if done instantly) will not necessarily prevent downtime.

Warning: all current entries will be replaced!

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
dnsSecEntries
Array (DnsSecEntry), required

keyTag
number

A 5-digit key of the Zonesigner

flags
number

The signing key number, either 256 (Zone Signing Key) or 257 (Key Signing Key)

algorithm
number

The algorithm type that is used, click here to see the possible options.

publicKey
string

The public key

Nameservers

This is the API endpoint for changing nameservers. The default nameservers can be set through the API or via the TransIP control panel. Nameservers can also be specified per domain name registration by specifying them explicitly.

In case the nameservers have not specifically been set, the whitelabel TransIP nameservers will be used for a whitelabel domain name registration and the non-whitelabeled TransIP nameservers will be used by default.

The TransIP nameservers (non-whitelabeled) are as follows:

GET /domains/example.com/nameservers
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/nameservers"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "nameservers": [
    {
      "hostname": "ns0.transip.nl",
      "ipv4": "",
      "ipv6": ""
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

List nameservers for a domain

GET/domains/{domainName}/nameservers

An array of nameservers currently used for the domain will be returned.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
nameservers
Array (Nameserver)

Hide child attributesShow child attributes
hostname
string

The hostname of this nameserver

ipv4
string,null

Optional ipv4 glue record for this nameserver

ipv6
string,null

Optional ipv6 glue record for this nameserver

PUT /domains/example.com/nameservers
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"nameservers": [
{
"hostname": "ns0.transip.nl",
"ipv4": "",
"ipv6": ""
}
]
}
' \
"https://api.transip.nl/v6/domains/example.com/nameservers"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "nameservers": [
    {
      "hostname": "ns0.transip.nl",
      "ipv4": "",
      "ipv6": ""
    }
  ]
}
Response204404406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

Update nameservers for a domain

PUT/domains/{domainName}/nameservers

Change the nameservers for a domain.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
nameservers
Array (Nameserver), required

hostname
string

The hostname of this nameserver

ipv4
string,null

Optional ipv4 glue record for this nameserver

ipv6
string,null

Optional ipv6 glue record for this nameserver

Actions

This is the API endpoint for managing domain actions.

GET /domains/example.com/actions
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/actions"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "action": {
    "name": "changeNameservers",
    "message": "success",
    "hasFailed": false
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

Get current domain action

GET/domains/{domainName}/actions

Domain actions are kept track of by TransIP. Domain actions include, for example, changing nameservers.

name is null when no action is running.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
action
DomainAction

Hide child attributesShow child attributes
name
string

The name of this DomainAction.

message
string

If this action has failed, this field will contain an descriptive message.

hasFailed
boolean

If this action has failed, this field will be true.

PATCH /domains/example.com/actions
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"authCode": "",
"dnsEntries": [
{
"name": "mail",
"expire": 86400,
"type": "CNAME",
"content": "@"
}
],
"nameservers": [
{
"hostname": "ns0.transip.nl",
"ipv4": "",
"ipv6": ""
}
],
"contacts": [
{
"type": "registrant",
"firstName": "John",
"lastName": "Doe",
"companyName": "Example B.V.",
"companyKvk": "83057825",
"companyType": "BV",
"street": "Easy street",
"number": "12",
"postalCode": "1337 XD",
"city": "Leiden",
"phoneNumber": "+31 715241919",
"faxNumber": "+31 715241919",
"email": "example@example.com",
"country": "nl"
}
]
}
' \
"https://api.transip.nl/v6/domains/example.com/actions"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "authCode": "",
  "dnsEntries": [
    {
      "name": "mail",
      "expire": 86400,
      "type": "CNAME",
      "content": "@"
    }
  ],
  "nameservers": [
    {
      "hostname": "ns0.transip.nl",
      "ipv4": "",
      "ipv6": ""
    }
  ],
  "contacts": [
    {
      "type": "registrant",
      "firstName": "John",
      "lastName": "Doe",
      "companyName": "Example B.V.",
      "companyKvk": "83057825",
      "companyType": "BV",
      "street": "Easy street",
      "number": "12",
      "postalCode": "1337 XD",
      "city": "Leiden",
      "phoneNumber": "+31 715241919",
      "faxNumber": "+31 715241919",
      "email": "example@example.com",
      "country": "nl"
    }
  ]
}
Response204404406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain 'example.com' has action 'changeNameservers' running, no modification is allowed."
}

Retry domain action

PATCH/domains/{domainName}/actions

Domain actions can fail due to wrong information. The action message will contain a failure message, please provide the information to fix this. the other information is not required and will be ignored.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
authCode
string, optional

dnsEntries
Array (DnsEntry), optional

name
string

The name of the dns entry, for example ‘@’ or ‘www’

expire
number

The expiration period of the dns entry, in seconds. For example 86400 for a day of expiration

type
string

The type of dns entry. Possbible types are ‘A’, ‘AAAA’, ‘CNAME’, ‘MX’, ‘NS’, ‘TXT’, ‘SRV’, ‘SSHFP’ and ‘TLSA’

content
string

The content of of the dns entry, for example ‘10 mail’, ‘127.0.0.1’ or ‘www’

nameservers
Array (Nameserver), optional

hostname
string

The hostname of this nameserver

ipv4
string,null

Optional ipv4 glue record for this nameserver

ipv6
string,null

Optional ipv6 glue record for this nameserver

contacts
Array (WhoisContact), optional

type
string

The type of this Contact, ‘registrant’, ‘administrative’ or ‘technical’

firstName
string

The firstName of this Contact

lastName
string

The lastName of this Contact

companyName
string

The companyName of this Contact, in case of a company

companyKvk
string

The kvk number of this Contact, in case of a company

companyType
string

The type number of this Contact, in case of a company. Possible types are: ‘BV’, ‘BVI/O’, ‘COOP’, ‘CV’, ‘EENMANSZAAK’, ‘KERK’, ‘NV’, ‘OWM’, ‘REDR’, ‘STICHTING’, ‘VERENIGING’, ‘VOF’, ‘BEG’, ‘BRO’, ‘EESV’ and ‘ANDERS’

street
string

The street of the address of this Contact

number
string

The number part of the address of this Contact

postalCode
string

The postalCode part of the address of this Contact

city
string

The city part of the address of this Contact

phoneNumber
string

The phoneNumber of this Contact

faxNumber
string,null

The faxNumber of this Contact

email
string

The email of this Contact

country
string

The country of this Contact, one of the ISO country abbreviations, must be lowercase.

DELETE /domains/example.com/actions
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/actions"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204404406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Unable to cancel the running action for 'example.com' at this time"
}

Cancel domain action

DELETE/domains/{domainName}/actions

Canceling a domain action while it is still pending or being processed is possible by using this API call in time.

Once a domain action has finished, it cannot be reverted by canceling it. Should the domain action already be finished, you will need to gather previous values and initiate various domain actions in order to revert to the previous state.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Zone File

This is the API endpoint for zone file functionality.

GET /domains/example.com/zone-file
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/zone-file"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "zoneFile": ""
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

Retrieve a zone file for a domain

GET/domains/{domainName}/zone-file

Get the zone file for a domain in plain text format. This zone file includes all DNS entries and nameservers. The lines in the zone file are separated using the ‘\n’ character.

Please note that in case the TransIP nameservers are not used, the returned DNS zone will be practically useless as it is not used on the Internet. You can determine whether the TransIP nameservers are used based on the nameserver information returned.

You’re not able to retrieve the DNS zone for the configured nameservers as they’re not managed by TransIP. You will need to query the specific DNS zone for this.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
zoneFile
string

PUT /domains/example.com/zone-file
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"zoneFile": ""
}
' \
"https://api.transip.nl/v6/domains/example.com/zone-file"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "zoneFile": ""
}
Response204404406406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "There were problems when importing your zone file:"
}

Update the DNS entries using a zone file

PUT/domains/{domainName}/zone-file

Use this API call to update all DNS entries using a zone file. That means the entire (current) DNS zone will be wiped and replaced to be identical to the uploaded zone file.

Make sure to supply the zone file in string format using the ‘\n’ expression or as an array of lines for the system to properly process it.

Uploaded DNS zones will be active only on TransIP nameservers. When other nameservers are used, the DNS zone configured at TransIP won’t be propagated, thus not used on the Internet.

Warning: all current entries will be replaced!

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Request Attributes
zoneFile
string, required

The zone file you want to import, separate the lines using the ‘\n’ character.

Ssl

This is the API endpoint for SSL services.

GET /domains/example.com/ssl
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/ssl"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "certificates": [
    {
      "certificateId": 12358,
      "commonName": "example.com",
      "expirationDate": "2017-10-24 12:59:59",
      "status": "active"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with name 'example.com' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

List all SSL certificates

GET/domains/{domainName}/ssl

Retrieves a list of all SSL certificates for this domain

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
certificates
Array (SslCertificate)

Hide child attributesShow child attributes
certificateId
number

The id of the certificate, can be used to retrieve additional info

commonName
string

The domain name that the SSL certificate is added to. Start with ‘*.’ when the certificate is a wildcard.

expirationDate
string

Expiration date

status
string

The current status, either ‘active’, ‘inactive’ or ‘expired’

GET /domains/example.com/ssl/12358
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/ssl/12358"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404406
Response headers
Content-Type: application/json
Response body
{
  "certificate": {
    "certificateId": 12358,
    "commonName": "example.com",
    "expirationDate": "2017-10-24 12:59:59",
    "status": "active"
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Certificate with id '1337' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

Get SSL certificate by id

GET/domains/{domainName}/ssl/{certificateId}

Retrieves a single SSL certificate by id

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

certificateId
number (required) Example: 12358

The id of the SSL certificate

Response Attributes
certificate
SslCertificate

Hide child attributesShow child attributes
certificateId
number

The id of the certificate, can be used to retrieve additional info

commonName
string

The domain name that the SSL certificate is added to. Start with ‘*.’ when the certificate is a wildcard.

expirationDate
string

Expiration date

status
string

The current status, either ‘active’, ‘inactive’ or ‘expired’

Whois

This is the API endpoint for executing domain whois commands.

GET /domains/example.com/whois
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domains/example.com/whois"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200406
Response headers
Content-Type: application/json
Response body
{
  "whois": ""
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'power-ranger$.nl'"
}

Get WHOIS information for a domain name

GET/domains/{domainName}/whois

Gets WHOIS information for a specified domain name

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
whois
string

Whitelabel

Whitelabel accounts are used in order to hide the TransIP name in general communication regarding a domain name. For example, a WHOIS lookup for a domain name usually shows ‘TransIP’ as the registrar. When a domain name is registered under a whitelabel account, the registrar will be an alternative whitelabel company, not offering domain name registration services on its own.

Aside from the registrar name, you will also be able to use whitelabel nameservers pulling DNS zones from the TransIP nameservers.

This allows for an added layer of whitelabeling your infrastructure. Whitelabel accounts are charged at an additional rate. Already registered domain names will technically be registered again, as they’re technically transfered to the new whitelabel registrar. This means existing domain names are charged in order to add them to your whitelabel account (though at a discounted rate). Existing domain names do not need to be transfered per se.

Currently, TransIP’s whitelabeling service is available exclusively for .nl (SIDN) domains.

POST /whitelabel
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/whitelabel"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response201406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "You already have a whitelabel account."
}

Order a whitelabel account

POST/whitelabel

Order a whitelabel account from the API. Note that you do not need to order a whitelabel account for every registered domain name. Ordering a whitelabel account for a single TransIP account allows for unlimited domain names to be added.

Please check the TransIP control panel to view the cost for a whitelabel account.

Warning: This API call will create an invoice!

Availability

Check availability for given domain names using data gathered by TransIP in real-time. Response can be ‘inyouraccount’, ‘unavailable’, ‘notfree’, ‘free’, ‘internalpull’ or ‘internalpush’.

  • inyouraccount: The domain name is already in your account (applies to both non-whitelabeled as well as whitelabeled domain names);

  • unavailable: The domain name is currently unavailable and can not be registered due to unknown reasons. In most cases, this has to do with registry policy (eg. the domain name is too short);

  • notfree: The domain name has already been registered;

  • free: The domain name is currently free, is available and can be registered;

  • internalpull: The domain name is currently registered at TransIP and is available to be pulled from another account to yours.

  • internalpush: The domain name is currently registered at TransIP in your account and is available to be pushed to another account.

If you’d like more information on the various states and domain name status indicators, please contact us for an explanation.

GET /domain-availability/example.com
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/domain-availability/example.com"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "availability": {
    "domainName": "example.com",
    "status": "free",
    "actions": [
      "register"
    ]
  }
}

Check availability for a domain name

GET/domain-availability/{domainName}

Check availability for a given domain name using data gathered by TransIP in real-time.

URI Parameters
HideShow
domainName
string (required) Example: example.com

Domain name

Response Attributes
availability
DomainCheckResult

Hide child attributesShow child attributes
domainName
string

The name of the Domain for which we have a status in this object

status
string

The status for this domain. Possible statuses are: ‘inyouraccount’, ‘unavailable’, ‘notfree’, ‘free’, ‘internalpull’ and ‘internalpush’

actions
Array (string)

List of available actions to perform on this domain. Possible actions are: ‘register’, ‘transfer’, ‘internalpull’ and ‘internalpush’

GET /domain-availability
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"domainNames": [
"example.com",
"example.nl"
]
}
' \
"https://api.transip.nl/v6/domain-availability"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "domainNames": [
    "example.com",
    "example.nl"
  ]
}
Response200
Response headers
Content-Type: application/json
Response body
{
  "availability": [
    {
      "domainName": "example.com",
      "status": "free",
      "actions": [
        "register"
      ]
    }
  ]
}

Check availability for multiple domain names

GET/domain-availability

Check availability for given domain names using data gathered by TransIP.

Request Attributes
domainNames
Array (string), required

array of domainNames to check

Response Attributes
availability
Array (DomainCheckResult)

Hide child attributesShow child attributes
domainName
string

The name of the Domain for which we have a status in this object

status
string

The status for this domain. Possible statuses are: ‘inyouraccount’, ‘unavailable’, ‘notfree’, ‘free’, ‘internalpull’ and ‘internalpush’

actions
Array (string)

List of available actions to perform on this domain. Possible actions are: ‘register’, ‘transfer’, ‘internalpull’ and ‘internalpush’

Tlds

This is the API endpoint for TLD services.

GET /tlds
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/tlds"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "tlds": [
    {
      "name": ".nl",
      "price": 3.99,
      "recurringPrice": 7.49,
      "capabilities": [
        "canRegister"
      ],
      "minLength": 2,
      "maxLength": 63,
      "registrationPeriodLength": 12,
      "cancelTimeFrame": 1
    }
  ]
}

List all TLDs

GET/tlds

TransIP keeps up-to-date with offering the newest TLDs (domain name extensions). Both ‘regular’ TLDs such as .nl, .eu, .net are offered as well as gTLDs, including recently introduced extensions such as .shop and .photography. The possibilities are endless!

A list of all available TLDs currently offered by TransIP is returned upon using this API call. You could use the returned list dynamically, effectively allowing your website or panel to automatically be updated without any manual actions.

Response Attributes
tlds
Array (Tld)

Hide child attributesShow child attributes
name
string

The name of this TLD, including the starting dot. E.g. .nl or .com.

price
number

Price of the TLD in Euros

recurringPrice
number

Price for renewing the TLD in Euros

capabilities
Array (string)

A list of the capabilities that this Tld has (the things that can be done with a domain under this tld). Possible capabilities are: ‘requiresAuthCode’, ‘canRegister’, ‘canTransferWithOwnerChange’, ‘canTransferWithoutOwnerChange’, ‘canSetLock’, ‘canSetOwner’, ‘canSetContacts’, ‘canSetNameservers’, ‘supportsDnsSec’

minLength
number

The minimum amount of characters need for registering a domain under this TLD.

maxLength
number

The maximum amount of characters need for registering a domain under this TLD.

registrationPeriodLength
number

Length in months of each registration or renewal period.

cancelTimeFrame
number

Number of days a domain needs to be canceled before the renewal date.

GET /tlds/.nl
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/tlds/.nl"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "tld": {
    "name": ".nl",
    "price": 3.99,
    "recurringPrice": 7.49,
    "capabilities": [
      "canRegister"
    ],
    "minLength": 2,
    "maxLength": 63,
    "registrationPeriodLength": 12,
    "cancelTimeFrame": 1
  }
}

Get info for a TLD

GET/tlds/{tld}

Get information about a specific TLD. General details such as price, renewal price and minimum registration length are outlined in the output. As soon as a registry changes their policy and TransIP updates theirs as well, the returned list will be updated. Therefore you will always be up-to-date.

URI Parameters
HideShow
tld
string (required) Example: .nl

Top Level Domain.

Response Attributes
tld
Tld

Hide child attributesShow child attributes
name
string

The name of this TLD, including the starting dot. E.g. .nl or .com.

price
number

Price of the TLD in Euros

recurringPrice
number

Price for renewing the TLD in Euros

capabilities
Array (string)

A list of the capabilities that this Tld has (the things that can be done with a domain under this tld). Possible capabilities are: ‘requiresAuthCode’, ‘canRegister’, ‘canTransferWithOwnerChange’, ‘canTransferWithoutOwnerChange’, ‘canSetLock’, ‘canSetOwner’, ‘canSetContacts’, ‘canSetNameservers’, ‘supportsDnsSec’

minLength
number

The minimum amount of characters need for registering a domain under this TLD.

maxLength
number

The maximum amount of characters need for registering a domain under this TLD.

registrationPeriodLength
number

Length in months of each registration or renewal period.

cancelTimeFrame
number

Number of days a domain needs to be canceled before the renewal date.

/ VPS

VPS

The API endpoint for TransIP VPS services allows you to manage all VPS services in your TransIP account.

GET /vps
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "vpss": [
    {
      "name": "example-vps",
      "description": "example VPS",
      "productName": "vps-bladevps-x1",
      "operatingSystem": "ubuntu-16.04",
      "diskSize": 157286400,
      "memorySize": 4194304,
      "cpus": 2,
      "status": "running",
      "ipAddress": "37.97.254.6",
      "macAddress": "52:54:00:3b:52:65",
      "currentSnapshots": 1,
      "maxSnapshots": 10,
      "isLocked": false,
      "isBlocked": false,
      "isCustomerLocked": false,
      "availabilityZone": "ams0",
      "tags": [
        "customTag",
        "anotherTag"
      ]
    }
  ]
}

List all VPSs

GET/vps

Returns a list of all VPSs in the TransIP account with associated metadata. From this output, you are able to extract certain details to use for other API calls.

By looping through the entire output and splitting the array, you can gather information about a specific VPS. * However, we do not recommend getting the entire amount of VPSs this in case you already know the VPS name - you can get the same array without the need to loop through all VPSs, use the vps-get method for this.

This method supports pagination, using this methods you can limit the amount of VPSs returned by the api, which might be usefull if you expect a lot of response objects and you want to spread that over multiple requests. See the documentation on pages for more information on how to use this functionality.

Response Attributes
vpss
Array (Vps)

Hide child attributesShow child attributes
name
string

The unique VPS name

description
string,null

The name that can be set by customer

productName
string

The product name

operatingSystem
string,null

The VPS OperatingSystem

diskSize
number

The VPS disk size in KB

memorySize
number

The VPS memory size in KB

cpus
number

The VPS cpu count

status
string

The VPS status, either ‘created’, ‘installing’, ‘running’, ‘stopped’ or ‘paused’

ipAddress
string

The VPS main ipAddress

macAddress
string

The VPS MacAddress

currentSnapshots
number

The amount of snapshots that is used on this VPS.

maxSnapshots
number

The maximum amount of snapshots for this VPS.

isLocked
boolean

a VPS is locked when another process is already doing stuff with this VPS

isBlocked
boolean

If the VPS is administratively blocked

isCustomerLocked
boolean

If this VPS is customer locked

availabilityZone
string

the name of the availability zone the VPS is in.

tags
Array (string)

The custom tags added to this VPS

GET /vps/example-vps
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404
Response headers
Content-Type: application/json
Response body
{
  "vps": {
    "name": "example-vps",
    "description": "example VPS",
    "productName": "vps-bladevps-x1",
    "operatingSystem": "ubuntu-16.04",
    "diskSize": 157286400,
    "memorySize": 4194304,
    "cpus": 2,
    "status": "running",
    "ipAddress": "37.97.254.6",
    "macAddress": "52:54:00:3b:52:65",
    "currentSnapshots": 1,
    "maxSnapshots": 10,
    "isLocked": false,
    "isBlocked": false,
    "isCustomerLocked": false,
    "availabilityZone": "ams0",
    "tags": [
      "customTag",
      "anotherTag"
    ]
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}

Get VPS by name

GET/vps/{vpsName}

Gather information by the VPS name. General details and specifications of the VPS will be returned.

Note: for vpsName, use the original deployment name (format: username-vpsXX). If you’ve renamed the VPS manually via the control panel, this is classified as the ‘description’ rather than the name. API call lookups using the customized description will fail.

The vpsName can be found in the deployment email as well as in the returned details from a VPS order through the API. This can also be found in the TransIP control panel if needed.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
vps
Vps

Hide child attributesShow child attributes
name
string

The unique VPS name

description
string,null

The name that can be set by customer

productName
string

The product name

operatingSystem
string,null

The VPS OperatingSystem

diskSize
number

The VPS disk size in KB

memorySize
number

The VPS memory size in KB

cpus
number

The VPS cpu count

status
string

The VPS status, either ‘created’, ‘installing’, ‘running’, ‘stopped’ or ‘paused’

ipAddress
string

The VPS main ipAddress

macAddress
string

The VPS MacAddress

currentSnapshots
number

The amount of snapshots that is used on this VPS.

maxSnapshots
number

The maximum amount of snapshots for this VPS.

isLocked
boolean

a VPS is locked when another process is already doing stuff with this VPS

isBlocked
boolean

If the VPS is administratively blocked

isCustomerLocked
boolean

If this VPS is customer locked

availabilityZone
string

the name of the availability zone the VPS is in.

tags
Array (string)

The custom tags added to this VPS

POST /vps
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"productName": "vps-bladevps-x8",
"operatingSystem": "ubuntu-18.04",
"availabilityZone": "ams0",
"addons": [
"vpsAddon-1-extra-cpu-core"
],
"hostname": "``",
"description": "example vps description"
}
' \
"https://api.transip.nl/v6/vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "productName": "vps-bladevps-x8",
  "operatingSystem": "ubuntu-18.04",
  "availabilityZone": "ams0",
  "addons": [
    "vpsAddon-1-extra-cpu-core"
  ],
  "hostname": "``",
  "description": "example vps description"
}
Response201403404404404404404406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "No valid payment information found. Please add your payment information through the Controlpanel on the website."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS product 'vps-bladevps-x1337' is not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS product addon 'vpsAddon-extra-pie' is not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "OperatingSystem with name 'windows-xp' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The availability zone 'wtf1' is not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The availability zone 'ams0' is not available"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid hostname: 'ex@mple.test.nl'"
}

Order a new VPS

POST/vps

Using this API call, you are able to order a new VPS. After the order process has been completed (payment will occur at a later stage should direct debit be used) the VPS will automatically be provisioned and deployed. Values associated to the newly delivered VPS will be returned in a new call respectively.

  • By specifying optional add-ons in an array (not required) the VPS order is processed with automatic provisioning for resource add-ons (such as IP addresses) as well as hardware add-ons (such as CPU cores, RAM and SSD disk space)

  • To get a list of available add-ons, please use the List all VPS products call

  • When a hostname is provided, the first 32 chars of this will be used as the description of the VPS. Hostname will only be validated when ordering a preinstallable web controlpanel like cPanel.

Warning: This API call will create an invoice!

Request Attributes
productName
string, required

Name of the product

operatingSystem
string, required

The name of the operating system to install

availabilityZone
string, optional

The name of the availability zone where the vps should be created

addons
Array (string), optional

Array with additional addons

hostname
string, optional

The name for the host, only needed for installing a preinstallable control panel image. when provided, this will be set as vps description

description
string, optional

The description of the VPS

POST /vps
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"vpss": [
"[productName : vps-bladevps-x8, operatingSystem : ubuntu-18.04]",
"[productName : vps-bladevps-x8, operatingSystem : ubuntu-18.04]"
]
}
' \
"https://api.transip.nl/v6/vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "vpss": [
    "[productName : vps-bladevps-x8, operatingSystem : ubuntu-18.04]",
    "[productName : vps-bladevps-x8, operatingSystem : ubuntu-18.04]"
  ]
}
Response201403404404404404404406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "No valid payment information found. Please add your payment information through the Controlpanel on the website."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS product 'vps-bladevps-x1337' is not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS product addon 'vpsAddon-extra-pie' is not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "OperatingSystem with name 'windows-xp' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The availability zone 'wtf1' is not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The availability zone 'ams0' is not available"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid hostname: 'ex@mple.test.nl'"
}

Order multiple VPSs

POST/vps

When ordering multiple VPSs at once, specify the VPS specs as in the order function but wrapped in an array.

Warning: This API call will create an invoice!

Request Attributes
vpss
Array (string), required

Array with multiple VPS specs

POST /vps
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"vpsName": "example-vps",
"availabilityZone": "ams0"
}
' \
"https://api.transip.nl/v6/vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "vpsName": "example-vps",
  "availabilityZone": "ams0"
}
Response201403403404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "No valid payment information found. Please add your payment information through the Controlpanel on the website."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Administrative error, unable to clone VPS"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Clone a VPS

POST/vps

Use this API call in order to clone an existing VPS. There are a few things to take into account when you want to clone an existing VPS to a new VPS:

  • If the original VPS (which you’re going to clone) is currently locked, the clone will fail;

  • Cloned control panels can be used on the VPS, but as the IP address changes, this does require you to synchronise the new license on the new VPS (licenses are often IP-based);

  • Possibly, your VPS has its network interface(s) configured using (a) static IP(‘s) rather than a dynamic allocation using DHCP. If this is the case, you have to configure the new IP(‘s) on the new VPS. Do note that this is not the case with our pre-installed control panel images;

  • VPS add-ons such as Big Storage aren’t affected by cloning - these will stay attached to the original VPS and can’t be swapped automatically

Warning: As cloning is a paid service, an invoice will be generated

Request Attributes
vpsName
string, required

The vps name of the VPS to clone.

availabilityZone
string, optional

The name of the availability zone where the clone should be created

PUT /vps/example-vps
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"vps": {
"name": "example-vps",
"description": "example VPS",
"productName": "vps-bladevps-x1",
"operatingSystem": "ubuntu-16.04",
"diskSize": 157286400,
"memorySize": 4194304,
"cpus": 2,
"status": "running",
"ipAddress": "37.97.254.6",
"macAddress": "52:54:00:3b:52:65",
"currentSnapshots": 1,
"maxSnapshots": 10,
"isLocked": false,
"isBlocked": false,
"isCustomerLocked": false,
"availabilityZone": "ams0",
"tags": [
"customTag",
"anotherTag"
]
}
}
' \
"https://api.transip.nl/v6/vps/example-vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "vps": {
    "name": "example-vps",
    "description": "example VPS",
    "productName": "vps-bladevps-x1",
    "operatingSystem": "ubuntu-16.04",
    "diskSize": 157286400,
    "memorySize": 4194304,
    "cpus": 2,
    "status": "running",
    "ipAddress": "37.97.254.6",
    "macAddress": "52:54:00:3b:52:65",
    "currentSnapshots": 1,
    "maxSnapshots": 10,
    "isLocked": false,
    "isBlocked": false,
    "isCustomerLocked": false,
    "availabilityZone": "ams0",
    "tags": [
      "customTag",
      "anotherTag"
    ]
  }
}
Response204403404409406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The provided parameter 'verylongdescriptionthatwouldnotfit' can be 32 characters maximum"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}

Update a VPS

PUT/vps/{vpsName}

In this API call you can lock/unlock a VPS, update VPS description, and add/remove tags.

Locking a VPS

Locking a VPS allows prevents accidental execution of possibly fatal API calls and manual actions through the control panel.

For locking the VPS, set isCustomerLocked to true. Set the value to false for unlocking the VPS.

Generally, we recommend setting the VPS lock to true upon deployment, given that your application will unlock the VPS if any actions that are prevented by the lock should be executed.

Change a VPS description

You can change your VPS description by simply changing the description attribute. Note that the identifier key name will not be changed. The description can be maximum 32 character longs

VPS Tags

To add/remove tags, you must update the tags attribute. Every time you make a call with a changed tags attribute, the existing tags are overridden. To keep existing tags while adding new ones, ensure that you also include existing tags in the tags attribute array when you make this API call.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
vps
Vps, required

name
string

The unique VPS name

description
string,null

The name that can be set by customer

productName
string

The product name

operatingSystem
string,null

The VPS OperatingSystem

diskSize
number

The VPS disk size in KB

memorySize
number

The VPS memory size in KB

cpus
number

The VPS cpu count

status
string

The VPS status, either ‘created’, ‘installing’, ‘running’, ‘stopped’ or ‘paused’

ipAddress
string

The VPS main ipAddress

macAddress
string

The VPS MacAddress

currentSnapshots
number

The amount of snapshots that is used on this VPS.

maxSnapshots
number

The maximum amount of snapshots for this VPS.

isLocked
boolean

a VPS is locked when another process is already doing stuff with this VPS

isBlocked
boolean

If the VPS is administratively blocked

isCustomerLocked
boolean

If this VPS is customer locked

availabilityZone
string

the name of the availability zone the VPS is in.

tags
Array (string)

The custom tags added to this VPS

PATCH /vps/example-vps
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "start"
}
' \
"https://api.transip.nl/v6/vps/example-vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "start"
}
Response204403404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Start a VPS

PATCH/vps/{vpsName}

This API call allows you to start a VPS, given that it’s currently in a stopped state. If the VPS is in a power cycle (‘reset’) this API call will fail as the power cycle includes starting the VPS again after it’s in a stopped state.

To start a VPS, send a PATCH request with an action attribute set to start.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
action
string, required

PATCH /vps/example-vps
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "stop"
}
' \
"https://api.transip.nl/v6/vps/example-vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "stop"
}
Response204403404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Stop a VPS

PATCH/vps/{vpsName}

By setting the action attribute to stop, you can put the specified VPS in a stopped state. In case the VPS is in a power cycle (‘reset’) this API call will fail as the power cycle includes automatically stopping the VPS before starting it again.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
action
string, required

PATCH /vps/example-vps
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "reset"
}
' \
"https://api.transip.nl/v6/vps/example-vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "reset"
}
Response204403404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Reset a VPS

PATCH/vps/{vpsName}

This API call will reset the specified VPS. A reset is essentially the stop and start command combined into one

To reset a VPS, send a PATCH request with an action attribute set to reset.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
action
string, required

PATCH /vps/example-vps
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "handover",
"targetCustomerName": "example2"
}
' \
"https://api.transip.nl/v6/vps/example-vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "handover",
  "targetCustomerName": "example2"
}
Response204403404404409409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Target user 'example2' does not exist"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Error Processing Handover, One or more items are already being handovered"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Target user 'example2' is not capable of receiving handover"
}

Handover a VPS

PATCH/vps/{vpsName}

Handover a VPS to another TransIP Account. This call will initiate the handover process. the actual handover will be done when the target customer accepts the handover.

Note: the VPS will be shut down in order to handover.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
action
string, required

targetCustomerName
string, required

DELETE /vps/example-vps
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"endTime": "end"
}
' \
"https://api.transip.nl/v6/vps/example-vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "endTime": "end"
}
Response204403404406409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Product already has cancellation pending"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}

Cancel a VPS

DELETE/vps/{vpsName}

Using the DELETE method on a VPS will cancel the VPS, thus deleting it. this will do a couple of things:

  • Cancel future invoices for the VPS (including add-ons if applicable);

  • Remove the ability to control the VPS or alter it in any way through the control panel

Most importantly, though, this will wipe all data on the VPS and permanently destroy it.

You can set the endTime attribute to ‘end’ or ‘immediately’, this has the following implications:

  • end: The VPS will be terminated (and consequences outlined above will be active) from the end date of the agreement as can be found in the applicable quote. Effectively, executing this API call will not end the VPS directly.

  • immediately: The VPS will be terminated (and consequences outlined above will be active) immediately. Effectively, executing this API call will terminate and wipe the VPS in a matter of seconds.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
endTime
string, optional

Cancellation time, either ‘end’ (default) or ‘immediately’

Usage

This is the API endpoint for VPS usage data.

GET /vps/example-vps/usage
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"types": "cpu,disk,network",
"dateTimeStart": 1500538995,
"dateTimeEnd": 1500542619
}
' \
"https://api.transip.nl/v6/vps/example-vps/usage"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "types": "cpu,disk,network",
  "dateTimeStart": 1500538995,
  "dateTimeEnd": 1500542619
}
Response200403404406406406406406
Response headers
Content-Type: application/json
Response body
{
  "usage": {
    "cpu": [
      {
        "percentage": 3.11,
        "date": 1574783109
      }
    ],
    "disk": [
      {
        "iopsRead": 0.27,
        "iopsWrite": 0.13,
        "date": 1574783109
      }
    ],
    "network": [
      {
        "mbitOut": 100.2,
        "mbitIn": 249.93,
        "date": 1574783109
      }
    ]
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The parameter 'dateTimeStart' is not a number."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The timestamp 'dateTimeEnd' cannot be negative."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The timestamp 'dateTimeEnd' cannot be in the future."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The time period is too large, it should not be bigger than one month."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "These are invalid usage types: invalid, type."
}

Get usage data for a VPS

GET/vps/{vpsName}/usage

Use this API call to retrieve detailed usage data for a specific VPS. Make sure to specify the dateTimeStart and dateTimeEnd parameters in UNIX timestamp format.

Please take the following into account:

  • The dateTimeStart and dateTimeEnd parameters allow for gathering information about a specific time period, when not explicitly specified the output will contain data for the past 24 hours;

  • The difference between dateTimeStart and dateTimeEnd parameters may not exceed one month;

  • This API call returns data regarding cpu, disk and network. However, for traffic-related information and statistics, use the Get traffic information for a VPS API call

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
types
string, optional

The types of statistics that can be returned, cpu, disk and network can be used. By default, all data will be returned.

dateTimeStart
number, optional

The start date of the usage statistics

dateTimeEnd
number, optional

The end date of the usage statistics

Response Attributes
usage
Usage

Hide child attributesShow child attributes
cpu
Array (VpsUsageDataCpu)

percentage
number

The percentage of CPU usage for this entry

date
number

Date of the entry, by default in UNIX timestamp format

disk
Array (VpsUsageDataDisk)

iopsRead
number

The read IOPS for this entry

iopsWrite
number

The write IOPS for this entry

date
number

Date of the entry, by default in UNIX timestamp format

network
Array (VpsUsageDataNetwork)

mbitOut
number

The amount of outbound traffic in Mbps for this usage entry

mbitIn
number

The amount of inbound traffic in Mbps for this usage entry

date
number

Date of the entry, by default in UNIX timestamp format

VPS VNC Data

This is the API endpoint for VPS VNC data

GET /vps/example-vps/vnc-data
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/vnc-data"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404409
Response headers
Content-Type: application/json
Response body
{
  "vncData": {
    "host": "vncproxy.transip.nl",
    "path": "websockify?token=esco024gzqwyeeb5nexayi2gve09paw9dytumyxqzurxj5t642o5p6myzisn5gch",
    "url": "https://vncproxy.transip.nl/websockify?token=esco024gzqwyeeb5nexayi2gve09paw9dytumyxqzurxj5t642o5p6myzisn5gch",
    "token": "esco024gzqwyeeb5nexayi2gve09paw9dytumyxqzurxj5t642o5p6myzisn5gch",
    "password": "fVpTyDrhMiuYBXxn"
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS console for 'example-vps' is currently unavailable"
}

Get VNC data for a VPS

GET/vps/{vpsName}/vnc-data

Get the location, token and password in order to connect directly to the VNC console of your VPS.

Please note, you cannot directly connect to the proxy using a VNC client, use a client that supports websockets like https://github.com/novnc/noVNC

Use the information as URL query parameters, or use the URL in the url parameter directly. Then enter the password. See the link below for an example of how to provide URL query parameters to a hosted novnc instance.

By default novnc understands the following url parameters:

  • host the host hosting the vnc proxy, this should be vncproxy.transip.nl

  • path the path to request on the host, websockify?token=YOURTOKEN

  • password the vnc password

  • autoconnect whether or not to start connecting once you loaded the page

An example of all parameters together in one url would be https://novnc.com/noVNC/vnc.html?host=vncproxy.transip.nl&path=websockify?token=esco024gzqwyeeb5nexayi2gve09paw9dytumyxqzurxj5t642o5p6myzisn5gch&password=fVpTyDrhMiuYBXxn&autoconnect=true

Warning: We do recommend running novnc locally or hosting your own novnc page, this way you can make sure your token and password remain private.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
vncData
VpsVncData

Hide child attributesShow child attributes
host
string

Location of the VNC Proxy

path
string

WS path including the token

url
string

Complete WS URL

token
string

Token to identify the VPS to connect to (changes dynamically)

password
string

Password to setup up the VNC connection (changes dynamically)

PATCH /vps/example-vps/vnc-data
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/vnc-data"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204403404409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS console for 'example-vps' is currently unavailable"
}

Regenerate VNC token for a vps

PATCH/vps/{vpsName}/vnc-data

Call this method to force regenerate the VNC credentials for a VPS

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Addons

This is the API endpoint for VPS addons services.

GET /vps/example-vps/addons
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/addons"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "active": [
    {
      "name": "exampleProduct-name",
      "description": "This is an example product",
      "price": 4.99,
      "recurringPrice": 7.99
    }
  ],
  "cancellable": [
    {
      "name": "exampleProduct-name",
      "description": "This is an example product",
      "price": 4.99,
      "recurringPrice": 7.99
    }
  ],
  "available": [
    {
      "name": "exampleProduct-name",
      "description": "This is an example product",
      "price": 4.99,
      "recurringPrice": 7.99
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}

List addons for a VPS

GET/vps/{vpsName}/addons

List active, cancellable and available addons for a VPS.

Using the GET method on this API call will return all active, cancelable and available add-ons for the given VPS.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
active
Array (Product)

Hide child attributesShow child attributes
name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

cancellable
Array (Product)

Hide child attributesShow child attributes
name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

available
Array (Product)

Hide child attributesShow child attributes
name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

POST /vps/example-vps/addons
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"addons": [
"vpsAddon-1-extra-ip-address"
]
}
' \
"https://api.transip.nl/v6/vps/example-vps/addons"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "addons": [
    "vpsAddon-1-extra-ip-address"
  ]
}
Response201403404404409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS product addon 'example-addon' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Order addons for a VPS

POST/vps/{vpsName}/addons

In order to extend a specific VPS with add-ons, use this API call. Add-ons are added and removed dynamically, so changes are instant.

The type of add-ons that can be ordered range from extra IP addresses to hardware add-ons such as an extra core or additional SSD disk space.

In order to automatically extend a new VPS with add-ons, you don’t need to use this API call. Using an array, you are able to add these instantly without the need for a second call.

Warning: This API call will create a new invoice for the specified add-on(s)

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
addons
Array (string), required

Addons to be added.

DELETE /vps/example-vps/addons/vpsAddon-1-extra-ip-address
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/addons/vpsAddon-1-extra-ip-address"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204403403404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "The addon 'vpsAddon-100-gb-extra-harddisk' is not cancellable."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Product already has cancellation pending"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Cancel an addon for a VPS

DELETE/vps/{vpsName}/addons/{addonName}

By using this API call, you can cancel an add-on based on its name, specifying the VPS name as well. This will instantly cancel the given add-on. Add-ons can only be cancelled immediately as most of them require a restart of the VPS. Due to technical restrictions (possible dataloss) storage add-ons cannot be cancelled.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

addonName
string (required) Example: vpsAddon-1-extra-ip-address

Addon name

Upgrades

This is the API endpoint for VPS upgrades services.

GET /vps/example-vps/upgrades
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/upgrades"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404409409
Response headers
Content-Type: application/json
Response body
{
  "upgrades": [
    {
      "name": "exampleProduct-name",
      "description": "This is an example product",
      "price": 4.99,
      "recurringPrice": 7.99
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

List available upgrades for a VPS

GET/vps/{vpsName}/upgrades

List all available upgrades for a VPS depending on its plan.

Upgrades are separate from add-ons. Whereas upgrades are specifically meant for upgrading VPS specifications (in terms of RAM and disk space), add-ons differ mainly from upgrades by extending the functionality of the VPS itself rather than solely specifications.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
upgrades
Array (Product)

Hide child attributesShow child attributes
name
string

Name of the product

description
string

Describes this product

price
number

Price in euros.

recurringPrice
number

The recurring price for the product in euros.

POST /vps/example-vps/upgrades
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"productName": "vps-bladevps-pro-x16"
}
' \
"https://api.transip.nl/v6/vps/example-vps/upgrades"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "productName": "vps-bladevps-pro-x16"
}
Response201403403404404409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Downgrades are not supported."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Upgrade with id 'vps-bladevps-pro-x9' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Upgrade a VPS

POST/vps/{vpsName}/upgrades

Upgrading a VPS by specifying the upgrade name is done using this API call.

It’s not possible to downgrade a VPS, as most upgrades cannot be deallocated due to technical reasons (data loss when shrinking the disk space).

Warning: This API call will create an invoice for the upgrade(s).

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
productName
string, required

OperatingSystems

This is the API endpoint for VPS operating systems services.

GET /vps/example-vps/operating-systems
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/operating-systems"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "operatingSystems": [
    {
      "name": "ubuntu-16.04",
      "description": "Ubuntu",
      "isPreinstallableImage": false,
      "version": "16.04 LTS",
      "price": 1
    }
  ]
}

List installable operating systems for a VPS

GET/vps/{vpsName}/operating-systems

TransIP offers a number of images ready to be installed on any BladeVPS. Using this API call, you can get a list of operating systems available. This includes both pre-made images (mainly control panels such as DirectAdmin, cPanel or Plesk) and ‘blank’ operating systems are listed.

Furthermore, commercial operating systems (such as Windows Server editions) and operating systems containing a pre-installed control panel are listed. These operating systems contain the ‘price’ attribute, showing the price per month charged on top of the VPS itself.

Aside from dynamically listing the available operating systems, a list with operating systems can also be found on the TransIP website: https://www.transip.nl/vps/

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
operatingSystems
Array (OperatingSystem)

Hide child attributesShow child attributes
name
string

The operating system name

description
string,null

Description

isPreinstallableImage
boolean

Is a preinstallable image

version
string

The version of the operating system

price
number

The monthly price of the operating system

POST /vps/example-vps/operating-systems
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"operatingSystemName": "ubuntu-18.04",
"hostname": "",
"base64InstallText": ""
}
' \
"https://api.transip.nl/v6/vps/example-vps/operating-systems"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "operatingSystemName": "ubuntu-18.04",
  "hostname": "",
  "base64InstallText": ""
}
Response201403404404406406406409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The OperatingSystem 'ubuntu-15.04' does not exist"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid hostname: 'ex@mple.test.nl'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "InstallText not base64 encoded"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Cannot install preinstallable image unattended"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Install operating system on a VPS

POST/vps/{vpsName}/operating-systems

After gathering a list of available operating systems, you can install blank operating systems as well as images with control panels.

A relatively important aspect regarding this feature is the ability to specify how the installation should be unattended, allowing for automatic deployment of operating systems that should be manually configured by default.

Warning: This API call could potentially create an invoice in case an operating system is charged for (this wil be shown in the price attribute). In case this value is blank or 0.00, no invoice will be generated. Please make sure to examine the operating system price before installing.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
operatingSystemName
string, required

The name of the operating system

hostname
string, optional

Hostname is required for preinstallable web controlpanels

base64InstallText
string, optional

Base64 encoded preseed / kickstart instructions, when installing unattended

IP Addresses

This is the API endpoint for VPS Ips services. To add and IP address, use the addons endpoint.

GET /vps/example-vps/ip-addresses
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/ip-addresses"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404
Response headers
Content-Type: application/json
Response body
{
  "ipAddresses": [
    {
      "address": "37.97.254.6",
      "subnetMask": "255.255.255.0",
      "gateway": "37.97.254.1",
      "dnsResolvers": [
        "195.8.195.8",
        "195.135.195.135"
      ],
      "reverseDns": "example.com"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}

List IP addresses for a VPS

GET/vps/{vpsName}/ip-addresses

This API call will return all IPv4 and IPv6 addresses attached to the VPS. Relevant network information, such as the gateway and subnet mask is returned per IP address as well.

TransIP VPSes are deployed with a IPv6 range by default, this API call might not return any IPv6 addresses. You will have to add IPv6 addresses in the allocated range manually or using the API first in order for them to be returned.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
ipAddresses
Array (IpAddress)

Hide child attributesShow child attributes
address
string

The IP address

subnetMask
string

Subnet mask

gateway
string

Gateway

dnsResolvers
Array (string)

The DNS resolvers

reverseDns
string

Reverse DNS

GET /vps/example-vps/ip-addresses/37.97.254.6
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/ip-addresses/37.97.254.6"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404404
Response headers
Content-Type: application/json
Response body
{
  "ipAddress": {
    "address": "37.97.254.6",
    "subnetMask": "255.255.255.0",
    "gateway": "37.97.254.1",
    "dnsResolvers": [
      "195.8.195.8",
      "195.135.195.135"
    ],
    "reverseDns": "example.com"
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '8.8.8.8' is not found on VPS 'example-vps'"
}

Get IP address info by address

GET/vps/{vpsName}/ip-addresses/{ipAddress}

Only return network information for the specified IP address.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

ipAddress
string (required) Example: 37.97.254.6

The IP address of the VPS

Response Attributes
ipAddress
IpAddress

Hide child attributesShow child attributes
address
string

The IP address

subnetMask
string

Subnet mask

gateway
string

Gateway

dnsResolvers
Array (string)

The DNS resolvers

reverseDns
string

Reverse DNS

POST /vps/example-vps/ip-addresses
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"ipAddress": "2a01:7c8:3:1337::6"
}
' \
"https://api.transip.nl/v6/vps/example-vps/ip-addresses"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "ipAddress": "2a01:7c8:3:1337::6"
}
Response201403404406406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address 'fe80::200:f8ff:fe21:67cfaa' is not valid"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '2a01:7c8:3:1337::6' is not in the VPS ipv6 Range"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '2a01:7c8:3:1337::6' already exists"
}

Add IPv6 address to a VPS

POST/vps/{vpsName}/ip-addresses

TransIP VPSes are deployed with an /64 IPv6 range. in order to set ReverseDNS for specific ipv6 addresses, you will have to add the IPv6 address via this command.

After adding an IPv6 address, you can set the reverse DNS for this address using the Update Reverse DNS API call

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
ipAddress
string, required

PUT /vps/example-vps/ip-addresses/37.97.254.6
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"ipAddress": {
"address": "37.97.254.6",
"subnetMask": "255.255.255.0",
"gateway": "37.97.254.1",
"dnsResolvers": [
"195.8.195.8",
"195.135.195.135"
],
"reverseDns": "example.com"
}
}
' \
"https://api.transip.nl/v6/vps/example-vps/ip-addresses/37.97.254.6"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "ipAddress": {
    "address": "37.97.254.6",
    "subnetMask": "255.255.255.0",
    "gateway": "37.97.254.1",
    "dnsResolvers": [
      "195.8.195.8",
      "195.135.195.135"
    ],
    "reverseDns": "example.com"
  }
}
Response204403404404406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '8.8.8.8' is not found on VPS 'example-vps'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid hostname: 'test&@*#'"
}

Update reverse DNS for a VPS

PUT/vps/{vpsName}/ip-addresses/{ipAddress}

Reverse DNS for IPv4 addresses as well as IPv6 addresses can be updated using this API call. This API call functions if the reverse DNS is not yet configured as well, effectively allowing you to set new reverse DNS for every IP address listed.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

ipAddress
string (required) Example: 37.97.254.6

The IP address of the VPS

Request Attributes
ipAddress
IpAddress, required

address
string

The IP address

subnetMask
string

Subnet mask

gateway
string

Gateway

dnsResolvers
Array (string)

The DNS resolvers

reverseDns
string

Reverse DNS

DELETE /vps/example-vps/ip-addresses/37.97.254.6
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/ip-addresses/37.97.254.6"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204403404404
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '8.8.8.8' is not found on VPS 'example-vps'"
}

Remove IPv6 address from a VPS

DELETE/vps/{vpsName}/ip-addresses/{ipAddress}

When an IPv6 address (inside the /64 block that’s allocated to every BladeVPS) has manually been added to the usable IP’s, there is a possibility you may not need a specific IPv6 address anymore.

Note that deleting an IP address will also wipe its reverse DNS information, and re-adding the IP address will not retain nor automatically reset the previously configured PTR record. Instead, you will need to reconfigure the reverse DNS manually before it will function.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

ipAddress
string (required) Example: 37.97.254.6

The IP address of the VPS

Snapshots

This is the API endpoint for VPS snapshots services.

GET /vps/example-vps/snapshots
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/snapshots"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "snapshots": [
    {
      "name": "1572607577",
      "description": "before upgrade",
      "diskSize": 314572800,
      "status": "creating",
      "dateTimeCreate": "2019-07-14 12:21:11",
      "operatingSystem": "ubuntu-18.04"
    }
  ]
}

List snapshots for a VPS

GET/vps/{vpsName}/snapshots

Snapshots are taken of your main VPS disk that can be restored at a later date.

Snapshots status can have the following values: active creating reverting deleting pendingDeletion syncing moving when status is active you can perform actions on it.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
snapshots
Array (Snapshot)

Hide child attributesShow child attributes
name
string

The snapshot name

description
string

The snapshot description

diskSize
number

The size of the snapshot in KB

status
string

The snapshot status (‘active’, ‘creating’, ‘reverting’, ‘deleting’, ‘pendingDeletion’, ‘syncing’, ‘moving’)

dateTimeCreate
string

The snapshot creation date

operatingSystem
string

The Snapshot OperatingSystem

GET /vps/example-vps/snapshots/1500027671
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/snapshots/1500027671"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "snapshot": {
    "name": "1572607577",
    "description": "before upgrade",
    "diskSize": 314572800,
    "status": "creating",
    "dateTimeCreate": "2019-07-14 12:21:11",
    "operatingSystem": "ubuntu-18.04"
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Snapshot with name '1500027671' not found"
}

Get snapshot by name

GET/vps/{vpsName}/snapshots/{snapshotName}

Specifying the snapshot ID and the VPS name it’s associated with, allows for insight in snapshot details. Should the snapshot description have been set, this allows for distinguishing one snapshot from another. This comes in handy especially when one specific VPS has multiple snapshots assigned.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

snapshotName
string (required) Example: 1500027671

Name of the snapshot

Response Attributes
snapshot
Snapshot

Hide child attributesShow child attributes
name
string

The snapshot name

description
string

The snapshot description

diskSize
number

The size of the snapshot in KB

status
string

The snapshot status (‘active’, ‘creating’, ‘reverting’, ‘deleting’, ‘pendingDeletion’, ‘syncing’, ‘moving’)

dateTimeCreate
string

The snapshot creation date

operatingSystem
string

The Snapshot OperatingSystem

POST /vps/example-vps/snapshots
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"description": "BeforeItsAllBroken",
"shouldStartVps": true
}
' \
"https://api.transip.nl/v6/vps/example-vps/snapshots"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "description": "BeforeItsAllBroken",
  "shouldStartVps": true
}
Response201403403404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Snapshot limit reached"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Create snapshot of a VPS

POST/vps/{vpsName}/snapshots

With this API call you can create a snapshot for the VPS.

Please take the following into account when executing this:

  • In case the creation of this snapshot leads to exceeding the maximum allowed snapshots, the API call will return an error and the snapshot will not be created - please order extra snapshots for this;

  • We strongly recommend shutting the VPS down before taking a snapshot in order to prevent data loss, etc;

  • Creating a snapshot allows for restoring it on another VPS using the Revert snapshot to a VPS given that its specifications equals or exceeds those of the VPS that is taken a snapshot of;

  • Specify whether the VPS should be started immediately after the snapshot was created, default is true. The VPS will be locked for a few minutes after the snapshot is created. which prevents you from starting the VPS yourself.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
description
string, required

shouldStartVps
boolean, optional

PATCH /vps/example-vps/snapshots/1500027671
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"destinationVpsName": "example-vps"
}
' \
"https://api.transip.nl/v6/vps/example-vps/snapshots/1500027671"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "destinationVpsName": "example-vps"
}
Response204403404406409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Snapshot '1500027671' diskSize '157286400' is bigger than destination diskSize '52428800'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The Snapshot '1500027671' is already locked to another action"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Revert snapshot to a VPS

PATCH/vps/{vpsName}/snapshots/{snapshotName}

When restoring a snapshot, this can be done either on the VPS the snapshot originates from or onto another VPS. Specifying the destinationVpsName attribute makes sure the snapshot is restored onto another VPS.

Please take the following into account when restoring a snapshot onto another VPS:

  • Restoring a snapshot onto another VPS will wipe all its data, so use this with care;

  • Networking may be configured statically on the original VPS, therefore breaking connectivity when restored onto another VPS with a new assigned IP. You should be able to alter this through the KVM console in the TransIP control panel in case SSH is unavailable

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

snapshotName
string (required) Example: 1500027671

Name of the snapshot

Request Attributes
destinationVpsName
string, optional

When set, reverts the snapshot to this VPS.

DELETE /vps/example-vps/snapshots/1500027671
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/snapshots/1500027671"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204403404409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The Snapshot '1500027671' is already locked to another action."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Delete snapshot

DELETE/vps/{vpsName}/snapshots/{snapshotName}

Delete a VPS snapshot using this API call. The API call listing all snapshots won’t show this snapshot anymore, as TransIP does not keep an archive or history of deleted snapshots. Furthermore, deleting this snapshot will wipe it permanently and there’s no way to get it back, so please use this with care. It cannot be restored on a VPS after deleting it.

In case this snapshot has already been restored onto a VPS, deleting the snapshot will do no harm as the data is already on the VPS and will free space for new snapshots.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

snapshotName
string (required) Example: 1500027671

Name of the snapshot

VPS Backups

This is the API endpoint for VPS backups services.

GET /vps/example-vps/backups
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/backups"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "backups": [
    {
      "id": 712332,
      "status": "active",
      "dateTimeCreate": "2017-05-29 22:11:20",
      "diskSize": 157286400,
      "operatingSystem": "Ubuntu 19.10",
      "availabilityZone": "ams0"
    }
  ]
}

List backups for a VPS

GET/vps/{vpsName}/backups

TransIP offers multiple back-up types, every VPS has 4 hourly back-ups by default, weekly back-ups are available for a small fee. This API call returns back-ups for both types.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
backups
Array (VpsBackup)

Hide child attributesShow child attributes
id
number

The backup id

status
string

Status of the backup (‘active’, ‘creating’, ‘reverting’, ‘deleting’, ‘pendingDeletion’, ‘syncing’, ‘moving’)

dateTimeCreate
string

The backup creation date

diskSize
number

The backup disk size in KB

operatingSystem
string

The backup operatingSystem

availabilityZone
string

The name of the availability zone the backup is in

PATCH /vps/example-vps/backups/712332
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "revert"
}
' \
"https://api.transip.nl/v6/vps/example-vps/backups/712332"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "revert"
}
Response204403404404409409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Backup with id '1234' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The Backup '34026' is already locked to another action"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on Backup '123' are temporary disabled"
}

Revert backup to a VPS

PATCH/vps/{vpsName}/backups/{backupId}

Reverting a VPS back-up will restore the VPS to an earlier state. Use this API call with care, as data created after the back-up creation date can be wiped when a back-up is restored.

Both the VPS name (that the back-up belongs to) and the back-up ID are required. Please use the List backups for a VPS call in order to get the ID, as you can extract the back-up ID from its output.

To revert a backup to a VPS, send a PATCH request with an action attribute set to revert.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

backupId
number (required) Example: 712332

Id of the backup

Request Attributes
action
string, required

PATCH /vps/example-vps/backups/712332
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "convert",
"description": "BeforeItsAllBroken"
}
' \
"https://api.transip.nl/v6/vps/example-vps/backups/712332"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "convert",
  "description": "BeforeItsAllBroken"
}
Response204403403404404409409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Snapshot limit reached"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Backup with id '1234' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The Backup '34026' is already locked to another action"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on Backup '123' are temporary disabled"
}

Convert backup to snapshot

PATCH/vps/{vpsName}/backups/{backupId}

With this API call you can convert a backup to a snapshot for the VPS.

Please take the following into account when executing this:

  • In case the creation of this snapshot leads to exceeding the maximum allowed snapshots, the API call will return an error and the snapshot will not be created - please order extra snapshots for this.

  • Creating a snapshot allows for restoring it on another VPS using the Revert snapshot to a VPS given that its specifications equal or exceed those of the VPS that is taken a snapshot of

Setting a description for a snapshot is highly recommended in case you have multiple snapshots for one VPS. Descriptions allow you to distinguish snapshots and prevent mistakes in restoring them.

To convert a backup to a VPS snapshot, send a PATCH request with an action attribute set to convert.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

backupId
number (required) Example: 712332

Id of the backup

Request Attributes
action
string, required

description
string, optional

VPS Firewall

This is the API endpoint for VPS firewall

GET /vps/example-vps/firewall
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/vps/example-vps/firewall"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "vpsFirewall": {
    "isEnabled": true,
    "ruleSet": [
      {
        "description": "HTTP",
        "startPort": 80,
        "endPort": 80,
        "protocol": "tcp",
        "whitelist": [
          "80.69.69.80/32",
          "80.69.69.100/32",
          "2a01:7c8:3:1337::1/128"
        ]
      }
    ]
  }
}

List firewall for a VPS

GET/vps/{vpsName}/firewall

The VPS Firewall works as a whitelist stateful firewall for incoming traffic. Enable the Firewall to block everything, add rules to exclude certain traffic from being blocked.

To further filter traffic, IP’s can be whitelisted per rule. when no whitelist has been given for a specific rule, all traffic is allowed to this port.

e.g. only allow SSH (port 22) traffic from your home IP address, but allow all traffic to port 80 and 443.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
vpsFirewall
VpsFirewall

Hide child attributesShow child attributes
isEnabled
boolean

Whether the firewall is enabled for this VPS

ruleSet
Array (VpsFirewallRule)

Ruleset of the VPS

description
string

The rule name

startPort
number

The start port of this firewall rule

endPort
number

The end port of this firewall rule

protocol
string

The protocol tcp , udp or tcp_udp

whitelist
Array (string)

Whitelisted IP’s or ranges that are allowed to connect, empty to allow all

PUT /vps/example-vps/firewall
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"vpsFirewall": {
"isEnabled": true,
"ruleSet": [
{
"description": "HTTP",
"startPort": 80,
"endPort": 80,
"protocol": "tcp",
"whitelist": [
"80.69.69.80/32",
"80.69.69.100/32",
"2a01:7c8:3:1337::1/128"
]
}
]
}
}
' \
"https://api.transip.nl/v6/vps/example-vps/firewall"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "vpsFirewall": {
    "isEnabled": true,
    "ruleSet": [
      {
        "description": "HTTP",
        "startPort": 80,
        "endPort": 80,
        "protocol": "tcp",
        "whitelist": [
          "80.69.69.80/32",
          "80.69.69.100/32",
          "2a01:7c8:3:1337::1/128"
        ]
      }
    ]
  }
}
Response204403404406406406406406406406406406409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP range 'fe80::200:f8ff:fe21:67cfaa/200' is not valid"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Firewall 'example' has startPort '13371337' which should be larger than '0' and smaller than '65535'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Firewall 'example' has endPort '13371337' which should be larger than '0' and smaller than '65535'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Firewall 'example' has endPort '80' should be larger or equal than startPort '443'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Invalid whitelist entry provided '256.0.1.1'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Whitelisted entry count '21' exceeded maximum of '20''"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Rule 'HTTP' is already covered by 'HTTP-HTTPS'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Rulecount '51' exceeded maximum of '50'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The provided parameter 'protocol' can only be one of the following value's 'tcp,udp,tdp_udp'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Port '25' is blocked administratively"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}

Update firewall for a VPS

PUT/vps/{vpsName}/firewall

Update the ruleset for a VPS. This will override all current rules set for this VPS.

The VPS Firewall works as a whitelist. when no entries are given, but the firewall is enabled. all new incoming traffic will be blocked. IP’s or IP Ranges (v4/v6) can be whitelisted per rule. When no whitelist has been given for a specific rule, all incoming traffic is allowed to this port.

Protocol parameter can either be tcp, udp or tcp_udp. There is a maximum of 50 rules with each a maximum of 20 whitelist entries.

Any change to te firewall will temporary lock the VPS while the new rules are being applied.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Request Attributes
vpsFirewall
VpsFirewall, required

isEnabled
boolean

Whether the firewall is enabled for this VPS

ruleSet
Array (VpsFirewallRule)

Ruleset of the VPS

description
string

The rule name

startPort
number

The start port of this firewall rule

endPort
number

The end port of this firewall rule

protocol
string

The protocol tcp , udp or tcp_udp

whitelist
Array (string)

Whitelisted IP’s or ranges that are allowed to connect, empty to allow all

Traffic

GET /traffic
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/traffic"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "trafficInformation": {
    "startDate": "2017-06-22",
    "endDate": "2017-07-22",
    "usedInBytes": 7860253754,
    "usedTotalBytes": 11935325369,
    "maxInBytes": 1073741824000
  }
}

Get traffic pool information

GET/traffic

All the traffic of your VPSes combined, overusage will also be billed based on this information

Response Attributes
trafficInformation
VpsTrafficInformation

Hide child attributesShow child attributes
startDate
string

The start date in ‘Y-m-d’ format

endDate
string

The end date in ‘Y-m-d’ format

usedInBytes
number

The usage in bytes for this period

usedTotalBytes
number

The usage in bytes

maxInBytes
number

The maximum amount of bytes that can be used in this period

GET /traffic/example-vps
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/traffic/example-vps"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "trafficInformation": {
    "startDate": "2017-06-22",
    "endDate": "2017-07-22",
    "usedInBytes": 7860253754,
    "usedTotalBytes": 11935325369,
    "maxInBytes": 1073741824000
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}

Get traffic information for a VPS

GET/traffic/{vpsName}

Traffic information for a specific VPS can be retrieved using this API call. Statistics such as consumed bandwidth and network usage statistics are classified as traffic information.

This API call does not return any graphs as seen in the TransIP control panel, but returns raw data that you’re free to extract to apply to your own graph(s) if needed.

URI Parameters
HideShow
vpsName
string (required) Example: example-vps

VPS name

Response Attributes
trafficInformation
VpsTrafficInformation

Hide child attributesShow child attributes
startDate
string

The start date in ‘Y-m-d’ format

endDate
string

The end date in ‘Y-m-d’ format

usedInBytes
number

The usage in bytes for this period

usedTotalBytes
number

The usage in bytes

maxInBytes
number

The maximum amount of bytes that can be used in this period

Private Networks

Private networks are used for internal communication between VPSes that can be utilized best by non-public facing connectivity, data usage is unlimited and will not be billed

A private network offers the ability to connect your VPSes in a separate layer 2 network. IP address assignments and services like DHCP, DNS and routing are all in your own freedom to choose and set up.

GET /private-networks
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/private-networks"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "privateNetworks": [
    {
      "name": "example-privatenetwork",
      "description": "FilesharingNetwork",
      "isBlocked": false,
      "isLocked": false,
      "vpsNames": [
        "example-vps",
        "example-vps2"
      ]
    }
  ]
}

List all private networks

GET/private-networks

List all private networks in your account.

Should you only want to get the private networks attached to a specific VPS, set the vpsName parameter and only attached private networks will be shown like https://api.transip.nl/v6/private-networks?vpsName=example-vps

If this parameter is not set, all private networks will be listed along with the VPSes it’s attached to.

This method supports pagination, using this methods you can limit the amount of private networks returned by the api, which might be usefull if you expect a lot of response objects and you want to spread that over multiple requests. See the documentation on pages for more information on how to use this functionality.

URI Parameters
HideShow
vpsName
string (optional) Example: /private-networks?vpsName=example-vps

Filter private networks by a given VPS

Response Attributes
privateNetworks
Array (PrivateNetwork)

Hide child attributesShow child attributes
name
string

The unique private network name

description
string

The custom name that can be set by customer

isBlocked
boolean

If the Private Network is administratively blocked

isLocked
boolean

When locked, another process is already doing stuff with this private network

vpsNames
Array (string)

The VPSes in this private network

GET /private-networks/example-privatenetwork
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/private-networks/example-privatenetwork"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404
Response headers
Content-Type: application/json
Response body
{
  "privateNetwork": {
    "name": "example-privatenetwork",
    "description": "FilesharingNetwork",
    "isBlocked": false,
    "isLocked": false,
    "vpsNames": [
      "example-vps",
      "example-vps2"
    ]
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork with name 'example-privatenetwork' not found"
}

Get private network by name

GET/private-networks/{privateNetworkName}

Gather detailed information about a private network. As one of the returned attributes includes an array of the VPSes it’s attached to, you can determine if the private network is already attached to a specific VPS and if not, you can attach it.

URI Parameters
HideShow
privateNetworkName
string (required) Example: example-privatenetwork

Name of the private network

Response Attributes
privateNetwork
PrivateNetwork

Hide child attributesShow child attributes
name
string

The unique private network name

description
string

The custom name that can be set by customer

isBlocked
boolean

If the Private Network is administratively blocked

isLocked
boolean

When locked, another process is already doing stuff with this private network

vpsNames
Array (string)

The VPSes in this private network

POST /private-networks
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"description": ""
}
' \
"https://api.transip.nl/v6/private-networks"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "description": ""
}
Response201
This response has no content.

Order a new private network

POST/private-networks

Order a new private network. After ordering a private network you’re able to attach it to a VPS t o make use of the private network.

Warning: This API call will create an invoice!

Request Attributes
description
string, optional

PUT /private-networks/example-privatenetwork
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"privateNetwork": {
"name": "example-privatenetwork",
"description": "FilesharingNetwork",
"isBlocked": false,
"isLocked": false,
"vpsNames": [
"example-vps",
"example-vps2"
]
}
}
' \
"https://api.transip.nl/v6/private-networks/example-privatenetwork"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "privateNetwork": {
    "name": "example-privatenetwork",
    "description": "FilesharingNetwork",
    "isBlocked": false,
    "isLocked": false,
    "vpsNames": [
      "example-vps",
      "example-vps2"
    ]
  }
}
Response204403404406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork with name 'example-privatenetwork' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The provided parameter 'verylongdescriptionthatwouldnotfit' can be 32 characters maximum"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The PrivateNetwork 'example-privatenetwork' is already locked to another action"
}

Update private network

PUT/private-networks/{privateNetworkName}

This method can also be used to change the description attribute. Note that the identifier key name will not be changed. The description can be maximum 32 character longs

URI Parameters
HideShow
privateNetworkName
string (required) Example: example-privatenetwork

Name of the private network

Request Attributes
privateNetwork
PrivateNetwork, required

name
string

The unique private network name

description
string

The custom name that can be set by customer

isBlocked
boolean

If the Private Network is administratively blocked

isLocked
boolean

When locked, another process is already doing stuff with this private network

vpsNames
Array (string)

The VPSes in this private network

PATCH /private-networks/example-privatenetwork
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "attachvps",
"vpsName": "example-vps"
}
' \
"https://api.transip.nl/v6/private-networks/example-privatenetwork"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "attachvps",
  "vpsName": "example-vps"
}
Response204403403404404409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork with name 'example-privatenetwork' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The PrivateNetwork 'example-privatenetwork' is already locked to another action"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Attach vps to privateNetwork

PATCH/private-networks/{privateNetworkName}

Attach VPSes to the private network one at a time. send a PATCH request with an action attribute set to attachvps.

URI Parameters
HideShow
privateNetworkName
string (required) Example: example-privatenetwork

Name of the private network

Request Attributes
action
string, required

vpsName
string, required

PATCH /private-networks/example-privatenetwork
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "detachvps",
"vpsName": "example-vps"
}
' \
"https://api.transip.nl/v6/private-networks/example-privatenetwork"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "detachvps",
  "vpsName": "example-vps"
}
Response204403403404404409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork with name 'example-privatenetwork' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The PrivateNetwork 'example-privatenetwork' is already locked to another action"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}

Detach vps from privateNetwork

PATCH/private-networks/{privateNetworkName}

Detach VPSes from the private network one at a time. send a PATCH request with an action attribute set to removevps.

URI Parameters
HideShow
privateNetworkName
string (required) Example: example-privatenetwork

Name of the private network

Request Attributes
action
string, required

vpsName
string, required

DELETE /private-networks/example-privatenetwork
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"endTime": "end"
}
' \
"https://api.transip.nl/v6/private-networks/example-privatenetwork"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "endTime": "end"
}
Response204403404406409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork 'example-privatenetwork' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "PrivateNetwork with name 'example-privatenetwork' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Product already has cancellation pending."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The PrivateNetwork 'example-privatenetwork' is already locked to another action"
}

Cancel a private network

DELETE/private-networks/{privateNetworkName}

Cancel a private network.

You can set the endTime attribute to end or immediately, this has the following implications:

  • end: The private network will be terminated (and consequences outlined above will be active) from the end date of the agreement as can be found in the applicable quote.

  • immediately: The private network will be terminated (and consequences outlined above will be active) immediately.

URI Parameters
HideShow
privateNetworkName
string (required) Example: example-privatenetwork

Name of the private network

Request Attributes
endTime
string, optional

Cancellation time, either ‘end’ (default) or ‘immediately’

Big Storages

This is the API endpoint for bigstorage services.

GET /big-storages
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/big-storages"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "bigStorages": [
    {
      "name": "example-bigstorage",
      "description": "Big storage description",
      "diskSize": 2147483648,
      "offsiteBackups": true,
      "vpsName": "example-vps",
      "status": "active",
      "isLocked": false,
      "availabilityZone": "ams0"
    }
  ]
}

List all big storages

GET/big-storages

Returns an array of all Big Storages in the given account

After all Big Storages have been returned as an array, you can extract it and use a specific Big Storage for the other API calls documented below.

Should you only want to get the big storages attached to a specific VPS, set the vpsName parameter and only big storages that are attached to the given vps will be shown like https://api.transip.nl/v6/big-storages?vpsName=example-vps

This method supports pagination, using this methods you can limit the amount of big storages returned by the api, which might be usefull if you expect a lot of response objects and you want to spread that over multiple requests. See the documentation on pages for more information on how to use this functionality.

URI Parameters
HideShow
vpsName
string (optional) Example: /big-storages?vpsName=example-vps

Filters on a given vps name.

Response Attributes
bigStorages
Array (BigStorage)

Hide child attributesShow child attributes
name
string

Name of the big storage

description
string

Name that can be set by customer

diskSize
number

Disk size of the big storage in kilobytes

offsiteBackups
boolean

Whether a bigstorage has backups

vpsName
string

The VPS that the big storage is attached to

status
string

Status of the big storage can be ‘active’, ‘attaching’ or ‘detachting’

isLocked
boolean

Lock status of the big storage, when it is locked, it cannot be attached or detached.

availabilityZone
string

The availability zone the bigstorage is located

GET /big-storages/bigStorageName
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/big-storages/bigStorageName"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "bigStorage": {
    "name": "example-bigstorage",
    "description": "Big storage description",
    "diskSize": 2147483648,
    "offsiteBackups": true,
    "vpsName": "example-vps",
    "status": "active",
    "isLocked": false,
    "availabilityZone": "ams0"
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage with name 'example-bigstorage' not found"
}

Get big storage by name

GET/big-storages/{bigStorageName}

Get information about a specific Big Storage and its current status. If the Big Storage is attached to a VPS, the output will contain the VPS name it’s attached to. If it’s not attached, the status will list this.

URI Parameters
HideShow
bigStorageName
string (required) 

The name of the big storage

Response Attributes
bigStorage
BigStorage

Hide child attributesShow child attributes
name
string

Name of the big storage

description
string

Name that can be set by customer

diskSize
number

Disk size of the big storage in kilobytes

offsiteBackups
boolean

Whether a bigstorage has backups

vpsName
string

The VPS that the big storage is attached to

status
string

Status of the big storage can be ‘active’, ‘attaching’ or ‘detachting’

isLocked
boolean

Lock status of the big storage, when it is locked, it cannot be attached or detached.

availabilityZone
string

The availability zone the bigstorage is located

POST /big-storages
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"size": 8,
"offsiteBackups": true,
"availabilityZone": "ams0",
"vpsName": "example-vps"
}
' \
"https://api.transip.nl/v6/big-storages"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "size": 8,
  "offsiteBackups": true,
  "availabilityZone": "ams0",
  "vpsName": "example-vps"
}
Response201403404404404406406406409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The availability zone 'wtf0' is not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The availability zone 'ams0' is not available"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage size '-1' is invalid"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage size '50' exceeds the maximum amount of 40 TB"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage size '3' should be a multitude of 2"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}

Order a new big storage

POST/big-storages

Use this API call to order a new Big Storage.

The minimum size is 2 TB and storage can be extended with up to maximum of 40 TB. Make sure to use a multitude of 2 TB.

Optionally, to create back-ups of your Big Storage, enable off-site back-ups. We highly recommend activating back-ups.

When a vpsName has been given, the availabilityZone of this VPS will be used. The Bigstorage and VPS have te be in the same availabilityZone in order to attach.

Warning: This API call will create an invoice!

Request Attributes
size
number, required

The size of the big storage in TB’s, use a multitude of 2. The maximum size is 40.

offsiteBackups
boolean, optional

Whether to order offsite backups, default is true.

availabilityZone
string, optional

The name of the availabilityZone where the BigStorage should be created. This parameter can not be used in conjunction with vpsName. If a vpsName is provided as well as an availabilityZone, the zone of the vps is leading.

vpsName
string, optional

The name of the VPS to attach the big storage to

POST /big-storages
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"bigStorageName": "example-bigstorage",
"size": 8,
"offsiteBackups": true
}
' \
"https://api.transip.nl/v6/big-storages"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "bigStorageName": "example-bigstorage",
  "size": 8,
  "offsiteBackups": true
}
Response201404406406406406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage with name 'example-bigstorage' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage size '-1' is invalid"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage size '50' exceeds the maximum amount of 40 TB"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage size '3' should be a multitude of 2"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Upgrade size '2' is smaller than current size '4'"
}

Upgrade big storage

POST/big-storages

Upgrade your current bigstorage expand diskSize or include Backups

The minimum size is 2 TB and storage can be extended with up to maximum of 40 TB. Make sure to use a multitude of 2 TB.

Optionally, to create back-ups of your Big Storage, enable off-site back-ups. We highly recommend activating back-ups.

Warning: This API call will create an invoice!

Request Attributes
bigStorageName
string, optional

The name of the bigstorage to upgrade

size
number, required

The size of the big storage in TB’s, use a multitude of 2. The maximum size is 40.

offsiteBackups
boolean, optional

Whether to order offsite backups, omit this to use current value

PUT /big-storages/bigStorageName
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"bigStorage": {
"name": "example-bigstorage",
"description": "Big storage description",
"diskSize": 2147483648,
"offsiteBackups": true,
"vpsName": "example-vps",
"status": "active",
"isLocked": false,
"availabilityZone": "ams0"
}
}
' \
"https://api.transip.nl/v6/big-storages/bigStorageName"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "bigStorage": {
    "name": "example-bigstorage",
    "description": "Big storage description",
    "diskSize": 2147483648,
    "offsiteBackups": true,
    "vpsName": "example-vps",
    "status": "active",
    "isLocked": false,
    "availabilityZone": "ams0"
  }
}
Response204403404404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage with name 'example-bigstorage' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS with name 'example-vps' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage 'example-bigstorage' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}

Update big storage

PUT/big-storages/{bigStorageName}

This API calls allows for altering a Big Storage in several ways outlined below.

  • Changing the description of a Big Storage;

  • One Big Storages can only be attached to one VPS at a time;

  • One VPS can have a maximum of 10 bigstorages attached;

  • Set the vpsName property to the VPS name to attach to for attaching Big Storage;

  • Set the vpsName property to null to detach the Big Storage from the current service

URI Parameters
HideShow
bigStorageName
string (required) 

The name of the big storage

Request Attributes
bigStorage
BigStorage, required

name
string

Name of the big storage

description
string

Name that can be set by customer

diskSize
number

Disk size of the big storage in kilobytes

offsiteBackups
boolean

Whether a bigstorage has backups

vpsName
string

The VPS that the big storage is attached to

status
string

Status of the big storage can be ‘active’, ‘attaching’ or ‘detachting’

isLocked
boolean

Lock status of the big storage, when it is locked, it cannot be attached or detached.

availabilityZone
string

The availability zone the bigstorage is located

DELETE /big-storages/bigStorageName
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"endTime": "end"
}
' \
"https://api.transip.nl/v6/big-storages/bigStorageName"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "endTime": "end"
}
Response204404406409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage with name 'example-bigstorage' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Product already has cancellation pending"
}

Cancel big storage

DELETE/big-storages/{bigStorageName}

Cancels a big storage for the specified ‘endTime’. You can set the endTime attribute to end or immediately, this has the following implications:

  • end: The Big Storage will be terminated (and consequences outlined above will be active) from the end date of the agreement as can be found in the applicable quote. Effectively, executing this API call will not end the Big Storage directly.

  • immediately: The Big Storage will be terminated (and consequences outlined above will be active) immediately. Effectively, executing this API call will terminate and wipe the Big Storage in a matter of seconds.

Note that canceling a Big Storage will wipe all data stored on it as well as off-site back-ups as well if these are activated.

URI Parameters
HideShow
bigStorageName
string (required) 

The name of the big storage

Request Attributes
endTime
string, optional

Cancellation time, either ‘end’ or ‘immediately’

Big Storage Backups

This is the API endpoint for big storage backups services.

GET /big-storages/bigStorageName/backups
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/big-storages/bigStorageName/backups"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "backups": [
    {
      "id": 1583,
      "status": "active",
      "diskSize": 4294967296,
      "dateTimeCreate": "2019-12-31 09:13:55",
      "availabilityZone": "ams0"
    }
  ]
}

List backups for a big storage

GET/big-storages/{bigStorageName}/backups

Using this API call, you are able to list all back-ups belonging to a specific Big Storage.

URI Parameters
HideShow
bigStorageName
string (required) 

The name of the big storage

Response Attributes
backups
Array (BigStorageBackup)

Hide child attributesShow child attributes
id
number

Id of the big storage

status
string

Status of the big storage backup (‘active’, ‘creating’, ‘reverting’, ‘deleting’, ‘pendingDeletion’, ‘syncing’, ‘moving’)

diskSize
number

The backup disk size in KB

dateTimeCreate
string

Date of the big storage backup

availabilityZone
string

The name of the availability zone the backup is in

PATCH /big-storages/bigStorageName/backups/625584
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"action": "revert"
}
' \
"https://api.transip.nl/v6/big-storages/bigStorageName/backups/625584"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "action": "revert"
}
Response204404404409409409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage with name 'example-bigstorage' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Backup with id '1337' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage 'example-bigstorage' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The Backup '34026' is already locked to another action"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' has an action running, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "VPS 'example-vps' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on VPS 'example-vps' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on Backup '123' are temporary disabled"
}

Revert a big storage back-up

PATCH/big-storages/{bigStorageName}/backups/{backupId}

To revert a back-up from a Big Storage, retrieve the backupId from the Backups resource. Please note this is only possible when any back-ups are created with the off-site back-ups feature, otherwise no back-ups will be made nor listed.

After specifying the ID and executing this API call, the entire Big Storage will be reverted to the specified back-up ID restore point. Therefore, make sure to use this with care.

URI Parameters
HideShow
bigStorageName
string (required) 

The name of the big storage

backupId
number (required) Example: 625584

Id of the backup

Request Attributes
action
string, required

Usage

This is the API endpoint for Big storage usage statistics.

GET /big-storages/bigStorageName/usage
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"dateTimeStart": 1490023668,
"dateTimeEnd": 1490064468
}
' \
"https://api.transip.nl/v6/big-storages/bigStorageName/usage"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "dateTimeStart": 1490023668,
  "dateTimeEnd": 1490064468
}
Response200406406406406406406406
Response headers
Content-Type: application/json
Response body
{
  "usage": [
    {
      "iopsRead": 0.27,
      "iopsWrite": 0.13,
      "date": 1574783109
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The parameter 'dateTimeStart' is not a number."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The timestamp 'dateTimeStart' cannot be negative."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The timestamp 'dateTimeEnd' cannot be in the future."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The time period is too large, it should not be bigger than one month."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The time period is too large, it should not be bigger than one month."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "These are invalid usage types: invalid, type."
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Big storage 'example-bigstorage' is not attached to a VPS"
}

Get big storage usage statistics

GET/big-storages/{bigStorageName}/usage

Get usage statistics for a big storage. You can specify a dateTimeStart and dateTimeEnd parameter in the UNIX timestamp format. When none given, traffic for the past 24 hours are returned. The maximum period is one month.

When the big storage is not attached to a vps, there are no usage statistics available. Therefore, the response returned will be a 406 exception. If the big storage is re-attached to another vps then the old statistics are no longer available.

URI Parameters
HideShow
bigStorageName
string (required) 

The name of the big storage

Request Attributes
dateTimeStart
number, optional

The start date of the usage statistics

dateTimeEnd
number, optional

The end date of the usage statistics

Response Attributes
usage
Array (VpsUsageDataDisk)

Hide child attributesShow child attributes
iopsRead
number

The read IOPS for this entry

iopsWrite
number

The write IOPS for this entry

date
number

Date of the entry, by default in UNIX timestamp format

Mail Service

TransIP offers an SMTP relay service, removing the need for email traffic originating from your VPS IP. This means no time has to be invested in removing the VPS IP from blacklists, improving its reputation if needed and configuring advanced mail-related settings on the VPS.

GET /mail-service
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/mail-service"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "mailServiceInformation": [
    {
      "username": "test@vps.transip.email",
      "password": "KgDseBsmWJNTiGww",
      "usage": 54,
      "quota": 1000,
      "dnsTxt": "782d28c2fa0b0bdeadf979e7155a83a15632fcddb0149d510c09fb78a470f7d3"
    }
  ]
}

Get mail service information

GET/mail-service

You’re able to gather detailed information regarding mail service usage and credentials using this API call. Credentials returned are required in order to configure the mail service on a VPS system itself.

Aside from the credentials (username and password) returned objects also include current usage and quota. Usage means the amount of emails sent using the credentials (thus from the VPS) and the quota is the amount of emails allowed to be sent daily. Usage will always be lower than quota. The quota is determined by the amount of VPSes in your account. Every VPS adds 1000 mails to your daily quota (with a maximum of 10000). E.g.: when you own 5 VPSs, the quota on each VPS is 5000.

Response Attributes
mailServiceInformation
Array (MailServiceInformation)

Hide child attributesShow child attributes
username
string

The username of the mail service

password
string

The password of the mail service

usage
number

The usage of the mail service

quota
number

The quota of the mail service

dnsTxt
string

x-transip-mail-auth DNS TXT record Value

PATCH /mail-service
Request
Curl example
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/mail-service"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204
This response has no content.

Regenerate mail service password

PATCH/mail-service

The credentials needed to authorize with our SMTP relay servers consist of a username and password. In case the password can’t be accessed or should be reset, you can use this API call in order to regenerate it securely. You will find the new password in the response.

As a VPS can only be assigned one mail account, the request does not need to contain a body. The output (result) will contain the new password.

Note that you do not need to regenerate the password in case you forgot or lost it. The password can be accessed through the TransIP control panel at any time, or can be shown using the API. Please use the call outlined above in order to achieve this.

POST /mail-service
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"domainNames": [
"example.com",
"another.com"
]
}
' \
"https://api.transip.nl/v6/mail-service"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "domainNames": [
    "example.com",
    "another.com"
  ]
}
Response201404
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Domain with id 'another.com' not found"
}

Add mail service DNS entries to domains

POST/mail-service

In order to reduce spam score, several DNS records should be added. These records have to match the details generated by the mail platform. In case the DNS records don’t match, the Transip relay will not accept mail from your VPS These new records (outlined below) will not overwrite any DNS records.

Record type Name TTL DNS type Value
SPF @ 5 minutes TXT v=spf1 include:_spf.transip.email ~all
DKIM transip-A._domainkey 5 minutes CNAME _dkim-A.transip.email.
DKIM transip-B._domainkey 5 minutes CNAME _dkim-B.transip.email.
DKIM transip-C._domainkey 5 minutes CNAME _dkim-C.transip.email.
AUTH x-transip-mail-auth 5 minutes TXT 30ac13d5d73d181fda11a60f779de4fb1be42908b49fb06e46d53d2d03b5721a
Request Attributes
domainNames
Array (string), required

The domain names to which the DNS entries should be added.

/ HA-IP

HA-IP

This is the API endpoint for HA-IP services. HA-IP is a highly available IP that will proxy traffic to a specified IP address or loadbalance traffic on a specific set of IP addresses.

HA-IP includes a single (/32) IPv4 and an IPv6 address (/128). HA-IP supports TCP traffic only.

GET /haips
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "haips": [
    {
      "name": "example-haip",
      "description": "frontend cluster",
      "status": "active",
      "isLoadBalancingEnabled": true,
      "loadBalancingMode": "cookie",
      "stickyCookieName": "PHPSESSID",
      "healthCheckInterval": 3000,
      "httpHealthCheckPath": "/status.php",
      "httpHealthCheckPort": 443,
      "httpHealthCheckSsl": true,
      "ipv4Address": "37.97.254.7",
      "ipv6Address": "2a01:7c8:3:1337::1",
      "ipSetup": "ipv6to4",
      "ptrRecord": "frontend.example.com",
      "ipAddresses": [
        "10.3.37.1",
        "10.3.38.1"
      ]
    }
  ]
}

List all HA-IPs

GET/haips

Lists all HA-IPs currently registered in your account.

By looping through the entire output and splitting the array, you can gather information about a specific HA-IP. However, we do not recommend getting the entire amount of HA-IPs in case you already know the HA-IP name - you can get the same array without the need to loop through all HA-IPs. Use the ha-ip-get method for this.

This method supports pagination, using this method you can limit the amount of HA-IPs returned by the api, which might be useful if you expect a lot of response objects and you want to spread that over multiple requests. See the documentation on pages for more information on how to use this functionality.

Response Attributes
haips
Array (Haip)

Hide child attributesShow child attributes
name
string

HA-IP name

description
string

HA-IP description

status
string

HA-IP status, either ‘active’, ‘inactive’, ‘creating’

isLoadBalancingEnabled
boolean

Whether load balancing is enabled for this HA-IP

loadBalancingMode
string

HA-IP load balancing mode: ‘roundrobin’, ‘cookie’, ‘source’

stickyCookieName
string

Cookie name to pin sessions on when using cookie balancing mode

healthCheckInterval
number

The interval in milliseconds at which health checks are performed. The interval may not be smaller than 2000ms.

httpHealthCheckPath
string

The path (URI) of the page to check HTTP status code on

httpHealthCheckPort
number

The port to perform the HTTP check on

httpHealthCheckSsl
boolean

Whether to use SSL when performing the HTTP check

ipv4Address
string

HA-IP IPv4 address

ipv6Address
string

HA-IP IPv6 address

ipSetup
string

HA-IP IP setup: ‘both’, ‘noipv6’, ‘ipv6to4’

ptrRecord
string

The PTR record for the HA-IP

ipAddresses
Array (string)

The IPs attached to this haip

GET /haips/example-haip
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404
Response headers
Content-Type: application/json
Response body
{
  "haip": {
    "name": "example-haip",
    "description": "frontend cluster",
    "status": "active",
    "isLoadBalancingEnabled": true,
    "loadBalancingMode": "cookie",
    "stickyCookieName": "PHPSESSID",
    "healthCheckInterval": 3000,
    "httpHealthCheckPath": "/status.php",
    "httpHealthCheckPort": 443,
    "httpHealthCheckSsl": true,
    "ipv4Address": "37.97.254.7",
    "ipv6Address": "2a01:7c8:3:1337::1",
    "ipSetup": "ipv6to4",
    "ptrRecord": "frontend.example.com",
    "ipAddresses": [
      "10.3.37.1",
      "10.3.38.1"
    ]
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}

Get HA-IP info

GET/haips/{haipName}

Get miscellaneous information about a specific HA-IP such as the IP(s) it’s currently assigned to and the IPv4 and IPv6 address the HA-IP includes. Furthermore, you can see if the IP is currently floating (unassigned) or assigned to an IP.

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Response Attributes
haip
Haip

Hide child attributesShow child attributes
name
string

HA-IP name

description
string

HA-IP description

status
string

HA-IP status, either ‘active’, ‘inactive’, ‘creating’

isLoadBalancingEnabled
boolean

Whether load balancing is enabled for this HA-IP

loadBalancingMode
string

HA-IP load balancing mode: ‘roundrobin’, ‘cookie’, ‘source’

stickyCookieName
string

Cookie name to pin sessions on when using cookie balancing mode

healthCheckInterval
number

The interval in milliseconds at which health checks are performed. The interval may not be smaller than 2000ms.

httpHealthCheckPath
string

The path (URI) of the page to check HTTP status code on

httpHealthCheckPort
number

The port to perform the HTTP check on

httpHealthCheckSsl
boolean

Whether to use SSL when performing the HTTP check

ipv4Address
string

HA-IP IPv4 address

ipv6Address
string

HA-IP IPv6 address

ipSetup
string

HA-IP IP setup: ‘both’, ‘noipv6’, ‘ipv6to4’

ptrRecord
string

The PTR record for the HA-IP

ipAddresses
Array (string)

The IPs attached to this haip

POST /haips
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"productName": "productName",
"description": "myhaip01"
}
' \
"https://api.transip.nl/v6/haips"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "productName": "productName",
  "description": "myhaip01"
}
Response201404
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP product 'haip-extreme-contract' is not found"
}

Order a new HA-IP

POST/haips

Order a HA-IP. After assigning the HA-IP to an IP (which can be done through the API as well) all incoming TCP traffic will be routed to the specified IP addresses (only transip VPS IPs are allowed).

Warning: This API call will create an invoice!

Request Attributes
productName
string, required

Required HA-IP product name to order.

description
string, optional

Optional description for the the HA-IP, this you can use to identify your HA-IP once created.

PUT /haips/example-haip
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"haip": {
"name": "example-haip",
"description": "frontend cluster",
"status": "active",
"isLoadBalancingEnabled": true,
"loadBalancingMode": "cookie",
"stickyCookieName": "PHPSESSID",
"healthCheckInterval": 3000,
"httpHealthCheckPath": "/status.php",
"httpHealthCheckPort": 443,
"httpHealthCheckSsl": true,
"ipv4Address": "37.97.254.7",
"ipv6Address": "2a01:7c8:3:1337::1",
"ipSetup": "ipv6to4",
"ptrRecord": "frontend.example.com",
"ipAddresses": [
"10.3.37.1",
"10.3.38.1"
]
}
}
' \
"https://api.transip.nl/v6/haips/example-haip"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "haip": {
    "name": "example-haip",
    "description": "frontend cluster",
    "status": "active",
    "isLoadBalancingEnabled": true,
    "loadBalancingMode": "cookie",
    "stickyCookieName": "PHPSESSID",
    "healthCheckInterval": 3000,
    "httpHealthCheckPath": "/status.php",
    "httpHealthCheckPort": 443,
    "httpHealthCheckSsl": true,
    "ipv4Address": "37.97.254.7",
    "ipv6Address": "2a01:7c8:3:1337::1",
    "ipSetup": "ipv6to4",
    "ptrRecord": "frontend.example.com",
    "ipAddresses": [
      "10.3.37.1",
      "10.3.38.1"
    ]
  }
}
Response204403404406406406406406406406406409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "stickyCookieName must be set when balancingMode is cookie"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "loadBalancingMode is invalid must be one of 'roundrobin', 'cookie', 'source'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "healthCheckInterval must be larger than 2000"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "httpHealthCheckPath must start with a / (no protocol or hostname in path)"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "httpHealthCheckPort must be set when healthCheckPath is set"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "httpHealthCheckPort '1337' is not one of the configured ports"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "ipSetup 'l33t' is invalid"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid hostname: 'test&@*#'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Update a HA-IP

PUT/haips/{haipName}

This API calls allows for altering a HA-IP in several ways outlined below.

  • Set the description of a HA-IP;

  • Load balancing options (loadBalancingMode):

  • roundrobin forward to next address everytime

  • cookie forward to a fixed server, based on the cookie

  • source choose a server to forward to based on the source address

  • Set the PTR record;

  • Set the httpHealthCheckPath, must start with a /;

  • Set the httpHealthCheckPort, the port must be configured on the HA-IP PortConfigurations;

  • Ip setup options (ipSetup):

  • both accept ipv4 and ipv6 and forward them to seperate ipv4 and ipv6 addresses

  • noipv6 do not accept ipv6 traffic

  • ipv6to4 forward ipv6 traffic to ipv4

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Request Attributes
haip
Haip, required

name
string

HA-IP name

description
string

HA-IP description

status
string

HA-IP status, either ‘active’, ‘inactive’, ‘creating’

isLoadBalancingEnabled
boolean

Whether load balancing is enabled for this HA-IP

loadBalancingMode
string

HA-IP load balancing mode: ‘roundrobin’, ‘cookie’, ‘source’

stickyCookieName
string

Cookie name to pin sessions on when using cookie balancing mode

healthCheckInterval
number

The interval in milliseconds at which health checks are performed. The interval may not be smaller than 2000ms.

httpHealthCheckPath
string

The path (URI) of the page to check HTTP status code on

httpHealthCheckPort
number

The port to perform the HTTP check on

httpHealthCheckSsl
boolean

Whether to use SSL when performing the HTTP check

ipv4Address
string

HA-IP IPv4 address

ipv6Address
string

HA-IP IPv6 address

ipSetup
string

HA-IP IP setup: ‘both’, ‘noipv6’, ‘ipv6to4’

ptrRecord
string

The PTR record for the HA-IP

ipAddresses
Array (string)

The IPs attached to this haip

DELETE /haips/example-haip
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"endTime": "end"
}
' \
"https://api.transip.nl/v6/haips/example-haip"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "endTime": "end"
}
Response204403404406409409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid cancellation time: 'now', please use either 'end' or 'immediately'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Product already has cancellation pending"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Cancel a HA-IP

DELETE/haips/{haipName}

Cancel a HA-IP when you do not need it anymore. Note that when canceling a HA-IP, all applications or domain names that depend on the HA-IP to resolve, will not function anymore.

When specifying ‘end’ for endTime, the HA-IP will be canceled at the end of the contract period. In case you specify ‘immediately’ the HA-IP will be detached from any IPs it’s currently attached to and traffic will no longer be routed.

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Request Attributes
endTime
string, optional

Cancellation time, either ‘end’ or ‘immediately’

HA-IP certificates

This is the API endpoint for HA-IP certificates services.

GET /haips/example-haip/certificates
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip/certificates"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404409
Response headers
Content-Type: application/json
Response body
{
  "certificates": [
    {
      "id": 25478,
      "commonName": "example.com",
      "expirationDate": "2017-11-23"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}

List all HA-IP certificates

GET/haips/{haipName}/certificates

List the SSL Certificates that are currently used by this HA-IP

Ssl Certificate Id refers to the Ssl certificate found in Domain Ssl

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Response Attributes
certificates
Array (HaipCertificate)

Hide child attributesShow child attributes
id
number

The Domain Ssl certificate Id

commonName
string

The common name of the certificate, usually a domain name

expirationDate
string

The expiration date of the certificate in ‘Y-m-d’ format

POST /haips/example-haip/certificates
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"sslCertificateId": 5844
}
' \
"https://api.transip.nl/v6/haips/example-haip/certificates"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "sslCertificateId": 5844
}
Response201403404404406406409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "SSL certificate with id '227' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "request is missing 'sslCertificateId' or 'commonName'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "certificate with sslCertificateId '38012' is already attached to this HA-IP"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Add existing certificate to HA-IP

POST/haips/{haipName}/certificates

add a DV, OV or EV Certificate to Haip for SSL offloading. Enable HTTPS mode in portConfiguration to use these certificates. this will also enable our proxy’s to set the X-Forwarded-For header.

SSL Certificate Id refers to the SSL certificate found in Domain Ssl

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Request Attributes
sslCertificateId
number, required

POST /haips/example-haip/certificates
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"commonName": "foobar.example.com"
}
' \
"https://api.transip.nl/v6/haips/example-haip/certificates"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "commonName": "foobar.example.com"
}
Response201403404404406406406406409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "The domain 'foo.bar' could not be found in your account"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "request is missing 'sslCertificateId' or 'commonName'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "This is not a valid domain name: 'foo..bar'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "'testjemoeder.nl' does not resolve to HA-IP IpAddress"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "commonName '*.jemoeder.nl' is invalid as it cannot be managed, the domain should be part of your account"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Add LetsEncrypt certificate to HA-IP

POST/haips/{haipName}/certificates

add a LetsEncrypt certificate to your HA-IP. we will take care of all the validation and renewals.

in order to provide free LetsEncrypt certificates for the domains on your HA-IP, some requirements must be met in order to complete the CertificateRequest.

  • DNS the given CommonName must resolve to the HA-IP IP. Ipv6 is not required, but when set, it must resolve to the HA-IP Ipv6.

  • PortConfiguration LetsEncrypt verifies domains with a HTTP call to /.well-know. when requesting a LetsEncrypt certificate, our proxies will handle all ACME requests to automatically verify the certificate. to achive this, the HA-IP must have a HTTP portConfiguration on port 80. when using this, you will also no longer be able to verify your own LetsEncrypt certificates via HA-IP.

Warning: if you HA-IP does not have HTTP portconfiguration on port 80, we will ensure it will.

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Request Attributes
commonName
string, required

DELETE /haips/example-haip/certificates/7548
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip/certificates/7548"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204403404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Detach a certificate from this HA-IP

DELETE/haips/{haipName}/certificates/{certificateId}

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

certificateId
number (required) Example: 7548

The certificate Id, this is the same identifier as seen on Domain Ssl

HA-IP IP Addresses

This is the API endpoint for IP Addresses attached to your HA-IP

GET /haips/example-haip/ip-addresses
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip/ip-addresses"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404409
Response headers
Content-Type: application/json
Response body
{
  "ipAddresses": [
    "149.13.3.7",
    "149.31.33.7"
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}

List all IPs attached to a HA-IP

GET/haips/{haipName}/ip-addresses

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Response Attributes
ipAddresses
Array (string)

PUT /haips/example-haip/ip-addresses
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"ipAddresses": [
"149.13.3.7",
"149.31.33.7"
]
}
' \
"https://api.transip.nl/v6/haips/example-haip/ip-addresses"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "ipAddresses": [
    "149.13.3.7",
    "149.31.33.7"
  ]
}
Response204403403404406406409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP basic product allows only one attached IP address"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '127.0.0.1' is not a VPS IP address you own"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address 'test-ip-123' is not a valid IPV4 or IPV6 address"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Set HA-IP attached IP addresses

PUT/haips/{haipName}/ip-addresses

Replace or attach IPs for HA-IP

Only your transip VPS IPs are allowed.

When load balancing is enabled, multiple VPSes can be attached to HA-IP. If load balancing is not enabled, the current attached IP (if any) will be replaced with the first provided VPS.

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Request Attributes
ipAddresses
Array (string), required

DELETE /haips/example-haip/ip-addresses
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip/ip-addresses"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204403404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Detach all IPs from HA-IP

DELETE/haips/{haipName}/ip-addresses

Detach all IPs from HA-IP

NOTE: Removing the last IP from HA-IP will also delete all port configurations

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

HA-IP port configurations

This is the API endpoint for HA-IP port configurations services.

GET /haips/example-haip/port-configurations
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip/port-configurations"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404409
Response headers
Content-Type: application/json
Response body
{
  "portConfigurations": [
    {
      "id": 9865,
      "name": "Website Traffic",
      "sourcePort": 80,
      "targetPort": 80,
      "mode": "http",
      "endpointSslMode": "off"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}

List all HA-IP port configurations

GET/haips/{haipName}/port-configurations

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Response Attributes
portConfigurations
Array (HaipPortConfiguration)

Hide child attributesShow child attributes
id
number

The port configuration Id

name
string

A name describing the port

sourcePort
number

The port at which traffic arrives on your HA-IP

targetPort
number

The port at which traffic arrives on your VPS

mode
string

The mode determining how traffic is processed and forwarded: ‘tcp’, ‘http’, ‘https’, ‘proxy’

endpointSslMode
string

The mode determining how traffic between our load balancers and your VPS is protected: ‘off’, ‘on’, ‘strict’

GET /haips/example-haip/port-configurations/7548
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip/port-configurations/7548"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404404409
Response headers
Content-Type: application/json
Response body
{
  "portConfigurations": [
    {
      "id": 9865,
      "name": "Website Traffic",
      "sourcePort": 80,
      "targetPort": 80,
      "mode": "http",
      "endpointSslMode": "off"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP PortConfiguration with id '1337' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}

Get info about a specific PortConfiguration

GET/haips/{haipName}/port-configurations/{portConfigurationId}

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

portConfigurationId
number (required) Example: 7548

The port configuration Id

Response Attributes
portConfigurations
Array (HaipPortConfiguration)

Hide child attributesShow child attributes
id
number

The port configuration Id

name
string

A name describing the port

sourcePort
number

The port at which traffic arrives on your HA-IP

targetPort
number

The port at which traffic arrives on your VPS

mode
string

The mode determining how traffic is processed and forwarded: ‘tcp’, ‘http’, ‘https’, ‘proxy’

endpointSslMode
string

The mode determining how traffic between our load balancers and your VPS is protected: ‘off’, ‘on’, ‘strict’

POST /haips/example-haip/port-configurations
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"name": "Website Traffic",
"sourcePort": 443,
"targetPort": 443,
"mode": "https",
"endpointSslMode": "on"
}
' \
"https://api.transip.nl/v6/haips/example-haip/port-configurations"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "name": "Website Traffic",
  "sourcePort": 443,
  "targetPort": 443,
  "mode": "https",
  "endpointSslMode": "on"
}
Response201403404406406406406406406409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "name cannot be empty"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "sourcePort 'test123' is an invalid port number must be between 0 and 65535"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "targetPort 'test123' is an invalid port number must be between 0 and 65535"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "mode 'tcptje' is invalid must be one of 'tcp', 'http', 'https', 'proxy'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "endpointSslMode 'odd' is invalid must be one of 'on', 'off', 'strict'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "sourcePort '25' is not unique, there is already a PortConfiguration using this sourcePort port"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Create a port configuration

POST/haips/{haipName}/port-configurations

Add ports to HA-IP to route to your backend VPS

Mode options:

  • http appends a X-Forwarded-For header to HTTP requests with the original remote IP

  • https same as HTTP, with SSL Certificate offloading

  • tcp plain TCP forward to your VPS

  • proxy proxy protocol is also a way to retain the original remote IP, but also works for non HTTP traffic (note: the receiving application has to support this)

Endpoint SSL mode options:

  • off no SSL connection is established between our load balancers and your VPS

  • on an SSL connection is established between our load balancers your VPS, but the certificate is not validated

  • strict an SSL connection is established between our load balancers your VPS, and the certificate must signed by a trusted Certificate Authority

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Request Attributes
name
string, required

sourcePort
number, required

targetPort
number, required

mode
string, required

endpointSslMode
string, required

PUT /haips/example-haip/port-configurations/7548
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"portConfiguration": {
"id": 9865,
"name": "Website Traffic",
"sourcePort": 80,
"targetPort": 80,
"mode": "http",
"endpointSslMode": "off"
}
}
' \
"https://api.transip.nl/v6/haips/example-haip/port-configurations/7548"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "portConfiguration": {
    "id": 9865,
    "name": "Website Traffic",
    "sourcePort": 80,
    "targetPort": 80,
    "mode": "http",
    "endpointSslMode": "off"
  }
}
Response204403404404406406406406406406409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP PortConfiguration with id '75' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "name cannot be empty"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "sourcePort 'test123' is an invalid port number must be between 0 and 65535"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "targetPort 'test123' is an invalid port number must be between 0 and 65535"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "mode 'tcptje' is invalid must be one of 'tcp', 'http', 'https', 'proxy'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "endpointSslMode 'odd' is invalid must be one of 'on', 'off', 'strict'"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "sourcePort '1337' is not unique, there is already a PortConfiguration using this sourcePort port"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Update a port configuration

PUT/haips/{haipName}/port-configurations/{portConfigurationId}

Update the name, sourcePort, targetPort, mode, or endpointSslMode for a specific port configuration

Mode options (mode):

  • http appends a X-Forwarded-For header to HTTP requests with the original remote IP

  • https same as HTTP, with SSL Certificate offloading

  • tcp plain TCP forward to your VPS

  • proxy proxy protocol is also a way to retain the original remote IP, but also works for non HTTP traffic (note: the receiving application has to support this)

Endpoint SSL mode options (endpointSslMode):

  • off no SSL connection is established between our load balancers and your VPS

  • on an SSL connection is established between our load balancers your VPS, but the certificate is not validated

  • strict an SSL connection is established between our load balancers your VPS, and the certificate must signed by a trusted Certificate Authority

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

portConfigurationId
number (required) Example: 7548

The port configuration Id

Request Attributes
portConfiguration
HaipPortConfiguration, required

id
number

The port configuration Id

name
string

A name describing the port

sourcePort
number

The port at which traffic arrives on your HA-IP

targetPort
number

The port at which traffic arrives on your VPS

mode
string

The mode determining how traffic is processed and forwarded: ‘tcp’, ‘http’, ‘https’, ‘proxy’

endpointSslMode
string

The mode determining how traffic between our load balancers and your VPS is protected: ‘off’, ‘on’, ‘strict’

DELETE /haips/example-haip/port-configurations/7548
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip/port-configurations/7548"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204403404404409409409
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP PortConfiguration with id '1337' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is customer locked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' has an action running, no modification is allowed"
}

Remove port configuration

DELETE/haips/{haipName}/port-configurations/{portConfigurationId}

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

portConfigurationId
number (required) Example: 7548

The port configuration Id

HA-IP StatusReports

This is the API endpoint for your HA-IP status reports, you can fetch the current statuses per backend IP address, IP version, port and load balancer

GET /haips/example-haip/status-reports
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/haips/example-haip/status-reports"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200403404409
Response headers
Content-Type: application/json
Response body
{
  "haipStatusReport": [
    {
      "ipAddress": "136.10.14.1",
      "port": 80,
      "ipVersion": 4,
      "loadBalancerName": "lb0",
      "loadBalancerIp": "136.144.151.255",
      "state": "up",
      "lastChange": "2017-09-29 16:51:18"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP 'example-haip' is blocked, no modification is allowed"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "HA-IP with name 'example-haip' not found"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Actions on HA-IP 'example-haip' are temporary disabled"
}

Get a full status report for a specific HA-IP

GET/haips/{haipName}/status-reports

The result contains a report per backend IP address, IP version, port and load balancer

URI Parameters
HideShow
haipName
string (required) Example: example-haip

The HA-IP Name

Response Attributes
haipStatusReport
Array (HaipStatusReport)

Hide child attributesShow child attributes
ipAddress
string

IP Address

port
number

HaipConfigurationPort

ipVersion
number

IP Version

loadBalancerName
string

The Name of The LoadBalancer

loadBalancerIp
string

The IP of the HA-IP LoadBalancer

state
string

The state of the LoadBalancer, either : 'up or ‘down’

lastChange
string

Last change in the state in Europe/Amsterdam timezone

/ Colocations

Colocations

This is the API endpoint for colocation.

GET /colocations
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/colocations"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200
Response headers
Content-Type: application/json
Response body
{
  "colocations": [
    {
      "name": "example2",
      "ipRanges": [
        "2a01:7c8:c038:6::/64"
      ]
    }
  ]
}

List all colocations

GET/colocations

Gets a list of colocation currently registered in your accounts. For every colocation service in your account, the corresponding name and IP range(s) are returned.

Response Attributes
colocations
Array (Colocation)

Hide child attributesShow child attributes
name
string

Colocation name

ipRanges
Array (string)

IP ranges

GET /colocations/example2
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/colocations/example2"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "colocation": {
    "name": "example2",
    "ipRanges": [
      "2a01:7c8:c038:6::/64"
    ]
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Colocation with name 'lala' not found"
}

Get colocation

GET/colocations/{colocationName}

Get a list of colocation details corresponding to the specified colocation service currently registered in your account. IP range(s) and the colocation name set in the control panel are returned.

URI Parameters
HideShow
colocationName
string (required) Example: example2

Colocation name

Response Attributes
colocation
Colocation

Hide child attributesShow child attributes
name
string

Colocation name

ipRanges
Array (string)

IP ranges

IP addresses

This is the API endpoint for colocation IP address services. By default, TransIP assigns an IPv6 range as well as IPv4 addresses based on the selected plan.

GET /colocations/example2/ip-addresses
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/colocations/example2/ip-addresses"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "ipAddresses": [
    {
      "address": "37.97.254.6",
      "subnetMask": "255.255.255.0",
      "gateway": "37.97.254.1",
      "dnsResolvers": [
        "195.8.195.8",
        "195.135.195.135"
      ],
      "reverseDns": "example.com"
    }
  ]
}
Response headers
Content-Type: application/json
Response body
{
  "error": "Colocation with name 'lala' not found"
}

List IP addresses for a colocation

GET/colocations/{colocationName}/ip-addresses

List IP addresses based on the colocation they’re assigned to. The address itself, its subnet mask, gateway and DNS resolvers in that range.

URI Parameters
HideShow
colocationName
string (required) Example: example2

Colocation name

Response Attributes
ipAddresses
Array (IpAddress)

Hide child attributesShow child attributes
address
string

The IP address

subnetMask
string

Subnet mask

gateway
string

Gateway

dnsResolvers
Array (string)

The DNS resolvers

reverseDns
string

Reverse DNS

GET /colocations/example2/ip-addresses/149.210.215.249
Request
Curl example
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/colocations/example2/ip-addresses/149.210.215.249"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response200404
Response headers
Content-Type: application/json
Response body
{
  "ipAddress": {
    "address": "37.97.254.6",
    "subnetMask": "255.255.255.0",
    "gateway": "37.97.254.1",
    "dnsResolvers": [
      "195.8.195.8",
      "195.135.195.135"
    ],
    "reverseDns": "example.com"
  }
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '8.8.8.8' not found"
}

Get IP addresses for a colocation

GET/colocations/{colocationName}/ip-addresses/{ipAddress}

Get IP addresses information for a specific colocation by specifying the colocation name and IP address. Take the information above into account.

In case you need to get all IP addresses for a specific colocation, use the API call outlined above.

URI Parameters
HideShow
colocationName
string (required) Example: example2

Colocation name

ipAddress
string (required) Example: 149.210.215.249

Colocation IP address

Response Attributes
ipAddress
IpAddress

Hide child attributesShow child attributes
address
string

The IP address

subnetMask
string

Subnet mask

gateway
string

Gateway

dnsResolvers
Array (string)

The DNS resolvers

reverseDns
string

Reverse DNS

POST /colocations/example2/ip-addresses
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"ipAddress": "2a01:7c8:3:1337::6",
"reverseDns": "example.com"
}
' \
"https://api.transip.nl/v6/colocations/example2/ip-addresses"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "ipAddress": "2a01:7c8:3:1337::6",
  "reverseDns": "example.com"
}
Response201403406
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '149.210.215.249' does not belong to a range this user can modify"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '149.210.215.249' already exists"
}

Create a new IP address for a colocation

POST/colocations/{colocationName}/ip-addresses

Create an IP address for a colocation by specifying the colocation name the IP address should be assigned to. Note the IP address should be in a range you own or are permitted to create IP addresses.

Currently, new IP addresses have to be requested manually through the support system. In order to make this an automated process with the API, you should get a larger block of IPs at once so the API is able to allocate one or more IP addresses to the specified colocation.

Optionally, set reverse DNS as well by specifying the reverseDns attribute.

URI Parameters
HideShow
colocationName
string (required) Example: example2

Colocation name

Request Attributes
ipAddress
string, required

reverseDns
string, optional

PUT /colocations/example2/ip-addresses/149.210.215.249
Request
Curl example
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"ipAddress": {
"address": "37.97.254.6",
"subnetMask": "255.255.255.0",
"gateway": "37.97.254.1",
"dnsResolvers": [
"195.8.195.8",
"195.135.195.135"
],
"reverseDns": "example.com"
}
}
' \
"https://api.transip.nl/v6/colocations/example2/ip-addresses/149.210.215.249"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "ipAddress": {
    "address": "37.97.254.6",
    "subnetMask": "255.255.255.0",
    "gateway": "37.97.254.1",
    "dnsResolvers": [
      "195.8.195.8",
      "195.135.195.135"
    ],
    "reverseDns": "example.com"
  }
}
Response204403404
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '149.210.215.249' does not belong to a range this user can modify"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '8.8.8.8' not found"
}

Set reverse DNS for an IP address

PUT/colocations/{colocationName}/ip-addresses/{ipAddress}

Sets a reverse DNS name for an IP address. Reverse DNS records are often required in order to be able to deliver email to other mail servers.

Furthermore, it’s considered good practice to keep an up-to-date record of your reverse DNS to be able to identify servers at all times.

Upon adding a new IP address for a colocation, you’re able to set the reverse DNS instantly along with the API call.

URI Parameters
HideShow
colocationName
string (required) Example: example2

Colocation name

ipAddress
string (required) Example: 149.210.215.249

Colocation IP address

Request Attributes
ipAddress
IpAddress, required

address
string

The IP address

subnetMask
string

Subnet mask

gateway
string

Gateway

dnsResolvers
Array (string)

The DNS resolvers

reverseDns
string

Reverse DNS

DELETE /colocations/example2/ip-addresses/149.210.215.249
Request
Curl example
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
"https://api.transip.nl/v6/colocations/example2/ip-addresses/149.210.215.249"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Response204403404
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '149.210.215.249' does not belong to a range this user can modify"
}
Response headers
Content-Type: application/json
Response body
{
  "error": "IP address '8.8.8.8' not found"
}

Delete an IP address

DELETE/colocations/{colocationName}/ip-addresses/{ipAddress}

Delete an IP addresses for a colocation. The IP address will be removed.

URI Parameters
HideShow
colocationName
string (required) Example: example2

Colocation name

ipAddress
string (required) Example: 149.210.215.249

Colocation IP address

RemoteHands

This is the API endpoint to create remote hands requests

POST /colocations/example2/remote-hands
Request
Curl example
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [your JSON web token]" \
-d '
{
"remoteHands": {
"coloName": "example2",
"contactName": "Herman Kaakdorst",
"phoneNumber": "+31 612345678",
"expectedDuration": 15,
"instructions": "Reboot server with label Loadbalancer0"
}
}
' \
"https://api.transip.nl/v6/colocations/example2/remote-hands"
Request headers
Content-Type: application/json
Authorization: Bearer [your JSON web token]
Request body
{
  "remoteHands": {
    "coloName": "example2",
    "contactName": "Herman Kaakdorst",
    "phoneNumber": "+31 612345678",
    "expectedDuration": 15,
    "instructions": "Reboot server with label Loadbalancer0"
  }
}
Response201404
This response has no content.
Response headers
Content-Type: application/json
Response body
{
  "error": "Colocation with name 'lala' not found"
}

Create a Remotehands request

POST/colocations/{colocationName}/remote-hands

Send a request to the datacenter engineer to perform simple task on your server, e.g. a powercycle.

URI Parameters
HideShow
colocationName
string (required) Example: example2

Colocation name

Request Attributes
remoteHands
RemoteHands, required

coloName
string

Name of the colocation contract

contactName
string

Name of the person that created the remote hands request

phoneNumber
string

Phonenumber to contact in case of questions regarding the remotehands request

expectedDuration
number

Expected duration in minutes

instructions
string

The instructions for the datacenter engineer to perform