Документация API
Используйте инструменты для файлов из своего кода (доступно через API: 33). Ключ в заголовке, загрузка и URL статуса для опроса — SDK не нужен.
Введение
API Convertavo дает доступ к тем же конвертерам, что и сайт (инструменты для PDF, изображений, OCR и видео), через HTTPS. Он построен вокруг нескольких предсказуемых ресурсов, принимает загрузки multipart/form-data и всегда отвечает в JSON со стандартными HTTP-кодами.
Авторизация
Создайте ключ в личном кабинете, в разделе «API-ключи». Ключи начинаются с at_ и показываются только один раз: мы храним лишь отпечаток, поэтому потерянный ключ восстановить нельзя — отзовите его и создайте новый. Передавайте ключ в каждом запросе:
Authorization: Bearer at_your_key_hereCONVERTAVO_KEY, как в каждом примере на этой странице.
Отсутствующий ключ возвращает 401 Missing API key; неверный или отозванный — 401 Invalid or revoked API key.
Быстрый старт
Сожмите PDF от начала до конца: загрузите, дождитесь задачи, сохраните результат. Выберите язык — выбор сохраняется на всей странице.
- 1Задайте ключСохраните его в переменной окружения
CONVERTAVO_KEY. - 2Что понадобитсяcURL, PHP с ext-curl, Python с
requestsили Node.js 18+. - 3Запустите скриптОн загружает файл, опрашивает каждые 2 секунды и скачивает результат.
# 1. Upload — returns 202 and a status_url
curl -X POST https://convertavo.com/ru/api/v1/tools/compress-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@report.pdf" \
-F "settings[Compression level]=Balanced (recommended)"
# 2. Poll until status is "done" or "failed"
curl https://convertavo.com/ru/api/v1/conversions/852 \
-H "Authorization: Bearer $CONVERTAVO_KEY"
# 3. Download the signed download_url from step 2 as it is
# (no key needed; it stops working when the file is deleted)
curl -L -o report-small.pdf "https://convertavo.com/ru/download/1814?expires=1791200000&signature=3f9a…"
<?php
const BASE = 'https://convertavo.com/ru/api/v1';
function convertavo(string $method, string $url, array $fields = []): array
{
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY'), 'Accept: application/json'],
CURLOPT_POSTFIELDS => $fields ?: null,
]);
$body = json_decode(curl_exec($ch), true);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($code >= 400) {
throw new RuntimeException($body['message'] ?? "HTTP {$code}");
}
return $body;
}
// 1. Upload
$job = convertavo('POST', BASE . '/tools/compress-pdf/convert', [
'files[0]' => new CURLFile('report.pdf'),
'settings[Compression level]' => 'Balanced (recommended)',
]);
// 2. Poll
do {
sleep(2);
$job = convertavo('GET', $job['status_url'] ?? BASE . "/conversions/{$job['id']}");
} while (in_array($job['status'], ['queued', 'processing'], true));
if ($job['status'] === 'failed') {
throw new RuntimeException($job['error']);
}
// 3. Download
foreach ($job['files'] as $file) {
copy($file['download_url'], $file['name']);
}
import os
import time
import requests
BASE = 'https://convertavo.com/ru/api/v1'
session = requests.Session()
session.headers['Authorization'] = f"Bearer {os.environ['CONVERTAVO_KEY']}"
# 1. Upload
with open('report.pdf', 'rb') as f:
r = session.post(
f'{BASE}/tools/compress-pdf/convert',
files=[('files[]', f)],
data={'settings[Compression level]': 'Balanced (recommended)'},
timeout=120,
)
r.raise_for_status()
job = r.json()
status_url = job['status_url']
# 2. Poll
while job['status'] in ('queued', 'processing'):
time.sleep(2)
job = session.get(status_url, timeout=30).json()
if job['status'] == 'failed':
raise RuntimeError(job['error'])
# 3. Download
for file in job['files']:
with open(file['name'], 'wb') as out:
out.write(requests.get(file['download_url'], timeout=120).content)
import { readFile, writeFile } from 'node:fs/promises';
const BASE = 'https://convertavo.com/ru/api/v1';
const headers = { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
// 1. Upload
const form = new FormData();
form.append('files[]', new Blob([await readFile('report.pdf')]), 'report.pdf');
form.append('settings[Compression level]', 'Balanced (recommended)');
let res = await fetch(`${BASE}/tools/compress-pdf/convert`, { method: 'POST', headers, body: form });
let job = await res.json();
if (res.status !== 202) throw new Error(job.message);
const statusUrl = job.status_url;
// 2. Poll
while (['queued', 'processing'].includes(job.status)) {
await sleep(2000);
job = await (await fetch(statusUrl, { headers })).json();
}
if (job.status === 'failed') throw new Error(job.error);
// 3. Download
for (const file of job.files) {
const data = Buffer.from(await (await fetch(file.download_url)).arrayBuffer());
await writeFile(file.name, data);
}
Как проходит конвертация
Конвертации идут через очередь: загрузка отвечает сразу, а работа завершается в фоне, обычно за несколько секунд.
status_urlqueued → processing → done или faileddownload_url, действует один час/api/v1/toolsСписок инструментов
Возвращает каждый активный инструмент с точными названиями настроек, которые ожидает его эндпоинт конвертации. Используйте его, а не зашивайте параметры в код. Инструменты с "api_supported": false работают по ссылке и доступны только на сайте.
curl https://convertavo.com/ru/api/v1/tools \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/ru/api/v1/tools',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/tools', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"tools": [
{
"key": "compress-pdf",
"name": "Compress PDF",
"category": "PDF",
"input": "file",
"api_supported": true,
"accepts": "PDF",
"accepts_multiple_files": false,
"settings": [ … ],
"switches": [ … ]
}
]
}
/api/v1/tools/{key}Получить инструмент
Один инструмент по его ключу. Для неизвестного или отключенного инструмента возвращает 404.
| Параметр пути | Тип | Описание |
|---|---|---|
key обязательно | string | Ключ инструмента, например compress-image. См. справочник инструментов. |
curl https://convertavo.com/ru/api/v1/tools/compress-image \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/compress-image');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/ru/api/v1/tools/compress-image',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/tools/compress-image', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"key": "compress-image",
"name": "Compress Image",
"category": "Image",
"input": "file",
"api_supported": true,
"accepts": "JPG, PNG, WebP",
"accepts_multiple_files": true,
"settings": [
{ "name": "Quality", "type": "range" },
{ "name": "Output format", "type": "select",
"options": ["Keep original", "JPG", "WebP", "AVIF"] },
{ "name": "Max width", "type": "number", "example": "1920" }
],
"switches": [
{ "index": 0, "name": "Strip EXIF and location data" }
]
}
/api/v1/tools/{key}/convertКонвертировать файлы
Загружает один или несколько файлов и ставит конвертацию в очередь. Отправляйте multipart/form-data. Сразу отвечает 202 Accepted; чтобы получить результат, следите за status_url.
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно | file[] | Не больше размера пакета вашего тарифа за запрос (см. Лимиты); большие пакеты разделяйте. Каждый файл стоит кредитов инструмента. Инструменты без поддержки нескольких файлов принимают только один. |
settings[<name>] необязательно | string | Настройка по ее точному названию (на английском), например settings[Output format]=WebP. Пропущенные настройки принимают значение инструмента по умолчанию. |
switches[<index>] необязательно | boolean | Флажок по его позиции; 1 — включен, 0 — выключен. Пропущенные параметры выключены. |
curl -X POST https://convertavo.com/ru/api/v1/tools/compress-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Quality]=80' \
-F 'settings[Output format]=WebP' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/compress-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Quality]' => '80',
'settings[Output format]' => 'WebP',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/compress-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Quality]': '80',
'settings[Output format]': 'WebP',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Quality]', '80');
form.append('settings[Output format]', 'WebP');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/compress-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
{
"id": 852,
"status": "queued",
"status_url": "https://convertavo.com/ru/api/v1/conversions/852",
"credits_charged": 1,
"credits_remaining": 2999
}
/api/v1/conversions/{id}Получить конвертацию
Состояние запущенной вами конвертации. Конвертация другого аккаунта возвращает 404.
| Поле | Тип | Описание |
|---|---|---|
status | enum | queued, processing, done или failed. |
error | string | null | При failed: фраза, которую можно показать человеку. |
files[] | array | При done: name, size в байтах, download_url. |
download_all_url | string | Если задача дала несколько файлов: все вместе в ZIP. |
expires_at | ISO 8601 | Момент, когда полученные файлы будут удалены. |
curl https://convertavo.com/ru/api/v1/conversions/852 \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/conversions/852');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/ru/api/v1/conversions/852',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/conversions/852', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"id": 852,
"tool_key": "compress-image",
"status": "done",
"error": null,
"files": [
{
"name": "photo.webp",
"size": 58766,
"download_url": "https://convertavo.com/ru/download/1814?expires=1794545640&signature=3f9a\u2026"
}
],
"expires_at": "2026-11-13T09:54:00+05:00"
}
Настройки и параметры
Параметры повторяют элементы управления на странице каждого инструмента: названия — те, что в английской версии этой страницы.
- Настройки задаются по подписи:
settings[Compression level]=Maximum compression. Пробелы и знаки препинания — часть названия; HTTP-библиотека их закодирует. - Списки выбора принимают ровно одно из указанных значений, с учетом регистра.
- Параметры — это флажки по позиции, начиная с
0. На сайте первый параметр отмечен по умолчанию; через API каждый параметр выключен, если вы не отправите1. - Неизвестные названия игнорируются, а не отклоняются: если параметр будто не действует, проверьте написание через «Получить инструмент».
Лимиты и квоты
| Лимит | Free | Basic | Standard | Business | Lifetime |
|---|---|---|---|---|---|
| Кредиты | 50 в день | 3 000 в месяц | 10 000 в месяц | 40 000 в месяц | 60 000 единоразово |
| Запросов в минуту | 10 | 30 | 60 | 120 | 60 |
| Самый большой файл | 100 МБ | 200 МБ | 500 МБ | 1 000 МБ | 500 МБ |
| Файлов в запросе | 10 | 20 | 50 | 100 | 50 |
- Конвертации стоят кредитов за файл, по тем же ценам, что и на сайте, и с того же баланса: десять изображений по 1 кредиту стоят 10.
- Опрос, получение списка инструментов и скачивание результатов бесплатны, но каждый запрос учитывается в лимите запросов в минуту вашего тарифа.
- Каждый ответ на конвертацию содержит
credits_chargedиcredits_remaining, чтобы скрипт мог регулировать темп. - Участники команды тратят кредиты команды.
Ошибки
Ошибки возвращают тело JSON с понятным человеку message. Ошибки валидации (422) также содержат объект errors с ключами по полям.
| Статус | Значение | Что делать |
|---|---|---|
| 202 | Принято: конвертация в очереди. | Опрашивайте status_url. |
| 401 | Ключа нет, он неверный или отозван. | Проверьте заголовок Authorization. |
| 404 | Неизвестный инструмент или чужая конвертация. | Проверьте ключ или идентификатор. |
| 410 | Ссылка на скачивание, файл которой уже удален. | Запустите конвертацию снова. |
| 422 | Нет файла, файл больше лимита тарифа или инструмент работает только со ссылкой. | Прочитайте errors и исправьте запрос. |
| 402 | Недостаточно кредитов для этого запроса. | В теле есть credits_needed, credits_remaining и credits_reset_at. Дождитесь пополнения или перейдите на тариф выше. |
| 429 | Слишком много запросов в минуту для вашего тарифа. | Подождите столько секунд, сколько указано в Retry-After, и повторите. |
| 5xx | Проблема на нашей стороне. | Повторите с экспоненциальной задержкой. |
{
"message": "The files field is required.",
"errors": {
"files": ["The files field is required."]
}
}
Скачивание и хранение
- URL для скачивания не требуют API-ключа: их можно отдать браузеру. Их невозможно угадать; пока они действуют, обращайтесь с ними как с секретами.
- Входные и выходные файлы удаляются через один час после конвертации; после этого ссылка возвращает
410. - Запись о конвертации (название, размер, статус) остается в истории личного кабинета.
Рекомендации
done или failed.5xx и сетевые ошибки с растущей задержкой. Ошибки 4xx не повторяйте — исправьте запрос.Текущие ограничения
- Вебхуков пока нет: опрашивайте URL статуса.
- Эндпоинта для истории конвертаций нет; используйте личный кабинет.
- Несовместимые изменения выйдут в
/v2;/v1останется таким, как описано.
API QR-кодов
Создавайте статические и динамические QR-коды, скачивайте их в SVG, PNG, JPG, WebP или PDF, меняйте адрес назначения динамического кода и смотрите статистику сканирований. Используется тот же ключ, что и во всем выше, и тот же движок, что и на сайте: те же форматы содержимого, те же правила дизайна и та же проверка, что код действительно сканируется, прежде чем вы его получите.
| Эндпоинт | Что делает |
|---|---|
GET /api/v1/qr/types | Доступные типы и поля каждого. |
POST /api/v1/qr/render | Генерирует изображение и возвращает его. Ничего не сохраняется. |
POST /api/v1/qr | Сохраняет статический или динамический код. |
GET /api/v1/qr | Список ваших кодов (mode, status, type, q, per_page). |
GET · PATCH · DELETE /api/v1/qr/{id} | Читает, изменяет или удаляет код. id — это id, возвращенный при создании. |
GET /api/v1/qr/{id}/image | Код в виде файла изображения. |
GET /api/v1/qr/{id}/analytics | Сканирования, уникальные посетители, устройства, страны и другое (только для динамических кодов). |
403). Вызовы учитываются в лимите запросов в минуту вашего тарифа, а каждый ключ ограничен 60 запросами в минуту и 20 в минуту для всего, что генерирует изображение. Сверх этого ответ — 429 с заголовком Retry-After. Сохранение кодов и динамические коды подчиняются тем же квотам тарифа, что и на сайте.
dataсодержит поля типа. Названия узнайте у/qr/types: код Wi-Fi принимаетssid,password,authentication; ссылка —url.designнеобязателен, и каждое его поле проверяется. Цвета записываются как#rrggbb; дизайн, который не будет надежно сканироваться, отклоняется с422, егоscannability_scoreиreasons.- Размещенные страницы (визитка, меню, страницы файлов…) и ссылки на магазины приложений создаются на сайте, а не через API.
- Логотип можно передать изображением
data:; SVG-логотипы очищаются от любых скриптов, а то, что не является настоящим изображением, отклоняется. - Код, принадлежащий кому-то другому, отвечает
404, точно как если бы его не существовало.
/api/v1/qr/renderСгенерировать изображение QR
Отправьте, что должно быть в коде; изображение вернется сразу. format — svg, png (по умолчанию), jpg, webp или pdf; size в пикселях, до 2048.
curl -X POST https://convertavo.com/ru/api/v1/qr/render \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"wifi","data":{"ssid":"Guest","password":"welcome-2026","authentication":"WPA"},"design":{"dots":{"shape":"rounded","color":{"type":"solid","value":"#1e3a8a"}}},"format":"png","size":512}' \
-o wifi.png
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/qr/render');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['type' => 'wifi', 'data' => ['ssid' => 'Guest', 'password' => 'welcome-2026', 'authentication' => 'WPA'], 'design' => ['dots' => ['shape' => 'rounded', 'color' => ['type' => 'solid', 'value' => '#1e3a8a']]], 'format' => 'png', 'size' => 512]),
]);
$response = curl_exec($ch);
file_put_contents('wifi.png', $response);
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ru/api/v1/qr/render',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'type': 'wifi', 'data': {'ssid': 'Guest', 'password': 'welcome-2026', 'authentication': 'WPA'}, 'design': {'dots': {'shape': 'rounded', 'color': {'type': 'solid', 'value': '#1e3a8a'}}}, 'format': 'png', 'size': 512},
timeout=60,
)
response.raise_for_status()
open('wifi.png', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/ru/api/v1/qr/render', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"type":"wifi","data":{"ssid":"Guest","password":"welcome-2026","authentication":"WPA"},"design":{"dots":{"shape":"rounded","color":{"type":"solid","value":"#1e3a8a"}}},"format":"png","size":512}),
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('wifi.png', Buffer.from(await response.arrayBuffer()));
{
"message": "This design would not scan reliably, so it was not made.",
"scannability_score": 40,
"reasons": [
"Contrast between the dots and background is too low (1.4:1, minimum 4.0:1) …"
]
}
/api/v1/qrСоздать QR-код
mode — static (по умолчанию: данные в самом коде, навсегда) или dynamic (код содержит короткую ссылку, которую можно перенаправить позже; тип должен давать веб-адрес, например url). Необязательно: name, tags, folder_id, design, а для динамических кодов — custom_slug. Возвращает 201.
curl -X POST https://convertavo.com/ru/api/v1/qr \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"url","mode":"dynamic","name":"Spring menu","data":{"url":"https://example.com/menu"},"tags":["spring"]}'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/qr');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['type' => 'url', 'mode' => 'dynamic', 'name' => 'Spring menu', 'data' => ['url' => 'https://example.com/menu'], 'tags' => ['spring']]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ru/api/v1/qr',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'type': 'url', 'mode': 'dynamic', 'name': 'Spring menu', 'data': {'url': 'https://example.com/menu'}, 'tags': ['spring']},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/qr', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"type":"url","mode":"dynamic","name":"Spring menu","data":{"url":"https://example.com/menu"},"tags":["spring"]}),
});
console.log(await response.json());
{
"data": {
"id": "0f6c1b52-…",
"name": "Spring menu",
"type": "url",
"mode": "dynamic",
"status": "active",
"short_url": "https://…/q/k3d9x2p",
"destination_url": "https://example.com/menu",
"scannability_score": 100,
"scan_count": 0,
"links": {
"self": "https://…/api/v1/qr/0f6c1b52-…",
"image": "https://…/api/v1/qr/0f6c1b52-…/image",
"analytics": "https://…/api/v1/qr/0f6c1b52-…/analytics"
}
}
}
/api/v1/qr PATCH/api/v1/qr/{id}Список, чтение, изменение, удаление
PATCH принимает name, tags, а для динамических кодов — destination (проверяется точно так же, как адрес, введенный на сайте) и status (paused или active). Напечатанный код никогда не меняется. DELETE возвращает 204.
curl -X PATCH https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000 \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"destination":"https://example.com/summer-menu"}'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['destination' => 'https://example.com/summer-menu']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'PATCH',
'https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'destination': 'https://example.com/summer-menu'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"destination":"https://example.com/summer-menu"}),
});
console.log(await response.json());
{ "message": "That website is not allowed on this service." }
/api/v1/qr/{id}/image?format=svg&size=1024Скачать изображение
Генерирует сохраненный код по его сохраненному дизайну. Изображение динамического кода содержит его короткую ссылку, поэтому напечатанный файл никогда не придется менять.
curl -X GET https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024 \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-o qr.svg
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
file_put_contents('qr.svg', $response);
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
open('qr.svg', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('qr.svg', Buffer.from(await response.arrayBuffer()));
/api/v1/qr/{id}/analyticsСтатистика сканирований
range — today, 7d, 30d (по умолчанию), 90d, 365d или custom с датами from и to. Все даты в UTC. Посетители считаются, но никогда не идентифицируются.
curl -X GET https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
console.log(await response.json());
{
"data": {
"from": "2026-09-16", "to": "2026-09-22",
"totals": { "scans": 412, "unique": 301 },
"delta": { "scans": 12.5, "unique": 8.1 },
"series": [ … ],
"breakdowns": { "device": [ … ], "country": [ … ], … }
}
}
API счетов
Создавайте, выставляйте и отслеживайте счета, коммерческие предложения и кредит-ноты; управляйте клиентами; записывайте платежи; скачивайте PDF и XML по структуре EN 16931; и получайте уведомления в своей программе, когда счет просмотрен, оплачен или просрочен. Используется тот же ключ, что и во всем выше, и тот же движок, что и в «Генераторе счетов»: та же валидация, те же итоги, та же нумерация, тот же PDF.
| Эндпоинт | Что делает |
|---|---|
POST /api/v1/invoices | Создать черновик или сразу выставить его с "issue": true. |
GET /api/v1/invoices | Список документов, от новых к старым (status, type, client_id, issued_from, issued_to, q). |
GET · PATCH · DELETE /api/v1/invoices/{id} | Прочитать документ; изменить или удалить черновик. |
POST /api/v1/invoices/{id}/issue | Выставить черновик: номер присваивается в этот момент. |
POST /api/v1/invoices/{id}/payments | Записать платеж. |
POST /api/v1/invoices/{id}/send · /cancel | Отправить клиенту по почте · аннулировать. |
GET /api/v1/invoices/{id}/pdf | PDF. |
GET /api/v1/invoices/{id}/pdf-a3 · /xml/ubl · /xml/cii | Структурированные данные (счета и кредит-ноты). |
GET · POST /api/v1/clients, GET · PATCH · DELETE /api/v1/clients/{id} | Ваши клиенты. |
GET /api/v1/businesses | Компании, от имени которых вы выставляете счета. |
403). Выставление документа стоит один кредит, точно как на сайте; черновики, чтение и платежи бесплатны. Лимит запросов в минуту зависит от тарифа, а сверх него ответ — 429 с Retry-After.
- Суммы передаются десятичными строками в валюте документа:
"1250.50", никогда не числом с плавающей точкой. Они возвращаются дважды: десятичными строками вamountsи целыми числами в минимальных единицах вamounts_minor; для расчетов используйте целые. Сервер сам считает каждый итог; итоги, переданные в запросе, игнорируются. - Идемпотентность. Отправляйте заголовок
Idempotency-Keyс любымPOST,PATCHилиDELETE. Тот же ключ с тем же телом в течение 24 ч возвращает первый ответ с пометкойIdempotent-Replayed: true: если соединение оборвалось, просто отправьте запрос снова. Тот же ключ с другим телом отклоняется с422. - Пагинация идет по курсору: передавайте
meta.next_cursorкакcursor, пока он не станетnull.per_page— до 100. - Счет или клиент, принадлежащий кому-то другому, отвечает
404, точно как если бы его не существовало. - Полный машиночитаемый справочник: документ OpenAPI 3.1, сгенерированный из кода, который обслуживает эти эндпоинты.
/api/v1/invoicesСоздать и выставить счет
Тело — это счет в том виде, в каком его хранит редактор: currency, lines (каждая с description, quantity, unit_price, tax_rate, tax_category) и при необходимости даты, buyer, seller, скидки, доставка, примечания и шаблон. Укажите client_id, чтобы заполнить покупателя из сохраненного клиента, и business_id, чтобы выбрать, какая из ваших компаний выставляет счет. С "issue": true он сразу получает номер, а ответ содержит его pdf_url; без этого он остается редактируемым черновиком.
curl -X POST https://convertavo.com/ru/api/v1/invoices \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"issue":true,"currency":"USD","issue_date":"2026-10-20","due_date":"2026-11-03","buyer":{"name":"Northwind Studio","email":"accounts@northwind.example"},"lines":[{"description":"Logo design","quantity":"1","unit_price":"450.00","tax_rate":"0","tax_category":"zero"},{"description":"Brand guidelines (hours)","quantity":"6","unit_price":"65.00","tax_rate":"0","tax_category":"zero"}],"notes":"Thank you for your business."}'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/invoices');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['issue' => true, 'currency' => 'USD', 'issue_date' => '2026-10-20', 'due_date' => '2026-11-03', 'buyer' => ['name' => 'Northwind Studio', 'email' => 'accounts@northwind.example'], 'lines' => [['description' => 'Logo design', 'quantity' => '1', 'unit_price' => '450.00', 'tax_rate' => '0', 'tax_category' => 'zero'], ['description' => 'Brand guidelines (hours)', 'quantity' => '6', 'unit_price' => '65.00', 'tax_rate' => '0', 'tax_category' => 'zero']], 'notes' => 'Thank you for your business.']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ru/api/v1/invoices',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'issue': True, 'currency': 'USD', 'issue_date': '2026-10-20', 'due_date': '2026-11-03', 'buyer': {'name': 'Northwind Studio', 'email': 'accounts@northwind.example'}, 'lines': [{'description': 'Logo design', 'quantity': '1', 'unit_price': '450.00', 'tax_rate': '0', 'tax_category': 'zero'}, {'description': 'Brand guidelines (hours)', 'quantity': '6', 'unit_price': '65.00', 'tax_rate': '0', 'tax_category': 'zero'}], 'notes': 'Thank you for your business.'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/invoices', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"issue":true,"currency":"USD","issue_date":"2026-10-20","due_date":"2026-11-03","buyer":{"name":"Northwind Studio","email":"accounts@northwind.example"},"lines":[{"description":"Logo design","quantity":"1","unit_price":"450.00","tax_rate":"0","tax_category":"zero"},{"description":"Brand guidelines (hours)","quantity":"6","unit_price":"65.00","tax_rate":"0","tax_category":"zero"}],"notes":"Thank you for your business."}),
});
console.log(await response.json());
{
"data": {
"id": "0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f",
"object": "invoice",
"type": "invoice",
"status": "partially_paid",
"number": "INV-2026-0042",
"business_id": 12,
"client_id": 34,
"client_name": "Northwind Studio",
"currency": "USD",
"language": "en",
"issue_date": "2026-10-20",
"due_date": "2026-11-03",
"reference": "Project Kite",
"po_number": "PO-77",
"related_invoice_id": "0199a2b4-5d00-7e2f-a1b2-c3d4e5f60718",
"amounts": {
"subtotal": "840.00",
"discount": "0.00",
"shipping": "0.00",
"tax": "0.00",
"withholding": "0.00",
"rounding": "0.00",
"total": "840.00",
"payable": "840.00",
"paid": "400.00",
"credited": "0.00",
"balance": "440.00"
},
"amounts_minor": {
"subtotal": 84000,
"discount": 0,
"shipping": 0,
"tax": 0,
"withholding": 0,
"rounding": 0,
"total": 84000,
"payable": 84000,
"paid": 40000,
"credited": 0,
"balance": 44000
},
"issued_at": "2026-10-20T09:05:00+05:00",
"sent_at": "2026-10-20T09:06:00+05:00",
"viewed_at": "2026-10-20T11:30:00+05:00",
"paid_at": "2026-10-21T10:00:00+05:00",
"cancelled_at": "2026-10-21T10:00:00+05:00",
"pdf_url": "https://convertavo.com/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/pdf",
"pdf_sha256": "abababababababababababababababababababababababababababababababab",
"created_at": "2026-10-20T09:00:00+05:00",
"updated_at": "2026-10-21T10:00:00+05:00"
}
}
Ошибки возвращаются с 422 и errors с ключами по пути поля (lines.1.unit_price), чтобы их можно было показать рядом с нужным полем. Если кредиты закончились, выставление отвечает 402, а черновик сохраняется (draft_id).
/api/v1/invoices/{id}/paymentsСчета, платежи, отправка
Платеж — это amount (десятичная строка) или amount_minor с paid_on, method и reference. Укажите свой external_id (идентификатор транзакции банка или платежного шлюза), и один и тот же платеж будет записан только один раз, сколько бы раз он ни пришел. Счет сам переходит в partially_paid, а затем в paid.
curl -X POST https://convertavo.com/ru/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":"300.00","method":"bank_transfer","reference":"TRX-9921","external_id":"bank-tx-55120"}'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['amount' => '300.00', 'method' => 'bank_transfer', 'reference' => 'TRX-9921', 'external_id' => 'bank-tx-55120']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ru/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'amount': '300.00', 'method': 'bank_transfer', 'reference': 'TRX-9921', 'external_id': 'bank-tx-55120'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"amount":"300.00","method":"bank_transfer","reference":"TRX-9921","external_id":"bank-tx-55120"}),
});
console.log(await response.json());
{
"data": { "id": 56, "object": "payment", "amount_minor": 30000, "amount": "300.00", "currency": "USD", "paid_on": "2026-10-21", "method": "bank_transfer", "reference": "TRX-9921" },
"invoice": { "id": "0199a2b4-…", "status": "partially_paid", "amounts_minor": { "payable": 84000, "paid": 30000, "balance": 54000, … }, … }
}
- Выставленный документ нельзя изменить или удалить (
409): исправьте его кредит-нотой на сайте или аннулируйте, пока ничего не оплачено и не скредитовано. POST …/issueдля уже выставленного документа возвращает его без изменений: повторять безопасно.POST …/sendотправляет клиенту по почте PDF и личную ссылку на языке документа;toзаменяет адрес.
/api/v1/clientsКлиенты
Создайте клиента хотя бы с name; добавьте email, address, tax_number, country (код ISO), currency, language и payment_terms_days. PATCH меняет только переданные поля (null очищает поле), а "archived": true отправляет в архив. Клиента с документами удалить нельзя: вместо этого архивируйте его, и история останется полной.
curl -X POST https://convertavo.com/ru/api/v1/clients \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Northwind Studio","email":"accounts@northwind.example","country":"US","currency":"USD"}'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/clients');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['name' => 'Northwind Studio', 'email' => 'accounts@northwind.example', 'country' => 'US', 'currency' => 'USD']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ru/api/v1/clients',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'name': 'Northwind Studio', 'email': 'accounts@northwind.example', 'country': 'US', 'currency': 'USD'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/clients', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"name":"Northwind Studio","email":"accounts@northwind.example","country":"US","currency":"USD"}),
});
console.log(await response.json());
/api/v1/invoices/{id}/pdf-a3PDF/A-3 и XML
Для счетов и кредит-нот: тот же документ в структурированных данных, по структуре EN 16931 — европейского стандарта электронных счетов. /xml/ubl — в формате UBL 2.1, /xml/cii — в UN/CEFACT CII, а /pdf-a3 — копия PDF в формате PDF/A-3 с вложенным файлом CII под именем factur-x.xml: один файл, который читают люди и импортируют бухгалтерские программы.
409, потому что в этих форматах для него нет места.
curl -X GET https://convertavo.com/ru/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-o invoice-ubl.xml
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
file_put_contents('invoice-ubl.xml', $response);
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/ru/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
open('invoice-ubl.xml', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/ru/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('invoice-ubl.xml', Buffer.from(await response.arrayBuffer()));
Вебхуки
Добавьте адрес https в личном кабинете (вкладка «Компания» → «Вебхуки») и выберите события. Каждое событие — это JSON-запрос POST: type события, время created и счет в data.object (плюс data.payment для событий платежей):
invoice.issued, invoice.sent, invoice.viewed, invoice.reminder_sent, invoice.overdue, invoice.paid, invoice.cancelled, invoice.credited, payment.recorded, payment.refunded, quote.accepted, quote.declined
- Проверяйте подпись.
Convertavo-Signatureимеет видt=<unix time>,v1=<signature>, где подпись — шестнадцатеричный HMAC-SHA256 от<t>.<raw body>, вычисленный с секретом подписи вашего эндпоинта. Вычислите ее заново, сравните за постоянное время и отклоняйте все, что старше пяти минут. - Отвечайте быстро. Любой
2xxв течение 10 секунд считается доставкой. Иначе отправка повторяется через минуту, пять минут, полчаса, два часа и шесть часов. Адрес, на который подряд не прошли доставки (15), отключается, пока вы не включите его снова. - Будьте готовы к дублям.
Convertavo-Deliveryодинаков при каждой повторной попытке одной и той же доставки: запоминайте уже обработанные и пропускайте их.
<?php
// $secret: the webhook's signing secret.
$body = file_get_contents('php://input');
$header = $_SERVER['HTTP_CONVERTAVO_SIGNATURE'] ?? '';
if (! preg_match('/^t=(\d+),v1=([0-9a-f]{64})$/', $header, $m)
|| abs(time() - (int) $m[1]) > 300
|| ! hash_equals(hash_hmac('sha256', $m[1].'.'.$body, $secret), $m[2])) {
http_response_code(400);
exit;
}
$event = json_decode($body, true);
// $event['type'], $event['data']['object'] …
http_response_code(200);
import { createHmac, timingSafeEqual } from 'node:crypto';
// rawBody: the request body exactly as received (a Buffer).
export function verify(rawBody, header, secret) {
const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header ?? '');
if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
const expected = createHmac('sha256', secret)
.update(`${m[1]}.${rawBody}`)
.digest();
return timingSafeEqual(expected, Buffer.from(m[2], 'hex'));
}
API коротких ссылок
Сокращайте ссылки, меняйте их адрес назначения и смотрите клики: тот же движок и те же проверки безопасности, что и в инструменте «Сократить ссылку». Используется тот же ключ, что и во всем выше.
| Эндпоинт | Что делает |
|---|---|
POST /api/v1/links | Сократить ссылку. |
POST /api/v1/links/bulk | Сократить до 100 ссылок за один вызов. |
GET /api/v1/links | Список ваших ссылок (search, tag, per_page до 100, page). |
GET · PATCH · DELETE /api/v1/links/{code} | Прочитать, изменить или удалить ссылку. |
GET /api/v1/links/{code}/stats | Клики, уникальные посетители, страны, устройства, ссылающиеся сайты и другое. |
429 с Retry-After), а новые ссылки подчиняются тем же часовым и дневным лимитам, что и на сайте: 100 в час и 1 000 в день на аккаунт.
- Каждый адрес назначения проверяется точно так же, как на сайте: это должен быть публичный адрес
http(s), не другой сокращатель, не из черного списка и не отмеченный Google Safe Browsing. Отказ возвращает422сmessage, который можно показать человеку. - Коды не зависят от регистра. Ссылка, принадлежащая кому-то другому, отвечает
404, точно как если бы ее не существовало. - Ссылку, заблокированную ради безопасности, можно прочитать, но нельзя изменить (
423). - Недоступно через RapidAPI: ссылки принадлежат вашему аккаунту.
/api/v1/linksСократить ссылку
url обязателен. Необязательно: code (свое окончание, 3–40 латинских букв, цифр, - или _), title, tags, expires_at и activates_at (ISO 8601 или местное время с timezone), click_limit, one_time, password, expired_redirect_url, redirect_type (302 по умолчанию или 301), og_title / og_description / og_image для превью в соцсетях, пять меток utm_* и clean: true, чтобы убрать параметры отслеживания вроде fbclid. Возвращает 201.
curl -X POST https://convertavo.com/ru/api/v1/links \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/spring-menu","code":"spring-menu","utm_source":"newsletter","utm_medium":"email","expires_at":"2026-12-31T23:59:00Z"}'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/links');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['url' => 'https://example.com/spring-menu', 'code' => 'spring-menu', 'utm_source' => 'newsletter', 'utm_medium' => 'email', 'expires_at' => '2026-12-31T23:59:00Z']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ru/api/v1/links',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'url': 'https://example.com/spring-menu', 'code': 'spring-menu', 'utm_source': 'newsletter', 'utm_medium': 'email', 'expires_at': '2026-12-31T23:59:00Z'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/links', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"url":"https://example.com/spring-menu","code":"spring-menu","utm_source":"newsletter","utm_medium":"email","expires_at":"2026-12-31T23:59:00Z"}),
});
console.log(await response.json());
{
"code": "spring-menu",
"short_url": "https://…/s/spring-menu",
"destination": "https://example.com/spring-menu?utm_source=newsletter&utm_medium=email",
"safety_status": "clean",
"warnings": [],
"clicks": 0,
"is_active": true,
"redirect_type": 302,
"expires_at": "2026-12-31T23:59:00+00:00",
"urls": {
"qr_png": "https://…/tools/url-shortener/links/spring-menu/qr.png",
"qr_svg": "https://…/tools/url-shortener/links/spring-menu/qr.svg",
"stats": "https://…/tools/url-shortener/stats/spring-menu"
}
}
safety_status — clean, pending (Safe Browsing еще не удалось опросить; ссылка будет проверена повторно) или suspicious: ссылка работает, но посетители сначала видят предупреждение, а warnings объясняет причину.
/api/v1/links/{code} PATCH/api/v1/links/{code}Список, чтение, изменение, удаление
PATCH принимает url (новый адрес назначения, проверяется как новая ссылка; короткая ссылка и ее QR-код остаются прежними), любой параметр выше, remove_password: true и is_active, чтобы приостановить или снова включить ссылку. DELETE возвращает 204; после этого адрес отвечает 410 Gone и никогда не используется повторно.
curl -X PATCH https://convertavo.com/ru/api/v1/links/spring-menu \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/summer-menu","is_active":true}'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/links/spring-menu');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['url' => 'https://example.com/summer-menu', 'is_active' => true]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'PATCH',
'https://convertavo.com/ru/api/v1/links/spring-menu',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'url': 'https://example.com/summer-menu', 'is_active': True},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/links/spring-menu', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"url":"https://example.com/summer-menu","is_active":true}),
});
console.log(await response.json());
{ "message": "That is already a short link from another service. Shorten the address it leads to instead." }
/api/v1/links/bulkМассовое сокращение
links — массив до 100 объектов с теми же полями, что и у одной ссылки. Каждый проходит или не проходит независимо; ответ перечисляет их по порядку.
curl -X POST https://convertavo.com/ru/api/v1/links/bulk \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"links":[{"url":"https://example.com/a"},{"url":"https://example.com/b","code":"page-b"}]}'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/links/bulk');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['links' => [['url' => 'https://example.com/a'], ['url' => 'https://example.com/b', 'code' => 'page-b']]]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/ru/api/v1/links/bulk',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'links': [{'url': 'https://example.com/a'}, {'url': 'https://example.com/b', 'code': 'page-b'}]},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/links/bulk', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"links":[{"url":"https://example.com/a"},{"url":"https://example.com/b","code":"page-b"}]}),
});
console.log(await response.json());
{
"results": [
{ "index": 0, "link": { "code": "x7kq2m", "short_url": "https://…/s/x7kq2m", … } },
{ "index": 1, "error": "That back-half is already taken." }
]
}
/api/v1/links/{code}/statsСтатистика кликов
range — 7d, 30d (по умолчанию), 90d, 12m, all или custom с from и to; grain — hour, day, week или month; bots=1 добавляет автоматические визиты к clicks. Дни — в UTC. Cookie не используются: уникальные посетители считаются по дням по значению, которое меняется каждый день, поэтому их никогда нельзя связать с человеком.
curl https://convertavo.com/ru/api/v1/links/spring-menu/stats?range=7d \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/links/spring-menu/stats?range=7d');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/ru/api/v1/links/spring-menu/stats?range=7d',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/ru/api/v1/links/spring-menu/stats?range=7d', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"range": { "from": "2026-10-11", "to": "2026-10-17", "grain": "day", "includes_bots": false },
"totals": { "clicks": 412, "people": 412, "unique_daily": 330, "bots": 17, "qr_scans": 96, "all_time": 1288 },
"series": [ { "label": "Sun 11 Oct", "start": "2026-10-11", "clicks": 51 }, … ],
"breakdowns": {
"by_country": { "PK": 220, "AE": 81, "GB": 60, "other": 51 },
"by_device": { "mobile": 301, "desktop": 104, "tablet": 7 },
"by_source": { "link": 316, "qr": 96 }
}
}
Вебхуки кликов
Добавьте URL вебхука в разделе Личный кабинет → Короткие ссылки, и каждый клик по вашим ссылкам будет отправляться на него JSON-запросом POST через несколько секунд. Боты не отправляются.
{
"event": "link.clicked",
"link": { "code": "spring-menu", "short_url": "https://…/s/spring-menu" },
"click": {
"at": "2026-10-17T12:04:55+00:00",
"country": "PK", "device": "mobile", "os": "Android", "browser": "Chrome",
"referrer": "www.instagram.com", "source": "link", "utm_campaign": "spring-sale"
}
}
- Каждый запрос содержит
X-Convertavo-Signature: sha256=…— HMAC-SHA256 от сырого тела, вычисленный с секретом вашего вебхука. Вычислите его сами и сравните, прежде чем доверять запросу. - Отвечайте
2xxв течение 5 секунд. Иначе отправка повторяется через 10 секунд, 1 минуту и 5 минут. - После 20 неудачных отправок подряд вебхук отключается; включите его снова в личном кабинете.
- Адреса вебхуков должны быть публичными URL
https.
Справочник инструментов
Каждый инструмент, его принимаемые файлы, все настройки и работающий запрос. Нажмите на инструмент, чтобы развернуть его.
PDF 10 outils
Сжать PDF
compress-pdf
Инструмент «Сжать PDF» от Convertavo уменьшает большой PDF, чтобы он поместился во вложение письма или в лимит загрузки. Текст остается четким. Если форма требует файл меньше 1 МБ, впишите это значение как целевой размер. Перед скачиванием вы увидите новую страницу рядом со старой.
/api/v1/tools/compress-pdf/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 5–15 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Compression level] необязательно |
string |
Balanced (recommended)Maximum compressionLight — best quality |
settings[Image quality] необязательно |
string |
Web (150 DPI)Print (300 DPI)Keep original |
settings[Target size (MB)] необязательно |
number |
Number. Пример: 1080
|
switches[0] необязательно |
boolean | Downsample embedded images. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Remove metadata and leftover editing data. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Subset embedded fonts. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/compress-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Compression level]=Balanced (recommended)' \
-F 'settings[Image quality]=Web (150 DPI)' \
-F 'settings[Target size (MB)]=1080' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/compress-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Compression level]' => 'Balanced (recommended)',
'settings[Image quality]' => 'Web (150 DPI)',
'settings[Target size (MB)]' => '1080',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/compress-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Compression level]': 'Balanced (recommended)',
'settings[Image quality]': 'Web (150 DPI)',
'settings[Target size (MB)]': '1080',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Compression level]', 'Balanced (recommended)');
form.append('settings[Image quality]', 'Web (150 DPI)');
form.append('settings[Target size (MB)]', '1080');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/compress-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
JPG в PDF
jpg-to-pdf
Объедините фото или сканы в один PDF и настройте размер страницы, ориентацию и поля. Бесплатно для файлов до 25 МБ, аккаунт не нужен.
/api/v1/tools/jpg-to-pdf/convert
- Принимает
- JPG, PNG, HEIC
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 3–8 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (JPG, PNG, HEIC). Лимит размера зависит от вашего тарифа. |
settings[Page size] необязательно |
string |
A4LetterFit to image |
settings[Orientation] необязательно |
string |
AutoPortraitLandscape |
settings[Margin] необязательно |
string |
NoneSmallMedium |
settings[Images per page] необязательно |
string |
124 |
switches[0] необязательно |
boolean | Compress images to reduce file size. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Add a page number to each page. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Sort files by name before combining. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/jpg-to-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Page size]=A4' \
-F 'settings[Orientation]=Auto' \
-F 'settings[Margin]=None' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/jpg-to-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Page size]' => 'A4',
'settings[Orientation]' => 'Auto',
'settings[Margin]' => 'None',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/jpg-to-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Page size]': 'A4',
'settings[Orientation]': 'Auto',
'settings[Margin]': 'None',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Page size]', 'A4');
form.append('settings[Orientation]', 'Auto');
form.append('settings[Margin]', 'None');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/jpg-to-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Объединить PDF
merge-pdf
Загрузите PDF, расставьте их по порядку и скачайте один общий файл. Бесплатно, без аккаунта и водяных знаков.
/api/v1/tools/merge-pdf/convert
- Принимает
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 2–5 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (PDF). Лимит размера зависит от вашего тарифа. |
settings[File order] необязательно |
string |
Manual (drag to reorder)Filename A–ZUpload order |
switches[0] необязательно |
boolean | Add a bookmark for each source file. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/merge-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F "files[]=@appendix.pdf" \
-F 'settings[File order]=Manual (drag to reorder)' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/merge-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'files[1]' => new CURLFile('appendix.pdf'),
'settings[File order]' => 'Manual (drag to reorder)',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/merge-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb')), ('files[]', open('appendix.pdf', 'rb'))],
data={
'settings[File order]': 'Manual (drag to reorder)',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('files[]', new Blob([await readFile('appendix.pdf')]), basename('appendix.pdf'));
form.append('settings[File order]', 'Manual (drag to reorder)');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/merge-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF в Excel
pdf-to-excel
Бесплатный конвертер PDF в Excel от Convertavo достает таблицы из PDF и переносит их в настоящую таблицу Excel. Строки и столбцы остаются на своих местах. Работает с банковскими выписками, счетами, прайс-листами и отчетами, даже если у таблицы нет линий.
/api/v1/tools/pdf-to-excel/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 10–30 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Page range] необязательно |
string |
Text. Пример: 1-3
|
settings[Output format] необязательно |
string |
Excel (.xlsx)CSV (.csv)Google Sheets |
settings[Header row] необязательно |
string |
Detect automaticallyFirst row is headerNo header |
settings[Decimal separator] необязательно |
string |
Point (1.50)Comma (1,50) |
switches[0] необязательно |
boolean | Keep empty rows. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Treat numbers as text. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/pdf-to-excel/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output format]=Excel (.xlsx)' \
-F 'settings[Header row]=Detect automatically' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/pdf-to-excel/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output format]' => 'Excel (.xlsx)',
'settings[Header row]' => 'Detect automatically',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/pdf-to-excel/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output format]': 'Excel (.xlsx)',
'settings[Header row]': 'Detect automatically',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output format]', 'Excel (.xlsx)');
form.append('settings[Header row]', 'Detect automatically');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/pdf-to-excel/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF в JPG
pdf-to-jpg
Превратите каждую страницу в JPG, PNG или WebP, которые можно опубликовать, вставить или отредактировать в любом графическом редакторе. Бесплатно, без аккаунта и водяных знаков.
/api/v1/tools/pdf-to-jpg/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 4–12 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Page range] необязательно |
string |
Text. Пример: 1-3
|
settings[Image format] необязательно |
string |
JPGPNGWebP |
settings[Resolution] необязательно |
string |
150 DPI (screen)300 DPI (print)600 DPI (archival) |
settings[Quality] необязательно |
integer |
Whole number, 1–100. Пример: 80
|
switches[0] необязательно |
boolean | Deliver as a zip archive. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Use a white background instead of transparency. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Extract embedded images only. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/pdf-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Image format]=JPG' \
-F 'settings[Resolution]=150 DPI (screen)' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/pdf-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Image format]' => 'JPG',
'settings[Resolution]' => '150 DPI (screen)',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/pdf-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Image format]': 'JPG',
'settings[Resolution]': '150 DPI (screen)',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Image format]', 'JPG');
form.append('settings[Resolution]', '150 DPI (screen)');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/pdf-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF в текст
pdf-to-text
Загрузите PDF и за секунды получите чистый текст, который можно копировать. Отсканированные страницы распознаются через OCR автоматически. Бесплатно, без аккаунта и водяных знаков.
/api/v1/tools/pdf-to-text/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 3–8 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Page range] необязательно |
string |
Text. Пример: 1-3
|
settings[Output format] необязательно |
string |
Plain text (.txt)Word (.docx)Markdown (.md)Web page (.html)JSON (pages, lines, tables) |
settings[Text layout] необязательно |
string |
Keep line breaksMerge into paragraphsPreserve layout (columns & spacing)Single block of text |
settings[Language] необязательно |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Document password] необязательно |
string |
Text. Пример: your-pdf-password
|
settings[Translate to (optional, machine translation)] необязательно |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] необязательно |
boolean | Run OCR when no text layer is found. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Keep tables as tab-separated columns. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Remove headers and page numbers. Отправьте 1, чтобы включить. |
switches[3] необязательно |
boolean | Mark where each page starts. Отправьте 1, чтобы включить. |
switches[4] необязательно |
boolean | Fix words split across lines. Отправьте 1, чтобы включить. |
switches[5] необязательно |
boolean | Re-read every page with OCR (fixes garbled text). Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/pdf-to-text/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output format]=Plain text (.txt)' \
-F 'settings[Text layout]=Keep line breaks' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/pdf-to-text/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output format]' => 'Plain text (.txt)',
'settings[Text layout]' => 'Keep line breaks',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/pdf-to-text/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output format]': 'Plain text (.txt)',
'settings[Text layout]': 'Keep line breaks',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output format]', 'Plain text (.txt)');
form.append('settings[Text layout]', 'Keep line breaks');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/pdf-to-text/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF в Word
pdf-to-word
Бесплатный конвертер PDF в Word от Convertavo превращает PDF в настоящий файл Word. Сохраните точный вид каждой страницы или получите слова в виде абзацев, которые можно редактировать. Сканы PDF тоже подходят: их страницы распознаются через OCR во время конвертации.
/api/v1/tools/pdf-to-word/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 8–20 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Page range] необязательно |
string |
Text. Пример: 1-3
|
settings[Output] необязательно |
string |
Word (.docx)OpenDocument (.odt)Rich text (.rtf) |
settings[Layout mode] необязательно |
string |
Same layout, editableKeep exact layoutFlowing textText only |
settings[Picture quality] необязательно |
string |
High (200 DPI)Very high (300 DPI)Smaller file (150 DPI) |
settings[Language] необязательно |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Document password] необязательно |
string |
Text. Пример: your-pdf-password
|
settings[Translate to (optional, machine translation)] необязательно |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] необязательно |
boolean | Run OCR on scanned pages. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Keep images and graphics. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Convert tables to Word tables. Отправьте 1, чтобы включить. |
switches[3] необязательно |
boolean | Keep fonts, sizes and colours. Отправьте 1, чтобы включить. |
switches[4] необязательно |
boolean | Leave out repeated headers, footers and page numbers. Отправьте 1, чтобы включить. |
switches[5] необязательно |
boolean | Start each PDF page on a new Word page. Отправьте 1, чтобы включить. |
switches[6] необязательно |
boolean | Add a table of contents from the headings. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/pdf-to-word/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output]=Word (.docx)' \
-F 'settings[Layout mode]=Same layout, editable' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/pdf-to-word/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output]' => 'Word (.docx)',
'settings[Layout mode]' => 'Same layout, editable',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/pdf-to-word/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output]': 'Word (.docx)',
'settings[Layout mode]': 'Same layout, editable',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output]', 'Word (.docx)');
form.append('settings[Layout mode]', 'Same layout, editable');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/pdf-to-word/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Повернуть PDF
rotate-pdf
Бесплатный инструмент Convertavo позволяет повернуть страницы PDF онлайн и сохранить изменения навсегда. Поверните весь файл, одну страницу или только те, что вышли неправильно. Он даже сам находит боковые и перевернутые страницы.
/api/v1/tools/rotate-pdf/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 2–4 секунды
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Rotation] необязательно |
string |
90° clockwise90° counter-clockwise180° |
settings[Apply to] необязательно |
string |
All pagesOdd pages onlyEven pages onlySelected pages |
settings[Selected pages] необязательно |
string |
Text. Пример: 3, 7
|
switches[0] необязательно |
boolean | Detect page orientation automatically. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Keep the original file as a copy. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/rotate-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Rotation]=90° clockwise' \
-F 'settings[Apply to]=All pages' \
-F 'settings[Selected pages]=3, 7' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/rotate-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Rotation]' => '90° clockwise',
'settings[Apply to]' => 'All pages',
'settings[Selected pages]' => '3, 7',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/rotate-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Rotation]': '90° clockwise',
'settings[Apply to]': 'All pages',
'settings[Selected pages]': '3, 7',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Rotation]', '90° clockwise');
form.append('settings[Apply to]', 'All pages');
form.append('settings[Selected pages]', '3, 7');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/rotate-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Разделить PDF
split-pdf
Бесплатный инструмент Convertavo разделяет PDF на отдельные файлы онлайн. Возьмите одну страницу, извлеките страницы с 3 по 7 или разбейте длинный отчет на части, вписав нужные диапазоны страниц. Это как ножницы для PDF прямо в браузере. Ничего не нужно устанавливать.
/api/v1/tools/split-pdf/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 2–6 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Pages to extract] необязательно |
string |
Text. Пример: 1-5, 12
|
settings[Filename prefix] необязательно |
string |
Text. Пример: part
|
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/split-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Pages to extract]=1-5, 12' \
-F 'settings[Filename prefix]=part'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/split-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Pages to extract]' => '1-5, 12',
'settings[Filename prefix]' => 'part',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/split-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Pages to extract]': '1-5, 12',
'settings[Filename prefix]': 'part',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Pages to extract]', '1-5, 12');
form.append('settings[Filename prefix]', 'part');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/split-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Снять пароль с PDF
unlock-pdf
Бесплатный инструмент Convertavo снимает пароль с PDF, чтобы файл открывался без запроса каждый раз. Многие банки защищают выписки датой рождения, и вводить ее каждый месяц быстро надоедает. Введите ее здесь один раз. Вы скачаете обычный PDF, который можно открыть, распечатать, объединить или конвертировать, как любой другой файл.
/api/v1/tools/unlock-pdf/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 2–5 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Document password] необязательно |
string |
Text. Пример: your-pdf-password
|
settings[Remove] необязательно |
string |
BothOpen passwordPermissions only |
switches[0] необязательно |
boolean | Allow printing after unlocking. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Allow copying text after unlocking. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Allow editing after unlocking. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/unlock-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Document password]=your-pdf-password' \
-F 'settings[Remove]=Both' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/unlock-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Document password]' => 'your-pdf-password',
'settings[Remove]' => 'Both',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/unlock-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Document password]': 'your-pdf-password',
'settings[Remove]': 'Both',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Document password]', 'your-pdf-password');
form.append('settings[Remove]', 'Both');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/unlock-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Изображения 7 outils
Сжать изображение
compress-image
Бесплатный компрессор изображений Convertavo уменьшает фото, не делая их размытыми. Большинство изображений становятся легче на 60–80 %, и разницы вы не увидите. Добавьте файлы JPG, PNG или WebP до 25 МБ, выберите качество и скачайте.
/api/v1/tools/compress-image/convert
- Принимает
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 4–10 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). Лимит размера зависит от вашего тарифа. |
settings[Compression] необязательно |
string |
Smart — no visible differenceMaximum — smallest fileLossless — pixel-perfectCustom qualityTarget file size |
settings[Quality] необязательно |
integer |
Whole number, 1–100. Пример: 80
|
settings[Target size (KB)] необязательно |
number |
Number. Пример: 200
|
settings[Output format] необязательно |
string |
Keep originalSmallest (auto)JPGPNGWebPAVIF |
settings[Resize] необязательно |
string |
Keep original sizeMax 3840 px (4K)Max 2560 pxMax 1920 px (Full HD)Max 1280 pxMax 1080 pxMax 800 pxScale to 75%Scale to 50%Scale to 25%Custom width and height |
settings[Max width (px)] необязательно |
number |
Number. Пример: 1920
|
settings[Max height (px)] необязательно |
number |
Number. Пример: 1080
|
settings[Background for transparency] необязательно |
string |
WhiteBlack |
settings[File names] необязательно |
string |
Keep original namesAdd "-compressed"Add "-min" |
switches[0] необязательно |
boolean | Strip EXIF and location data. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Convert PNG photos to JPG when smaller. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Keep the colour profile. Отправьте 1, чтобы включить. |
switches[3] необязательно |
boolean | Keep animation (GIF and WebP). Отправьте 1, чтобы включить. |
switches[4] необязательно |
boolean | Never make a file bigger. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/compress-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Compression]=Smart — no visible difference' \
-F 'settings[Quality]=80' \
-F 'settings[Target size (KB)]=200' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/compress-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Compression]' => 'Smart — no visible difference',
'settings[Quality]' => '80',
'settings[Target size (KB)]' => '200',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/compress-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Compression]': 'Smart — no visible difference',
'settings[Quality]': '80',
'settings[Target size (KB)]': '200',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Compression]', 'Smart — no visible difference');
form.append('settings[Quality]', '80');
form.append('settings[Target size (KB)]', '200');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/compress-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Обрезать изображение
crop-image
Нужно квадратное фото для Instagram или вертикальное для сторис? Бесплатный инструмент обрезки Convertavo позволяет натянуть рамку на нужную часть прямо в браузере. Большинство обрезок готовы за 2–5 секунд.
/api/v1/tools/crop-image/convert
- Принимает
- JPG, PNG, WebP
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 2–5 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (JPG, PNG, WebP). Лимит размера зависит от вашего тарифа. |
settings[Aspect ratio] необязательно |
string |
Free1:1 square16:94:33:29:16 story |
settings[Width (px)] необязательно |
number |
Number. Пример: 1080
|
settings[Height (px)] необязательно |
number |
Number. Пример: 1080
|
settings[Anchor] необязательно |
string |
CentreTopBottomLeftRight |
switches[0] необязательно |
boolean | Apply the same crop to every image. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/crop-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Aspect ratio]=Free' \
-F 'settings[Width (px)]=1080' \
-F 'settings[Height (px)]=1080' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/crop-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Aspect ratio]' => 'Free',
'settings[Width (px)]' => '1080',
'settings[Height (px)]' => '1080',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/crop-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Aspect ratio]': 'Free',
'settings[Width (px)]': '1080',
'settings[Height (px)]': '1080',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Aspect ratio]', 'Free');
form.append('settings[Width (px)]', '1080');
form.append('settings[Height (px)]', '1080');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/crop-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
HEIC в JPG
heic-to-jpg
Вам прислали фото с iPhone, а компьютер с Windows его не открывает? Бесплатный конвертер HEIC в JPG от Convertavo превращает его в обычный JPG, который откроет любой телефон, компьютер и сайт. Загрузите одно фото или целую папку. Обычно это занимает 3–7 секунд.
/api/v1/tools/heic-to-jpg/convert
- Принимает
- HEIC, HEIF
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 3–7 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (HEIC, HEIF). Лимит размера зависит от вашего тарифа. |
settings[JPG quality] необязательно |
integer |
Whole number, 1–100. Пример: 80
|
settings[Output format] необязательно |
string |
JPGPNGWebP |
settings[Max dimension] необязательно |
number |
Number. Пример: 2048
|
switches[0] необязательно |
boolean | Keep EXIF data such as date and camera. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Keep GPS location data. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/heic-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@IMG_0412.heic" \
-F "files[]=@IMG_0413.heic" \
-F 'settings[JPG quality]=80' \
-F 'settings[Output format]=JPG' \
-F 'settings[Max dimension]=2048' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/heic-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('IMG_0412.heic'),
'files[1]' => new CURLFile('IMG_0413.heic'),
'settings[JPG quality]' => '80',
'settings[Output format]' => 'JPG',
'settings[Max dimension]' => '2048',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/heic-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('IMG_0412.heic', 'rb')), ('files[]', open('IMG_0413.heic', 'rb'))],
data={
'settings[JPG quality]': '80',
'settings[Output format]': 'JPG',
'settings[Max dimension]': '2048',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('IMG_0412.heic')]), basename('IMG_0412.heic'));
form.append('files[]', new Blob([await readFile('IMG_0413.heic')]), basename('IMG_0413.heic'));
form.append('settings[JPG quality]', '80');
form.append('settings[Output format]', 'JPG');
form.append('settings[Max dimension]', '2048');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/heic-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PNG в JPG
png-to-jpg
Телефон сохраняет каждый скриншот в PNG, и такие файлы быстро копятся. Бесплатный конвертер PNG в JPG от Convertavo превращает их в гораздо меньшие JPG, которые выглядят так же. В нашем примере скриншот на 596 КБ превратился в 162 КБ. Добавьте один файл или целую папку — обычно это занимает 2–6 секунд.
/api/v1/tools/png-to-jpg/convert
- Принимает
- PNG
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 2–6 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (PNG). Лимит размера зависит от вашего тарифа. |
settings[JPG quality] необязательно |
integer |
Whole number, 1–100. Пример: 80
|
settings[Background for transparency] необязательно |
string |
WhiteBlackCustom colour |
settings[Custom colour] необязательно |
string |
Text. Пример: #F5E6CC
|
settings[Max width] необязательно |
number |
Number. Пример: 1920
|
switches[0] необязательно |
boolean | Strip metadata. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Optimise for the web. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Keep the colour profile. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/png-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@image.png" \
-F "files[]=@image-2.png" \
-F 'settings[JPG quality]=80' \
-F 'settings[Background for transparency]=White' \
-F 'settings[Custom colour]=#F5E6CC' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/png-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('image.png'),
'files[1]' => new CURLFile('image-2.png'),
'settings[JPG quality]' => '80',
'settings[Background for transparency]' => 'White',
'settings[Custom colour]' => '#F5E6CC',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/png-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('image.png', 'rb')), ('files[]', open('image-2.png', 'rb'))],
data={
'settings[JPG quality]': '80',
'settings[Background for transparency]': 'White',
'settings[Custom colour]': '#F5E6CC',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('image.png')]), basename('image.png'));
form.append('files[]', new Blob([await readFile('image-2.png')]), basename('image-2.png'));
form.append('settings[JPG quality]', '80');
form.append('settings[Background for transparency]', 'White');
form.append('settings[Custom colour]', '#F5E6CC');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/png-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Удалить фон
remove-background
Нужен только человек или товар, без беспорядка в комнате за ним? Бесплатный инструмент Convertavo для удаления фона вырезает объект и отдает чистый PNG с прозрачным фоном. Никаких кистей и ручной обводки. Обычно это занимает 8–20 секунд.
/api/v1/tools/remove-background/convert
- Принимает
- JPG, PNG, WebP
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 8–20 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (JPG, PNG, WebP). Лимит размера зависит от вашего тарифа. |
settings[Output] необязательно |
string |
Transparent PNGWhite backgroundCustom colour |
settings[Custom colour] необязательно |
string |
Text. Пример: #F5E6CC
|
settings[Edge refinement] необязательно |
string |
StandardSoft (hair and fur)Sharp (products) |
switches[0] необязательно |
boolean | Keep the original resolution. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Add a soft shadow under the subject. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Crop tightly to the subject. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/remove-background/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Output]=Transparent PNG' \
-F 'settings[Custom colour]=#F5E6CC' \
-F 'settings[Edge refinement]=Standard' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/remove-background/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Output]' => 'Transparent PNG',
'settings[Custom colour]' => '#F5E6CC',
'settings[Edge refinement]' => 'Standard',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/remove-background/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Output]': 'Transparent PNG',
'settings[Custom colour]': '#F5E6CC',
'settings[Edge refinement]': 'Standard',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Output]', 'Transparent PNG');
form.append('settings[Custom colour]', '#F5E6CC');
form.append('settings[Edge refinement]', 'Standard');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/remove-background/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Изменить размер изображения
resize-image
Задайте точную ширину и высоту или измените размер в процентах. Можно также ориентироваться на размер печати или лимит в КБ. Соотношение сторон зафиксировано по умолчанию.
/api/v1/tools/resize-image/convert
- Принимает
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 3–8 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). Лимит размера зависит от вашего тарифа. |
settings[Resize by] необязательно |
string |
Exact size (width × height)Popular size (preset)PercentageLongest sidePrint size (cm, mm or inches)File size (KB) |
settings[Preset size] необязательно |
string |
Instagram · Square post — 1080 × 1080Instagram · Portrait post — 1080 × 1350Instagram · Landscape post — 1080 × 566Instagram · Story or Reel — 1080 × 1920Facebook · Post — 1200 × 630Facebook · Cover photo — 851 × 315Facebook · Profile picture — 320 × 320X (Twitter) · Post — 1600 × 900X (Twitter) · Header — 1500 × 500LinkedIn · Post — 1200 × 627LinkedIn · Banner — 1584 × 396YouTube · Thumbnail — 1280 × 720YouTube · Channel banner — 2560 × 1440TikTok · Video cover — 1080 × 1920Pinterest · Pin — 1000 × 1500WhatsApp · Profile photo — 500 × 500WhatsApp · Status — 1080 × 1920Passport photo · 2 × 2 in (US) — 600 × 600Passport photo · 35 × 45 mm — 413 × 531Website · Blog image — 1200 × 800Email header — 600 × 200App icon or favicon — 512 × 512HD — 1280 × 720Full HD — 1920 × 10804K UHD — 3840 × 2160A4 page at 300 DPI — 2480 × 3508 |
settings[Width (px)] необязательно |
number |
Number. Пример: 1920
|
settings[Height (px)] необязательно |
number |
Number. Пример: 1080
|
settings[Percentage (%)] необязательно |
number |
Number. Пример: 50
|
settings[Longest side (px)] необязательно |
number |
Number. Пример: 1920
|
settings[Print width] необязательно |
number |
Number. Пример: 10
|
settings[Print height] необязательно |
number |
Number. Пример: 15
|
settings[Unit] необязательно |
string |
cmmminches |
settings[Target file size (KB)] необязательно |
number |
Number. Пример: 200
|
settings[Resize mode] необязательно |
string |
Fit insideFill and cropPad to exact sizeStretch |
settings[Crop focus] необязательно |
string |
Smart — find the subjectCentreTopBottomLeftRight |
settings[Padding] необязательно |
string |
WhiteBlackTransparentBlurred pictureAverage colour |
settings[Output format] необязательно |
string |
Keep originalJPGPNGWebPAVIF |
settings[Quality] необязательно |
integer |
Whole number, 1–100. Пример: 80
|
settings[Resampling] необязательно |
string |
Lanczos — sharpest, for photosBicubic — smoothBilinear — softestNearest — pixel art and icons |
settings[Print resolution (DPI)] необязательно |
string |
Keep original7296150300600 |
settings[File names] необязательно |
string |
Keep original namesAdd "-resized"Add the new size (e.g. -1080x1080) |
switches[0] необязательно |
boolean | Lock aspect ratio. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Do not enlarge images that are already smaller. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Sharpen after resizing. Отправьте 1, чтобы включить. |
switches[3] необязательно |
boolean | Strip EXIF and location data. Отправьте 1, чтобы включить. |
switches[4] необязательно |
boolean | Keep animation (GIF and WebP). Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/resize-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Resize by]=Exact size (width × height)' \
-F 'settings[Preset size]=Instagram · Square post — 1080 × 1080' \
-F 'settings[Width (px)]=1920' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/resize-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Resize by]' => 'Exact size (width × height)',
'settings[Preset size]' => 'Instagram · Square post — 1080 × 1080',
'settings[Width (px)]' => '1920',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/resize-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Resize by]': 'Exact size (width × height)',
'settings[Preset size]': 'Instagram · Square post — 1080 × 1080',
'settings[Width (px)]': '1920',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Resize by]', 'Exact size (width × height)');
form.append('settings[Preset size]', 'Instagram · Square post — 1080 × 1080');
form.append('settings[Width (px)]', '1920');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/resize-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Конвертер WebP
webp-converter
Сохранили картинку с сайта, а она оказалась файлом .webp? Бесплатный конвертер WebP от Convertavo превращает ее в JPG или PNG, который открывается везде. Он работает и в обратную сторону, превращая JPG и PNG в маленькие WebP для вашего сайта за 2–5 секунд.
/api/v1/tools/webp-converter/convert
- Принимает
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 2–5 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). Лимит размера зависит от вашего тарифа. |
settings[Convert to] необязательно |
string |
WebPJPGPNGAVIFGIF (keeps animation)ICO (favicon)TIFFBMP |
settings[Compression] необязательно |
string |
Smart — no visible differenceMaximum — smallest fileLossless — pixel-perfectCustom qualityTarget file size |
settings[Quality] необязательно |
integer |
Whole number, 1–100. Пример: 80
|
settings[Target size (KB)] необязательно |
number |
Number. Пример: 200
|
settings[Resize] необязательно |
string |
Keep original sizeMax 3840 px (4K)Max 2560 pxMax 1920 px (Full HD)Max 1280 pxMax 1080 pxMax 800 pxScale to 75%Scale to 50%Scale to 25%Custom width and height |
settings[Max width (px)] необязательно |
number |
Number. Пример: 1920
|
settings[Max height (px)] необязательно |
number |
Number. Пример: 1080
|
settings[Background for transparency] необязательно |
string |
WhiteBlack |
settings[WebP effort] необязательно |
string |
BalancedFastSmallest file (slower) |
settings[File names] необязательно |
string |
Keep original namesAdd "-compressed"Add "-min" |
switches[0] необязательно |
boolean | Keep EXIF data such as date and camera. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Lossless — no quality loss, larger file. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Keep the colour profile. Отправьте 1, чтобы включить. |
switches[3] необязательно |
boolean | Keep animation (GIF and WebP). Отправьте 1, чтобы включить. |
switches[4] необязательно |
boolean | Keep exact colours under transparency. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/webp-converter/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Convert to]=WebP' \
-F 'settings[Compression]=Smart — no visible difference' \
-F 'settings[Quality]=80' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/webp-converter/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Convert to]' => 'WebP',
'settings[Compression]' => 'Smart — no visible difference',
'settings[Quality]' => '80',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/webp-converter/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Convert to]': 'WebP',
'settings[Compression]': 'Smart — no visible difference',
'settings[Quality]': '80',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Convert to]', 'WebP');
form.append('settings[Compression]', 'Smart — no visible difference');
form.append('settings[Quality]', '80');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/webp-converter/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
OCR 3 outils
Изображение в Excel
image-to-excel
Загрузите фото, скриншот или скан страницы с таблицей и получите настоящую электронную таблицу, где каждое значение в своей ячейке. Бесплатно, для файлов до 25 МБ аккаунт не нужен.
/api/v1/tools/image-to-excel/convert
- Принимает
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 3–10 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). Лимит размера зависит от вашего тарифа. |
settings[Language] необязательно |
string |
Auto-detectEnglishUrduArabicChinese |
settings[Output format] необязательно |
string |
Excel (.xlsx)CSV (.csv) |
settings[Header row] необязательно |
string |
Detect automaticallyFirst row is headerNo header |
settings[Decimal separator] необязательно |
string |
Point (1.50)Comma (1,50) |
switches[0] необязательно |
boolean | Merge cells that span multiple columns. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Keep empty rows. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Treat numbers as text. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/image-to-excel/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Output format]=Excel (.xlsx)' \
-F 'settings[Header row]=Detect automatically' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/image-to-excel/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Language]' => 'Auto-detect',
'settings[Output format]' => 'Excel (.xlsx)',
'settings[Header row]' => 'Detect automatically',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/image-to-excel/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Output format]': 'Excel (.xlsx)',
'settings[Header row]': 'Detect automatically',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Output format]', 'Excel (.xlsx)');
form.append('settings[Header row]', 'Detect automatically');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/image-to-excel/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Изображение в текст
image-to-text
Загрузите фото, скриншот или скан и получите текст, который можно выделять, копировать, редактировать и искать. Бесплатно, для файлов до 25 МБ аккаунт не нужен.
/api/v1/tools/image-to-text/convert
- Принимает
- JPG, PNG, HEIC, WebP, TIFF, BMP, GIF
- Файлов в запросе
- До размера пакета вашего тарифа (5 на Free, до 100 на Business)
- Обычное время
- 5–15 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file[] | Один или несколько файлов (JPG, PNG, HEIC, WebP, TIFF, BMP, GIF). Лимит размера зависит от вашего тарифа. |
settings[Language] необязательно |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Second language (mixed text)] необязательно |
string |
NoneEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Image mode] необязательно |
string |
AutoPrinted documentScreenshotPhoto of a pageHandwritingSign or sparse textSingle lineMath formula (LaTeX) |
settings[Layout] необязательно |
string |
Keep line breaksMerge into paragraphsPreserve layout (columns & spacing)Single block of text |
settings[Output format] необязательно |
string |
Plain text (.txt)Word (.docx)Searchable PDFMarkdown (.md)JSON (words, positions, confidence) |
settings[Translate to (optional, machine translation)] необязательно |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] необязательно |
boolean | Enhance contrast before reading. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Correct page skew automatically. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Flag low-confidence words. Отправьте 1, чтобы включить. |
switches[3] необязательно |
boolean | Clean up stray symbols and noise. Отправьте 1, чтобы включить. |
switches[4] необязательно |
boolean | Combine a batch into one file. Отправьте 1, чтобы включить. |
switches[5] необязательно |
boolean | Detect QR codes and barcodes. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/image-to-text/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Second language (mixed text)]=None' \
-F 'settings[Image mode]=Auto' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/image-to-text/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Language]' => 'Auto-detect',
'settings[Second language (mixed text)]' => 'None',
'settings[Image mode]' => 'Auto',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/image-to-text/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Second language (mixed text)]': 'None',
'settings[Image mode]': 'Auto',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Second language (mixed text)]', 'None');
form.append('settings[Image mode]', 'Auto');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/image-to-text/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF OCR
pdf-ocr
PDF OCR от Convertavo превращает отсканированный PDF в PDF с поиском. Загрузите файл, выберите язык и скачайте копию, в которой можно искать, выделять и копировать текст.
/api/v1/tools/pdf-ocr/convert
- Принимает
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 10–40 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PDF). Лимит размера зависит от вашего тарифа. |
settings[Language] необязательно |
string |
Auto-detectEnglishSpanishUrduArabicChinese |
settings[Page range] необязательно |
string |
Text. Пример: 1-3
|
settings[Output] необязательно |
string |
Searchable PDF (same look)Searchable PDF + text file |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/pdf-ocr/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Page range]=1-3' \
-F 'settings[Output]=Searchable PDF (same look)'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/pdf-ocr/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Language]' => 'Auto-detect',
'settings[Page range]' => '1-3',
'settings[Output]' => 'Searchable PDF (same look)',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/pdf-ocr/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Page range]': '1-3',
'settings[Output]': 'Searchable PDF (same look)',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Page range]', '1-3');
form.append('settings[Output]', 'Searchable PDF (same look)');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/pdf-ocr/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Видео и аудио 3 outils
Сжать видео
compress-video
Видео слишком большое для почты или WhatsApp его не отправляет? Бесплатный видеокомпрессор Convertavo уменьшает его до нужного размера, не превращая в кашу. Загрузите MP4, MOV, MKV или AVI, впишите нужный размер — большинство видео готовы за 1–4 минуты.
/api/v1/tools/compress-video/convert
- Принимает
- MP4, MOV, MKV, AVI
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 60–240 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (MP4, MOV, MKV, AVI). Лимит размера зависит от вашего тарифа. |
settings[Compression level] необязательно |
string |
Balanced (recommended)MaximumLight — best quality |
settings[Target size (MB)] необязательно |
number |
Number. Пример: 25
|
settings[Resolution] необязательно |
string |
Keep original1080p720p480p |
settings[Codec] необязательно |
string |
H.264H.265 |
switches[0] необязательно |
boolean | Reduce the frame rate to 30 fps. Отправьте 1, чтобы включить. |
switches[1] необязательно |
boolean | Lower the audio bitrate to 128 kbps. Отправьте 1, чтобы включить. |
switches[2] необязательно |
boolean | Remove audio entirely. Отправьте 1, чтобы включить. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/compress-video/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Compression level]=Balanced (recommended)' \
-F 'settings[Target size (MB)]=25' \
-F 'settings[Resolution]=Keep original' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/compress-video/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Compression level]' => 'Balanced (recommended)',
'settings[Target size (MB)]' => '25',
'settings[Resolution]' => 'Keep original',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/compress-video/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Compression level]': 'Balanced (recommended)',
'settings[Target size (MB)]': '25',
'settings[Resolution]': 'Keep original',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Compression level]', 'Balanced (recommended)');
form.append('settings[Target size (MB)]', '25');
form.append('settings[Resolution]', 'Keep original');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/compress-video/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
MOV в MP4
mov-to-mp4
Видео с iPhone нормально играет на телефоне, а на ПК с Windows не открывается? Бесплатный конвертер MOV в MP4 от Convertavo решает это за один шаг, ничего не нужно устанавливать. Загрузите MOV, оставьте настройки по умолчанию — большинство видео готовы за 30–120 секунд.
/api/v1/tools/mov-to-mp4/convert
- Принимает
- MOV, AVI, MKV, WebM
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 30–120 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (MOV, AVI, MKV, WebM). Лимит размера зависит от вашего тарифа. |
settings[Quality] необязательно |
string |
Same as source1080p720p480p |
settings[Video codec] необязательно |
string |
H.264 (most compatible)H.265 (smaller files) |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/mov-to-mp4/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Quality]=Same as source' \
-F 'settings[Video codec]=H.264 (most compatible)'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/mov-to-mp4/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Quality]' => 'Same as source',
'settings[Video codec]' => 'H.264 (most compatible)',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/mov-to-mp4/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Quality]': 'Same as source',
'settings[Video codec]': 'H.264 (most compatible)',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Quality]', 'Same as source');
form.append('settings[Video codec]', 'H.264 (most compatible)');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/mov-to-mp4/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
MP4 в MP3
mp4-to-mp3
Нужен только звук из видео, например лекция в дорогу или песня из ролика с концерта? Бесплатный конвертер MP4 в MP3 от Convertavo оставляет звук и убирает картинку. Загрузите видео, выберите качество и скачайте MP3 — обычно меньше чем за минуту.
/api/v1/tools/mp4-to-mp3/convert
- Принимает
- MP4, MOV, MKV, AVI
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 20–60 секунд
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (MP4, MOV, MKV, AVI). Лимит размера зависит от вашего тарифа. |
settings[Bitrate] необязательно |
string |
192 kbps (recommended)320 kbps128 kbps |
settings[Channels] необязательно |
string |
StereoMono |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/mp4-to-mp3/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Bitrate]=192 kbps (recommended)' \
-F 'settings[Channels]=Stereo'
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/mp4-to-mp3/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Bitrate]' => '192 kbps (recommended)',
'settings[Channels]' => 'Stereo',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/mp4-to-mp3/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Bitrate]': '192 kbps (recommended)',
'settings[Channels]': 'Stereo',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Bitrate]', '192 kbps (recommended)');
form.append('settings[Channels]', 'Stereo');
const response = await fetch('https://convertavo.com/ru/api/v1/tools/mp4-to-mp3/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
ИИ 2 outils
Детектор ИИ-арта
ai-art-detector
Нашли рисунок в сети, и что-то в нем кажется странным? Бесплатный детектор ИИ-арта Convertavo проверяет, не вышел ли рисунок, картина или иллюстрация из генератора изображений. Вы получаете не просто оценку, а видите признаки. Загрузите JPG, PNG или WebP — ответ обычно готов за 2–4 секунды.
/api/v1/tools/ai-art-detector/convert
- Принимает
- JPG, PNG, WebP
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 2–4 секунды
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (JPG, PNG, WebP). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/ai-art-detector/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/ai-art-detector/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/ai-art-detector/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/ai-art-detector/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Детектор ИИ-изображений
ai-image-detector
Загрузите изображение, и детектор ИИ-изображений Convertavo оценит, было ли оно сгенерировано. Это оценка, а не доказательство. Вы получите вердикт, уверенность модели и доказательства. Если честный ответ — «нельзя сказать», отчёт так и напишет.
/api/v1/tools/ai-image-detector/convert
- Принимает
- JPG, PNG, WebP
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- 2–4 секунды
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (JPG, PNG, WebP). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/ai-image-detector/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/ai-image-detector/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/ai-image-detector/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/ai-image-detector/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Ссылки 5 outils
Массовое сокращение ссылок
bulk-url-shortener
Нужно сократить целый список ссылок? Вставьте их в массовый сокращатель ссылок Convertavo, по одной в строке, или загрузите файл CSV. Все короткие ссылки вернутся одной таблицей, у каждой свой QR-код. Это бесплатно, а для списка до 50 ссылок даже аккаунт не нужен.
/api/v1/tools/bulk-url-shortener/convert
- Принимает
- Любой файл
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- минута-две
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (любой тип). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/bulk-url-shortener/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/bulk-url-shortener/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/bulk-url-shortener/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/bulk-url-shortener/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Развернуть ссылку
expand-url
Сомневаетесь в короткой ссылке, которую вам прислали? Вставьте ее в проверку коротких ссылок Convertavo, и вы увидите настоящий адрес еще до того, как нажмете на нее. Мы проходим по ссылке за вас и показываем полный адрес, каждую остановку по пути и проверку безопасности. Без аккаунта и без приложения.
/api/v1/tools/expand-url/convert
- Принимает
- Любой файл
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- мгновенно
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (любой тип). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/expand-url/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/expand-url/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/expand-url/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/expand-url/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Ссылка в био
link-in-bio
В профиле место только для одной ссылки, а поделиться нужно пятью вещами. Сделайте бесплатную страницу-мультиссылку в Convertavo, и одна ссылка откроет их все — с дизайнами, видео, формами подписки и статистикой, за которые другие сервисы берут деньги. Без рекламы.
/api/v1/tools/link-in-bio/convert
- Принимает
- Любой файл
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- мгновенно
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (любой тип). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/link-in-bio/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/link-in-bio/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/link-in-bio/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/link-in-bio/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Сократить ссылку
url-shortener
Ссылка такая длинная, что ломается в СМС? Вставьте ее в бесплатный сокращатель ссылок Convertavo, и примерно через секунду получите короткую. У каждой ссылки есть QR-код и счетчик кликов. Без аккаунта. И ничего не спрятано за платным тарифом.
/api/v1/tools/url-shortener/convert
- Принимает
- Любой файл
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- мгновенно
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (любой тип). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/url-shortener/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/url-shortener/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/url-shortener/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/url-shortener/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Генератор UTM-меток
utm-builder
Посетителей правда привела рассылка или все-таки пост в Instagram? Пропустите ссылку через генератор UTM-меток Convertavo перед тем, как делиться, и аналитика наконец это покажет. Размеченная ссылка получается длинной и некрасивой (это нормально), поэтому сократите ее прямо здесь. Без аккаунта и бесплатно.
/api/v1/tools/utm-builder/convert
- Принимает
- Любой файл
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- мгновенно
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (любой тип). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/utm-builder/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/utm-builder/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/utm-builder/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/utm-builder/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Бизнес 1 outil
Генератор счетов
invoice-generator
Создайте профессиональный счет на языке и в валюте вашего клиента. Налоги, скидки и удержание считаются точно, а PDF — без водяного знака и без аккаунта.
/api/v1/tools/invoice-generator/convert
- Принимает
- Любой файл
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- мгновенно
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (любой тип). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/invoice-generator/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/invoice-generator/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/invoice-generator/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/invoice-generator/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
QR-коды 2 outils
Генератор QR-кодов
qr-code-generator
Создайте QR-код для ссылки, сети Wi-Fi, визитки или чата WhatsApp. Выберите цвета, форму точек, рамку и логотип, затем скачайте его.
/api/v1/tools/qr-code-generator/convert
- Принимает
- Любой файл
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- мгновенно
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (любой тип). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/qr-code-generator/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/qr-code-generator/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/qr-code-generator/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/qr-code-generator/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Сканер QR-кодов
qr-code-scanner
Бесплатный сканер QR-кодов и штрихкодов. Сканируйте камерой, с фото, скриншота или PDF, а каждая ссылка проверяется до того, как вы ее откроете.
/api/v1/tools/qr-code-scanner/convert
- Принимает
- PNG, JPG, WebP, GIF, PDF
- Файлов в запросе
- Только один (по одному файлу в запросе)
- Обычное время
- мгновенно
- Попробовать
- Открыть страницу инструмента →
Тело запроса multipart/form-data
| Поле | Тип | Описание |
|---|---|---|
files[] обязательно |
file | Файл для конвертации (PNG, JPG, WebP, GIF, PDF). Лимит размера зависит от вашего тарифа. |
Пример запроса
curl -X POST https://convertavo.com/ru/api/v1/tools/qr-code-scanner/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@image.png"
<?php
$ch = curl_init('https://convertavo.com/ru/api/v1/tools/qr-code-scanner/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('image.png'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/ru/api/v1/tools/qr-code-scanner/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('image.png', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('image.png')]), basename('image.png'));
const response = await fetch('https://convertavo.com/ru/api/v1/tools/qr-code-scanner/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);