# Посилання на сертифікат — довідка для розробників

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

URL: https://zrazu.com/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` до адреси без кінцевої косої риски.
