CS2 Screenshot API

From inspect link to item image.

Show a CS2 item in your marketplace, inventory tool or trade listing. Send its inspect link with your SteamWebAPI key and get a screenshot with both sides, a single view or a transparent background.

GET /steam/api/screenshot

Included at no extra cost in every package, including Free and Free+, subject to your package limits. Access and limits

Green Karambit shown from both sides on the default screenshot background, with float information below
Both sides with mode=both Both sides · Background · Float information

One item. Choose how to show it.

These are saved responses from our Screenshot API using the same inspect link. Compare the front and back as cutouts, or keep both sides together with a background that fits your layout.

Front of the same green Karambit, with a transparent background shown over a checkerboard

Transparent front

mode=front&view=transparent

Place the item on your own page background. The checkerboard is only here to show transparency.

Reverse side of the green Karambit with a transparent background shown over a checkerboard

Transparent back

mode=back&view=transparent

Show the reverse side beside the front, or use it as a second image in your item gallery.

Both sides of the green Karambit on a solid blue background with float information

Your background color

mode=both&background_color=%2318324B

Request both sides on a solid background. Float information remains enabled by default.

Transparent output supports front or back and hides float information automatically. For a combined image, use mode=both with the default background or a solid color.

Your first screenshot

Start with your SteamWebAPI key and a full CS2 inspect link. Send the key in the X-Api-Key header and URL-encode the link. The default shows the front. Add mode=both to get both sides as shown above.

curl --get 'https://www.steamwebapi.com/steam/api/screenshot' \
  --header 'X-Api-Key: YOUR_STEAMWEBAPI_KEY' \
  --header 'Idempotency-Key: YOUR_UNIQUE_REQUEST_ID' \
  --data-urlencode 'url=YOUR_FULL_INSPECT_LINK' \
  --max-time 100 \
  --dump-header screenshot-headers.txt \
  --output screenshot-response

Replace the three placeholders before running the request. Check the saved headers: 200 with image/avif means you can save the body as screenshot.avif. A 202 body is JSON containing a pending job.

What you get by default

CS2, front view, 1920px wide, the standard background aligned to the top, and float information. The response is an AVIF image. Keep your API key on your server when integrating this into a public website.

Request a transparent cutout

Insert these options before --max-time in the request above and choose a new Idempotency-Key. Use mode=back for the reverse side.

--data-urlencode 'mode=front' \
--data-urlencode 'view=transparent' \
--data-urlencode 'width=1920'

Parameters and defaults

Send these options as query parameters to /steam/api/screenshot. The Key header and key query parameter are also accepted for authentication.

Scroll the table sideways to see all options.

ParameterDefaultOptions
urlRequiredFull steam:// CS2 inspect link, URL-encoded. Maximum 16384 bytes.
gamecs2Currently only cs2.
modefrontfront, back or both. Use both explicitly to show both sides.
width1920256–2048 pixels. Height scales proportionally. Below 960, set with_float=false.
viewOmittedSet transparent for a cutout. Only compatible with front or back; float information is disabled by default.
background_colorDefault imageUse a hex color such as #18324B to replace the image. Encode # as %23. Incompatible with transparent output.
colorOmittedLegacy background color alias: black, blue, green, orange, purple, red, white, yellow, gray, #RRGGBB or #RRGGBBAA. Explicit background_url or background_color takes precedence. Incompatible with transparency.
background_urlDefault imagePublic HTTP(S) image URL, up to 2048 bytes, without credentials or a fragment. Cannot be combined with background_color or transparency.
background_vertical_aligntoptop, center or bottom; requires an image background.
logo_urlOmittedPublic HTTP(S) logo image URL, up to 2048 bytes, without credentials or a fragment.
logo_offset_starttop lefttop left, top right, bottom left or bottom right.
logo_offset_x
logo_offset_y
80 eachInteger from 0 to 4096 pixels from the selected corner.
logo_opacity1Number from 0 (invisible) to 1 (opaque).
logo_width400Integer from 1 to 1024 pixels.
with_floattruetrue, false, 1 or 0. Requires width ≥ 960 when enabled. Defaults to false for transparent output and cannot be enabled with it.
item_name
paint_name
Original labelsCustom item and finish labels, up to 64 characters each.
formatscreenscreen, download or base64. All image output is AVIF.
idempotency_keyGeneratedAlternatively use the Idempotency-Key header. 1–128 ASCII letters, digits, ., _, : or -.

Use both, not bothsides. Logo positioning, width and opacity affect a supplied logo_url. Use transparent output without background options. Unsupported, invalid or repeated parameters return 422. See the complete request examples for custom backgrounds and logos.

Handle the image or a pending job

Always inspect the HTTP status before treating the response as an image. A successful request can return the result immediately or provide a job ID while rendering finishes.

200 · screen
AVIF bytes with Content-Type: image/avif, displayed inline.
200 · download
The same AVIF, with an attachment filename of screenshot.avif.
200 · base64
JSON with status: "success" and image: "data:image/avif;base64,...".
202 · pending
JSON with a job ID and a Retry-After header. Wait for that delay before requesting the result.
{
  "status": "pending",
  "job_id": "YOUR_JOB_ID",
  "idempotency_key": "YOUR_UNIQUE_REQUEST_ID"
}

