Tarkov Pilot
⬤
WS
⬤
Tarkov Pilot v2 released — old versions don't work anymore, please download the new one. Easier setup, auto-update, all settings in the app window.
Price tracker, interactive maps & progression tools

Tarkov Market API

Flea market prices, trader prices and item data for Escape from Tarkov. Base url: https://api.tarkov-market.app/api/v1

Official clients, no dependencies: Node.js, Python and Go — github.com/ggdiam/tarkov-market-api

API key

To use the api you need Pro status on the website. Examples below use the placeholder your_api_key.

Auth

Your API key also lets apps read and change your character progress. Share it only with apps you trust. PRO is required; generating a new API key revokes the old key. Progress requests accept x-api-key only as a header.

Pass your key in a header:

x-api-key: your_api_key

Or as a query parameter, if headers are inconvenient (browser, streaming bots, spreadsheets):

?x-api-key=your_api_key

Missing, unknown or disabled key → 401 { "error": "Access denied" }

Game modes

Every item endpoint exists in three game modes. The mode can be set either by a path prefix or by the mode parameter — both give the same answer:

Mode
Path prefix
Parameter
Prices from
PVP
/api/v1/…
default
items collection
PVE
/api/v1/pve/…
mode=pve
PVE scan
Season
/api/v1/season/…
mode=season
seasonal scan

Seasonal characters

Seasonal economy is scanned separately and it is young: an item has a flea price only after the scanner has seen it in the seasonal flea market, and avg24hPrice / diff24h fill in as seasonal price history accumulates. Fields that do not depend on the flea market — basePrice and the trader price — fall back to PVP values until the season gets its own game data dump.

No seasonal price yet looks like this (same item, same request, season mode):

{
    "uid": "a7f7568c-61fb-437e-9f71-06e58aae26ba",
    "name": "LEDX Skin Transilluminator",
    "price": 0,               // no seasonal flea price yet
    "avg24hPrice": 0,
    "diff24h": 0,
    "updated": "",            // never seen on the seasonal flea
    "haveMarketData": false,  // do not use price for this item
    "basePrice": 970000,      // not flea data — same as PVP
    "traderName": "Therapist",
    "traderPrice": 494700
}

Endpoints

GET/item?q=ledx
Find an item by name, uid or bsgId.
qItem name or short name, any supported locale. Returns up to 5 matches, exact match first
uidTarkov Market item uid — returns exactly one item
bsgIdItem id from the game files — returns exactly one item
langLocale of names and of the website link. One of: en, ru, ch, cz, de, es, fr, hu, it, jp, kr, mx, pl, po, ro, sk, tr. Default en
URL
https://api.tarkov-market.app/api/v1/item?q=ledx&x-api-key=your_api_key
curl
curl -H "x-api-key: your_api_key" "https://api.tarkov-market.app/api/v1/item?q=ledx"
Response example
[
    {
        "uid": "a7f7568c-61fb-437e-9f71-06e58aae26ba",
        "name": "LEDX Skin Transilluminator",
        "bannedOnFlea": false,
        "haveMarketData": true,
        "tags": ["Barter"],
        "shortName": "LEDX",
        "price": 550000,
        "basePrice": 970000,
        "avg24hPrice": 598993,
        "avg7daysPrice": 671670,
        "traderName": "Therapist",
        "traderPrice": 494700,
        "traderPriceCur": "₽",
        "traderPriceRub": 494700,
        "updated": "2026-08-05T17:34:28.319Z",
        "slots": 1,
        "diff24h": -8.18,
        "diff7days": -18.11,
        "icon": "https://cdn.tarkov-market.app/images/items/a7f7568c-61fb-437e-9f71-06e58aae26ba_sm.png",
        "link": "https://tarkov-market.com/item/ledx_skin_transilluminator",
        "wikiLink": "https://escapefromtarkov.fandom.com/wiki/LEDX_Skin_Transilluminator",
        "img": "https://cdn.tarkov-market.app/images/items/a7f7568c-61fb-437e-9f71-06e58aae26ba_sm.png",
        "imgBig": "https://cdn.tarkov-market.app/images/items/ledx_skin_transilluminator_lg.png",
        "bsgId": "5c0530ee86f774697952d952",
        "isFunctional": true,
        "reference": "https://www.patreon.com/tarkov_market"
    }
]
POST/item
Same search, but with a json body — use it for non-latin queries so you do not have to url-encode them.
q / uid / bsgIdSame as in GET, passed in the json body
langSame as in GET
curl
curl https://api.tarkov-market.app/api/v1/item \
  -H "x-api-key: your_api_key" \
  -H "Content-Type: application/json" \
  -X POST --data '{"q":"AI-2急救组合","lang":"ch"}'
