# Ссылка на сертификат — справка для разработчиков

> Адреса, форматы, коды ответа, условные запросы, лимиты и правила безопасности личной ссылки на сертификат — для своих интеграций и ИИ-агентов.

URL: https://zrazu.com/ru/docs/ssl-auto-pull-api/

Личная ссылка отдаёт действующий сертификат подписки без входа в кабинет — для скриптов, задач по расписанию и собственных интеграций. Создаётся в кабинете: карточка сертификата → «Установка» → «Ссылка для сервера».

## Адреса

`https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН` — базовый адрес, к нему добавляется название файла:

| Запрос | Что возвращает |
| --- | --- |
| `GET https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН/fullchain.pem` | сертификат сайта, за ним промежуточные сертификаты центра — для nginx, Apache 2.4.8+, Caddy, HAProxy, Kubernetes |
| `GET https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН/cert.pem` | только сертификат сайта |
| `GET https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН/chain.pem` | только промежуточные сертификаты |

Тип ответа — `application/x-pem-file`, текст PEM. Закрытого ключа ссылка не отдаёт и не принимает: ключ остаётся у вас, а следующие части подписки выпускаются на тот же ключ.

## Что именно отдаётся

Действующая версия подписки — последний выпущенный сертификат. Если он отозван или срок истёк, ссылка отвечает `404`: предыдущую версию не отдаём, потому что центр сертификации мог отозвать её при замене. Когда появляется следующая часть подписки, по той же ссылке начинает отдаваться она — ссылку менять не нужно.

Если сертификат перевыпускали с новым ключом, ссылка отдаст сертификат на новый ключ. Поэтому перед установкой сверяйте открытый ключ сертификата со своим закрытым ключом — так делают все скрипты в наших инструкциях:

```sh
openssl x509 -in fullchain.pem -noout -pubkey | openssl sha256
openssl pkey -in key.pem -pubout | openssl sha256
```

Строки должны совпасть.

## Коды ответа

| Код | Когда |
| --- | --- |
| `200` | сертификат в теле ответа |
| `304` | условный запрос, сертификат не изменился |
| `404` | ссылка неизвестна, отключена или просрочена, либо в подписке сейчас нет действующего сертификата — ответ одинаковый, чтобы не подсказывать, существовала ли ссылка |
| `429` | слишком много запросов; заголовок `Retry-After` — через сколько секунд можно снова |

## Условные запросы

Ответ содержит `ETag` (меняется вместе с версией сертификата) и `Last-Modified` (время выпуска). Запрос с `If-None-Match` или `If-Modified-Since` получит `304`, пока сертификат тот же:

```sh
curl -fsS --etag-save etag.txt --etag-compare etag.txt -o fullchain.pem "https://api.zrazu.com/ssl-pull/zsp_ВАШ_ТОКЕН/fullchain.pem"
```

Условные запросы не обязательны: файл маленький, и сравнить его с установленным (`cmp`) так же просто.

## Лимиты

- 60 запросов в час на одну ссылку — для задачи раз в сутки или даже раз в час этого с большим запасом;
- 300 запросов в минуту с одного IP-адреса.

## Безопасность

- Ссылка — секрет уровня «не публиковать»: она отдаёт только публичный сертификат, но у кого она есть, тот видит, когда сертификат забирают.
- Ответы не кэшируются (`Cache-Control: no-store`), не индексируются и не передают ссылку в `Referer`.
- Ссылку показываем один раз; у нас хранится только её отпечаток. Новая ссылка в карточке сертификата сразу отключает предыдущую; там же — «Отключить».
- Ссылка действует до конца подписки.

## Для ИИ-агентов

Полная документация ZRAZU в формате для языковых моделей: [https://zrazu.com/llms.txt](https://zrazu.com/llms.txt) (оглавление) и [https://zrazu.com/llms-full.txt](https://zrazu.com/llms-full.txt) (все страницы). Каждая страница документации есть и в Markdown — добавьте `.md` к адресу без косой черты в конце.
