Developer API

Everything the site does runs on this REST API. Base URL https://aviseek.vrchatlegends.com/api. JSON in, JSON out. Endpoints are rate limited per IP (search 120/min, submissions 10/min).

Personal, non-commercial use only. Using this API for profit, in any commercial product, or without permission is prohibited - see the Terms of Service.

Catalog

Public, unauthenticated. Responses are cached for up to 60 seconds. NSFW avatars and creator-hidden avatars are never returned.

GET/api/avatars/search

Search the index.

q
Free text over name, creator, description, and tags.
author
Filter by creator name or id (substring).
tag
Filter by a single tag.
platform
pc, quest, pc_only, quest_only, or cross (both).
sort
popular (default view count), recent, oldest, or name.
limit / offset
Paging. limit is capped at 60.
curl "https://aviseek.vrchatlegends.com/api/avatars/search?q=fox&platform=quest_only&sort=popular&limit=10"
{ "total": 132, "avatars": [{ "id": "avtr_...", "name": "...", "authorName": "...",
  "imageUrl": "...", "tags": [...], "platforms": ["quest"], "views": 41, ... }],
  "limit": 10, "offset": 0, "hasMore": true }

GET/api/avatars/tags

Most common tags across listed avatars.

limit
Max 60, default 24.
curl "https://aviseek.vrchatlegends.com/api/avatars/tags?limit=10"

GET/api/avatars/trending

Most viewed listed avatars.

limit
Max 20, default 5.
curl "https://aviseek.vrchatlegends.com/api/avatars/trending?limit=5"

GET/api/avatars/popular-searches

Most typed search terms (anonymous counters).

curl "https://aviseek.vrchatlegends.com/api/avatars/popular-searches"

GET/api/avatars/:id

A single listed avatar.

curl "https://aviseek.vrchatlegends.com/api/avatars/avtr_00000000-0000-0000-0000-000000000000"

POST/api/avatars/submit

Queue an avatar id (or any URL containing one) for indexing.

curl -X POST "https://aviseek.vrchatlegends.com/api/avatars/submit" -H "Content-Type: application/json" -d '{"avatarId":"avtr_..."}'

POST/api/avatars/impressions

Batched anonymous "shown in results" counters. Body: { ids: [avtr_...] } (max 60).

curl -X POST "https://aviseek.vrchatlegends.com/api/avatars/impressions" -H "Content-Type: application/json" -d '{"ids":["avtr_..."]}'

POST/api/avatars/:id/track

Anonymous counter bump. Events: view, outbound.

curl -X POST "https://aviseek.vrchatlegends.com/api/avatars/avtr_.../track" -H "Content-Type: application/json" -d '{"event":"view"}'

POST/api/avatars/:id/report

Report an avatar (abuse or creator removal request).

curl -X POST "https://aviseek.vrchatlegends.com/api/avatars/avtr_.../report" -H "Content-Type: application/json" -d '{"reason":"..."}'

GET/api/stats

Index totals and fetch queue size.

GET/api/health

Liveness probe. Reports whether the VRChat fetcher is online.

VRChat Legends account

Cookie sessions backed by VRChat Legends OAuth (PKCE). Favorites require being signed in.

POST/api/auth/login

Sign in with VRChat Legends email + password. May return { next: "totp" | "email", ticket }.

POST/api/auth/login/code

Complete 2FA: { ticket, code, method }. Sets the session cookie.

POST/api/auth/login/resend

Resend the email sign-in code for a ticket.

GET/api/auth/me

Current session: { enabled, authenticated, user }.

POST/api/auth/logout

Destroys the session cookie.

GET/api/favorites

Your saved avatars: { ids, avatars }.

PUT/api/favorites/:id

Save an avatar.

DELETE/api/favorites/:id

Unsave an avatar.

GET/api/likes

Avatar ids you have liked.

PUT/api/likes/:id

Like an avatar - like counts are public on every card.

DELETE/api/likes/:id

Remove your like.

Creator Studio

VRCL session required. Avatar ownership is proven by the VRChat account verified on your VRChat Legends profile - AviSeek never asks for or handles VRChat credentials. Without a verified link these endpoints return 409 with code no_player or not_verified.

GET/api/creator/avatars

Your avatars in the AviSeek index with analytics: impressions, views, CTR, likes, favorites, plus a daily series (?days=7-90).

PUT/api/creator/avatars/:id/visibility

Unlist ({ "listed": false }) hides your avatar from all of AviSeek; { "listed": true } relists it.

Admin & sources

Import mirroring from public third-party indexes plus moderator tools. Admin endpoints need the X-Admin-Key header.

GET/api/sources

Import status: last run, per-source counts, schedule.

POST/api/sources/import

Control the importer. Body: { action: start|restart|stop }. Requires X-Admin-Key.

DELETE/api/avatars/:id

Moderator removal - permanent blocklist. Requires X-Admin-Key.

Play nice: cache responses where you can and keep a descriptive User-Agent. NSFW avatars, private avatars, and creator-removed avatars are excluded at the API layer and cannot be retrieved through any endpoint.