---
title: 'Swift (old)'
description: 'Методы старой версии Swift API для работы с S3'
---

import { CustomTable } from '@selectel/docux/components'

:::warning

URL и методы этой версии Swift API будут поддерживаться до 05.10.2027.
05.10.2027 в 11:00 (UTC+3) они будут отключены.
Часть возможностей [перестанет поддерживаться](/s3/manage/configure-storage-update/#unavailable-features).

Мы рекомендуем использовать [S3 API](/api/object-storage-s3/), подробнее в инструкции [Настроить S3 после обновления](/s3/manage/configure-storage-update/).

:::

API Swift предназначен для приложений, которые работают с размещенными в хранилище пользовательскими файлами или отправляют в хранилище собственные данные. Взаимодействие с API Swift осуществляется с помощью стандартных HTTP-запросов. В документации описаны доступные на текущий момент вызовы API, форматы запросов и ответов. На текущий момент с помощью API Swift можно выполнять следующие операции:

* получать информацию об учетной записи, контейнерах и папках;
* создавать и удалять контейнеры;
* загружать файлы в хранилище и скачивать их;
* копировать, перемещать и удалять файлы;
* устанавливать срок хранения файлов и т.д.

## Формат URL \{#url-format}

Хост для всех запросов к API — `https://api.selcdn.ru`

После авторизации доступ к хранилищу осуществляется по URL вида: `https://api.selcdn.ru/v1/SEL_*****`,  где `*****` — номер учетной записи пользователя. В URL также указывается версия API (v1).

`https://api.selcdn.ru/v1/SEL_*****/container_name` обычно используется для работы авторизованного клиента. Например, при работе с приватными контейнерами или при удалении/добавлении объектов, а также при работе с метаданными. Это формат URL в OpenStack Object API. Подробнее в [документации OpenStack](https://developer.openstack.org/api-ref/object-store/).

Домен `******.selcdn.ru` — это персональный номерной домен аккаунта, который можно узнать командой в заголовке X-Storage-Url:

```bash
curl -i \
-H 'X-Auth-User: *****' \
-H 'X-Auth-Key: *****' \
https://api.selcdn.ru/auth/v1.0
```

Этот домен используют для раздачи статичного контента из публичных контейнеров. На этот домен делается CNAME-запись при использовании своих доменов, которые привязывают к контейнеру, и данные, которые раздаются через этот домен — кэшируются, что ускоряет отдачу контента.

Оба варианта будут работать, но `api.selcdn.ru` не будет кэшироваться.

Персональный домен аккаунта также можно узнать в [панели управления](https://my.selectel.ru/storage/) в настройках контейнера в разделе **Домены**.

Получить домен с помощью API можно следующим запросом:

```bash
curl -i \
-H 'X-Auth-User: *' \
-H 'X-Auth-Key: *' \
https://auth.selcdn.ru/
```

В будущем мы планируем отказываться от номерных доменов, поэтому рекомендуется использовать ссылки типа `https://api.selcdn.ru/v1/SEL_*****`.

## Доступ к API \{#access-to-api}

Для успешного выполнения запросов к API необходимо:

* быть зарегистрированным пользователем Selectel;
* иметь достаточную сумму на балансе;
* иметь логин и пароль для доступа к хранилищу;
* получить уникальный ключ доступа (токен), который будет передаваться во всех запросах.

## Авторизация и получение токена \{#authorization-and-getting-token}

В этом разделе описаны способы авторизации и получения токена для работы с API. Пул — ru-1, для программного обеспечения, которое требует указания пула (прим. `--storage-openstack-region`).

При использовании всех трех способов обратите внимание на следующие моменты:

* срок действия токена составляет 24 часа;
* по прошествии 24 часов с момента последнего получения токена API будет возвращать ответы с кодом 401, в этом случае токен придется получать заново;
* если запросить токен через 12 часов с момента последней авторизации, то он будет обновлен, а полученный ранее токен станет недействительным.

### Авторизация по протоколу v1 \{#authorization-by-protocol-v1}

#### Пример запроса \{#authorization-by-protocol-v1-request-example}

```bash
curl -i -XGET https://api.selcdn.ru/auth/v1.0 -H "X-Auth-User: *****" -H "X-Auth-Key: $password"
```

При удачном выполнении запроса будет возвращен ответ с кодом 204 (No Content).

#### Пример ответа \{#authorization-by-protocol-v1-response-example}

```
HTTP/1.1 204 No Content
Content-Type: text/plain; charset=utf-8
X-Storage-Token: $token
X-Content-Type-Options: nosniff
X-Expire-Auth-Token: *****
X-Auth-Token: $token
X-Storage-Url: https://api.selcdn.ru/v1/SEL_*****
```

#### Параметры запроса \{#authorization-by-protocol-v1-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>GET</td>
        <td><code>https://api.selcdn.ru/auth/v1.0</code></td>
        <td>X-Auth-User — номер учетной записи; X-Auth-Key — пароль для доступа к хранилищу</td>
        <td>Возвращает ключ авторизации (токен) для работы с хранилищем по API, который нужно будет передавать во всех последующих запросах</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

Пароль для доступа к хранилищу указан в [панели управления](https://my.selectel.ru/storage/users).

#### Параметры ответа \{#authorization-by-protocol-v1-response-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Параметр</th>
        <th>Значение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>X-Expire-Auth-Token</td>
        <td>срок действия ключа авторизации (в секундах)</td>
      </tr>

      <tr>
        <td>X-Storage-URL</td>
        <td>URL для доступа к хранилищу</td>
      </tr>

      <tr>
        <td>X-Auth-Token</td>
        <td>ключ авторизации</td>
      </tr>

      <tr>
        <td>X-Storage-Token</td>
        <td>ключ авторизации (совпадает с предыдущим параметром)</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

### Авторизация по протоколу v2 \{#authorization-by-protocol-v2}

#### Пример запроса \{#authorization-by-protocol-v2-request-example}

```
curl -i -XPOST https://api.selcdn.ru/v2.0/tokens -H "Content-type: application/json" -d '{"auth": {"passwordCredentials": {"username":"*****", "password":"pA$sW0rD"}}}'
```

#### Пример ответа \{#authorization-by-protocol-v2-response-example}

```
HTTP/1.1 200 OK
Content-Length: 423
Content-Type: application/json
```

```
{"access":{"token":{"id":"49a049462d6943d55b2ccc85abd5fdae","expires":"2016-05-20T13:12:45\n","tenant":{"id":"00000","name":"00000"}},"user":{"id":"00000","name":"00000","roles":[]},"serviceCatalog":[{"endpoints":[{"region":"common","adminURL":"https://api.selcdn.ru/v1/SEL_00000","internalURL":"https://api.selcdn.ru/v1/SEL_0000","publicURL":"https://api.selcdn.ru/v1/SEL_00000"}],"type":"object-store","name":"swift"}]}}
```

### Авторизация по протоколу v3 \{#authorization-by-protocol-v3}

#### Пример запроса \{#authorization-by-protocol-v3-request-example}

```bash
curl -i -XPOST https://api.selcdn.ru/v3/auth/tokens -d '{"auth": { "identity": { "methods": ["password"], "password": { "user": { "id": "*****", "password": "pA$sW0rD"}}}}}'
```

#### Пример ответа \{#authorization-by-protocol-v3-response-example}

```
HTTP/1.1 200 OK
Content-Length: 807
Content-Type: application/json
X-Subject-Token: $token
```

```
{"token":{"expires_at":"2016-05-21T09:27:53.8459900Z","issued_at":"2016-05-20T15:56:36.8459900Z","methods":["password"],"project":{"domain":{}},"Catalog":[{"endpoints":[{"id":"614ed749fba45aa218d1ba68c7c83411","region_id":"RegionOne","url":"https://api.selcdn.ru/v1/SEL_*****","region":"RegionOne","interface":"public"},{"id":"614ed749fba45aa218d1ba68c7c83411","region_id":"RegionOne","url":"https://api.selcdn.ru/v1/SEL_*****","region":"RegionOne","interface":"admin"},{"id":"614ed749fba45aa218d1ba68c7c83411","region_id":"RegionOne","url":"https://api.selcdn.ru/v1/SEL_*****","region":"RegionOne","interface":"internal"}],"type":"object-store","name":"swift","id":""}],"user":{"id":"614ed749fba45aa218d1ba68c7c83411","name":"*****","domain":{"id":"default","name":"Default","links":{}}},"audit_ids":[""]}}
```

## Операции с аккаунтом \{#account-operations}

### Получение информации об аккаунте \{#get-info-about-account}

#### Пример запроса \{#get-info-about-account-request-example}

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****  -H "X-Auth-Token: $token"
```

В случае удачного выполнения запроса API возвращает ответ с кодом 204.

#### Пример ответа \{#get-info-about-account-response-example}

```
HTTP/1.1 204 No Content
Content-Length: 0
X-Account-Object-Count: 6
X-Timestamp: 1374058535.42927
X-Account-Meta-Temp-Url-Key: 00000
X-Account-Bytes-Used: 484474
X-Account-Container-Count: 3
```

#### Параметры ответа \{#get-info-about-account-response-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Параметр</th>
        <th>Значение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>X-Account-Bytes-Used</td>
        <td>суммарный объем хранимых данных, байт</td>
      </tr>

      <tr>
        <td>X-Account-Container-Count</td>
        <td>количество контейнеров</td>
      </tr>

      <tr>
        <td>X-Account-Object-Count</td>
        <td>общее количество хранимых объектов</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

### Получение информации о хранилище \{#get-info-about-storage}

Тип запроса: GET

#### Параметры запроса \{#get-info-about-storage-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Параметр</th>
        <th>Значение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>X-Auth-Token</td>
        <td>ключ авторизации</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#get-info-about-storage-request-example}

```bash
curl -i -XGET https://*****.selcdn.ru/ -H "X-Auth-Token: $token"
```

#### Пример ответа \{#get-info-about-storage-response-example}

```
HTTP/1.1 204 No Content
Date: Tue, 28 Oct 2014 09:34:31 GMT
Server: Selectel_Storage/1.0
Content-Length: 0
X-Account-Object-Count: 6
X-Timestamp: 1374058535.42927
X-Account-Meta-Temp-Url-Key: *****
X-Account-Bytes-Used: 484474
X-Account-Container-Count: 3
Content-Type: text/plain; charset=utf-8
Accept-Ranges: bytes
X-Received-Bytes: 345102605
X-Transfered-Bytes: 54907061
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Account-Object-Count, X-Timestamp,
X-Account-Meta-Temp-Url-Key, X-Account-Bytes-Used, X-Account-Container-Count, X-Received-Bytes, X-Transfered-Bytes
Expires: 0
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate
```

#### Параметры ответа \{#get-info-about-storage-response-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Параметр</th>
        <th>Значение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>X-Account-Bytes-Used</td>
        <td>суммарный объем хранимых данных, байт</td>
      </tr>

      <tr>
        <td>X-Account-Container-Count</td>
        <td>количество контейнеров</td>
      </tr>

      <tr>
        <td>X-Account-Object-Count</td>
        <td>общее количество хранимых объектов</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

## Операции с контейнерами \{#container-operations}

### Получение списка контейнеров \{#get-list-of-containers}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>GET</td>
        <td>`https://api.selcdn.ru/v1/SEL_*****`</td>
        <td>X-Auth-Token — токен авторизации</td>
        <td>Возвращает список контейнеров, доступных в хранилище на текущий момент</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#get-list-of-containers-request-example-1}

```bash
curl https://api.selcdn.ru/v1/SEL_*****  -H "X-Auth-Token: $token"
```

#### Пример ответа \{#get-list-of-containers-response-example-1}

```
container1
container2
container3
container4
```

#### Пример запроса \{#get-list-of-containers-request-example-2}

```bash
curl -i -XGET https://*****.selcdn.ru/?format=json  -X GET -H "X-Auth-Token: $token"
```

#### Пример ответа \{#get-list-of-containers-response-example-2}

```
HTTP/1.1 200 OK

Server: Selectel_Storage/1.0
X-Account-Object-Count: 6
X-Timestamp: 1374058535.42927
X-Account-Meta-Temp-Url-Key: ******
X-Account-Bytes-Used: 484474
X-Account-Container-Count: 3
Content-Type: application/json; charset=utf-8
Accept-Ranges: bytes
Content-Length: 300
X-Received-Bytes: 345102605
X-Transfered-Bytes: 54907061
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Account-Object-Count, X-Timestamp,
X-Account-Meta-Temp-Url-Key, X-Account-Bytes-Used, X-Account-Container-Count, X-Received-Bytes, X-Transfered-Bytes
Expires: 0
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate
[{"count": 1, "name": "test2", "rx_bytes": 363, "tx_bytes": 1006, "type": "public", "bytes": 363},
{"count": 1, "name": "upload", "rx_bytes": 0, "tx_bytes": 0, "type": "private", "bytes": 363},
{"count": 4, "name": "yellow", "rx_bytes": 484666, "tx_bytes": 264846, "type": "public", "bytes": 483748}]
```

#### Параметры ответа \{#get-list-of-containers-response-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Параметр</th>
        <th>Значение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>X-Account-Container-Count</td>
        <td>общее количество контейнеров в хранилище</td>
      </tr>

      <tr>
        <td>X-Account-Object-Count</td>
        <td>общее количество хранимых в контейнерах объектов</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

C помощью одного запроса можно получить информацию о 10 000 контейнерах. Если контейнеров больше, то требуется использовать дополнительные запросы с параметром marker.

### Создание нового контейнера \{#create-new-container}

#### Параметры запроса \{#create-new-container-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>PUT</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container</code></td>
        <td>X-Auth-Token — токен авторизации;
        <p>X-Container-Meta-Type — тип контейнера: публичный (public) или приватный (private);</p>
        <p>X-Container-Meta-Some — метаданные контейнера;</p>
        <p>X-Storage-Policy — политика хранения:</p>
        <p>горячий (Policy-0) по-умолчанию,</p>
        <p>холодный (cold)</p></td>
        <td>Создает контейнер с указанными в запросе параметрами</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#create-new-container=request-example}

```bash
curl -i -XPUT https://api.selcdn.ru/v1/SEL_*****/new_container -H "X-Auth-Token: $token" \
-H "X-Container-Meta-Type: public" -H "X-Container-Meta-Some: my test container"
```

В случае удачного выполнения запроса будет возвращен ответ с кодом 201.

#### Пример ответа \{#create-new-container-response-example}

```
HTTP/1.1 201 Created
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Length: 0
Content-Type: text/html
```

### Получение информации о контейнере \{#get-info-about-container}

#### Параметры запроса \{#get-info-about-container-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>GET</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container</code></td>
        <td>X-Auth-Token — токен авторизации</td>
        <td>Возвращает информацию об указанном контейнере</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Параметры ответа \{#get-info-about-container-reponse-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Параметр</th>
        <th>Значение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>X-Container-Object-Count</td>
        <td>количество объектов в контейнере</td>
      </tr>

      <tr>
        <td>X-Container-Bytes-Used</td>
        <td>общий объем всех хранимых объектов в байтах</td>
      </tr>

      <tr>
        <td>X-Container-Meta-Type</td>
        <td>тип контейнера (публичный или приватный)</td>
      </tr>

      <tr>
        <td>X-Container-Meta-Some</td>
        <td>метаданные контейнера</td>
      </tr>

      <tr>
        <td>X-Container-Domains</td>
        <td>привязанные к контейнеру домены</td>
      </tr>

      <tr>
        <td>X-Transfered-Bytes</td>
        <td>общий объем скачанной из контейнера информации, байт</td>
      </tr>

      <tr>
        <td>X-Received-Bytes</td>
        <td>общий объем загруженной в контейнер информации, байт</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#get-info-about-container-request-example}

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****/t-rex -H "X-Auth-Token: $token"
```

При удачном выполнении вопроса API возвращает ответ с кодом 204.

#### Пример ответа \{#get-info-about-container-response-example}

```
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Length,Date,X-Container-Domains,X-Backend-Delete-Timestamp,X-Timestamp,X-Container-Meta-Type,X-Backend-Status-Changed-At,X-Backend-Storage-Policy-Index,X-Container-Object-Count,X-Backend-Put-Timestamp,X-Container-Bytes-Used,Content-Type,X-Backend-Timestamp,X-Put-Timestamp
Content-Type: text/plain; charset=utf-8
Date: Wed, 14 Mar 2018 08:43:43 GMT
X-Backend-Delete-Timestamp: 0000000000.00000
X-Backend-Put-Timestamp: 1445521637.35495
X-Backend-Status-Changed-At: 1445521364.56786
X-Backend-Storage-Policy-Index: 0
X-Backend-Timestamp: 1445521364.51371
X-Container-Bytes-Used: 2455570
X-Container-Domains:
X-Container-Meta-Type: gallery
X-Container-Object-Count: 9
X-Put-Timestamp: 1445521637.35495
X-Timestamp: 1445521364.51371
```

### Установка, изменение и удаление метаданных контейнера \{#set-edit-delete-container-metadata}

#### Параметры запроса \{#set-edit-delete-container-metadata-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>POST</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container</code></td>
        <td>X-Auth-Token — токен авторизации; X-Container-Meta-Type; X-Container-Meta-Some — метаданные контейнера</td>
        <td>Устанавливает для указанного контейнера метаданные, переданные в заголовке X-Container-Meta-Some</td>
      </tr>

      <tr>
        <td>POST</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container</code></td>
        <td>X-Auth-Token — токен авторизации; X-Container-Meta-Some — метаданные контейнера</td>
        <td>Заменяет метаданные на новые, которые передаются в заголовке X-Container-Meta-Some</td>
      </tr>

      <tr>
        <td>POST</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container</code></td>
        <td>X-Auth-Token — токен авторизации; X-Remove-Container-Meta-Some — метаданные контейнера, которые требуется удалить</td>
        <td>Удаляет метаданные, переданные в заголовке X-Remove-Container-Meta-Some</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#set-edit-delete-container-metadata-request-example}

```bash
curl -i -XPOST {storage_url}/{container_name} -H "X-Auth-Token: $token" -H "X-Container-Meta-Type: gallery"
```

### Получение списка файлов в контейнере \{#get-list-of-files}

#### Параметры запроса \{#get-list-of-files-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>GET</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container\_name</code></td>
        <td>X-Auth-Token — токен авторизации</td>
        <td>Возвращает список файлов, находящихся в указанном контейнере. Список объектов ограничен 10000. Воспользуйтесь query-параметрами marker и limit для гибкого получения списков объектов в контейнере</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#get-list-of-files-request-example}

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****/container_name  -H "X-Auth-Token: $token"
```

#### Пример ответа \{#get-list-of-files-response-example}

```
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Storage-Policy-Index,X-Backend-Status-Changed-At,X-Put-Timestamp,
X-Container-Meta-Type,X-Timestamp,X-Backend-Delete-Timestamp,X-Backend-Timestamp,X-Backend-Put-Timestamp,
X-Container-Bytes-Used,Content-Length,X-Container-Object-Count,Content-Type,Date
Content-Length: 120
Content-Type: text/plain; charset=utf-8
Date: Wed, 14 Mar 2018 09:11:28 GMT
X-Backend-Delete-Timestamp: 0000000000.00000
X-Backend-Put-Timestamp: 1445521637.35495
X-Backend-Status-Changed-At: 1445521364.56786
X-Backend-Storage-Policy-Index: 0
X-Backend-Timestamp: 1445521364.51371
X-Container-Bytes-Used: 2455570
X-Container-Meta-Type: gallery
X-Container-Object-Count: 9
X-Put-Timestamp: 1445521637.35495
X-Timestamp: 1445521364.51371
```

```
File1
File2
File3
File4
```

### Дополнительные query-параметры \{#additional-query-parameters}

В запросе на получение списка файлов можно также использовать дополнительные query-параметры, например:

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****/container/?format=json -H "X-Auth-Token: $token"
```

В результате выполнения этой команды будет возвращен список файлов в формате json.  Можно указать и другой формат выдачи списка — xml:

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****/container/?format=xml -H "X-Auth-Token: $token"
```

С помощью параметра limit  можно задать точное количество файлов, которые будут включены в список. Такая возможность бывает полезна при работе с контейнерами, где хранится множество объектов (например, тысячи или даже десятки тысяч):

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****/container/?limit=20 -H "X-Auth-Token: $token"
```

В результате выполнения этой команды в список будут включены только первые 20 файлов. Информации обо всех остальных файлах в списке не будет.

Параметр marker позволяет указать имя файла, с которого будет начинаться список:

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****/container/?marker=file3 -H "X-Auth-Token: $token"
```

В результате выполнения этого запроса в списке будут отображены файлы, которые следуют после файла с именем file3.  Предыдущие файлы, равно как и сам файл file3, в список включены не будут.

С помощью параметра prefix в список можно включать файлы, имена которых начинаются с указанного буквосочетания:

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****/container/?prefix=my_ -H "X-Auth-Token: $token"
```

С помощью параметра delimiter можно выводить только ту часть имени файлов, которая следует до определенного символа, например:

```bash
curl -i -XGET https://api.selcdn.ru/v1/SEL_*****/container/?delimiter=.
```

В результате выполнения этой команды будет выведена только та часть имен файлов, которая идет до точки (только имена без расширения).

### Удаление контейнера \{#delete-container}

Перед удалением контейнера необходимо удалить из него все файлы. Если в контейнере имеется хотя бы один файл, удаление невозможно.

#### Параметры запроса \{#delete-container-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>DELETE</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container</code></td>
        <td>X-Auth-Token — токен авторизации</td>
        <td>Удаляет указанный контейнер</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#delete-container-request-example}

```bash
curl -i https://api.selcdn.ru/v1/SEL_*****/container/ -X DELETE -H "X-Auth-Token: $token"
```

В случае удачного выполнения запроса API возвращает ответ с кодом 204.

#### Пример ответа \{#delete-container-response-example}

```
HTTP/1.1 204 No Content
content-length: 0
content-type: text/html; charset=UTF-8
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers:
```

## Работа с файлами \{#files}

### Скачивание файла из контейнера \{#download-file}

#### Параметры запроса \{#download-file-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>GET</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container/file</code></td>
        <td>X-Auth-Token — токен авторизации (обязателен только при скачивании из приватного контейнера; из публичных контейнеров файлы можно скачивать без токена). Также в запросе можно использовать стандартные HTTP-заголовки, описанные в RFC2616: If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since</td>
        <td>Скачивает указанный файл</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#download-file-request-example}

```bash
curl -O https://api.selcdn.ru/v1/SEL_*****/images/image1.png
```

Для того чтобы открыть файл в браузере введите команду:

```
https://*****.selcdn.ru/container/1111_Union.patch.xml
```

Ответ будет выглядеть следующим образом:

```
HTTP/2 200
accept-language: bytes
access-control-allow-origin: *
access-control-expose-headers: Content-Type,Etag,X-Client,X-Timestamp,X-Trans-Id,Content-Length,Last-Modified,Accept-Ranges
content-length: 5782
content-type: application/xml
etag: "61808ed864f4c3453d329071986b04ba"
```

Для того чтобы скачать файл без открытия в браузере добавьте к ссылке get параметр **?filename=some\_name.ext** :

```
https://*****.selcdn.ru/container/1111_Union.patch.xml?filename=Union.patch.xml
```

Браузер предложит скачать файл под именем Union.patch.xml. Ответ будет выглядеть следующим образом:

```
HTTP/2 200
accept-language: bytes
access-control-allow-origin: *
access-control-expose-headers: Etag,X-Client,X-Timestamp,X-Trans-Id,Last-Modified,Accept-Ranges,Content-Length,Content-Type
content-disposition: attachment; filename="1111_Union.patch.xml" ← в ответе добавляется этот заголовок, который говорит браузеру скачать файл
content-length: 5782
content-type: application/xml
etag: "61808ed864f4c3453d329071986b04ba"
```

### Загрузка файла в контейнер \{#upload-file}

#### Параметры запроса \{#upload-file-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>PUT</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container/file</code></td>
        <td>X-Auth-Token — токен авторизации; X-Delete-At — время удаления файла в формате Unix Timestamp; X-Delete-After — cрок хранения файла (в секундах); Etag — идентификатор Etag; X-Object-Meta — метаданные загружаемого объекта</td>
        <td>Загружает объект в указанный контейнер</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#upload-file-request-example}

```bash
curl -i -XPUT https://api.selcdn.ru/v1/SEL_*****/new_container/file  -H "X-Auth-Token: $token" -H "X-Delete-After: 180"  -T "file"
```

При удачном выполнении запроса будет возвращен ответ с кодом 201.

#### Пример ответа \{#upload-file-response-example}

```
HTTP/1.1 100 Continue
HTTP/1.1 201 Created
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Length: 0
Content-Type: text/html
Etag: b65ad34618e410d9d8bf624d61f8a980
Date: Thu, 15 Mar 2018 07:31:32 GMT
```

### Удаление файла \{#delete-file}

#### Параметры запроса \{#delete-file-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>DELETE</td>
        <td>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container/file</td>
        <td>X-Auth-Token — токен авторизации</td>
        <td>Удаляет указанный файл</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#delete-file-request-example}

```bash
curl -i -XDELETE https://api.selcdn.ru/v1/SEL_*****/container/file -H "X-Auth-Token: $token"
```

В случае удачного выполнения запроса API возвращает ответ с кодом 204.

#### Пример ответа \{#delete-file-response-example}

```
HTTP/1.1 204 No Content
content-length: 0
content-type: text/html; charset=UTF-8
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers:
```

### Удаление множества объектов из хранилища \{#delete-multiple-objects}

Команда bulk-delete в отличие от команды delete:

* позволяет удалить нескольких файлов одновременно;
* позволяет удалять объекты из разных контейнеров одновременно;
* работает последовательно.

Для работы этой команды подходит только токен основного пользователя.

#### Параметры запроса \{#delete-multiple-objects-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>POST</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*\*?bulk-delete=true</code></td>
        <td>X-Auth-Token — токен авторизации; X-Delete-After — cрок хранения файла (в секундах)</td>
        <td>Удаляет несколько указанных файлов одновременно</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#delete-multiple-objects-request-example}

```bash
curl -i -XPOST "https://api.selcdn.ru/v1/SEL_******?bulk-delete=true" -H "X-Auth-Token: $token" -H "Content-Type: text/plain" --data $"container/file1\ncontainer/file2\n"
```

При удачном выполнении запроса возвращается ответ с кодом 200.

#### Пример ответа \{#delete-multiple-objects-response-example}

```
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Type: application/json; charset=utf-8
Date: Fri, 08 Jun 2018 13:37:53 GMT
Content-Length: 101
{"Number Not Found":0,"Response Status":"200 OK","Response Body":"","Errors":null,"Number Deleted":2}
```

### Отложенное удаление с помощью X-Delete \{#x-delete}

Имеется два возможных варианта заголовков:

* X-Delete-At;
* X-Delete-After.

Оба варианта позволяют установить временной интервал для автоматического удаления объекта из хранилища. Отправка заголовков производится с помощью PUT и POST запросов.

#### X-Delete-At \{#x-delete-at}

В качестве значения заголовка передается значение времени (timestamp) в формате Unix Epoch. Это значение укажет серверу до какого времени следует хранить объект. Для конвертирования в человекочитаемый вид удобно использовать [онлайн-конвертер](https://www.epochconverter.com/).

<CustomTable>
  <table>
    <tbody>
      <tr>
        <td>Unix Epoch</td>
        <td>Human View</td>
      </tr>

      <tr>
        <td>1317070737</td>
        <td>Mon Sep 26 20:58:57 2011 UTC</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### X-Delete-After \{#x-delete-after}

В качестве значения заголовка передается целочисленное количество секунд, по прошествии которых объект отправится на удаление. Сервер, получив это значение, преобразует его в заголовок X-Delete-At и при наступлении указанного значения времени перестает хранить объект.

*Доступ к объектам, которым передали заголовок X-Delete-\* прекращается после того как значение времени истекло. Сервер в ответ на запрос такого объекта будет отдавать ответ 404. Сами по себе объекты автоматически удаляются через некоторое время.*

#### Двойной заголовок \{#double-header}

Если объекту передать оба заголовка одновременно, то система будет считать приоритетным заголовок X-Delete-After.

#### Внутренние операции \{#internal-operations}

Текущая реализация имеет следующие особенности:

* если объект, имеющий X-Delete-At, помещается с помощью PUT в контейнер с модифицированным заголовком, то заголовок объекта будет перезаписан на заголовок контейнера;
* если объект, имеющий X-Delete-At, помещается с помощью PUT и установленным заголовком X-Copy-From в контейнер, уже имеющий модифицированный заголовок, то заголовок объекта сохранится с предыдущего источника и не будет перезаписан;
* при копировании объекта с установленным заголовком X-Delete-At с помощью COPY и заголовком Destination — заголовок не сохраняется;
* при помещении объекта в контейнер для версионированных объектов через панель управления S3 заголовок X-Delete-At / X-Delete-After сохранится в неизменном виде и объект будет удален в соответствии с указанным значением;
* при помещении объекта в контейнер для версионированных объектов c помощью API (команда COPY c заголовком Destination), заголовок не сохраняется.

### Управление HTTP-заголовками для файлов \{#manage-https-headers-for-files}

Для всех файлов, помещаемых в хранилище, можно устанавливать HTTP-заголовки.  Заголовки используются для управления кэшированием на стороне клиента (и на промежуточных прокси-серверах), а также для обработки кросс-доменных запросов (CORS).

Поддерживаются следующие заголовки:

* Cache-Control
* Access-Control-Allow-Origin
* Access-Control-Max-Age
* Access-Control-Allow-Methods
* Access-Control-Allow-Credentials
* Access-Control-Expose-Headers
* Access-Control-Allow-Headers
* Link
* Content-Type
* Content-Disposition (только для конечного файла)
* Strict-Transport-Security (только для контейнера)

#### Параметры запроса \{#manage-https-headers-for-files-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>POST</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container</code></td>
        <td>X-Auth-Token — токен авторизации; X-Container-Meta-…. — заголовок, параметры которого нужно установить (сам заголовок указывается после -Meta-, например: X-Container-Meta-Cache-Control</td>
        <td>Устанавливает значения для указанных в запросе заголовков</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#manage-https-headers-for-files-request-example}

```bash
curl -i -XPOST  https://api.selcdn.ru/v1/SEL_*****/container -H "X-Auth-Token: $token" \
-H "X-Container-Meta-Access-Control-Allow-Methods: HEAD, GET" \
-H "X-Container-Meta-Cache-Control: public" \
-H "X-Container-Meta-Strict-Transport-Security: max-age=31536000; includeSubDomains"
```

В случае удачного выполнения запроса API возвращает ответ с кодом 202.

Для добавления заголовка `Link` к объекту file1 введите:

```bash
curl -i -XPOST https://api.selcdn.ru/v1/SEL_*****/container/file1 -H "X-Auth-Token: $token" -H "Link: rel=canonical"
```

Чтобы добавить данный заголовок сразу ко всем объектам в контейнере, используется запрос:

```bash
curl -i -XPOST https://api.selcdn.ru/v1/SEL_*****/container -H "X-Auth-Token: $token" -H "X-Container-Meta-Link: rel=canonical"
```

#### Пример ответа \{#manage-https-headers-for-files-response-example}

```
HTTP/1.1 202 Accepted
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Length: 76
Content-Type: text/html
```

### Просмотр заголовков конкретного объекта \{#view-object-headers}

Для просмотра заголовков конкретного объекта введите:

```bash
curl --head https://api.selcdn.ru/v1/SEL_*****/images/file.png
```

### Поддержка больших объектов \{#supporting-big-objects}

В хранилище нет ограничений на размер загружаемых файлов, но файлы размером более 100 МБ не рекомендуется помещать в хранилище целиком — нужно использовать сегментированную загрузку.

Существует два варианта сегментированной загрузки: динамическая и статистическая.

#### Динамическая загрузка \{#dynamic-upload}

В динамической загрузке объект разбивается на сегменты, после чего создается манифест — пустой файл, содержащий указатель на контейнер, в который загружены все сегменты.  В запросе на загрузку большого объекта путь к контейнеру указывается в заголовке X-Object-Manifest.

Желательно сначала загружать сегменты, а потом — создавать или обновлять манифест: объект не будет доступен для скачивания, пока не завершится загрузка всех сегментов.

##### Пример \{#dynamic-upload-example}

```bash
curl -X PUT -H "X-Auth-Token: $token"  https://api.selcdn.ru/v1/SEL_*****/new_container/big_object/00000001 --data-binary "1" \
curl -X PUT -H "X-Auth-Token: $token"  https://api.selcdn.ru/v1/SEL_*****/new_container/big_object/00000002 --data-binary "2" \
curl -X PUT -H "X-Auth-Token: $token"  https://api.selcdn.ru/v1/SEL_*****/new_container/big_object/00000003 --data-binary "3"
```

##### Пример манифеста \{#dynamic-upload-manifest-example}

```bash
curl -X PUT -H "X-Auth-Token: $token" -H "X-Object-Manifest: new_container/big_object/" https://api.selcdn.ru/v1/SEL_*****/new_container/big_object --data-binary ""
```

#### Статическая загрузка \{#static-upload}

При статической загрузке нужно создать статический манифест с указанием путей до сегментов, их контрольной суммы (Etag) и размера. Манифест сохраняется в специальном файле.

##### Пример манифеста \{#static-upload-manifest-example}

```
[{"path": "/cont/object",  "etag": "etagoftheobjectsegment",  "size_bytes": 10485760, }, ...]
```

Файл манифеста нужно загрузить в хранилище  PUT-запросом с query-параметром **?multipart-manifest=put**  и заголовком **X-Static-Large-Object: True**.

Чтобы получить файл манифеста, нужно выполнить GET-запрос с query-параметром **?multipart-manifest=get**.

Удалить все сегменты, а затем файл с манифестом можно с помощью DELETE-запроса с query-параметром **?multipart-manifest=delete.**

### Установка срока хранения для файлов \{#set-storage-period-for-files}

#### Параметры запроса \{#set-storage-period-for-files-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>PUT</td>
        <td>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container</td>
        <td>X-Auth-Token — токен авторизации; X-Container-Meta-Default-Delete-After — cрок хранения для всех файлов в контейнере (в секундах)</td>
        <td>Устанавливает срок хранения для всех файлов, помещаемых в контейнер. По истечении этого срока все файлы будут автоматически удалены</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#set-storage-period-for-files-request-example}

```bash
curl -i -XPUT https://api.selcdn.ru/v1/SEL_*****/container  -H "X-Auth-Token: $token" \
-H "X-Container-Meta-Default-Delete-After: 300"
```

При удачном выполнении запроса будет возвращен ответ с кодом 202.

#### Пример ответа \{#set-storage-period-for-files-response-example}

```
HTTP/1.1 202 Accepted
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Length: 76
Content-Type: text/html
```

### Установка метаданных файла \{#set-file-metadata}

#### Параметры запроса \{#set-file-metadata-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>POST</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container/file</code></td>
        <td>X-Auth-Token — токен авторизации; X-Object-Meta-Some — любая дополнительная информация о файле</td>
        <td>Добавляет в файл метаданные, переданные в заголовке X-Object-Meta-Some</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#set-file-metadata-request-example}

```bash
curl -i -XPOST  https://api.selcdn.ru/v1/SEL_***/new_container/file -H "X-Auth-Token: $token" -H "X-Object-Meta-Some: metadata"
```

В случае успешного выполнения запроса API возвращает ответ с кодом 201.

#### Пример ответа \{#set-file-metadata-response-example}

```
HTTP/1.1 201 Created
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Length: 0
Content-Type: text/html
Etag: d41d8cd98f00b204e9800998ecf8427e
```

### Копирование файлов внутри хранилища \{#copy-files}

#### Способ 1 \{#copy-files-1}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>PUT</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/new\_location/путь к контейнеру и папке назначения/имя файла</code></td>
        <td>X-Auth-Token — токен авторизации; X-Copy-From — путь к файлу, который нужно скопировать</td>
        <td>Копирует файл из одной локации в другую</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

При этой операции так же копируется значение заголовка x-delete-at, независимо от того, куда был установлен этот заголовок - на объект-источник или контейнер-источник.

##### Пример запроса \{#copy-files-1-request-example}

```bash
curl -i -X PUT https://api.selcdn.ru/v1/SEL_*****/container2/file -H "X-Auth-Token: $token" -H "X-Copy-From: /container1/file"
```

##### Пример ответа \{#copy-files-1-response-example}

```
HTTP/1.1 201
Created etag: 0f343b0931126a20f133d67c2b018a3b
X-Copied-From: new_container/new_object
X-Copied-From-Last-Modified: Mon, 27 May 2013 13:16:49 GMT
Last-Modified: Tue, 28 May 2018 06:30:51 GMT
```

#### Способ 2 \{#copy-files-2}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>COPY</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container/file/путь к файлу/</code></td>
        <td>X-Auth-Token — токен авторизации; Destination — путь к контейнеру и папке, куда нужно копировать файл</td>
        <td>Копирует файл из одной локации в другую</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

Если при использовании этого способа установить заголовок -H "X-Fresh-Metadata: true", то при копировании новый объект будет создан с новыми заголовками, в том числе без X-Delete-At.

##### Пример запроса \{#copy-files-2-request-example}

```bash
curl -i -X COPY https://api.selcdn.ru/v1/SEL_*****/container1/file -H "X-Auth-Token: $token" -H "Destination: /container2/file"
```

##### Пример ответа \{#copy-files-2-response-example}

```
HTTP/1.1 201
Created etag: 0f343b0931126a20f133d67c2b018a3b
X-Copied-From: container1/file
X-Copied-From-Last-Modified: Mon, 27 May 2013 13:16:49 GMT
Last-Modified: Tue, 28 May 2013 06:30:51 GMT
```

## Установка лимитов \{#set-limits}

### Установка лимитов для контейнера \{#set-container-limits}

#### Параметры запроса \{#set-container-limits-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>POST</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/container/</code></td>
        <td>X-Auth-Token — токен авторизации; X-Container-Meta-Quota-Bytes — максимальный допустимый объем хранимых данных (в байтах); X-Container-Meta-Quota-Count — максимальное возможное количество файлов и папок в контейнере</td>
        <td>Устанавливает для указанного контейнера ограничения, переданные в заголовках X-Container-Meta-Quota-Bytes и X-Container-Meta-Quota-Count</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#set-container-limits-request-example}

```bash
curl -i -XPOST https://api.selcdn.ru/v1/SEL_*****/container/  -H "X-Auth-Token: $token" \
-H "X-Container-Meta-Quota-Bytes: 52428800" -H "X-Container-Meta-Quota-Count: 1000"
```

В случае удачного выполнения запроса будет возвращен ответ с кодом 202.

#### Пример ответа \{#set-container-limits-response-example}

```
HTTP/1.1 202 Accepted
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Length: 76
Content-Type: text/html
```

### Установка лимитов для учетной записи \{#set-account-limits}

#### Параметры запроса \{#set-account-limits-request-parameters}

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Тип запроса</th>
        <th>URI</th>
        <th>Заголовки</th>
        <th>Описание</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>POST</td>
        <td><code>https://api.selcdn.ru/v1/SEL\_\*\*\*\*\*/</code></td>
        <td>X-Auth-Token — токен авторизации; X-Account-Meta-Quota-Bytes — максимальный допустимый объем хранимых данных (в байтах)</td>
        <td>Устанавливает для указанного аккаунта ограничение, переданное в заголовке X-Account-Meta-Quota-Bytes</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

#### Пример запроса \{#set-account-limits-request-example}

```bash
curl -i -XPOST https://api.selcdn.ru/v1/SEL_***** -H "X-Auth-Token: $token" \
-H "X-Account-Meta-Quota-Bytes: 52428800"
```

#### Пример ответа \{#set-account-limits-response-example}

```
HTTP/1.1 202 Accepted
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Length: 76
Content-Type: text/html
```
