Authentication
Send the key as an HTTP Bearer token. Full secrets are displayed only when created or rotated.
Authorization: Bearer 9k_live_...9000INC developer platform
Read privacy-safe aggregate analytics from 9000INC products without exposing private account, payroll, invoice, support-content, raw Discord identity, or server-statistics data.
Send the key as an HTTP Bearer token. Full secrets are displayed only when created or rotated.
Authorization: Bearer 9k_live_...The public API is versioned in the URL. Public endpoints use /api/v1/analytics/.... Existing internal/admin analytics routes remain separate.
Datasets
| Dataset | Endpoint | Required scope |
|---|---|---|
| Platform overview | /api/v1/analytics/platform | analytics:platform |
| Game downloads | /api/v1/analytics/game-downloads | analytics:downloads |
| Advertising | /api/v1/analytics/ads | analytics:ads |
| Giveaways | /api/v1/analytics/giveaways | analytics:giveaways |
| Games | /api/v1/analytics/games | analytics:games |
| Login geography | /api/v1/analytics/login-geography | analytics:geography |
Date filters: ?unit=days&amount=30. Public v1 accepts days (max 365), weeks (max 52), or months (max 24). Login geography instead uses ?month=YYYY-MM&granularity=city|region|country and retains the existing privacy threshold.
curl -H "Authorization: Bearer $NINEK_API_KEY" \
"https://9000inc.com/api/v1/analytics/platform?unit=days&amount=30"
import { NineKAnalytics } from '@9000inc/analytics';
const api = new NineKAnalytics({ apiKey: process.env.NINEK_API_KEY });
const data = await api.platform({ unit: 'days', amount: 30 });
Scopes
analytics:platformanalytics:downloadsanalytics:adsanalytics:giveawaysanalytics:gamesanalytics:geographyQuotas
| Membership | Per minute | Per day |
|---|---|---|
| Free | 30 | 500 |
| Basic | 90 | 5,000 |
| Premium | 180 | 25,000 |
| Pro | 360 | 100,000 |
Rate-limit information is returned in response headers and the JSON envelope. Quotas are account-wide across all keys, enforced with an atomic account reservation before dataset generation, and membership changes automatically change the active quota without regenerating a key. Rate-limited requests do not extend the lockout window.
Keys can be limited to specific datasets, edited later, rotated without changing their scopes, or revoked immediately. Rotation invalidates the previous secret as soon as the new one is issued.
X-RateLimit-Plan, minute/day limit and remaining values, minute/day reset Unix timestamps, and Retry-After on throttled responses are available for client backoff.
Rejected requests return a stable error_code such as missing_api_key, invalid_or_revoked_api_key, scope_denied, rate_limit_exceeded, or quota_accounting_busy, alongside a human-readable message.
The public API intentionally excludes raw account IDs, emails, support message content, wallet transactions, invoices, Teams payroll, private room/player identifiers, raw Discord user/server/channel identifiers, and internal server statistics. Login geography keeps the existing distinct-user suppression threshold. Advertising exposes only the verified event ledger created in Patch 674.
Required legal release ยท 2026-08-16.1
This synchronized release covers 9000INC accounts, connected providers, Teams, games and multiplayer, purchases and donations, community content, Minecraft, APIs, security records, and related information practices. Effective August 16, 2026.
Review the Legal Center, full Terms of Use, and Privacy Policy. Closing this prompt does not count as acceptance.