---
title: "Upload Avatar / Banner"
method: POST
path: "/api/reddit/profile/avatar"
tags: ["Profile"]
---

# Upload Avatar / Banner

`POST /api/reddit/profile/avatar`

## Request

- Base URL: `https://api.redditapis.com`
- URL: `https://api.redditapis.com/api/reddit/profile/avatar`
- Auth: HTTP bearer

Upload a new avatar or banner for the logged-in account. Provide the image via URL, base64, or a server-local path (PNG/JPEG, auto-detected). Provide exactly one of image_url, image_base64, or image_path. Session cookies are optional when a Reddit session is connected through POST /api/reddit/session: a call that sends none acts as the stored session, and cookies you do send always win. Cost: $0.012 per call.

## Request body

- object
  - `image_url` string: Publicly-fetchable image URL — the server downloads it
  - `image_base64` string: Base64-encoded image (with or without data:image/...;base64, prefix)
  - `image_path` string: Server-local path (rarely useful)
  - `kind` string: avatar (default) or banner
  - `mimetype` string: Hint (PNG / JPG) — auto-detected from bytes if omitted
  - `filename` string: Filename to record (default avatar.png)
  - `reddit_session` string: Account session cookie (from /api/reddit/login)
  - `csrf_token` string: Reddit CSRF token cookie
  - `loid` string: Account loid cookie (from /api/reddit/login)
  - `proxy` union: Sticky IP for this account — match the proxy used for /api/reddit/login, and send it on every call for that account. Object { server, username?, password? } or a proxy URL string. A bare host:port is accepted and treated as http. Schemes: http, https, socks4, socks5, socks5h (browser-backed endpoints support http, https, socks5). Pinned across internal retries; omit to use our shared pool.
    - object
      - `server` string, required
      - `username` string
      - `password` string
    - string
  - `max_attempts` integer: Retry budget (default 3)

## Response `200`

Successful response.

- object

## Other responses

- `400`: Bad request — missing or invalid parameters.
- `401`: Missing Bearer token.
- `402`: Your account balance does not cover this call, so nothing was charged and the request was not served. The response body is {"error":"Insufficient credits","top_up_url":"https://www.redditapis.com/dashboard/buy-credits","message":"..."}; error keeps that exact wording. This is a billing state, not a bad request: the same call succeeds once the balance is topped up, and retrying without topping up returns 402 again, which is why it carries Retry-After: 3600. Top up at the top_up_url, then call again at once; the header does not apply after a top-up. Read the remaining balance any time from GET /account/me, which is free and never returns this error. Distinct from the 402 on the monitoring endpoints, which is about plan entitlements rather than credits.
- `403`: Invalid Bearer token.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error.
- `502`: Upstream (Reddit) rejected the request — cookies expired or account flagged.

---

[API](https://skmtc.dev/redditapis/apis/redditapis-api.md) · [All operations](https://skmtc.dev/redditapis/apis/redditapis-api/llms.txt) · [OpenAPI document](https://skmtc.dev/redditapis/apis/redditapis-api/revisions/9696482dfe9b?raw)
