Skip to main content

GET /v1/user/wallet

Return balance plus paginated deposit/withdrawal activity.

Query type

interface GetWalletQuery {
  page?: number;
  limit?: number;
  status?:
    | 'initiated'
    | 'pending'
    | 'completed'
    | 'cancelled'
    | 'expired'
    | 'partial'
    | 'refunded'
    | 'refund_rejected'
    | 'exchange_failed'
    | 'conversion_delay'
    | 'queued'
    | 'processing'
    | 'failed';
}

Response type

type GetWalletResponse = ApiSuccess<{
  balance: number;
  currency: string;
  page: number;
  limit: number;
  total: number;
  deposits: Array<Record<string, unknown>>;
  withdrawalsTotal: number;
  withdrawals: Array<{
    id: string;
    amount: number;
    currency: string;
    method: 'crypto';
    status: string;
    timestamp: number;
  }>;
  message: string;
}>;

Example

curl --request GET \
  --url "https://api.skinshark.gg/v1/user/wallet?limit=50&page=1" \
  --header "X-API-Key: <YOUR_API_KEY>"

POST /v1/user/wallet/{depositId}/cancel

Cancel an initiated deposit.

Response type

type CancelDepositResponse = ApiSuccess<{
  depositId: string;
  status: 'cancelled';
  message: string;
}>;

Example

curl --request POST \
  --url "https://api.skinshark.gg/v1/user/wallet/<DEPOSIT_ID>/cancel" \
  --header "Content-Type: application/json" \
  --header "X-API-Key: <YOUR_API_KEY>" \
  --data '{}'

POST /v1/user/wallet/withdraw

Create a crypto withdrawal. If exchange liquidity is low, withdrawal can be queued.

Request type

interface WithdrawRequest {
  token: 'USDT' | 'USDC';
  network: string;
  address: string;
  amount: number;
}

Response type

type WithdrawResponse =
  | ApiSuccess<{
      id: string;
      status: 'pending';
      token: string;
      fee: { network: number; site: number; total: number };
      receiveAmount: number;
      withdraw_exchange_id: string;
      message: string;
    }>
  | ApiSuccess<{
      id: string;
      status: 'queued';
      queued: true;
      message: string;
    }>;

Example

curl --request POST \
  --url "https://api.skinshark.gg/v1/user/wallet/withdraw" \
  --header "Content-Type: application/json" \
  --header "X-API-Key: <YOUR_API_KEY>" \
  --data '{
    "token": "USDC",
    "network": "APT",
    "address": "0x9f2c7f248b1d45a8fa6fca20c29d23f4192632b6a4ce472f90d5d6d5aa8a54fe",
    "amount": 1000
  }'

GET /v1/user/wallet/withdraw/fees

Return withdrawal network fees for a token.

Query type

interface WithdrawFeesQuery {
  currency: string;
}

Response type

type WithdrawFeesResponse = Array<{
  name: string;
  fee: number;
}>;

Example

curl --request GET \
  --url "https://api.skinshark.gg/v1/user/wallet/withdraw/fees?currency=USDT" \
  --header "X-API-Key: <YOUR_API_KEY>"

POST /v1/user/wallet/deposit/crypto

Create a crypto deposit invoice/session.

Request type

interface CryptoDepositRequest {
  token: 'USDT' | 'USDC' | 'DAI' | 'BTC' | 'ETH' | 'SOL' | 'POL';
  amount: number;
  network: string;
}

Response type

type CryptoDepositResponse = ApiSuccess<{
  depositId: string;
  prepayId: string;
  payAmountToken: number;
  payAmountUsd: number;
  netTokenAmount: number;
  grossTokenAmount: number;
  platformFeeRate: number;
  gatewayFee: number;
  expireTime: string;
  gateQR: string;
  gateWhiteLabel: string;
  onChain: {
    network: string;
    token: string;
    fullCurrType: string;
    address: string;
  };
  message: string;
}>;

