Download OpenAPI specification:
Welcome to the DMarket Trading API section. Our JSON-based API enables you to manage your DMarket inventory through the methods featured below. In order to use the API, please generate your personal API keys in the account settings.
Request signature instructions
A valid HTTP request to the trading API must include 3 request headers:
X-Api-Key: public key (must be a hex string in lowercase) To get you your own public key, use https://dmarket.com/ (details : https://dmarket.com/faq#tradingAPI)
X-Sign-Date: timestamp or current time Example: 1605619994. Must not be older than 2 minutes from the request time.
X-Request-Sign: signature
The Ed25519 signature scheme is used for signing requests and proving items’ origin and ownership through public-private key pairs. Private and public keys diversification is aimed to provide secure back-to-back communication and the ability to rotate keys in case of security breaches on any side of the integration.
To make a signature, take the following steps:
Path parameters must appear DECODED in the non-signed string (the literal value, e.g. AK-47 | Redline (Field-Tested)), while query string parameters must appear exactly as they are transmitted, i.e. percent-encoded. The URL you actually send is percent-encoded in both cases. This applies to any method that takes a free-text value in the route path.
You can check out examples on https://github.com/dmarket/dm-trading-tools.
DMarket uses rate limiting to control the rate of API requests. Please read FAQ for details https://dmarket.com/faq#startUsingTradingAPI.
Getting general user profile information.
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl 'https://api.dmarket.com/account/v1/user' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "agreementsInfo": {
- "isConfirmed": true,
- "updated": 0
}, - "countryCode": "string",
- "countryCodeFromIP": "string",
- "email": "string",
- "features": [
- {
- "enabled": true,
- "name": "P2P"
}
], - "ga_client_id": "string",
- "hasActiveSubscriptions": true,
- "hasHistoryEvents": true,
- "id": "string",
- "imageUrl": "string",
- "isEmailVerified": true,
- "isPasswordSet": true,
- "level": 0,
- "linkedGames": [
- {
- "gameId": "string",
- "gameUserId": "string",
- "username": "string"
}
], - "migrated": true,
- "publicKey": "string",
- "regType": "steam",
- "restrictions": [
- {
- "expirationTime": 0,
- "name": "P2POfferCreation"
}
], - "settings": {
- "enabledDeviceConfirmation": true,
- "isSubscribedToNewsletters": true,
- "targetsLimit": 0,
- "tradingApiToken": "string"
}, - "steamAccount": {
- "apiKey": "string",
- "apiKeyStatus": "New",
- "icon": "string",
- "isProfilePrivate": true,
- "level": 0,
- "steamId": "string",
- "tradeUrl": "string",
- "username": "string"
}, - "twitchAccount": {
- "icon": "string",
- "userId": "string",
- "username": "string"
}, - "username": "string"
}Getting the current USD & DMC balance that is available for trading items / buying subscriptions. The response format is in coins (cents for USD, dimoshi for DMC).
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl 'https://api.dmarket.com/account/v1/balance' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "dmc": "string",
- "dmcAvailableToWithdraw": "string",
- "usd": "string",
- "usdAvailableToWithdraw": "string"
}Returns aggregated buy orders (targets) for a specific game and item title. Use this endpoint to see current demand: how many buy orders exist and at what prices.
Path parameters:
Response contains a list of orders with fields: amount (number of items requested), price (best price for that title and attributes), title, and attributes (quality/rarity/skin parameters, depending on the game).
| game_id required | string Game identifier. One of: a8db (CS2), 9a92 (Dota 2), tf2, rust. |
| title required | string Exact in-game item title, e.g. AK-47 | Redline (Field-Tested). Percent-encode it in the request URL, but use the decoded value when building the request signature — see the signing instructions in the introduction. |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools # The path parameter is signed DECODED, so the non-signed string here is # GET/marketplace-api/v1/targets-by-title/a8db/AK-47 | Redline (Field-Tested)$TIMESTAMP # The URL below is percent-encoded. Any encoding that decodes back to that path works — # HTTP clients differ in which characters they escape, so the samples below are both valid. curl 'https://api.dmarket.com/marketplace-api/v1/targets-by-title/a8db/AK-47%20%7C%20Redline%20%28Field-Tested%29' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "orders": [
- {
- "amount": "2",
- "price": "155000",
- "title": "★ Karambit | Doppler (Factory New)",
- "attributes": {
- "floatPartValue": "any",
- "paintSeed": "any",
- "phase": "phase-2"
}
}, - {
- "amount": "1",
- "price": "148000",
- "title": "★ Karambit | Doppler (Factory New)",
- "attributes": {
- "floatPartValue": "FN-0",
- "paintSeed": "any",
- "phase": "any"
}
}
]
}Returns aggregated pricing for specified item titles, including best buy (order) and best sell (offer) prices and the total number of orders/offers per title. Use this to quickly assess market depth and price levels.
Request body:
Response:
| cursor | string |
| limit | string <int64> |
object (ListAggregatedPricesRequestFilter) |
{- "filter": {
- "game": "a8db",
- "titles": [
- "AK-47 | Redline (Field-Tested)"
]
}, - "limit": "100"
}{- "aggregatedPrices": [
- {
- "title": "string",
- "orderBestPrice": {
- "Currency": "string",
- "Amount": "string"
}, - "orderCount": "string",
- "offerBestPrice": {
- "Currency": "string",
- "Amount": "string"
}, - "offerCount": "string"
}
], - "nextCursor": "string"
}Get the list of the current user's targets. Prices are returned as integer cents. 'gameId' param values are: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust.
| gameId required | string Enum: "a8db" "9a92" "tf2" "rust" Game identifier. One of: a8db (CS2), 9a92 (Dota 2), tf2, rust. |
| title | string Filter targets by title prefix (case-insensitive). |
| treeFilters | string Attribute filters in comma-separated key=value format. Values must match how the attribute is stored (typically the lowercase Steam string; see allowed values below). Supported common keys: CS2 keys: Allowed CS2 values:
Multi-value: suffix key with Negation: prefix key with Example: |
| priceFrom | integer <int64> Lower bound of the target price range in cents (inclusive). |
| priceTo | integer <int64> Upper bound of the target price range in cents (inclusive). |
| orderBy | string Enum: "price" "title" "createdAt" Sort field. Supported values: |
| orderDir | string Enum: "asc" "desc" Sort direction. Defaults to |
| limit required | integer <int32> [ 1 .. 100 ] Number of items to return per page. Range 1..100. |
| cursor | string <= 500 characters Pagination cursor returned from a previous response. |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl -G 'https://api.dmarket.com/marketplace-api/v2/user/targets' \ --data-urlencode 'gameId=a8db' \ --data-urlencode 'title=AK-47' \ --data-urlencode 'treeFilters=categoryPath=rifle,exterior[]=factory new' \ --data-urlencode 'orderBy=price' \ --data-urlencode 'orderDir=asc' \ --data-urlencode 'limit=10' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "items": [
- {
- "targetId": "9b1f8a2c-3d4e-4f5a-8b6c-7d8e9f0a1b2c",
- "title": "★ Karambit | Doppler (Factory New)",
- "amount": "1",
- "status": "TARGET_STATUS_ACTIVE",
- "priceCents": "155000",
- "attributes": {
- "categoryPath": "knife/karambit",
- "title": "★ Karambit | Doppler (Factory New)",
- "name": "★ Karambit | Doppler",
- "cs2": {
- "category": "CATEGORY_NORMAL",
- "exterior": "EXTERIOR_FACTORY_NEW",
- "phase": "PHASE_TITLE_PHASE_2",
- "paintSeed": 0,
- "floatPart": "FLOAT_PART_UNSPECIFIED",
- "isAdvanced": true
}
}, - "createdAt": "2026-07-01T12:00:00Z",
- "updatedAt": "2026-07-01T12:00:00Z"
}
], - "total": "3",
- "cursor": ""
}Get the list of the user’s closed targets. The price amount format is in USD, i.e. 0.5 is 50 cents.
| Limit | string <uint64> Limits number of returned closed targets in response. |
| OrderDir | string Default: "desc" Enum: "desc" "asc" |
| TargetCreated.From | string <int64> Example: TargetCreated.From=1730419200 |
| TargetCreated.To | string <int64> Example: TargetCreated.To=1730419200 |
| TargetClosed.From | string <int64> Example: TargetClosed.From=1730419200 |
| TargetClosed.To | string <int64> Example: TargetClosed.To=1730419200 |
| Cursor | string Cursor is next page identifier. |
| Finalization.From | string <int64> Example: Finalization.From=1730419200 |
| Finalization.To | string <int64> Example: Finalization.To=1730419200 |
| Status | Array of strings Items Enum: "successful" "reverted" "trade_protected" |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl -G 'https://api.dmarket.com/marketplace-api/v1/user-targets/closed' \ --data-urlencode 'Limit=10' \ --data-urlencode 'OrderDir=desc' \ --data-urlencode 'Status=successful' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "Trades": [
- {
- "OfferID": "string",
- "TargetID": "string",
- "AssetID": "string",
- "Price": {
- "Currency": "string",
- "Amount": 0.1
}, - "CurrencyCode": "string",
- "Amount": "string",
- "Title": "string",
- "ClosedAt": "string",
- "Status": "successful",
- "FinalizationTime": "string"
}
], - "Total": "string",
- "Cursor": "string"
}The request for target creation requires the following fields: "GameID" param (values are: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust) and array of "Targets". The price amount format is in USD, i.e. 0.5 is 50 cents, "Title" - full item name. Also, additional attributes ("Attrs" field in #/components/schemas/marketplaceCreateTargetRequest) for each item such as "phase", "floatPartValue" and "paintSeed" are available. You can check possible values of additional attributes here. Limitations: maximum "Amount" value is 100; maximum quantity of targets in one request is 100; maximum number of created targets for one game is individual for each user and can be different for each game. You can contact our customer support team to find out your Target's limit.
| GameID | string GameID of same assets in one single target entity. |
Array of objects (marketplaceCreateTargetRequest) List of targets to create. |
{- "GameID": "a8db",
- "Targets": [
- {
- "Amount": "1",
- "Price": {
- "Currency": "USD",
- "Amount": 10.5
}, - "Title": "AK-47 | Redline (Field-Tested)",
- "Attrs": {
- "floatPartValue": "FT-0"
}
}
]
}{- "Result": [
- {
- "CreateTarget": {
- "Amount": "string",
- "Price": {
- "Currency": "string",
- "Amount": 0.1
}, - "Title": "string",
- "Attrs": {
- "paintSeed": 0,
- "phase": "",
- "floatPartValue": ""
}
}, - "TargetID": "string",
- "Successful": true,
- "Error": {
- "Code": "Internal",
- "Message": "string"
}
}
]
}Remove targets.
Array of objects (marketplaceDeleteTargetRequest) Targets list to delete. |
{- "Targets": [
- {
- "TargetID": "d4e5f6a7-b8c9-0123-def0-456789012345"
}
]
}{- "Result": [
- {
- "DeleteTarget": {
- "TargetID": "string"
}, - "Successful": true,
- "Error": {
- "Code": "Internal",
- "Message": "string"
}
}
]
}Get the list of offers currently available for purchase on the DMarket storefront. Prices are returned as integer cents. 'gameId' param values are: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust.
Image URIs are omitted from this listing by default: attributes.imageUri, together with image on CS2 stickers and charms and on Dota 2 gems, come back as empty strings. They are a large share of every response and the clients that read this endpoint do not render them, so leaving them out keeps the listing fast for everyone. Pass withImages=true if you do need them — nothing else about the response changes either way.
This applies to this endpoint only. GET /marketplace-api/v2/user/inventory and GET /marketplace-api/v2/user/offers always return the image URIs.
| gameId required | string Enum: "a8db" "9a92" "tf2" "rust" Example: gameId=a8db Game identifier. One of: a8db (CS2), 9a92 (Dota 2), tf2, rust. |
| title | string Filter offers by title prefix (case-insensitive). |
| treeFilters | string Example: treeFilters=categoryPath=rifle,exterior[]=factory new Attribute filters in comma-separated key=value format. Values must match how the attribute is stored (typically the lowercase Steam string; see allowed values below). Supported common keys: CS2 keys: TF2 keys: Allowed CS2 values:
Allowed TF2 exterior values: Multi-value: suffix key with Negation: prefix key with Ranges: Existence check: Charm and sticker filters ( Example: |
| priceFrom | integer <int64> Lower bound of the offer price range in cents (inclusive). |
| priceTo | integer <int64> Upper bound of the offer price range in cents (inclusive). |
| orderBy | string Enum: "price" "title" "float" "createdAt" "discount" Sort field. Supported values:
|
| orderDir | string Enum: "asc" "desc" Sort direction. Defaults to |
| limit required | integer <int32> [ 1 .. 100 ] Number of items to return per page. Range 1..100. |
| cursor | string <= 500 characters Pagination cursor returned from a previous response. |
| withImages | boolean Return the image URIs instead of empty strings: |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl -G 'https://api.dmarket.com/marketplace-api/v2/offers' \ --data-urlencode 'gameId=a8db' \ --data-urlencode 'title=AK-47' \ --data-urlencode 'treeFilters=categoryPath=rifle,exterior[]=factory new' \ --data-urlencode 'priceFrom=500' \ --data-urlencode 'priceTo=5000' \ --data-urlencode 'orderBy=price' \ --data-urlencode 'orderDir=asc' \ --data-urlencode 'limit=10' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
What every caller receives without withImages: attributes.imageUri and the image on each sticker, charm and gem come back as empty strings.
{- "items": [
- {
- "attributes": {
- "backgroundColor": "42413e",
- "botId": "76561199000000001",
- "categoryPath": "rifle/ak-47",
- "classId": "3669724953",
- "depositLocked": false,
- "description": "",
- "cs2": {
- "category": "CATEGORY_NORMAL",
- "collection": "the huntsman collection",
- "family": "redline",
- "exterior": "EXTERIOR_FIELD_TESTED",
- "float": "0.2356003224849701",
- "inspectInGameUri": "steam://run/730//+csgo_econ_action_preview%20S76561199000000001A40000000000D4649654965123456789",
- "itemType": "rifle",
- "phase": "",
- "phaseTitle": "PHASE_TITLE_UNSPECIFIED",
- "quality": "QUALITY_CLASSIFIED",
- "rareInfo": "",
- "paintIndex": 282,
- "paintSeed": 412,
- "stickers": [
- {
- "id": 812,
- "name": "Sticker | Natus Vincere | Katowice 2019",
- "image": "",
- "slot": 0,
- "wear": "0",
- "scale": "1",
- "rotation": "0",
- "tintId": 0,
- "collection": "katowice 2019",
- "rarity": "high grade",
- "colors": [
- "COLOR_YELLOW",
- "COLOR_BLACK"
], - "team": "Natus Vincere",
- "player": "",
- "offsetX": 0,
- "offsetY": 0,
- "offsetZ": 0,
- "pattern": 0
}
], - "fadePercent": "0",
- "rarePattern": "RARE_PATTERN_UNSPECIFIED",
- "colors": [
- "COLOR_RED",
- "COLOR_BLACK"
], - "floatPart": "FLOAT_PART_FT_2",
- "charms": [ ],
- "charmPattern": 0,
- "defIndex": 7,
- "customName": "",
- "killEaterScoreType": 0,
- "killEaterValue": 0,
- "isProskin": false,
- "proskin": {
- "proPlayerOwned": false,
- "hasHighlights": false,
- "proPlayerNickname": ""
}, - "inspectInGameTemplateUri": ""
}, - "gameId": "a8db",
- "gameType": "steam",
- "imageUri": "",
- "inGameAssetId": "8590574520:3669724953:40000000000:730",
- "itemSlug": "ak-47-redline",
- "name": "AK-47 | Redline",
- "nameColor": "d2d2d2",
- "owner": "5f8a1c3e-9b2d-4e6f-8a1b-2c3d4e5f6a7b",
- "productId": "a8db:0e2f6f4f7b9c4d2a8e1f3a5c7e9b1d3f",
- "provider": "CPU",
- "slug": "ak-47-redline",
- "steamAssetId": "40000000000",
- "title": "AK-47 | Redline (Field-Tested)",
- "tradable": true,
- "tradeLockDays": 0,
- "tradeLockDuration": null,
- "unlockDate": "2026-06-10T18:00:00Z",
- "type": "rifle",
- "viewAtSteamUri": "https://steamcommunity.com/profiles/76561199000000001/inventory/#730_2_40000000000",
- "withdrawable": true,
- "id": "3d9c9c6a-4f2e-4b83-a1c7-90ab12cd34ef",
- "overstocked": false,
- "status": "default",
- "saleRestricted": false,
- "withdrawalState8": false,
- "settlementTime": "2026-06-10T18:00:00Z",
- "sellUnavailable": false,
- "depositor": "5f8a1c3e-9b2d-4e6f-8a1b-2c3d4e5f6a7b",
- "withdrawOnlyEndTime": null,
- "tradeProtectionRemoved": true,
- "revertPendingUntil": null
}, - "priceCents": "1599",
- "createdAt": "2026-06-17T10:30:00Z",
- "locked": false,
- "offerId": "f7c1b8e2-9a3d-4e6f-bb12-3a5c9d0e1f23",
- "discountPercent": 12.5
}
], - "total": "128",
- "cursor": "eyJvZmZzZXQiOjEwfQ=="
}Buy the selected offers from the market. As the result of the operation: the offer is removed, the items are transferred to the buyer, the purchase amount is transferred to the seller, the fee is transferred to DMarket. The price amount format is in coins (cents for USD).
required | Array of objects (entity.OfferPrice) |
{- "offers": [
- {
- "offerId": "c3d4e5f6-a7b8-9012-cdef-345678901234",
- "price": {
- "amount": "4999",
- "currency": "USD"
}, - "type": "dmarket"
}
]
}{- "dmOffersFailReason": {
- "code": "string"
}, - "dmOffersStatus": {
- "property1": {
- "started": true
}, - "property2": {
- "started": true
}
}, - "orderId": "string",
- "p2pOffersStatus": {
- "property1": {
- "started": true
}, - "property2": {
- "started": true
}
}, - "status": "TxPending",
- "txId": "string"
}Transferring items from a 3rd party inventory (e.g. a Steam game) to a DMarket inventory.
The operation is asynchronous: a successful response means the transfer was registered, not completed. Poll GET /marketplace-api/v1/deposit-status/{DepositID} to track the result; for Steam games the id of the created trade offer appears there in SteamDepositInfo.TradeOfferID.
Items must be currently tradable on Steam. An item received in a recent trade stays under Steam Trade Protection and cannot be traded again until the protection window set by Steam (7 days) ends: the deposit is registered, but no Steam trade offer is created and the status resolves to TransferStatusError with the InventoryRevoked error. This restriction is enforced by Steam and applies to every Steam game.
| AssetID | Array of strings List of in-game asset ids to deposit, in the colon-separated composite format |
{- "AssetID": [
- "188530139:3106076616:40361121578:730",
- "0:3938946694:512345678901234567:252490"
]
}{- "DepositID": "string"
}Get information about current deposit transfers.
Of the TransferStatus values, a deposit reports only TransferStatusPending (registered or in progress), TransferStatusSuccess (the items are in the DMarket inventory — Assets maps each requested in-game asset id to the assigned DMarket asset id) and TransferStatusError (see Error).
| DepositID required | string Deposit operation unique identifier. |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl 'https://api.dmarket.com/marketplace-api/v1/deposit-status/e5f6a7b8-c9d0-1234-ef01-567890123456' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "DepositID": "string",
- "AssetID": [
- "string"
], - "Status": "TransferStatusPending",
- "Error": "string",
- "Assets": [
- {
- "InGameAssetID": "string",
- "DmarketAssetID": "string"
}
], - "SteamDepositInfo": {
- "TradeOfferID": "string",
- "Message": "string"
}
}Get the titles of a game that DMarket currently refuses for deposit — those flagged as overstocked (the market already holds enough copies of the title) or with selling switched off. Use it to check whether a title can be sold on DMarket before acquiring the item, instead of finding out when deposit-assets rejects it.
Only blocked titles are stored, so this list is the exact set deposit-assets refuses: a title absent from the response is accepted for deposit.
Match on the full title string. Exterior and StatTrak™/Souvenir variants are separate titles and are flagged independently — M4A1-S | Black Lotus (Field-Tested) being blocked says nothing about StatTrak™ M4A1-S | Black Lotus (Field-Tested) or about other exteriors of the same skin.
The underlying flags are refreshed about once a day. The top-level updatedAt reports the most recent change across the whole blocked set of the game, so the response is safe to cache until it moves; each title also carries its own updatedAt. Nothing clears a flag once a title stops being pushed, so a long-untouched entry is less trustworthy than a fresh one — use the per-title timestamp if you want to apply your own staleness threshold. total and the top-level updatedAt are read separately from the page and can briefly disagree with it during a refresh. A game with no flagged titles returns an empty titles list rather than an error.
'gameId' param values are: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust.
| gameId required | string Enum: "a8db" "9a92" "tf2" "rust" Example: gameId=a8db Game identifier. One of: a8db (CS2), 9a92 (Dota 2), tf2, rust. |
| limit | integer <int32> [ 1 .. 5000 ] Example: limit=5000 Number of titles to return per page. Range 1..5000, defaults to 1000 when omitted. The blocked list is a few thousand titles per game, so a large page size keeps it to one or two requests. |
| cursor | string <= 500 characters ^[A-Za-z0-9_-]*={0,2}$ Pagination cursor returned from a previous response. Pass it unchanged to get the next page. URL-safe base64 ( The cursor is only stable for changes past its position. The underlying flags are refreshed once a day and not atomically, so a title alphabetically before your cursor that becomes blocked mid-walk is missed by that walk. Complete a walk promptly, and start a fresh walk from no cursor rather than resuming one held across a refresh. |
{- "gameId": "a8db",
- "titles": [
- {
- "title": "M4A1-S | Black Lotus (Field-Tested)",
- "overstocked": true,
- "sellUnavailable": false,
- "updatedAt": "2026-05-02T09:12:41Z"
}, - {
- "title": "SSG 08 | Sans Comic (Factory New)",
- "overstocked": true,
- "sellUnavailable": false,
- "updatedAt": "2026-08-27T21:35:53Z"
}
], - "updatedAt": "2026-08-27T21:35:53Z",
- "total": "3983",
- "cursor": "U1NHIDA4IHwgU2FucyBDb21pYyAoRmFjdG9yeSBOZXcp"
}Get the list of the current user's active sell offers for further management (edit price, remove from sale). Prices are returned as integer cents. 'gameId' param values are: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust.
| gameId required | string Enum: "a8db" "9a92" "tf2" "rust" Example: gameId=a8db Game identifier. One of: a8db (CS2), 9a92 (Dota 2), tf2, rust. |
| title | string Filter offers by title prefix (case-insensitive). |
| treeFilters | string Example: treeFilters=categoryPath=rifle,exterior[]=factory new Attribute filters in comma-separated key=value format. Values must match how the attribute is stored (typically the lowercase Steam string; see allowed values below). Supported common keys: CS2 keys: TF2 keys: Allowed CS2 values:
Allowed TF2 exterior values: Multi-value: suffix key with Negation: prefix key with Ranges: Existence check: Charm and sticker filters ( Example: |
| orderBy | string Enum: "price" "title" "float" "createdAt" Sort field. Supported values: |
| orderDir | string Enum: "asc" "desc" Sort direction. Defaults to |
| limit required | integer <int32> [ 1 .. 100 ] Number of items to return per page. Range 1..100. |
| cursor | string <= 500 characters Pagination cursor returned from a previous response. |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl -G 'https://api.dmarket.com/marketplace-api/v2/user/offers' \ --data-urlencode 'gameId=a8db' \ --data-urlencode 'title=AK-47' \ --data-urlencode 'treeFilters=categoryPath=rifle,exterior[]=factory new' \ --data-urlencode 'orderBy=createdAt' \ --data-urlencode 'orderDir=desc' \ --data-urlencode 'limit=10' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "items": [
- {
- "attributes": {
- "backgroundColor": "42413e",
- "botId": "76561199000000001",
- "categoryPath": "rifle/ak-47",
- "classId": "3669724953",
- "depositLocked": false,
- "description": "",
- "cs2": {
- "category": "CATEGORY_NORMAL",
- "collection": "the huntsman collection",
- "family": "redline",
- "exterior": "EXTERIOR_FIELD_TESTED",
- "float": "0.2356003224849701",
- "inspectInGameUri": "steam://run/730//+csgo_econ_action_preview%20S76561199000000001A40000000000D4649654965123456789",
- "itemType": "rifle",
- "phase": "",
- "phaseTitle": "PHASE_TITLE_UNSPECIFIED",
- "quality": "QUALITY_CLASSIFIED",
- "rareInfo": "",
- "paintIndex": 282,
- "paintSeed": 412,
- "stickers": [
- {
- "id": 812,
- "name": "Sticker | Natus Vincere | Katowice 2019",
- "slot": 0,
- "wear": "0",
- "scale": "1",
- "rotation": "0",
- "tintId": 0,
- "collection": "katowice 2019",
- "rarity": "high grade",
- "colors": [
- "COLOR_YELLOW",
- "COLOR_BLACK"
], - "team": "Natus Vincere",
- "player": "",
- "offsetX": 0,
- "offsetY": 0,
- "offsetZ": 0,
- "pattern": 0
}
], - "fadePercent": "0",
- "rarePattern": "RARE_PATTERN_UNSPECIFIED",
- "colors": [
- "COLOR_RED",
- "COLOR_BLACK"
], - "floatPart": "FLOAT_PART_FT_2",
- "charms": [ ],
- "charmPattern": 0,
- "defIndex": 7,
- "customName": "",
- "killEaterScoreType": 0,
- "killEaterValue": 0,
- "isProskin": false,
- "proskin": {
- "proPlayerOwned": false,
- "hasHighlights": false,
- "proPlayerNickname": ""
}, - "inspectInGameTemplateUri": ""
}, - "gameId": "a8db",
- "gameType": "steam",
- "inGameAssetId": "8590574520:3669724953:40000000000:730",
- "itemSlug": "ak-47-redline",
- "name": "AK-47 | Redline",
- "nameColor": "d2d2d2",
- "owner": "5f8a1c3e-9b2d-4e6f-8a1b-2c3d4e5f6a7b",
- "productId": "a8db:0e2f6f4f7b9c4d2a8e1f3a5c7e9b1d3f",
- "provider": "CPU",
- "slug": "ak-47-redline",
- "steamAssetId": "40000000000",
- "title": "AK-47 | Redline (Field-Tested)",
- "tradable": true,
- "tradeLockDays": 0,
- "tradeLockDuration": null,
- "unlockDate": "2026-06-10T18:00:00Z",
- "type": "rifle",
- "viewAtSteamUri": "https://steamcommunity.com/profiles/76561199000000001/inventory/#730_2_40000000000",
- "withdrawable": true,
- "id": "3d9c9c6a-4f2e-4b83-a1c7-90ab12cd34ef",
- "overstocked": false,
- "status": "default",
- "saleRestricted": false,
- "withdrawalState8": false,
- "settlementTime": "2026-06-10T18:00:00Z",
- "sellUnavailable": false,
- "depositor": "5f8a1c3e-9b2d-4e6f-8a1b-2c3d4e5f6a7b",
- "withdrawOnlyEndTime": null,
- "tradeProtectionRemoved": true,
- "revertPendingUntil": null
}, - "priceCents": "1599",
- "createdAt": "2026-06-17T10:30:00Z",
- "locked": false,
- "offerId": "c3d4e5f6-1234-4abc-9def-7890abcdef12",
- "discountPercent": 0
}
], - "total": "7",
- "cursor": ""
}Create multiple offers in a single request.
Array of objects (marketplacev2CreateOfferRequest) |
{- "requests": [
- {
- "assetId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "priceCents": "1599"
}
]
}{- "offers": [
- {
- "id": "string",
- "assetId": "string"
}
], - "failed": [
- {
- "assetId": "string",
- "code": "string",
- "message": "string"
}
]
}Update multiple offers in a single request.
Array of objects (marketplacev2UpdateOfferRequest) |
{- "requests": [
- {
- "offerId": "c3d4e5f6-a7b8-9012-cdef-345678901234",
- "priceCents": "1799"
}
]
}{- "offers": [
- {
- "id": "string",
- "assetId": "string"
}
], - "failed": [
- {
- "offerId": "string",
- "code": "string",
- "message": "string"
}
]
}Delete multiple offers in a single request.
Array of objects (marketplacev2DeleteOfferRequest) |
{- "requests": [
- {
- "offerId": "c3d4e5f6-a7b8-9012-cdef-345678901234"
}
]
}{- "offers": [
- {
- "id": "string",
- "assetId": "string"
}
], - "failed": [
- {
- "offerId": "string",
- "code": "string",
- "message": "string"
}
]
}Get the list of the user’s closed sell offers. The price amount format is in USD, i.e. 0.5 is 50 cents.
| Limit | string <uint64> Limits number of returned closed offers in response. |
| OrderDir | string Default: "desc" Enum: "desc" "asc" |
| OfferCreated.From | string <int64> Example: OfferCreated.From=1730419200 |
| OfferCreated.To | string <int64> Example: OfferCreated.To=1730419200 |
| OfferClosed.From | string <int64> Example: OfferClosed.From=1730419200 |
| OfferClosed.To | string <int64> Example: OfferClosed.To=1730419200 |
| Cursor | string Cursor is next page identifier. |
| Finalization.From | string <int64> Example: Finalization.From=1730419200 |
| Finalization.To | string <int64> Example: Finalization.To=1730419200 |
| Status | Array of strings Items Enum: "successful" "reverted" "trade_protected" |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl -G 'https://api.dmarket.com/marketplace-api/v1/user-offers/closed' \ --data-urlencode 'Limit=10' \ --data-urlencode 'OrderDir=desc' \ --data-urlencode 'Status=successful' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "Trades": [
- {
- "OfferID": "string",
- "TargetID": "string",
- "AssetID": "string",
- "Price": {
- "Currency": "string",
- "Amount": 0.1
}, - "CurrencyCode": "string",
- "Amount": "string",
- "Title": "string",
- "Fee": {
- "Amount": {
- "Currency": "string",
- "Amount": 0.1
}, - "Percent": "string",
- "IsPersonal": true
}, - "OfferCreatedAt": "string",
- "OfferClosedAt": "string",
- "Status": "successful",
- "FinalizationTime": "string"
}
], - "Total": "string",
- "Cursor": "string"
}Get user inventory details. Both 3rd party (e.g. Steam) and DMarket inventories are merged into one list. Prices are returned as integer cents. 'gameId' param values are: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust.
| gameId required | string Enum: "a8db" "9a92" "tf2" "rust" Game identifier. One of: a8db (CS2), 9a92 (Dota 2), tf2, rust. |
| title | string Filter assets by title prefix (case-insensitive). |
| treeFilters | string Attribute filters in comma-separated key=value format. Values must match how the attribute is stored (typically the lowercase Steam string; see allowed values below). Supported common keys: CS2 keys: TF2 keys: Allowed CS2 values:
Allowed TF2 exterior values: Multi-value: suffix key with Negation: prefix key with Ranges: Existence check: Example: |
| orderBy | string Enum: "price" "title" "float" "createdAt" "updatedAt" Sort field. Supported values: |
| orderDir | string Enum: "asc" "desc" Sort direction. Defaults to |
| limit required | integer <int32> [ 1 .. 100 ] Number of items to return per page. Range 1..100. |
| cursor | string <= 500 characters Pagination cursor returned from a previous response. |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl -G 'https://api.dmarket.com/marketplace-api/v2/user/inventory' \ --data-urlencode 'gameId=a8db' \ --data-urlencode 'title=AK-47' \ --data-urlencode 'treeFilters=categoryPath=rifle,exterior[]=factory new' \ --data-urlencode 'orderBy=price' \ --data-urlencode 'orderDir=asc' \ --data-urlencode 'limit=10' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "items": [
- {
- "attributes": {
- "backgroundColor": "42413e",
- "botId": "76561199000000001",
- "categoryPath": "rifle/ak-47",
- "classId": "3669724953",
- "depositLocked": false,
- "description": "",
- "cs2": {
- "category": "CATEGORY_NORMAL",
- "collection": "the huntsman collection",
- "family": "redline",
- "exterior": "EXTERIOR_FIELD_TESTED",
- "float": "0.2356003224849701",
- "inspectInGameUri": "steam://run/730//+csgo_econ_action_preview%20S76561199000000001A40000000000D4649654965123456789",
- "itemType": "rifle",
- "phase": "",
- "phaseTitle": "PHASE_TITLE_UNSPECIFIED",
- "quality": "QUALITY_CLASSIFIED",
- "rareInfo": "",
- "paintIndex": 282,
- "paintSeed": 412,
- "stickers": [
- {
- "id": 812,
- "name": "Sticker | Natus Vincere | Katowice 2019",
- "slot": 0,
- "wear": "0",
- "scale": "1",
- "rotation": "0",
- "tintId": 0,
- "collection": "katowice 2019",
- "rarity": "high grade",
- "colors": [
- "COLOR_YELLOW",
- "COLOR_BLACK"
], - "team": "Natus Vincere",
- "player": "",
- "offsetX": 0,
- "offsetY": 0,
- "offsetZ": 0,
- "pattern": 0
}
], - "fadePercent": "0",
- "rarePattern": "RARE_PATTERN_UNSPECIFIED",
- "colors": [
- "COLOR_RED",
- "COLOR_BLACK"
], - "floatPart": "FLOAT_PART_FT_2",
- "charms": [ ],
- "charmPattern": 0,
- "defIndex": 7,
- "customName": "",
- "killEaterScoreType": 0,
- "killEaterValue": 0,
- "isProskin": false,
- "proskin": {
- "proPlayerOwned": false,
- "hasHighlights": false,
- "proPlayerNickname": ""
}, - "inspectInGameTemplateUri": ""
}, - "gameId": "a8db",
- "gameType": "steam",
- "inGameAssetId": "8590574520:3669724953:40000000000:730",
- "itemSlug": "ak-47-redline",
- "name": "AK-47 | Redline",
- "nameColor": "d2d2d2",
- "owner": "5f8a1c3e-9b2d-4e6f-8a1b-2c3d4e5f6a7b",
- "productId": "a8db:0e2f6f4f7b9c4d2a8e1f3a5c7e9b1d3f",
- "provider": "CPU",
- "slug": "ak-47-redline",
- "steamAssetId": "40000000000",
- "title": "AK-47 | Redline (Field-Tested)",
- "tradable": true,
- "tradeLockDays": 0,
- "tradeLockDuration": null,
- "unlockDate": "2026-06-10T18:00:00Z",
- "type": "rifle",
- "viewAtSteamUri": "https://steamcommunity.com/profiles/76561199000000001/inventory/#730_2_40000000000",
- "withdrawable": true,
- "id": "3d9c9c6a-4f2e-4b83-a1c7-90ab12cd34ef",
- "overstocked": false,
- "status": "default",
- "saleRestricted": false,
- "withdrawalState8": false,
- "settlementTime": "2026-06-10T18:00:00Z",
- "sellUnavailable": false,
- "depositor": "5f8a1c3e-9b2d-4e6f-8a1b-2c3d4e5f6a7b",
- "withdrawOnlyEndTime": null,
- "tradeProtectionRemoved": true,
- "revertPendingUntil": null
}, - "suggestedPrice": {
- "currency": "USD",
- "amount": "15.99"
}, - "offerRecommendedPrice": {
- "currency": "USD",
- "amount": "15.49"
}, - "createdAt": "2026-06-17T10:30:00Z",
- "updatedAt": "2026-07-01T08:12:45Z",
- "inMarket": true
}
], - "total": "42",
- "cursor": ""
}Updating DMarket inventory details to sync them with data from Steam.
| Type | string (marketplaceInventorySyncType) Default: "UnknownSyncType" Enum: "UnknownSyncType" "Inventory" |
| GameID | string (marketplaceGames) Default: "UnknownGame" Enum: "UnknownGame" "CSGO" "Dota2" "TF2" "LifeBeyond" "Rust" |
{- "Type": "Inventory",
- "GameID": "CSGO"
}{ }Withdraw assets. 'gameId' param values are: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust
required | Array of objects (entity.Asset) |
| requestId required | string |
{- "assets": [
- {
- "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "gameId": "a8db",
- "classId": "c7e8f9a0-1234-5678-9abc-def012345678"
}
], - "requestId": "withdraw-001"
}{- "transferId": "string"
}Get the list of items with lower fees. The new list of items every day. 'gameId' param values are: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust. 'offerType' param values are: 'dmarket', 'p2p'.
| gameId required | string enums: CS2 - a8db, Team Fortress 2 - tf2, Dota 2 - 9a92, Rust - rust |
| offerType | string Default: "dmarket" enums: "dmarket", "p2p" |
| limit | integer Default: 10 limit |
| offset | integer Default: 0 offset |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl -G 'https://api.dmarket.com/exchange/v1/customized-fees' \ --data-urlencode 'gameId=a8db' \ --data-urlencode 'offerType=dmarket' \ --data-urlencode 'limit=20' \ --data-urlencode 'offset=0' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "defaultFee": {
- "fraction": "string",
- "minAmount": 0
}, - "reducedFees": [
- {
- "expiresAt": 0,
- "fraction": "string",
- "maxPrice": 0,
- "minPrice": 0,
- "title": "string"
}
]
}Get the item sales history. Up to 12 last months.
| gameId required | string |
| title required | string |
| filters | string filters is a list of filters. For example: exterior[]=factory new,phase[]=phase-1,phase[]=phase-2,float[]=2,float[]=133. |
| txOperationType | Array of strings Items Enum: "Offer" "Target" tx_operation_type is a type of transaction to return. Values: "", "Target", "Offer". |
| limit | string <int64> limit is a maximum number of sales to return. min: 1 max: 20 |
| offset | string <int64> |
# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools curl -G 'https://api.dmarket.com/trade-aggregator/v1/last-sales' \ --data-urlencode 'gameId=a8db' \ --data-urlencode 'title=AK-47 | Redline (Field-Tested)' \ --data-urlencode 'limit=20' \ -H "X-Api-Key: $DMARKET_PUBLIC_KEY" \ -H "X-Sign-Date: $TIMESTAMP" \ -H "X-Request-Sign: dmar ed25519 $SIGNATURE"
{- "sales": [
- {
- "price": "1550.00",
- "date": "1784219849",
- "txOperationType": "Offer",
- "offerAttributes": {
- "floatValue": 0.03300321847200394,
- "paintSeed": 672,
- "rareInfo": "phase",
- "phaseTitle": "emerald",
- "stickers": null,
- "charms": null,
- "charmPattern": null
}, - "orderAttributes": { }
}, - {
- "price": "15.99",
- "date": "1784133449",
- "txOperationType": "Target",
- "offerAttributes": {
- "floatValue": 0.29052016139030457,
- "paintSeed": 89,
- "rareInfo": null,
- "phaseTitle": null,
- "stickers": [
- {
- "name": "Virtus.Pro (Gold) | Atlanta 2017",
- "rarity": "Gold"
}
], - "charms": null,
- "charmPattern": null
}, - "orderAttributes": {
- "isAdvanced": true,
- "rareInfo": null
}
}
]
}