Skip to content
Coritan Docs

Add capacity to a service

Buy extra ports, databases, mailboxes or automatic backups for a service you have, preview the price, remove them, and quote any order before you place it.

View as Markdown

In the dashboard

A capacity add-on raises one limit of a service you already have, such as the number of ports on a game server, or turns on its automatic backups. Each add-on is a service of its own that renews with the service it is on, on the same date and billing cycle. You can remove it at any time. The Size and add-ons card on a server's Billing tab in App Deployment lists its add-ons, with Add… for each one you can add (Size and add-ons). Once account plans open on your account, a Cloud Compute instance and a mail service have the same card, and the Dashboard offers the add-on that raises a limit you are close to (The Dashboard). Otherwise these steps use the API. Add an add-on in the dashboard pays for it on one page.

A service billed by use has no renewal date to share, so its add-ons renew every month on their own (Add-ons on a service billed by use). You can see what an add-on costs before you add it, and the same API can price an order before you place it, with its add-ons and promo code.

Add-on kind Goes on One unit adds
Extra Port container_ports A server on App Deployment 1 port slot
Extra Database container_databases A server on App Deployment whose plan limits databases 1 database slot
Extra Mailbox mail_extra_mailboxes The Mail Hosting service your plan includes 1 mailbox

Extra Port, Extra Database and Extra Mailbox take a quantity. A service takes at most 20 units of each kind, counting all its add-ons.

A server you bought from a storefront takes add-ons from that storefront, not from this page. The storefront sells extra CPU (container_cpu, one more vCPU a unit), automatic backups and Server Management (server_management), bills them on its own invoice, and lists them in its server panel (Add-ons). Extra CPU and Server Management are not sold on coritan.com.

Extra Object Storage 250 GB (object_storage_extra) is no longer sold, because pay as you go Object Storage costs less. An add-on you already have stays in its service's attached list, keeps renewing at its price and adds 250 GB-month to the storage your account uses free each month (The storage add-on). It is not in available, and adding one answers 422 (Troubleshooting).

Automatic backups are add-ons too. Each service takes one, with no quantity:

Add-on kind Goes on What it does
Automatic Server Backups container_auto_backups A server on App Deployment, when your plan does not include automatic backups Takes a snapshot of the server every day and keeps the newest 7 (Automatic backups)
Weekly Instance Backups or Daily Instance Backups vps_auto_backups A Cloud Compute instance Backs up the disk every week and keeps the newest 4, or every day and keeps the newest 7 (Automatic backups)

The instance add-ons cost a share of the instance's price. Once account plans open on your account, the Business plan pays for them on up to three instances and the Enterprise plan on every instance. On an instance your plan covers, the list shows the add-on with included_by_plan set to true and price.text set to Included with your plan.

Server access goes on your account rather than on a service, and an account needs it to run Cloud Compute instances, game servers and databases (Add Server access). More websites come from a websites pack, which goes on your account rather than on a service. Order it on its own, as Order a service describes. We no longer sell the Build Minutes Pack and the Bandwidth Pack for App Deployment. A pack your account already holds keeps its effect and renews until you cancel it (Packs). GET /products/?product_group=addons lists it with the other add-ons.

Extra Backup Slots is not on sale yet, so a server's list leaves it out. To keep copies of a server, take snapshots by hand or on a schedule, or add automatic backups (Snapshots and backups compared).

  • Get an access token for the API. Make your first API request shows how.
  • The service must be active and not set to end. service_ref is its service ID, or the UUID of the server behind it.
  • For extra mailboxes, set up the included Mail Hosting first (Set up the services your plan includes), and use its id as service_ref.
  • Adding an add-on charges the rest of the service's current period. Coritan takes the charge from your credit balance first (Add credit to your balance), and you pay what is left on the invoice.
  • A team member working in your account needs the technical or admin role to add or remove an add-on. Any role can list them.

GET /services/{service_ref}/addons lists the add-ons a service has and the ones it can take:

Shell
curl https://api.coritan.com/api/v1/services/2210/addons \
  -H "Authorization: Bearer $CORITAN_TOKEN"

This answer for a server is shortened to two add-ons, and its prices may differ from today's:

