> ## Documentation Index
> Fetch the complete documentation index at: https://docs.totemlabs.io/llms.txt
> Use this file to discover all available pages before exploring further.

# create_game

> Create a game record and request its first upload URL.

export const LastVerified = ({date, source}) => <div className="totem-verified">
    <span>Last verified: {date}</span>
    {source ? <span>Source: {source}</span> : null}
  </div>;

export const StatusBadge = ({state = "available", children}) => {
  const labels = {
    available: "Available",
    "early-access": "Early access",
    planned: "Planned",
    internal: "Internal draft"
  };
  return <span className={`totem-status totem-status--${state}`}>
      {children || labels[state] || state}
    </span>;
};

<StatusBadge state="available" />

<LastVerified date="2026-08-14" source="Totem V1 contract" />

Creates a new game owned by the current account and returns a temporary upload URL for its first build.

## Parameters

| Name          | Type   | Required | Rules                               |
| ------------- | ------ | -------- | ----------------------------------- |
| `name`        | string | Yes      | 1–80 characters.                    |
| `description` | string | Yes      | Up to 500 characters.               |
| `orientation` | string | Yes      | `landscape`, `portrait`, or `both`. |

## Example call

```json theme={null}
{
  "name": "Afterlight",
  "description": "A one-button game about keeping a signal alive.",
  "orientation": "landscape"
}
```

## Returns

| Field          | Meaning                                              |
| -------------- | ---------------------------------------------------- |
| `game_id`      | Stable game UUID used by later tools.                |
| `slug`         | URL-safe game name.                                  |
| `upload_url`   | Temporary HTTPS URL for one archive upload.          |
| `expires_in_s` | `900`.                                               |
| `next_steps`   | Server-provided instructions for upload and publish. |

```json theme={null}
{
  "game_id": "018f2f4e-b73b-7e91-a419-0c8ac91af1c2",
  "slug": "afterlight",
  "upload_url": "<presigned-upload-url>",
  "expires_in_s": 900,
  "next_steps": "Upload the gzip-compressed tar with HTTP PUT, then call publish with this game_id."
}
```

## Next action

Send the gzip-compressed tar archive to `upload_url` with HTTP `PUT`, then call `publish`.

Use `request_upload` instead when the game already exists.
