MetaBuff API v1
Market visibility intelligence for game developers. Discover underserved niches, diagnose store page performance, and make data-driven decisions — all via REST.
Authentication
All API requests require a Bearer token. Your API key is available in the API Access section of your dashboard. Include it in the Authorization header of every request.
Authorization: Bearer mb_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Base URL
All endpoints are served from:
https://api.metabuff.dev/v1
Try it live
Paste your API key, pick an endpoint, click Send. Your key is used only for this request — it is
not stored, logged, or transmitted anywhere except to api.metabuff.dev.
Don't have a key? Sign in to the dashboard to get one.
Rate Limits
Rate limits are enforced per API key on a rolling 24-hour window. The remaining quota is returned in response headers.
| Plan | Daily Limit | Rate | Price |
|---|---|---|---|
| EXPLORER | 50 calls/day | 1 req/sec | Free |
| INDIE PRO | 500 calls/day | 5 req/sec | $9.99/mo |
Rate Limit Headers
X-RateLimit-Limit: 500
X-RateLimit-Remaining: 487
X-RateLimit-Reset: 1714521600
GET /market/niches
Returns trending market niches ranked by opportunity score. Each niche is a combination of genre tags with saturation, game count, and estimated revenue data.
Query Parameters
| Param | Type | Description | |
|---|---|---|---|
| min_opportunity | float | optional | Minimum opportunity score (0.0–1.0). Default: 0 |
| max_saturation | float | optional | Maximum saturation score (0.0–1.0). Default: 1.0 |
| min_games | int | optional | Minimum games in niche. Default: 5 |
| limit | int | optional | Max results. Explorer: 10, Indie Pro: 200 |
Example: cURL
curl "https://api.metabuff.dev/v1/market/niches?min_opportunity=0.5&max_saturation=0.4&limit=20" \
-H "Authorization: Bearer mb_live_xxxxx"
Example: JavaScript
const resp = await fetch(
"https://api.metabuff.dev/v1/market/niches?min_opportunity=0.5",
{
headers: {
"Authorization": `Bearer ${API_KEY}`
}
}
);
const niches = await resp.json();
console.log(niches.data[0]);
// → { tag_combo: ["Roguelike","Deckbuilder"], opportunity_score: 0.82, ... }
Response
{
"data": [
{
"tag_combo": ["Roguelike", "Deckbuilder"],
"game_count": 47,
"saturation_score": 0.23,
"opportunity_score": 0.82,
"avg_review_score": 78.4,
"median_revenue_estimate": 34500.00,
"review_velocity_30d": 2.3
}
],
"meta": {
"total": 142,
"limit": 20,
"tier": "indie"
}
}
GET /game/diagnostic
Returns a full visibility diagnostic for a specific game, including the 5-metric Buff Score breakdown and a structured Strategy Dossier with actionable recommendations.
Path Parameters
| Param | Type | Description | |
|---|---|---|---|
| appid | int | required | The game's App ID (numeric identifier from the store page URL) |
Example: cURL
curl "https://api.metabuff.dev/v1/game/diagnostic/1086940" \
-H "Authorization: Bearer mb_live_xxxxx"
Example: JavaScript
const APP_ID = 1086940; // Baldur's Gate 3
const resp = await fetch(
`https://api.metabuff.dev/v1/game/diagnostic/${APP_ID}`,
{
headers: {
"Authorization": `Bearer ${API_KEY}`
}
}
);
const { data } = await resp.json();
console.log(`Buff Score: ${data.buff_score}/100`);
console.log(`Actions: ${data.dossier.actions.length}`);
Response
{
"data": {
"steam_appid": 1086940,
"name": "Baldur's Gate 3",
"developer": "Larian Studios",
"buff_score": 87,
"metrics": {
"impression_efficiency": 0.74,
"tag_effectiveness": 0.68,
"competitor_density": 12,
"review_velocity": 3.2,
"price_signal": 1.1
},
"dossier": {
"version": 2,
"actions": [
{
"type": "engagement",
"text": "Strong review score (95% from 412k reviews)...",
"impact": "medium",
"data": { "review_score": 95, "total_reviews": 412000 }
}
],
"gaps": [ /* gap analysis entries */ ],
"opportunities": [ /* tag swap suggestions */ ]
}
}
}
GET /market/tags
Returns per-tag competition data: total games, 90-day new entries, average review scores, and median estimated revenue. Useful for evaluating individual tag choices.
Query Parameters
| Param | Type | Description | |
|---|---|---|---|
| sort | string | optional | total_games (default), new_games_90d, avg_review_score |
| limit | int | optional | Max results (1–100). Default: 50 |
Example: cURL
curl "https://api.metabuff.dev/v1/market/tags?sort=new_games_90d&limit=20" \
-H "Authorization: Bearer mb_live_xxxxx"
Response
{
"data": [
{
"tag_name": "Roguelike",
"total_games": 3420,
"new_games_90d": 87,
"avg_review_score": 72.1,
"median_estimated_revenue": 18200.00
}
]
}
Error Codes
All errors follow a consistent format:
{
"error": {
"code": "rate_limit_exceeded",
"message": "Daily API limit reached. Resets at midnight UTC.",
"status": 429
}
}
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_parameter | A query parameter is malformed or out of range |
| 401 | unauthorized | Missing or invalid API key |
| 403 | tier_restricted | Your plan does not include this endpoint or limit |
| 404 | not_found | Game or resource not in our database |
| 429 | rate_limit_exceeded | Daily limit reached. Resets at midnight UTC. |
| 500 | internal_error | Something went wrong on our end. Retry after a few seconds. |
Metric Glossary
Every metric in the diagnostic endpoint is a proxy derived from publicly available store data. We're transparent about what each one measures and its limitations.
| Metric | Formula | Range | Interpretation |
|---|---|---|---|
| Impression Efficiency | sigmoid(log(followers / reviews)) | 0–1 | Higher = more visibility relative to purchases. >0.7 may indicate a conversion problem (people see it but don't buy). |
| Tag Effectiveness | 1 - mean(tag_saturations) | 0–1 | Higher = your tags are in less crowded spaces. Low values mean your tags pit you against many competitors. |
| Competitor Density | count(same_tags ∩ last_90d) | 0–∞ | Games sharing your top-3 tag combo released in the last 90 days. Lower = less direct competition in your release window. |
| Review Velocity | (reviews_now - reviews_30d_ago) / 30 | 0–∞ | Reviews per day over 30 days. Proxy for current player momentum and engagement. |
| Price Signal | game_price / niche_median_price | 0–∞ | 1.0 = priced at niche median. >1.5 = significantly above average (may hurt conversion). <0.5 = potentially undervalued. |