Endpoints
All paths are relative to https://www.remilia.net/api/v1. Responses are JSON. Send Authorization: Bearer <access_token> on any endpoint requiring a scope (see Login Quickstart).
Get a user profile
GET /users/{username}Returns the public profile for {username}.
Scope: none — public.
A token is optional. If sent, it must be valid; an expired or malformed token returns 401 invalid_token.
curl https://www.remilia.net/api/v1/users/remiliaThe profile object is returned directly (no data wrapper). An unknown username returns a plain-text 404 user not found, not the JSON error envelope.
Get the authenticated user's profile
GET /me/profileReturns profile data for the token's user: handle, display name, per-platform stats, and aggregate scores.
Scope: remilia:profile.private · user-delegated token required
curl https://www.remilia.net/api/v1/me/profile \
-H "Authorization: Bearer $ACCESS_TOKEN"The response is wrapped in a data envelope:
{
"data": {
"handle": "remilia",
"display_name": "Remilia",
"stats": { "...": "per-platform stats objects" },
"aggregate_scores": { "...": 0 }
}
}This data is readable only for the user who granted the scope; there is no {username} variant.
Poke a user
POST /pokesSends a poke to another user, attributed to the authenticated user.
Scope: remilia:interact.poke · user-delegated token required
curl -X POST https://www.remilia.net/api/v1/pokes \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"username": "remilia"}'Responses
Success:
{ "success": true }Unknown-target and cooldown failures return HTTP 400:
{ "success": false, "error": "poke on cooldown (23h59m30s remaining)" }Poking the same user is limited to once per 24 hours — a per-target cooldown, not a rate limit. Disable the action until it lapses.