Skip to main content

API reference

The base URL is https://api.vrchatlegends.com/api. Responses are JSON unless the endpoint specifies HTML or plain text.

Public data​

RequestResult
GET /playersCurated Legends, excluding community profiles
GET /players/:idA profile, subject to visibility rules
GET /social/feedPublic social feed
GET /groupsVRChat groups
GET /worldsFeatured worlds
GET /eventsGroup events
GET /teamSite team
GET /statsCommunity statistics
GET /site/contextSite overview for integrations
GET /healthAPI health

See permanent user IDs for account lookup, which is distinct from profile slug lookup.

Authenticated requests​

Create an API key in Developer tools. Accounts can keep up to five keys. Keep the raw key secret; it is shown when created or regenerated. Send Authorization: Bearer vrcl_YOUR_API_KEY. Account and site-context routes also support X-API-Key, but use the bearer header for player routes. Never publish a key in a web page, iframe URL, or repository.

Common scopes include account:read, profile:read, profile:write, feed:read, feed:write, feed:delete, comments:read, comments:write, followers:read, followers:write, and media:write. Possessing a scope does not bypass ownership or patron entitlement checks.

legends:read and legends:write are retained for older integrations. Profile writes accept profile:write or legends:write. Upload routes check legends:write and its current aliases, including profile:write and media:write. Use the endpoint chapters for the permission checked by each action; scopes are not OAuth sign-in scopes.

ChapterIncludes
Permanent user IDsAccount ID lookup, name search, privacy, pagination
Profiles and commentsProfile edits, uploads, comments, followers, invitations
Social postsTimeline queries, posts, replies, likes, reposts, tier limits
IntegrationsSite data, analytics, VRChat string loaders, examples
OAuthApplication registration, authorization code flow and revocation
EmbedsRead-only HTML cards, content sections and counters

For personal exports use export:read; notifications use notifications:read. Extended site context accepts site:read. API keys cannot be used to manage other keys. Website session credentials remain subject to ownership, bans, visibility, and account restrictions.

Errors​

Handle 400 for invalid input, 401 for missing/expired credentials, 403 for insufficient permission, 404 for unavailable resources, and 429 for rate limiting. Respect retry headers when supplied. Do not retry writes blindly: a lost response does not necessarily mean the action failed.

Uploads can return 413 for size limits, 422 for a detected audio match, or 503 when required screening is unavailable. Show the API's error message and retain the user's draft. A private resource may intentionally appear as 404.