Site data, analytics and string loaders
Base URL: https://api.vrchatlegends.com/api. Cache public data and avoid rapid polling. For counters, start with a 30–60 second refresh interval and back off on 429.
Site and community data
| GET path | Result |
|---|---|
/site/context | Public site overview; extended data with site:read |
/groups | Community VRChat groups |
/worlds | Featured worlds |
/events | Group events |
/team | Team members |
/stats | Group and community statistics |
/discord/patreon-members | Public supporter listing |
/config | Public site configuration |
/health | API health |
Analytics
| GET path | Result |
|---|---|
/analytics/legend-views | Profile view counts and leaderboard |
/analytics/legend-views/:playerId | One profile's view count |
/analytics/legend-likes | Profile like counts |
/analytics/legend-likes/:playerId | One profile's like count |
/analytics/history | Daily snapshots |
/analytics/online | Current visitor count |
POST /analytics/legend-view and POST /analytics/ping are website instrumentation endpoints, not mechanisms for increasing counters from an integration. Read existing counts instead.
const base = 'https://api.vrchatlegends.com/api';
const id = encodeURIComponent(profileId);
const readJson = async (path) => {
const response = await fetch(base + path);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.json();
};
const [views, likes] = await Promise.all([
readJson(`/analytics/legend-views/${id}`),
readJson(`/analytics/legend-likes/${id}`),
]);
console.log({ views: views.count ?? 0, likes: likes.count ?? 0 });
VRChat string loaders
Append ?format=plain or send Accept: text/plain for plain-text output. No key should be included in a public VRChat world.
| GET path | Plain-text result |
|---|---|
/loaders | Loader endpoint index |
/loaders/legends | Public Legend names and IDs, tab-separated |
/loaders/legends/:playerId | Name and biography snippet |
/loaders/legends/:playerId/views | View count |
/loaders/legends/:playerId/likes | Like count |
/loaders/stats | Site counts and URL |
/loaders/site | Site name, tagline and URL |
curl --fail 'https://api.vrchatlegends.com/api/loaders/legends/PROFILE_ID/views?format=plain'
Sharing and AI-readable references
Use each profile's canonical URL and the post's shareUrl; social crawlers obtain title, description and images from that page. See embeds for HTML cards and counters.
The website publishes llms.txt, plain-text context, and a sitemap. These are discovery aids, not a guarantee of search placement. Cite the actual public profile or documentation page, respect privacy, and distinguish community-authored character lore from facts about real people.