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 <https://dmarket.com/> (details : <https://dmarket.com/faq#tradingAPI>)
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 <https://en.wikipedia.org/wiki/NaCl_(software)> "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 <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>.'
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=\"<public hex>\", secret_key=\"<secret hex>\")\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="<public hex>", secret_key="<secret hex>")
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=\"<public hex>\", secret_key=\"<secret hex>\")\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=\"<public hex>\", secret_key=\"<secret hex>\")\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=\"<public hex>\", secret_key=\"<secret hex>\")\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=\"<public hex>\", secret_key=\"<secret hex>\")\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