Use code 9nty in the Fortnite Item Shop #AD

Sign in to 9NTY

Developers

9NTY API

Free, read-only Fortnite data as JSON: today's Item Shop, new cosmetics, leaks, weapons and every cosmetic's shop history. No account, no key, no cost.

Last updated 6 November 2026 Version 1 8 min read
No key needed

Just send a request. Works from servers, bots and browsers.

Real data

The same data that powers this site and our X posts.

Safe to use

It never touches your Epic account. See "Can I get banned?"

01 What the API is

An API (application programming interface) is a way for programs to ask a website for data instead of a person reading a page. You send a web address, called a request, and get back JSON: plain text structured so any programming language can read it.

Each address is called an endpoint. For example, /api/v1/shop is the endpoint for today's Item Shop. People use the 9NTY API for Discord bots, Item Shop websites, stream overlays, spreadsheets and school projects.

The API is read-only. You can get data, but you can't change anything, sign in or buy anything through it.

02 Quick start

Open this in your browser, or run it in a terminal:

curl https://9ntyapi.com/api/v1/shop
JavaScript
const res = await fetch('https://9ntyapi.com/api/v1/shop');
const { data, updated } = await res.json();
console.log(`${data.length} offers, updated ${updated}`);
for (const offer of data) console.log(offer.name, offer.price);
Python
import requests

r = requests.get("https://9ntyapi.com/api/v1/shop", timeout=10)
r.raise_for_status()
body = r.json()
for offer in body["data"]:
    print(offer["name"], offer["price"])
Discord bot (discord.py)
async with aiohttp.ClientSession() as s:
    async with s.get("https://9ntyapi.com/api/v1/shop/new") as r:
        new = (await r.json())["data"]
await channel.send(f"{len(new)} new offers today: " + ", ".join(o["name"] for o in new[:10]))
Base URLhttps://9ntyapi.com/api/v1
MethodGET only
FormatJSON, UTF-8. Times are UTC in ISO 8601, for example 2026-11-06T00:01:15Z.
Every response hasstatus, updated (when that data last changed) and data
ListsUse limit (up to 500) and offset to page. Responses include total.
BrowsersCORS is open (Access-Control-Allow-Origin: *), so you can call it from a web page.
ImagesAll image URLs point at 9ntyapi.com/img/… and can be hot-linked.

03 Endpoints

Every endpoint below is a GET request. Press "Try it" to see the live response in a new tab.

GET /api/v1/shop

Today's full Item Shop: every offer with price, section, dates and the cosmetics inside.

Try it
GET /api/v1/shop/new

Offers new in today's shop (first time or returning).

Try it
GET /api/v1/new

Cosmetics newly added to the game files, newest first. ?type=Outfit&limit=&offset=

Try it
GET /api/v1/leaks

Leaked cosmetics not in the Item Shop yet, plus recently released leaks.

Try it
GET /api/v1/weapons

Weapons with stats per rarity. ?q=name&type=Shotgun&loot=1&limit=&offset=

Try it
GET /api/v1/cosmetics/{id}

One cosmetic by ID, with its Item Shop history where recorded.

Try it
GET /api/v1/status

When each data set was last updated.

Try it

Query parameters

ParameterWorks onWhat it does
limitAll listsHow many results to return, 1 to 500.
offsetAll listsHow many to skip. Use with limit to page through results.
type/new, /weaponsFilter by type, for example Outfit or Shotgun.
q/weaponsSearch weapon names.
loot/weapons1 for weapons currently in the loot pool only.

04 Example responses

Real responses from the live API, shortened to one result each.