JSON
{
  "parent": {
    "id": 2210,
    "product_name": "CX2",
    "module_name": "container",
    "status": "active",
    "billing_cycle": "monthly",
    "amount": "3.99",
    "next_due_date": "2026-10-14T00:00:00Z"
  },
  "attached": [],
  "available": [
    {
      "product": {"id": 88, "slug": "addon-server-ports", "name": "Extra Port", "description": "One more port on one App Deployment server."},
      "kind": "container_ports",
      "label": "extra ports",
      "adds": "+1 port",
      "unit": 1,
      "unit_label": "port",
      "fits": ["container"],
      "price": {"mode": "per_unit", "amount": "0.50", "currency": "USD", "cycle": "monthly", "setup_fee": "0.00", "percent": null, "text": "$0.50/mo each"},
      "max_quantity": 20,
      "addable": true,
      "included_by_plan": false,
      "reason_unavailable": null
    },
    {
      "product": {"id": 89, "slug": "addon-server-databases", "name": "Extra Database", "description": "One more database on one App Deployment server."},
      "kind": "container_databases",
      "label": "extra databases",
      "adds": "+1 database",
      "unit": 1,
      "unit_label": "database",
      "fits": ["container"],
      "price": {"mode": "per_unit", "amount": "0.50", "currency": "USD", "cycle": "monthly", "setup_fee": "0.00", "percent": null, "text": "$0.50/mo each"},
      "max_quantity": 20,
      "addable": true,
      "included_by_plan": false,
      "reason_unavailable": null
    }
  ]
}
parent
The service, with the billing cycle and the date that every add-on on it renews on.
attached
The add-ons the service has that have not ended, each as GET /services/{service_ref} returns a service, plus an addon block. A capacity add-on has addon.type set to capacity, with its quantity, what it adds, whether you can remove it now (removable) and, once you remove it at the end of the term, the date it ends (ends_at). A product bought with the service, such as a floating IP, has addon.type set to product, and you cancel it on its own (Cancel a service).
available
Every add-on for this kind of service, priced on its billing cycle. price.amount is for one unit when price.mode is per_unit, and for the whole add-on when it is fixed, in the price.currency, such as USD. max_quantity is the most one request can add now. When addable is false, reason_unavailable says why (Troubleshooting).

Add an add-on in the dashboard

Section titled Add an add-on in the dashboard
  1. Open the card that lists the service's add-ons: Size and add-ons on a server's Billing tab, or Plan and add-ons on an instance's Console tab and on a mail service's Overview tab.
  2. Under Available, select Add… beside the add-on. A page opens at /dashboard/order/add-on?addon=<slug>&service=<id>, with a heading such as Add extra ports, a link back to the service and a summary named Your order. An add-on with no service in the address is an account add-on.
  3. For an add-on sold per unit, such as Extra Port, set the Quantity with the plus and minus buttons. A service takes at most 20 units of one kind. Add-ons sold one at a time have no quantity.
  4. Read the price in Your order. It lists what the add-on costs for the rest of the current period, any promo code as a negative line, Then, what it renews at and from which date, and Due today. It renews on the service's cycle. On a service billed by use it renews every month from today.
  5. Enter a code in Promo code if you have one. A code the add-on cannot use shows the reason under the field, and the button stays off until you change or clear it.
  6. Under Pay with, choose a saved method, a card or another way your account offers. When your balance covers the price, the page says We take it from your account credit. A new card and a bank check (3-D Secure) finish on the page, and PayPal and other hosted checkouts bring you back to it. If your credit falls short, we add the missing amount to your credit with the method you chose, then take the price from it.
  7. Select the button, "Pay $X and add". A message confirms the add-on and the page returns you to where you started, with the add-on under On this service.

If a payment is still settling when the add-on is ordered, the page says Your payment is still settling and links the invoice with See the invoice. The add-on applies once the payment clears. Select Cancel or the link at the top to leave without buying.

When an action fails because your plan does not allow it, such as adding a website past your plan's limit, a dialog names the limit and offers what raises it. It sells nothing itself: Add… opens the add-on's page above, and the plan and the free trial open their own pages (Change your account plan). Each page returns you to the page where the action failed, and you repeat the action by hand once you have what you need. The dialog for an order that needs Server access offers Server access and the Pro plan the same way (Add Server access).

Send POST /services/{service_ref}/addons with an add-on from available:

Shell
curl -X POST https://api.coritan.com/api/v1/services/2210/addons \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 88, "quantity": 3}'
product_id
The add-on's product.id from available.
quantity
Optional, 1 when left out. How many units to add, up to the add-on's max_quantity. An add-on sold one at a time takes only 1.
billing_cycle
Optional. The add-on renews on the service's cycle, so leave it out or send that cycle. A service billed by use has no cycle, and its add-ons renew monthly: leave it out or send monthly.
promo_code
Optional. A promo code for the add-on. A code it cannot use refuses the request (Use a promo code).

The first invoice charges the rest of the service's current period: the add-on's price for the whole days left before the service renews, plus any setup fee. The day in progress counts as used. This server renews on Oct 14, 2026, with 17 of its 30 days left, so 3 extra ports at $0.50/mo each cost $0.85 now. The answer is 201, shortened here:

JSON
{
  "service": {
    "id": 2231,
    "product_name": "Extra Port",
    "module_name": "addon",
    "status": "pending",
    "billing_cycle": "monthly",
    "amount": 1.5,
    "config": {"quantity": 3, "addon_of_service_id": 2210, "renews_at": "2026-10-14T00:00:00"},
    "addon": {"type": "capacity", "kind": "container_ports", "label": "extra ports", "quantity": 3, "adds": "+3 ports", "removable": true, "ends_at": null, "included_by_plan": false}
  },
  "invoice_id": 5301,
  "requires_payment": true,
  "charge": "0.85",
  "discount": "0.00",
  "amount_due": "0.85",
  "renews_at": "2026-10-14T00:00:00Z",
  "renewal_amount": "1.50",
  "billing_cycle": "monthly",
  "message": "Pay the invoice to apply the add-on."
}
service
The add-on. Its id is the addon_ref you use to remove it.
charge, discount and amount_due
The first invoice, what a promo code took off it, and what is left to pay after your credit.
renews_at and renewal_amount
When the add-on renews with the service, and what it costs each cycle from then on.

