---
title: "🔄 Trade history of a Steam account — who it traded with, which items, in which direction"
method: GET
path: "/steam/api/profile/trades"
tags: ["Profile"]
---

# 🔄 Trade history of a Steam account — who it traded with, which items, in which direction

`GET /steam/api/profile/trades`

## Request

- Base URL: `https://www.steamwebapi.com`
- URL: `https://www.steamwebapi.com/steam/api/profile/trades`
- Auth: API key in query parameter `key`

Baseurl: https://www.steamwebapi.com/steam/api/profile/trades?steam_id=76561198042843401&key=YOUR_API_KEY

    💬 **What this endpoint does:**
    - Returns the observed trade history of a Steam account: every item handover we have seen, in both directions, with the account on the other side.
    - Reconstructed from inventory sightings of physical CS2 items, so it covers trades between players as well as items that travelled through a marketplace.

    🛠️ **What you get:**
    - `data` — one row per handover, newest first. Per row: `direction` (`in` = the account received the item, `out` = it gave the item away), `partner` (SteamID64 of the other side), `seenat` and `senderlastseenat` (the handover window, see below), `gapdays`, `direct`, `market`, `inferred`, `roundtrip`, `assetid` and an `item` block (`markethashname`, `wear`, `float`, `defindex`, `paintseed`, `paintindex`).
    - `direct: true` means the item went straight from one inventory to the other. When it was listed on a marketplace in between, `direct` is `false` and `market` names the leg it travelled through: `name`, `price`, `seenat` and `link` as the marketplace feed supplies it (a deep link on some markets, a listing id on others).
    - `roundtrip: true` marks a handover that is part of an item leaving the account and coming back. That pattern does not occur in ordinary trading.
    - `inferred: true` marks a handover reconstructed from a legacy previous-owner field rather than from two independent sightings.
    - `partners` — the same history rolled up per counterpart, strongest first, with who that account is: `steamid`, `trades`, `received`, `sent`, `direct`, `viamarket`, `roundtrips`, `firsttrade`, `lasttrade` and a `profile` block (`personaname`, `avatar`, `avatarfull`, `timecreated`, `timecreatedat`, `loccountrycode`, `vac`, `tradeban`, `inventoryworthpricesteam`; null when the account is unknown to us). Always the FULL history regardless of the filters below, which apply to `data` only. Capped at the strongest 100 counterparts, with `partnerstotal` giving the real number.
    - `coverage` — `itemstracked` (items of this account we track), `itemswithtrades` (how many of them ever changed hands) and `truncated` (true when the account has more history than one response covers; page through what you get and treat it as a recent window, not the complete record).

    🌐 **How to use:**
    - Pass `steam_id` (SteamID64). Everything else is optional.
    - Page with `limit` (default 50, max 200) and `offset`; `total` is the number of rows matching your filters. Narrow with `direction`, `partner`, `from` and `to`, and flip the order with `sort`.
    - Results are cached per account for several hours, so paging through a history and polling the same account are both cheap.
    - Credits: 1 per started block of 50 returned rows — a default page costs 1, a full 200-row page costs 4, an empty page costs 1. They count against the same Profile allowance as the other Profile endpoints.

    ⚠️ **How to read the dates:**
    - These are inventory sightings, not Steam trade logs. A handover happened somewhere between `senderlastseenat` (last time we saw the item with the giver) and `seenat` (first time we saw it with the receiver) — `gapdays` is the width of that window, not the age of the trade.
    - An item nobody ever scanned is absent entirely. An empty response means we have seen no handover, not that none happened.

## Query parameters

- `steam_id` string, required
- `direction` 'all' | 'in' | 'out'
- `partner` string
- `from` string, date
- `to` string, date
- `sort` 'newest' | 'oldest'
- `limit` integer
- `offset` integer

## Response `200`

Request was successful.

- unknown

## Other responses

- `400`: steam_id is missing or not a valid SteamID64, or direction / partner / from / to is malformed.
- `402`: Rate limit exceeded (daily or monthly), or endpoint not included in your package.
- `429`: Too many requests per minute for this API key — see config/packages/rate_limiter.yaml (profile_trades).

---

[API](https://skmtc.dev/steamwebapi/apis/steamwebapi-com-third-party-steam-market-api-documentation.md) · [All operations](https://skmtc.dev/steamwebapi/apis/steamwebapi-com-third-party-steam-market-api-documentation/llms.txt) · [OpenAPI document](https://skmtc.dev/steamwebapi/apis/steamwebapi-com-third-party-steam-market-api-documentation/revisions/f9a4109cbda6?raw)