Example

curl --request POST \
  --url "https://api.skinshark.gg/v1/user/wallet/deposit/crypto" \
  --header "Content-Type: application/json" \
  --header "X-API-Key: <YOUR_API_KEY>" \
  --data '{
    "token": "USDT",
    "network": "ETH",
    "amount": 10
  }'

GET /v1/user/wallet/deposit/crypto/chains

Return available deposit chains for the currency.

Query type

interface DepositChainsQuery {
  currency: string;
}

Response type

type DepositChainsResponse = Array<{
  name: string;
  explorer_url: string;
  display_name: string;
}>;

Example

curl --request GET \
  --url "https://api.skinshark.gg/v1/user/wallet/deposit/crypto/chains?currency=USDC" \
  --header "X-API-Key: <YOUR_API_KEY>"

GET /v1/user/wallet/deposit/crypto/rates

Return deposit token rates and minimums. Top-level partner key required.

Response type

type DepositRatesResponse = ApiSuccess<{
  baseUsdAmount: number;
  feeMultiplier: number;
  currencies: Array<{
    token: string;
    isStable: boolean;
    minDepositUsd: number | null;
    minDepositToken: number | null;
    rate: {
      baseUsdAmount: number;
      grossTokenAmount: number;
      netTokenAmount: number;
      grossTokenPerUsd: number;
      netTokenPerUsd: number;
      feeRate: number;
      feeMultiplier?: number;
    } | null;
    error?: 'RATE_UNAVAILABLE';
    chains: Array<{
      chain: string;
      fullCurrType: string;
      symbol: string;
      explorer_url: string;
      display_name: string;
    }>;
  }>;
}>;

Example

curl --request GET \
  --url "https://api.skinshark.gg/v1/user/wallet/deposit/crypto/rates" \
  --header "X-API-Key: <TOP_LEVEL_PARTNER_KEY>"

POST /v1/user/wallet/deposit/onramp/session

Create fiat-to-crypto onramp widget session.

Request type

interface OnrampSessionRequest {
  coinId?: 54 | 116;
  coinCode?: 'usdt' | 'usdc';
  chainId?: 0 | 1 | 2 | 16;
  network?: string;
  fiatType: 12 | 20 | 21;
  fiatAmount?: number;
  coinAmount?: number;
  type?: 1;
  paymentMethod?: 1 | 2;
  redirectUrl?: string | null;
}

Response type

type OnrampSessionResponse = ApiSuccess<{
  depositId: string;
  merchantRecognitionId: string;
  widgetUrl: string;
  quote: Record<string, unknown> | null;
  message: string;
}>;

Example

curl --request POST \
  --url "https://api.skinshark.gg/v1/user/wallet/deposit/onramp/session" \
  --header "Content-Type: application/json" \
  --header "X-API-Key: <YOUR_API_KEY>" \
  --data '{
    "coinCode": "usdc",
    "fiatType": 12,
    "redirectUrl": "https://merchant.example/checkout/complete",
    "fiatAmount": 22,
    "network": "bep20"
  }'

POST /v1/user/wallet/deposit/onramp/quote

Get onramp quote without creating a deposit session.

Request type

interface OnrampQuoteRequest {
  fiatAmount: number;
  fiatType: 12 | 20 | 21;
  type: 1;
  coinCode: 'usdt' | 'usdc';
  network: string;
  countryCode?: string;
}

Response type

type OnrampQuoteResponse = ApiSuccess<Record<string, unknown>>;

Example

curl --request POST \
  --url "https://api.skinshark.gg/v1/user/wallet/deposit/onramp/quote" \
  --header "Content-Type: application/json" \
  --header "X-API-Key: <YOUR_API_KEY>" \
  --data '{
    "fiatAmount": 25,
    "fiatType": 21,
    "type": 1,
    "coinCode": "usdc",
    "network": "bep20",
    "countryCode": "US"
  }'