POST
Create a ZIP build upload URL

Authorizations

api-key
string
header
required

Per-project server key, prefixed sk_live_. Full access to every endpoint. Keep it on your backend: never ship it in a game binary.

Query Parameters

project_id
string

Which project to act on. Required when authenticating with a developer session (bearer_auth), which names no project of its own; ignored when authenticating with an API key, which carries its project already.

A project belonging to another account returns PROJECT_NOT_FOUND (7001) rather than a 403, so this cannot be used to probe for project ids.

Example:

"proj_abc123"

Body

application/json

Request a pre-signed URL to upload a ZIP build to.

name
string
required
Example:

"1.2.3"

executable_path
string
required

Path to the server executable inside the uploaded ZIP.

Example:

"Linux/GameServer.sh"

ports
object[]

Ports every server started from this build exposes. Each entry takes only a name and a protocol: there is no port number, because each server gets its own external port numbers when it starts. They are in network_ports, and the port the game listens on for each name is the project's (ProjectPort).

The game port is the port named game, or the first declared port if none is. Its number is always in SIMPL_PORT_GAME, which is what the Simpl entrypoint's {{PORT}} and the starter scripts read.

Required array length: 1 - 8 elements
launch_args
string[]

Command-line arguments for every server started from this build.

  • ZIP build: baked into the image after the executable.
  • docker_image build: appended to the image's own ENTRYPOINT and CMD when each server starts.

For both, the Simpl entrypoint substitutes placeholders such as {{PORT}} in them.

A server's startup_args come after these.

Maximum array length: 64
Maximum string length: 1024
Example:

Response

Build created. Upload the archive to upload_url.

build_id
string
required
Example:

"build_9f2c"

upload_url
string<uri>
required

PUT the ZIP archive here. The build moves from uploading to processing once the upload completes.

expires_at
string<date-time>
required
build
object