# Manage an external server's plan

> See what an external server costs, change its plan or cancel it from its Billing tab.

Source: https://www.coritan.com/docs/proxies/external-servers/billing/

In the dashboard:

- /dashboard/proxies/external/…/billing: https://www.coritan.com/dashboard/proxies/external

An external server is a plan that you pay for each billing cycle, like any other service. Its **Billing** tab shows what the plan costs and when it renews, lists what has happened to the external server, and lets you change the billing cycle or cancel. The plan decides whether the join address works: while the plan is suspended, the join address does not resolve, and when the plan ends, Coritan deletes the join address ([The plan behind the join address](/docs/proxies/external-servers/#the-plan-behind-the-join-address)).

## Before you begin

- Sign in to the [dashboard](https://www.coritan.com/dashboard).
- A plan change can raise an invoice, which Coritan pays from your credit first. [Add credit](/docs/billing/add-credit/) or keep a [payment method](/docs/billing/payment-methods/) ready.

## Open the Billing tab

1. Go to the **Game** tab of [Edge Proxy](https://www.coritan.com/dashboard/proxies/game) and open the external server.
2. Select the **Billing** tab.

The tab has three parts:

**Current plan**
: The **Product**, the **Plan**, the **Price**, the **Status**, the **Next renewal**, when Coritan **Set up** the external server, and its **Service ID**. **Change plan…** moves it to another billing cycle.

**Activity**
: The external server's history, newest first: **When** it happened, the **Event**, the **Details** and **By** whom. It lists setup, plan changes, and each change you make to the connection or the custom domain.

**Cancel service**
: Ends the external server ([Cancel the external server](#cancel-the-external-server)).

## Change the plan

The External Server plan has a price for each billing cycle it sells, such as monthly and annually. Changing the plan moves the external server to another billing cycle.

1. On the **Current plan** card, select **Change plan…**.
2. In **New plan**, choose the billing cycle. Each entry shows its price.
3. Select **Preview** to see what the switch costs today.
4. Select **Apply change**.

[Change a service's plan](/docs/billing/change-plan/) explains the preview. Read [How the switch is billed](/docs/billing/change-plan/#how-the-switch-is-billed) before you move to a longer billing cycle, because such a switch charges the new plan's full price at once.

When the new plan applies, Coritan also applies the connection settings from your original order again. If you changed the connection since you ordered, check the **Connection** tab afterwards and save your settings again ([Change the connection](/docs/proxies/external-servers/connect-an-external-server/#change-the-connection)).

## Cancel the external server

> [!CAUTION]
> When the external server ends, Coritan deletes its join address and unlinks its custom domain, and anyone can then take the name. Players can no longer join through it. Coritan does not touch your own server.

1. On the **Cancel service** card, select **Cancel service…**. The **Cancel this service?** dialog opens and says that the join address stops resolving.
2. Under **When**, choose **At the end of the current term** to keep the join address working until the date the dialog shows, or **Immediately** to end it now. Coritan does not refund unused time.
3. Type `cancel` and select **Cancel service**.

At the end of the term, the message reads `Scheduled for end-of-term termination; service remains active until then`, and the tab shows **Cancellation scheduled** with the end date. The join address keeps working until then. When you cancel immediately, the message reads `Immediate termination queued`. The status becomes `pending_termination` while Coritan removes the external server, then `terminated`.

Either way, Coritan cancels every unpaid invoice for the external server. [Cancel a service](/docs/billing/cancel-a-service/) covers the details, and you cannot undo a cancellation yourself.

An external server that you ordered but never paid for stays on your account with the status `pending`. Cancel it with **Immediately**, and it ends at once with `Service cancelled before provisioning` ([Orders you have not paid for](/docs/billing/cancel-a-service/#orders-you-have-not-paid-for)).

## When the plan is suspended

When an invoice for the external server stays unpaid past its due date, Coritan suspends the plan. The **Billing** tab then shows **Suspended** with the reason. While the plan is suspended:

- the join address does not resolve, so players cannot join;
- you cannot change the connection or test it;
- the badge in the header shows `Suspended`.

Pay the open invoice, and Coritan lifts the suspension ([Failed payments and suspended services](/docs/billing/failed-payments/#a-service-is-suspended)). If the invoice stays unpaid, Coritan deletes the external server as if you had cancelled it ([An email says the service will be deleted](/docs/billing/failed-payments/#an-email-says-the-service-will-be-deleted)).

## Result

The **Current plan** card shows the plan and price you chose, or the **Cancellation scheduled** alert shows when the external server ends. The **Activity** table lists the plan change or the cancellation.

## Troubleshooting

`No other plan to switch to`
: The plan has no other billing cycle on sale, so **Change plan…** does not appear.

`Service is not active`
: The plan is suspended, still being set up, or has ended. Pay its open invoice to lift a suspension, then try again.

**Could not preview the change** or **Could not change the plan**
: The message under it gives the reason. [Change a service's plan](/docs/billing/change-plan/#troubleshooting) lists the reasons.

The connection changed back after a plan change
: The plan change applied the connection settings from your original order again. Open the **Connection** tab, set the address, port and other settings again, and select **Save changes**.

The **Cancel service** card is missing
: A cancellation is already scheduled, or the external server has ended. The **Cancellation scheduled** alert shows the end date.

`Service already scheduled for end-of-term termination`
: You already cancelled the external server at the end of its term. To end it sooner, [contact support](/docs/support/conversations/).

**Could not cancel the service**
: The cancellation failed. The message beside it gives the reason. Try again, or [contact support](/docs/support/conversations/).

You want to keep an external server that is scheduled to end
: [Contact support](/docs/support/conversations/) before the end date.

The join address stopped resolving
: The plan is suspended, or it has ended. Check the **Status** on the **Current plan** card, and pay any open invoice ([Pay an invoice](/docs/billing/invoices/)).

## Related

- [How external servers work](/docs/proxies/external-servers/)
- [Change a service's plan](/docs/billing/change-plan/)
- [Cancel a service](/docs/billing/cancel-a-service/)
- [Pay an invoice](/docs/billing/invoices/)
- [Failed payments and suspended services](/docs/billing/failed-payments/)

## With the API

The external server's `service_id` from the external servers API is its service ID, which the services API takes as `service_ref`.

Read the plan with [`GET /services/{service_ref}`](/docs/api/reference/client/services/#op-get-api-v1-services-service-ref), and the **Activity** table with [`GET /services/{service_ref}/events`](/docs/api/reference/client/services/#op-get-api-v1-services-service-ref-events) ([Manage your services](/docs/get-started/services/#with-the-api)):

```bash
curl https://api.coritan.com/api/v1/services/1203 \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

The answer's `amount` is the price per billing cycle, `next_due_date` the next renewal, and `termination_date` the end date once a cancellation is scheduled. An event of the type `config_changed` records a change to the connection or the custom domain.

Preview a plan change with [`GET /services/{service_ref}/upgrade-preview`](/docs/api/reference/client/services/#op-get-api-v1-services-service-ref-upgrade-preview), and apply it with [`POST /services/{service_ref}/change-plan`](/docs/api/reference/client/services/#op-post-api-v1-services-service-ref-change-plan). Both take the new plan's `new_pricing_id` ([Change a service's plan](/docs/billing/change-plan/#with-the-api)).

Cancel with [`POST /services/{service_ref}/cancel`](/docs/api/reference/client/services/#op-post-api-v1-services-service-ref-cancel). `"immediate": false`, the default, ends the external server at the end of its term:

```bash
curl -X POST https://api.coritan.com/api/v1/services/1203/cancel \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"immediate": false, "reason": "Moving the server to another address"}'
```

```json
{
  "message": "Scheduled for end-of-term termination; service remains active until then",
  "immediate": false,
  "status": "active",
  "termination_date": "2026-10-01T00:00:00",
  "snapshot_taken": false
}
```

`keep_snapshot` has no effect on an external server. [Cancel a service](/docs/billing/cancel-a-service/#with-the-api) lists the errors.
