X · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for X API v2 Media API
12 actions
12 updates
phrasing
extends
openapi/x-media-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for X's API. It is a proposal applied on top of the contract, not a document X publishes.
What the actions change
x-apievangelist-phrasing
Targets 12
$.info
$.paths['/2/media'].get
$.paths['/2/media/analytics'].get
$.paths['/2/media/metadata'].post
$.paths['/2/media/subtitles'].post
$.paths['/2/media/subtitles'].delete
$.paths['/2/media/upload'].get
$.paths['/2/media/upload'].post
$.paths['/2/media/upload/initialize'].post
$.paths['/2/media/upload/{id}/append'].post
$.paths['/2/media/upload/{id}/finalize'].post
$.paths['/2/media/{media_key}'].get
OpenAPI Overlay
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
title: API Evangelist conversational phrasing for X API v2 Media API
version: 1.0.0
extends: openapi/x-media-api-openapi.yml
actions:
- target: $.info
update:
x-apievangelist-phrasing:
method: generated
generated: '2026-09-26'
generator: build-phrasing.py
label: Generated by API Evangelist
operations: 11
- target: $.paths['/2/media'].get
update:
x-apievangelist-phrasing:
intent: Look up several media items by key
effect: read
questions:
- Can I get details for a batch of media keys in one call?
- What type, size and URL info comes back for multiple media keys?
instructions:
- text: Get media details for keys {media_keys}.
slots:
media_keys: query.media_keys
- text: 'Look up these media items together: {media_keys}.'
slots:
media_keys: query.media_keys
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/analytics'].get
update:
x-apievangelist-phrasing:
intent: Get analytics for media items
effect: read
questions:
- How are my uploaded videos performing over a date range?
- Can I get media analytics broken down by hour or day?
instructions:
- text: Show analytics for media {media_keys} from {start_time} to {end_time}.
slots:
media_keys: query.media_keys
start_time: query.start_time
end_time: query.end_time
- text: Get {granularity} media analytics for {media_keys} between {start_time} and {end_time}.
slots:
granularity: query.granularity
media_keys: query.media_keys
start_time: query.start_time
end_time: query.end_time
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/metadata'].post
update:
x-apievangelist-phrasing:
intent: Add metadata to uploaded media
effect: write
questions:
- Can I attach extra metadata to an image after uploading it?
- What call sets metadata on an existing media ID?
instructions:
- text: Add metadata {metadata} to media {id}.
slots:
metadata: requestBody.metadata
id: requestBody.id
- text: Attach metadata to uploaded media {id}.
slots:
id: requestBody.id
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/subtitles'].post
update:
x-apievangelist-phrasing:
intent: Add subtitles to a video
effect: write
questions:
- Can I attach subtitle files to a video I uploaded?
- What's needed to add captions to a video's media ID?
instructions:
- text: Add subtitles {subtitles} to video {id}.
slots:
subtitles: requestBody.subtitles
id: requestBody.id
- text: Attach captions {subtitles} to {media_category} media {id}.
slots:
subtitles: requestBody.subtitles
media_category: requestBody.media_category
id: requestBody.id
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/subtitles'].delete
update:
x-apievangelist-phrasing:
intent: Remove subtitles from a video
effect: destructive
questions:
- How do I delete a subtitle track in a particular language from a video?
- Can I remove captions I previously added to media?
instructions:
- text: Delete the {language_code} subtitles from {media_category} media {id}.
slots:
language_code: requestBody.language_code
media_category: requestBody.media_category
id: requestBody.id
- text: Remove {language_code} captions on video {id} ({media_category}).
slots:
language_code: requestBody.language_code
id: requestBody.id
media_category: requestBody.media_category
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/upload'].get
update:
x-apievangelist-phrasing:
intent: Check a media upload's processing status
effect: read
questions:
- Is my uploaded video still processing or ready to post?
- How can I poll the status of a chunked media upload?
instructions:
- text: Check the upload status of media {media_id}.
slots:
media_id: query.media_id
- text: Poll processing progress for upload {media_id}.
slots:
media_id: query.media_id
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/upload'].post
update:
x-apievangelist-phrasing:
intent: Upload a media file in one request
effect: write
questions:
- What's the simplest way to upload an image for a post in a single request?
- Can I share an uploaded media file with other user accounts?
instructions:
- text: Upload {media} as {media_category} and give me its media key.
slots:
media: requestBody.media
media_category: requestBody.media_category
- text: Upload {media} as {media_category} and also grant access to {additional_owners}.
slots:
media: requestBody.media
media_category: requestBody.media_category
additional_owners: requestBody.additional_owners
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/upload/initialize'].post
update:
x-apievangelist-phrasing:
intent: Start a chunked media upload
effect: write
questions:
- Where does a chunked upload for a large video begin?
- What size and type details go into initializing a media upload?
instructions:
- text: Initialize a chunked upload of {total_bytes} bytes of type {media_type}.
slots:
total_bytes: requestBody.total_bytes
media_type: requestBody.media_type
- text: Start a {media_category} chunked upload for a {total_bytes}-byte file.
slots:
media_category: requestBody.media_category
total_bytes: requestBody.total_bytes
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/upload/{id}/append'].post
update:
x-apievangelist-phrasing:
intent: Append a chunk to a media upload
effect: write
questions:
- Which segment index goes with each chunk of a media upload?
- Can I send a large video to an upload session in pieces?
instructions:
- text: Append chunk {segment_index} ({media}) to media upload {id}.
slots:
segment_index: requestBody.segment_index
media: requestBody.media
id: path.id
- text: Send segment {segment_index} of the file {media} into upload session {id}.
slots:
segment_index: requestBody.segment_index
media: requestBody.media
id: path.id
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/upload/{id}/finalize'].post
update:
x-apievangelist-phrasing:
intent: Finalize a chunked media upload
effect: write
questions:
- What do I call after all chunks of a media upload are sent?
- Does finalizing an upload make the media usable in posts?
instructions:
- text: Finalize media upload {id}.
slots:
id: path.id
- text: Complete the chunked upload session {id}.
slots:
id: path.id
method: generated
generated: '2026-09-26'
- target: $.paths['/2/media/{media_key}'].get
update:
x-apievangelist-phrasing:
intent: Get one media item by key
effect: read
questions:
- Can I look up a single media item from its media key?
- Which fields can I request for one piece of media?
instructions:
- text: Get media {media_key}.
slots:
media_key: path.media_key
- text: Show media item {media_key} with fields {fields}.
slots:
media_key: path.media_key
fields: query.media.fields
method: generated
generated: '2026-09-26'