The invoice has a line such as Extra Port, +3 ports (service #2231), to October 14, 2026. When requires_payment is true, pay invoice_id as Pay an invoice shows. message says what happened:

message Meaning
Pay the invoice to apply the add-on. Part of the invoice is still to pay.
Paid from your credit balance. The add-on applies in a moment. Your credit paid the invoice.
Your promo code covered the charge. The add-on applies in a moment. The code took off the whole charge.
Nothing is due before the next renewal. The add-on applies in a moment. Less than a day is left before the service renews, so there was nothing to charge.

Once the invoice is paid, the add-on's status becomes active and the limit goes up:

  • Extra ports and databases raise the server's Port slots and Database slots. In the dashboard, go to App Deployment, open the server, then the Billing tab. The Size and add-ons card shows both.
  • Extra mailboxes raise mailboxes in your plan's limits, and Coritan resizes the included Mail Hosting to match (Read your limits and usage).
  • Automatic backups start on the server or the instance, as Automatic backups and How automatic backups run describe.

The add-on renews with the service at renewal_amount, on an invoice of its own.

Add-ons on a service billed by use

Section titled Add-ons on a service billed by use

A Cloud Compute instance, a game server or a database ordered on your own account is billed by use. Its parent in the list has a billing_cycle of hourly and an amount of 0.0000, because the service has no price and no renewal date. Its add-ons work the same way, with these differences:

  • Each add-on renews every month on its own, from the day you add it. The service keeps billing by use.
  • The first invoice charges one whole month of the add-on, with no proration. Extra Port at $0.50/mo each costs $1.50 for 3, today, and again every month from today.
  • An add-on that costs a share of the instance's price takes that share of the monthly list price of the instance's size. An RX-2 instance lists at $4.99 a month, so Weekly Instance Backups at 20% cost $1.00 a month. The instance's own use does not change it.
  • billing_cycle, when you send it, must be monthly.
  • Removing an add-on at the end of the term keeps it until the month you paid for ends. when=now removes it at once and refunds nothing.

A service billed at a flat price still charges the rest of its current period and renews with the service.

See what an add-on costs first

Section titled See what an add-on costs first

POST /services/{service_ref}/addons/preview takes the body that adding an add-on takes and answers what it would charge, without adding or charging anything:

Shell
curl -X POST https://api.coritan.com/api/v1/services/2210/addons/preview \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 88, "quantity": 3}'
JSON
{
  "due_now": "0.85",
  "currency": "USD",
  "lines": [
    {"label": "Extra Port, +3 ports, to October 14, 2026", "amount": "0.85"}
  ],
  "renews": {"amount": "1.50", "cycle": "monthly", "date": "2026-10-14T00:00:00Z"},
  "promo": null
}
due_now and lines
What the first invoice charges, and its parts: the add-on, any setup fee, and a promo code as a line with a negative amount. due_now is what is left after the code. Coritan takes it from your credit first, as it does when you add the add-on.
renews
What the add-on costs at each renewal, and when it renews next. On a service billed by use, date is one month from today.
promo
null when the request has no promo_code. A code the add-on cannot use does not refuse the preview: valid is false, and message says why. Each refused code counts towards the limit on POST /billing/promo/validate, and a code the preview accepts counts nothing.

The preview refuses what adding the add-on refuses, with the same status and message (Troubleshooting). A team member needs the same role to preview an add-on as to add one.

Send DELETE /services/{service_ref}/addons/{addon_ref}, where addon_ref is the add-on's service ID. By default the add-on stays until the service renews, and nothing more is charged for it:

Shell
curl -X DELETE https://api.coritan.com/api/v1/services/2210/addons/2231 \
  -H "Authorization: Bearer $CORITAN_TOKEN"
JSON
{
  "service_id": 2231,
  "when": "end_of_term",
  "status": "active",
  "termination_date": "2026-10-14T00:00:00Z",
  "message": "The add-on ends on October 14, 2026, when this server renews. It stays until then."
}

To remove it at once, add ?when=now to the address. The answer's status is then pending_termination, and its message is Add-on removed. Its limit comes off the server in a moment.

Warning

Removing an add-on with when=now refunds nothing for the rest of the period you paid for.

When the limit comes off, Coritan deletes nothing. A server with more ports or databases than its slots keeps them, but you cannot add more until it is back under the limit. Extra mailboxes that you use cannot be removed: delete what would be over the limit first. An Extra Object Storage 250 GB add-on can go whatever your buckets hold. Once it ends, your account's free storage each month goes back to the plan's amount.

An add-on whose invoice you have not paid ends at once, whichever when you send, and Coritan cancels its invoice. The message is then Add-on removed. It had not been applied yet.

A service's capacity add-ons end when the service does. When you cancel it, they end on the same date, or at once when you cancel immediately, and Coritan cancels their unpaid invoices. When a service ends for any other reason, such as an unpaid invoice, its add-ons end with it.

An account needs Server access to order a Cloud Compute instance, a game server or a database (Server access). Pro, Business and Enterprise include it, so only a Free account adds it. It is an account add-on, so you order it on its own, as Order a service describes. Find it in the catalogue by its slug, addon-compute-paid, and order it with one of its prices:

Shell
curl "https://api.coritan.com/api/v1/products/?product_group=addons" \
  -H "Authorization: Bearer $CORITAN_TOKEN"

curl -X POST https://api.coritan.com/api/v1/services/order \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 94, "pricing_id": 301}'

Server access includes data out only: 1,000 GB in North America and Europe and 500 GB elsewhere each month, shared by every instance and game server on the account. It includes no memory, CPU or disk. It renews monthly, quarterly or yearly, and one covers every server on the account.

A Free account does not have to order it first. Send include_paid_plan set to true with its first instance, game server or database order, and the order puts Server access on the same first invoice (Order Server access with the instance, Order Server access with the server). POST /checkout/quote takes the same field and adds a Server access line to lines and to due_now.

If Server access lapses, for example when its invoice stays unpaid, the servers the account runs keep running and bill by use without the included data out. A new instance, game server or database is refused with paid_plan_required until the account has Server access again.

The order of the add-on on its own answers 422 when the account has no use for it:

Code Cause
included_by_plan Your plan already includes Server access, so there is nothing to add. The answer names the plan in plan.
already_ordered You already have Server access on this account, active, pending or suspended. One covers every server.

Each answer holds the sentence in message, and again in errors. An order of an instance, a game server or a database without Server access answers 402 with the code paid_plan_required instead, and names this add-on in upgrade.addon and the plan that includes it in upgrade.plan.

When a plan includes Server access

Section titled When a plan includes Server access

The add-on is called Server access in the dashboard and the catalogue. When you buy Pro or Business while you hold it, the add-on ends at once, because the plan gives you the same right. Coritan adds the unused days of its current period to your account credit, so you are not charged twice. The add-on's service history says Ended because your Pro plan includes Server access. and how much went to your credit, and so does your credit ledger.

  • A free trial of Pro or Business includes Server access for its 14 days, and it does not end the add-on. The add-on ends when you buy the plan, at the end of the trial or before.
  • An add-on you ordered but did not pay for is cancelled with its invoice, and nothing is credited.
  • The credit is the add-on's price for the whole days left in the period you paid for, rounded down to the cent. A $4.50 add-on with 10 of 30 days left credits $1.50.
  • POST /account/plan/preview for Pro or Business says so before you choose, in server_access as {"ends": true, "credit": "1.50"} (Preview a plan).
  • Moving back to Free does not bring the add-on back. Your instances, game servers and databases keep running and bill by use, and a new one needs Server access again (Moving to a smaller plan).

Extra ports and databases can also go in the order that creates a server. Put each one in the order's addons, as Add-ons in the order describes, with its product_id and a quantity of up to 20:

Shell
curl -X POST https://api.coritan.com/api/v1/services/order \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": 12,
    "pricing_id": 34,
    "hostname": "survival-smp",
    "config": {"location": "fra", "name": "survival-smp", "specialization_slug": "minecraft-paper"},
    "addons": [{"product_id": 88, "quantity": 3}]
  }'
  • GET /products/?product_group=addons lists the add-on products. Each one's addon block has its kind from What you can add.
  • Leave out pricing_id and config. The add-on takes the server's billing cycle.
  • List each add-on once. One service holds its whole quantity.
  • The first invoice charges a whole billing cycle of the add-on, because the server starts its first cycle with it. A promo code in the order takes nothing off add-ons.
  • When the order cannot take an add-on, it refuses the whole order and creates nothing.

