Skip to main content

Social posts and replies

Paths are relative to https://api.vrchatlegends.com/api. Public reads respect profile visibility, feed settings and moderation. Write requests use a bearer credential; examples of API-key scopes below do not replace ownership checks.

Timeline​

GET /social/feed returns posts, total, limit, offset, and hasMore.

ParameterMeaning
qSearch post text and VRChat photo metadata
feedlatest, following, trending; omitted for For you
typetext, image, video, media; omitted for all posts
limitPage size, 1–100; default 50
offsetNon-negative offset

Following requires a signed-in website viewer; a logged-out request returns an empty result with requiresAuth: true. Reposts may refer to the same original post: retain feedKey for timeline identity. Use hasMore to stop pagination and handle changes to a live timeline without duplicating cards.

Profile feed​

Method and pathBehavior / API-key scope
GET /players/:id/feed?q=…Profile feed; feed:read if authenticated as an API key
GET /players/:id/feed/:postIdOne post, including sharing metadata
POST /players/:id/feedCreate own post; feed:write, profile:write, or legends:write
DELETE /players/:id/feed/:postIdDelete own post; feed:delete, profile:write, or legends:write
POST /players/:id/feed/:postId/likeToggle like; comments:write or legends:write
POST /players/:id/feed/:postId/repostToggle repost; comments:write or legends:write
POST /players/:id/feed/:postId/reportReport; comments:write

The profile owner must enable Feed. A new post's JSON body accepts body, media (up to four previously uploaded media descriptors), and an optional quote containing playerId and postId. At least text, media, or a valid quote is required. API-created posts retain their API attribution after reload.

{
"body": "A world worth visiting.",
"media": [],
"quote": { "playerId": "PROFILE_ID", "postId": "POST_ID" }
}

Use GET /social/limits with the current viewer's credentials instead of hardcoding composer limits. Current tiers are:

MembershipPost charactersImage uploadVideo upload
Free1008 MBNot available
Bronze Legend15015 MBNot available
Gold Legend20025 MB25 MB
Platinum Legend / Platinum Legend+30050 MB50 MB

The backend independently validates limits. Oversized posts return 400; upload sizes return 413. Posting cooldowns, hourly caps and duplicate detection can return 429. Keep drafts intact when a request fails.

Replies​

Method and path under /players/:id/feed/:postIdInput / behavior
GET /commentsRead replies
POST /commentsJSON body, optional parentId
PUT /comments/:commentIdJSON body; author edits
DELETE /comments/:commentIdAuthor, profile owner or authorized moderator
POST /comments/:commentId/likeToggle a reply like
POST /comments/:commentId/reportReport a reply

Reply writes require comments:write for API keys and a linked profile. Text is limited to 500 characters. Replies remain subject to block lists, content filtering and nesting limits. Do not treat 403 as a transient error or repeatedly retry it.