A simple REST API to get ARC Raiders game data. Need info about items, weapons, hideout modules, quests, or maps? Just make a request and get instant JSON data.
Live API: https://arcdata.mahcks.com
- Fast & Global: Uses Cloudflare's global network - fast responses no matter where you are
- Just JSON: Returns the raw data directly, no extra processing
- Smart Caching: 1-hour cache with stale-while-revalidate for always-fast responses
- Secure: HTTPS only, with standard security headers
- CORS Enabled: Works from browsers, no cross-origin issues
- Auto-Updated: Automatically finds new data files as they're added
https://arcdata.mahcks.com
These endpoints give you everything in one response:
| Endpoint | What you get |
|---|---|
GET /v1/bots |
All ARC/bot info |
GET /v1/maps |
All map data |
GET /v1/projects |
All project info |
GET /v1/skill-nodes |
All skill tree nodes |
GET /v1/trades |
All trade/vendor info |
These endpoints let you list everything or get a specific item:
GET /v1/items # List all item IDs (490 items)
GET /v1/items?full=true # Get first 45 items with full data
GET /v1/items?full=true&limit=20 # Get first 20 items with full data
GET /v1/items?full=true&offset=45 # Get next 45 items (pagination)
GET /v1/items/{item_id} # Get a specific itemExamples:
# Get just the list of IDs
curl https://arcdata.mahcks.com/v1/items
# Get first 45 items with complete data (respects Cloudflare limits)
curl https://arcdata.mahcks.com/v1/items?full=true
# Paginate through all items
curl https://arcdata.mahcks.com/v1/items?full=true&offset=0&limit=45
curl https://arcdata.mahcks.com/v1/items?full=true&offset=45&limit=45
curl https://arcdata.mahcks.com/v1/items?full=true&offset=90&limit=45
# Get a specific item
curl https://arcdata.mahcks.com/v1/items/anvil_iGET /v1/hideout # List all hideout module IDs
GET /v1/hideout?full=true # Get ALL modules with full data
GET /v1/hideout/{module_id} # Get a specific moduleExample:
curl https://arcdata.mahcks.com/v1/hideout?full=trueGET /v1/quests # List all quest IDs
GET /v1/quests?full=true # Get ALL quests with full data
GET /v1/quests/{quest_id} # Get a specific questExample:
curl https://arcdata.mahcks.com/v1/quests?full=trueGET /v1/map-events # List all map event IDs
GET /v1/map-events?full=true # Get ALL events with full data
GET /v1/map-events/{event_id} # Get a specific eventGET /v1 # Returns API info and all available endpoints{
"type": "items",
"count": 490,
"items": [
{
"id": "anvil_i",
"url": "/v1/items/anvil_i"
},
...
]
}Returns the complete JSON data for whatever you requested.
{
"error": "Item not found: invalid_id"
}Instead of making hundreds of requests:
// β BAD - Makes 491 requests (1 for list + 490 for each item)
const list = await fetch('/v1/items').then(r => r.json());
const items = await Promise.all(
list.items.map(item => fetch(item.url).then(r => r.json()))
);Use the ?full=true parameter with pagination:
// β
GOOD - Fetch all items in pages (11 requests for 490 items)
async function getAllItems() {
let allItems = [];
let offset = 0;
const limit = 45;
while (true) {
const response = await fetch(`/v1/items?full=true&offset=${offset}&limit=${limit}`);
const data = await response.json();
allItems.push(...data.items);
// Check if there's more data
if (!data.next) break;
offset += limit;
}
return allItems;
}Performance difference:
- Without
?full=true: 491 requests (~5-10 seconds) - With
?full=true+ pagination: 11 requests (~2-3 seconds) - Each paginated request is cached separately!
Response includes pagination URLs:
{
"type": "items",
"total": 490,
"count": 45,
"offset": 0,
"limit": 45,
"items": [...],
"next": "/v1/items?full=true&offset=45&limit=45"
}The API uses smart caching with stale-while-revalidate:
- First Request: Gets data from GitHub and caches it
- Next Hour: Served from cache (instant)
- After 1 Hour: Serves cached data immediately while fetching fresh data in the background
- Stale Tolerance: Will serve cached data up to 24 hours old if GitHub is slow/unavailable
What this means:
- π Always instant responses (no waiting for GitHub)
- π Fresh data (usually within 1 hour)
- πͺ Resilient (works even if GitHub is down)
- π° Efficient (minimal GitHub API usage)
Cache Duration:
- Fresh: 1 hour
- Stale-while-revalidate: 24 hours
- The
?full=trueresponse is also cached separately
The API is secure by default:
- HTTPS Only: All requests are automatically redirected to HTTPS
- Security Headers: Standard browser protections enabled
- No Clickjacking: Can't be embedded in malicious iframes
- Safe MIME Types: Browser won't misinterpret file types
Works from browsers without issues:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Headers: Content-Type
No strict rate limits on the API itself. Keep in mind:
- Cloudflare Workers free tier: 100,000 requests/day
- GitHub API: 60 requests/hour - but caching means you rarely hit this
// Fetch all items
const response = await fetch('https://arcdata.mahcks.com/v1/items');
const { items, count } = await response.json();
// Get specific item
const item = await fetch('https://arcdata.mahcks.com/v1/items/anvil_i');
const itemData = await item.json();import requests
# List all quests
response = requests.get('https://arcdata.mahcks.com/v1/quests')
data = response.json()
print(f"Found {data['count']} quests")
# Get specific quest
quest = requests.get('https://arcdata.mahcks.com/v1/quests/power_out')
print(quest.json()['name']['en'])# Get all bots
curl https://arcdata.mahcks.com/v1/bots
# Get specific hideout module
curl https://arcdata.mahcks.com/v1/hideout/weapon_bench
# Get API info
curl https://arcdata.mahcks.com/v1βββββββββββββββ ββββββββββββββββββββ βββββββββββββββ
β Your App ββββββ>β Cloudflare Workerββββββ>β GitHub β
β (Browser) β<ββββββ (Cache & Proxy) β<ββββββ (Data Files)β
βββββββββββββββ ββββββββββββββββββββ βββββββββββββββ
β
βΌ
βββββββββββββββββββ
β Cached Data β
β (Fresh 5 mins) β
βββββββββββββββββββ
Simple flow:
- You make a request
- Cloudflare checks if it has cached data
- If yes β returns it instantly
- If no/expired β fetches from GitHub, caches it, returns it
- Next requests use the cache
This API gets its data from the official ARC Raiders community repository:
Source: RaidTheory/arcraiders-data
The data is from ARC Raiders Tech Test 2 and maintained by the community.
If you use this API, please credit:
- Data Source: https://github.com/RaidTheory/arcraiders-data
- ARC Tracker: https://arctracker.io
- This API: https://github.com/mahcks/arcraiders-data-api
Join our Discord to chat about ARC Raiders and connect with other developers:
# Install dependencies
npm install
# Start local dev server
npm run dev
# Deploy to Cloudflare
npm run deploy- Runtime: Cloudflare Workers
- Language: JavaScript
- Network: Cloudflare's global network
- Data Source: GitHub
arcraiders-data-api/
βββ src/
β βββ index.js # Main API code
βββ test/
β βββ index.spec.js # Tests
βββ wrangler.jsonc # Cloudflare config
βββ package.json
βββ README.md
MIT License - See LICENSE file for details
Questions or issues?
- Issues: GitHub Issues
- Discord: Join our community
Note: This data is from ARC Raiders Tech Test 2 and may change as the game evolves.
Built with β€οΈ by the ARC Raiders community