C2CS2Screen APIQuick start
Developer API

CS2 Inspect links
in. Images out.

Render weapons, knives and gloves on a native GPU worker. Receive high-quality WebP images directly or by webhook.

v1https://api.cs2screen.comfront · back · bothWebP

How it works

Send an Inspect link. A native Vulkan GPU worker renders the item directly with alpha and returns the finished image. Jobs are durable, so a disconnected client does not cancel the render.

1
Create a job

POST the Inspect link with your API key.

2
We render it

The item is captured and encoded once as WebP.

3
Receive the result

Wait for a direct response or accept a signed webhook.

Quick start

Use Direct mode for the shortest integration. Keep API keys on your server, never in browser code.

Direct response · saves one WebP
curl --max-time 910 -X POST https://api.cs2screen.com/v1/jobs \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "steam://run/730//+csgo_econ_action_preview%20YOUR_CERTIFICATE",
    "mode": "front",
    "response": "direct",
    "returnType": "image"
  }' --output item.webp
Webhook response · returns HTTP 202 immediately
curl -X POST https://api.cs2screen.com/v1/jobs \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "steam://run/730//+csgo_econ_action_preview%20YOUR_CERTIFICATE",
    "webhook": "https://example.com/webhooks/cs2screen",
    "idempotency_key": "order-12345",
    "mode": "both"
  }'
POST/v1/jobs

Request fields

FieldDefaultUse
url REQUIREDA valid CS2 certificate Inspect link.
modefrontfront, back or both.
outputfixedEvery job uses a 3840×2160 Vulkan source and returns one 1920×2620 WebP at quality 100.
responsewebhookdirect waits up to 900 seconds. webhook returns HTTP 202.
webhookRequired for Webhook mode; optional in Direct mode. Must be a public HTTPS URL.
returnTypeimageOptional compatibility field. The only supported value is image.
idgenerated UUIDYour optional job UUID. It is returned in every response and webhook.
idempotency_keyUse an order ID to safely retry the same request without creating another job.
Output: Every successful job produces exactly one 1920×2620 WebP at quality 100 with an embedded sRGB profile and 72-dpi metadata. Its source render is always 3840×2160 and the reconstructed item is never enlarged beyond its source pixels.

Results

Direct mode

Every successful mode returns the raw WebP as image/webp. The body contains only image bytes. Job, image and item data are provided in X-CS2-* response headers.

Long jobs: If the 900-second Direct wait expires, the API returns HTTP 202 with a result_url. The job continues in the background.

Webhook mode

The create call returns HTTP 202 with the job id. Later, every successful mode sends the same raw image/webp body and the same metadata headers as Direct mode. If Direct mode also includes a webhook URL, both destinations receive byte-identical WebP data.

Delivery is at least once with up to eight attempts. Deduplicate deliveries using event_id and return any HTTP 2xx quickly.

HeaderValue
X-CS2-Job-IDJob UUID.
X-CS2-Mode / X-CS2-Viewfront, back or both.
X-CS2-SHA256SHA-256 of the exact WebP body.
X-CS2-Width / X-CS2-HeightFinal image dimensions (always 1920×2620).
X-CS2-Float-ValueDecoded float when present.
X-CS2-MetadataBase64url JSON containing image metadata and decoded item information, including stickers and keychains.

Verify webhooks

Hash the exact raw WebP request body. The signed message is timestamp + "." + metadataHeader + "." + bodySha256.

HeaderValue
X-CS2-Event-IDStable delivery UUID.
X-CS2-TimestampUnix timestamp included in the signature.
X-CS2-Signature-Versionimage-v1 for successful image delivery.
X-CS2-Signaturesha256=<hex>
Node.js
import crypto from "node:crypto";

const bodySha256 = crypto.createHash("sha256").update(rawWebpBody).digest("hex");
const expected = "sha256=" + crypto
  .createHmac("sha256", WEBHOOK_SECRET)
  .update(`${timestamp}.${metadataHeader}.${bodySha256}`, "utf8")
  .digest("hex");

const supplied = signature || "";
const valid = expected.length === supplied.length &&
  crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(supplied));

Also compare bodySha256 with X-CS2-SHA256, reject old timestamps and store event_id with a unique constraint before returning HTTP 2xx. Failed jobs use an application/json error webhook marked json-v1.

Check a job

GET/v1/jobs/{id}

Returns the queue, render and delivery state. A rendered image is not necessarily delivered yet, so check render_status and delivery_status separately.

Job status
curl https://api.cs2screen.com/v1/jobs/JOB_UUID \
  -H 'X-API-Key: YOUR_API_KEY'
GET/v1/jobs/{id}/result

Fetches a Direct result later. It returns HTTP 202 while the result is still being built.

Optional design and media

Design fields are applied after background removal to the fixed 1920×2620 output. Without a background the canvas remains transparent.

Show optional job fields
FieldUse
with_floatAdd the fixed open details layout: white item group, #E8FF33 paint name, Wear/Float/Pattern/Rarity and the wear scale.
item_name / paint_nameOptional title overrides. The Vulkan worker resolves missing names from Valve game data.
background_colorA named color or #RRGGBB/#RRGGBBAA.
background_media_id / background_urlReusable Media ID or a public HTTPS image URL.
logo_media_id / logo_urlOptional logo. Position with logo_offset_start, x/y, opacity and width.
watermark_media_id / watermark_urlOptional watermark with the same position controls.
no_cacheForce URL media revalidation; limited to once per client and URL every ten minutes.

Upload reusable media

Upload static PNG, WebP or JPEG bytes once, then use the returned media_id in jobs.

Upload a logo
curl -X POST https://api.cs2screen.com/v1/media \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: image/png' \
  --data-binary @logo.png

Common responses

StatusMeaning
200/201Result returned or media created.
202Job accepted or Direct result still pending.
401Missing or invalid API key.
409Job ID or idempotency conflict.
422Invalid request, Inspect link, webhook or media.
429Rate or queue limit. Follow Retry-After.
5xxTemporary service, render or media failure.

Integration prompt

Copy this short context into your coding assistant and add your language and framework.

AI integration context