Skip to main content
If you sell hosting to your own customers, you shouldn’t have to log in to our panel to do it. This part of the API lets you read what’s in stock at your price and order it from your own system. Two things make it a reseller API rather than a product feed: every price comes back twice, and an order is a real order.

Your rate

Ask us for a reseller discount and we’ll put it on your account as a single percentage off list. It applies to everything you buy, dedicated and cloud, through the API or the panel. It’s also captured on each service when you order, so renewals stay at the rate you bought at. If your discount changes later, nothing that’s already running gets re-priced. In the catalogue, every price is an object, not a number:
listMinor is what the storefront charges, and netMinor is what we charge you. The difference is your margin. discountBps is your discount in basis points, so 1000 is 10%. All amounts are integers in minor units, so 15000 is £150.00.

The catalogue

Needs catalogue:read. It returns all three products in one response, as dedicated, cloud and hosting, plus a meta block with the currency, your discount as a percentage, and priceUnit: "minor". Dedicated rows have a price and a setup fee, and a stock object worth reading carefully:
  • racked is how many machines are sitting in a rack right now.
  • slots is hardware we’ve committed to build but haven’t racked yet. You can order it today, and it’s delivered within leadTime.
  • total is the two added together, which is what you can sell right now.
Use the split when you quote a customer. Selling a slot as if it ships in minutes is the one mistake worth designing against. That’s why the numbers come separately rather than as one figure you have to trust. instant: true means a paid order provisions itself without anyone on our side. Cloud plans are always instant. Pass ?currency=USD to price cloud and hosting in dollars. If we’ve set a price for that currency, you get it. Otherwise the figure is converted and priceSource says converted. Quote those knowing the exchange rate moves. Hosting rows carry orderable. If it’s false, the plan isn’t fully set up on our side and an order will be refused, so don’t quote it.

Ordering

Every order needs orders:place.
This spends money. An order reserves a machine, creates the service, and raises an invoice against your account at your rate.

Dedicated

planSlug and hostname are required. You can also pass profileId (the OS to install), rootPassword and sshKeys.

Cloud

planId is the cloud row’s slug from the catalogue, and hostname is required. location, os, app and appInputs are optional.

Shared hosting

This one takes a domain instead of a hostname, and you can only have one subscription per domain. If we already host the domain, you get a 409 before any money changes hands.

The response

All three answer 201 with the same shape:
Order responses use list and net in price. The catalogue uses listMinor and netMinor. Both are minor units. The names just differ.
invoice.total includes tax, and subtotal doesn’t. Nothing is provisioned until the invoice is paid. You can pay it with invoices:pay or from the panel. Once it’s paid, the machine builds itself. If provisional came back true, we build it by hand, and you have a lead time to quote.

When an order is refused

If you get a 409 on stock, read the catalogue again rather than retrying blind.

Managing what you’ve sold

There’s nothing reseller-specific here, because there doesn’t need to be. Everything you order lands in your account as an ordinary service. The servers guide already covers listing, rebooting, rescuing, reinstalling and cancelling them with the token you’re holding, and billing covers the invoices.

What we don’t do

We don’t white-label the panel, and we don’t bill your customers for you. Your customer is your customer. You own the relationship, the pricing and the support, and we own the hardware and the network underneath. If you need us to talk to them directly, that’s a conversation rather than an API call. Get in touch through the client area.