A capacity add-on needs the service it goes on, so never order one on its own.

Price an order before you place it

Section titled Price an order before you place it

POST /checkout/quote takes the body of an order and answers what it would cost, without placing it. It works for any order, with or without add-ons and a promo code:

Shell
curl -X POST https://api.coritan.com/api/v1/checkout/quote \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": 12,
    "pricing_id": 34,
    "hostname": "survival-smp",
    "config": {"location": "fra", "name": "survival-smp", "specialization_slug": "minecraft-paper"},
    "addons": [{"product_id": 88, "quantity": 3}],
    "promo_code": "SPRING25"
  }'

This example is the answer for an order that keeps a flat price, such as a server that a brand's customer orders. Its code gives 25% off the first 3 invoices:

JSON
{
  "lines": [
    {"label": "CX2", "amount": "3.99", "cycle": "monthly", "kind": "recurring"},
    {"label": "Extra Port, +3 ports", "amount": "1.50", "cycle": "monthly", "kind": "addon"}
  ],
  "subtotal": "5.49",
  "discount": "1.00",
  "due_now": "4.49",
  "requires_payment": true,
  "currency": "USD",
  "renews": [
    {"label": "CX2", "amount": "2.99", "cycle": "monthly"},
    {"label": "Extra Port, +3 ports", "amount": "1.50", "cycle": "monthly"}
  ],
  "promo": {
    "valid": true,
    "code": "SPRING25",
    "message": "SPRING25 applied: 25% off the first 3 invoices.",
    "reason": null,
    "summary": "25% off the first 3 invoices",
    "duration": "repeating",
    "cycles": 3
  }
}
lines
The lines of the order's first invoice. kind is recurring for the product you order, setup for its setup fee, and addon for anything bought with it. Each floating IP or Shield Custom Profile that your account plan would pay for has its own line, with an amount of 0.00 and a label that adds , included with your plan to the product's name, such as IPv4 Address, included with your plan. This holds when it is the order itself and when it is an add-on. Coritan waives its setup fee, so the quote has no setup fee line for it.
discount and due_now
What the promo code takes off the first invoice, and what is left to pay before the order starts. When you place the order, Coritan takes that from your credit first (How the first payment works). When nothing is due first, because the order costs nothing or your account is billed in arrears, due_now is 0.00 and requires_payment is false.
renews
What each renewal charges. When the code also covers renewals, the product's line shows the price after its discount. The code covers as many invoices as promo.cycles says, the first one included.
promo
null when the order has no promo_code. A code the order cannot use does not refuse the quote: valid is false, and reason is one of the words under Use a promo code.

