Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: DMarket trading Sell Items API
description: Welcome to the DMarket Trading API section.
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)"
operationId: postMarketplaceApiV2Offers:batchCreate
x-operation-id-source: derived
/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)"
operationId: postMarketplaceApiV2Offers:batchUpdate
x-operation-id-source: derived
/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)"
operationId: postMarketplaceApiV2Offers:batchDelete
x-operation-id-source: derived
components:
schemas:
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.
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'
runtimeError:
type: object
properties:
error:
type: string
code:
type: integer
format: int32
message:
type: string
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.
marketplacev2BatchCreateOffersRequest:
type: object
properties:
requests:
type: array
items:
$ref: '#/components/schemas/marketplacev2CreateOfferRequest'
marketplacev2DeleteOfferRequest:
type: object
properties:
offerId:
type: string
description: Offer unique identifier.
marketplacev2BatchDeleteOffersResponseReason:
type: object
properties:
offerId:
type: string
code:
type: string
message:
type: string
marketplacev2BatchDeleteOffersResponse:
type: object
properties:
offers:
type: array
items:
$ref: '#/components/schemas/marketplacev2Offer'
failed:
type: array
items:
$ref: '#/components/schemas/marketplacev2BatchDeleteOffersResponseReason'
marketplacev2BatchCreateOffersResponseReason:
type: object
properties:
assetId:
type: string
code:
type: string
message:
type: string
marketplacev2BatchDeleteOffersRequest:
type: object
properties:
requests:
type: array
items:
$ref: '#/components/schemas/marketplacev2DeleteOfferRequest'
marketplaceTransferStatus:
type: string
default: TransferStatusPending
enum:
- TransferStatusPending
- TransferStatusCreated
- TransferStatusSuccess
- TransferStatusFailedToCreate
- TransferStatusError
- TransferStatusOnHold
marketplacev2BatchUpdateOffersResponseReason:
type: object
properties:
offerId:
type: string
code:
type: string
message:
type: string
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'
marketplacev2BatchUpdateOffersResponse:
type: object
properties:
offers:
type: array
items:
$ref: '#/components/schemas/marketplacev2Offer'
failed:
type: array
items:
$ref: '#/components/schemas/marketplacev2BatchUpdateOffersResponseReason'
marketplacev2CreateOfferRequest:
type: object
properties:
assetId:
type: string
format: uuid
description: Asset unique identifier.
priceCents:
type: integer
format: int64
description: Price in cents.
required:
- assetId
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.
marketplaceSteamDepositInfo:
type: object
properties:
TradeOfferID:
type: string
description: Steam trade offer id.
Message:
type: string
description: Custom trade message.
marketplacev2UpdateOfferRequest:
type: object
properties:
offerId:
type: string
description: Offer unique identifier.
priceCents:
type: integer
format: int64
description: New price in cents.
marketplacev2Offer:
type: object
properties:
id:
type: string
assetId:
type: string
marketplaceDepositAssetsRequest:
type: object
properties:
AssetID:
type: array
description: List of asset id to deposit.
items:
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