Retrieve the result

Use the same API key and the returned job_id. Leave out the inspect link and render options. If the job is still running, the response is 202 again.

curl --get 'https://www.steamwebapi.com/steam/api/screenshot' \
  --header 'X-Api-Key: YOUR_STEAMWEBAPI_KEY' \
  --data-urlencode 'job_id=YOUR_JOB_ID' \
  --data-urlencode 'format=download' \
  --max-time 100 \
  --dump-header screenshot-headers.txt \
  --output screenshot-response

Save the completed image. Results expire after three hours. Store the image yourself for longer use; the API does not return a public image URL.

Retry without creating another render

Choose a unique Idempotency-Key before the first request. After a timeout, reuse that key with the same inspect link and options. A new image configuration needs a new key. Result lookups and retries still count towards your screenshot quota.

For 422, check the parameter combination. For 429, wait for Retry-After. A 410 means the stored image expired. See the full reference for all error codes and retry rules.

From inventory data to a visual listing

Use the Steam Inventory API to find the CS2 item, then pass its available inspectlink into the screenshot endpoint as url. Items without an inspect link should be skipped.

  1. Request the image on your server. Keep your SteamWebAPI key out of public HTML and browser requests.
  2. Save the successful AVIF response. Use your own storage or CDN to serve it alongside the listing.
  3. Reuse the saved image. Serve that file when visitors open the item, rather than starting a new render for every page view.

For a marketplace listing, both sides show the item in one image. For inventory grids, a transparent front view can sit directly on your own background. Use a separate back view when visitors need a closer comparison.

Need visitors to rotate an item instead of viewing a still image? Explore the CS2 3D Viewer.

Your key, with separate screenshot limits

Authenticate with your existing SteamWebAPI key. Screenshots are included at no extra cost in every package, including Free and Free+, subject to your package limits. Screenshot-specific limits take precedence; when none are configured, your package's Global limits apply. Explicit zero day/month quotas block access. First use may take longer while access is initialized.

Screenshot requests have their own per-minute, per-day and per-month limits. They do not consume ordinary SteamWebAPI API credits. Read your current limits and counters on demand:

curl 'https://www.steamwebapi.com/steam/api/screenshot/usage' \
  --header 'X-Api-Key: YOUR_STEAMWEBAPI_KEY'
{
  "status": "success",
  "active": true,
  "limits": { "minute": 100, "day": 1000, "month": 10000 },
  "usage": { "minute": 1, "day": 25, "month": 240,
             "total": 500, "blocked": 0 },
  "timezone": "UTC",
  "period": "calendar",
  "unit": "authenticated_requests"
}

Illustrative numbers, not a plan allowance. A null limit means unlimited. Day and month counters reset at UTC calendar boundaries. total covers retained history, not necessarily lifetime usage. Avoid checking usage before every render.

Frequently asked questions

Do I need a Steam bot or a running game client?

No. Rendering runs on our screenshot service. Your application sends a CS2 inspect link with your SteamWebAPI key and receives the image, or a job ID while rendering finishes.

Which API key and plan do I use?

Use your existing SteamWebAPI API key. Screenshots are included at no extra cost in every package, including Free and Free+, subject to your package limits. Screenshot-specific limits take precedence; otherwise your package's Global limits apply. The usage endpoint reports your actual screenshot limits.

Can I get a transparent image of both sides?

Transparent output supports one side per request: mode=front or mode=back with view=transparent. To show both sides with transparency, request the two images separately. mode=both uses the default background image or a solid background color.

Can I use my own background or logo?

Yes. Send background_url and logo_url with publicly accessible image URLs. Adjust the logo corner, offsets, width and opacity with the logo_* options. Use background_color for a solid background, or its legacy color alias. Explicit background_url or background_color takes precedence over color. Customize labels with item_name or paint_name.

Does the API return PNG or a public image URL?

The new endpoint returns AVIF image bytes, a downloadable AVIF, or JSON containing a base64 AVIF data URL. It does not return a public image URL. Save the completed image to your own storage if you want to publish or reuse it.

How long does rendering take, and how long is the result kept?

Rendering time depends on the item and current capacity. A request may return HTTP 202 with a job ID and Retry-After. Retrieve the result with the same API key after that delay. Completed results expire after three hours, so save images you need to keep.

Do retries and result lookups count towards my quota?

Yes. Screenshot quotas count authenticated requests, including render retries and result retrieval. Reusing an Idempotency-Key avoids creating another render job after a timeout, but does not make the request free. Screenshot counters are separate from ordinary SteamWebAPI API credits.

What happens to the existing Float Screenshot API?

The old /steam/api/float/screenshot URL now uses this same Screenshot API through an internal rewrite. Query parameters and authentication headers are preserved. Both URLs return AVIF with front view by default and use the same screenshot quota. The separate PNG renderer has been removed. Use /steam/api/screenshot for new integrations.

Put your first item in the picture.

Start with an inspect link and your SteamWebAPI key. Use the default image, then adjust the view to fit your product.