> ## 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.

# request_upload

> Request a fresh upload URL for an existing game.

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" />

Returns a temporary upload URL for another build of a game owned by the current account.

## Parameters

| Name      | Type        | Required | Rules                                              |
| --------- | ----------- | -------- | -------------------------------------------------- |
| `game_id` | UUID string | Yes      | Must identify a game owned by the current account. |

## Example call

```json theme={null}
{
  "game_id": "018f2f4e-b73b-7e91-a419-0c8ac91af1c2"
}
```

## Returns

```json theme={null}
{
  "game_id": "018f2f4e-b73b-7e91-a419-0c8ac91af1c2",
  "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."
}
```

The URL accepts one archive and expires after 900 seconds. Request another URL if it expires.

A game owned by another account returns the same not-found result as a missing game.
