openapi: 3.0.4 info: title: DMarket trading Account Sell Items API description: '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: 1) X-Api-Key: public key (must be a hex string in lowercase) To get you your own public key, use (details : ) 2) X-Sign-Date: timestamp or current time Example: 1605619994. Must not be older than 2 minutes from the request time. 3) 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: 1) Build non-signed string formula (HTTP Method) + (Route path + HTTP query params) + (body string) + (timestamp) ). Example: POST/get-item?Amount=%220.25%22&Limit=%22100%22&Offset=%22150%22&Order=%22desc%22&1605619994) 2) After you’ve created a non-signed string with a default concatenation method, sign it with Ed25519 (NaCl "sign" is Ed25519) using your secret key. 3) Hex-encode the 64-byte Ed25519 signature 4) Add your signature string to HTTP request headers X-Request-Sign (dmar ed25519 signature) You can check out examples on . DMarket uses rate limiting to control the rate of API requests. Please read FAQ for details .' version: v2.0.0 x-logo: url: logo.svg backgroundColor: '#FFFFFF' altText: DMarket logo servers: - url: https://api.dmarket.com security: - ApiKey: [] SignDate: [] RequestSign: [] tags: - name: Sell Items description: Create, edit, delete and list your sell offers. paths: /marketplace-api/v1/deposit-assets: post: tags: - Sell Items summary: Deposit assets description: Transferring items from a 3rd party inventory (e.g. a Steam game) to a Dmarket inventory. operationId: DepositAssets requestBody: content: application/json: schema: $ref: '#/components/schemas/marketplaceDepositAssetsRequest' example: AssetID: - a1b2c3d4-e5f6-7890-abcd-ef1234567890 - b2c3d4e5-f6a7-8901-bcde-f23456789012 required: true responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/marketplaceDepositAssetsResponse' default: description: An unexpected error response content: application/json: schema: $ref: '#/components/schemas/runtimeError' x-codeSamples: - lang: Shell label: cURL source: "# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools\ncurl -X POST 'https://api.dmarket.com/marketplace-api/v1/deposit-assets' \\\n -H 'Content-Type: application/json' \\\n -H \"X-Api-Key: $DMARKET_PUBLIC_KEY\" \\\n -H \"X-Sign-Date: $TIMESTAMP\" \\\n -H \"X-Request-Sign: dmar ed25519 $SIGNATURE\" \\\n -d '{\n \"AssetID\": [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"b2c3d4e5-f6a7-8901-bcde-f23456789012\"\n ]\n}'" - lang: Python label: Python (dm-trading-tools) source: "# Full signing client: https://github.com/dmarket/dm-trading-tools\nfrom dmarket_client import DMarketClient\n\nclient = DMarketClient(public_key=\"\", secret_key=\"\")\npayload = {\n \"AssetID\": [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"b2c3d4e5-f6a7-8901-bcde-f23456789012\"\n ]\n}\nresult, err = client.call(\"POST\", \"/marketplace-api/v1/deposit-assets\", payload=payload)\nprint(result)" /marketplace-api/v1/deposit-status/{DepositID}: get: tags: - Sell Items summary: Get deposit status description: Get information about current deposit transfers. operationId: GetDepositStatus parameters: - name: DepositID in: path description: Deposit operation unique identifier. required: true style: simple explode: false schema: type: string responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/marketplaceGetDepositStatusResponse' default: description: An unexpected error response content: application/json: schema: $ref: '#/components/schemas/runtimeError' x-codeSamples: - lang: Shell label: cURL source: "# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools\ncurl 'https://api.dmarket.com/marketplace-api/v1/deposit-status/e5f6a7b8-c9d0-1234-ef01-567890123456' \\\n -H \"X-Api-Key: $DMARKET_PUBLIC_KEY\" \\\n -H \"X-Sign-Date: $TIMESTAMP\" \\\n -H \"X-Request-Sign: dmar ed25519 $SIGNATURE\"" - lang: Python label: Python (dm-trading-tools) source: '# Full signing client: https://github.com/dmarket/dm-trading-tools from dmarket_client import DMarketClient client = DMarketClient(public_key="", secret_key="") result, err = client.call("GET", "/marketplace-api/v1/deposit-status/e5f6a7b8-c9d0-1234-ef01-567890123456") print(result)' /marketplace-api/v2/user/offers: get: tags: - Sell Items summary: List user offers description: '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.' operationId: GetUserOffersV2 x-badges: - name: NEW color: '#04BA39' parameters: - name: gameId in: query description: 'Game identifier. One of: a8db (CS2), 9a92 (Dota 2), tf2, rust.' required: true schema: type: string enum: - a8db - 9a92 - tf2 - rust example: a8db - name: title in: query description: Filter offers by title prefix (case-insensitive). required: false schema: type: string - name: treeFilters in: query description: '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: `categoryPath`, `type`, `priceCents`, `tradeLockFrom`, `tradeLockTo`. Filter by game and title via the top-level `gameId` and `title` query parameters. CS2 keys: `exterior`, `paintSeed`, `floatPart`, `phase`, `category`, `collection`, `charmName`, `charmExists`, `sticker`, `isProskin`, `fadePercentFrom`, `fadePercentTo`. TF2 keys: `exterior`, `collection`, `isCraftable`. Dota 2 keys: `hero`. Allowed CS2 values: - `exterior`: `factory new`, `minimal wear`, `field-tested`, `well-worn`, `battle-scarred`, `not painted` - `phase`: `phase-1`, `phase-2`, `phase-3`, `phase-4`, `ruby`, `sapphire`, `emerald`, `black-pearl` - `floatPart`: `FN-0`..`FN-6`, `MW-0`..`MW-4`, `FT-0`..`FT-4`, `WW-0`..`WW-4`, `BS-0`..`BS-4` (bucketed float ranges per exterior) - `category`: `stattrak_tm` (`_tm` is translated to the ™ symbol server-side), `souvenir`, `normal`, `★` (knives) Allowed TF2 exterior values: `factory new`, `minimal wear`, `field-tested`, `well-worn`, `battle-scarred`, `battle scarred`. Multi-value: suffix key with `[]`, e.g. `exterior[]=factory new,exterior[]=minimal wear` (URL-encode the space as `%20`). Negation: prefix key with `not_`, e.g. `not_exterior=factory new`. Negation is not supported for `charmName`/`sticker`. Ranges: `fadePercentFrom=10,fadePercentTo=90`. Steam trade-lock filtering uses `tradeLockFrom`/`tradeLockTo` (remaining lock in days; `tradeLockFrom` is inclusive, `tradeLockTo` is exclusive). Existence check: `charmExists=true` / `charmExists=false`. Charm and sticker filters (`charmName`, `sticker[]`, `charmExists`) apply to CS2 offers only. Example: `categoryPath=rifle,exterior[]=factory new,exterior[]=minimal wear`.' required: false schema: type: string example: categoryPath=rifle,exterior[]=factory new - name: orderBy in: query description: 'Sort field. Supported values: `price`, `title`, `float`, `createdAt`.' required: false schema: type: string enum: - price - title - float - createdAt - name: orderDir in: query description: Sort direction. Defaults to `asc` when `orderBy` is set. required: false schema: type: string enum: - asc - desc - name: limit in: query description: Number of items to return per page. Range 1..100. required: true schema: type: integer format: int32 minimum: 1 maximum: 100 - name: cursor in: query description: Pagination cursor returned from a previous response. required: false schema: type: string maxLength: 500 responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/marketplacev2GetUserOffersResponse' example: items: - offerId: c3d4e5f6-1234-4abc-9def-7890abcdef12 priceCents: 1599 createdAt: '2026-06-17T10:30:00Z' locked: false attributes: title: AK-47 | Redline (Field-Tested) gameId: a8db categoryPath: rifle/ak-47 tradable: true cs2Attributes: exterior: field-tested floatValue: 0.2356 paintSeed: 412 total: 7 cursor: '' default: description: An unexpected error response content: application/json: schema: $ref: '#/components/schemas/runtimeError' x-codeSamples: - lang: Shell label: cURL source: "# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools\ncurl -G 'https://api.dmarket.com/marketplace-api/v2/user/offers' \\\n --data-urlencode 'gameId=a8db' \\\n --data-urlencode 'title=AK-47' \\\n --data-urlencode 'treeFilters=categoryPath=rifle,exterior[]=factory new' \\\n --data-urlencode 'orderBy=createdAt' \\\n --data-urlencode 'orderDir=desc' \\\n --data-urlencode 'limit=10' \\\n -H \"X-Api-Key: $DMARKET_PUBLIC_KEY\" \\\n -H \"X-Sign-Date: $TIMESTAMP\" \\\n -H \"X-Request-Sign: dmar ed25519 $SIGNATURE\"" - lang: Python label: Python (dm-trading-tools) source: "# Full signing client: https://github.com/dmarket/dm-trading-tools\nfrom dmarket_client import DMarketClient\n\nclient = DMarketClient(public_key=\"\", secret_key=\"\")\npayload = {\n \"gameId\": \"a8db\",\n \"title\": \"AK-47\",\n \"treeFilters\": \"categoryPath=rifle,exterior[]=factory new\",\n \"orderBy\": \"createdAt\",\n \"orderDir\": \"desc\",\n \"limit\": 10\n}\nresult, err = client.call(\"GET\", \"/marketplace-api/v2/user/offers\", payload=payload)\nprint(result)" /marketplace-api/v2/offers:batchCreate: post: tags: - Sell Items summary: Batch create offers description: Create multiple offers in a single request. requestBody: content: application/json: schema: $ref: '#/components/schemas/marketplacev2BatchCreateOffersRequest' example: requests: - assetId: a1b2c3d4-e5f6-7890-abcd-ef1234567890 priceCents: 1599 required: true responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/marketplacev2BatchCreateOffersResponse' default: description: An unexpected error response content: application/json: schema: $ref: '#/components/schemas/runtimeError' x-codeSamples: - lang: Shell label: cURL source: "# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools\ncurl -X POST 'https://api.dmarket.com/marketplace-api/v2/offers:batchCreate' \\\n -H 'Content-Type: application/json' \\\n -H \"X-Api-Key: $DMARKET_PUBLIC_KEY\" \\\n -H \"X-Sign-Date: $TIMESTAMP\" \\\n -H \"X-Request-Sign: dmar ed25519 $SIGNATURE\" \\\n -d '{\n \"requests\": [\n {\n \"assetId\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"priceCents\": 1599\n }\n ]\n}'" - lang: Python label: Python (dm-trading-tools) source: "# Full signing client: https://github.com/dmarket/dm-trading-tools\nfrom dmarket_client import DMarketClient\n\nclient = DMarketClient(public_key=\"\", secret_key=\"\")\npayload = {\n \"requests\": [\n {\n \"assetId\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"priceCents\": 1599\n }\n ]\n}\nresult, err = client.call(\"POST\", \"/marketplace-api/v2/offers:batchCreate\", payload=payload)\nprint(result)" /marketplace-api/v2/offers:batchUpdate: post: tags: - Sell Items summary: Batch update offers description: Update multiple offers in a single request. requestBody: content: application/json: schema: $ref: '#/components/schemas/marketplacev2BatchUpdateOffersRequest' example: requests: - offerId: c3d4e5f6-a7b8-9012-cdef-345678901234 priceCents: 1799 required: true responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/marketplacev2BatchUpdateOffersResponse' default: description: An unexpected error response content: application/json: schema: $ref: '#/components/schemas/runtimeError' x-codeSamples: - lang: Shell label: cURL source: "# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools\ncurl -X POST 'https://api.dmarket.com/marketplace-api/v2/offers:batchUpdate' \\\n -H 'Content-Type: application/json' \\\n -H \"X-Api-Key: $DMARKET_PUBLIC_KEY\" \\\n -H \"X-Sign-Date: $TIMESTAMP\" \\\n -H \"X-Request-Sign: dmar ed25519 $SIGNATURE\" \\\n -d '{\n \"requests\": [\n {\n \"offerId\": \"c3d4e5f6-a7b8-9012-cdef-345678901234\",\n \"priceCents\": 1799\n }\n ]\n}'" - lang: Python label: Python (dm-trading-tools) source: "# Full signing client: https://github.com/dmarket/dm-trading-tools\nfrom dmarket_client import DMarketClient\n\nclient = DMarketClient(public_key=\"\", secret_key=\"\")\npayload = {\n \"requests\": [\n {\n \"offerId\": \"c3d4e5f6-a7b8-9012-cdef-345678901234\",\n \"priceCents\": 1799\n }\n ]\n}\nresult, err = client.call(\"POST\", \"/marketplace-api/v2/offers:batchUpdate\", payload=payload)\nprint(result)" /marketplace-api/v2/offers:batchDelete: post: tags: - Sell Items summary: Batch delete offers description: Delete multiple offers in a single request. requestBody: content: application/json: schema: $ref: '#/components/schemas/marketplacev2BatchDeleteOffersRequest' example: requests: - offerId: c3d4e5f6-a7b8-9012-cdef-345678901234 required: true responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/marketplacev2BatchDeleteOffersResponse' default: description: An unexpected error response content: application/json: schema: $ref: '#/components/schemas/runtimeError' x-codeSamples: - lang: Shell label: cURL source: "# Sign the request and set the three auth headers — reference clients: https://github.com/dmarket/dm-trading-tools\ncurl -X POST 'https://api.dmarket.com/marketplace-api/v2/offers:batchDelete' \\\n -H 'Content-Type: application/json' \\\n -H \"X-Api-Key: $DMARKET_PUBLIC_KEY\" \\\n -H \"X-Sign-Date: $TIMESTAMP\" \\\n -H \"X-Request-Sign: dmar ed25519 $SIGNATURE\" \\\n -d '{\n \"requests\": [\n {\n \"offerId\": \"c3d4e5f6-a7b8-9012-cdef-345678901234\"\n }\n ]\n}'" - lang: Python label: Python (dm-trading-tools) source: "# Full signing client: https://github.com/dmarket/dm-trading-tools\nfrom dmarket_client import DMarketClient\n\nclient = DMarketClient(public_key=\"\", secret_key=\"\")\npayload = {\n \"requests\": [\n {\n \"offerId\": \"c3d4e5f6-a7b8-9012-cdef-345678901234\"\n }\n ]\n}\nresult, err = client.call(\"POST\", \"/marketplace-api/v2/offers:batchDelete\", payload=payload)\nprint(result)" components: schemas: marketplacev2CreateOfferRequest: type: object properties: assetId: type: string format: uuid description: Asset unique identifier. priceCents: type: integer format: int64 description: Price in cents. required: - assetId marketplacev2BatchDeleteOffersResponse: type: object properties: offers: type: array items: $ref: '#/components/schemas/marketplacev2Offer' failed: type: array items: $ref: '#/components/schemas/marketplacev2BatchDeleteOffersResponseReason' marketplaceGetDepositStatusResponse: type: object properties: DepositID: type: string description: Deposit operation unique identifier. AssetID: type: array description: Initial assets list requested to deposit. items: type: string Status: $ref: '#/components/schemas/marketplaceTransferStatus' Error: type: string description: Error details in case of failed deposit operation. Assets: type: array description: 'Map of in-game asset id from request and new in-market asset ids after deposit.' items: $ref: '#/components/schemas/marketplaceAssetMap' SteamDepositInfo: $ref: '#/components/schemas/marketplaceSteamDepositInfo' marketplacev2OfferV2: type: object description: Marketplace offer with typed attributes. properties: attributes: description: Game-specific asset attributes. See `asset.Attributes` in the marketplace-api proto schema for the full oneof definition. type: object additionalProperties: true priceCents: type: integer format: int64 description: Offer price in cents. createdAt: type: string format: date-time locked: type: boolean description: Whether the offer is currently locked (for example, reserved by an in-flight trade) and so cannot be bought. offerId: type: string description: Offer unique identifier. marketplacev2UpdateOfferRequest: type: object properties: offerId: type: string description: Offer unique identifier. priceCents: type: integer format: int64 description: New price in cents. marketplaceDepositAssetsRequest: type: object properties: AssetID: type: array description: List of asset id to deposit. items: type: string marketplacev2BatchDeleteOffersResponseReason: type: object properties: offerId: type: string code: type: string message: type: string marketplacev2BatchUpdateOffersResponseReason: type: object properties: offerId: type: string code: type: string message: type: string marketplacev2BatchUpdateOffersResponse: type: object properties: offers: type: array items: $ref: '#/components/schemas/marketplacev2Offer' failed: type: array items: $ref: '#/components/schemas/marketplacev2BatchUpdateOffersResponseReason' marketplacev2Offer: type: object properties: id: type: string assetId: type: string marketplaceTransferStatus: type: string default: TransferStatusPending enum: - TransferStatusPending - TransferStatusCreated - TransferStatusSuccess - TransferStatusFailedToCreate - TransferStatusError - TransferStatusOnHold marketplacev2DeleteOfferRequest: type: object properties: offerId: type: string description: Offer unique identifier. marketplacev2BatchDeleteOffersRequest: type: object properties: requests: type: array items: $ref: '#/components/schemas/marketplacev2DeleteOfferRequest' marketplacev2GetUserOffersResponse: type: object properties: items: type: array description: User offers. items: $ref: '#/components/schemas/marketplacev2OfferV2' total: type: integer format: int64 description: Total number of offers matching the filter criteria across all pages, independent of limit/cursor. cursor: type: string description: Cursor for the next page. Empty when there are no more pages. marketplacev2BatchUpdateOffersRequest: type: object properties: requests: type: array items: $ref: '#/components/schemas/marketplacev2UpdateOfferRequest' marketplacev2BatchCreateOffersResponse: type: object properties: offers: type: array items: $ref: '#/components/schemas/marketplacev2Offer' failed: type: array items: $ref: '#/components/schemas/marketplacev2BatchCreateOffersResponseReason' marketplaceSteamDepositInfo: type: object properties: TradeOfferID: type: string description: Steam trade offer id. Message: type: string description: Custom trade message. marketplacev2BatchCreateOffersRequest: type: object properties: requests: type: array items: $ref: '#/components/schemas/marketplacev2CreateOfferRequest' marketplaceDepositAssetsResponse: type: object properties: DepositID: type: string description: Deposit operation unique identifier. marketplaceAssetMap: type: object properties: InGameAssetID: type: string description: In-game asset identifier. DmarketAssetID: type: string description: In-market asset identifier. runtimeError: type: object properties: error: type: string code: type: integer format: int32 message: type: string marketplacev2BatchCreateOffersResponseReason: type: object properties: assetId: type: string code: type: string message: type: string securitySchemes: ApiKey: type: apiKey in: header name: X-Api-Key description: Public API key (lowercase hex). Generate it in your DMarket account settings. See https://dmarket.com/faq#tradingAPI. SignDate: type: apiKey in: header name: X-Sign-Date description: Unix timestamp in seconds at signing time (e.g. 1605619994). Must be within 2 minutes of server time. RequestSign: type: apiKey in: header name: X-Request-Sign description: 'Ed25519 request signature prefixed with `dmar ed25519 `. Sign the concatenation of HTTP method + path (including query string) + body + X-Sign-Date with your secret key, then hex-encode the 64-byte Ed25519 signature. Reference clients (Go, Python, JS, PHP): https://github.com/dmarket/dm-trading-tools.' x-tagGroups: - name: Account tags: - Account - name: Trading tags: - Buy items - Sell Items - Sold user items - name: Inventory tags: - Inventory/items - name: Market data tags: - Aggregator