Every user, a face.

Drop-in deterministic mascot avatars. Pass any string — user id, email, UUID — get back a clean SVG or PNG. Same seed in, same face out, every time.


the cast

22 palettes, 8 bodies, 10 eyes, 10 mouths, 5 antennas, 12 toppers, 7 accessories. Plus continuous tweaks — every seed reads as an individual.


groups

For teams, threads, comments — anywhere people gather. Opaque tiles so overlap stays clean.

avatar group GET https://navii-api.uxderrick.com/group?seeds=aria,milo,nova,kai,sage&size=72&overlap=0.32

api reference

No SDK, no auth, public CORS. All endpoints return cacheable image content with 1-year immutable headers (HTML pages cache 5 min).

GET /avatar/:seed[.svg|.png]

Returns a deterministic mascot avatar for the given seed. Same seed → same avatar, byte-for-byte. Append .png to the seed to receive a rasterized PNG instead of SVG.

path

:seed
string
Any unique identifier. Use a stable user id, UUID, or email. Avoid display names — collisions cause duplicate avatars.

query

size
number
Output size in px. Default 96. Range 16–1024.
palette
enum
Force a color family. indigo · mint · amber · sky · violet · cyan · rose · lime · peach · teal · sand · plum · coral · forest · slate · fuchsia · terracotta · navy · lavender · charcoal · butter · aqua
background
enum
Scene fill. none · solid · ring. Default = seed-derived.
tileBg
color
Opaque circular tile behind avatar. Any CSS color, e.g. %23ffffff (URL-encoded #fff), or auto to use the palette accent.
title
string
Accessible label. Adds role="img" + aria-label.
animated
0 | 1
Opt-in idle motion (float, blink, sway, twinkle). SVG only; PNG ignores. Respects prefers-reduced-motion.

examples

basic GET https://navii-api.uxderrick.com/avatar/alice
animated GET https://navii-api.uxderrick.com/avatar/alice?animated=1
palette: violet GET https://navii-api.uxderrick.com/avatar/alice?palette=violet
filled tile (white) GET https://navii-api.uxderrick.com/avatar/alice?tileBg=%23ffffff
dark tile GET https://navii-api.uxderrick.com/avatar/alice?tileBg=%230b0b0c
with ring bg GET https://navii-api.uxderrick.com/avatar/alice?background=ring
PNG raster GET https://navii-api.uxderrick.com/avatar/alice.png?size=256
big PNG GET https://navii-api.uxderrick.com/avatar/alice.png?size=512&tileBg=auto

GET /group

Renders multiple seeded avatars as a single horizontally-stacked SVG with optional overlap and a +N counter tile for overflow.

query

seeds
csv
Comma-separated list of seeds. Up to 50.
size
number
Per-tile size in px. Default 64. Range 16–256.
overlap
number
Fraction each tile overlaps the previous. 0 = no overlap, 0.7 = heavy stack. Default 0.3.
max
number
Max tiles to render. Extra seeds collapse into a +N tile. Default = all.
ring
color
Border color around each tile. Default white.
tileBg
color
Opaque fill behind each avatar (prevents overlap show-through). Default white.
animated
0 | 1
Per-avatar animation in the group.

examples

basic GET https://navii-api.uxderrick.com/group?seeds=alice,bob,carol
overlap GET https://navii-api.uxderrick.com/group?seeds=alice,bob,carol,dave,eve&size=64&overlap=0.45
with +N GET https://navii-api.uxderrick.com/group?seeds=alice,bob,carol,dave,eve,frank,grace&size=56&max=4
animated GET https://navii-api.uxderrick.com/group?seeds=alice,bob,carol,dave&size=72&animated=1

GET /gallery

Visual debug page — N seeded avatars in a grid. For browsing the cast, not for production embedding.

query

count
number
How many tiles (1–500). Default 96.
size
number
Per-tile size. Default 96.
prefix
string
Seed prefix. Default user, so seeds become user-0, user-1, …
animated
0 | 1
Animate each tile.

GET /healthz

Liveness probe. Returns {"ok":true,"pngCacheSize":N}.

GET /api

Service metadata as JSON. Useful for clients that want to discover the endpoint surface programmatically.

headers

All image responses set:

cache-control
public, max-age=31536000, immutable — safe to cache forever (seed + params fully determine the bytes).
access-control-allow-origin
* — embed anywhere.
content-type
image/svg+xml; charset=utf-8 for SVG, image/png for PNG.

rate limits

Per-IP sliding window: 600 requests / minute on /avatar/*. Exceeds → HTTP 429 + Retry-After header. /group, /gallery, /healthz are unlimited.

determinism guarantee

Same seed + same query params → byte-identical response. Forever. Safe to cache, safe to mirror, safe to depend on.