// REST API
API Reference
HTTP REST API поверх HTTPS. Аутентификация по Bearer-токену. Все запросы и ответы — JSON в UTF-8. Базовый URL: https://api.kryon.space/v1. API версионируется в пути; ломающие изменения выходят под новой мажорной версией.
Аутентификация
Аутентификация — заголовок Authorizationbash
# токен выпускается в дашборде: Settings → API Tokens
export KRYON_TOKEN="kry_live_9f3c…"
curl https://api.kryon.space/v1/resources \
-H "Authorization: Bearer $KRYON_TOKEN"Соглашения
- —Аутентификация: заголовок Authorization: Bearer <token>. Токены скоупятся на папку и права (read / write / purge).
- —Формат: тело запроса и ответа — JSON. Дата и время — ISO 8601 в UTC. Идентификаторы — строки.
- —Идемпотентность: POST-запросы принимают заголовок Idempotency-Key для безопасного ретрая.
- —Ошибки: ненулевой класс 4xx/5xx возвращает JSON с полями error.code и error.message.
Эндпоинты
Ресурсы
GET
/v1/resourcesСписок CDN-ресурсов (пагинация)POST
/v1/resourcesСоздать ресурсGET
/v1/resources/{id}Получить ресурс по IDPATCH
/v1/resources/{id}Обновить ресурс (origin, протокол, WS)DELETE
/v1/resources/{id}Удалить ресурсКэш
GET
/v1/resources/{id}/rulesПравила кэширования ресурсаPUT
/v1/resources/{id}/rulesЗаменить набор правилPOST
/v1/resources/{id}/purgeИнвалидация: url / prefix / tagБезопасность
GET
/v1/resources/{id}/securityТекущие правила безопасностиPOST
/v1/resources/{id}/security/ratelimitДобавить rate-limitPOST
/v1/resources/{id}/tlsЗагрузить сертификатНаблюдаемость
GET
/v1/resources/{id}/statsМетрики: трафик, латентность, кодыGET
/v1/resources/{id}/logsВыгрузка access-логовОбъект Resource
Объект Resourcejson
{
"id": "bc8ri5ppmxkrgdp65x3p",
"cname": "cdn.example.com",
"origin": "origin.example.com",
"protocol": "https",
"websocket": true,
"status": "active",
"edge_target": "bc8ri5ppmxkrgdp65x3p.kryon.edge",
"created_at": "2026-07-14T09:21:00Z"
}Примеры запросов
POST /v1/resources — создать ресурсbash
curl -X POST https://api.kryon.space/v1/resources \
-H "Authorization: Bearer $KRYON_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cname": "cdn.example.com",
"origin": "origin.example.com",
"protocol": "https",
"websocket": false
}'POST /v1/resources/{id}/purge — инвалидацияbash
curl -X POST \
https://api.kryon.space/v1/resources/bc8ri5ppmxkrgdp65x3p/purge \
-H "Authorization: Bearer $KRYON_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "prefixes": ["/assets/", "/img/"], "tags": ["product-42"] }'GET /v1/resources/{id}/stats — ответjson
{
"from": "2026-07-20T00:00:00Z",
"to": "2026-07-20T01:00:00Z",
"requests": 4821203,
"cache_hit_ratio": 0.983,
"latency_ms": { "p50": 12, "p95": 41, "p99": 88 },
"status": { "2xx": 4790011, "3xx": 21402, "4xx": 9210, "5xx": 580 },
"egress_gb": 214.7
}Пагинация и лимиты
Пагинация — курсорbash
# первая страница
curl "https://api.kryon.space/v1/resources?limit=50" -H "Authorization: Bearer $KRYON_TOKEN"
# следующая — по next_cursor из ответа
curl "https://api.kryon.space/v1/resources?limit=50&cursor=eyJvZmZ…" -H "Authorization: Bearer $KRYON_TOKEN"Лимит API: 600 запросов в минуту на токен. Текущий остаток — в заголовках X-RateLimit-Remaining и X-RateLimit-Reset. При превышении возвращается 429 с заголовком Retry-After.
Коды ошибок
400
invalid_requestНекорректное тело или параметры запроса.401
unauthorizedОтсутствует или недействителен Bearer-токен.403
forbiddenУ токена нет прав на операцию или ресурс.404
not_foundРесурс с указанным ID не существует.409
conflictКонфликт состояния (например, CNAME уже занят).422
unprocessableВалидные типы, но нарушено бизнес-правило.429
rate_limitedПревышен лимит запросов, см. Retry-After.500
internal_errorВнутренняя ошибка. Безопасно повторить с backoff.503
unavailableВременная недоступность сервиса API.