Skip to main content

Error Codes

All errors follow this format:
{
  "requestId": "...",
  "success": false,
  "error": {
    "code": 1001,
    "key": "VALIDATION_FAILED",
    "message": "The request data is invalid"
  }
}
Codes are grouped by domain:
RangeDomain
1-99Trading / marketplace
1000-1099Generic / infrastructure
1100-1199Authentication / tokens
1200-1299Two-factor / passkeys
1300-1399Account / access control
1400-1499User settings
1500-1599Idempotency
1600-1699Crypto wallet & funding
1700-1799Callbacks / webhooks
1800-1899Email
1900-1999API keys / secrets
2100-2199Risk management
2200-2299Booking
2300-2399Identity verification
2400-2499Ledger integrity

General Errors

CodeKeyHTTPDescription
1001VALIDATION_FAILED422Request body or query params failed validation
1003NOT_FOUND404Resource not found
1004CONFLICT409State conflict
1005RATE_LIMITED429Too many requests
1006SERVER_ERROR500Internal server error
1007SYSTEM_MAINTENANCE503System is in maintenance mode
1008UNPROCESSABLE422Request cannot be processed
1009SERVICE_UNAVAILABLE503Deposit/withdrawal services temporarily unavailable
1010NO_BOTS_AVAILABLE503No Steam bots are configured or online
1011FLEET_DEGRADED503Steam bot fleet is degraded; retry shortly

Authentication Errors

CodeKeyHTTPDescription
1100UNAUTHORIZED401Authentication required
1101INVALID_CREDENTIALS401Invalid email/username or password
1102INVALID_TOKEN401Token is invalid
1108MISSING_BEARER401Authorization header missing or invalid
1110TOKEN_INVALID_OR_EXPIRED401Token is invalid or expired
1111TOKEN_EXPIRED401Token has expired

Account / Access Errors

CodeKeyHTTPDescription
1300FORBIDDEN403You don’t have permission to access this resource
1301ACCOUNT_DISABLED403Account has been disabled

API Key Errors

CodeKeyHTTPDescription
1900MISSING_API_KEY401No api-key header provided
1901INVALID_API_KEY401API key not found or invalid
1902API_KEY_REVOKED401API key has been revoked
1903API_KEY_SCOPE_DENIED403API key doesn’t have the required scope
1904API_KEY_IP_DENIED403Request IP is not in the key’s whitelist
1908INSUFFICIENT_SCOPE403Insufficient scope permissions for this operation
1910API_SECRET_INVALID401Invalid API secret
1915NO_API_SECRET_CONFIGURED400Merchant has no API secret configured (required for client-token signing)

Trading Errors

Returned by deposit, withdrawal, inventory, and market endpoints.
CodeKeyHTTPDescription
1EXTERNAL_ID_EXISTS409External ID already exists for this merchant
2MISSING_ITEMS400No items were provided in the request
3INVENTORY_FETCH_FAILED424Couldn’t load the user’s Steam inventory
4NO_OFFER_FOUND400No valid offer exists for this item
5TRADE_OFFER_FAILED502Failed to send the Steam trade offer
6TOO_MANY_ACTIVE_TRADES429User has too many pending trades (per-client deposit guard)
7USER_NOT_TRADEABLE400User’s Steam account can’t trade
8TOO_MANY_ITEMS400Too many items in a single request
9ITEMS_UNAVAILABLE400Selected items not found or no longer available
10ITEMS_NOT_ACCEPTED400Items are not accepted for deposit
11PRICE_CHANGED409Price has changed since you last fetched it
12MERCHANT_BALANCE_LOW400Merchant balance is too low for this withdrawal
13INVALID_TRADEURL400Invalid or inaccessible trade URL
14LISTING_NOT_FOUND404Marketplace listing not found
15LISTING_PRICE_INVALID400Listing has an invalid or missing price
16INVALID_LISTING_ID400Invalid listing ID format
17INSUFFICIENT_ITEM_AMOUNT400Requested amount exceeds available quantity
18EXCEEDS_MAX_AMOUNT400Requested amount exceeds the maximum allowed
19DEPOSIT_IN_PROGRESS409A deposit is already processing for this user
20WITHDRAW_IN_PROGRESS409A withdrawal is already processing for this user
21TRADE_NOT_FOUND404Trade not found
22INVALID_STATE_TRANSITION409Invalid trade state transition
23INVALID_TRADE_ID400Invalid trade ID
31STEAM_UNAVAILABLE424Steam temporarily couldn’t serve the request; retry shortly
33STEAM_RATE_LIMITED424Steam is rate-limiting inventory requests; retry shortly

