All releases
Feature

Auth — profile pictures and self-serve username changes

End-users get first-class avatars — uploaded via the API or captured automatically from Google/GitHub sign-in — plus the ability to change their own username, all on the Consumer API.

GET /:app/v1/me now returns avatar_url: a stable, cacheable URL you can hotlink from your app — it always resolves to the user's current picture. Users upload their own via POST /:app/v1/me/avatar (PNG/JPEG/WebP, up to 2 MB; images are re-encoded server-side with EXIF/GPS metadata stripped) and remove it with DELETE /:app/v1/me/avatar. Accounts that sign in with Google or GitHub pick up the provider's profile picture automatically — an uploaded avatar always takes precedence. Apple issues no profile pictures, so Apple sign-ins simply start without one.

PATCH /:app/v1/me additionally accepts a username — 3–32 characters (letters, numbers, dot, underscore, hyphen), unique per app case-insensitively. A conflict returns 409 with the stable error code USERNAME_TAKEN. Speaking of which: error responses across the Consumer API now carry their documented code field on the wire, so SDKs can branch on codes instead of matching message strings.