POST
/
2
/
media
/
upload
Upload media
curl --request POST \
  --url https://api.x.com/2/media/upload \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "additional_owners": [
    "2244994945"
  ],
  "media_category": "tweet_image",
  "media_type": "image/png",
  "shared": false
}'
{
  "data": {
    "expires_after_secs": 123,
    "id": "1146654567674912769",
    "media_key": "<string>",
    "processing_info": {
      "check_after_secs": 123,
      "progress_percent": 123,
      "state": "succeeded"
    },
    "size": 123
  },
  "errors": [
    {
      "detail": "<string>",
      "status": 123,
      "title": "<string>",
      "type": "<string>"
    }
  ]
}

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Body

media
required

The file to upload.

media_category
enum<string>
required

A string enum value which identifies a media use-case. This identifier is used to enforce use-case specific constraints (e.g. file size) and enable advanced features.

Available options:
tweet_image,
dm_image,
subtitles
Example:

"tweet_image"

additional_owners
string[]

Unique identifier of this User. This is returned as a string in order to avoid complications with languages and tools that cannot handle large integers.

media_type
enum<string>

The type of image or subtitle.

Available options:
text/srt,
text/vtt,
image/jpeg,
image/bmp,
image/png,
image/webp,
image/pjpeg,
image/tiff
Example:

"image/png"

shared
boolean
default:false

Whether this media is shared or not.

Response

The request has succeeded.

A response from getting a media upload request status.

data
object
errors
object[]
Minimum length: 1