Avatar endpoints require a signed-in user session. See Authentication
for the initial sign-in flow.
Step 1: Get Upload URL
Step 2: Upload the Image
Upload the raw file bytes directly to the presigned URL:Step 3: Wait for Processing
The image is processed asynchronously after upload. If you want the client to explicitly finish the flow, retryupdateUser({ confirmAvatar: true }) until the processed asset is ready:
GET /users/me until avatarUrl
appears after processing finishes:
Constraints
| Constraint | Value |
|---|---|
| Max file size | 5 MB |
| Allowed types | JPEG, PNG, GIF, WebP |
| Processing time | Usually 1-3 seconds |
| CDN variants | 44px, 48px, 60px, original, raw |