PRNT REST API
Документация и SDK
Интегрируйте программный захват веб-страниц за считанные минуты. Архитектура RESTful, ответы в JSON и подписанные вебхуки HMAC.
Рендеринг менее 50 мс
Предварительно прогретые экземпляры Chromium на 12 глобальных узлах Edge с мгновенным кэшированием CDN.
Пиксельно точный DOM
Полная гидратация JS, WebGL, бесконечная прокрутка, масштабирование Retina и автоматическое закрытие баннеров куки.
Усиленная безопасность
Автоматическая защита от SSRF, изолированные одноразовые контейнеры Docker, нулевое сохранение куки и 256-битный TLS 1.3.
Мультиязычные SDK
Библиотеки и готовые примеры на cURL, Python, Node.js, PHP и Go с типизированными параметрами.
01 Быстрый Старт
Отправьте свой первый программный запрос на снимок экрана менее чем за 60 секунд с помощью нашего RESTful API:
- Зарегистрируйте бесплатный аккаунт разработчика, чтобы получить рабочий API-ключ.
- Перейдите в панель ключей API, чтобы скопировать токен Bearer.
- Отправьте запрос HTTP POST на эндпоинт
/v1/captureс целевым URL-адресом.
# Request full-page PNG screenshot
curl -X POST "https://api.prnt.tr/v1/capture" \
-H "Authorization: Bearer prnt_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://github.com",
"format": "png",
"full_page": true,
"viewport": { "width": 1920, "height": 1080 }
}' --output screenshot.png
import requests
url = "https://api.prnt.tr/v1/capture"
headers = {
"Authorization": "Bearer prnt_live_your_api_key_here",
"Content-Type": "application/json"
}
payload = {
"url": "https://github.com",
"format": "png",
"full_page": True
}
response = requests.post(url, json=payload, headers=headers)
with open("screenshot.png", "wb") as f:
f.write(response.content)
print("Screenshot saved successfully!")
import fs from 'fs/promises';
const response = await fetch('https://api.prnt.tr/v1/capture', {
method: 'POST',
headers: {
'Authorization': 'Bearer prnt_live_your_api_key_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://github.com',
format: 'png',
full_page: true
})
});
const buffer = Buffer.from(await response.arrayBuffer());
await fs.writeFile('screenshot.png', buffer);
console.log('Screenshot captured successfully.');
<?php
$apiKey = 'prnt_live_your_api_key_here';
$ch = curl_init('https://api.prnt.tr/v1/capture');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer {$apiKey}",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://github.com',
'format' => 'png',
'full_page' => true
]),
CURLOPT_RETURNTRANSFER => true
]);
$image = curl_exec($ch);
file_put_contents('screenshot.png', $image);
curl_close($ch);
02 Аутентификация и безопасность
PRNT аутентифицирует запросы API с помощью токенов Bearer. Добавляйте свой ключ в заголовок Authorization каждого запроса:
03 Базовый URL и форматы контента
Все эндпоинты API безопасно обслуживаются через TLS 1.3. Рабочая точка входа:
PRNT поддерживает несколько форматов вывода, адаптированных для веба, печати и архивирования:
| Формат | MIME-тип | Оптимальное применение |
|---|---|---|
png |
image/png |
По умолчанию. Качество без потерь, идеально для четкого текста, элементов интерфейса и прозрачного фона. |
jpeg / jpg |
image/jpeg |
Оптимальный размер файла для сайтов с обилием фото с настраиваемым качеством quality (1-100). |
webp |
image/webp |
Современный веб-формат с высокой степенью сжатия и размером файлов до 30% меньше, чем JPEG. |
pdf |
application/pdf |
Многостраничный векторный экспорт документов для счетов, юридических документов и архивной печати. |
04 POST /v1/capture
Основной эндпоинт для преобразования веб-страниц в изображения высокого разрешения или документы.
Параметры запроса (JSON Body)
| Параметр | Тип | Статус | Описание и значение по умолчанию |
|---|---|---|---|
url |
string | ОБЯЗАТЕЛЬНО | Полный URL-адрес целевой страницы (должен содержать https:// или http://). |
format |
string | НЕОБЯЗАТЕЛЬНО | png (по умолчанию), jpeg, webp, или pdf. |
full_page |
boolean | НЕОБЯЗАТЕЛЬНО | Автоматически прокручивает страницу для загрузки отложенных элементов. По умолчанию: false. |
viewport.width |
integer | НЕОБЯЗАТЕЛЬНО | Ширина окна браузера в пикселях. По умолчанию: 1920. |
viewport.height |
integer | НЕОБЯЗАТЕЛЬНО | Высота окна браузера в пикселях. По умолчанию: 1080. |
delay |
integer | НЕОБЯЗАТЕЛЬНО | Время ожидания в мс после загрузки DOM перед снимком (0 – 10000 мс). По умолчанию: 0. |
dark_mode |
boolean | НЕОБЯЗАТЕЛЬНО | Эмулирует медиазапросы CSS prefers-color-scheme: dark. По умолчанию: false. |
block_cookie_banners |
boolean | НЕОБЯЗАТЕЛЬНО | Автоматически обнаруживает и скрывает навязчивые баннеры GDPR и куки. По умолчанию: true. |
custom_css |
string | НЕОБЯЗАТЕЛЬНО | Внедрение пользовательских правил CSS перед снимком (например, .announcement { display: none; }). |
custom_js |
string | НЕОБЯЗАТЕЛЬНО | Выполнение произвольного клиентского JavaScript-кода перед снимком. |
05 Коды состояния HTTP и ошибки
PRNT возвращает стандартные коды HTTP со структурированными ошибками в формате JSON:
| Код HTTP | Константа ошибки | Причина и решение |
|---|---|---|
200 OK |
SUCCESS | Скриншот успешно сформирован и возвращен в виде бинарного изображения или ссылки CDN. |
400 Bad Request |
INVALID_PARAMETER | Отсутствует целевой URL, указаны неверные размеры или поврежден JSON. |
401 Unauthorized |
INVALID_API_KEY | Отсутствует или отозван токен API Bearer в заголовке запроса. |
403 Forbidden |
DOMAIN_BLOCKED | Запрошенный домен нарушает политику допустимого использования или заблокирован брандмауэром SSRF. |
429 Too Many Requests |
RATE_LIMIT_EXCEEDED | Достигнут лимит запросов или лимит параллелизма вашего плана. Обновите тариф для масштабирования. |
504 Gateway Timeout |
RENDER_TIMEOUT | Целевая страница не ответила или не отрендерилась в течение 30-секундного окна выполнения. |
06 Примеры кода и библиотеки SDK
Ознакомьтесь с готовыми примерами интеграции для наших официальных SDK и HTTP-клиентов:
package main
import (
"bytes"
"encoding/json"
"io"
"net/http"
"os"
)
func main() {
payload, _ := json.Marshal(map[string]interface{}{
"url": "https://github.com",
"format": "png",
"full_page": true,
})
req, _ := http.NewRequest("POST", "https://api.prnt.tr/v1/capture", bytes.NewBuffer(payload))
req.Header.Set("Authorization", "Bearer prnt_live_your_api_key_here")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := os.Create("screenshot.png")
defer out.Close()
io.Copy(out, resp.Body)
}
# pip install prnt-sdk
from prnt import PrntClient
client = PrntClient(api_key="prnt_live_your_api_key_here")
screenshot = client.capture(
url="https://github.com",
format="png",
full_page=True,
dark_mode=True,
delay=500
)
screenshot.save("github_dark.png")
// npm install @prnt/sdk
import { PrntClient } from '@prnt/sdk';
const prnt = new PrntClient({ apiKey: 'prnt_live_your_api_key_here' });
const image = await prnt.capture({
url: 'https://github.com',
format: 'webp',
fullPage: true,
blockCookieBanners: true
});
await image.save('output.webp');