API documentation
All routes are rate-limited per IP unless noted. Base URL: https://mcprofiles.me. Privacy.
/api/player/[query]Returns a Java player profile (Mojang session + aggregated capes + Geyser verified Bedrock enrichment when available).
Response kind is one of profile, archiveFallback, historicalMatches, or notFound. Historical matches are returned when a searched username is not currently claimed but exists in MCProfiles' observed archive.
Query params: type=java|bedrock|all (default all) — metadata only; same lookup pipeline. Use bedrock to set meta.bedrockFocus for clients.
Response: { data, meta } with cacheState, requestedType, etc.
/api/server/[address]Java and Bedrock server status via mcstatus.io (see README for provider stack).
/api/refresh/[uuid]Force-refresh a cached player profile (stricter rate limit).
/api/discoverRecent players and aggregate stats for the home page. playersTracked comes from Turso archive metrics, while userSearches counts user-initiated player/server/compare searches and excludes refresh jobs.
/api/username/checkUsername availability heuristic (Mojang 404-based).
/api/capes/exploreCape explorer over stored snapshots. Without params returns the full cape catalog with observed-owner counts (unique players from MCProfiles' archive owner table). With capeSlugs (comma-separated cape slugs) returns players who own all specified capes (intersection match, capped at 200 results).
/api/search/universal?q=…Combined player + server search. Returns up to 8 players and 5 servers matching the query string (case-insensitive substring match).
/api/servers/search?q=…Server-only search with synthetic TLD suggestions when the query has no dot.
/api/username/droppingReturns scheduled NameMC seed data merged with MCProfiles' own observed username changes. This is a heuristic feed, not an official availability API. Response metadata includes freshness and failure fields such as stale, lastSuccessfulSeedAt, lastFailedSeedAt, and lastFailureReason.
/api/watchlist?sessionId=…List watches and optional alert email settings for a browser session.
/api/watchlistBody: { sessionId, playerUuid }. Free tier max 8 entries per session; Plus max 60 when subscription is active.
/api/watchlistRemove a watch (same body shape as POST).
/api/watchlist/alertConfigure email digest / notification preferences.
/api/cron/watchlistDaily Vercel Cron watchlist refresh — requires Authorization: Bearer CRON_SECRET.
/api/cron/cape-recheckDaily Vercel Cron refresh for recently viewed players so current profiles and official cape ownership stay fresh.
/api/cron/username-dropsDaily Vercel Cron seed refresh for the username drop feed. On upstream failure, the previous stale snapshot is preserved and failure metadata is updated.
/api/privacy-requestPrivacy / suppression requests (see privacy page).
/api/subscription?sessionId=…Returns { plus, watchlistMax } for MCProfiles Plus status on this browser session.
/api/stripe/status{ configured: boolean } — whether Stripe keys and price id are set server-side.
/api/stripe/checkoutBody: { sessionId }. Returns { url } to Stripe Checkout when configured.
/api/stripe/webhookStripe webhook — server-only; verifies signature with STRIPE_WEBHOOK_SECRET.