Response example
[
    {
        "uid": "2335b619-c562-41da-962f-e7b5aba5d45c",
        "name": "AI-2急救组合",
        "shortName": "AI-2",
        "tags": ["Meds"],
        "price": 6900,
        "basePrice": 4160,
        "avg24hPrice": 6695,
        "avg7daysPrice": 5912,
        "traderName": "Therapist",
        "traderPrice": 2121,
        "traderPriceCur": "₽",
        "traderPriceRub": 2121,
        "diff24h": 3.06,
        "diff7days": 16.71,
        "updated": "2026-08-05T17:07:42.165Z",
        "link": "https://tarkov-market.com/ch/item/ai-2_medikit",
        "bsgId": "5755356824597772cb798962",
        "isFunctional": true
    }
]
GET/items/all5 req/min
Every item in one array. Data is cached for 5 minutes, so polling this more often gains nothing.
tagsKeep only items with these tags, comma separated: tags=Ammo,Magazines
sortSort by a response field, for example sort=price
sort_directionasc (default) or desc
langLocale of names and website links
URL
https://api.tarkov-market.app/api/v1/items/all?x-api-key=your_api_key
curl
curl -H "x-api-key: your_api_key" "https://api.tarkov-market.app/api/v1/items/all"
Response example
[
    {
        "uid": "f0fa8457-6638-4ad2-b7e8-4708033d8f39",
        "name": "Secure Flash drive",
        "shortName": "Flash drive",
        "price": 37400,
        ...
    },
    {
        "uid": "33c15349-44e6-4553-9705-1b6417a1ad6a",
        "name": "SSD drive",
        ...
    },
    ...
]
GET/items/all/download5 req/min
The same full list as a downloadable json file.
langLocale of names and website links
URL
https://api.tarkov-market.app/api/v1/items/all/download?x-api-key=your_api_key
curl
curl -H "x-api-key: your_api_key" "https://api.tarkov-market.app/api/v1/items/all/download"

Response fields

Field
Meaning
uid
Tarkov Market item id — stable, use it as the key on your side
bsgId
Item id from the game files
name / shortName
Item name in the requested locale
tags
Item categories, the same ones the website filters by
price
Last known flea market price, ₽. 0 means no price for this mode
avg24hPrice / avg7daysPrice
Average flea price over the last 24 hours / 7 days, ₽
diff24h / diff7days
Change of the last price against those averages, %
basePrice
Item base (handbook) price, ₽ — what trader buy-back is calculated from
traderName
Trader who pays the most for the item
traderPrice / traderPriceCur
What that trader pays, in his own currency (₽, $ or €)
traderPriceRub
The same trader price converted to ₽ at the in-game rate
bannedOnFlea
Item cannot be sold on the flea market
haveMarketData
Item is tradable on the flea and its price is fresh — false means do not trust price
isFunctional
false for items removed from the game or not obtainable
updated
When the flea price was last seen by the scanner. Empty means never
slots
Inventory size of the item in grid cells
img / imgBig
Item icon and large image on our cdn
icon
Legacy alias of img — same url
link / wikiLink
Item page on tarkov-market.com and on the wiki

Character progression

Progress API base URL: https://api.tarkov-market.app/api/v1