/shop
{
  "status": 200,
  "updated": "2026-11-06T00:01:15Z",
  "date": "2026-11-06",
  "total": 240, "limit": 1, "offset": 0,
  "data": [{
    "name": "Harley Quinn",
    "bundle": false,
    "price": 1500,
    "regularPrice": 1500,
    "banner": null,
    "rarity": "dc",
    "section": "DC",
    "inDate": "2026-11-02T00:00:00Z",
    "outDate": "2026-11-06T23:59:59.999Z",
    "giftable": true,
    "image": "https://9ntyapi.com/img/…",
    "items": [{ "id": "CID_704_Athena_Commando_F_LollipopTrickster", "name": "Harley Quinn", "type": "Outfit" }]
  }]
}
/shop/new
{
  "status": 200,
  "updated": "2026-11-05T00:01:27Z",
  "date": "2026-11-05",
  "total": 58,
  "data": [{
    "name": "Guardians of the Globe Bundle",
    "bundle": true,
    "price": 2800,
    "regularPrice": 4500,
    "banner": "1700 V-Bucks Off",
    "section": "Invincible",
    "items": [
      { "id": "Character_SharpMagnet", "name": "Omni-Man", "type": "Outfit", "rarity": "epic" },
      { "id": "Backpack_SharpMagnet", "name": "The Immortal's Head", "type": "Back Bling", "rarity": "epic" }
    ]
  }]
}
/new
{
  "status": 200,
  "updated": "2026-11-05T14:01:41Z",
  "total": 208, "limit": 1, "offset": 0,
  "data": [{
    "id": "Backpack_TonicMailWeb",
    "name": "Hi-Fi Jets",
    "type": "Back Bling",
    "rarity": "icon",
    "set": "A$AP Rocky",
    "image": "https://9ntyapi.com/img/…",
    "added": "2026-11-05T14:00:58Z",
    "version": "43.00"
  }]
}
/leaks
{
  "status": 200,
  "updated": "2026-11-05T14:56:20Z",
  "total": 347,
  "data": {
    "unreleased": [{ "id": "Backpack_TonicMailWeb", "name": "Hi-Fi Jets", "type": "Back Bling",
                     "rarity": "icon", "set": "A$AP Rocky", "leakedAt": "2026-11-05T14:00:58Z" }],
    "released":   [{ "id": "Backpack_LazarusUntold", "name": "Psyonic Elite Cloak", "type": "Back Bling",
                     "leakedAt": "2026-09-17T16:17:14Z", "releasedOn": "2026-11-05", "daysInFiles": 48 }]
  }
}
/weapons
{
  "status": 200,
  "updated": "2026-11-04T22:56:42Z",
  "version": "43.00",
  "total": 2052,
  "data": [{
    "id": "WID_FG_Fang_Pistol_UR",
    "name": "9mm Baba Yaga",
    "rarity": "Mythic",
    "type": "Pistol",
    "inLoot": true,
    "mode": "Battle Royale",
    "stats": { "damage": 35, "headshot": 1.35, "fireRate": 7.7, "magazine": 21,
               "reload": 2.3, "buildDamage": 28, "pellets": 1 },
    "icon": "https://9ntyapi.com/media/weapons/…png"
  }]
}
/cosmetics/{id}
{
  "status": 200,
  "data": {
    "id": "Character_SharpMagnet",
    "name": "Omni-Man",
    "description": "Not exactly \"Father of the Year\".",
    "type": "Outfit",
    "rarity": "Epic",
    "set": "Guardians of the Globe",
    "introduction": "Introduced in Chapter 4, Season OG.",
    "shop": { "lastSeen": "2026-11-06", "daysSinceLastSeen": 0, "appearances": 48,
              "dates": ["2023-11-25", "2023-11-26", "…"] }
  }
}
/status
{
  "status": 200,
  "data": {
    "shop": "2026-11-06T00:01:15Z",
    "newShop": "2026-11-05T00:01:27Z",
    "newCosmetics": "2026-11-05T14:01:41Z",
    "leaks": "2026-11-05T14:56:20Z",
    "weapons": "2026-11-04T22:56:42Z"
  }
}

05 Limits and caching

  • 120 requests a minute per IP address. That's plenty for almost every project.
  • Responses are cached for about a minute, so asking more often than that gets the same answer.
  • The Item Shop changes once a day at midnight UTC. Check /status to see when each data set changed, instead of downloading everything again.

Tip: for a bot that posts the shop, poll /status every few minutes after reset and fetch /shop only when shop changes.

06 Errors

CodeMeaningWhat to do
200SuccessRead data.
404Not found, for example an unknown cosmetic IDCheck the ID or path.
429Too many requests (over 120 a minute)Wait a minute, then slow down. Nothing else happens.
5xxSomething went wrong on our sideTry again in a few minutes.

07 Can I get banned for using it?

From Fortnite?

No. The 9NTY API never connects to your Epic account. You don't sign in, it doesn't touch your game, and Epic can't see that you use it. It only returns public information (the Item Shop, cosmetics, weapon stats) that we've already collected on our own server. Using it is no different from reading a Fortnite news site.

From 9NTY?

No. We don't ban or block people for using the API, and you don't need permission. The only limit is the automatic 120-requests-a-minute rate limit above: if you go over it, you get a 429 for the rest of that minute, then it works again on its own.

Be careful with other tools. Things that log in to your Epic account, change game files, or promise free V-Bucks or skins can get your account banned or stolen. The 9NTY API does none of those things.

08 Fair use and credit

  • Free for personal and commercial projects.
  • Please credit "9NTY" with a link to 9ntyapi.com in public projects.
  • Leaks are things found in the game files, not release dates. Please don't present them as confirmed.
  • Cosmetic names and images belong to Epic Games. 9NTY is a fan site and isn't affiliated with Epic Games.