Asynchronous Trade Failure Codes

The errors above are returned synchronously when a call is rejected. A withdrawal that was accepted but later fails carries a separate, smaller, stable code instead — on Item.error (and on Trade.error when the whole trade failed for one shared cause), typed as TradeFailureCode. These are not numeric API error codes; they appear on the trade object and in callbacks.
errorMeaning
LISTING_UNAVAILABLEListing sold / delisted / out of stock
PRICE_CHANGEDPrice moved above your ceiling
TRADE_URL_INVALIDRecipient’s Steam trade URL is invalid or escrow-blocked
STEAM_ACCOUNT_RESTRICTEDRecipient’s Steam account can’t receive (VAC / ban / hold / private)
MARKET_UNAVAILABLETemporary upstream / our-side issue — retry later
PURCHASE_FAILEDUnclassified failure (catch-all)
canceled and declined items carry no code — the status is the reason. A declined withdrawal is buyer fault: your merchant wallet is refunded minus a 2% penalty (capped at $9). See Withdrawals → Per-Item Failure Reasons for handling guidance.

Wallet / Funding Errors

Mostly returned by crypto wallet endpoints, but several apply to trading flows too.
CodeKeyHTTPDescription
1600INSUFFICIENT_BALANCE400Insufficient balance for this operation
1601INVALID_AMOUNT400Invalid amount (e.g. zero or negative)
1622INSTANT_DEPOSITS_DISABLED503Instant deposits are temporarily disabled

Callback / Webhook Errors

CodeKeyHTTPDescription
1700INVALID_SIGNATURE401Callback signature verification failed
1701MISSING_RAW_BODY400Raw request body is missing
1704CALLBACK_URL_TEST_FAILED400Configured callback URL did not respond with 2xx
1705MERCHANT_NO_CALLBACK_URL409Merchant has no active callback URL (withdrawals require one)

Risk Management Errors

CodeKeyHTTPDescription
2100INVALID_RISK_POLICY400Invalid risk policy configuration
2101RISK_POLICY_NOT_FOUND404No active risk policy found
2103CLIENT_USER_NOT_FOUND404Client user not found

Identity Verification Errors

CodeKeyHTTPDescription
2300VERIFICATION_NOT_AVAILABLE503Identity verification is not available
2301VERIFICATION_ALREADY_VERIFIED409Account is already verified
2302VERIFICATION_IN_PROGRESS409A verification is already in progress
2303VERIFICATION_PROCESS_NOT_FOUND404Verification process not found
2304VERIFICATION_BANNED_IDENTITY403This identity cannot be verified
2305VERIFICATION_ACCOUNT_CAP_REACHED409Maximum linked accounts reached for this identity
2306VERIFICATION_ALREADY_LINKED409Account is already linked to an identity
2307VERIFICATION_IDENTITY_NOT_FOUND404Verified identity not found
2308VERIFICATION_SIGNICAT_ERROR502Verification provider returned an error
2309VERIFICATION_WEBHOOK_SIGNATURE_INVALID401Verification webhook signature is invalid
2310VERIFICATION_EMAIL_REQUIRED400Email is required to link an existing identity
2311VERIFICATION_NOT_LINKED400Account does not have a linked identity
2312VERIFICATION_LINK_FAILED500Unable to link identity to this account

Handling Errors

Check success first, then handle based on the error code or key:
const response = await fetch('https://api.assetpay.gg/client/trading/deposit', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': clientToken,
  },
  body: JSON.stringify(depositPayload),
});

const result = await response.json();

if (!result.success) {
  switch (result.error.key) {
    case 'PRICE_CHANGED':
      // Refetch inventory and show updated prices
      break;
    case 'ITEMS_UNAVAILABLE':
      // Remove unavailable items from selection
      break;
    case 'TOO_MANY_ACTIVE_TRADES':
    case 'DEPOSIT_IN_PROGRESS':
      // Tell user to wait for current deposit to finish
      break;
    case 'MERCHANT_BALANCE_LOW':
      // Withdrawal can't proceed, notify user
      break;
    default:
      console.error(`Trade error: ${result.error.key} (${result.error.code})`);
  }
}
When contacting support about an error, include the requestId from the response. It helps us trace the exact request in our logs.