Get charUid from /characters. The character determines PVP, PVE or SEASON; the mode selector above applies to prices. itemId and questId are BSG IDs, including aliases and source references. upgradeKey identifies a hideout level, for example Workbench_2.

GET returns revision and ETag. Replace the placeholders in the examples with your character, BSG ID and revision; send If-Match: "{revision}" on every PATCH. Writes set absolute values. After 409, read the current progress and reconcile your change. Repeating an already applied value succeeds without another write.

Progress: 300 requests/minute per key and owner; 60 PATCH attempts/minute per owner. These budgets are separate from price requests. 429 includes Retry-After: 60. Private snapshots are not cached.

GET/characters
List the characters belonging to the API key owner.
curl
curl -H "x-api-key: your_api_key" "https://api.tarkov-market.app/api/v1/characters"
Response example
{
    "characters": [
        {
            "charUid": "{charUid}",
            "name": "Main",
            "gameMode": "PVP"
        }
    ]
}
GET/characters/{charUid}/tracked-items
Read item names and icons with requiredQuantity (outstanding mandatory requirements), spentQuantity (already accounted for), availableQuantity (stock), remainingQuantity = max(0, requiredQuantity − availableQuantity), and sources. Starter items and handed-in steps reduce requirements. Optional goals are excluded; firInventorySeparate:false means there is no separate FiR stock. PATCH sets availableQuantity; custom goals cannot be added or removed. Prices: /api/v1/item?bsgId={itemId}&mode={mode}, /api/v1/items/all?mode={mode}. Use the character's mode (pvp/pve/season); calculate price per slot as price / slots.
langLocale of names and of the website link. One of: en, ru, kr, it, es, de, jp, ch, tr, fr, pl, po, cz, sk, hu, ro, mx. Default en
curl
curl -H "x-api-key: your_api_key" "https://api.tarkov-market.app/api/v1/characters/{charUid}/tracked-items"
Response example
{
    "charUid": "{charUid}",
    "gameMode": "PVP",
    "revision": "{revision}",
    "firInventorySeparate": false,
    "items": [
        {
            "itemId": "5c0530ee86f774697952d952",
            "name": "LEDX Skin Transilluminator",
            "shortName": "LEDX",
            "slots": 1,
            "icon": "https://cdn.tarkov-market.app/images/items/a7f7568c-61fb-437e-9f71-06e58aae26ba_sm.png",
            "requiredQuantity": 10,
            "spentQuantity": 0,
            "availableQuantity": 5,
            "remainingQuantity": 5,
            "sources": [
                {
                    "type": "quest",
                    "questId": "{BSG quest ID}",
                    "amount": 10,
                    "remainingRequiredQuantity": 10,
                    "fir": true,
                    "completed": false,
                    "canceled": false
                }
            ]
        }
    ]
}
PATCH/characters/{charUid}/tracked-items/{itemId}
Set the absolute value in the JSON body, with the revision from GET in If-Match.
availableQuantityThe only allowed JSON field, required: an integer from 0 to 1,000,000,000. Sets the available stock absolutely, not a change by this amount; 0 clears the stock. Other item fields are read-only. Missing, invalid or extra fields return 400 invalid_quantity.
curl
curl "https://api.tarkov-market.app/api/v1/characters/{charUid}/tracked-items/{itemId}" \
  -H "x-api-key: your_api_key" \
  -H 'If-Match: "{revision}"' \
  -H "Content-Type: application/json" \
  -X PATCH --data '{"availableQuantity":4}'
