# Client API: Game Shield

> Join addresses on the platform's join domain: names, branding and custom domains.

Source: https://www.coritan.com/docs/api/reference/client/game-shield/

Join addresses on the platform's join domain: names, branding and custom domains.

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](https://api.coritan.com/docs).

## Operations

| Method | Path | Summary |
| --- | --- | --- |
| POST | [`/api/v1/gameproxy/availability`](#op-post-api-v1-gameproxy-availability) | Claim check on the write primary so create/delete races cannot lie |
| POST | [`/api/v1/gameproxy/name-suggestions`](#op-post-api-v1-gameproxy-name-suggestions) | Name suggestions |
| GET | [`/api/v1/gameproxy/policy`](#op-get-api-v1-gameproxy-policy) | Storefront-facing effective policy (auto-provision + base domain) |
| GET | [`/api/v1/gameproxy/routes`](#op-get-api-v1-gameproxy-routes) | List my routes |
| POST | [`/api/v1/gameproxy/routes`](#op-post-api-v1-gameproxy-routes) | A join address on the platform's domain for one of the account's own servers |
| PATCH | [`/api/v1/gameproxy/routes/{route_id}`](#op-patch-api-v1-gameproxy-routes-route-id) | Update my route branding |
| GET | [`/api/v1/gameproxy/routes/{route_id}/custom-domain`](#op-get-api-v1-gameproxy-routes-route-id-custom-domain) | Vanity CNAME state for this route's join address |
| POST | [`/api/v1/gameproxy/routes/{route_id}/custom-domain`](#op-post-api-v1-gameproxy-routes-route-id-custom-domain) | Link route custom domain |
| PATCH | [`/api/v1/gameproxy/routes/{route_id}/custom-domain`](#op-patch-api-v1-gameproxy-routes-route-id-custom-domain) | Show the vanity hostname, or the hosted one, in the public server list |
| DELETE | [`/api/v1/gameproxy/routes/{route_id}/custom-domain`](#op-delete-api-v1-gameproxy-routes-route-id-custom-domain) | Unlink route custom domain |
| POST | [`/api/v1/gameproxy/routes/{route_id}/custom-domain/verify`](#op-post-api-v1-gameproxy-routes-route-id-custom-domain-verify) | Check the CNAME now rather than waiting for the next maintenance pass |

### Claim check on the write primary so create/delete races cannot lie {#op-post-api-v1-gameproxy-availability}

`POST /api/v1/gameproxy/availability`

Claim check on the write primary so create/delete races cannot lie.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_id` | query | integer or null | no |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `subdomain` | string | yes |
| `base_domain` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Name suggestions {#op-post-api-v1-gameproxy-name-suggestions}

`POST /api/v1/gameproxy/name-suggestions`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_id` | query | integer or null | no |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `count` | integer | no |
| `base_domain` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Storefront-facing effective policy (auto-provision + base domain) {#op-get-api-v1-gameproxy-policy}

`GET /api/v1/gameproxy/policy`

Storefront-facing effective policy (auto-provision + base domain).

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_id` | query | integer or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### List my routes {#op-get-api-v1-gameproxy-routes}

`GET /api/v1/gameproxy/routes`

The user's game routes, each with ``custom_domain``: the answer
``GET /gameproxy/routes/{id}/custom-domain`` gives for it, read for the
whole list at once. A route bound to a server another account holds shows
no custom domain, since that one belongs to the server's account.

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

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |

### A join address on the platform's domain for one of the account's own servers {#op-post-api-v1-gameproxy-routes}

`POST /api/v1/gameproxy/routes`

A join address on the platform's domain for one of the account's own servers.

``upstream_service_id`` names a service the account holds and has not
ended. Another account's service, a brand customer's and an unknown id
all answer 404 ``Server not found`` before anything is created.
``upstream_port`` may name another port that server answers on (422
lists them). ``upstream_host`` answers 422: a server hosted elsewhere is
an External Server. ``org_id`` answers 422, since a brand's join
addresses come with that brand's orders. ``base_domain`` must be a join
domain the platform offers (422 lists them), and is the platform's own
when left out. The rules live in ``check_customer_route`` because the
admin console's route create shares ``RouteCreate`` and is not held to
them.

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

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `subdomain` | string | yes |
| `base_domain` | string or null | no |
| `display_name` | string or null | no |
| `mode` | string | no |
| `upstream_service_id` | integer or null | no |
| `upstream_host` | string or null | no |
| `upstream_port` | integer or null | no |
| `location_id` | integer or null | no |
| `proxy_protocol` | boolean | no |
| `real_ip` | boolean or null | no |
| `description` | string or null | no |
| `org_id` | integer or null | no |
| `online_motd` | string or null | no |
| `offline_motd` | string or null | no |
| `favicon` | string or null | no |
| `version_name` | string or null | no |
| `status_cache_ttl_seconds` | integer or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Update my route branding {#op-patch-api-v1-gameproxy-routes-route-id}

`PATCH /api/v1/gameproxy/routes/{route_id}`

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

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `route_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `online_motd` | string or null | no |
| `offline_motd` | string or null | no |
| `favicon` | string or null | no |
| `version_name` | string or null | no |
| `display_name` | string or null | no |
| `description` | string or null | no |
| `status_cache_ttl_seconds` | integer or null | no |
| `clear_favicon` | boolean | no |
| `clear_online_motd` | boolean | no |
| `clear_offline_motd` | boolean | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Vanity CNAME state for this route's join address {#op-get-api-v1-gameproxy-routes-route-id-custom-domain}

`GET /api/v1/gameproxy/routes/{route_id}/custom-domain`

Vanity CNAME state for this route's join address.

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

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `route_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Link route custom domain {#op-post-api-v1-gameproxy-routes-route-id-custom-domain}

`POST /api/v1/gameproxy/routes/{route_id}/custom-domain`

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

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `route_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `domain` | string | yes |
| `subdomain` | string | no |
| `include_in_list` | boolean | no |

#### Responses

| 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 {#op-patch-api-v1-gameproxy-routes-route-id-custom-domain}

`PATCH /api/v1/gameproxy/routes/{route_id}/custom-domain`

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

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

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `route_id` | path | integer | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `include_in_list` | boolean | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Unlink route custom domain {#op-delete-api-v1-gameproxy-routes-route-id-custom-domain}

`DELETE /api/v1/gameproxy/routes/{route_id}/custom-domain`

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

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `route_id` | path | integer | yes |

#### Responses

| 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 {#op-post-api-v1-gameproxy-routes-route-id-custom-domain-verify}

`POST /api/v1/gameproxy/routes/{route_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>`.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `route_id` | path | integer | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |
