> For the complete documentation index, see [llms.txt](https://bountyv.gitbook.io/vdocs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bountyv.gitbook.io/vdocs/game-tools-api/steam-artwork.md).

# Steam Artwork

Generate a complete, spec-exact Steam store and library artwork set for a game release from one brief. Part of the **Game Tools API** group.

```
POST /api/v1/steam/artwork
```

Synchronous. Can take up to a few minutes — art plates are generated first (one master, then every other plate references it so the whole set looks like the same artist made it), then your logo is composited onto each asset at the right size and position.

One brief in, every asset Valve asks for out — at Valve's exact current dimensions. The request is `multipart/form-data` so you can attach your own logo.

> Steam doubled every capsule size in August 2024 and stopped accepting the old dimensions on 1 November 2024. Because published games were never forced to re-upload, the old sizes are still visible across the store and still printed by most size guides on the web. This endpoint always emits the current sizes — if a number below disagrees with a guide you've read, the guide is stale.

## Authentication

```
Authorization: Bearer sk_live_...
```

See [Authentication](/vdocs/authentication.md) for details.

## Request

**Content-Type:** `multipart/form-data`

| Field            | Type                 | Required | Default         | Description                                                                                                                      |
| ---------------- | -------------------- | -------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `game_name`      | string               | ✅        | —               | Your game's name. Used for the logotype. Max 120 characters.                                                                     |
| `brief`          | string               | ✅        | —               | What the game is and what the art should show. This is the art direction for every plate. Max 2000 characters.                   |
| `logo`           | File                 | —        | —               | Your own logo as a transparent PNG. Strongly preferred over `design_logo`. Required unless `design_logo=true`.                   |
| `design_logo`    | `"true"` / `"false"` | —        | `false`         | Design a logotype instead of uploading one. Ignored when `logo` is supplied. See the caveat below.                               |
| `subtitle`       | string               | —        | —               | Official subtitle, if your game has one. Steam allows the title and an official subtitle on capsules — nothing else.             |
| `style`          | string               | —        | —               | Art style steer, e.g. `"dark painterly sci-fi"` or `"hand-drawn cosy pixel art"`.                                                |
| `logo_alignment` | string               | —        | `center_bottom` | Where the logo sits. One of Steam's four Library Logo presets: `bottom_left`, `center_top`, `center_middle`, `center_bottom`.    |
| `only`           | string               | —        | —               | Comma-separated asset ids to restrict the output (see the table below). Defaults to the full set. Billing is per set regardless. |

One of `logo` or `design_logo=true` is required — the Small Capsule needs a readable logo.

> **AI-designed logos: know the limitation.** With `design_logo=true` the logotype is rendered bright on black and its transparency is keyed from that. It works well for the bright logotypes games typically use, but it cannot key a dark logo — dark ink reads as transparent. If the result looks thin or hollow, upload your own transparent PNG. The response includes a warning whenever a logo was designed rather than uploaded.

## Assets returned

Every asset is emitted at exactly the size below. Sizes Steam auto-generates for you (like the 120×45 small capsule) are not returned — Steam derives those from the upload itself.

| id                 | Asset            | Size            | Required |
| ------------------ | ---------------- | --------------- | -------- |
| `small_capsule`    | Small Capsule    | 462×174         | yes      |
| `header_capsule`   | Header Capsule   | 920×430         | yes      |
| `main_capsule`     | Main Capsule     | 1232×706        | yes      |
| `vertical_capsule` | Vertical Capsule | 748×896         | yes      |
| `page_background`  | Page Background  | 1438×810        | optional |
| `library_capsule`  | Library Capsule  | 600×900         | yes      |
| `library_header`   | Library Header   | 920×430         | yes      |
| `library_hero`     | Library Hero     | 3840×1240       | yes      |
| `library_logo`     | Library Logo     | within 1280×720 | yes      |
| `app_icon`         | App Icon         | 184×184         | yes      |
| `shortcut_icon`    | Shortcut Icon    | 512×512         | yes      |
| `bundle_header`    | Bundle Header    | 707×232         | optional |

> **Two assets that are not what you'd guess.** **Library Hero** cannot contain any text at all — no title, no logo. The logotype is a separate transparent layer (Library Logo) that Steam overlays for you, positioned by the four alignment presets. Only the central 860×380 of the hero is guaranteed visible; the rest is bleed that Steam crops as the client window resizes. **Library Logo** is a bounding box, not a canvas: it is sized to 1280 wide *and/or* 720 tall and keeps its own aspect ratio. A wide logotype correctly comes back as e.g. 1280×199.

## Response

```json
{
  "game_name": "Voidfall",
  "assets": [
    {
      "id": "small_capsule",
      "label": "Small Capsule",
      "filename": "small_capsule.png",
      "width": 462,
      "height": 174,
      "image": "https://.../signed-url-or-data-uri"
    }
  ],
  "skipped": [],
  "warnings": [],
  "charged_cents": 400,
  "balance_cents": 4600
}
```

| Field           | Type    | Description                                                                                                                                                                            |
| --------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `assets[]`      | array   | Each with `id`, `label`, `filename`, `width`, `height` and `image` (a signed URL valid for one hour, or an inline data URL if storage was unavailable).                                |
| `skipped[]`     | array   | Assets that could **not** be produced, each with a `reason`. A partial set is still a broken Steam submission — always check this rather than assuming a 200 means you got everything. |
| `warnings[]`    | array   | Non-fatal notes, e.g. that the logo was AI-designed and keyed.                                                                                                                         |
| `charged_cents` | integer | What this set cost.                                                                                                                                                                    |
| `balance_cents` | integer | Your remaining balance.                                                                                                                                                                |

## Example

```bash
curl -X POST https://substance-api.com/api/v1/steam/artwork \
  -H "Authorization: Bearer sk_live_..." \
  -F "game_name=Voidfall" \
  -F "brief=A lone salvager picking through a dead orbital ring above a gas giant" \
  -F "style=dark painterly sci-fi" \
  -F "logo=@voidfall-logo.png" \
  -F "logo_alignment=center_bottom"
```

## Errors

| Status | When                                                                                                                                       |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `400`  | Missing/oversized `game_name` or `brief`, invalid `logo_alignment`, unknown asset id(s) in `only`, or no `logo` and no `design_logo=true`. |
| `401`  | Missing/invalid API key.                                                                                                                   |
| `402`  | Insufficient credits.                                                                                                                      |
| `500`  | Image generation is unavailable (misconfigured deployment). Not charged.                                                                   |
| `502`  | Generation failed upstream, or no assets could be produced. Not charged.                                                                   |

See [Errors](/vdocs/errors.md) for full details.

## Content rules Steam enforces

Steam limits capsule content to "game artwork, the game name, and any official subtitle". No review scores, no awards, no discount or sale copy, no text or imagery promoting a different product, and no other miscellaneous text. All capsule art must be PG-13. Non-compliant capsules face limits to visibility in the store and are ineligible for featuring in official Steam sales and events — the commonly repeated claim that Valve rejects the submission outright is not something Valve documents.

Temporary text for DLC, updates or seasonal events is only allowed via Steam's time-limited Artwork Overrides, capped at one month, and any text on a graphical asset must be localised into every language your game supports.

## Pricing

Billed **once per set**, not per asset — see [Credits & pricing](/vdocs/account/credits.md) for current rates. The twelve outputs are composites of six model renders, so per-asset billing would charge you for work that didn't happen. If nothing can be generated you are not charged at all.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://bountyv.gitbook.io/vdocs/game-tools-api/steam-artwork.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