Response example
{
    "ok": true,
    "changed": true,
    "revision": "{newRevision}",
    "notificationDelivered": true
}
GET/characters/{charUid}/quests
Read quests compatible with the character. status is calculated: completed, failed, unreachable, available or locked; it does not mean the quest is accepted in the game. PATCH completed:true or false. Reset preserves step checkmarks and linked quest completions.
langLocale of names and of the website link. One of: en, ru, kr, it, es, de, jp, ch, tr, fr, pl, po, cz, sk, hu, ro, mx. Default en
curl
curl -H "x-api-key: your_api_key" "https://api.tarkov-market.app/api/v1/characters/{charUid}/quests"
Response example
{
    "charUid": "{charUid}",
    "gameMode": "PVP",
    "revision": "{revision}",
    "quests": [
        {
            "questId": "{BSG quest ID}",
            "questIdAliases": [],
            "name": "Quest name",
            "trader": "Therapist",
            "completed": false,
            "status": "available"
        }
    ]
}
PATCH/characters/{charUid}/quests/{questId}
Set the absolute value in the JSON body, with the revision from GET in If-Match.
completedThe only allowed JSON field, required: a boolean. true marks the quest complete; false resets completion, preserving step checkmarks and linked quest completions. status, steps and other fields cannot be changed here. Missing, invalid or extra fields return 400 invalid_completed.
curl
curl "https://api.tarkov-market.app/api/v1/characters/{charUid}/quests/{questId}" \
  -H "x-api-key: your_api_key" \
  -H 'If-Match: "{revision}"' \
  -H "Content-Type: application/json" \
  -X PATCH --data '{"completed":true}'
Response example
{
    "ok": true,
    "changed": true,
    "revision": "{newRevision}",
    "notificationDelivered": true
}
GET/characters/{charUid}/hideout
Read each hideout level: upgradeKey, moduleId (BSG ID or null), completed, prebuilt and canComplete. PATCH completed:true or false. Complete prerequisites first and reset dependents first. Edition-prebuilt upgrades cannot be reset. canComplete checks module dependencies, not in-game money or skills.
langLocale of names and of the website link. One of: en, ru, kr, it, es, de, jp, ch, tr, fr, pl, po, cz, sk, hu, ro, mx. Default en
curl
curl -H "x-api-key: your_api_key" "https://api.tarkov-market.app/api/v1/characters/{charUid}/hideout"
Response example
{
    "charUid": "{charUid}",
    "gameMode": "PVP",
    "revision": "{revision}",
    "modules": [
        {
            "upgradeKey": "Workbench_2",
            "moduleId": "{BSG module ID}",
            "name": "Workbench",
            "level": 2,
            "completed": false,
            "prebuilt": false,
            "canComplete": true
        }
    ]
}
PATCH/characters/{charUid}/hideout/{upgradeKey}
Set the absolute value in the JSON body, with the revision from GET in If-Match.
completedThe only allowed JSON field, required: a boolean. true records this upgrade as completed; false resets it. Other fields are read-only. Missing, invalid or extra fields return 400 invalid_completed; dependency and prebuilt restrictions return 409.
curl
curl "https://api.tarkov-market.app/api/v1/characters/{charUid}/hideout/{upgradeKey}" \
  -H "x-api-key: your_api_key" \
  -H 'If-Match: "{revision}"' \
  -H "Content-Type: application/json" \
  -X PATCH --data '{"completed":true}'
Response example
{
    "ok": true,
    "changed": true,
    "revision": "{newRevision}",
    "notificationDelivered": true
}

Errors: 400 invalid input; 401 missing, disabled, revoked or ownerless key, or banned owner; 403 PRO required or season disabled; 404 inaccessible character or unknown entity; 409 conflicting progress, ambiguous BSG ID or upgrade constraints; 413 payload too large; 428 missing If-Match; 429 rate limit; 503 unavailable service. Body: {"error":"code"}.

notificationDelivered:false means the write was saved, but the website notification was not confirmed. Refresh the progress; this is not a failed write.

Limits & errors

Rule
Details
300 req/min
Per key, across price endpoints. Progress has separate request and write budgets.
5 req/min
Full item list and its download, in every mode. Prices are cached for 5 minutes anyway.
401
Key missing, unknown or disabled.
429
Rate limit reached — the body says which limit it was.

Terms

The api is intended for personal use.

If you use it for a public project, please link tarkov-market.com as the data provider.

If your public project copies most of the tarkov-market features, your access can be terminated without any warning and compensation.

If you resell the api, your access will be terminated without any warning and compensation.