Skip to main content
The SkinShark API is a server-to-server interface that lets your backend manage merchant accounts, provision sub-users, fund wallets, list trades, and execute purchases on cross-marketplace inventory. It’s the same surface the SkinShark dashboard runs on.

What you can do with it

Provision sub-users

Create end-user accounts under your merchant. Each gets its own wallet, Steam trade URLs, and trade history.

Fund wallets

Move balance from your merchant account to any sub-user with idempotent transfers, or accept deposits via Gate Pay, on-ramp cards, or self-hosted EVM crypto.

Buy items

Buy specific listings or hand the server a target item and let it pick cheapest-fill across marketplaces.

React in real time

Subscribe to deposit and trade events over a per-user WebSocket, or set up signed HTTPS webhooks.

Base URL

https://api.skinshark.gg

Authentication

Send your merchant API key on every request:
api-key: sk_live_...
Keys are hashed at rest, optionally bound to source IPs, and revocable from the dashboard. To act as a specific sub-user, add an On-Behalf-Of header. See Authentication and Acting on behalf of a sub-user.

Response envelope

Every JSON response is wrapped:
{
  "requestId": "01900b3f-1ad0-7ab1-9d8a-7b2f54e1d14c",
  "success": true,
  "data": { }
}
Error responses replace data with error:
{
  "requestId": "01900b3f-...",
  "success": false,
  "error": {
    "code": 1500,
    "key": "INSUFFICIENT_BALANCE",
    "message": "Insufficient balance"
  }
}
The schemas in the API reference describe the inner data shape only; the envelope is implicit. See Response envelope for handling patterns.

TypeScript-first

Every endpoint in this site is typed in TypeScript via the OpenAPI spec. Generate types with openapi-typescript and pair them with a small fetch wrapper — full IntelliSense, zero runtime dependencies, drift-free with the spec.
import type { paths } from "./skinshark-api";

type CreateSubUserBody =
  paths["/merchant/users"]["post"]["requestBody"]["content"]["application/json"];

type CreateSubUserResponse =
  paths["/merchant/users"]["post"]["responses"]["201"]["content"]["application/json"]["data"];

Where to start

1

Make your first authenticated call

Quickstart — search items, fetch live listings, place a buy order in under 5 minutes.
2

Pick an integration mode

Core API for one shared merchant account, or Full Platform for one merchant with isolated sub-users.
3

Wire real-time events

WebSocket for low-latency in-app updates, Webhooks for durable server-side delivery.