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.
Quick Start
- 1. Sign in on /developers.
- 2. Create a developer API key.
- 3. Register the real Roblox place ID that will use the key.
- 4. Send the key and placeId on every request.
- 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
placeIdthat is registered on that key. - Browser/JS requests use the
x-sab-api-keyheader. - 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.
GET /api/v1/... x-sab-api-key: (missing)
Press Run request to load a real API response.Core Endpoints
/api/v1/exists?placeId=...List brainrots. Supports q, rarity, limit, offset, and includeUnknown.
/api/v1/exists/{slug}?placeId=...One brainrot with exists, estimate flags, value estimates, traits, mutations, images, and source metadata.
/api/v1/search?q=...&placeId=...Search by name, rarity, trait, mutation, or module text.
/api/v1/rarities/{rarity}?placeId=...Get one rarity bucket like common, secret, or og.
/api/v1/meta?placeId=...Get totals, module metadata, revision-ish info, and endpoint map.
/api/v1/roblox/exists?key=...&placeId=...Flat Roblox-friendly list response for server Scripts.
/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)
endEfficiency 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
limitand 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.valuebefore 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
The key is wrong, revoked, or not sent.
The placeId is not registered on that key yet.
The brainrot name/slug does not exist in the current dataset.
Wait, cache, and stop spamming requests.