POST
/
2
/
media
/
upload
curl --request POST \
  --url https://api.x.com/2/media/upload \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data'
{
  "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.

Query Parameters

total_bytes
integer
required

Total number of bytes being uploaded.

media_type
string
required

The MIME type of the media being uploaded. For example, video/mp4.

media_category
enum<string>

A string enum value which identifies a media usecase. This identifier is used to enforce usecase specific constraints (e.g. file size, video duration) and enable advanced features.

Available options:
amplify_video,
tweet_gif,
tweet_image,
tweet_video,
dm_video,
dm_image,
subtitles
additional_owners
string[]

A comma-separated list of user IDs to set as additional owners allowed to use the returned media_id in Tweets or Cards. Up to 100 additional owners may be specified.

command
enum<string>
required

The type of command to use.

Available options:
INIT,
FINALIZE,
APPEND

Body

multipart/form-data
media
file

The file to upload.

Response

200
application/json
The request has succeeded.

A response from getting a media upload request status.

data
object
errors
object[]