# Order a floating IP

> Order a single IPv4 address or a subnet from a region's pool, pay for it on the order's page, and follow or cancel an open order.

Source: https://docs.coritan.com/floating-ips/order-a-floating-ip/

In the dashboard:

- /dashboard/order/floating-ips: https://www.coritan.com/dashboard/order/floating-ips
- /dashboard/networking/orders: https://www.coritan.com/dashboard/networking/orders

Order a floating IP when you need an IP address that stays on your account as instances and servers come and go. The **Floating IPs** order page asks for the size and the region the address comes from, and can add a DDoS Shield profile to the same order. We hold an address for you while you pay, then assign it to your account.

To get addresses with a new instance or server, add them on its own order page instead: [Create an instance](/cloud-compute/create-an-instance/#add-products-to-the-order) takes up to four floating IPs, and [Order a server](/managed-containers/order-a-server/#add-products-to-the-order) takes one dedicated address.

## Before you begin

- Know which region your instance or server runs in. We announce a floating IP from its pool's region, so choose a pool in the same region. [IP pools and regions](/floating-ips/pools/) explains the pools.
- Credit on your account pays the first invoice when you place the order. Without enough credit, you pay the rest by card or PayPal on the page the order opens. To pay in one go, [add credit](/billing/add-credit/) first.

## Place the order

1. In the [dashboard](https://www.coritan.com/dashboard/networking), go to **Floating IPs** and select **Order floating IP**. You can also select the **Floating IPs** card on the **Order a service** page. Either way, the order page opens at `https://www.coritan.com/dashboard/order/floating-ips`.
2. Under **Size**, choose a single address, or a subnet when a server needs several. Each card shows its price for the billing cycle and any one-time setup fee. A size marked **Sold out** cannot be ordered right now.
3. If the sizes sell more than one billing cycle, choose one at the top of **Size**. A longer term names what it saves against paying monthly.
4. Under **Region**, choose a pool in the region where your instance or server runs. The pools are grouped by region, and each shows its airport code, such as `FRA`. We start with a pool in your own region. A pool marked **Sold out** has no address of this size left.
5. Under **Add-ons**, you can turn on the **DDoS Shield profile** card. It gives the address your own protection mode, firewall rules and packet rate limits, and goes on the same first invoice. Give it a **Profile name**, or we name it after the order, such as `Shield profile for #215`. Without a profile, the address keeps the scrubbing every address on the platform gets.
6. Check the summary under **Your order**. It lists the **Size** and the **Region**, each with **Change** beside it, then what we bill under **Billed** and the **Total**. The line under the total says how the first invoice will be paid.
7. If the button is greyed out, read the line under it. It names the first answer still missing, such as `Choose a region.`, and selecting it takes you to that section.
8. If a verification check appears above the button, complete it. It appears when the size costs nothing, even if the add-on costs money.
9. Select the button. It reads **Place order** when your credit pays the first invoice or your account is billed in arrears, **Place order and pay** when you pay on the next page, and **Order for free** when nothing in the order costs anything.

If we refuse the order, **Could not place the order** appears above the button with the reason, and your choices stay as they were. Otherwise the order's own page opens. When its title reads **Order placed, payment due**, pay under **Pay invoice**, as [Pay and follow the order](/get-started/order-a-service/#pay-and-follow-the-order) describes. If you leave without paying, the order waits on the **Orders** tab, as [Follow the order](#follow-the-order) describes.

To order a size from a particular pool, go to the **Pools** tab and select **Order** beside that size. The order page opens with the size and the pool chosen.

## Follow the order

The order's page follows the order until the address is assigned. The **Orders** tab lists the orders you have placed that do not have an address assigned yet, under **Open orders**. Each row shows the **Pool** with the size and region, the **Status**, when it was **Placed**, and **Open invoice** when it has one. **Refresh** reloads the list.

`Started`
: We are placing the order.

`Address held`
: We have reserved an address in the pool for you.

`Awaiting payment`
: The order has an invoice to pay. The address stays held.

`Provisioning`
: The invoice is paid and we are assigning the address to your account.

Under the status, the tab shows when the hold on the address expires, and an error when the last attempt failed. Pay before the hold expires. After that, we release the address back to the pool. We cancel an order whose invoice is still unpaid after two days, by default.

Once we assign the address, the order leaves the **Orders** tab and the floating IP appears on the **IPs** tab.

## Cancel an open order

You can cancel an order while it is `Started`, `Address held` or `Awaiting payment`.

1. On the **Orders** tab, select **Cancel order…** on the order's row.
2. Select **Cancel order**.

The held address goes back to the pool and we void the unpaid invoice. Once an order is `Provisioning`, you cannot cancel it here: wait until the floating IP appears on the **IPs** tab, then [cancel the floating IP](/floating-ips/billing/).

## Result

The floating IP appears on the **IPs** tab as `Unattached`. It is yours, DDoS Shield filters its traffic, and you can [attach it](/floating-ips/attach-and-detach/) to an instance or a server. A DDoS Shield profile ordered with it protects it as soon as both are ready.

## Troubleshooting

`This size is sold out`
: No pool has an address of this size left. Choose another size, or look at the **Pools** tab later. Pools refill as other customers release addresses.

`Choose a region.`
: Choose a pool under **Region** before you place the order.

**Could not load the pools**
: The list of pools did not load. Reload the page.

`Complete the verification check.`
: The size costs nothing, so the order needs the check above the button. Complete it, then place the order.

`No available addresses in the selected pool`
: The pool ran out while you were ordering. Choose another pool in the same region, or another size.

`An identical IP order is already in progress; retry in a moment`
: The same order is being placed from another tab or request. Wait a moment, then look for it on the **Orders** tab before you order again.

The order stays at `Awaiting payment`
: The invoice is not paid yet. Select **Open invoice** and pay it, as [Pay an invoice](/billing/invoices/) describes.

`Hold expired` under the status
: We released the address you were holding. Cancel the order and place a new one.

`This IP order can no longer be cancelled`
: The order is paid and we are assigning the address, or it has already ended. Once the floating IP appears on the **IPs** tab, [cancel it](/floating-ips/billing/) if you no longer want it.

`This IP is already provisioned`
: The address is already on your account. Cancel it from its **Billing** tab instead.

## Related

- [IP pools and regions](/floating-ips/pools/)
- [How subnets work](/floating-ips/subnets/)
- [Attach and detach a floating IP](/floating-ips/attach-and-detach/)
- [Order and use a custom profile](/ddos-shield/custom-profiles/)
- [Pay an invoice](/billing/invoices/)

## With the API

An order goes through `POST /api/v1/services/order`, the endpoint every product uses. Gather three values first.

1. Find the plan. `GET /api/v1/products/` lists the catalogue. Floating IP plans have `module_name` set to `ip`, and each has a list of `pricing` rows. A row's `id` is the `pricing_id` for one billing period at its `price`.
2. Find a pool with stock of the size you want, as [IP pools and regions](/floating-ips/pools/) describes:

   ```bash
   curl "https://api.coritan.com/api/v1/client/ips/pools?prefix_len=29&region=fra" \
     -H "Authorization: Bearer $CORITAN_TOKEN"
   ```

3. Choose an idempotency key for the order: 1–64 letters, digits, `.`, `_`, `:` or `-`. Use a new key for each new order.

Then place the order:

```bash
curl -X POST https://api.coritan.com/api/v1/services/order \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": 31,
    "pricing_id": 87,
    "config": {"pool_id": 4, "prefix_len": 29},
    "idempotency_key": "subnet-fra-2026-09-25"
  }'
```

`config.pool_id` is required. `config.prefix_len` takes the plan's size when you leave it out, and any other size is refused. With `"allow_pool_fallback": true` in `config`, we take the address from any other pool with stock when the chosen one has none left, and that pool can be in another region.

To add a DDoS Shield profile, list it in `addons`, as [Add-ons in the order](/get-started/order-a-service/#add-ons-in-the-order) describes. It protects the address this order buys. An order for a plan that costs $0 also needs a `turnstile_token` while the verification check is on, even with a paid profile in it.

```json
{
  "service": {"id": 215, "status": "pending"},
  "addons": [],
  "invoice_id": 5120,
  "requires_payment": true,
  "checkout_available": true,
  "amount_due": "32.00",
  "message": "Invoice created; pay to start provisioning"
}
```

The response is shortened here. `service.id` becomes the floating IP's `service_id` once the address is assigned. When your credit balance covers the invoice, we pay it from there: `requires_payment` is `false` and `message` is `Payment applied from credit balance; provisioning started`. When `requires_payment` is `true`, pay invoice `invoice_id`, as [Pay an invoice](/billing/invoices/) describes.

Sending the same `idempotency_key` again returns the same order instead of a second one. Once the order has an invoice, the replay answers with `message` set to `Replayed existing IP order`. While the first request is still running, it answers `409` with `An identical IP order is already in progress; retry in a moment`. A key whose order was cancelled, failed or expired starts a new order.

A second order for the same plan and billing cycle within two minutes of the first, while the first is still pending, returns the first order with `message` set to `Order already submitted`, whatever key it sends. Wait two minutes before you order the same plan again.

Leaving out the key answers `422` with `idempotency_key is required for IP orders`, and a key in the wrong format answers `422` with a message that starts `idempotency_key must be`. Leaving out the pool answers `422` with `pool_id is required`. A `prefix_len` the plan does not sell answers `422` with a message that ends `Leave prefix_len out or set it to 29.` for a plan that sells `/29` subnets. A pool with nothing left answers `409` with `No available addresses in the selected pool`.

`GET /api/v1/client/ips/orders` lists your open orders as `items`, newest first, up to 25. Each has its `idempotency_key`, `status`, `pool_id`, `prefix_len`, `version`, `service_id`, `invoice_id`, `hold_expires_at` and `last_error`. `status` is `started`, `held`, `invoiced` or `provisioning`, the four statuses the **Orders** tab shows.

`GET /api/v1/client/ips/orders/{idempotency_key}` returns one order in any status. Besides the open statuses, `status` can be `active` once the address is assigned, or `cancelled`, `failed` or `expired`. An order with an invoice also carries `invoice_number`, `total`, `currency`, `due_date` and `invoice_status`. An unknown key answers `404` with `IP order not found`.

`POST /api/v1/client/ips/orders/{idempotency_key}/cancel` cancels an open order and returns it:

```bash
curl -X POST https://api.coritan.com/api/v1/client/ips/orders/subnet-fra-2026-09-25/cancel \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

An order that is `provisioning` or has ended answers `409` with `This IP order can no longer be cancelled`, and one whose address is already assigned answers `409` with `This IP is already provisioned`.

The [Floating IPs API reference](/api/reference/client/floating-ips/#op-get-api-v1-client-ips-orders) and the [services API reference](/api/reference/client/services/#op-post-api-v1-services-order) list every field.

## API

- `GET /api/v1/client/ips/orders`: Open platform IP order intents for resume after login or a new tab (https://docs.coritan.com/api/reference/client/floating-ips/#op-get-api-v1-client-ips-orders)
- `GET /api/v1/client/ips/orders/{idempotency_key}`: Get my IP order (https://docs.coritan.com/api/reference/client/floating-ips/#op-get-api-v1-client-ips-orders-idempotency-key)
- `POST /api/v1/client/ips/orders/{idempotency_key}/cancel`: Cancel my IP order (https://docs.coritan.com/api/reference/client/floating-ips/#op-post-api-v1-client-ips-orders-idempotency-key-cancel)
- `POST /api/v1/services/order`: Order a platform service, and any add-ons bought with it (https://docs.coritan.com/api/reference/client/services/#op-post-api-v1-services-order)
