Developer API DocsHuge guide

Use the API properly

This page explains the SAB Exist Count API end to end: keys, place IDs, rate limits, endpoint shapes, Roblox-friendly usage, search, single-brainrot lookups, common mistakes, and how to keep your game efficient.

Free
60/min + 2,500/day
Supporter
600/min + 25,000/day
Auth
API key + placeId
Advanced
Free

Quick Start

  1. 1. Sign in on /developers.
  2. 2. Create a developer API key.
  3. 3. Register the real Roblox place ID that will use the key.
  4. 4. Send the key and placeId on every request.
  5. 5. Cache results in your game instead of asking every frame.

Authentication Rules

  • Your key is tied to your site account.
  • Your requests must include a placeId that is registered on that key.
  • Browser/JS requests use the x-sab-api-key header.
  • Roblox endpoints also allow ?key=... because header handling is annoying there.
  • Do not put the key in a LocalScript. Keep it in server code only.

API Playground

Test the real API directly from the docs. This is best for quick verification and response-shape checks, not for shipping your real key in public browser code.

Request preview
GET /api/v1/...
x-sab-api-key: (missing)
Idle
Press Run request to load a real API response.

Core Endpoints

GET/api/v1/exists?placeId=...

List brainrots. Supports q, rarity, limit, offset, and includeUnknown.

GET/api/v1/exists/{slug}?placeId=...

One brainrot with exists, estimate flags, value estimates, traits, mutations, images, and source metadata.

GET/api/v1/search?q=...&placeId=...

Search by name, rarity, trait, mutation, or module text.

GET/api/v1/rarities/{rarity}?placeId=...

Get one rarity bucket like common, secret, or og.

GET/api/v1/meta?placeId=...

Get totals, module metadata, revision-ish info, and endpoint map.

GET/api/v1/roblox/exists?key=...&placeId=...

Flat Roblox-friendly list response for server Scripts.

GET/api/v1/roblox/exists/{slug}?key=...&placeId=...

Flat Roblox-friendly single item response.

JavaScript Example

const response = await fetch(
  "https://sabexistcount.vercel.app/api/v1/exists/noobini-pizzanini?placeId=YOUR_PLACE_ID",
  {
    headers: {
      "x-sab-api-key": "YOUR_API_KEY"
    }
  }
);

const data = await response.json();
console.log(data.item.name, data.item.exists, data.item.rarity);

Roblox Example

Use this in a server Script. Do not expose your API key to clients. Pull once, store the decoded JSON, then update on a timer like every 30 to 120 seconds depending on how live you want the board to feel.

local HttpService = game:GetService("HttpService")

local API_KEY = "YOUR_API_KEY"
local PLACE_ID = tostring(game.PlaceId)
local url = "https://sabexistcount.vercel.app/api/v1/roblox/exists?limit=500&placeId=" .. PLACE_ID .. "&key=" .. HttpService:UrlEncode(API_KEY)

local response = HttpService:RequestAsync({
  Url = url,
  Method = "GET"
})

local data = HttpService:JSONDecode(response.Body)
if data.ok then
  for _, item in ipairs(data.items) do
    print(item.name, item.exists or "Not Known")
  end
else
  warn(data.error, data.message)
end

Efficiency Tips

  • Do not call the list endpoint per player join if the server already has a fresh copy.
  • Use one server cache table and refresh it on a timer.
  • For a single brainrot page, call the single slug endpoint instead of pulling all 500 rows.
  • Use the Roblox list endpoint only when you truly need the full table.
  • Use limit and search filters to keep payloads smaller.
  • If you show estimates, label them as estimates. Do not present them as official live game data.
  • Value fields are optional. Check for item.value before reading LGC, Robux, or market data.

Rate Limits and Quotas

Free keys get 60/min + 2,500/day. Supporter-linked keys get 600/min + 25,000/day. Advanced fields like LGC value, Robux index, Eldorado Garama sample, Roblox image asset IDs, mutations, traits, and source metadata are available on both tiers. When a key goes over limit, the API intentionally waits about 5 seconds and then returns 429.

Response Shape

Exact fields can grow over time, but a normal single-brainrot response looks like this:

{
  "ok": true,
  "item": {
    "name": "Noobini Pizzanini",
    "slug": "noobini-pizzanini",
    "exists": 431000000,
    "officialExistsKnown": true,
    "estimated": false,
    "rarity": "Common",
    "value": {
      "source": "SabrValues",
      "lgc": 0.0001,
      "formattedLgc": "0.0001 LGC",
      "estimatedRobux": 0.0117,
      "formattedEstimatedRobux": "~0.01 Robux",
      "market": {
        "source": "Eldorado",
        "itemName": "Garama and Madundung",
        "formattedAverage": "€1.71"
      }
    },
    "imageUrl": "...",
    "robloxImage": "rbxassetid://...",
    "mutations": [],
    "traits": [],
    "source": {
      "module": "Module:Existing/Common",
      "updatedAt": "2026-05-27T12:34:56Z"
    }
  }
}

Common Errors

401Missing or bad API key

The key is wrong, revoked, or not sent.

403placeId not allowed

The placeId is not registered on that key yet.

404Slug not found

The brainrot name/slug does not exist in the current dataset.

429Rate limit or daily quota

Wait, cache, and stop spamming requests.

Useful Related Pages