Each code the quote refuses counts as one check towards the limit on POST /billing/promo/validate, which is 30 checks in ten minutes. Once your account reaches it, reason is rate_limited for every code. Wait a few minutes, then quote again. A code the quote accepts counts nothing.

The quote refuses what the order would refuse, with the same status and message (Troubleshooting and Order a service). It leaves out only the checks made as an order is placed: those on an order that costs $0, the same order sent twice, and a floating IP order's idempotency_key. A quote holds nothing for you, and the order checks everything again.

A Cloud Compute instance, a game server, a database or a web deployment ordered on your own account is billed by use (How usage billing works). Its quote has no line for the product, because the order has no price of its own, and it adds four fields. This answer is for a cx2 server ordered with no add-ons and no promo code, and it is shortened:

JSON
{
  "lines": [],
  "subtotal": "0.00",
  "due_now": "0.00",
  "requires_payment": false,
  "billing_mode": "usage",
  "estimate": {
    "basis": "server",
    "usage": {"hourly_idle": "0.0070", "hourly_typical": "0.0100", "hourly_max": "0.0370", "monthly_idle": "5.11", "monthly_typical": "7.30", "monthly_max": "27.01", "disk_monthly": "0.73"},
    "included_monthly": {"egress_gb_na_eu": "1000", "egress_gb_oceania": "500", "egress_gb_other": "500"},
    "sample": null
  },
  "paid_plan": {"required": false, "price": "4.50", "addon_slug": "addon-compute-paid"},
  "deposit": {"required": false, "minimum": "10.00"}
}
billing_mode
usage when the order is billed by use. It is null for an order that keeps a flat price.
estimate
What the order is expected to cost. For a server, basis is server and usage holds the cost of one hour and of a 730-hour month at no CPU use, at 10% and at full use, before the included amounts. For a web deployment, basis is web, usage is null, and sample gives the bill of a small workload after the free amounts (How App Deployment is billed). included_monthly lists the free amounts of the order's pool.
paid_plan
required is true when the order needs Server access and the account has none. The order is refused with 402 until it has it, unless the order sends include_paid_plan, which adds Server access to the order. price and addon_slug name the add-on (Add Server access).
deposit
required is true when the order runs an instance on a prepaid account that has not added the first deposit. The order is refused with 403 until it has. minimum is the amount. A static site and an account billed by invoice need none.

due_now counts only what the order puts on its first invoice. The instance, server or deployment adds nothing to it.

When a service cannot take an add-on, adding it answers 422 with {"detail": {"errors": ["<message>"]}}. The list shows the same message as the add-on's reason_unavailable, and an order or a quote gives it when the new server cannot take the add-on:

Message Cause
Add-ons go on an active server, and this server is suspended. The service is not active. Add the add-on once it is.
This server is set to end, so it takes no new add-ons. You cancelled the service at the end of its term.
Extra Port goes on an App Deployment server. The add-on is for another kind of service. Choose one from this service's available list.
Extra Mailbox goes on the email your plan includes. Extra mailboxes go only on an included service, so no order can take them either.
Extra Object Storage 250 GB is no longer sold. Services already on it keep running and renewing. The storage add-on is no longer sold. One you already have keeps working, and pay as you go storage costs less (The storage add-on).
This server's plan already has unlimited databases. The plan sets no limit to raise.
This server already has the most extra ports one server takes. The service has 20 units of that kind.
Extra Port has no price that renews every week, as this server does. The add-on is not sold on the service's billing cycle.
Extra Port has no price that renews every hour, as this server does. A server billed by the hour at a flat price renews every hour, and the capacity add-ons have no hourly price. Such a server takes none. A server billed by use is different: its add-ons renew every month (Add-ons on a service billed by use).
Extra Port has no monthly price, so it cannot be bought for this server. The add-on has no monthly price, and a service billed by use needs one.
Weekly Instance Backups costs 20% of this instance's price, and this instance has none. The instance's size has no monthly list price to take a share of.
Extra Backup Slots is not on sale yet. Extra Backup Slots cannot be added yet. Take snapshots instead, or add automatic backups.
This server belongs to a storefront's customer. Add-ons for it are bought in that storefront's portal. The server was bought from a storefront. Its owner adds add-ons there.
This server already has automatic backups. The server or instance has an automatic backups add-on already.
This instance has weekly automatic backups. Remove them first to switch to daily. An instance takes one of the two. Remove the one it has, then add the other once the first ends.
Your Pro plan includes automatic backups on every server. Your plan already takes a server's automatic backups, so it needs no add-on.
Websites Pack goes on your account rather than on one service. Order it on its own. Order a websites pack with POST /services/order.

Adding an add-on can also answer 422 for what the request asks:

Message Cause
This server takes 3 more ports. Set quantity to a number from 1 to 3. quantity is more than the service has room for.
Extra Port renews with this server, every month. Leave billing_cycle out or set it to monthly. billing_cycle is not the service's cycle.
Extra Port renews every month on its own, because this server is billed by use. Leave billing_cycle out or set it to monthly. billing_cycle is not monthly, on a service billed by use.

An order or a quote can also answer 422 with one of these:

Message Cause
Extra Port goes on an App Deployment server. Add it to that service, or to the order that creates the service. The order is for the add-on alone.
… goes on a server, and only a template deployment has one. Order it with a template deployment, or on its own. An App Deployment order of a kind other than template names a floating IP, a DDoS Shield profile or Snapshot Storage in addons. Only the order of a server or a database takes them.
List Extra Port once and set its quantity to the number you want. addons names the same add-on twice.
Extra Port renews with CX2, so it takes the price for the same billing cycle. Leave pricing_id out. The entry has a pricing_id for another cycle.
Extra Port takes no config. Leave config out. The entry has a config.

Other answers when you add an add-on:

404 with Service not found, or 403 with Access denied
No service has that service_ref, or it belongs to another account.
404 with There is no product with id 99. Choose an add-on from this service's list.
product_id is wrong. Take it from available.
422 with promo beside errors
The promo code cannot be used on this add-on. promo is one of the reason words in Use a promo code. Send the request again without promo_code to pay the full price.
429 with "error": "rate_limited"
Your account added or removed add-ons 20 times in an hour. retry_after_seconds and the Retry-After header give the length of the window.

Removing an add-on can answer with one of these. A 422 holds its message in {"detail": {"errors": [...]}}, and the others hold it in detail:

Status Message Cause
404 This server has no add-on 2231. addon_ref is not an add-on of this service. Take the id from attached.
422 IPv4 Address is a service of its own. Cancel it from its own page. A product bought with the service ends when you cancel it.
409 This add-on has already been removed. The add-on has ended, or is ending now.
409 This add-on is being applied. Remove it in a moment. Its invoice was just paid, and Coritan is applying it.
409 This add-on already ends on October 14, 2026. Remove it now with when=now. You removed it at the end of the term already.
409 You have 12 mailboxes, and your plan allows 10 without this add-on. Delete 2 first, then remove it. The mailboxes you have need the add-on.

API operations on this page

MethodPathWhat it does
GET/api/v1/services/{service_ref}/addonsThe add-ons on one of your services, and the ones you can add
POST/api/v1/services/{service_ref}/addonsAdd a capacity add-on to one of your active services
POST/api/v1/services/{service_ref}/addons/previewWhat adding an add-on to one of your services would charge
DELETE/api/v1/services/{service_ref}/addons/{addon_ref}Remove a capacity add-on from one of your services
POST/api/v1/checkout/quoteWhat an order would cost, without placing it