# Media

> \[!CAUTION]
>
> Programmable Chat has been deprecated and is no longer supported. Instead, we'll be focusing on the next generation of chat: Twilio Conversations. Find out more about the [EOL process here](https://www.twilio.com/en-us/changelog/programmable-chat-end-of-life-notice).
>
> If you're starting a new project, please visit the [Conversations Docs](/docs/conversations) to begin. If you've already built on Programmable Chat, please visit our [Migration Guide](/docs/conversations/migrating-chat-conversations) to learn about how to switch.

The Media resource allows media files to be uploaded and downloaded. Media files can be attached to [Messages](/docs/chat/rest/message-resource) as part of the [Media Messaging](/docs/chat/media-support) feature.

## API Base URL

The Media REST resource is accessed via a separate sub-domain from Chat and other Twilio products. The base URL for Media is:

```bash
https://mcs.us1.twilio.com/v1
```

## Authentication

To authenticate requests to the Twilio APIs, Twilio supports [HTTP Basic authentication](https://en.wikipedia.org/wiki/Basic_access_authentication). Use your *API key* as the username and your *API key secret* as the password. You can create an API key either [in the Twilio Console](/docs/iam/api-keys/keys-in-console) or [using the API](/docs/iam/api-keys/key-resource-v1).

**Note**: Twilio recommends using API keys for authentication in production apps. For local testing, you can use your Account SID as the username and your Auth token as the password. You can find your Account SID and Auth Token in the [Twilio Console](https://www.twilio.com/console).

Learn more about [Twilio API authentication](/docs/usage/requests-to-twilio).

```bash
curl -G https://mcs.us1.twilio.com/v1/Services \
    -u $TWILIO_API_KEY:$TWILIO_API_KEY_SECRET
```

> \[!NOTE]
>
> The Twilio SDKs don't support the Media resource.

## Properties \[#properties]

Each Media resource instance has these properties:

| name          | description                                                                                                                                                                                             |
| :------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| sid           | A 34 character string that uniquely identifies this resource.                                                                                                                                           |
| account\_sid  | The unique id of the [Account][account] responsible for this message.                                                                                                                                   |
| service\_sid  | The unique id of the [Service][service] this message belongs to.                                                                                                                                        |
| date\_created | The date that this resource was created.                                                                                                                                                                |
| date\_updated | The date that this resource was last updated. `null` if the message has not been edited.                                                                                                                |
| channel\_sid  | The unique id of the [Channel][channel] the [Message][message] this media instance was added to.                                                                                                        |
| message\_sid  | The unique id of the [Message][message] this media instance was added to.                                                                                                                               |
| size          | The size of the file this Media instance represents in BYTES                                                                                                                                            |
| content\_type | The MIME type of the file this Media instance represents. Please refer to the [MIME Types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) for a list of valid MIME types. |
| file\_name    | The filename of the underlying media file as specified when uploaded                                                                                                                                    |
| author        | The identity of the [User](user-resource) that uploaded the Media instance as part of a [Message][message]                                                                                              |
| url           | An absolute URL for this media instance                                                                                                                                                                 |
| links         | Links to access the underlying media file (`content`) and a temporary URL to use to access this (`content_direct_temporary`)                                                                            |

## Create/Upload a new Media resource

```bash
POST /Services/{Chat Service SID}/Media

```

*Note* that the Chat Service SID above must be the Chat Service instance sid this Media instance will be used for.

A number of options exist for the creation of media. The media file itself needs to be uploaded as content to the `POST` - although tools such as curl and other clients abstract this and allow a "binary" or similar option to be used, and then passing in only a path. An example of this follows:

Ultimately this will be converted into a `POST` request, with the following headers and the body being the file itself.

### Headers

| name            | description / value                                        |
| :-------------- | :--------------------------------------------------------- |
| `Content-Type`: | Must be:   `multipart/form-data`                           |
| `Content-Size`: | The size of the media (the file) being uploaded in `bytes` |

### Body

The `body` or `content` of the `POST` must be the file itself in binary format.

### Curl Example

```bash
curl -X "POST" -H "Content-Type: multipart/form-data" -F "media=@/path/to/media.jpg;type=image/jpeg" "https://mcs.us1.twilio.com/v1/Services/<chat_instance_sid>/Media/" -u "<acount_sid>:<account_secret>"
```

## Retrieve a Media resource

```bash
GET /Services/{Chat Service SID}/Media/{Media SID}

```

[account]: /docs/iam/api/account

[message]: /docs/chat/rest/message-resource

[channel]: /docs/chat/channels

[service]: /docs/chat/rest/service-resource
