Run Agones Fleets, GameServers and FleetAutoscalers with no cluster to manage. Apply the same YAML you would give kubectl apply -f with ApplyManifests, and Plany runs the game servers; your game keeps its Agones SDK. Allocate a ready server for a match with AllocateGameServer, or point a matchmaker that already uses Agones' own allocation client at this endpoint with a Plany credential — the Agones allocation.AllocationService is served here too.
Applies manifests: creates what does not exist, updates what changed, and leaves the rest.
All or nothing. Every document is parsed and checked before anything is written, so a file whose third document is refused changes nothing — a half-applied file is a fleet with no autoscaler, which is worse than an error.
Refusals name the document and the field, e.g.
Fleet "lobby": spec.template.spec.containers[1]: one container per game server.
parentstringRequiredprojects/{project}/locations/{location}.
manifestsstringRequiredOne or more YAML or JSON documents: Fleet, FleetAutoscaler and
GameServer. A GameServerAllocation is refused here and belongs to
AllocateGameServer, because applying one is an action rather than a
declaration and applying the same file twice would allocate twice.
validate_onlyboolParse, check and report what would change, and write nothing.
vpcstringThe private network the fleets and game servers in these manifests run on. Empty is the project's default network.
A request field rather than a manifest field: an Agones manifest has no
notion of a network, and the importer refuses fields it does not know
rather than inventing them. Fixed once a fleet exists — applying the same
fleet with a different network is refused rather than moving its servers.
Requires vpc.vpcs.use on the network.
grpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "parent": "", "manifests": "" }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/ApplyManifests{ "objects": [ { "kind": "", "name": "", "action": "ACTION_CREATED", "warnings": [ "" ] } ]}grpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "name": "projects//locations//fleets/my-fleet" }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/GetFleet{ "name": "projects//locations//fleets/my-fleet", "manifest": "", "namespace": "", "desired_replicas": 0, "image": "", "image_digest": "", "state": "STATE_PROVISIONING", "state_message": "", "error": {}, "status": { "replicas": 0, "ready_replicas": 0, "allocated_replicas": 0, "reserved_replicas": 0, "sleeping_replicas": 0, "outdated_replicas": 0 }, "game_server_group": "projects//locations//gameServerGroups/", "game": "games/my-game", "build": "builds/my-build", "generation": "0", "fleet_autoscaler": "projects//locations//fleetAutoscalers/my-fleet-autoscaler", "warnings": [ "" ], "vpc": "projects//locations//vpcs/", "labels": { "key": "" }, "create_time": "2026-10-04T12:00:00Z", "update_time": "2026-10-04T12:00:00Z", "etag": "W/\"1\""}parentstringRequiredpage_sizeint32page_tokenstringgrpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "parent": "", "page_size": 50 }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/ListFleets{ "fleets": [ { "name": "projects//locations//fleets/my-fleet", "manifest": "", "namespace": "", "desired_replicas": 0, "image": "", "image_digest": "", "state": "STATE_PROVISIONING", "state_message": "", "error": {}, "status": { "replicas": 0, "ready_replicas": 0, "allocated_replicas": 0, "reserved_replicas": 0, "sleeping_replicas": 0, "outdated_replicas": 0 }, "game_server_group": "projects//locations//gameServerGroups/", "game": "games/my-game", "build": "builds/my-build", "generation": "0", "fleet_autoscaler": "projects//locations//fleetAutoscalers/my-fleet-autoscaler", "warnings": [ "" ], "vpc": "projects//locations//vpcs/", "labels": { "key": "" }, "create_time": "2026-10-04T12:00:00Z", "update_time": "2026-10-04T12:00:00Z", "etag": "W/\"1\"" } ], "next_page_token": ""}Deletes a fleet and its game servers.
An allocated server is left to finish its match, up to the fleet's drain timeout, as Agones leaves one to finish when its fleet is deleted.
namestringRequiredgrpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "name": "projects//locations//fleets/my-fleet" }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/DeleteFleet{}namestringRequiredgrpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "name": "projects//locations//fleetAutoscalers/my-fleet-autoscaler" }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/GetFleetAutoscaler{ "name": "projects//locations//fleetAutoscalers/my-fleet-autoscaler", "manifest": "", "fleet": "projects//locations//fleets/my-fleet", "buffer_size": 0, "buffer_percent": 0, "min_replicas": 0, "max_replicas": 0, "state": "STATE_ACTIVE", "state_message": "", "warnings": [ "" ], "create_time": "2026-10-04T12:00:00Z", "update_time": "2026-10-04T12:00:00Z", "etag": "W/\"1\""}parentstringRequiredpage_sizeint32page_tokenstringgrpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "parent": "", "page_size": 50 }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/ListFleetAutoscalers{ "fleet_autoscalers": [ { "name": "projects//locations//fleetAutoscalers/my-fleet-autoscaler", "manifest": "", "fleet": "projects//locations//fleets/my-fleet", "buffer_size": 0, "buffer_percent": 0, "min_replicas": 0, "max_replicas": 0, "state": "STATE_ACTIVE", "state_message": "", "warnings": [ "" ], "create_time": "2026-10-04T12:00:00Z", "update_time": "2026-10-04T12:00:00Z", "etag": "W/\"1\"" } ], "next_page_token": ""}Deletes an autoscaler. Its fleet keeps the size it had and returns to
spec.replicas on its next apply, as in Agones.
namestringRequiredgrpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "name": "projects//locations//fleetAutoscalers/my-fleet-autoscaler" }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/DeleteFleetAutoscaler{}namestringRequiredgrpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "name": "projects//locations//gameServers/" }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/GetGameServer{ "name": "projects//locations//gameServers/", "manifest": "", "fleet": "projects//locations//fleets/my-fleet", "state": "STATE_CREATING", "sleeping": false, "address": "", "ports": [ { "name": "", "port": 0 } ], "labels": { "key": "" }, "annotations": { "key": "" }, "playpute_game_server": "projects//locations//gameServers/", "state_message": "", "create_time": "2026-10-04T12:00:00Z", "etag": "W/\"1\""}Lists game servers: every fleet's and every standalone one. fleet narrows
to one fleet's.
parentstringRequiredfleetstringprojects/{p}/locations/{l}/fleets/{f}: only that fleet's servers.
page_sizeint32page_tokenstringgrpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "parent": "", "page_size": 50 }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/ListGameServers{ "game_servers": [ { "name": "projects//locations//gameServers/", "manifest": "", "fleet": "projects//locations//fleets/my-fleet", "state": "STATE_CREATING", "sleeping": false, "address": "", "ports": [ { "name": "", "port": 0 } ], "labels": { "key": "" }, "annotations": { "key": "" }, "playpute_game_server": "projects//locations//gameServers/", "state_message": "", "create_time": "2026-10-04T12:00:00Z", "etag": "W/\"1\"" } ], "next_page_token": ""}Deletes a game server. A fleet's is replaced by its fleet, as in Agones.
namestringRequiredgrpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "name": "projects//locations//gameServers/" }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/DeleteGameServer{}Allocates a READY game server. See plany.playpute.v1.AllocateGameServer,
which this is.
parentstringRequiredselectorsrepeated GameServerSelectorTried in order. Empty matches any READY server in the project and region.
match_labelsmap<string, string>match_expressionsrepeated LabelSelectorRequirementkeystringRequiredoperatorstringRequiredIn, NotIn, Exists or DoesNotExist.
valuesrepeated stringgame_server_statestringReady (the default) or Allocated.
schedulingstringPacked or Distributed, as Agones writes them. Empty is Packed.
labelsmap<string, string>Written onto the allocated server, where the game reads them.
annotationsmap<string, string>grpcurl -H "authorization: Bearer $PLANY_API_KEY" \ -d '{ "parent": "" }' \ api.plany.cloud:443 plany.agones.v1.AutopilotService/AllocateGameServer{ "game_server": { "name": "projects//locations//gameServers/", "manifest": "", "fleet": "projects//locations//fleets/my-fleet", "state": "STATE_CREATING", "sleeping": false, "address": "", "ports": [ { "name": "", "port": 0 } ], "labels": { "key": "" }, "annotations": { "key": "" }, "playpute_game_server": "projects//locations//gameServers/", "state_message": "", "create_time": "2026-10-04T12:00:00Z", "etag": "W/\"1\"" }, "woken": false}AppliedObject is what happened to one document.
kindstringFleet, FleetAutoscaler or GameServer.
namestringThe resource name it was applied to.
actionAppliedObject.ActionACTION_CREATEDACTION_UPDATEDACTION_UNCHANGEDwarningsrepeated string{ "kind": "", "name": "", "action": "ACTION_CREATED", "warnings": [ "" ]}FleetStatus is Agones' Fleet.status, plus sleep.
replicasint32Every server the fleet has, in any state.
ready_replicasint32READY, awake or asleep.
allocated_replicasint32reserved_replicasint32sleeping_replicasint32Asleep: READY, not charged for compute, woken by a connection or an
allocation. Counted within ready_replicas too.
outdated_replicasint32Running a template from before the last change, while a rollout replaces them.
{ "replicas": 0, "ready_replicas": 0, "allocated_replicas": 0, "reserved_replicas": 0, "sleeping_replicas": 0, "outdated_replicas": 0}Agones' GameServerStatusPort.
namestringportint32{ "name": "", "port": 0}GameServerSelector is Agones' GameServerSelector, without counters and
lists.
match_labelsmap<string, string>match_expressionsrepeated LabelSelectorRequirementkeystringRequiredoperatorstringRequiredIn, NotIn, Exists or DoesNotExist.
valuesrepeated stringgame_server_statestringReady (the default) or Allocated.
{ "match_labels": { "key": "" }, "match_expressions": [ { "key": "", "operator": "", "values": [ "" ] } ], "game_server_state": ""}LabelSelectorRequirement is Kubernetes' set-based selector term.
keystringRequiredoperatorstringRequiredIn, NotIn, Exists or DoesNotExist.
valuesrepeated string{ "key": "", "operator": "", "values": [ "" ]}game_serverGameServerThe allocated server.
namestringIdentifiermanifeststringOne agones.dev/v1 GameServer, for a standalone server. Empty for a
fleet's.
fleetstringOutput onlySTATE_CREATINGSTATE_STARTINGSTATE_SCHEDULEDSTATE_REQUEST_READYSTATE_READYSTATE_ALLOCATEDSTATE_RESERVEDSTATE_SHUTDOWNSTATE_UNHEALTHYSTATE_ERRORsleepingboolOutput onlyAsleep. Its state is still what the game last said — normally READY — and a connection or an allocation wakes it.
addressstringOutput onlyWhere players connect: the project's connection proxy.
namestringportint32labelsmap<string, string>Output onlyLabels and annotations from the template or manifest, merged with those the game and its allocations wrote.
annotationsmap<string, string>Output onlyplaypute_game_serverstringOutput onlyThe Playpute game server that runs this Agones game server: where to find its logs, its usage and its bill.
state_messagestringOutput onlyetagstringOutput onlywokenboolWhether the allocation woke it. Players connecting now wait a few seconds for the restore.
objectsrepeated AppliedObjectkindstringFleet, FleetAutoscaler or GameServer.
namestringThe resource name it was applied to.
actionAppliedObject.ActionACTION_CREATEDACTION_UPDATEDACTION_UNCHANGEDwarningsrepeated stringFleet is an Agones Fleet.
manifeststringRequiredThe manifest, as applied: one agones.dev/v1 Fleet, in YAML or JSON.
namestringIdentifierprojects/{project}/locations/{location}/fleets/{fleet}, where {fleet} is
the manifest's metadata.name.
namespacestringOutput onlymetadata.namespace, kept so the SDK's GetGameServer answers with the
namespace the game expects. Nothing on Plany is scoped by it.
desired_replicasint32Output onlyspec.replicas, or the autoscaler's decision when one targets this fleet.
imagestringOutput onlyThe image the fleet runs, as written and as resolved.
image_digeststringOutput onlySTATE_PROVISIONINGSTATE_ROLLING_OUTSTATE_READYSTATE_FAILEDSTATE_DELETINGstate_messagestringOutput onlyreplicasint32Every server the fleet has, in any state.
ready_replicasint32READY, awake or asleep.
allocated_replicasint32reserved_replicasint32sleeping_replicasint32Asleep: READY, not charged for compute, woken by a connection or an
allocation. Counted within ready_replicas too.
outdated_replicasint32Running a template from before the last change, while a rollout replaces them.
game_server_groupstringOutput onlyWhat runs it, for support and for the Playpute console: the managed group, and the game and build the template became.
gamestringOutput onlybuildstringOutput onlygenerationint64Output onlyIncreases each time the manifest changes. Agones' metadata.generation.
fleet_autoscalerstringOutput onlyThe autoscaler targeting this fleet, if any.
warningsrepeated stringOutput onlyThings in the manifest that were accepted and ignored. Refusals are errors on the apply; these are what a careful reader would still want to know.
vpcstringOutput onlyThe private network this fleet's servers are on, as given to
ApplyManifestsRequest.vpc when it was first applied. Empty is the
project's default network. Fixed after the first apply.
labelsmap<string, string>Output onlymetadata.labels.
etagstringOutput onlyFleetAutoscaler is an Agones FleetAutoscaler.
Only the Buffer policy, in v1. Webhook, Counter and List policies are
refused on apply with that said.
manifeststringRequiredOne autoscaling.agones.dev/v1 FleetAutoscaler.
namestringIdentifierfleetstringOutput onlybuffer_sizeint32Output onlyThe buffer as understood: exactly one of these is set.
buffer_percentint32Output onlymin_replicasint32Output onlymax_replicasint32Output onlySTATE_ACTIVESTATE_WAITING_FOR_FLEETSTATE_FAILEDstate_messagestringOutput onlywarningsrepeated stringOutput onlyetagstringOutput onlyGameServer is an Agones GameServer: one of a fleet's, or one applied on its
own.
A view over a Playpute game server. manifest is set only for a standalone
one, which is the only kind a customer applies; a fleet's servers come from
the fleet's template.
namestringIdentifiermanifeststringOne agones.dev/v1 GameServer, for a standalone server. Empty for a
fleet's.
fleetstringOutput onlySTATE_CREATINGSTATE_STARTINGSTATE_SCHEDULEDSTATE_REQUEST_READYSTATE_READYSTATE_ALLOCATEDSTATE_RESERVEDSTATE_SHUTDOWNSTATE_UNHEALTHYSTATE_ERRORsleepingboolOutput onlyAsleep. Its state is still what the game last said — normally READY — and a connection or an allocation wakes it.
addressstringOutput onlyWhere players connect: the project's connection proxy.
namestringportint32labelsmap<string, string>Output onlyLabels and annotations from the template or manifest, merged with those the game and its allocations wrote.
annotationsmap<string, string>Output onlyplaypute_game_serverstringOutput onlyThe Playpute game server that runs this Agones game server: where to find its logs, its usage and its bill.
state_messagestringOutput onlyetagstringOutput onlyfleet_autoscalersrepeated FleetAutoscalermanifeststringRequiredOne autoscaling.agones.dev/v1 FleetAutoscaler.
namestringIdentifierfleetstringOutput onlybuffer_sizeint32Output onlyThe buffer as understood: exactly one of these is set.
buffer_percentint32Output onlymin_replicasint32Output onlymax_replicasint32Output onlySTATE_ACTIVESTATE_WAITING_FOR_FLEETSTATE_FAILEDstate_messagestringOutput onlywarningsrepeated stringOutput onlyetagstringOutput onlynext_page_tokenstringfleetsrepeated FleetmanifeststringRequiredThe manifest, as applied: one agones.dev/v1 Fleet, in YAML or JSON.
namestringIdentifierprojects/{project}/locations/{location}/fleets/{fleet}, where {fleet} is
the manifest's metadata.name.
namespacestringOutput onlymetadata.namespace, kept so the SDK's GetGameServer answers with the
namespace the game expects. Nothing on Plany is scoped by it.
desired_replicasint32Output onlyspec.replicas, or the autoscaler's decision when one targets this fleet.
imagestringOutput onlyThe image the fleet runs, as written and as resolved.
image_digeststringOutput onlySTATE_PROVISIONINGSTATE_ROLLING_OUTSTATE_READYSTATE_FAILEDSTATE_DELETINGstate_messagestringOutput onlyreplicasint32Every server the fleet has, in any state.
ready_replicasint32READY, awake or asleep.
allocated_replicasint32reserved_replicasint32sleeping_replicasint32Asleep: READY, not charged for compute, woken by a connection or an
allocation. Counted within ready_replicas too.
outdated_replicasint32Running a template from before the last change, while a rollout replaces them.
game_server_groupstringOutput onlyWhat runs it, for support and for the Playpute console: the managed group, and the game and build the template became.
gamestringOutput onlybuildstringOutput onlygenerationint64Output onlyIncreases each time the manifest changes. Agones' metadata.generation.
fleet_autoscalerstringOutput onlyThe autoscaler targeting this fleet, if any.
warningsrepeated stringOutput onlyThings in the manifest that were accepted and ignored. Refusals are errors on the apply; these are what a careful reader would still want to know.
vpcstringOutput onlyThe private network this fleet's servers are on, as given to
ApplyManifestsRequest.vpc when it was first applied. Empty is the
project's default network. Fixed after the first apply.
labelsmap<string, string>Output onlymetadata.labels.
etagstringOutput onlynext_page_tokenstringgame_serversrepeated GameServernamestringIdentifiermanifeststringOne agones.dev/v1 GameServer, for a standalone server. Empty for a
fleet's.
fleetstringOutput onlySTATE_CREATINGSTATE_STARTINGSTATE_SCHEDULEDSTATE_REQUEST_READYSTATE_READYSTATE_ALLOCATEDSTATE_RESERVEDSTATE_SHUTDOWNSTATE_UNHEALTHYSTATE_ERRORsleepingboolOutput onlyAsleep. Its state is still what the game last said — normally READY — and a connection or an allocation wakes it.
addressstringOutput onlyWhere players connect: the project's connection proxy.
namestringportint32labelsmap<string, string>Output onlyLabels and annotations from the template or manifest, merged with those the game and its allocations wrote.
annotationsmap<string, string>Output onlyplaypute_game_serverstringOutput onlyThe Playpute game server that runs this Agones game server: where to find its logs, its usage and its bill.
state_messagestringOutput onlyetagstringOutput onlynext_page_tokenstring| Value | Description |
|---|---|
| ACTION_UNSPECIFIED | |
| ACTION_CREATED | |
| ACTION_UPDATED | |
| ACTION_UNCHANGED |
| Value | Description |
|---|---|
| STATE_UNSPECIFIED | |
| STATE_PROVISIONING | Applied; the game, its build and the group are being created, or the image is being pulled and captured for the first time. |
| STATE_ROLLING_OUT | Servers are being created or replaced to match the manifest. |
| STATE_READY | Matching the manifest. |
| STATE_FAILED | The manifest could not be carried out. `error` says why — an image that does not resolve, a quota, a registry refusing the pull. |
| STATE_DELETING | Being deleted, its servers first. |
| Value | Description |
|---|---|
| STATE_UNSPECIFIED | |
| STATE_ACTIVE | Scaling its fleet. |
| STATE_WAITING_FOR_FLEET | Its `fleetName` names no fleet in this project and region. Waits, as Agones does, rather than failing: fleets and autoscalers are often applied in one file in either order. |
| STATE_FAILED |
Agones' states, all of them, so a dashboard written against Agones reads.
| Value | Description |
|---|---|
| STATE_UNSPECIFIED | |
| STATE_CREATING | |
| STATE_STARTING | |
| STATE_SCHEDULED | |
| STATE_REQUEST_READY | |
| STATE_READY | |
| STATE_ALLOCATED | |
| STATE_RESERVED | |
| STATE_SHUTDOWN | |
| STATE_UNHEALTHY | |
| STATE_ERROR |