Skip to content
Coritan Docs

Client API: External Servers

Put a server you host yourself behind Game Shield: connection, tests and branding.

View as Markdown

Put a server you host yourself behind Game Shield: connection, tests and branding.

Base URL: https://api.coritan.com/api/v1. Paths below are complete.

To try these requests in the browser, open the interactive Client API reference.

Method Path Summary
GET /api/v1/client/external-servers List external servers
GET /api/v1/client/external-servers/regions Regions a new or existing external server can be served from
GET /api/v1/client/external-servers/{service_id} Get external server
PATCH /api/v1/client/external-servers/{service_id} Change where players are forwarded, how, and through which region
GET /api/v1/client/external-servers/{service_id}/custom-domain Get custom domain
POST /api/v1/client/external-servers/{service_id}/custom-domain Link custom domain
PATCH /api/v1/client/external-servers/{service_id}/custom-domain Show the vanity hostname, or the hosted one, in the public server list
DELETE /api/v1/client/external-servers/{service_id}/custom-domain Unlink custom domain
POST /api/v1/client/external-servers/{service_id}/custom-domain/verify Check the CNAME now rather than waiting for the next maintenance pass
POST /api/v1/client/external-servers/{service_id}/test Status-ping the backend now and record the answer

GET /api/v1/client/external-servers

Authentication: an access token, sent as Authorization: Bearer <token>.

Status Meaning
200 Success.

Regions a new or existing external server can be served from

Section titled Regions a new or existing external server can be served from

GET /api/v1/client/external-servers/regions

Regions a new or existing external server can be served from.

Authentication: an access token, sent as Authorization: Bearer <token>.

Status Meaning
200 Success.

GET /api/v1/client/external-servers/{service_id}

Authentication: an access token, sent as Authorization: Bearer <token>.

Name In Type Required
service_id path integer yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

Change where players are forwarded, how, and through which region

Section titled Change where players are forwarded, how, and through which region

PATCH /api/v1/client/external-servers/{service_id}

Change where players are forwarded, how, and through which region.

Send only the fields to change. For a Java server, bedrock_bridge and geyser_port control Geyser, which lets Bedrock players join at the same join name: a geyser_port turns it on at that port, bedrock_bridge: true alone uses port 19132, and geyser_port: null or bedrock_bridge: false turns it off. The port must differ from the Java port and be between 1024 and 65535, and a Bedrock server takes none. A refusal answers 422 with the reason in detail.errors. The reply is the server, with geyser set to what Geyser answered when a Geyser or address change just ran a check, and null otherwise.

Authentication: an access token, sent as Authorization: Bearer <token>.

Name In Type Required
service_id path integer yes

application/json (required)

Field Type Required Description
upstream_host string or null no
upstream_port integer or null no
proxy_protocol boolean or null no
real_ip boolean or null no
mode string or null no
bedrock_bridge boolean or null no Java only. true turns Geyser on (port 19132 unless geyser_port is set), false turns it off.
geyser_port integer or null no Java only. The port Geyser's built-in NetherNet signalling listens on, TCP and UDP, from 1024 to 65535 and different from the Java port. A number turns Geyser on. null turns it off.
location_id integer or null no
display_name string or null no
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

GET /api/v1/client/external-servers/{service_id}/custom-domain

Authentication: an access token, sent as Authorization: Bearer <token>.

Name In Type Required
service_id path integer yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

POST /api/v1/client/external-servers/{service_id}/custom-domain

Authentication: an access token, sent as Authorization: Bearer <token>.

Name In Type Required
service_id path integer yes

application/json (required)

Field Type Required
domain string yes
subdomain string no
include_in_list boolean no
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

Show the vanity hostname, or the hosted one, in the public server list

Section titled Show the vanity hostname, or the hosted one, in the public server list

PATCH /api/v1/client/external-servers/{service_id}/custom-domain

Show the vanity hostname, or the hosted one, in the public server list. This is the same switch the org portal has, for platform-direct customers.

Authentication: an access token, sent as Authorization: Bearer <token>.

Name In Type Required
service_id path integer yes

application/json (required)

Field Type Required
include_in_list boolean yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

DELETE /api/v1/client/external-servers/{service_id}/custom-domain

Authentication: an access token, sent as Authorization: Bearer <token>.

Name In Type Required
service_id path integer yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

Check the CNAME now rather than waiting for the next maintenance pass

Section titled Check the CNAME now rather than waiting for the next maintenance pass

POST /api/v1/client/external-servers/{service_id}/custom-domain/verify

Check the CNAME now rather than waiting for the next maintenance pass.

Authentication: an access token, sent as Authorization: Bearer <token>.

Name In Type Required
service_id path integer yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

Status-ping the backend now and record the answer

Section titled Status-ping the backend now and record the answer

POST /api/v1/client/external-servers/{service_id}/test

Status-ping the backend now and record the answer.

Returns probe (what the Java or Bedrock server answered), state (online or offline) and geyser. geyser is null for a server with no Geyser port. Otherwise it is {reachable, transport, message}: reachable is true when Geyser answered the edge's NetherNet status request, transport is nethernet or raknet (null when nothing answered), and message says what to fix when it is not reachable. A Geyser that does not answer does not change state.

Authentication: an access token, sent as Authorization: Bearer <token>.

Name In Type Required
service_id path integer yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.