---
title: "[ACCOUNT ACTION] Avatar"
method: POST
path: "/tw-v2/profile/avatar"
tags: ["Profile (account action)"]
---

# \[ACCOUNT ACTION\] Avatar

`POST /tw-v2/profile/avatar`

## Request

- Base URL: `https://api.tweetapi.com`
- URL: `https://api.tweetapi.com/tw-v2/profile/avatar`
- Auth: API key in header `X-API-Key`

Update the profile picture for the authenticated Twitter/X account using an image URL or base64 image payload.

## Request body

- UpdateProfileMediaRequest
  - `authToken` string, required: Caller-supplied auth_token cookie value. Treat it as a secret.
  - `media` union, required
    - object
      - `url` string, uri, required
      - `type` 'image/jpeg' | 'image/jpg' | 'image/png' | 'image/webp'
    - object
      - `data` string, byte, required
      - `type` 'image/jpeg' | 'image/jpg' | 'image/png' | 'image/webp', required
  - `proxy` string

## Response `200`

Successful response

- UserResponse
  - `data` User, nullable, required
    - `id` string, required
    - `username` string, required
    - `name` string
    - `bio` string
    - `location` string, nullable
    - `website` string, uri, nullable
    - `pinnedTweetIds` string[]
    - `avatar` string, uri, nullable
    - `banner` string, uri, nullable
    - `profileImageShape` 'Circle' | 'Square' | 'null', nullable
    - `verified` boolean
    - `isBlueVerified` boolean
    - `verifiedType` string, nullable
    - `verifiedSince` string, date-time, nullable
    - `isIdentityVerified` boolean
    - `isProtected` boolean
    - `possiblySensitive` boolean
    - `profileInterstitialType` string, nullable
    - `withheldInCountries` string[]
    - `professional` object, nullable
    - `businessAccount` object, nullable
    - `creatorSubscriptionsCount` integer
    - `hasHiddenSubscriptions` boolean
    - `highlightsInfo` object, nullable
    - `hasGraduatedAccess` boolean
    - `isProfileTranslatable` boolean
    - `hasCustomTimelines` boolean
    - `isTranslator` boolean
    - `affiliatesHighlightedLabel` object, nullable
    - `defaultProfile` boolean
    - `defaultProfileImage` boolean
    - `followerCount` integer
    - `followingCount` integer
    - `tweetCount` integer
    - `listedCount` integer
    - `mediaCount` integer
    - `favoritesCount` integer
    - `createdAt` string, date-time, nullable

## Other responses

- `400`: The request is invalid. Check the parameters and try again.
- `401`: The TweetAPI key or caller-supplied Twitter authentication token is missing or invalid.
- `403`: The authenticated account is not permitted to perform the operation.
- `404`: The requested resource or route was not found.
- `429`: A plan limit rejected the request. The code field says which one. RATE_LIMITED means the per-minute limit was exceeded; wait for Retry-After. QUOTA_EXHAUSTED means the allowance and prepaid balance are used up. SUBSCRIPTION_INACTIVE means the subscription has expired or is inactive. Retrying won't fix the last two. A 429 without a code is temporary; retry with bounded backoff. This response does not include X-RateLimit headers.
- `500`: The request could not be completed.
- `503`: Request allowance is temporarily unavailable. This request was not processed. Follow Retry-After before trying again; contact support if the error persists.

---

[API](https://skmtc.dev/tweetapi/apis/tweetapi-v2-api-reference.md) · [All operations](https://skmtc.dev/tweetapi/apis/tweetapi-v2-api-reference/llms.txt) · [OpenAPI document](https://skmtc.dev/tweetapi/apis/tweetapi-v2-api-reference/revisions/51bc9024013d?raw)
