Skip to main content
POST
/
user
/
wallet
/
payout
/
crypto
/
withdraw
Create payout withdrawal
curl --request POST \
  --url https://api.skinshark.gg/user/wallet/payout/crypto/withdraw \
  --header 'Content-Type: application/json' \
  --header 'api-key: <api-key>' \
  --data '
{
  "destination": "<string>",
  "amountCents": "<string>",
  "externalId": "<string>",
  "forSubUser": "<string>",
  "maxFeeUsdCents": "<string>"
}
'
{
  "requestId": "<string>",
  "success": true,
  "data": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "chain": "<string>",
    "token": "<string>",
    "destination": "<string>",
    "amountCents": "<string>",
    "feeCents": "<string>",
    "externalId": "<string>",
    "forUserId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "forUserExternalId": "<string>",
    "createdAt": "2023-11-07T05:31:56Z"
  },
  "error": {
    "code": 1500,
    "key": "INSUFFICIENT_BALANCE",
    "message": "Insufficient balance"
  }
}

Authorizations

api-key
string
header
required

Your raw API key. Generate, rotate, and revoke keys from the merchant dashboard. Keys can optionally be bound to one or more allowed source IPs — requests from any other IP are rejected with API_KEY_IP_DENIED.

Body

application/json
chain
enum<string>
required
Available options:
ethereum,
base,
arbitrum,
optimism,
bsc
token
enum<string>
required

Stables only at MVP.

Available options:
USDT,
USDC
destination
string
required

EVM address that will receive the funds on-chain.

Pattern: ^0x[a-fA-F0-9]{40}$
amountCents
string
required

USD cents to send to the destination. Fee is added on top and debited together.

Pattern: ^\d+$
externalId
string
required

Partner-supplied reference. Echoed in the approval callback and all lifecycle events so you can match against your own records. Must be unique per merchant; duplicate ⇒ 1824.

Required string length: 1 - 128
forSubUser
string

Optional label — sub-user id (UUID) or your externalId for that sub-user, scoped to the calling merchant. Pure label, not auth scope: funding always comes from the merchant's payout custody; the sub-user reference is recorded for audit and echoed in the approval callback / lifecycle events.

Required string length: 1 - 128
maxFeeUsdCents
string

Optional fee cap. If the live fee at submission exceeds this cap, the request is rejected with 1821 and no state is mutated. Useful for declining high-gas moments.

Pattern: ^\d+$

Response

OK.

requestId
string
required
success
boolean
required
data
object

Present when success: true. Shape varies per endpoint.

error
object